diff options
author | Dean Nelson <dcn@sgi.com> | 2008-07-30 01:34:19 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-07-30 12:41:50 -0400 |
commit | bd3e64c1759e4930315ebf022611468ee9621486 (patch) | |
tree | 314f4f8a80788b181aa03714d952854c8e2a1866 /drivers/misc/sgi-xp/xpnet.c | |
parent | 5b8669dfd110a62a74eea525a009342f73987ea0 (diff) |
sgi-xp: setup the notify GRU message queue
Setup the notify GRU message queue that is used for sending user messages
on UV systems.
Signed-off-by: Dean Nelson <dcn@sgi.com>
Cc: Jack Steiner <steiner@sgi.com>
Cc: "Luck, Tony" <tony.luck@intel.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers/misc/sgi-xp/xpnet.c')
-rw-r--r-- | drivers/misc/sgi-xp/xpnet.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/drivers/misc/sgi-xp/xpnet.c b/drivers/misc/sgi-xp/xpnet.c index 4f5d62230116..71513b3af708 100644 --- a/drivers/misc/sgi-xp/xpnet.c +++ b/drivers/misc/sgi-xp/xpnet.c | |||
@@ -57,11 +57,10 @@ struct xpnet_message { | |||
57 | * | 57 | * |
58 | * XPC expects each message to exist in an individual cacheline. | 58 | * XPC expects each message to exist in an individual cacheline. |
59 | */ | 59 | */ |
60 | #define XPNET_MSG_SIZE (L1_CACHE_BYTES - XPC_MSG_PAYLOAD_OFFSET) | 60 | #define XPNET_MSG_SIZE XPC_MSG_PAYLOAD_MAX_SIZE |
61 | #define XPNET_MSG_DATA_MAX \ | 61 | #define XPNET_MSG_DATA_MAX \ |
62 | (XPNET_MSG_SIZE - (u64)(&((struct xpnet_message *)0)->data)) | 62 | (XPNET_MSG_SIZE - offsetof(struct xpnet_message, data)) |
63 | #define XPNET_MSG_ALIGNED_SIZE (L1_CACHE_ALIGN(XPNET_MSG_SIZE)) | 63 | #define XPNET_MSG_NENTRIES (PAGE_SIZE / XPC_MSG_MAX_SIZE) |
64 | #define XPNET_MSG_NENTRIES (PAGE_SIZE / XPNET_MSG_ALIGNED_SIZE) | ||
65 | 64 | ||
66 | #define XPNET_MAX_KTHREADS (XPNET_MSG_NENTRIES + 1) | 65 | #define XPNET_MAX_KTHREADS (XPNET_MSG_NENTRIES + 1) |
67 | #define XPNET_MAX_IDLE_KTHREADS (XPNET_MSG_NENTRIES + 1) | 66 | #define XPNET_MAX_IDLE_KTHREADS (XPNET_MSG_NENTRIES + 1) |
@@ -408,6 +407,7 @@ xpnet_send(struct sk_buff *skb, struct xpnet_pending_msg *queued_msg, | |||
408 | { | 407 | { |
409 | u8 msg_buffer[XPNET_MSG_SIZE]; | 408 | u8 msg_buffer[XPNET_MSG_SIZE]; |
410 | struct xpnet_message *msg = (struct xpnet_message *)&msg_buffer; | 409 | struct xpnet_message *msg = (struct xpnet_message *)&msg_buffer; |
410 | u16 msg_size = sizeof(struct xpnet_message); | ||
411 | enum xp_retval ret; | 411 | enum xp_retval ret; |
412 | 412 | ||
413 | msg->embedded_bytes = embedded_bytes; | 413 | msg->embedded_bytes = embedded_bytes; |
@@ -417,6 +417,7 @@ xpnet_send(struct sk_buff *skb, struct xpnet_pending_msg *queued_msg, | |||
417 | &msg->data, skb->data, (size_t)embedded_bytes); | 417 | &msg->data, skb->data, (size_t)embedded_bytes); |
418 | skb_copy_from_linear_data(skb, &msg->data, | 418 | skb_copy_from_linear_data(skb, &msg->data, |
419 | (size_t)embedded_bytes); | 419 | (size_t)embedded_bytes); |
420 | msg_size += embedded_bytes - 1; | ||
420 | } else { | 421 | } else { |
421 | msg->version = XPNET_VERSION; | 422 | msg->version = XPNET_VERSION; |
422 | } | 423 | } |
@@ -435,7 +436,7 @@ xpnet_send(struct sk_buff *skb, struct xpnet_pending_msg *queued_msg, | |||
435 | atomic_inc(&queued_msg->use_count); | 436 | atomic_inc(&queued_msg->use_count); |
436 | 437 | ||
437 | ret = xpc_send_notify(dest_partid, XPC_NET_CHANNEL, XPC_NOWAIT, msg, | 438 | ret = xpc_send_notify(dest_partid, XPC_NET_CHANNEL, XPC_NOWAIT, msg, |
438 | XPNET_MSG_SIZE, xpnet_send_completed, queued_msg); | 439 | msg_size, xpnet_send_completed, queued_msg); |
439 | if (unlikely(ret != xpSuccess)) | 440 | if (unlikely(ret != xpSuccess)) |
440 | atomic_dec(&queued_msg->use_count); | 441 | atomic_dec(&queued_msg->use_count); |
441 | } | 442 | } |