Commit d7893ddd authored by Michael Ellerman's avatar Michael Ellerman Committed by Jeff Garzik

[PATCH] iseries_veth: Remove redundant message stack lock

The iseries_veth driver keeps a stack of messages for each connection
and a lock to protect the stack. However there is also a per-connection lock
which makes the message stack lock redundant.

Remove the message stack lock and document the fact that callers of the
stack-manipulation functions must hold the connection's lock.
Signed-off-by: default avatarMichael Ellerman <michael@ellerman.id.au>
Signed-off-by: default avatarJeff Garzik <jgarzik@pobox.com>
parent 2a5391a1
...@@ -143,7 +143,6 @@ struct veth_lpar_connection { ...@@ -143,7 +143,6 @@ struct veth_lpar_connection {
struct VethCapData remote_caps; struct VethCapData remote_caps;
u32 ack_timeout; u32 ack_timeout;
spinlock_t msg_stack_lock;
struct veth_msg *msg_stack_head; struct veth_msg *msg_stack_head;
}; };
...@@ -190,27 +189,23 @@ static void veth_timed_ack(unsigned long connectionPtr); ...@@ -190,27 +189,23 @@ static void veth_timed_ack(unsigned long connectionPtr);
#define veth_debug(fmt, args...) do {} while (0) #define veth_debug(fmt, args...) do {} while (0)
#endif #endif
/* You must hold the connection's lock when you call this function. */
static inline void veth_stack_push(struct veth_lpar_connection *cnx, static inline void veth_stack_push(struct veth_lpar_connection *cnx,
struct veth_msg *msg) struct veth_msg *msg)
{ {
unsigned long flags;
spin_lock_irqsave(&cnx->msg_stack_lock, flags);
msg->next = cnx->msg_stack_head; msg->next = cnx->msg_stack_head;
cnx->msg_stack_head = msg; cnx->msg_stack_head = msg;
spin_unlock_irqrestore(&cnx->msg_stack_lock, flags);
} }
/* You must hold the connection's lock when you call this function. */
static inline struct veth_msg *veth_stack_pop(struct veth_lpar_connection *cnx) static inline struct veth_msg *veth_stack_pop(struct veth_lpar_connection *cnx)
{ {
unsigned long flags;
struct veth_msg *msg; struct veth_msg *msg;
spin_lock_irqsave(&cnx->msg_stack_lock, flags);
msg = cnx->msg_stack_head; msg = cnx->msg_stack_head;
if (msg) if (msg)
cnx->msg_stack_head = cnx->msg_stack_head->next; cnx->msg_stack_head = cnx->msg_stack_head->next;
spin_unlock_irqrestore(&cnx->msg_stack_lock, flags);
return msg; return msg;
} }
...@@ -645,7 +640,6 @@ static int veth_init_connection(u8 rlp) ...@@ -645,7 +640,6 @@ static int veth_init_connection(u8 rlp)
cnx->msgs = msgs; cnx->msgs = msgs;
memset(msgs, 0, VETH_NUMBUFFERS * sizeof(struct veth_msg)); memset(msgs, 0, VETH_NUMBUFFERS * sizeof(struct veth_msg));
spin_lock_init(&cnx->msg_stack_lock);
for (i = 0; i < VETH_NUMBUFFERS; i++) { for (i = 0; i < VETH_NUMBUFFERS; i++) {
msgs[i].token = i; msgs[i].token = i;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment