Changeset 8cd140f2 in mainline for kernel/arch/ia32xen/include/mm


Ignore:
Timestamp:
2006-12-11T14:14:46Z (19 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
134877d
Parents:
b82a13c
Message:

update for Xen

File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/arch/ia32xen/include/mm/page.h

    rb82a13c r8cd140f2  
    7777        mmu_ext.cmd = MMUEXT_NEW_BASEPTR; \
    7878        mmu_ext.mfn = ADDR2PFN(PA2MA(ptl0)); \
    79         xen_mmuext_op(&mmu_ext, 1, NULL, DOMID_SELF); \
     79        ASSERT(xen_mmuext_op(&mmu_ext, 1, NULL, DOMID_SELF) == 0); \
    8080}
    8181
    8282#define SET_PTL1_ADDRESS_ARCH(ptl0, i, a) { \
     83        mmuext_op_t mmu_ext; \
     84        \
     85        mmu_ext.cmd = MMUEXT_PIN_L1_TABLE; \
     86        mmu_ext.mfn = ADDR2PFN(PA2MA(a)); \
     87        ASSERT(xen_mmuext_op(&mmu_ext, 1, NULL, DOMID_SELF) == 0); \
     88        \
    8389        mmu_update_t update; \
    8490        \
    8591        update.ptr = PA2MA(KA2PA(&((pte_t *) (ptl0))[(i)])); \
    86         update.val = PA2MA(a) | 0x0003; \
    87         xen_mmu_update(&update, 1, NULL, DOMID_SELF); \
    88 }
     92        update.val = PA2MA(a); \
     93        ASSERT(xen_mmu_update(&update, 1, NULL, DOMID_SELF) == 0); \
     94}
     95
    8996#define SET_PTL2_ADDRESS_ARCH(ptl1, i, a)
    9097#define SET_PTL3_ADDRESS_ARCH(ptl2, i, a)
    91 #define SET_FRAME_ADDRESS_ARCH(ptl3, i, a)      (((pte_t *) (ptl3))[(i)].frame_address = PA2MA(a) >> 12)
     98#define SET_FRAME_ADDRESS_ARCH(ptl3, i, a) { \
     99        mmu_update_t update; \
     100        \
     101        update.ptr = PA2MA(KA2PA(&((pte_t *) (ptl3))[(i)])); \
     102        update.val = PA2MA(a); \
     103        ASSERT(xen_mmu_update(&update, 1, NULL, DOMID_SELF) == 0); \
     104}
    92105
    93106#define GET_PTL1_FLAGS_ARCH(ptl0, i)            get_pt_flags((pte_t *) (ptl0), (index_t)(i))
     
    197210static inline void set_pt_flags(pte_t *pt, index_t i, int flags)
    198211{
    199         pte_t *p = &pt[i];
    200        
    201         p->page_cache_disable = !(flags & PAGE_CACHEABLE);
    202         p->present = !(flags & PAGE_NOT_PRESENT);
    203         p->uaccessible = (flags & PAGE_USER) != 0;
    204         p->writeable = (flags & PAGE_WRITE) != 0;
    205         p->global = (flags & PAGE_GLOBAL) != 0;
     212        pte_t p = pt[i];
     213       
     214        p.page_cache_disable = !(flags & PAGE_CACHEABLE);
     215        p.present = !(flags & PAGE_NOT_PRESENT);
     216        p.uaccessible = (flags & PAGE_USER) != 0;
     217        p.writeable = (flags & PAGE_WRITE) != 0;
     218        p.global = (flags & PAGE_GLOBAL) != 0;
    206219       
    207220        /*
    208221         * Ensure that there is at least one bit set even if the present bit is cleared.
    209222         */
    210         p->soft_valid = true;
     223        p.soft_valid = true;
     224       
     225        mmu_update_t update;
     226       
     227        update.ptr = PA2MA(KA2PA(&(pt[i])));
     228        update.pte = p;
     229        xen_mmu_update(&update, 1, NULL, DOMID_SELF);
    211230}
    212231
Note: See TracChangeset for help on using the changeset viewer.