[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [RFC PATCH 00/84] Remove direct map from Xen
From: Hongyan Xia <hongyax@xxxxxxxxxx> Previously, Wei Liu has created the patch series to switch to alloc/map/unmap/free APIs for Xen page tables so that Xen page tables are mapped with map_domain_page(). This is the first step towards removing the direct map. I implemented patches on top of Wei's to remove the direct map completely. In addition to Wei's, my patches: - (Wei) implement a proper PMAP infrastructure for bootstrapping - remove direct map code in map_domain_page() and use mapcache, use PMAP when mapcache not ready - map/unmap xenheap allocations to the direct map region so that va<->pa macros still work - install dummy mappings (no permissions, INVALID_MFN) instead of actual 1:1 mappings during boot, so the direct map no longer exists - fix many places where code incorrectly assumes a direct map I have moderately tested the patches. I am able to boot into dom0, create/destroy PV/HVM guests and run XTF tests. Personally, I find it difficult to discover all places where it incorrectly assumes a direct map, so reviews and further testing are more than welcome. Hongyan Xia (24): x86/mm: fix leaks in map_xen_pagetable. x86/pmap: break the loop in pmap APIs. x86/domain_page: use PMAP when d/vcache is not ready. x86/domain_page: mapcache is no longer tied to pv. mapcache: initialise the mapcache even for the idle domain. x86: fix some wrong assumptions on direct map. Increase PMAP slots to 8. x86/domain_page: remove direct map code and initialise idle mapcache. page_alloc: actually do the mapping and unmapping on xenheap. page_alloc: comments on (un)mapping pages in xenheap allocations. x86/smpboot: use xenheap pages for rpts in smpboot. x86/setup: start tearing down the direct map. acpi: don't assume an always-mapped direct map in acpi allocations. x86/mm: Move vmap_to_mfn() to mm.c and rename to virt_to_mfn_walk(). x86/pv: refactor how building dom0 in PV handles domheap mappings. x86/mm: handle PSE early termination cases in virt_to_mfn_walk(). x86/setup: also clear the permission bits in the dummy 1:1 mapping. x86: properly (un)map pages in restore_all_guests. Revert "x86/smpboot: use xenheap pages for rpts in smpboot." Don't assume bootmem_region_list is mapped. Also fix a double unmap bug. x86/setup: Install dummy 1:1 mappings for all mem passed to allocators. x86/mm: optimise and properly unmap pages in virt_to_mfn_walk(). x86: deduplicate code a bit and fix an unmapping bug. x86/pmap: rewrite logic for locking. x86/pv: fix a couple of direct map assumptions in dom0 building. Wei Liu (60): x86/mm: defer clearing page in virt_to_xen_lXe x86: move some xen mm function declarations x86: introduce a new set of APIs to manage Xen page tables x86/mm: introduce l{1,2}t local variables to map_pages_to_xen x86/mm: introduce l{1,2}t local variables to modify_xen_mappings x86/mm: map_pages_to_xen should have one exit path x86/mm: add an end_of_loop label in map_pages_to_xen x86/mm: make sure there is one exit path for modify_xen_mappings x86/mm: add an end_of_loop label in modify_xen_mappings x86/mm: change pl2e to l2t in virt_to_xen_l2e x86/mm: change pl1e to l1t in virt_to_xen_l1e x86/mm: change pl3e to l3t in virt_to_xen_l3e x86/mm: rewrite virt_to_xen_l3e x86/mm: rewrite xen_to_virt_l2e x86/mm: rewrite virt_to_xen_l1e x86/mm: switch to new APIs in map_pages_to_xen xxx fixup: avoid shadowing mfn x86/mm: drop lXe_to_lYe invocations in map_pages_to_xen x86/mm: switch to new APIs in modify_xen_mappings x86/mm: drop lXe_to_lYe invocations from modify_xen_mappings x86/mm: switch to new APIs in arch_init_memory x86_64/mm: introduce pl2e in paging_init x86_64/mm: switch to new APIs in paging_init x86_64/mm: drop l4e_to_l3e invocation from paging_init x86_64/mm.c: remove code that serves no purpose in setup_m2p_table x86_64/mm: introduce pl2e in setup_m2p_table x86_64/mm: switch to new APIs in setup_m2p_table x86_64/mm: drop lXe_to_lYe invocations from setup_m2p_table efi: use new page table APIs in copy_mapping efi: avoid using global variable in copy_mapping efi: use new page table APIs in efi_init_memory efi: add emacs block to boot.c efi: switch EFI L4 table to use new APIs x86/smpboot: add emacs block x86/smpboot: clone_mapping should have one exit path x86/smpboot: switch pl3e to use new APIs in clone_mapping x86/smpboot: switch pl2e to use new APIs in clone_mapping x86/smpboot: switch pl1e to use new APIs in clone_mapping x86/smpboot: drop lXe_to_lYe invocations from cleanup_cpu_root_pgt x86: switch root_pgt to mfn_t and use new APIs x86/shim: map and unmap page tables in replace_va_mapping x86_64/mm: map and unmap page tables in m2p_mapped x86_64/mm: map and unmap page tables in share_hotadd_m2p_table x86_64/mm: map and unmap page tables in destroy_compat_m2p_mapping x86_64/mm: map and unmap page tables in destroy_m2p_mapping x86_64/mm: map and unmap page tables in setup_compat_m2p_table x86_64/mm: map and unmap page tables in cleanup_frame_table x86_64/mm: map and unmap page tables in subarch_init_memory x86_64/mm: map and unmap page tables in subarch_memory_op x86/smpboot: remove lXe_to_lYe in cleanup_cpu_root_pgt x86/pv: properly map and unmap page tables in mark_pv_pt_pages_rdonly x86/pv: properly map and unmap page table in dom0_construct_pv x86: remove lXe_to_lYe in __start_xen x86/mm: drop old page table APIs x86: switch to use domheap page for page tables x86/mm: drop _new suffix for page table APIs x86: add Persistent Map (PMAP) infrastructure x86: lift domain mapcache to arch_domain x86: lift vcpu mapcache to arch_vcpu x86/pv: domheap pages should be mapped while relocating initrd xen/arch/x86/Makefile | 1 + xen/arch/x86/domain.c | 19 +- xen/arch/x86/domain_page.c | 71 ++--- xen/arch/x86/efi/runtime.h | 12 +- xen/arch/x86/mm.c | 549 ++++++++++++++++++++++++-------- xen/arch/x86/pmap.c | 121 +++++++ xen/arch/x86/pv/dom0_build.c | 107 +++++-- xen/arch/x86/pv/domain.c | 2 +- xen/arch/x86/pv/shim.c | 20 +- xen/arch/x86/setup.c | 28 +- xen/arch/x86/smpboot.c | 171 +++++++--- xen/arch/x86/x86_64/entry.S | 32 +- xen/arch/x86/x86_64/mm.c | 268 +++++++++++----- xen/common/efi/boot.c | 84 +++-- xen/common/efi/efi.h | 3 +- xen/common/efi/runtime.c | 8 +- xen/common/page_alloc.c | 37 ++- xen/common/schedule.c | 1 + xen/common/vmap.c | 2 +- xen/drivers/acpi/osl.c | 41 ++- xen/include/asm-arm/mm.h | 2 - xen/include/asm-x86/domain.h | 12 +- xen/include/asm-x86/fixmap.h | 3 + xen/include/asm-x86/mm.h | 20 ++ xen/include/asm-x86/page.h | 12 - xen/include/asm-x86/pmap.h | 10 + xen/include/asm-x86/processor.h | 2 - 27 files changed, 1211 insertions(+), 427 deletions(-) create mode 100644 xen/arch/x86/pmap.c create mode 100644 xen/include/asm-x86/pmap.h -- 2.17.1 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |