From: Konrad Rzeszutek Wilk <konrad@kernel.org>
To: Yinghai Lu <yinghai@kernel.org>
Cc: Thomas Gleixner <tglx@linutronix.de>, Ingo Molnar <mingo@elte.hu>,
"H. Peter Anvin" <hpa@zytor.com>, Jacob Shin <jacob.shin@amd.com>,
Tejun Heo <tj@kernel.org>,
Stefano Stabellini <stefano.stabellini@eu.citrix.com>,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH 03/10] x86, mm: get early page table from BRK
Date: Tue, 9 Oct 2012 12:01:34 -0400 [thread overview]
Message-ID: <20121009160133.GF7639@phenom.dumpdata.com> (raw)
In-Reply-To: <1349757558-10856-4-git-send-email-yinghai@kernel.org>
On Mon, Oct 08, 2012 at 09:39:11PM -0700, Yinghai Lu wrote:
> Get pgt_buf early from BRK, and use it to map page table at first.
>
> also use the left at first, then use new one.
Left?
>
> -v2: extra xen call back for that new range.
> -v3: fix compiling about #llx in print out that is reported by Fengguang
> -v4: remove the early_pgt_buf_* stuff, because xen interface is ready yet.
> still need to run x86_init.mapping.pagetable_reserve separately.
> so we will waste some pages in BRK, will address that later.
>
> Signed-off-by: Yinghai Lu <yinghai@kernel.org>
> ---
> arch/x86/include/asm/pgtable.h | 1 +
> arch/x86/kernel/setup.c | 2 ++
> arch/x86/mm/init.c | 26 +++++++++++++++++++++++++-
> 3 files changed, 28 insertions(+), 1 deletions(-)
>
> diff --git a/arch/x86/include/asm/pgtable.h b/arch/x86/include/asm/pgtable.h
> index 52d40a1..25fa5bb 100644
> --- a/arch/x86/include/asm/pgtable.h
> +++ b/arch/x86/include/asm/pgtable.h
> @@ -599,6 +599,7 @@ static inline int pgd_none(pgd_t pgd)
>
> extern int direct_gbpages;
> void init_mem_mapping(void);
> +void early_alloc_pgt_buf(void);
>
> /* local pte updates need not use xchg for locking */
> static inline pte_t native_local_ptep_get_and_clear(pte_t *ptep)
> diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
> index 4989f80..7eb6855 100644
> --- a/arch/x86/kernel/setup.c
> +++ b/arch/x86/kernel/setup.c
> @@ -896,6 +896,8 @@ void __init setup_arch(char **cmdline_p)
>
> reserve_ibft_region();
>
> + early_alloc_pgt_buf();
> +
> /*
> * Need to conclude brk, before memblock_x86_fill()
> * it could use memblock_find_in_range, could overlap with
> diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
> index 0c58f2d..a89f485 100644
> --- a/arch/x86/mm/init.c
> +++ b/arch/x86/mm/init.c
> @@ -317,12 +317,22 @@ static void __init find_early_table_space(unsigned long start,
> unsigned long good_end,
> unsigned long tables)
> {
> - phys_addr_t base;
> + unsigned long base;
>
> base = memblock_find_in_range(start, good_end, tables, PAGE_SIZE);
> if (!base)
> panic("Cannot find space for the kernel page tables");
>
> + init_memory_mapping(base, base + tables);
> + if (pgt_buf_end > pgt_buf_start) {
> + printk(KERN_DEBUG "kernel direct mapping tables from %#lx to %#lx @ [mem %#010lx-%#010lx]\n",
> + base, base + tables - 1, pgt_buf_start << PAGE_SHIFT,
> + (pgt_buf_end << PAGE_SHIFT) - 1);
> +
> + x86_init.mapping.pagetable_reserve(PFN_PHYS(pgt_buf_start),
> + PFN_PHYS(pgt_buf_end));
> + }
> +
> pgt_buf_start = base >> PAGE_SHIFT;
> pgt_buf_end = pgt_buf_start;
> pgt_buf_top = pgt_buf_start + (tables >> PAGE_SHIFT);
> @@ -469,6 +479,20 @@ void __init init_mem_mapping(void)
> early_memtest(0, max_pfn_mapped << PAGE_SHIFT);
> }
>
> +RESERVE_BRK(early_pgt_alloc, 16384);
How did you come up with 16KB being the right size? What is this
based on? Can you provide a comment explaining why 16KB is the
right value on 32-bit and 64-bit machines?
> +
> +void __init early_alloc_pgt_buf(void)
> +{
> + unsigned long tables = 16384;
> + phys_addr_t base;
> +
> + base = __pa(extend_brk(tables, PAGE_SIZE));
> +
> + pgt_buf_start = base >> PAGE_SHIFT;
> + pgt_buf_end = pgt_buf_start;
> + pgt_buf_top = pgt_buf_start + (tables >> PAGE_SHIFT);
> +}
> +
> /*
> * devmem_is_allowed() checks to see if /dev/mem access to a certain address
> * is valid. The argument is a physical page number.
> --
> 1.7.7
>
> --
> 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/
>
next prev parent reply other threads:[~2012-10-09 16:13 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-10-09 4:39 [PATCH -v2 00/10] x86: Use BRK to pre mapping page table to make xen happy Yinghai Lu
2012-10-09 4:39 ` [PATCH 01/10] x86, mm: align start address to correct big page size Yinghai Lu
2012-10-09 4:39 ` [PATCH 02/10] x86, mm: Use big page size for small memory range Yinghai Lu
2012-10-09 4:39 ` [PATCH 03/10] x86, mm: get early page table from BRK Yinghai Lu
2012-10-09 16:01 ` Konrad Rzeszutek Wilk [this message]
2012-10-10 1:03 ` Yinghai Lu
2012-10-10 14:17 ` Konrad Rzeszutek Wilk
2012-10-10 15:49 ` Yinghai Lu
2012-10-11 14:41 ` Konrad Rzeszutek Wilk
2012-10-11 22:55 ` Yinghai Lu
2012-10-11 23:18 ` H. Peter Anvin
2012-10-09 4:39 ` [PATCH 04/10] x86, mm: Don't clear page table if next range is ram Yinghai Lu
2012-10-09 16:04 ` Konrad Rzeszutek Wilk
2012-10-10 1:08 ` Yinghai Lu
2012-10-09 4:39 ` [PATCH 05/10] x86, mm: Remove early_memremap workaround for page table accessing Yinghai Lu
2012-10-09 4:39 ` [PATCH 06/10] x86, mm: only keep initial mapping for ram Yinghai Lu
2012-10-09 4:39 ` [PATCH 07/10] x86, xen, mm: Do not need to check if page table is ioremap Yinghai Lu
2012-10-09 16:13 ` Konrad Rzeszutek Wilk
2012-10-09 4:39 ` [PATCH 08/10] x86, xen, mm: fix mapping_pagetable_reserve logic Yinghai Lu
2012-10-09 6:12 ` H. Peter Anvin
2012-10-09 6:33 ` Yinghai Lu
2012-10-09 7:22 ` H. Peter Anvin
2012-10-09 12:22 ` Stefano Stabellini
2012-10-09 14:15 ` H. Peter Anvin
2012-10-09 4:39 ` [PATCH 09/10] x86, mm: Hide pgt_buf_* into internal to xen Yinghai Lu
2012-10-09 4:39 ` [PATCH 10/10] x86, mm: Add early_pgt_buf_* Yinghai Lu
2012-10-09 6:07 ` [PATCH -v2 00/10] x86: Use BRK to pre mapping page table to make xen happy H. Peter Anvin
2012-10-09 6:21 ` Yinghai Lu
2012-10-09 6:25 ` H. Peter Anvin
2012-10-09 6:45 ` Yinghai Lu
2012-10-09 12:19 ` Stefano Stabellini
2012-10-09 18:27 ` Yinghai Lu
2012-10-10 0:00 ` Yinghai Lu
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=20121009160133.GF7639@phenom.dumpdata.com \
--to=konrad@kernel.org \
--cc=hpa@zytor.com \
--cc=jacob.shin@amd.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=stefano.stabellini@eu.citrix.com \
--cc=tglx@linutronix.de \
--cc=tj@kernel.org \
--cc=yinghai@kernel.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.