Message ID | 1391285687-20534-1-git-send-email-santosh.shilimkar@ti.com |
---|---|
State | Accepted |
Commit | ca4744084772e1fee999391bee0fcdca5d91a757 |
Headers | show |
Russell, On Saturday 01 February 2014 03:14 PM, Santosh Shilimkar wrote: > Commit ad6492b8 added much needed memblock_virt_alloc_low() and further > commit 07bacb3 {memblock, bootmem: restore goal for alloc_low} fixed the > issue with low memory limit thansk to Yinghai. But even after all these fixes, > there is still one case where the limit check done with ARCH_LOW_ADDRESS_LIMIT > for low memory fails. Russell pointed out the issue with 32 bit LPAE machines > in below thread. > https://lkml.org/lkml/2014/1/28/364 > > Since on some LPAE machines where memory start address is beyond 4GB, > the low memory marker in memblock will be set to default > ARCH_LOW_ADDRESS_LIMIT which is wrong. We can fix this by letting > architectures set the ARCH_LOW_ADDRESS_LIMIT using another export > similar to memblock_set_current_limit() but am not sure whether > its worth the trouble. Tell me if you think otherwise. > > Rather am just trying to fix that one broken case using memblock_virt_alloc() > in setup code since the memblock.current_limit is updated appropriately > makes it work on all ARM 32 bit machines. > > Cc: Yinghai Lu <yinghai@kernel.org> > Cc: Russell King <linux@arm.linux.org.uk> > Cc: Strashko, Grygorii <grygorii.strashko@ti.com> > Cc: Andrew Morton <akpm@linux-foundation.org> > Signed-off-by: Santosh Shilimkar <santosh.shilimkar@ti.com> > --- Whats you say here ? We should get the fix for the issue. If you are ok, I can drop the patch in patch system. > arch/arm/kernel/setup.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c > index b0df976..1e8b030 100644 > --- a/arch/arm/kernel/setup.c > +++ b/arch/arm/kernel/setup.c > @@ -731,7 +731,7 @@ static void __init request_standard_resources(const struct machine_desc *mdesc) > kernel_data.end = virt_to_phys(_end - 1); > > for_each_memblock(memory, region) { > - res = memblock_virt_alloc_low(sizeof(*res), 0); > + res = memblock_virt_alloc(sizeof(*res), 0); > res->name = "System RAM"; > res->start = __pfn_to_phys(memblock_region_memory_base_pfn(region)); > res->end = __pfn_to_phys(memblock_region_memory_end_pfn(region)) - 1; > -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
On Wednesday 05 February 2014 06:48 PM, Russell King - ARM Linux wrote: > On Wed, Feb 05, 2014 at 06:39:44PM -0500, Santosh Shilimkar wrote: >> Russell, >> >> On Saturday 01 February 2014 03:14 PM, Santosh Shilimkar wrote: >>> Commit ad6492b8 added much needed memblock_virt_alloc_low() and further >>> commit 07bacb3 {memblock, bootmem: restore goal for alloc_low} fixed the >>> issue with low memory limit thansk to Yinghai. But even after all these fixes, >>> there is still one case where the limit check done with ARCH_LOW_ADDRESS_LIMIT >>> for low memory fails. Russell pointed out the issue with 32 bit LPAE machines >>> in below thread. >>> https://lkml.org/lkml/2014/1/28/364 >>> >>> Since on some LPAE machines where memory start address is beyond 4GB, >>> the low memory marker in memblock will be set to default >>> ARCH_LOW_ADDRESS_LIMIT which is wrong. We can fix this by letting >>> architectures set the ARCH_LOW_ADDRESS_LIMIT using another export >>> similar to memblock_set_current_limit() but am not sure whether >>> its worth the trouble. Tell me if you think otherwise. >>> >>> Rather am just trying to fix that one broken case using memblock_virt_alloc() >>> in setup code since the memblock.current_limit is updated appropriately >>> makes it work on all ARM 32 bit machines. >>> >>> Cc: Yinghai Lu <yinghai@kernel.org> >>> Cc: Russell King <linux@arm.linux.org.uk> >>> Cc: Strashko, Grygorii <grygorii.strashko@ti.com> >>> Cc: Andrew Morton <akpm@linux-foundation.org> >>> Signed-off-by: Santosh Shilimkar <santosh.shilimkar@ti.com> >>> --- >> Whats you say here ? We should get the fix for the >> issue. If you are ok, I can drop the patch in patch system. > > Is this still an issue, or has Tejun fixed it by some other means? I've not > noticed anything being broken at the moment. > > Can you confirm whether we still have an issue without this patch please? > Fixes for all cases exist except 'LPAE + memory start beyond 4 GB'. This case is still broken and hence I posted the $subject patch. Regards, Santosh -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c index b0df976..1e8b030 100644 --- a/arch/arm/kernel/setup.c +++ b/arch/arm/kernel/setup.c @@ -731,7 +731,7 @@ static void __init request_standard_resources(const struct machine_desc *mdesc) kernel_data.end = virt_to_phys(_end - 1); for_each_memblock(memory, region) { - res = memblock_virt_alloc_low(sizeof(*res), 0); + res = memblock_virt_alloc(sizeof(*res), 0); res->name = "System RAM"; res->start = __pfn_to_phys(memblock_region_memory_base_pfn(region)); res->end = __pfn_to_phys(memblock_region_memory_end_pfn(region)) - 1;
Commit ad6492b8 added much needed memblock_virt_alloc_low() and further commit 07bacb3 {memblock, bootmem: restore goal for alloc_low} fixed the issue with low memory limit thansk to Yinghai. But even after all these fixes, there is still one case where the limit check done with ARCH_LOW_ADDRESS_LIMIT for low memory fails. Russell pointed out the issue with 32 bit LPAE machines in below thread. https://lkml.org/lkml/2014/1/28/364 Since on some LPAE machines where memory start address is beyond 4GB, the low memory marker in memblock will be set to default ARCH_LOW_ADDRESS_LIMIT which is wrong. We can fix this by letting architectures set the ARCH_LOW_ADDRESS_LIMIT using another export similar to memblock_set_current_limit() but am not sure whether its worth the trouble. Tell me if you think otherwise. Rather am just trying to fix that one broken case using memblock_virt_alloc() in setup code since the memblock.current_limit is updated appropriately makes it work on all ARM 32 bit machines. Cc: Yinghai Lu <yinghai@kernel.org> Cc: Russell King <linux@arm.linux.org.uk> Cc: Strashko, Grygorii <grygorii.strashko@ti.com> Cc: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Santosh Shilimkar <santosh.shilimkar@ti.com> --- arch/arm/kernel/setup.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)