From: neidhard.kim@lge.com (Kim, Jong-Sung)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH] [RESEND] arm: limit memblock base address for early_pte_alloc
Date: Thu, 28 Jun 2012 14:43:17 +0900 [thread overview]
Message-ID: <00e801cd54f0$eb8a3540$c29e9fc0$@lge.com> (raw)
In-Reply-To: <20120627160220.GA2310@linaro.org>
> From: Dave Martin [mailto:dave.martin at linaro.org]
> Sent: Thursday, June 28, 2012 1:02 AM
>
> For me, it appears that this block just contains the initial region passed
> in ATAG_MEM or on the command line, with some reservations for
> swapper_pg_dir, the kernel text/data, device tree and initramfs.
>
> So far as I can tell, the only memory guaranteed to be mapped here is the
> kernel image: there may be no guarantee that there is any unused space in
> this region which could be used to allocate extra page tables.
> The rest appears during the execution of map_lowmem().
>
> Cheers
> ---Dave
Thank you for your comment, Dave! It was not that sophisticated choice, but
I thought that normal embedded system trying to reduce the BOM would have a
big-enough first memblock memory region. However you're right. There can be
exceptional systems. Then, how do you think about following manner:
diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c
index e5dad60..0bc5316 100644
--- a/arch/arm/mm/mmu.c
+++ b/arch/arm/mm/mmu.c
@@ -1094,6 +1094,16 @@ static void __init kmap_init(void)
static void __init map_lowmem(void)
{
struct memblock_region *reg;
+ phys_addr_t pmd_map_end = 0;
+
+ for_each_memblock(memory, reg) {
+ pmd_map_end = reg->base + reg->size;
+ if((reg->base | reg->size) & ~PMD_MASK)
+ break;
+ }
+ if(pmd_map_end > lowmem_limit)
+ pmd_map_end = lowmem_limit;
+ memblock_set_current_limit(pmd_map_end & PMD_MASK);
/* Map all the lowmem memory banks. */
for_each_memblock(memory, reg) {
@@ -1113,6 +1123,8 @@ static void __init map_lowmem(void)
create_mapping(&map);
}
+
+ memblock_set_current_limit(lowmem_limit);
}
/*
@@ -1123,8 +1135,6 @@ void __init paging_init(struct machine_desc *mdesc)
{
void *zero_page;
- memblock_set_current_limit(arm_lowmem_limit);
-
build_mem_type_table();
prepare_page_table();
map_lowmem();
This will not limit the PTE-allocation to near the end of first bank.
WARNING: multiple messages have this Message-ID (diff)
From: "Kim, Jong-Sung" <neidhard.kim@lge.com>
To: 'Dave Martin' <dave.martin@linaro.org>
Cc: 'Minchan Kim' <minchan@kernel.org>,
'Russell King' <linux@arm.linux.org.uk>,
'Nicolas Pitre' <nico@linaro.org>,
'Catalin Marinas' <catalin.marinas@arm.com>,
'Chanho Min' <chanho.min@lge.com>,
linux-kernel@vger.kernel.org, linux-mm@kvack.org,
linux-arm-kernel@lists.infradead.org
Subject: RE: [PATCH] [RESEND] arm: limit memblock base address for early_pte_alloc
Date: Thu, 28 Jun 2012 14:43:17 +0900 [thread overview]
Message-ID: <00e801cd54f0$eb8a3540$c29e9fc0$@lge.com> (raw)
In-Reply-To: <20120627160220.GA2310@linaro.org>
> From: Dave Martin [mailto:dave.martin@linaro.org]
> Sent: Thursday, June 28, 2012 1:02 AM
>
> For me, it appears that this block just contains the initial region passed
> in ATAG_MEM or on the command line, with some reservations for
> swapper_pg_dir, the kernel text/data, device tree and initramfs.
>
> So far as I can tell, the only memory guaranteed to be mapped here is the
> kernel image: there may be no guarantee that there is any unused space in
> this region which could be used to allocate extra page tables.
> The rest appears during the execution of map_lowmem().
>
> Cheers
> ---Dave
Thank you for your comment, Dave! It was not that sophisticated choice, but
I thought that normal embedded system trying to reduce the BOM would have a
big-enough first memblock memory region. However you're right. There can be
exceptional systems. Then, how do you think about following manner:
diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c
index e5dad60..0bc5316 100644
--- a/arch/arm/mm/mmu.c
+++ b/arch/arm/mm/mmu.c
@@ -1094,6 +1094,16 @@ static void __init kmap_init(void)
static void __init map_lowmem(void)
{
struct memblock_region *reg;
+ phys_addr_t pmd_map_end = 0;
+
+ for_each_memblock(memory, reg) {
+ pmd_map_end = reg->base + reg->size;
+ if((reg->base | reg->size) & ~PMD_MASK)
+ break;
+ }
+ if(pmd_map_end > lowmem_limit)
+ pmd_map_end = lowmem_limit;
+ memblock_set_current_limit(pmd_map_end & PMD_MASK);
/* Map all the lowmem memory banks. */
for_each_memblock(memory, reg) {
@@ -1113,6 +1123,8 @@ static void __init map_lowmem(void)
create_mapping(&map);
}
+
+ memblock_set_current_limit(lowmem_limit);
}
/*
@@ -1123,8 +1135,6 @@ void __init paging_init(struct machine_desc *mdesc)
{
void *zero_page;
- memblock_set_current_limit(arm_lowmem_limit);
-
build_mem_type_table();
prepare_page_table();
map_lowmem();
This will not limit the PTE-allocation to near the end of first bank.
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
WARNING: multiple messages have this Message-ID (diff)
From: "Kim, Jong-Sung" <neidhard.kim@lge.com>
To: "'Dave Martin'" <dave.martin@linaro.org>
Cc: "'Minchan Kim'" <minchan@kernel.org>,
"'Russell King'" <linux@arm.linux.org.uk>,
"'Nicolas Pitre'" <nico@linaro.org>,
"'Catalin Marinas'" <catalin.marinas@arm.com>,
"'Chanho Min'" <chanho.min@lge.com>,
<linux-kernel@vger.kernel.org>, <linux-mm@kvack.org>,
<linux-arm-kernel@lists.infradead.org>
Subject: RE: [PATCH] [RESEND] arm: limit memblock base address for early_pte_alloc
Date: Thu, 28 Jun 2012 14:43:17 +0900 [thread overview]
Message-ID: <00e801cd54f0$eb8a3540$c29e9fc0$@lge.com> (raw)
In-Reply-To: <20120627160220.GA2310@linaro.org>
> From: Dave Martin [mailto:dave.martin@linaro.org]
> Sent: Thursday, June 28, 2012 1:02 AM
>
> For me, it appears that this block just contains the initial region passed
> in ATAG_MEM or on the command line, with some reservations for
> swapper_pg_dir, the kernel text/data, device tree and initramfs.
>
> So far as I can tell, the only memory guaranteed to be mapped here is the
> kernel image: there may be no guarantee that there is any unused space in
> this region which could be used to allocate extra page tables.
> The rest appears during the execution of map_lowmem().
>
> Cheers
> ---Dave
Thank you for your comment, Dave! It was not that sophisticated choice, but
I thought that normal embedded system trying to reduce the BOM would have a
big-enough first memblock memory region. However you're right. There can be
exceptional systems. Then, how do you think about following manner:
diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c
index e5dad60..0bc5316 100644
--- a/arch/arm/mm/mmu.c
+++ b/arch/arm/mm/mmu.c
@@ -1094,6 +1094,16 @@ static void __init kmap_init(void)
static void __init map_lowmem(void)
{
struct memblock_region *reg;
+ phys_addr_t pmd_map_end = 0;
+
+ for_each_memblock(memory, reg) {
+ pmd_map_end = reg->base + reg->size;
+ if((reg->base | reg->size) & ~PMD_MASK)
+ break;
+ }
+ if(pmd_map_end > lowmem_limit)
+ pmd_map_end = lowmem_limit;
+ memblock_set_current_limit(pmd_map_end & PMD_MASK);
/* Map all the lowmem memory banks. */
for_each_memblock(memory, reg) {
@@ -1113,6 +1123,8 @@ static void __init map_lowmem(void)
create_mapping(&map);
}
+
+ memblock_set_current_limit(lowmem_limit);
}
/*
@@ -1123,8 +1135,6 @@ void __init paging_init(struct machine_desc *mdesc)
{
void *zero_page;
- memblock_set_current_limit(arm_lowmem_limit);
-
build_mem_type_table();
prepare_page_table();
map_lowmem();
This will not limit the PTE-allocation to near the end of first bank.
next prev parent reply other threads:[~2012-06-28 5:43 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-06-05 7:11 [PATCH] [RESEND] arm: limit memblock base address for early_pte_alloc Minchan Kim
2012-06-05 7:11 ` Minchan Kim
2012-06-05 7:11 ` Minchan Kim
2012-06-08 13:58 ` Kim, Jong-Sung
2012-06-08 13:58 ` Kim, Jong-Sung
2012-06-08 13:58 ` Kim, Jong-Sung
2012-06-27 16:02 ` Dave Martin
2012-06-27 16:02 ` Dave Martin
2012-06-27 16:02 ` Dave Martin
2012-06-28 5:43 ` Kim, Jong-Sung [this message]
2012-06-28 5:43 ` Kim, Jong-Sung
2012-06-28 5:43 ` Kim, Jong-Sung
2012-06-28 6:25 ` Nicolas Pitre
2012-06-28 6:25 ` Nicolas Pitre
2012-06-28 6:25 ` Nicolas Pitre
2012-06-28 6:54 ` Kim, Jong-Sung
2012-06-28 6:54 ` Kim, Jong-Sung
2012-06-28 6:54 ` Kim, Jong-Sung
2012-06-27 19:18 ` Russell King - ARM Linux
2012-06-27 19:18 ` Russell King - ARM Linux
2012-06-27 19:18 ` Russell King - ARM Linux
2012-06-28 6:08 ` Kim, Jong-Sung
2012-06-28 6:08 ` Kim, Jong-Sung
2012-06-28 6:08 ` Kim, Jong-Sung
2012-06-19 8:38 ` Minchan Kim
2012-06-19 8:38 ` Minchan Kim
2012-06-19 8:38 ` Minchan Kim
2012-06-27 16:12 ` Dave Martin
2012-06-27 16:12 ` Dave Martin
2012-06-27 16:12 ` Dave Martin
2012-06-28 4:33 ` Nicolas Pitre
2012-06-28 4:33 ` Nicolas Pitre
2012-06-28 4:33 ` Nicolas Pitre
2012-06-28 4:46 ` Minchan Kim
2012-06-28 9:08 ` Russell King - ARM Linux
2012-06-28 9:08 ` Russell King - ARM Linux
2012-06-28 9:08 ` Russell King - ARM Linux
2012-06-28 17:50 ` Nicolas Pitre
2012-06-28 17:50 ` Nicolas Pitre
2012-06-28 17:50 ` Nicolas Pitre
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='00e801cd54f0$eb8a3540$c29e9fc0$@lge.com' \
--to=neidhard.kim@lge.com \
--cc=linux-arm-kernel@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.