Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1451438

[PATCH 1/4] x86/platform/UV: Fix problem with UV4 Socket IDs not being contiguous

From Mike Travis <travis@sgi.com>
Newsgroups linux.kernel
Subject [PATCH 1/4] x86/platform/UV: Fix problem with UV4 Socket IDs not being contiguous
Date 2016-07-27 19:50 +0200
Message-ID <rZB7X-2ta-15@gated-at.bofh.it> (permalink)
References <rZB7X-2ta-5@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


The UV4 Socket IDs are not guaranteed to equate to Node values which
can cause the GAM (Global Addressable Memory) table lookups to fail.
Fix this by using an independent index into the GAM table instead of
the Socket ID to reference the base address.

Reviewed-by: Dimitri Sivanich <sivanich@sgi.com>
Reviewed-by: Nathan Zimmer <nzimmer@sgi.com>
Tested-by: Frank Ramsay <framsay@sgi.com>
Tested-by: John Estabrook <estabrook@sgi.com>
Signed-off-by: Mike Travis <travis@sgi.com>
---
 arch/x86/kernel/apic/x2apic_uv_x.c |    9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

--- linux-3.12.orig/arch/x86/kernel/apic/x2apic_uv_x.c
+++ linux-3.12/arch/x86/kernel/apic/x2apic_uv_x.c
@@ -325,7 +325,7 @@ static __init void build_uv_gr_table(voi
 	struct uv_gam_range_entry *gre = uv_gre_table;
 	struct uv_gam_range_s *grt;
 	unsigned long last_limit = 0, ram_limit = 0;
-	int bytes, i, sid, lsid = -1;
+	int bytes, i, sid, lsid = -1, indx = 0, lindx = -1;
 
 	if (!gre)
 		return;
@@ -356,11 +356,12 @@ static __init void build_uv_gr_table(voi
 		}
 		sid = gre->sockid - _min_socket;
 		if (lsid < sid) {		/* new range */
-			grt = &_gr_table[sid];
-			grt->base = lsid;
+			grt = &_gr_table[indx];
+			grt->base = lindx;
 			grt->nasid = gre->nasid;
 			grt->limit = last_limit = gre->limit;
 			lsid = sid;
+			lindx = indx++;
 			continue;
 		}
 		if (lsid == sid && !ram_limit) {	/* update range */
@@ -371,7 +372,7 @@ static __init void build_uv_gr_table(voi
 		}
 		if (!ram_limit) {		/* non-contiguous ram range */
 			grt++;
-			grt->base = sid - 1;
+			grt->base = lindx;
 			grt->nasid = gre->nasid;
 			grt->limit = last_limit = gre->limit;
 			continue;

-- 

Back to linux.kernel | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

[PATCH 0/4] x86/platform/UV: SGI UV4 Kernel Fixes Mike Travis <travis@sgi.com> - 2016-07-27 19:50 +0200
  [PATCH 1/4] x86/platform/UV: Fix problem with UV4 Socket IDs not being contiguous Mike Travis <travis@sgi.com> - 2016-07-27 19:50 +0200
  [PATCH 4/4] x86/platform/UV: Fix kernel panic running RHEL kdump kernel on UV Mike Travis <travis@sgi.com> - 2016-07-27 19:50 +0200
  Re: [PATCH 0/4] x86/platform/UV: SGI UV4 Kernel Fixes Greg KH <gregkh@linuxfoundation.org> - 2016-07-27 20:10 +0200

csiph-web