minios: permit blkfront to write from mapped memory
PATCH 1/1 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 <[email protected]>
extras/mini-os/blkfront.c +1 -1
@@ -88,7 +88,7 @@ struct blkfront_dev *init_blkfront(charSHARED_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 ;
extras/mini-os/include/ia64/arch_mm.h +2 -0
@@ -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))
extras/mini-os/include/x86/arch_mm.h +29 -0
@@ -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)
PATCH 1/1 minios: permit blkfront to write from mapped memory
minios: permit blkfront to write from mapped memory Missing call to virtual_to_mfn
Signed-off-by Samuel Thibault <[email protected]>
extras/mini-os/blkfront.c +1 -1
@@ -275,7 +275,7 @@ void blkfront_aio(struct blkfront_aiocbfor (j =0 ; j < n; j++) {uintptr_t data = start + j *PAGE_SIZE ; aiocbp->gref[j] = req->seg[j].gref = -gnttab_grant_access (0 ,virt_to_mfn (data), write); +gnttab_grant_access (0 ,virtual_to_mfn (data), write); req->seg[j].first_sect =0 ; req->seg[j].last_sect =PAGE_SIZE / dev->sector_size -1 ; }