diff mbox

powerpc: pseries: Fix kexec on machines with more than 4TB of RAM

Message ID 20110727141503.3faa93f5@kryten (mailing list archive)
State Accepted, archived
Commit bed9a31527af8ff3dfbad62a1a42815cef4baab7
Delegated to: Benjamin Herrenschmidt
Headers show

Commit Message

Anton Blanchard July 27, 2011, 4:15 a.m. UTC
On a box with 8TB of RAM the MMU hashtable is 64GB in size. That
means we have 4G PTEs. pSeries_lpar_hptab_clear was using a signed
int to store the index which will overflow at 2G.

Signed-off-by: Anton Blanchard <anton@samba.org>
Cc: <stable@kernel.org>
---

Comments

Michael Neuling July 27, 2011, 4:26 a.m. UTC | #1
> On a box with 8TB of RAM the MMU hashtable is 64GB in size. That
> means we have 4G PTEs. pSeries_lpar_hptab_clear was using a signed
> int to store the index which will overflow at 2G.

Wow, I hear... "Anton Blanchard's machine has more memory in it's MMU
than you have in total".

Acked-by: Michael Neuling <mikey@neuling.org>

> 
> Signed-off-by: Anton Blanchard <anton@samba.org>
> Cc: <stable@kernel.org>
> ---
> 
> Index: linux-powerpc/arch/powerpc/platforms/pseries/lpar.c
> ===================================================================
> --- linux-powerpc.orig/arch/powerpc/platforms/pseries/lpar.c	2011-07-27 13:5
0:18.408091576 +1000
> +++ linux-powerpc/arch/powerpc/platforms/pseries/lpar.c	2011-07-27 13:5
1:19.359196131 +1000
> @@ -203,7 +203,7 @@ static void pSeries_lpar_hptab_clear(voi
>  		unsigned long ptel;
>  	} ptes[4];
>  	long lpar_rc;
> -	int i, j;
> +	unsigned long i, j;
>  
>  	/* Read in batches of 4,
>  	 * invalidate only valid entries not in the VRMA
>
diff mbox

Patch

Index: linux-powerpc/arch/powerpc/platforms/pseries/lpar.c
===================================================================
--- linux-powerpc.orig/arch/powerpc/platforms/pseries/lpar.c	2011-07-27 13:50:18.408091576 +1000
+++ linux-powerpc/arch/powerpc/platforms/pseries/lpar.c	2011-07-27 13:51:19.359196131 +1000
@@ -203,7 +203,7 @@  static void pSeries_lpar_hptab_clear(voi
 		unsigned long ptel;
 	} ptes[4];
 	long lpar_rc;
-	int i, j;
+	unsigned long i, j;
 
 	/* Read in batches of 4,
 	 * invalidate only valid entries not in the VRMA