All of lore.kernel.org
 help / color / mirror / Atom feed
* [Xen-devel] [RFC PATCH 00/84] Remove direct map from Xen
@ 2019-09-26  9:45 hongyax
  2019-09-26  9:45 ` [Xen-devel] [RFC PATCH 01/84] x86/mm: defer clearing page in virt_to_xen_lXe hongyax
                   ` (84 more replies)
  0 siblings, 85 replies; 131+ messages in thread
From: hongyax @ 2019-09-26  9:45 UTC (permalink / raw)
  To: xen-devel
  Cc: Stefano Stabellini, Wei Liu, Hongyan Xia, George Dunlap,
	Andrew Cooper, Konrad Rzeszutek Wilk, Ian Jackson, Tim Deegan,
	Julien Grall, Jan Beulich, Dario Faggioli, Volodymyr Babchuk,
	Roger Pau Monné

From: Hongyan Xia <hongyax@amazon.com>

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@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

^ permalink raw reply	[flat|nested] 131+ messages in thread

end of thread, other threads:[~2019-09-27 15:01 UTC | newest]

Thread overview: 131+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-09-26  9:45 [Xen-devel] [RFC PATCH 00/84] Remove direct map from Xen hongyax
2019-09-26  9:45 ` [Xen-devel] [RFC PATCH 01/84] x86/mm: defer clearing page in virt_to_xen_lXe hongyax
2019-09-26  9:45 ` [Xen-devel] [RFC PATCH 02/84] x86: move some xen mm function declarations hongyax
2019-09-26  9:45 ` [Xen-devel] [RFC PATCH 03/84] x86: introduce a new set of APIs to manage Xen page tables hongyax
2019-09-26  9:45 ` [Xen-devel] [RFC PATCH 04/84] x86/mm: introduce l{1, 2}t local variables to map_pages_to_xen hongyax
2019-09-26  9:45 ` [Xen-devel] [RFC PATCH 05/84] x86/mm: introduce l{1, 2}t local variables to modify_xen_mappings hongyax
2019-09-26  9:45 ` [Xen-devel] [RFC PATCH 06/84] x86/mm: map_pages_to_xen should have one exit path hongyax
2019-09-26  9:45 ` [Xen-devel] [RFC PATCH 07/84] x86/mm: add an end_of_loop label in map_pages_to_xen hongyax
2019-09-26  9:45 ` [Xen-devel] [RFC PATCH 08/84] x86/mm: make sure there is one exit path for modify_xen_mappings hongyax
2019-09-26  9:45 ` [Xen-devel] [RFC PATCH 09/84] x86/mm: add an end_of_loop label in modify_xen_mappings hongyax
2019-09-26  9:45 ` [Xen-devel] [RFC PATCH 10/84] x86/mm: change pl2e to l2t in virt_to_xen_l2e hongyax
2019-09-26  9:45 ` [Xen-devel] [RFC PATCH 11/84] x86/mm: change pl1e to l1t in virt_to_xen_l1e hongyax
2019-09-26  9:45 ` [Xen-devel] [RFC PATCH 12/84] x86/mm: change pl3e to l3t in virt_to_xen_l3e hongyax
2019-09-26  9:45 ` [Xen-devel] [RFC PATCH 13/84] x86/mm: rewrite virt_to_xen_l3e hongyax
2019-09-26  9:45 ` [Xen-devel] [RFC PATCH 14/84] x86/mm: rewrite xen_to_virt_l2e hongyax
2019-09-26  9:45 ` [Xen-devel] [RFC PATCH 15/84] x86/mm: rewrite virt_to_xen_l1e hongyax
2019-09-26  9:45 ` [Xen-devel] [RFC PATCH 16/84] x86/mm: switch to new APIs in map_pages_to_xen hongyax
2019-09-26  9:45 ` [Xen-devel] [RFC PATCH 17/84] xxx fixup: avoid shadowing mfn hongyax
2019-09-26 13:05   ` Wei Liu
2019-09-26  9:45 ` [Xen-devel] [RFC PATCH 18/84] x86/mm: drop lXe_to_lYe invocations in map_pages_to_xen hongyax
2019-09-26  9:45 ` [Xen-devel] [RFC PATCH 19/84] x86/mm: switch to new APIs in modify_xen_mappings hongyax
2019-09-26  9:45 ` [Xen-devel] [RFC PATCH 20/84] x86/mm: drop lXe_to_lYe invocations from modify_xen_mappings hongyax
2019-09-26  9:45 ` [Xen-devel] [RFC PATCH 21/84] x86/mm: switch to new APIs in arch_init_memory hongyax
2019-09-26  9:45 ` [Xen-devel] [RFC PATCH 22/84] x86_64/mm: introduce pl2e in paging_init hongyax
2019-09-26  9:45 ` [Xen-devel] [RFC PATCH 23/84] x86_64/mm: switch to new APIs " hongyax
2019-09-26  9:45 ` [Xen-devel] [RFC PATCH 24/84] x86_64/mm: drop l4e_to_l3e invocation from paging_init hongyax
2019-09-26  9:45 ` [Xen-devel] [RFC PATCH 25/84] x86_64/mm.c: remove code that serves no purpose in setup_m2p_table hongyax
2019-09-26  9:45 ` [Xen-devel] [RFC PATCH 26/84] x86_64/mm: introduce pl2e " hongyax
2019-09-26  9:45 ` [Xen-devel] [RFC PATCH 27/84] x86_64/mm: switch to new APIs " hongyax
2019-09-26  9:45 ` [Xen-devel] [RFC PATCH 28/84] x86_64/mm: drop lXe_to_lYe invocations from setup_m2p_table hongyax
2019-09-26  9:45 ` [Xen-devel] [RFC PATCH 29/84] efi: use new page table APIs in copy_mapping hongyax
2019-09-26  9:45 ` [Xen-devel] [RFC PATCH 30/84] efi: avoid using global variable " hongyax
2019-09-26  9:45 ` [Xen-devel] [RFC PATCH 31/84] efi: use new page table APIs in efi_init_memory hongyax
2019-09-26  9:45 ` [Xen-devel] [RFC PATCH 32/84] efi: add emacs block to boot.c hongyax
2019-09-26  9:45 ` [Xen-devel] [RFC PATCH 33/84] efi: switch EFI L4 table to use new APIs hongyax
2019-09-26  9:45 ` [Xen-devel] [RFC PATCH 34/84] x86/smpboot: add emacs block hongyax
2019-09-26  9:45 ` [Xen-devel] [RFC PATCH 35/84] x86/smpboot: clone_mapping should have one exit path hongyax
2019-09-26  9:45 ` [Xen-devel] [RFC PATCH 36/84] x86/smpboot: switch pl3e to use new APIs in clone_mapping hongyax
2019-09-26  9:46 ` [Xen-devel] [RFC PATCH 37/84] x86/smpboot: switch pl2e " hongyax
2019-09-26  9:46 ` [Xen-devel] [RFC PATCH 38/84] x86/smpboot: switch pl1e " hongyax
2019-09-26  9:46 ` [Xen-devel] [RFC PATCH 39/84] x86/smpboot: drop lXe_to_lYe invocations from cleanup_cpu_root_pgt hongyax
2019-09-26  9:46 ` [Xen-devel] [RFC PATCH 40/84] x86: switch root_pgt to mfn_t and use new APIs hongyax
2019-09-26  9:46 ` [Xen-devel] [RFC PATCH 41/84] x86/shim: map and unmap page tables in replace_va_mapping hongyax
2019-09-26  9:46 ` [Xen-devel] [RFC PATCH 42/84] x86_64/mm: map and unmap page tables in m2p_mapped hongyax
2019-09-26  9:46 ` [Xen-devel] [RFC PATCH 43/84] x86_64/mm: map and unmap page tables in share_hotadd_m2p_table hongyax
2019-09-26  9:46 ` [Xen-devel] [RFC PATCH 44/84] x86_64/mm: map and unmap page tables in destroy_compat_m2p_mapping hongyax
2019-09-26  9:46 ` [Xen-devel] [RFC PATCH 45/84] x86_64/mm: map and unmap page tables in destroy_m2p_mapping hongyax
2019-09-26  9:46 ` [Xen-devel] [RFC PATCH 46/84] x86_64/mm: map and unmap page tables in setup_compat_m2p_table hongyax
2019-09-26  9:46 ` [Xen-devel] [RFC PATCH 47/84] x86_64/mm: map and unmap page tables in cleanup_frame_table hongyax
2019-09-26  9:46 ` [Xen-devel] [RFC PATCH 48/84] x86_64/mm: map and unmap page tables in subarch_init_memory hongyax
2019-09-26  9:46 ` [Xen-devel] [RFC PATCH 49/84] x86_64/mm: map and unmap page tables in subarch_memory_op hongyax
2019-09-26  9:46 ` [Xen-devel] [RFC PATCH 50/84] x86/smpboot: remove lXe_to_lYe in cleanup_cpu_root_pgt hongyax
2019-09-26  9:46 ` [Xen-devel] [RFC PATCH 51/84] x86/pv: properly map and unmap page tables in mark_pv_pt_pages_rdonly hongyax
2019-09-26  9:46 ` [Xen-devel] [RFC PATCH 52/84] x86/pv: properly map and unmap page table in dom0_construct_pv hongyax
2019-09-26  9:46 ` [Xen-devel] [RFC PATCH 53/84] x86: remove lXe_to_lYe in __start_xen hongyax
2019-09-26  9:46 ` [Xen-devel] [RFC PATCH 54/84] x86/mm: drop old page table APIs hongyax
2019-09-26  9:46 ` [Xen-devel] [RFC PATCH 55/84] x86: switch to use domheap page for page tables hongyax
2019-09-26  9:46 ` [Xen-devel] [RFC PATCH 56/84] x86/mm: drop _new suffix for page table APIs hongyax
2019-09-26  9:46 ` [Xen-devel] [RFC PATCH 57/84] x86: add Persistent Map (PMAP) infrastructure hongyax
2019-09-26  9:46 ` [Xen-devel] [RFC PATCH 58/84] x86/mm: fix leaks in map_xen_pagetable hongyax
2019-09-26 10:23   ` Julien Grall
2019-09-26 10:45     ` hongyax
2019-09-26 12:05       ` Julien Grall
2019-09-26 13:16   ` Wei Liu
2019-09-27 13:12     ` hongyax
2019-09-26  9:46 ` [Xen-devel] [RFC PATCH 59/84] x86/pmap: break the loop in pmap APIs hongyax
2019-09-26 13:21   ` Wei Liu
2019-09-26  9:46 ` [Xen-devel] [RFC PATCH 60/84] x86/domain_page: use PMAP when d/vcache is not ready hongyax
2019-09-26 13:30   ` Wei Liu
2019-09-26  9:46 ` [Xen-devel] [RFC PATCH 61/84] x86: lift domain mapcache to arch_domain hongyax
2019-09-26  9:46 ` [Xen-devel] [RFC PATCH 62/84] x86: lift vcpu mapcache to arch_vcpu hongyax
2019-09-26  9:46 ` [Xen-devel] [RFC PATCH 63/84] x86/domain_page: mapcache is no longer tied to pv hongyax
2019-09-26 13:59   ` Wei Liu
2019-09-26  9:46 ` [Xen-devel] [RFC PATCH 64/84] mapcache: initialise the mapcache even for the idle domain hongyax
2019-09-26  9:46 ` [Xen-devel] [RFC PATCH 65/84] x86: fix some wrong assumptions on direct map. Increase PMAP slots to 8 hongyax
2019-09-26 14:08   ` Wei Liu
2019-09-26  9:46 ` [Xen-devel] [RFC PATCH 66/84] x86/pv: domheap pages should be mapped while relocating initrd hongyax
2019-09-26  9:46 ` [Xen-devel] [RFC PATCH 67/84] x86/domain_page: remove direct map code and initialise idle mapcache hongyax
2019-09-26 14:14   ` Wei Liu
2019-09-26  9:46 ` [Xen-devel] [RFC PATCH 68/84] page_alloc: actually do the mapping and unmapping on xenheap hongyax
2019-09-26 10:39   ` Julien Grall
2019-09-26 10:45     ` Julien Grall
2019-09-26 10:52       ` hongyax
2019-09-26 11:18     ` hongyax
2019-09-26 12:24       ` Julien Grall
2019-09-26 13:03         ` hongyax
2019-09-26 13:22           ` Jan Beulich
2019-09-26 14:01           ` Julien Grall
2019-09-26  9:46 ` [Xen-devel] [RFC PATCH 69/84] page_alloc: comments on (un)mapping pages in xenheap allocations hongyax
2019-09-26 10:42   ` Julien Grall
2019-09-26  9:46 ` [Xen-devel] [RFC PATCH 70/84] x86/smpboot: use xenheap pages for rpts in smpboot hongyax
2019-09-26  9:46 ` [Xen-devel] [RFC PATCH 71/84] x86/setup: start tearing down the direct map hongyax
2019-09-26 10:50   ` Julien Grall
2019-09-26 14:26   ` Wei Liu
2019-09-27 12:54     ` hongyax
2019-09-27 13:00       ` Jan Beulich
2019-09-27 14:02         ` hongyax
2019-09-27 14:14           ` Jan Beulich
2019-09-27 14:49             ` hongyax
2019-09-27 15:01             ` hongyax
2019-09-27 13:01       ` Julien Grall
2019-09-26  9:46 ` [Xen-devel] [RFC PATCH 72/84] acpi: don't assume an always-mapped direct map in acpi allocations hongyax
2019-09-26  9:46 ` [Xen-devel] [RFC PATCH 73/84] x86/mm: Move vmap_to_mfn() to mm.c and rename to virt_to_mfn_walk() hongyax
2019-09-26 10:59   ` Julien Grall
2019-09-26  9:46 ` [Xen-devel] [RFC PATCH 74/84] x86/pv: refactor how building dom0 in PV handles domheap mappings hongyax
2019-09-26  9:46 ` [Xen-devel] [RFC PATCH 75/84] x86/mm: handle PSE early termination cases in virt_to_mfn_walk() hongyax
2019-09-26 14:39   ` Wei Liu
2019-09-26  9:46 ` [Xen-devel] [RFC PATCH 76/84] x86/setup: also clear the permission bits in the dummy 1:1 mapping hongyax
2019-09-26 14:42   ` Wei Liu
2019-09-26  9:46 ` [Xen-devel] [RFC PATCH 77/84] x86: properly (un)map pages in restore_all_guests hongyax
2019-09-26 14:52   ` Wei Liu
2019-09-26  9:46 ` [Xen-devel] [RFC PATCH 78/84] Revert "x86/smpboot: use xenheap pages for rpts in smpboot." hongyax
2019-09-26 14:54   ` Wei Liu
2019-09-26  9:46 ` [Xen-devel] [RFC PATCH 79/84] Don't assume bootmem_region_list is mapped. Also fix a double unmap bug hongyax
2019-09-26 11:21   ` Julien Grall
2019-09-26 12:36     ` hongyax
2019-09-26 12:51       ` Julien Grall
2019-09-26  9:46 ` [Xen-devel] [RFC PATCH 80/84] x86/setup: Install dummy 1:1 mappings for all mem passed to allocators hongyax
2019-09-26 15:47   ` Wei Liu
2019-09-26  9:46 ` [Xen-devel] [RFC PATCH 81/84] x86/mm: optimise and properly unmap pages in virt_to_mfn_walk() hongyax
2019-09-26 15:46   ` Wei Liu
2019-09-26  9:46 ` [Xen-devel] [RFC PATCH 82/84] x86: deduplicate code a bit and fix an unmapping bug hongyax
2019-09-26 15:48   ` Wei Liu
2019-09-26  9:46 ` [Xen-devel] [RFC PATCH 83/84] x86/pmap: rewrite logic for locking hongyax
2019-09-26 15:50   ` Wei Liu
2019-09-26  9:46 ` [Xen-devel] [RFC PATCH 84/84] x86/pv: fix a couple of direct map assumptions in dom0 building hongyax
2019-09-26 15:51   ` Wei Liu
2019-09-26 10:21 ` [Xen-devel] [RFC PATCH 00/84] Remove direct map from Xen Julien Grall
2019-09-26 10:33   ` hongyax
2019-09-26 12:02     ` Julien Grall
2019-09-26 16:06       ` hongyax

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.