diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-05-18 12:46:35 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-05-18 12:46:35 -0400 |
| commit | 537b60d17894b7c19a6060feae40299d7109d6e7 (patch) | |
| tree | 11a30267b4ecb7175d02215a995c8b6461304b9c | |
| parent | 3ae684e1c48e6deedc9b9faff8fa1c391ca8a652 (diff) | |
| parent | a289cc7c70da784a2d370b91885cab4f966dcb0f (diff) | |
Merge branch 'x86-uv-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip
* 'x86-uv-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
x86, UV: uv_irq.c: Fix all sparse warnings
x86, UV: Improve BAU performance and error recovery
x86, UV: Delete unneeded boot messages
x86, UV: Clean up UV headers for MMR definitions
| -rw-r--r-- | arch/x86/include/asm/uv/uv_bau.h | 247 | ||||
| -rw-r--r-- | arch/x86/include/asm/uv/uv_hub.h | 2 | ||||
| -rw-r--r-- | arch/x86/include/asm/uv/uv_mmrs.h | 528 | ||||
| -rw-r--r-- | arch/x86/kernel/apic/x2apic_uv_x.c | 3 | ||||
| -rw-r--r-- | arch/x86/kernel/tlb_uv.c | 1280 | ||||
| -rw-r--r-- | arch/x86/kernel/uv_irq.c | 12 |
6 files changed, 1167 insertions, 905 deletions
diff --git a/arch/x86/include/asm/uv/uv_bau.h b/arch/x86/include/asm/uv/uv_bau.h index b414d2b401f..aa558ac0306 100644 --- a/arch/x86/include/asm/uv/uv_bau.h +++ b/arch/x86/include/asm/uv/uv_bau.h | |||
| @@ -27,13 +27,14 @@ | |||
| 27 | * set 2 is at BASE + 2*512, set 3 at BASE + 3*512, and so on. | 27 | * set 2 is at BASE + 2*512, set 3 at BASE + 3*512, and so on. |
| 28 | * | 28 | * |
| 29 | * We will use 31 sets, one for sending BAU messages from each of the 32 | 29 | * We will use 31 sets, one for sending BAU messages from each of the 32 |
| 30 | * cpu's on the node. | 30 | * cpu's on the uvhub. |
| 31 | * | 31 | * |
| 32 | * TLB shootdown will use the first of the 8 descriptors of each set. | 32 | * TLB shootdown will use the first of the 8 descriptors of each set. |
| 33 | * Each of the descriptors is 64 bytes in size (8*64 = 512 bytes in a set). | 33 | * Each of the descriptors is 64 bytes in size (8*64 = 512 bytes in a set). |
| 34 | */ | 34 | */ |
| 35 | 35 | ||
| 36 | #define UV_ITEMS_PER_DESCRIPTOR 8 | 36 | #define UV_ITEMS_PER_DESCRIPTOR 8 |
| 37 | #define MAX_BAU_CONCURRENT 3 | ||
| 37 | #define UV_CPUS_PER_ACT_STATUS 32 | 38 | #define UV_CPUS_PER_ACT_STATUS 32 |
| 38 | #define UV_ACT_STATUS_MASK 0x3 | 39 | #define UV_ACT_STATUS_MASK 0x3 |
| 39 | #define UV_ACT_STATUS_SIZE 2 | 40 | #define UV_ACT_STATUS_SIZE 2 |
| @@ -45,6 +46,9 @@ | |||
| 45 | #define UV_PAYLOADQ_PNODE_SHIFT 49 | 46 | #define UV_PAYLOADQ_PNODE_SHIFT 49 |
| 46 | #define UV_PTC_BASENAME "sgi_uv/ptc_statistics" | 47 | #define UV_PTC_BASENAME "sgi_uv/ptc_statistics" |
| 47 | #define uv_physnodeaddr(x) ((__pa((unsigned long)(x)) & uv_mmask)) | 48 | #define uv_physnodeaddr(x) ((__pa((unsigned long)(x)) & uv_mmask)) |
| 49 | #define UV_ENABLE_INTD_SOFT_ACK_MODE_SHIFT 15 | ||
| 50 | #define UV_INTD_SOFT_ACK_TIMEOUT_PERIOD_SHIFT 16 | ||
| 51 | #define UV_INTD_SOFT_ACK_TIMEOUT_PERIOD 0x000000000bUL | ||
| 48 | 52 | ||
| 49 | /* | 53 | /* |
| 50 | * bits in UVH_LB_BAU_SB_ACTIVATION_STATUS_0/1 | 54 | * bits in UVH_LB_BAU_SB_ACTIVATION_STATUS_0/1 |
| @@ -55,15 +59,29 @@ | |||
| 55 | #define DESC_STATUS_SOURCE_TIMEOUT 3 | 59 | #define DESC_STATUS_SOURCE_TIMEOUT 3 |
| 56 | 60 | ||
| 57 | /* | 61 | /* |
| 58 | * source side thresholds at which message retries print a warning | 62 | * source side threshholds at which message retries print a warning |
| 59 | */ | 63 | */ |
| 60 | #define SOURCE_TIMEOUT_LIMIT 20 | 64 | #define SOURCE_TIMEOUT_LIMIT 20 |
| 61 | #define DESTINATION_TIMEOUT_LIMIT 20 | 65 | #define DESTINATION_TIMEOUT_LIMIT 20 |
| 62 | 66 | ||
| 63 | /* | 67 | /* |
| 68 | * misc. delays, in microseconds | ||
| 69 | */ | ||
| 70 | #define THROTTLE_DELAY 10 | ||
| 71 | #define TIMEOUT_DELAY 10 | ||
| 72 | #define BIOS_TO 1000 | ||
| 73 | /* BIOS is assumed to set the destination timeout to 1003520 nanoseconds */ | ||
| 74 | |||
| 75 | /* | ||
| 76 | * threshholds at which to use IPI to free resources | ||
| 77 | */ | ||
| 78 | #define PLUGSB4RESET 100 | ||
| 79 | #define TIMEOUTSB4RESET 100 | ||
| 80 | |||
| 81 | /* | ||
| 64 | * number of entries in the destination side payload queue | 82 | * number of entries in the destination side payload queue |
| 65 | */ | 83 | */ |
| 66 | #define DEST_Q_SIZE 17 | 84 | #define DEST_Q_SIZE 20 |
| 67 | /* | 85 | /* |
| 68 | * number of destination side software ack resources | 86 | * number of destination side software ack resources |
| 69 | */ | 87 | */ |
| @@ -72,9 +90,10 @@ | |||
| 72 | /* | 90 | /* |
| 73 | * completion statuses for sending a TLB flush message | 91 | * completion statuses for sending a TLB flush message |
| 74 | */ | 92 | */ |
| 75 | #define FLUSH_RETRY 1 | 93 | #define FLUSH_RETRY_PLUGGED 1 |
| 76 | #define FLUSH_GIVEUP 2 | 94 | #define FLUSH_RETRY_TIMEOUT 2 |
| 77 | #define FLUSH_COMPLETE 3 | 95 | #define FLUSH_GIVEUP 3 |
| 96 | #define FLUSH_COMPLETE 4 | ||
| 78 | 97 | ||
| 79 | /* | 98 | /* |
| 80 | * Distribution: 32 bytes (256 bits) (bytes 0-0x1f of descriptor) | 99 | * Distribution: 32 bytes (256 bits) (bytes 0-0x1f of descriptor) |
| @@ -86,14 +105,14 @@ | |||
| 86 | * 'base_dest_nodeid' field of the header corresponds to the | 105 | * 'base_dest_nodeid' field of the header corresponds to the |
| 87 | * destination nodeID associated with that specified bit. | 106 | * destination nodeID associated with that specified bit. |
| 88 | */ | 107 | */ |
| 89 | struct bau_target_nodemask { | 108 | struct bau_target_uvhubmask { |
| 90 | unsigned long bits[BITS_TO_LONGS(256)]; | 109 | unsigned long bits[BITS_TO_LONGS(UV_DISTRIBUTION_SIZE)]; |
| 91 | }; | 110 | }; |
| 92 | 111 | ||
| 93 | /* | 112 | /* |
| 94 | * mask of cpu's on a node | 113 | * mask of cpu's on a uvhub |
| 95 | * (during initialization we need to check that unsigned long has | 114 | * (during initialization we need to check that unsigned long has |
| 96 | * enough bits for max. cpu's per node) | 115 | * enough bits for max. cpu's per uvhub) |
| 97 | */ | 116 | */ |
| 98 | struct bau_local_cpumask { | 117 | struct bau_local_cpumask { |
| 99 | unsigned long bits; | 118 | unsigned long bits; |
| @@ -135,8 +154,8 @@ struct bau_msg_payload { | |||
| 135 | struct bau_msg_header { | 154 | struct bau_msg_header { |
| 136 | unsigned int dest_subnodeid:6; /* must be 0x10, for the LB */ | 155 | unsigned int dest_subnodeid:6; /* must be 0x10, for the LB */ |
| 137 | /* bits 5:0 */ | 156 | /* bits 5:0 */ |
| 138 | unsigned int base_dest_nodeid:15; /* nasid>>1 (pnode) of */ | 157 | unsigned int base_dest_nodeid:15; /* nasid (pnode<<1) of */ |
| 139 | /* bits 20:6 */ /* first bit in node_map */ | 158 | /* bits 20:6 */ /* first bit in uvhub map */ |
| 140 | unsigned int command:8; /* message type */ | 159 | unsigned int command:8; /* message type */ |
| 141 | /* bits 28:21 */ | 160 | /* bits 28:21 */ |
| 142 | /* 0x38: SN3net EndPoint Message */ | 161 | /* 0x38: SN3net EndPoint Message */ |
| @@ -146,26 +165,38 @@ struct bau_msg_header { | |||
| 146 | unsigned int rsvd_2:9; /* must be zero */ | 165 | unsigned int rsvd_2:9; /* must be zero */ |
| 147 | /* bits 40:32 */ | 166 | /* bits 40:32 */ |
| 148 | /* Suppl_A is 56-41 */ | 167 | /* Suppl_A is 56-41 */ |
| 149 | unsigned int payload_2a:8;/* becomes byte 16 of msg */ | 168 | unsigned int sequence:16;/* message sequence number */ |
| 150 | /* bits 48:41 */ /* not currently using */ | 169 | /* bits 56:41 */ /* becomes bytes 16-17 of msg */ |
| 151 | unsigned int payload_2b:8;/* becomes byte 17 of msg */ | ||
| 152 | /* bits 56:49 */ /* not currently using */ | ||
| 153 | /* Address field (96:57) is never used as an | 170 | /* Address field (96:57) is never used as an |
| 154 | address (these are address bits 42:3) */ | 171 | address (these are address bits 42:3) */ |
| 172 | |||
| 155 | unsigned int rsvd_3:1; /* must be zero */ | 173 | unsigned int rsvd_3:1; /* must be zero */ |
| 156 | /* bit 57 */ | 174 | /* bit 57 */ |
| 157 | /* address bits 27:4 are payload */ | 175 | /* address bits 27:4 are payload */ |
| 158 | /* these 24 bits become bytes 12-14 of msg */ | 176 | /* these next 24 (58-81) bits become bytes 12-14 of msg */ |
| 177 | |||
| 178 | /* bits 65:58 land in byte 12 */ | ||
| 159 | unsigned int replied_to:1;/* sent as 0 by the source to byte 12 */ | 179 | unsigned int replied_to:1;/* sent as 0 by the source to byte 12 */ |
| 160 | /* bit 58 */ | 180 | /* bit 58 */ |
| 161 | 181 | unsigned int msg_type:3; /* software type of the message*/ | |
| 162 | unsigned int payload_1a:5;/* not currently used */ | 182 | /* bits 61:59 */ |
| 163 | /* bits 63:59 */ | 183 | unsigned int canceled:1; /* message canceled, resource to be freed*/ |
| 164 | unsigned int payload_1b:8;/* not currently used */ | 184 | /* bit 62 */ |
| 165 | /* bits 71:64 */ | 185 | unsigned int payload_1a:1;/* not currently used */ |
| 166 | unsigned int payload_1c:8;/* not currently used */ | 186 | /* bit 63 */ |
| 167 | /* bits 79:72 */ | 187 | unsigned int payload_1b:2;/* not currently used */ |
| 168 | unsigned int payload_1d:2;/* not currently used */ | 188 | /* bits 65:64 */ |
| 189 | |||
| 190 | /* bits 73:66 land in byte 13 */ | ||
| 191 | unsigned int payload_1ca:6;/* not currently used */ | ||
| 192 | /* bits 71:66 */ | ||
| 193 | unsigned int payload_1c:2;/* not currently used */ | ||
| 194 | /* bits 73:72 */ | ||
| 195 | |||
| 196 | /* bits 81:74 land in byte 14 */ | ||
| 197 | unsigned int payload_1d:6;/* not currently used */ | ||
| 198 | /* bits 79:74 */ | ||
| 199 | unsigned int payload_1e:2;/* not currently used */ | ||
| 169 | /* bits 81:80 */ | 200 | /* bits 81:80 */ |
| 170 | 201 | ||
| 171 | unsigned int rsvd_4:7; /* must be zero */ | 202 | unsigned int rsvd_4:7; /* must be zero */ |
| @@ -178,7 +209,7 @@ struct bau_msg_header { | |||
| 178 | /* bits 95:90 */ | 209 | /* bits 95:90 */ |
| 179 | unsigned int rsvd_6:5; /* must be zero */ | 210 | unsigned int rsvd_6:5; /* must be zero */ |
| 180 | /* bits 100:96 */ | 211 | /* bits 100:96 */ |
| 181 | unsigned int int_both:1;/* if 1, interrupt both sockets on the blade */ | 212 | unsigned int int_both:1;/* if 1, interrupt both sockets on the uvhub */ |
| 182 | /* bit 101*/ | 213 | /* bit 101*/ |
| 183 | unsigned int fairness:3;/* usually zero */ | 214 | unsigned int fairness:3;/* usually zero */ |
| 184 | /* bits 104:102 */ | 215 | /* bits 104:102 */ |
| @@ -191,13 +222,18 @@ struct bau_msg_header { | |||
| 191 | /* bits 127:107 */ | 222 | /* bits 127:107 */ |
| 192 | }; | 223 | }; |
| 193 | 224 | ||
