[PATCH] xen_alloc_ptpage: cast PFN_PHYS() argument to unsigned long - Kernel

This is a discussion on [PATCH] xen_alloc_ptpage: cast PFN_PHYS() argument to unsigned long - Kernel ; [Oops, I forgot to CC lkml when sending this patch previously. Sorry] Currently paravirt_ops alloc_p*() uses u32 for the pfn args. We should change that later, but while the pfn parameter is still u32, we need to cast the PFN_PHYS() ...

+ Reply to Thread
Results 1 to 2 of 2

Thread: [PATCH] xen_alloc_ptpage: cast PFN_PHYS() argument to unsigned long

  1. [PATCH] xen_alloc_ptpage: cast PFN_PHYS() argument to unsigned long

    [Oops, I forgot to CC lkml when sending this patch previously. Sorry]

    Currently paravirt_ops alloc_p*() uses u32 for the pfn args. We should
    change that later, but while the pfn parameter is still u32, we need to
    cast the PFN_PHYS() argument at xen_alloc_ptpage() to unsigned long,
    otherwise it will lose bits on the shift.

    I think PFN_PHYS() should behave better when fed with smaller integers,
    but a cast to unsigned long won't be enough for all cases on 32-bit PAE,
    and a cast to u64 would be overkill for most users of PFN_PHYS().

    We could have two different flavors of PFN_PHYS: one for low pages
    only (unsigned long) and another that works for any page (u64)),
    but while we don't have it, we will need the cast to unsigned long on
    xen_alloc_ptpage().

    Signed-off-by: Eduardo Habkost
    Acked-by: Jeremy Fitzhardinge
    ---
    arch/x86/xen/enlighten.c | 2 +-
    1 files changed, 1 insertions(+), 1 deletions(-)

    diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
    index fc4db93..4b50c0a 100644
    --- a/arch/x86/xen/enlighten.c
    +++ b/arch/x86/xen/enlighten.c
    @@ -942,7 +942,7 @@ static void xen_alloc_ptpage(struct mm_struct *mm, u32 pfn, unsigned level)
    SetPagePinned(page);

    if (!PageHighMem(page)) {
    - make_lowmem_page_readonly(__va(PFN_PHYS(pfn)));
    + make_lowmem_page_readonly(__va(PFN_PHYS((unsigned long)pfn)));
    if (level == PT_PTE)
    pin_pagetable_pfn(MMUEXT_PIN_L1_TABLE, pfn);
    } else
    --
    1.5.5.GIT


    --
    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/

  2. Re: [PATCH] xen_alloc_ptpage: cast PFN_PHYS() argument to unsigned long


    * Eduardo Habkost wrote:

    > Currently paravirt_ops alloc_p*() uses u32 for the pfn args. We should
    > change that later, but while the pfn parameter is still u32, we need
    > to cast the PFN_PHYS() argument at xen_alloc_ptpage() to unsigned
    > long, otherwise it will lose bits on the shift.
    >
    > I think PFN_PHYS() should behave better when fed with smaller
    > integers, but a cast to unsigned long won't be enough for all cases on
    > 32-bit PAE, and a cast to u64 would be overkill for most users of
    > PFN_PHYS().
    >
    > We could have two different flavors of PFN_PHYS: one for low pages
    > only (unsigned long) and another that works for any page (u64)), but
    > while we don't have it, we will need the cast to unsigned long on
    > xen_alloc_ptpage().
    >
    > Signed-off-by: Eduardo Habkost
    > Acked-by: Jeremy Fitzhardinge


    applied to tip/x86/xen - thanks Eduardo.

    Ingo
    --
    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/

+ Reply to Thread