lkml.org 
[lkml]   [2010]   [Dec]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 6/8] xen/debug: WARN_ON when 1-1 but no _PAGE_IOMAP flag set.
    Date
    Only enabled if XEN_DEBUG_FS is enabled. We print a warning
    when:

    pfn_to_mfn(pfn) == pfn, but no VM_IO (_PAGE_IOMAP) flag
    pfn_to_mfn(pfn) != pfn, and VM_IO flag is set.

    Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
    ---
    arch/x86/xen/mmu.c | 37 +++++++++++++++++++++++++++++++++++++
    1 files changed, 37 insertions(+), 0 deletions(-)

    diff --git a/arch/x86/xen/mmu.c b/arch/x86/xen/mmu.c
    index e9dfdd6..d98bd43 100644
    --- a/arch/x86/xen/mmu.c
    +++ b/arch/x86/xen/mmu.c
    @@ -944,6 +944,40 @@ pte_t xen_make_pte(pteval_t pte)
    }
    PV_CALLEE_SAVE_REGS_THUNK(xen_make_pte);

    +#ifdef CONFIG_XEN_DEBUG_FS
    +pte_t xen_make_pte_debug(pteval_t pte)
    +{
    + phys_addr_t addr = (pte & PTE_PFN_MASK);
    + phys_addr_t other_addr;
    + bool io_page = false;
    + pte_t _pte;
    +
    + if (pte & _PAGE_IOMAP)
    + io_page = true;
    +
    + _pte = xen_make_pte(pte);
    +
    + if (!addr)
    + return _pte;
    +
    + if (io_page &&
    + (xen_initial_domain() || addr >= ISA_END_ADDRESS)) {
    + other_addr = pfn_to_mfn(addr >> PAGE_SHIFT) << PAGE_SHIFT;
    + WARN(addr != other_addr,
    + "0x%lx is using VM_IO, but it is 0x%lx!\n",
    + (unsigned long)addr, (unsigned long)other_addr);
    + } else {
    + other_addr = (_pte.pte & PTE_PFN_MASK);
    + WARN((addr == other_addr) && (!io_page),
    + "0x%lx is missing VM_IO!\n",
    + (unsigned long)addr);
    + }
    +
    + return _pte;
    +}
    +PV_CALLEE_SAVE_REGS_THUNK(xen_make_pte_debug);
    +#endif
    +
    pgd_t xen_make_pgd(pgdval_t pgd)
    {
    pgd = pte_pfn_to_mfn(pgd);
    @@ -2354,6 +2388,9 @@ __init void xen_ident_map_ISA(void)

    static __init void xen_post_allocator_init(void)
    {
    +#ifdef CONFIG_XEN_DEBUG_FS
    + pv_mmu_ops.make_pte = PV_CALLEE_SAVE(xen_make_pte_debug);
    +#endif
    pv_mmu_ops.set_pte = xen_set_pte;
    pv_mmu_ops.set_pmd = xen_set_pmd;
    pv_mmu_ops.set_pud = xen_set_pud;
    --
    1.7.1


    \
     
     \ /
      Last update: 2010-12-30 20:53    [W:0.026 / U:29.452 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site