From: jonathan.austin@arm•com (Jonathan Austin)
To: linux-arm-kernel@lists•infradead.org
Subject: Why the region area don't decrease 1 in function sanity_check_meminfo?
Date: Fri, 10 Aug 2012 16:14:05 +0100 [thread overview]
Message-ID: <5025253D.3010007@arm.com> (raw)
In-Reply-To: <CAKvkGKeqzAiqRAj+H+E-eoN9SOOMP-aMhUJYmUb0UK4ei=jouA@mail.gmail.com>
On 24/07/12 11:54, ??? wrote:
> I don't known why the memory region have not decrease 1, i think it
> should be decreased(like this , (__va(bank->start + bank->size
> -1))because in sparse memory system, this address bank->start +
> bank->size is belong to another bank, so this method is not correctly.
I think you're right - we should have the '- 1' in there, although I
don't think there currently exist any situations where this will cause
us grief. Here's a patch for correctness anyway...
> Please indicate whether my understanding is correct.
As far as I can see in all existing situations, the worst effect of this
will be truncating by a single byte a bank that doesn't actually need
truncating.
As you said in your following email, we would get trouble with this if
using SPARSEMEM in a situation where the physical to virtual address
conversion is not monotonic increasing.
Jonny
---8<---
From: Jonathan Austin <jonathan.austin@arm•com>
Date: Thu, 9 Aug 2012 15:59:16 +0100
Subject: [PATCH] arm: mm: Fix vmalloc overlap check for !HIGHMEM
With !HIGHMEM, sanity_check_meminfo checks for banks that completely or
partially overlap the vmalloc region. The check for partial overlap checks
__va(bank->start + bank->size) > vmalloc_min, but the last address of the
bank is (bank->start + bank->size -1).
This doesn't cause serious issues for existing platforms, except to
truncate by a single byte a bank that doesn't actually need truncating if
it happens to finish at vmalloc_min -1.
However, theoretically, if using using SPARSEMEM in a situation where the
physical to virtual address conversion is not monotonic increasing, the
incorrect test could result in a bank not being truncated when it should be.
Reported-by: ??? (Steve) <zhanzhenbo@gmail•com>
Signed-off-by: Jonathan Austin <jonathan.austin@arm•com>
---
arch/arm/mm/mmu.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c
index 4c2d045..29f7084 100644
--- a/arch/arm/mm/mmu.c
+++ b/arch/arm/mm/mmu.c
@@ -961,8 +961,8 @@ void __init sanity_check_meminfo(void)
* Check whether this memory bank would partially overlap
* the vmalloc area.
*/
- if (__va(bank->start + bank->size) > vmalloc_min ||
- __va(bank->start + bank->size) < __va(bank->start)) {
+ if (__va(bank->start + bank->size - 1) > vmalloc_min ||
+ __va(bank->start + bank->size - 1) < __va(bank->start)) {
unsigned long newsize = vmalloc_min - __va(bank->start);
printk(KERN_NOTICE "Truncating RAM at %.8llx-%.8llx "
"to -%.8llx (vmalloc region overlap).\n",
next prev parent reply other threads:[~2012-08-10 15:14 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-07-24 10:54 Why the region area don't decrease 1 in function sanity_check_meminfo? 湛振波
2012-07-25 7:50 ` 湛振波
2012-08-10 15:14 ` Jonathan Austin [this message]
2012-08-10 15:37 ` Russell King - ARM Linux
2012-08-10 17:43 ` Jonathan Austin
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=5025253D.3010007@arm.com \
--to=jonathan.austin@arm$(echo .)com \
--cc=linux-arm-kernel@lists$(echo .)infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox