sgi-xpc: clean up numerous globals
Introduce xpc_arch_ops and eliminate numerous individual global definitions. Signed-off-by: Robin Holt <holt@sgi.com> Cc: Dean Nelson <dcn@sgi.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
committed by
Linus Torvalds
parent
efdd06ed18
commit
a7665b0a38
@@ -39,7 +39,7 @@ xpc_process_connect(struct xpc_channel *ch, unsigned long *irq_flags)
|
||||
|
||||
if (!(ch->flags & XPC_C_SETUP)) {
|
||||
spin_unlock_irqrestore(&ch->lock, *irq_flags);
|
||||
ret = xpc_setup_msg_structures(ch);
|
||||
ret = xpc_arch_ops.setup_msg_structures(ch);
|
||||
spin_lock_irqsave(&ch->lock, *irq_flags);
|
||||
|
||||
if (ret != xpSuccess)
|
||||
@@ -53,7 +53,7 @@ xpc_process_connect(struct xpc_channel *ch, unsigned long *irq_flags)
|
||||
|
||||
if (!(ch->flags & XPC_C_OPENREPLY)) {
|
||||
ch->flags |= XPC_C_OPENREPLY;
|
||||
xpc_send_chctl_openreply(ch, irq_flags);
|
||||
xpc_arch_ops.send_chctl_openreply(ch, irq_flags);
|
||||
}
|
||||
|
||||
if (!(ch->flags & XPC_C_ROPENREPLY))
|
||||
@@ -61,7 +61,7 @@ xpc_process_connect(struct xpc_channel *ch, unsigned long *irq_flags)
|
||||
|
||||
if (!(ch->flags & XPC_C_OPENCOMPLETE)) {
|
||||
ch->flags |= (XPC_C_OPENCOMPLETE | XPC_C_CONNECTED);
|
||||
xpc_send_chctl_opencomplete(ch, irq_flags);
|
||||
xpc_arch_ops.send_chctl_opencomplete(ch, irq_flags);
|
||||
}
|
||||
|
||||
if (!(ch->flags & XPC_C_ROPENCOMPLETE))
|
||||
@@ -100,7 +100,7 @@ xpc_process_disconnect(struct xpc_channel *ch, unsigned long *irq_flags)
|
||||
|
||||
if (part->act_state == XPC_P_AS_DEACTIVATING) {
|
||||
/* can't proceed until the other side disengages from us */
|
||||
if (xpc_partition_engaged(ch->partid))
|
||||
if (xpc_arch_ops.partition_engaged(ch->partid))
|
||||
return;
|
||||
|
||||
} else {
|
||||
@@ -112,7 +112,7 @@ xpc_process_disconnect(struct xpc_channel *ch, unsigned long *irq_flags)
|
||||
|
||||
if (!(ch->flags & XPC_C_CLOSEREPLY)) {
|
||||
ch->flags |= XPC_C_CLOSEREPLY;
|
||||
xpc_send_chctl_closereply(ch, irq_flags);
|
||||
xpc_arch_ops.send_chctl_closereply(ch, irq_flags);
|
||||
}
|
||||
|
||||
if (!(ch->flags & XPC_C_RCLOSEREPLY))
|
||||
@@ -122,7 +122,7 @@ xpc_process_disconnect(struct xpc_channel *ch, unsigned long *irq_flags)
|
||||
/* wake those waiting for notify completion */
|
||||
if (atomic_read(&ch->n_to_notify) > 0) {
|
||||
/* we do callout while holding ch->lock, callout can't block */
|
||||
xpc_notify_senders_of_disconnect(ch);
|
||||
xpc_arch_ops.notify_senders_of_disconnect(ch);
|
||||
}
|
||||
|
||||
/* both sides are disconnected now */
|
||||
@@ -136,7 +136,7 @@ xpc_process_disconnect(struct xpc_channel *ch, unsigned long *irq_flags)
|
||||
DBUG_ON(atomic_read(&ch->n_to_notify) != 0);
|
||||
|
||||
/* it's now safe to free the channel's message queues */
|
||||
xpc_teardown_msg_structures(ch);
|
||||
xpc_arch_ops.teardown_msg_structures(ch);
|
||||
|
||||
ch->func = NULL;
|
||||
ch->key = NULL;
|
||||
@@ -148,8 +148,9 @@ xpc_process_disconnect(struct xpc_channel *ch, unsigned long *irq_flags)
|
||||
|
||||
/*
|
||||
* Mark the channel disconnected and clear all other flags, including
|
||||
* XPC_C_SETUP (because of call to xpc_teardown_msg_structures()) but
|
||||
* not including XPC_C_WDISCONNECT (if it was set).
|
||||
* XPC_C_SETUP (because of call to
|
||||
* xpc_arch_ops.teardown_msg_structures()) but not including
|
||||
* XPC_C_WDISCONNECT (if it was set).
|
||||
*/
|
||||
ch->flags = (XPC_C_DISCONNECTED | (ch->flags & XPC_C_WDISCONNECT));
|
||||
|
||||
@@ -395,7 +396,8 @@ again:
|
||||
DBUG_ON(args->local_nentries == 0);
|
||||
DBUG_ON(args->remote_nentries == 0);
|
||||
|
||||
ret = xpc_save_remote_msgqueue_pa(ch, args->local_msgqueue_pa);
|
||||
ret = xpc_arch_ops.save_remote_msgqueue_pa(ch,
|
||||
args->local_msgqueue_pa);
|
||||
if (ret != xpSuccess) {
|
||||
XPC_DISCONNECT_CHANNEL(ch, ret, &irq_flags);
|
||||
goto out;
|
||||
@@ -531,7 +533,7 @@ xpc_connect_channel(struct xpc_channel *ch)
|
||||
/* initiate the connection */
|
||||
|
||||
ch->flags |= (XPC_C_OPENREQUEST | XPC_C_CONNECTING);
|
||||
xpc_send_chctl_openrequest(ch, &irq_flags);
|
||||
xpc_arch_ops.send_chctl_openrequest(ch, &irq_flags);
|
||||
|
||||
xpc_process_connect(ch, &irq_flags);
|
||||
|
||||
@@ -549,7 +551,7 @@ xpc_process_sent_chctl_flags(struct xpc_partition *part)
|
||||
int ch_number;
|
||||
u32 ch_flags;
|
||||
|
||||
chctl.all_flags = xpc_get_chctl_all_flags(part);
|
||||
chctl.all_flags = xpc_arch_ops.get_chctl_all_flags(part);
|
||||
|
||||
/*
|
||||
* Initiate channel connections for registered channels.
|
||||
@@ -598,7 +600,7 @@ xpc_process_sent_chctl_flags(struct xpc_partition *part)
|
||||
*/
|
||||
|
||||
if (chctl.flags[ch_number] & XPC_MSG_CHCTL_FLAGS)
|
||||
xpc_process_msg_chctl_flags(part, ch_number);
|
||||
xpc_arch_ops.process_msg_chctl_flags(part, ch_number);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -774,7 +776,7 @@ xpc_disconnect_channel(const int line, struct xpc_channel *ch,
|
||||
XPC_C_ROPENREQUEST | XPC_C_ROPENREPLY |
|
||||
XPC_C_CONNECTING | XPC_C_CONNECTED);
|
||||
|
||||
xpc_send_chctl_closerequest(ch, irq_flags);
|
||||
xpc_arch_ops.send_chctl_closerequest(ch, irq_flags);
|
||||
|
||||
if (channel_was_connected)
|
||||
ch->flags |= XPC_C_WASCONNECTED;
|
||||
@@ -881,8 +883,8 @@ xpc_initiate_send(short partid, int ch_number, u32 flags, void *payload,
|
||||
DBUG_ON(payload == NULL);
|
||||
|
||||
if (xpc_part_ref(part)) {
|
||||
ret = xpc_send_payload(&part->channels[ch_number], flags,
|
||||
payload, payload_size, 0, NULL, NULL);
|
||||
ret = xpc_arch_ops.send_payload(&part->channels[ch_number],
|
||||
flags, payload, payload_size, 0, NULL, NULL);
|
||||
xpc_part_deref(part);
|
||||
}
|
||||
|
||||
@@ -933,9 +935,8 @@ xpc_initiate_send_notify(short partid, int ch_number, u32 flags, void *payload,
|
||||
DBUG_ON(func == NULL);
|
||||
|
||||
if (xpc_part_ref(part)) {
|
||||
ret = xpc_send_payload(&part->channels[ch_number], flags,
|
||||
payload, payload_size, XPC_N_CALL, func,
|
||||
key);
|
||||
ret = xpc_arch_ops.send_payload(&part->channels[ch_number],
|
||||
flags, payload, payload_size, XPC_N_CALL, func, key);
|
||||
xpc_part_deref(part);
|
||||
}
|
||||
return ret;
|
||||
@@ -949,7 +950,7 @@ xpc_deliver_payload(struct xpc_channel *ch)
|
||||
{
|
||||
void *payload;
|
||||
|
||||
payload = xpc_get_deliverable_payload(ch);
|
||||
payload = xpc_arch_ops.get_deliverable_payload(ch);
|
||||
if (payload != NULL) {
|
||||
|
||||
/*
|
||||
@@ -1003,7 +1004,7 @@ xpc_initiate_received(short partid, int ch_number, void *payload)
|
||||
DBUG_ON(ch_number < 0 || ch_number >= part->nchannels);
|
||||
|
||||
ch = &part->channels[ch_number];
|
||||
xpc_received_payload(ch, payload);
|
||||
xpc_arch_ops.received_payload(ch, payload);
|
||||
|
||||
/* the call to xpc_msgqueue_ref() was done by xpc_deliver_payload() */
|
||||
xpc_msgqueue_deref(ch);
|
||||
|
Reference in New Issue
Block a user