Date: Fri, 22 Jun 2012 13:56:58 +0000 (UTC) From: "Cherry G. Mathew" <cherry@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r237443 - in projects/amd64_xen_pv/sys: amd64/include amd64/xen x86/x86 Message-ID: <201206221356.q5MDuwNl081837@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: cherry Date: Fri Jun 22 13:56:58 2012 New Revision: 237443 URL: http://svn.freebsd.org/changeset/base/237443 Log: Add stub functions and global variables for xen suspend/resume code. While at it, re-arrange pmap.[ch] a bit. Fix macro abuse. Approved by: gibbs (implicit) Modified: projects/amd64_xen_pv/sys/amd64/include/pmap.h projects/amd64_xen_pv/sys/amd64/xen/machdep.c projects/amd64_xen_pv/sys/amd64/xen/pmap.c projects/amd64_xen_pv/sys/x86/x86/busdma_machdep.c Modified: projects/amd64_xen_pv/sys/amd64/include/pmap.h ============================================================================== --- projects/amd64_xen_pv/sys/amd64/include/pmap.h Fri Jun 22 13:56:01 2012 (r237442) +++ projects/amd64_xen_pv/sys/amd64/include/pmap.h Fri Jun 22 13:56:58 2012 (r237443) @@ -241,21 +241,7 @@ pte_store(pt_entry_t *ptep, pt_entry_t p #define VM_PAGE_TO_MACH(m) xpmap_ptom(VM_PAGE_TO_PHYS((m))) #define VTOM(va) xpmap_ptom(VTOP(va)) - -static __inline vm_paddr_t -pmap_kextract_ma(vm_offset_t va) -{ - vm_paddr_t ma = 0; - KASSERT(0, ("XXX: Please implement")); - return ma; -} - -static __inline vm_paddr_t -pmap_kextract(vm_offset_t va) -{ - return xpmap_mtop(pmap_kextract_ma(va)); -} - +vm_paddr_t pmap_kextract_ma(vm_offset_t); #define vtomach(va) pmap_kextract_ma(((vm_offset_t) (va))) vm_paddr_t pmap_extract_ma(struct pmap *pmap, vm_offset_t va); @@ -358,9 +344,7 @@ void pmap_demote_DMAP(vm_paddr_t base, v void pmap_init_pat(void); void pmap_kenter(vm_offset_t va, vm_paddr_t pa); void *pmap_kenter_temporary(vm_paddr_t pa, int i); -#ifndef XEN vm_paddr_t pmap_kextract(vm_offset_t); -#endif /* XEN */ void pmap_kremove(vm_offset_t); void *pmap_mapbios(vm_paddr_t, vm_size_t); void *pmap_mapdev(vm_paddr_t, vm_size_t); Modified: projects/amd64_xen_pv/sys/amd64/xen/machdep.c ============================================================================== --- projects/amd64_xen_pv/sys/amd64/xen/machdep.c Fri Jun 22 13:56:01 2012 (r237442) +++ projects/amd64_xen_pv/sys/amd64/xen/machdep.c Fri Jun 22 13:56:58 2012 (r237443) @@ -102,6 +102,8 @@ start_info_t *xen_start_info; shared_info_t *HYPERVISOR_shared_info; xen_pfn_t *xen_machine_phys = machine_to_phys_mapping; xen_pfn_t *xen_phys_machine; +xen_pfn_t *xen_pfn_to_mfn_frame_list[16]; /* XXX: TODO init for suspend/resume */ +xen_pfn_t *xen_pfn_to_mfn_frame_list_list; /* XXX: TODO init for suspend/resume */ #define PHYSMAP_SIZE (2 * VM_PHYSSEG_MAX) vm_offset_t pa_index = 0; Modified: projects/amd64_xen_pv/sys/amd64/xen/pmap.c ============================================================================== --- projects/amd64_xen_pv/sys/amd64/xen/pmap.c Fri Jun 22 13:56:01 2012 (r237442) +++ projects/amd64_xen_pv/sys/amd64/xen/pmap.c Fri Jun 22 13:56:58 2012 (r237443) @@ -303,7 +303,7 @@ create_boot_pagetables(vm_paddr_t *first /* Fill in the underlying page table pages */ for (i = 0; ptoa(i) < ptoa(nkmapped); i++) { ((pt_entry_t *)KPTphys)[i] = phystomach(i << PAGE_SHIFT); - ((pt_entry_t *)KPTphys)[i] |= PG_V | PG_G | PG_U; + ((pt_entry_t *)KPTphys)[i] |= PG_V | PG_U; ((pt_entry_t *)KPTphys)[i] |= pmap_xen_kernel_vaflags(PTOV(i << PAGE_SHIFT)); } @@ -773,6 +773,45 @@ pmap_extract_and_hold(pmap_t pmap, vm_of return 0; } +vm_paddr_t +pmap_kextract(vm_offset_t va) +{ + return xpmap_mtop(pmap_kextract_ma(va)); +} + +vm_paddr_t +pmap_kextract_ma(vm_offset_t va) +{ + vm_paddr_t ma; + + /* Walk the PT hierarchy to get the ma */ + char tbuf[tsz]; /* Safe to do this on the stack since tsz is + * effectively const. + */ + + mmu_map_t tptr = tbuf; + + struct mmu_map_mbackend mb = { + ptmb_mappedalloc, + ptmb_mappedfree, + ptmb_ptov, + ptmb_vtop + }; + mmu_map_t_init(tptr, &mb); + + if (!mmu_map_inspect_va(kernel_pmap, tptr, va)) { + ma = 0; + goto nomapping; + } + + ma = mmu_map_pt(tptr)[(~PDRMASK & PAGE_MASK & va) >> PAGE_SHIFT]; + + mmu_map_t_fini(tptr); + +nomapping: + return ma; +} + /*************************************************** * Low level mapping routines..... ***************************************************/ @@ -787,6 +826,12 @@ pmap_extract_and_hold(pmap_t pmap, vm_of void pmap_kenter(vm_offset_t va, vm_paddr_t pa) { + pmap_kenter_ma(va, xpmap_ptom(pa)); +} + +void +pmap_kenter_ma(vm_offset_t va, vm_paddr_t ma) +{ char tbuf[tsz]; /* Safe to do this on the stack since tsz is * effectively const. @@ -808,7 +853,7 @@ pmap_kenter(vm_offset_t va, vm_paddr_t p } /* Backing page tables are in place, let xen do the maths */ - PT_SET_MA(va, xpmap_ptom(pa) | PG_RW | PG_V | PG_U); + PT_SET_MA(va, ma | PG_RW | PG_V | PG_U); PT_UPDATES_FLUSH(); mmu_map_release_va(kernel_pmap, tptr, va); @@ -1038,6 +1083,18 @@ pmap_align_superpage(vm_object_t object, *addr = ((*addr + PDRMASK) & ~PDRMASK) + superpage_offset; } +void +pmap_suspend() +{ + KASSERT(0, ("XXX: TODO\n")); +} + +void +pmap_resume() +{ + KASSERT(0, ("XXX: TODO\n")); +} + int pmap_mincore(pmap_t pmap, vm_offset_t addr, vm_paddr_t *locked_pa) { Modified: projects/amd64_xen_pv/sys/x86/x86/busdma_machdep.c ============================================================================== --- projects/amd64_xen_pv/sys/x86/x86/busdma_machdep.c Fri Jun 22 13:56:01 2012 (r237442) +++ projects/amd64_xen_pv/sys/x86/x86/busdma_machdep.c Fri Jun 22 13:56:58 2012 (r237443) @@ -147,7 +147,7 @@ int _bus_dmamap_count_pages(bus_dma_tag_ #ifdef XEN #undef pmap_kextract -#define pmap_kextract pmap_kextract_ma +#define pmap_kextract(va) pmap_kextract_ma((va)) #endif /*
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201206221356.q5MDuwNl081837>