[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH] minios: permit blkfront to write from mapped memory
minios: permit blkfront to write from mapped memory by adding a virtual_to_mfn macro Signed-off-by: Samuel Thibault <samuel.thibault@xxxxxxxxxxxxx> diff -r 2c95a75433e4 extras/mini-os/blkfront.c --- a/extras/mini-os/blkfront.c Tue Jan 22 11:39:34 2008 +0000 +++ b/extras/mini-os/blkfront.c Tue Jan 22 14:07:07 2008 +0000 @@ -88,7 +88,7 @@ struct blkfront_dev *init_blkfront(char SHARED_RING_INIT(s); FRONT_RING_INIT(&dev->ring, s, PAGE_SIZE); - dev->ring_ref = gnttab_grant_access(0,virt_to_mfn(s),0); + dev->ring_ref = gnttab_grant_access(0,virtual_to_mfn(s),0); evtchn_alloc_unbound_t op; op.dom = DOMID_SELF; diff -r 2c95a75433e4 extras/mini-os/include/ia64/arch_mm.h --- a/extras/mini-os/include/ia64/arch_mm.h Tue Jan 22 11:39:34 2008 +0000 +++ b/extras/mini-os/include/ia64/arch_mm.h Tue Jan 22 14:07:07 2008 +0000 @@ -25,6 +25,7 @@ #define __ARCH_MM_H__ #include "page.h" +#include "ia64_cpu.h" #define PFN_PHYS(x) (pfn_to_page(x)) #define PHYS_PFN(x) (page_to_pfn(x)) @@ -32,6 +33,7 @@ #define to_phys(x) __pa(x) #define virt_to_mfn(x) virt_to_pfn(x) +#define virtual_to_mfn(x) (ia64_tpa((uint64_t)(x)) >> PAGE_SHIFT) #define STACK_SIZE_PAGE_ORDER 1 #define STACK_SIZE (PAGE_SIZE * (1 << STACK_SIZE_PAGE_ORDER)) diff -r 2c95a75433e4 extras/mini-os/include/x86/arch_mm.h --- a/extras/mini-os/include/x86/arch_mm.h Tue Jan 22 11:39:34 2008 +0000 +++ b/extras/mini-os/include/x86/arch_mm.h Tue Jan 22 14:07:07 2008 +0000 @@ -226,6 +226,35 @@ static __inline__ paddr_t machine_to_phy #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) _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |