[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH v6 0/7] Domain on Static Allocation
Static Allocation refers to system or sub-system(domains) for which memory areas are pre-defined by configuration using physical address ranges. Those pre-defined memory, -- Static Memory, as parts of RAM reserved in the beginning, shall never go to heap allocator or boot allocator for any use. Memory can be statically allocated to a domain using the property "xen,static- mem" defined in the domain configuration. The number of cells for the address and the size must be defined using respectively the properties "#xen,static-mem-address-cells" and "#xen,static-mem-size-cells". The property 'memory' is still needed and should match the amount of memory given to the guest. Currently, it either comes from static memory or lets Xen allocate from heap. *Mixing* is not supported. The static memory will be mapped in the guest at the usual guest memory addresses (GUEST_RAM0_BASE, GUEST_RAM1_BASE) defined by xen/include/public/arch-arm.h. This Patch Serie only talks about Domain on Static Allocation. Looking into related [design link]( https://lists.xenproject.org/archives/html/xen-devel/2021-05/msg00882.html) for more details. The whole design is about Static Allocation and 1:1 direct-map, and this Patch Serie only covers parts of it, which are Domain on Static Allocation. Other features will be delievered through different patch series. --- changes in v2: - consider reserved-memory binding and use phandle to refer(still in discussion) - remove unused reserved field in struct page_info, unused helper page_get_reserved_owner and page_set_reserved_owner - introduce CONFIG_STATIC_ALLOCATION to avoid bringing dead codes in other archs. - extract common code from free_heap_pages and free_staticmem_pages - introduce new interface assign_pages_nr - change pfn-named to mfn-named - remove meaningless MEMF_no_owner case - leave zone concept out of DMA limitation check - take care of concurrency issue on static memory allocation - ensure the consistency when `xen,static-mem` and `memory` are both defined - fix the scalability issue in allocate_static_memory - allocate static memory when parse --- changes in v3: - use "xen,static-mem" property to be compatible with System Sevice Tree in the future - introduce new helper device_tree_get_meminfo - extract common codes for dealing with reserved memory stored in bootinfo - rename from "free_page" to "mark_page_free" - remove non-trivial page_to_mfn conversion in "mark_page_free" due to pdx compression, and let the MFN passed in - let all switch-cases shared in "mark_page_free" - change CONFIG_STATIC_ALLOCATION to CONFIG_STATIC_MEMORY - put init_staticmem_pages in setup_mm - rename assign_pages_nr to assign_pages - alter the order of assign_pages parameters to help backporting - change name from alloc_staticmem_pages/alloc_domstatic_pages to acquire_staticmem_pages and acquire_domstatic_pages. - remove hunks' #ifdef-ary by introducing PGC_reserved = 0 - remove DMA restriction - "memory" property shall be mandatory - rename allocate_static_bank_memory to append_static_memory_to_bank - infer the next GFN from the bank information in append_static_memory_to_bank - simplify the code of double loop in allocate_static_memory --- changes in v4: - move the option CONFIG_STATIC_MEMORY to common code, and with Arm "select"ing it - replace round_pg{down,up}() with PFN_DOWN()/PFN_UP() - in all cases where order-0 pages get passed, prefer using new assign_pages to pass literal 1 - reconstruct the order of assign_pages parameters - moving tlb/cache flush outside of the locked region, considering XSA-364 and reducing the amount of work happening with the heap_lock held - remove MEMF_no_refcount case - make acquire_staticmem_pages/acquire_domstatic_pages being __init --- changes in v5: - check the node using the Xen domain binding whether contains the property "xen,static-mem", not the property itself - add "rc = ..." to get the error propagated - introduce new field "bool xen_domain", then static memory shall be also stored as reserved memory(bootinfo.reserved_mem), but being bind to one specific Xen domain node. - make CONFIG_STATIC_MEMORY user selectable and gated by UNSUPPORTED. - wrap all static-allocation-related codes with CONFIG_STATIC_MEMORY even in arm-specific file. - make bank_start/bank_end type of mfn_t, and rename bank_size to bank_pages. - Having both functions assign_pages/assign_page with similar parameter arrangement - bundle all the functions for static allocation in a single place - return an error and revert the changes, when the page is not free and reserved. - check the MFN is valid for every page and also add a comment to warn that this function needs to be reworked if used outside of boot. - use less of mfn_to_page/page_to_mfn - use ASSERT_UNREACHABLE() to also check that the two flags are clear - pass the start MFN first and then the number of pages in both acquire_staticmem_pages and acquire_domstatic_pages - make acquire_domstatic_pages() to return an errno - don't split comment over multi-line (even they are more than 80 characters) - simply use dt_find_property(node, "xen,static-mem", NULL) to tell whether using allocate_static_memory, and add error comment when "xen,static-mem" is used but CONFIG_STATIC_MEMORY is not enabled. - exporting p2m_insert_mapping() and introduce guest_physmap_add_pages to cope with adding guest RAM p2m mapping with nr_pages. - check both pbase and psize are page aligned - simplify the code in the loops by moving append_static_memory_to_bank() outside of the if/else. --- change v6: - move address_cells and size_cells check into device_tree_get_meminfo - doc and comment refinement - indentation, and the kconfig message fix - let assign_page have a different order for the arguments, not assign_pages - fix variable declaration and some format - use PFN_DOWN(...) - provide a stub allocate_static_memory implementation for !CONFIG_STATIC_MEMORY - add a statement to clarify the binding between the "memory" property and "xen,static-mem" --- TODO: - reboot domain on static allocation - Implement all memory-ops(hypercalls) regarding domain on static allocation to balloon in/out memory - asynchronously scrubbing PGC_reserved pages Penny Zheng (7): xen/arm: introduce new helper device_tree_get_meminfo xen/arm: introduce domain on Static Allocation xen: introduce mark_page_free xen/arm: static memory initialization xen: re-define assign_pages and introduce a new function assign_page xen/arm: introduce acquire_staticmem_pages and acquire_domstatic_pages xen/arm: introduce allocate_static_memory docs/misc/arm/device-tree/booting.txt | 39 ++++ xen/arch/arm/bootfdt.c | 108 +++++++---- xen/arch/arm/domain_build.c | 160 ++++++++++++++++- xen/arch/arm/p2m.c | 7 +- xen/arch/arm/setup.c | 27 +++ xen/arch/x86/pv/dom0_build.c | 2 +- xen/common/Kconfig | 13 ++ xen/common/grant_table.c | 2 +- xen/common/memory.c | 6 +- xen/common/page_alloc.c | 249 ++++++++++++++++++++------ xen/include/asm-arm/mm.h | 3 + xen/include/asm-arm/p2m.h | 11 ++ xen/include/asm-arm/setup.h | 1 + xen/include/xen/mm.h | 14 ++ 14 files changed, 544 insertions(+), 98 deletions(-) -- 2.25.1
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |