diff options
author | Keir Fraser <keir.fraser@citrix.com> | 2008-01-22 14:20:37 +0000 |
---|---|---|
committer | Keir Fraser <keir.fraser@citrix.com> | 2008-01-22 14:20:37 +0000 |
commit | c69b2fa1c4dc474091badc370616bcd262df3fd4 (patch) | |
tree | ad0cbfc233d534aca0fd08531a1917dd1dc79231 /extras/mini-os/include/x86 | |
parent | e8c1abd6e75d35e747611bcad82d0d4a6564beca (diff) | |
download | xen-c69b2fa1c4dc474091badc370616bcd262df3fd4.tar.gz xen-c69b2fa1c4dc474091badc370616bcd262df3fd4.tar.bz2 xen-c69b2fa1c4dc474091badc370616bcd262df3fd4.zip |
minios: permit blkfront to write from mapped memory
by adding a virtual_to_mfn macro
Signed-off-by: Samuel Thibault <samuel.thibault@eu.citrix.com>
Diffstat (limited to 'extras/mini-os/include/x86')
-rw-r--r-- | extras/mini-os/include/x86/arch_mm.h | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/extras/mini-os/include/x86/arch_mm.h b/extras/mini-os/include/x86/arch_mm.h index 1ed2755be7..c5e106e6da 100644 --- a/extras/mini-os/include/x86/arch_mm.h +++ b/extras/mini-os/include/x86/arch_mm.h @@ -226,6 +226,35 @@ static __inline__ paddr_t machine_to_phys(maddr_t machine) #define pte_to_mfn(_pte) (((_pte) & (PADDR_MASK&PAGE_MASK)) >> L1_PAGETABLE_SHIFT) #define pte_to_virt(_pte) to_virt(mfn_to_pfn(pte_to_mfn(_pte)) << PAGE_SHIFT) + +#define PT_BASE ((pgentry_t *)start_info.pt_base) + +#ifdef __x86_64__ +#define virtual_to_l3(_virt) ((pgentry_t *)pte_to_virt(PT_BASE[l4_table_offset(_virt)])) +#else +#define virtual_to_l3(_virt) PT_BASE +#endif + +#if defined(__x86_64__) || defined(CONFIG_X86_PAE) +#define virtual_to_l2(_virt) ({ \ + unsigned long __virt2 = (_virt); \ + (pgentry_t *) pte_to_virt(virtual_to_l3(__virt2)[l3_table_offset(__virt2)]); \ +}) +#else +#define virtual_to_l2(_virt) PT_BASE +#endif + +#define virtual_to_l1(_virt) ({ \ + unsigned long __virt1 = (_virt); \ + (pgentry_t *) pte_to_virt(virtual_to_l2(__virt1)[l2_table_offset(__virt1)]); \ +}) + +#define virtual_to_pte(_virt) ({ \ + unsigned long __virt0 = (unsigned long) (_virt); \ + virtual_to_l1(__virt0)[l1_table_offset(__virt0)]; \ +}) +#define virtual_to_mfn(_virt) pte_to_mfn(virtual_to_pte(_virt)) + #define map_frames(f, n) map_frames_ex(f, n, 1, 0, 1, DOMID_SELF, 0, L1_PROT) #define map_zero(n, a) map_frames_ex(&mfn_zero, n, 0, 0, a, DOMID_SELF, 0, L1_PROT_RO) |