From: Andi Kleen <ak@suse.de>
To: Thomas Gleixner <tglx@linutronix.de>
Cc: Andi Kleen <ak@suse.de>,
ebiederm@xmission.com, vgoyal@redhat.com, mingo@elte.hu,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH] [1/9] Handle kernel near memory hole in clear_kernel_mapping
Date: Thu, 31 Jan 2008 17:22:20 +0100 [thread overview]
Message-ID: <20080131162220.GA25989@bingen.suse.de> (raw)
In-Reply-To: <alpine.LFD.1.00.0801311514060.9204@apollo.tec.linutronix.de>
> > +#define overlaps(as, ae, bs, be) ((ae) >= (bs) && (as) <= (be))
>
> inline function please and a bit more intuituive arrangement of
> arguments.
Which one do you prefer? (to be honest the current one is "intuitive"
to me)
>
> > +void __init clear_kernel_mapping(unsigned long address, unsigned long size)
> > +{
> > + int sh = PMD_SHIFT;
> > + unsigned long kernel = __pa(__START_KERNEL_map);
> > +
> > + /*
> > + * Note that we cannot unmap the kernel itself because the unmapped
> > + * holes here are always at least 2MB aligned.
>
> That's not enforced. The unmap code just does not split pages.
It is -- there are BUG_ONs for this in __clear_kernel_mapping
>
> > + * This just applies to the trailing areas of the 40MB kernel mapping.
>
> How is this ensured, that it only affects the end of the 40MB mapping ?
It is enforced in the callers (actually there is only a single caller --
the GART code ) by not calling it overlapping for the kernel itself.
Given that could be checked too, but that would be probably overkill
for an internal function.
>
> > + */
> > + if (overlaps(kernel >> sh, (kernel + KERNEL_TEXT_SIZE) >> sh,
> > + __pa(address) >> sh, __pa(address + size) >> sh)) {
>
> This checks:
>
> (kernel_end + 1) >= gart_start && kernel_start <= gart_end
>
> One off error: kernel + KERNEL_TEXT_SIZE
> needs to be: kernel + KERNEL_TEXT_SIZE - 1
Ok.
>
> Also there is no sanity check, whether the area is inside real kernel text.
Hmm I can add one, but if that happens the caller is likely seriously
confused and will likely cause other problems anyways.
I don't think it can happen for the GART code which is currently
the only caller.
>
> > + printk(KERN_WARNING
> > + "Kernel mapping at %lx within 2MB of memory hole\n",
> > + kernel);
>
>
> > + __clear_kernel_mapping(__START_KERNEL_map+__pa(address), size);
>
> Doh! This is unmapping the wrong place. According to __phys_addr():
>
> paddr = vaddr - __START_KERNEL_map + phys_base;
Hmm true -- that will only affect relocatable kernels, but for those
it's wrong. Given that the patch was supposed to fix a case
that only happens relocatable kernels that's quite ironic :)
Actually thinking about it again you can just drop it for now.
It is orthogonal to gbpages. I think I added it to the series
when I was planning to do kernel mapping as GB pages, but that
turned out to be a bad idea anyways.
Thanks for the review,
-Andi
next prev parent reply other threads:[~2008-01-31 16:22 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-01-29 5:06 [PATCH] [0/9] Latest GBPAGES patchkit for 2.6.25 Andi Kleen
2008-01-29 5:06 ` [PATCH] [1/9] Handle kernel near memory hole in clear_kernel_mapping Andi Kleen
2008-01-31 15:48 ` Thomas Gleixner
2008-01-31 16:22 ` Andi Kleen [this message]
2008-01-29 5:06 ` [PATCH] [2/9] GBPAGES: Add feature macros for the gbpages cpuid bit Andi Kleen
2008-01-29 5:06 ` [PATCH] [3/9] GBPAGES: Split LARGE_PAGE_SIZE/MASK into PUD_PAGE_SIZE/PMD_PAGE_SIZE Andi Kleen
2008-01-31 15:57 ` Thomas Gleixner
2008-01-29 5:06 ` [PATCH] [4/9] Add pgtable accessor functions for GB pages Andi Kleen
2008-01-29 5:06 ` [PATCH] [5/9] GBPAGES: Support gbpages in pagetable dump Andi Kleen
2008-01-29 5:06 ` [PATCH] [6/9] GBPAGES: Add gbpages support to lookup_address Andi Kleen
2008-01-31 16:02 ` Thomas Gleixner
2008-01-29 5:06 ` [PATCH] [7/9] Add an option to disable direct mapping gbpages and a global variable Andi Kleen
2008-01-31 16:12 ` Thomas Gleixner
2008-01-31 16:24 ` Andi Kleen
2008-01-31 17:00 ` Thomas Gleixner
2008-01-29 5:06 ` [PATCH] [8/9] GBPAGES: Implement gbpages support in change_page_attr() Andi Kleen
2008-01-29 5:06 ` [PATCH] [9/9] GBPAGES: Do kernel direct mapping at boot using GB pages Andi Kleen
2008-01-31 16:17 ` Thomas Gleixner
2008-01-31 16:38 ` Andi Kleen
2008-01-31 17:10 ` Thomas Gleixner
2008-01-31 17:39 ` Andi Kleen
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=20080131162220.GA25989@bingen.suse.de \
--to=ak@suse.de \
--cc=ebiederm@xmission.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=tglx@linutronix.de \
--cc=vgoyal@redhat.com \
/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.