aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobin@sgi.com <Robin@sgi.com>2010-11-24 12:56:59 -0800
committerLinus Torvalds <torvalds@linux-foundation.org>2010-11-25 06:50:40 +0900
commitc22c7aeff69796f46ae0fcec141538e28f50b24e (patch)
tree4228d8fbd4edcb76ca7bdf5ae4e78242b03cc7cc
parent112bc2e120a94a511858918d6866a4978f9c500e (diff)
downloadkernel_samsung_tuna-c22c7aeff69796f46ae0fcec141538e28f50b24e.zip
kernel_samsung_tuna-c22c7aeff69796f46ae0fcec141538e28f50b24e.tar.gz
kernel_samsung_tuna-c22c7aeff69796f46ae0fcec141538e28f50b24e.tar.bz2
sgi-xpc: XPC fails to discover partitions with all nasids above 128
UV hardware defines 256 memory protection regions versus the baseline 64 with increasing size for the SN2 ia64. This was overlooked when XPC was modified to accomodate both UV and SN2. Without this patch, a user could reconfigure their existing system and suddenly disable cross-partition communications with no indication of what has gone wrong. It also prevents larger configurations from using cross-partition communication. Signed-off-by: Robin Holt <holt@sgi.com> Cc: <stable@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r--drivers/misc/sgi-xp/xpc_partition.c25
1 files changed, 15 insertions, 10 deletions
diff --git a/drivers/misc/sgi-xp/xpc_partition.c b/drivers/misc/sgi-xp/xpc_partition.c
index d551f09..6956f7e 100644
--- a/drivers/misc/sgi-xp/xpc_partition.c
+++ b/drivers/misc/sgi-xp/xpc_partition.c
@@ -439,18 +439,23 @@ xpc_discovery(void)
* nodes that can comprise an access protection grouping. The access
* protection is in regards to memory, IOI and IPI.
*/
- max_regions = 64;
region_size = xp_region_size;
- switch (region_size) {
- case 128:
- max_regions *= 2;
- case 64:
- max_regions *= 2;
- case 32:
- max_regions *= 2;
- region_size = 16;
- DBUG_ON(!is_shub2());
+ if (is_uv())
+ max_regions = 256;
+ else {
+ max_regions = 64;
+
+ switch (region_size) {
+ case 128:
+ max_regions *= 2;
+ case 64:
+ max_regions *= 2;
+ case 32:
+ max_regions *= 2;
+ region_size = 16;
+ DBUG_ON(!is_shub2());
+ }
}
for (region = 0; region < max_regions; region++) {