[PATCH] powerpc/mm: Fix hang accessing top of vmalloc space

2009-10-13 Thread Benjamin Herrenschmidt
On pSeries, we always force the IO space to be mapped using 4K
pages even with a 64K base page size to cope with some limitations
in the HV interface to some devices.

However, the SLB miss handler code to discriminate between vmalloc
and ioremap space uses a CPU feature section such that the code
is nop'ed out when the processor support large pages non-cachable
mappings.

Thus, we end up always using the ioremap page size for vmalloc
segments on such processors, causing a discrepency between the
segment and the hash table, and thus a hang continously hashing
the page.

It works for the first segment of the vmalloc space since that
segment is bolted in by C code correctly, and thankfully we
almost never use the vmalloc space beyond the first segment,
but the new percpu code made the bug happen.

This fixes it by removing the feature section from the assembly,
we now always do the comparison between vmalloc and ioremap.

Signed-off-by; Benjamin Herrenschmidt b...@kernel.crashing.org
---

Sachin, can you verify that works for you ?

diff --git a/arch/powerpc/mm/slb_low.S b/arch/powerpc/mm/slb_low.S
index bc44dc4..95ce355 100644
--- a/arch/powerpc/mm/slb_low.S
+++ b/arch/powerpc/mm/slb_low.S
@@ -72,19 +72,17 @@ _GLOBAL(slb_miss_kernel_load_vmemmap)
 1:
 #endif /* CONFIG_SPARSEMEM_VMEMMAP */
 
-   /* vmalloc/ioremap mapping encoding bits, the li instructions below
-* will be patched by the kernel at boot
+   /* vmalloc mapping gets the encoding from the PACA as the mapping
+* can be demoted from 64K - 4K dynamically on some machines
 */
-BEGIN_FTR_SECTION
-   /* check whether this is in vmalloc or ioremap space */
clrldi  r11,r10,48
cmpldi  r11,(VMALLOC_SIZE  28) - 1
bgt 5f
lhz r11,PACAVMALLOCSLLP(r13)
b   6f
 5:
-END_FTR_SECTION_IFCLR(CPU_FTR_CI_LARGE_PAGE)
-_GLOBAL(slb_miss_kernel_load_io)
+   /* IO mapping */
+   _GLOBAL(slb_miss_kernel_load_io)
li  r11,0
 6:
 BEGIN_FTR_SECTION


___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev


Re: [PATCH] powerpc/mm: Fix hang accessing top of vmalloc space

2009-10-13 Thread Sachin Sant

Benjamin Herrenschmidt wrote:

On pSeries, we always force the IO space to be mapped using 4K
pages even with a 64K base page size to cope with some limitations
in the HV interface to some devices.

However, the SLB miss handler code to discriminate between vmalloc
and ioremap space uses a CPU feature section such that the code
is nop'ed out when the processor support large pages non-cachable
mappings.

Thus, we end up always using the ioremap page size for vmalloc
segments on such processors, causing a discrepency between the
segment and the hash table, and thus a hang continously hashing
the page.

It works for the first segment of the vmalloc space since that
segment is bolted in by C code correctly, and thankfully we
almost never use the vmalloc space beyond the first segment,
but the new percpu code made the bug happen.

This fixes it by removing the feature section from the assembly,
we now always do the comparison between vmalloc and ioremap.

Signed-off-by; Benjamin Herrenschmidt b...@kernel.crashing.org
---

Sachin, can you verify that works for you ?

Works great. Thanks Ben.

Tested by: Sachin Sant sach...@in.ibm.com

Regards
-Sachin

--

-
Sachin Sant
IBM Linux Technology Center
India Systems and Technology Labs
Bangalore, India
-

___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev