lkml.org 
[lkml]   [2012]   [Apr]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4/8] xen/p2m: An early bootup variant of set_phys_to_machine
    Date
    During early bootup we can't use alloc_page, so to allocate
    leaf pages in the P2M we need to use extend_brk. For that
    we are utilizing the early_alloc_p2m and early_alloc_p2m_middle
    functions to do the job for us. This function follows the
    same logic as set_phys_to_machine.

    Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
    ---
    arch/x86/include/asm/xen/page.h | 1 +
    arch/x86/xen/p2m.c | 15 +++++++++++++++
    2 files changed, 16 insertions(+), 0 deletions(-)

    diff --git a/arch/x86/include/asm/xen/page.h b/arch/x86/include/asm/xen/page.h
    index c34f96c..93971e8 100644
    --- a/arch/x86/include/asm/xen/page.h
    +++ b/arch/x86/include/asm/xen/page.h
    @@ -44,6 +44,7 @@ extern unsigned long machine_to_phys_nr;

    extern unsigned long get_phys_to_machine(unsigned long pfn);
    extern bool set_phys_to_machine(unsigned long pfn, unsigned long mfn);
    +extern bool __init early_set_phys_to_machine(unsigned long pfn, unsigned long mfn);
    extern bool __set_phys_to_machine(unsigned long pfn, unsigned long mfn);
    extern unsigned long set_phys_range_identity(unsigned long pfn_s,
    unsigned long pfn_e);
    diff --git a/arch/x86/xen/p2m.c b/arch/x86/xen/p2m.c
    index 952edef..ffd08c4 100644
    --- a/arch/x86/xen/p2m.c
    +++ b/arch/x86/xen/p2m.c
    @@ -570,6 +570,21 @@ static bool __init early_alloc_p2m(unsigned long pfn)
    }
    return true;
    }
    +bool __init early_set_phys_to_machine(unsigned long pfn, unsigned long mfn)
    +{
    + if (unlikely(!__set_phys_to_machine(pfn, mfn))) {
    + if (!early_alloc_p2m(pfn))
    + return false;
    +
    + if (!early_alloc_p2m_middle(pfn, false /* boundary crossover OK!*/))
    + return false;
    +
    + if (!__set_phys_to_machine(pfn, mfn))
    + return false;
    + }
    +
    + return true;
    +}
    unsigned long __init set_phys_range_identity(unsigned long pfn_s,
    unsigned long pfn_e)
    {
    --
    1.7.7.5


    \
     
     \ /
      Last update: 2012-04-16 19:23    [W:0.023 / U:60.000 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site