From: Jacek Luczak <difrost.kernel@gmail.com>
To: Ingo Molnar <mingo@elte.hu>,
ijc@hellion.org.uk, tglx@linutronix.de,
LKML <linux-kernel@vger.kernel.org>
Subject: *_pagetable_setup_[start,done] crap ?
Date: Sat, 12 Apr 2008 18:20:04 +0200 [thread overview]
Message-ID: <4800E134.8040602@gmail.com> (raw)
Hi,
while investigating following section mismatch warning:
WARNING: arch/x86/mm/built-in.o(.text+0xf2): Section mismatch in reference from the function paravirt_pagetable_setup_start() to the function
.init.text:native_pagetable_setup_start()
I have found something with looks quite strange for me. This section mismatch is really easy to fix, as paravirt_pagetable_setup_start() is used by __init pagetable_init().
paravirt_pagetable_setup_start() (body in include/asm-x86/pgtable_32.h) calls, #ifndef CONFIG_PARAVIRT, __init native_pagetable_setup_start(). Here everything is OK and case is clear: to fix that mismatch, we need to annotate paravirt_pagetable_setup_start() with __init.
Same situation applies to paravirt_pagetable_setup_done(), but here it calls __init native_pagetable_setup_done(). On the other hand native_pagetable_setup_done() is quite strange:
void __init native_pagetable_setup_done(pgd_t *base)
{
}
This ,,change'' was introduced by commit: 551889a6e2a24a9c06fd453ea03b57b7746ffdc0 (x86: construct 32-bit boot time page tables in native format.), diff:
void __init native_pagetable_setup_done(pgd_t *base)
{
-#ifdef CONFIG_X86_PAE
- /*
- * Add low memory identity-mappings - SMP needs it when
- * starting up on an AP from real-mode. In the non-PAE
- * case we already have these mappings through head.S.
- * All user-space mappings are explicitly cleared after
- * SMP startup.
- */
- set_pgd(&base[0], base[USER_PTRS_PER_PGD]);
-#endif
}
native_pagetable_setup_done() is used in __init pagetable_init() through paravirt_pagetable_setup_done(), nothing really scary.
One can take a look at arch/x86/kernel/paravirt.c:
struct pv_mmu_ops pv_mmu_ops = {
#ifndef CONFIG_X86_64
.pagetable_setup_start = native_pagetable_setup_start,
.pagetable_setup_done = native_pagetable_setup_done,
#endif
So when paravirt_pagetable_setup_done() will be called while CONFIG_PARAVIRT set it will be exactly same function as aravirt_pagetable_setup_done() while CONFIG_PARAVIRT not set.
Ohh... and prototypes are wrong:
diff --git a/include/asm-x86/pgtable_32.h b/include/asm-x86/pgtable_32.h
index 6cbc520..2167879 100644
--- a/include/asm-x86/pgtable_32.h
+++ b/include/asm-x86/pgtable_32.h
@@ -204,8 +204,8 @@ do { \
*/
#define update_mmu_cache(vma, address, pte) do { } while (0)
-void native_pagetable_setup_start(pgd_t *base);
-void native_pagetable_setup_done(pgd_t *base);
+extern void native_pagetable_setup_start(pgd_t *base) __init;
+extern void native_pagetable_setup_done(pgd_t *base) __init;
For me it looks like a complete crap :) Maybe it's OK, can anybody convince me?
-Jacek
next reply other threads:[~2008-04-12 16:23 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-04-12 16:20 Jacek Luczak [this message]
2008-04-13 7:42 ` *_pagetable_setup_[start,done] crap ? Ingo Molnar
2008-04-13 9:31 ` Jacek Luczak
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=4800E134.8040602@gmail.com \
--to=difrost.kernel@gmail.com \
--cc=ijc@hellion.org.uk \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=tglx@linutronix.de \
/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.