aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/misc
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/misc')
-rw-r--r--drivers/misc/sgi-xp/xp.h11
-rw-r--r--drivers/misc/sgi-xp/xp_sn2.c10
-rw-r--r--drivers/misc/sgi-xp/xp_uv.c2
-rw-r--r--drivers/misc/sgi-xp/xpc.h14
-rw-r--r--drivers/misc/sgi-xp/xpc_channel.c2
-rw-r--r--drivers/misc/sgi-xp/xpc_partition.c2
-rw-r--r--drivers/misc/sgi-xp/xpc_sn2.c8
-rw-r--r--drivers/misc/sgi-xp/xpc_uv.c32
-rw-r--r--drivers/misc/sgi-xp/xpnet.c6
9 files changed, 43 insertions, 44 deletions
diff --git a/drivers/misc/sgi-xp/xp.h b/drivers/misc/sgi-xp/xp.h
index 955b5b913235..0ca81f16646f 100644
--- a/drivers/misc/sgi-xp/xp.h
+++ b/drivers/misc/sgi-xp/xp.h
@@ -21,7 +21,7 @@
21#include <asm/sn/arch.h> 21#include <asm/sn/arch.h>
22#endif 22#endif
23 23
24/* >>> Add this #define to some linux header file some day. */ 24/* ??? Add this #define to some linux header file some day? */
25#define BYTES_PER_WORD sizeof(void *) 25#define BYTES_PER_WORD sizeof(void *)
26 26
27#ifdef USE_DBUG_ON 27#ifdef USE_DBUG_ON
@@ -65,18 +65,13 @@
65 * other partition that is currently up. Over these channels, kernel-level 65 * other partition that is currently up. Over these channels, kernel-level
66 * `users' can communicate with their counterparts on the other partitions. 66 * `users' can communicate with their counterparts on the other partitions.
67 * 67 *
68>>> The following described limitation of a max of eight channels possible
69>>> pertains only to ia64-sn2. THIS ISN'T TRUE SINCE I'M PLANNING TO JUST
70>>> TIE INTO THE EXISTING MECHANISM ONCE THE CHANNEL MESSAGES ARE RECEIVED.
71>>> THE 128-BYTE CACHELINE PERFORMANCE ISSUE IS TIED TO IA64-SN2.
72 *
73 * If the need for additional channels arises, one can simply increase 68 * If the need for additional channels arises, one can simply increase
74 * XPC_MAX_NCHANNELS accordingly. If the day should come where that number 69 * XPC_MAX_NCHANNELS accordingly. If the day should come where that number
75 * exceeds the absolute MAXIMUM number of channels possible (eight), then one 70 * exceeds the absolute MAXIMUM number of channels possible (eight), then one
76 * will need to make changes to the XPC code to accommodate for this. 71 * will need to make changes to the XPC code to accommodate for this.
77 * 72 *
78 * The absolute maximum number of channels possible is currently limited to 73 * The absolute maximum number of channels possible is limited to eight for
79 * eight for performance reasons. The internal cross partition structures 74 * performance reasons on sn2 hardware. The internal cross partition structures
80 * require sixteen bytes per channel, and eight allows all of this 75 * require sixteen bytes per channel, and eight allows all of this
81 * interface-shared info to fit in one 128-byte cacheline. 76 * interface-shared info to fit in one 128-byte cacheline.
82 */ 77 */
diff --git a/drivers/misc/sgi-xp/xp_sn2.c b/drivers/misc/sgi-xp/xp_sn2.c
index 1fcfdebca2c5..baabc1cb3fee 100644
--- a/drivers/misc/sgi-xp/xp_sn2.c
+++ b/drivers/misc/sgi-xp/xp_sn2.c
@@ -87,11 +87,11 @@ xp_remote_memcpy_sn2(void *vdst, const void *psrc, size_t len)
87{ 87{
88 bte_result_t ret; 88 bte_result_t ret;
89 u64 pdst = ia64_tpa(vdst); 89 u64 pdst = ia64_tpa(vdst);
90 /* >>> What are the rules governing the src and dst addresses passed in? 90 /* ??? What are the rules governing the src and dst addresses passed in?
91 * >>> Currently we're assuming that dst is a virtual address and src 91 * ??? Currently we're assuming that dst is a virtual address and src
92 * >>> is a physical address, is this appropriate? Can we allow them to 92 * ??? is a physical address, is this appropriate? Can we allow them to
93 * >>> be whatever and we make the change here without damaging the 93 * ??? be whatever and we make the change here without damaging the
94 * >>> addresses? 94 * ??? addresses?
95 */ 95 */
96 96
97 /* 97 /*
diff --git a/drivers/misc/sgi-xp/xp_uv.c b/drivers/misc/sgi-xp/xp_uv.c
index dca519fdef98..382b1b6bcc0b 100644
--- a/drivers/misc/sgi-xp/xp_uv.c
+++ b/drivers/misc/sgi-xp/xp_uv.c
@@ -18,7 +18,7 @@
18static enum xp_retval 18static enum xp_retval
19xp_remote_memcpy_uv(void *vdst, const void *psrc, size_t len) 19xp_remote_memcpy_uv(void *vdst, const void *psrc, size_t len)
20{ 20{
21 /* >>> this function needs fleshing out */ 21 /* !!! this function needs fleshing out */
22 return xpUnsupported; 22 return xpUnsupported;
23} 23}
24 24
diff --git a/drivers/misc/sgi-xp/xpc.h b/drivers/misc/sgi-xp/xpc.h
index 2111723553bf..0f516c3e3e61 100644
--- a/drivers/misc/sgi-xp/xpc.h
+++ b/drivers/misc/sgi-xp/xpc.h
@@ -276,9 +276,12 @@ struct xpc_notify {
276 * There is an array of these structures for each remote partition. It is 276 * There is an array of these structures for each remote partition. It is
277 * allocated at the time a partition becomes active. The array contains one 277 * allocated at the time a partition becomes active. The array contains one
278 * of these structures for each potential channel connection to that partition. 278 * of these structures for each potential channel connection to that partition.
279 */
280
281/*
282 * The following is sn2 only.
279 * 283 *
280>>> sn2 only!!! 284 * Each channel structure manages two message queues (circular buffers).
281 * Each of these structures manages two message queues (circular buffers).
282 * They are allocated at the time a channel connection is made. One of 285 * They are allocated at the time a channel connection is made. One of
283 * these message queues (local_msgqueue) holds the locally created messages 286 * these message queues (local_msgqueue) holds the locally created messages
284 * that are destined for the remote partition. The other of these message 287 * that are destined for the remote partition. The other of these message
@@ -345,6 +348,7 @@ struct xpc_notify {
345 * new messages, by the clearing of the message flags of the acknowledged 348 * new messages, by the clearing of the message flags of the acknowledged
346 * messages. 349 * messages.
347 */ 350 */
351
348struct xpc_channel_sn2 { 352struct xpc_channel_sn2 {
349 353
350 /* various flavors of local and remote Get/Put values */ 354 /* various flavors of local and remote Get/Put values */
@@ -359,7 +363,7 @@ struct xpc_channel_sn2 {
359}; 363};
360 364
361struct xpc_channel_uv { 365struct xpc_channel_uv {
362 /* >>> code is coming */ 366 /* !!! code is coming */
363}; 367};
364 368
365struct xpc_channel { 369struct xpc_channel {
@@ -500,7 +504,7 @@ xpc_any_msg_chctl_flags_set(union xpc_channel_ctl_flags *chctl)
500} 504}
501 505
502/* 506/*
503 * Manages channels on a partition basis. There is one of these structures 507 * Manage channels on a partition basis. There is one of these structures
504 * for each partition (a partition will never utilize the structure that 508 * for each partition (a partition will never utilize the structure that
505 * represents itself). 509 * represents itself).
506 */ 510 */
@@ -535,7 +539,7 @@ struct xpc_partition_sn2 {
535}; 539};
536 540
537struct xpc_partition_uv { 541struct xpc_partition_uv {
538 /* >>> code is coming */ 542 /* !!! code is coming */
539}; 543};
540 544
541struct xpc_partition { 545struct xpc_partition {
diff --git a/drivers/misc/sgi-xp/xpc_channel.c b/drivers/misc/sgi-xp/xpc_channel.c
index 1c73423665bd..f1afc0a7c33f 100644
--- a/drivers/misc/sgi-xp/xpc_channel.c
+++ b/drivers/misc/sgi-xp/xpc_channel.c
@@ -129,7 +129,7 @@ xpc_process_disconnect(struct xpc_channel *ch, unsigned long *irq_flags)
129 129
130 /* wake those waiting for notify completion */ 130 /* wake those waiting for notify completion */
131 if (atomic_read(&ch->n_to_notify) > 0) { 131 if (atomic_read(&ch->n_to_notify) > 0) {
132 /* >>> we do callout while holding ch->lock */ 132 /* we do callout while holding ch->lock, callout can't block */
133 xpc_notify_senders_of_disconnect(ch); 133 xpc_notify_senders_of_disconnect(ch);
134 } 134 }
135 135
diff --git a/drivers/misc/sgi-xp/xpc_partition.c b/drivers/misc/sgi-xp/xpc_partition.c
index 9f104450478f..73a92957b800 100644
--- a/drivers/misc/sgi-xp/xpc_partition.c
+++ b/drivers/misc/sgi-xp/xpc_partition.c
@@ -91,7 +91,7 @@ xpc_get_rsvd_page_pa(int nasid)
91 if (status != SALRET_MORE_PASSES) 91 if (status != SALRET_MORE_PASSES)
92 break; 92 break;
93 93
94 /* >>> L1_CACHE_ALIGN() is only a sn2-bte_copy requirement */ 94 /* !!! L1_CACHE_ALIGN() is only a sn2-bte_copy requirement */
95 if (L1_CACHE_ALIGN(len) > buf_len) { 95 if (L1_CACHE_ALIGN(len) > buf_len) {
96 kfree(buf_base); 96 kfree(buf_base);
97 buf_len = L1_CACHE_ALIGN(len); 97 buf_len = L1_CACHE_ALIGN(len);
diff --git a/drivers/misc/sgi-xp/xpc_sn2.c b/drivers/misc/sgi-xp/xpc_sn2.c
index 63fe59a5bfac..e42c3038203c 100644
--- a/drivers/misc/sgi-xp/xpc_sn2.c
+++ b/drivers/misc/sgi-xp/xpc_sn2.c
@@ -75,7 +75,7 @@ xpc_allow_IPI_ops_sn2(void)
75 int node; 75 int node;
76 int nasid; 76 int nasid;
77 77
78 /* >>> The following should get moved into SAL. */ 78 /* !!! The following should get moved into SAL. */
79 if (is_shub2()) { 79 if (is_shub2()) {
80 xpc_sh2_IPI_access0_sn2 = 80 xpc_sh2_IPI_access0_sn2 =
81 (u64)HUB_L((u64 *)LOCAL_MMR_ADDR(SH2_IPI_ACCESS0)); 81 (u64)HUB_L((u64 *)LOCAL_MMR_ADDR(SH2_IPI_ACCESS0));
@@ -118,7 +118,7 @@ xpc_disallow_IPI_ops_sn2(void)
118 int node; 118 int node;
119 int nasid; 119 int nasid;
120 120
121 /* >>> The following should get moved into SAL. */ 121 /* !!! The following should get moved into SAL. */
122 if (is_shub2()) { 122 if (is_shub2()) {
123 for_each_online_node(node) { 123 for_each_online_node(node) {
124 nasid = cnodeid_to_nasid(node); 124 nasid = cnodeid_to_nasid(node);
@@ -1360,7 +1360,7 @@ xpc_teardown_infrastructure_sn2(struct xpc_partition *part)
1360 * dst must be a cacheline aligned virtual address on this partition. 1360 * dst must be a cacheline aligned virtual address on this partition.
1361 * cnt must be cacheline sized 1361 * cnt must be cacheline sized
1362 */ 1362 */
1363/* >>> Replace this function by call to xp_remote_memcpy() or bte_copy()? */ 1363/* ??? Replace this function by call to xp_remote_memcpy() or bte_copy()? */
1364static enum xp_retval 1364static enum xp_retval
1365xpc_pull_remote_cachelines_sn2(struct xpc_partition *part, void *dst, 1365xpc_pull_remote_cachelines_sn2(struct xpc_partition *part, void *dst,
1366 const void *src, size_t cnt) 1366 const void *src, size_t cnt)
@@ -2242,7 +2242,7 @@ xpc_send_msg_sn2(struct xpc_channel *ch, u32 flags, void *payload,
2242 notify->key = key; 2242 notify->key = key;
2243 notify->type = notify_type; 2243 notify->type = notify_type;
2244 2244
2245 /* >>> is a mb() needed here? */ 2245 /* ??? Is a mb() needed here? */
2246 2246
2247 if (ch->flags & XPC_C_DISCONNECTING) { 2247 if (ch->flags & XPC_C_DISCONNECTING) {
2248 /* 2248 /*
diff --git a/drivers/misc/sgi-xp/xpc_uv.c b/drivers/misc/sgi-xp/xpc_uv.c
index 1401b0f45dcb..2aec1dfbb3db 100644
--- a/drivers/misc/sgi-xp/xpc_uv.c
+++ b/drivers/misc/sgi-xp/xpc_uv.c
@@ -15,8 +15,8 @@
15 15
16#include <linux/kernel.h> 16#include <linux/kernel.h>
17 17
18/* >>> #include <gru/grukservices.h> */ 18/* !!! #include <gru/grukservices.h> */
19/* >>> uv_gpa() is defined in <gru/grukservices.h> */ 19/* !!! uv_gpa() is defined in <gru/grukservices.h> */
20#define uv_gpa(_a) ((unsigned long)_a) 20#define uv_gpa(_a) ((unsigned long)_a)
21 21
22#include "xpc.h" 22#include "xpc.h"
@@ -29,16 +29,16 @@ static void
29xpc_send_local_activate_IRQ_uv(struct xpc_partition *part) 29xpc_send_local_activate_IRQ_uv(struct xpc_partition *part)
30{ 30{
31 /* 31 /*
32 * >>> make our side think that the remote parition sent an activate 32 * !!! Make our side think that the remote parition sent an activate
33 * >>> message our way. Also do what the activate IRQ handler would 33 * !!! message our way. Also do what the activate IRQ handler would
34 * >>> do had one really been sent. 34 * !!! do had one really been sent.
35 */ 35 */
36} 36}
37 37
38static enum xp_retval 38static enum xp_retval
39xpc_rsvd_page_init_uv(struct xpc_rsvd_page *rp) 39xpc_rsvd_page_init_uv(struct xpc_rsvd_page *rp)
40{ 40{
41 /* >>> need to have established xpc_activate_mq earlier */ 41 /* !!! need to have established xpc_activate_mq earlier */
42 rp->sn.activate_mq_gpa = uv_gpa(xpc_activate_mq); 42 rp->sn.activate_mq_gpa = uv_gpa(xpc_activate_mq);
43 return xpSuccess; 43 return xpSuccess;
44} 44}
@@ -46,7 +46,7 @@ xpc_rsvd_page_init_uv(struct xpc_rsvd_page *rp)
46static void 46static void
47xpc_increment_heartbeat_uv(void) 47xpc_increment_heartbeat_uv(void)
48{ 48{
49 /* >>> send heartbeat msg to xpc_heartbeating_to_mask partids */ 49 /* !!! send heartbeat msg to xpc_heartbeating_to_mask partids */
50} 50}
51 51
52static void 52static void
@@ -59,7 +59,7 @@ xpc_heartbeat_init_uv(void)
59static void 59static void
60xpc_heartbeat_exit_uv(void) 60xpc_heartbeat_exit_uv(void)
61{ 61{
62 /* >>> send heartbeat_offline msg to xpc_heartbeating_to_mask partids */ 62 /* !!! send heartbeat_offline msg to xpc_heartbeating_to_mask partids */
63} 63}
64 64
65static void 65static void
@@ -70,9 +70,9 @@ xpc_request_partition_activation_uv(struct xpc_rsvd_page *remote_rp,
70 struct xpc_partition *part = &xpc_partitions[partid]; 70 struct xpc_partition *part = &xpc_partitions[partid];
71 71
72/* 72/*
73 * >>> setup part structure with the bits of info we can glean from the rp 73 * !!! Setup part structure with the bits of info we can glean from the rp:
74 * >>> part->remote_rp_pa = remote_rp_pa; 74 * !!! part->remote_rp_pa = remote_rp_pa;
75 * >>> part->sn.uv.activate_mq_gpa = remote_rp->sn.activate_mq_gpa; 75 * !!! part->sn.uv.activate_mq_gpa = remote_rp->sn.activate_mq_gpa;
76 */ 76 */
77 77
78 xpc_send_local_activate_IRQ_uv(part); 78 xpc_send_local_activate_IRQ_uv(part);
@@ -91,7 +91,7 @@ xpc_request_partition_reactivation_uv(struct xpc_partition *part)
91static enum xp_retval 91static enum xp_retval
92xpc_setup_infrastructure_uv(struct xpc_partition *part) 92xpc_setup_infrastructure_uv(struct xpc_partition *part)
93{ 93{
94 /* >>> this function needs fleshing out */ 94 /* !!! this function needs fleshing out */
95 return xpUnsupported; 95 return xpUnsupported;
96} 96}
97 97
@@ -102,28 +102,28 @@ xpc_setup_infrastructure_uv(struct xpc_partition *part)
102static void 102static void
103xpc_teardown_infrastructure_uv(struct xpc_partition *part) 103xpc_teardown_infrastructure_uv(struct xpc_partition *part)
104{ 104{
105 /* >>> this function needs fleshing out */ 105 /* !!! this function needs fleshing out */
106 return; 106 return;
107} 107}
108 108
109static enum xp_retval 109static enum xp_retval
110xpc_make_first_contact_uv(struct xpc_partition *part) 110xpc_make_first_contact_uv(struct xpc_partition *part)
111{ 111{
112 /* >>> this function needs fleshing out */ 112 /* !!! this function needs fleshing out */
113 return xpUnsupported; 113 return xpUnsupported;
114} 114}
115 115
116static u64 116static u64
117xpc_get_chctl_all_flags_uv(struct xpc_partition *part) 117xpc_get_chctl_all_flags_uv(struct xpc_partition *part)
118{ 118{
119 /* >>> this function needs fleshing out */ 119 /* !!! this function needs fleshing out */
120 return 0UL; 120 return 0UL;
121} 121}
122 122
123static struct xpc_msg * 123static struct xpc_msg *
124xpc_get_deliverable_msg_uv(struct xpc_channel *ch) 124xpc_get_deliverable_msg_uv(struct xpc_channel *ch)
125{ 125{
126 /* >>> this function needs fleshing out */ 126 /* !!! this function needs fleshing out */
127 return NULL; 127 return NULL;
128} 128}
129 129
diff --git a/drivers/misc/sgi-xp/xpnet.c b/drivers/misc/sgi-xp/xpnet.c
index c5f59a6dae52..07c89c4e2c25 100644
--- a/drivers/misc/sgi-xp/xpnet.c
+++ b/drivers/misc/sgi-xp/xpnet.c
@@ -229,9 +229,9 @@ xpnet_receive(short partid, int channel, struct xpnet_message *msg)
229 229
230 if (ret != xpSuccess) { 230 if (ret != xpSuccess) {
231 /* 231 /*
232 * >>> Need better way of cleaning skb. Currently skb 232 * !!! Need better way of cleaning skb. Currently skb
233 * >>> appears in_use and we can't just call 233 * !!! appears in_use and we can't just call
234 * >>> dev_kfree_skb. 234 * !!! dev_kfree_skb.
235 */ 235 */
236 dev_err(xpnet, "xp_remote_memcpy(0x%p, 0x%p, 0x%hx) " 236 dev_err(xpnet, "xp_remote_memcpy(0x%p, 0x%p, 0x%hx) "
237 "returned error=0x%x\n", (void *) 237 "returned error=0x%x\n", (void *)