diff options
Diffstat (limited to 'drivers/misc')
-rw-r--r-- | drivers/misc/sgi-xp/xp.h | 11 | ||||
-rw-r--r-- | drivers/misc/sgi-xp/xp_sn2.c | 10 | ||||
-rw-r--r-- | drivers/misc/sgi-xp/xp_uv.c | 2 | ||||
-rw-r--r-- | drivers/misc/sgi-xp/xpc.h | 14 | ||||
-rw-r--r-- | drivers/misc/sgi-xp/xpc_channel.c | 2 | ||||
-rw-r--r-- | drivers/misc/sgi-xp/xpc_partition.c | 2 | ||||
-rw-r--r-- | drivers/misc/sgi-xp/xpc_sn2.c | 8 | ||||
-rw-r--r-- | drivers/misc/sgi-xp/xpc_uv.c | 32 | ||||
-rw-r--r-- | drivers/misc/sgi-xp/xpnet.c | 6 |
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 @@ | |||
18 | static enum xp_retval | 18 | static enum xp_retval |
19 | xp_remote_memcpy_uv(void *vdst, const void *psrc, size_t len) | 19 | xp_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 | |||
348 | struct xpc_channel_sn2 { | 352 | struct 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 | ||
361 | struct xpc_channel_uv { | 365 | struct xpc_channel_uv { |
362 | /* >>> code is coming */ | 366 | /* !!! code is coming */ |
363 | }; | 367 | }; |
364 | 368 | ||
365 | struct xpc_channel { | 369 | struct 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 | ||
537 | struct xpc_partition_uv { | 541 | struct xpc_partition_uv { |
538 | /* >>> code is coming */ | 542 | /* !!! code is coming */ |
539 | }; | 543 | }; |
540 | 544 | ||
541 | struct xpc_partition { | 545 | struct 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()? */ |
1364 | static enum xp_retval | 1364 | static enum xp_retval |
1365 | xpc_pull_remote_cachelines_sn2(struct xpc_partition *part, void *dst, | 1365 | xpc_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 | |||
29 | xpc_send_local_activate_IRQ_uv(struct xpc_partition *part) | 29 | xpc_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 | ||
38 | static enum xp_retval | 38 | static enum xp_retval |
39 | xpc_rsvd_page_init_uv(struct xpc_rsvd_page *rp) | 39 | xpc_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) | |||
46 | static void | 46 | static void |
47 | xpc_increment_heartbeat_uv(void) | 47 | xpc_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 | ||
52 | static void | 52 | static void |
@@ -59,7 +59,7 @@ xpc_heartbeat_init_uv(void) | |||
59 | static void | 59 | static void |
60 | xpc_heartbeat_exit_uv(void) | 60 | xpc_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 | ||
65 | static void | 65 | static 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) | |||
91 | static enum xp_retval | 91 | static enum xp_retval |
92 | xpc_setup_infrastructure_uv(struct xpc_partition *part) | 92 | xpc_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) | |||
102 | static void | 102 | static void |
103 | xpc_teardown_infrastructure_uv(struct xpc_partition *part) | 103 | xpc_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 | ||
109 | static enum xp_retval | 109 | static enum xp_retval |
110 | xpc_make_first_contact_uv(struct xpc_partition *part) | 110 | xpc_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 | ||
116 | static u64 | 116 | static u64 |
117 | xpc_get_chctl_all_flags_uv(struct xpc_partition *part) | 117 | xpc_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 | ||
123 | static struct xpc_msg * | 123 | static struct xpc_msg * |
124 | xpc_get_deliverable_msg_uv(struct xpc_channel *ch) | 124 | xpc_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 *) |