[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen staging] Revert "xen/arm: Alloc XenStore page for Dom0less DomUs from hypervisor"
commit efa6e9f15ba943d154e8d7b29384581915b2aacd Author: Julien Grall <jgrall@xxxxxxxxxx> AuthorDate: Wed Jun 19 12:48:09 2024 +0100 Commit: Julien Grall <jgrall@xxxxxxxxxx> CommitDate: Wed Jun 19 12:48:47 2024 +0100 Revert "xen/arm: Alloc XenStore page for Dom0less DomUs from hypervisor" Michal reported that the gitlab CI is failing because of this series [1]. This reverts commit 6f9d90ea943b5e0c5d11a71090c49bbfd79e97ea. Signed-off-by: Julien Grall <jgrall@xxxxxxxxxx> --- tools/helpers/init-dom0less.c | 58 ++++++++++++++++++++++++++++++++----------- xen/arch/arm/dom0less-build.c | 58 +------------------------------------------ 2 files changed, 45 insertions(+), 71 deletions(-) diff --git a/tools/helpers/init-dom0less.c b/tools/helpers/init-dom0less.c index 325527f040..fee93459c4 100644 --- a/tools/helpers/init-dom0less.c +++ b/tools/helpers/init-dom0less.c @@ -16,18 +16,30 @@ #include "init-dom-json.h" +#define XENSTORE_PFN_OFFSET 1 #define STR_MAX_LENGTH 128 -static int get_xs_page(struct xc_interface_core *xch, libxl_dominfo *info, - uint64_t *xenstore_pfn) +static int alloc_xs_page(struct xc_interface_core *xch, + libxl_dominfo *info, + uint64_t *xenstore_pfn) { int rc; + const xen_pfn_t base = GUEST_MAGIC_BASE >> XC_PAGE_SHIFT; + xen_pfn_t p2m = (GUEST_MAGIC_BASE >> XC_PAGE_SHIFT) + XENSTORE_PFN_OFFSET; - rc = xc_hvm_param_get(xch, info->domid, HVM_PARAM_STORE_PFN, xenstore_pfn); - if (rc < 0) { - fprintf(stderr,"Failed to get HVM_PARAM_STORE_PFN\n"); - return 1; - } + rc = xc_domain_setmaxmem(xch, info->domid, + info->max_memkb + (XC_PAGE_SIZE/1024)); + if (rc < 0) + return rc; + + rc = xc_domain_populate_physmap_exact(xch, info->domid, 1, 0, 0, &p2m); + if (rc < 0) + return rc; + + *xenstore_pfn = base + XENSTORE_PFN_OFFSET; + rc = xc_clear_domain_page(xch, info->domid, *xenstore_pfn); + if (rc < 0) + return rc; return 0; } @@ -88,7 +100,6 @@ static bool do_xs_write_vm(struct xs_handle *xsh, xs_transaction_t t, */ static int create_xenstore(struct xs_handle *xsh, libxl_dominfo *info, libxl_uuid uuid, - uint64_t xenstore_pfn, evtchn_port_t xenstore_port) { domid_t domid; @@ -134,7 +145,8 @@ static int create_xenstore(struct xs_handle *xsh, rc = snprintf(target_memkb_str, STR_MAX_LENGTH, "%"PRIu64, info->current_memkb); if (rc < 0 || rc >= STR_MAX_LENGTH) return rc; - rc = snprintf(ring_ref_str, STR_MAX_LENGTH, "%"PRIu64, xenstore_pfn); + rc = snprintf(ring_ref_str, STR_MAX_LENGTH, "%lld", + (GUEST_MAGIC_BASE >> XC_PAGE_SHIFT) + XENSTORE_PFN_OFFSET); if (rc < 0 || rc >= STR_MAX_LENGTH) return rc; rc = snprintf(xenstore_port_str, STR_MAX_LENGTH, "%u", xenstore_port); @@ -218,6 +230,7 @@ static int init_domain(struct xs_handle *xsh, libxl_uuid uuid; uint64_t xenstore_evtchn, xenstore_pfn; int rc; + struct xenstore_domain_interface *intf; printf("Init dom0less domain: %u\n", info->domid); @@ -232,11 +245,20 @@ static int init_domain(struct xs_handle *xsh, if (!xenstore_evtchn) return 0; - /* Get xenstore page */ - if (get_xs_page(xch, info, &xenstore_pfn) != 0) { - fprintf(stderr,"Error on getting xenstore page\n"); + /* Alloc xenstore page */ + if (alloc_xs_page(xch, info, &xenstore_pfn) != 0) { + printf("Error on alloc magic pages\n"); + return 1; + } + + intf = xenforeignmemory_map(xfh, info->domid, PROT_READ | PROT_WRITE, 1, + &xenstore_pfn, NULL); + if (!intf) { + printf("Error mapping xenstore page\n"); return 1; } + intf->connection = XENSTORE_RECONNECT; + xenforeignmemory_unmap(xfh, intf, 1); rc = xc_dom_gnttab_seed(xch, info->domid, true, (xen_pfn_t)-1, xenstore_pfn, 0, 0); @@ -250,11 +272,19 @@ static int init_domain(struct xs_handle *xsh, if (rc) err(1, "gen_stub_json_config"); - rc = create_xenstore(xsh, info, uuid, xenstore_pfn, xenstore_evtchn); + /* Now everything is ready: set HVM_PARAM_STORE_PFN */ + rc = xc_hvm_param_set(xch, info->domid, HVM_PARAM_STORE_PFN, + xenstore_pfn); + if (rc < 0) + return rc; + + rc = create_xenstore(xsh, info, uuid, xenstore_evtchn); if (rc) err(1, "writing to xenstore"); - rc = xs_introduce_domain(xsh, info->domid, xenstore_pfn, xenstore_evtchn); + rc = xs_introduce_domain(xsh, info->domid, + (GUEST_MAGIC_BASE >> XC_PAGE_SHIFT) + XENSTORE_PFN_OFFSET, + xenstore_evtchn); if (!rc) err(1, "xs_introduce_domain"); return 0; diff --git a/xen/arch/arm/dom0less-build.c b/xen/arch/arm/dom0less-build.c index ef2ba85ff4..f919d3acf9 100644 --- a/xen/arch/arm/dom0less-build.c +++ b/xen/arch/arm/dom0less-build.c @@ -1,6 +1,5 @@ /* SPDX-License-Identifier: GPL-2.0-only */ #include <xen/device_tree.h> -#include <xen/domain_page.h> #include <xen/err.h> #include <xen/event.h> #include <xen/grant_table.h> @@ -11,8 +10,6 @@ #include <xen/sizes.h> #include <xen/vmap.h> -#include <public/io/xs_wire.h> - #include <asm/arm64/sve.h> #include <asm/dom0less-build.h> #include <asm/domain_build.h> @@ -742,56 +739,6 @@ static int __init alloc_xenstore_evtchn(struct domain *d) return 0; } -#define XENSTORE_PFN_OFFSET 1 -static int __init alloc_xenstore_page(struct domain *d) -{ - struct page_info *xenstore_pg; - struct xenstore_domain_interface *interface; - mfn_t mfn; - gfn_t gfn; - int rc; - - if ( (UINT_MAX - d->max_pages) < 1 ) - { - printk(XENLOG_ERR "%pd: Over-allocation for d->max_pages by 1 page.\n", - d); - return -EINVAL; - } - d->max_pages += 1; - xenstore_pg = alloc_domheap_page(d, MEMF_bits(32)); - if ( xenstore_pg == NULL && is_64bit_domain(d) ) - xenstore_pg = alloc_domheap_page(d, 0); - if ( xenstore_pg == NULL ) - return -ENOMEM; - - mfn = page_to_mfn(xenstore_pg); - if ( !mfn_x(mfn) ) - { - free_domheap_page(xenstore_pg); - return -ENOMEM; - } - - if ( !is_domain_direct_mapped(d) ) - gfn = gaddr_to_gfn(GUEST_MAGIC_BASE + - (XENSTORE_PFN_OFFSET << PAGE_SHIFT)); - else - gfn = gaddr_to_gfn(mfn_to_maddr(mfn)); - - rc = guest_physmap_add_page(d, gfn, mfn, 0); - if ( rc ) - { - free_domheap_page(xenstore_pg); - return rc; - } - - d->arch.hvm.params[HVM_PARAM_STORE_PFN] = gfn_x(gfn); - interface = map_domain_page(mfn); - interface->connection = XENSTORE_RECONNECT; - unmap_domain_page(interface); - - return 0; -} - static int __init construct_domU(struct domain *d, const struct dt_device_node *node) { @@ -892,10 +839,7 @@ static int __init construct_domU(struct domain *d, rc = alloc_xenstore_evtchn(d); if ( rc < 0 ) return rc; - - rc = alloc_xenstore_page(d); - if ( rc < 0 ) - return rc; + d->arch.hvm.params[HVM_PARAM_STORE_PFN] = ~0ULL; } return rc; -- generated by git-patchbot for /home/xen/git/xen.git#staging
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |