[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v9 7/7] xen/arm: export shared memory regions as reserved-memory on device tree
On Wed, 5 Dec 2018, Stefano Stabellini wrote: > Shared memory regions need to be advertised to the guest. Fortunately, a > device tree binding for special memory regions already exist: > reserved-memory. > > Add a reserved-memory node for each shared memory region, for both > owners and borrowers. > > Signed-off-by: Stefano Stabellini <stefanos@xxxxxxxxxx> > --- > Changes in v9: > - rename master to owner and slave to borrower > - always add offset because it is 0 for the owner > - use xen,id for id > - add xen,offset according to new bindings FYI the device tree binding just went upstream. > Changes in v8: > - code style > - id is added to device tree > > Changes in v7: > - change node name to xen-shmem > - add compatible property > - add id property > --- > tools/libxl/libxl_arch.h | 2 +- > tools/libxl/libxl_arm.c | 66 > +++++++++++++++++++++++++++++++++++++++++++++--- > tools/libxl/libxl_dom.c | 2 +- > tools/libxl/libxl_x86.c | 2 +- > 4 files changed, 66 insertions(+), 6 deletions(-) > > diff --git a/tools/libxl/libxl_arch.h b/tools/libxl/libxl_arch.h > index 63c26cc..417e710 100644 > --- a/tools/libxl/libxl_arch.h > +++ b/tools/libxl/libxl_arch.h > @@ -36,7 +36,7 @@ int libxl__arch_domain_create(libxl__gc *gc, > libxl_domain_config *d_config, > /* setup arch specific hardware description, i.e. DTB on ARM */ > _hidden > int libxl__arch_domain_init_hw_description(libxl__gc *gc, > - libxl_domain_build_info *info, > + libxl_domain_config *d_config, > libxl__domain_build_state *state, > struct xc_dom_image *dom); > /* finalize arch specific hardware description. */ > diff --git a/tools/libxl/libxl_arm.c b/tools/libxl/libxl_arm.c > index 054ad58..aa1e07f 100644 > --- a/tools/libxl/libxl_arm.c > +++ b/tools/libxl/libxl_arm.c > @@ -436,6 +436,63 @@ static int make_memory_nodes(libxl__gc *gc, void *fdt, > return 0; > } > > +static int make_reserved_nodes(libxl__gc *gc, void *fdt, > + libxl_domain_config *d_config) > +{ > + int res, i; > + const char *name; > + > + if (d_config->num_sshms == 0) > + return 0; > + > + res = fdt_begin_node(fdt, "reserved-memory"); > + if (res) return res; > + > + res = fdt_property_cell(fdt, "#address-cells", GUEST_ROOT_ADDRESS_CELLS); > + if (res) return res; > + > + res = fdt_property_cell(fdt, "#size-cells", GUEST_ROOT_SIZE_CELLS); > + if (res) return res; > + > + res = fdt_property(fdt, "ranges", NULL, 0); > + if (res) return res; > + > + for (i = 0; i < d_config->num_sshms; i++) { > + uint64_t start = d_config->sshms[i].begin + > + d_config->sshms[i].offset; > + > + name = GCSPRINTF("xen-shmem@%"PRIx64, start); > + > + res = fdt_begin_node(fdt, name); > + if (res) return res; > + > + res = fdt_property_regs(gc, fdt, GUEST_ROOT_ADDRESS_CELLS, > + GUEST_ROOT_SIZE_CELLS, 1, start, > + d_config->sshms[i].size); > + if (res) return res; > + > + res = fdt_property_compat(gc, fdt, 1, "xen,shared-memory-v1"); > + if (res) return res; > + > + res = fdt_property_string(fdt, "xen,id", d_config->sshms[i].id); > + if (res) return res; > + > + if (d_config->sshms[i].role == LIBXL_SSHM_ROLE_BORROWER) { > + res = fdt_property_u64(fdt, "xen,offset", > + d_config->sshms[i].offset); > + if (res) return res; > + } > + > + res = fdt_end_node(fdt); > + if (res) return res; > + } > + > + res = fdt_end_node(fdt); > + if (res) return res; > + > + return 0; > +} > + > static int make_gicv2_node(libxl__gc *gc, void *fdt, > uint64_t gicd_base, uint64_t gicd_size, > uint64_t gicc_base, uint64_t gicc_size) > @@ -811,10 +868,11 @@ static int copy_partial_fdt(libxl__gc *gc, void *fdt, > void *pfdt) > > #define FDT_MAX_SIZE (1<<20) > > -static int libxl__prepare_dtb(libxl__gc *gc, libxl_domain_build_info *info, > +static int libxl__prepare_dtb(libxl__gc *gc, libxl_domain_config *d_config, > libxl__domain_build_state *state, > struct xc_dom_image *dom) > { > + libxl_domain_build_info *info = &d_config->b_info; > void *fdt = NULL; > void *pfdt = NULL; > int rc, res; > @@ -897,6 +955,7 @@ next_resize: > FDT( make_psci_node(gc, fdt) ); > > FDT( make_memory_nodes(gc, fdt, dom) ); > + FDT( make_reserved_nodes(gc, fdt, d_config) ); > > switch (info->arch_arm.gic_version) { > case LIBXL_GIC_VERSION_V2: > @@ -946,12 +1005,13 @@ out: > } > > int libxl__arch_domain_init_hw_description(libxl__gc *gc, > - libxl_domain_build_info *info, > + libxl_domain_config *d_config, > libxl__domain_build_state *state, > struct xc_dom_image *dom) > { > int rc; > uint64_t val; > + libxl_domain_build_info *info = &d_config->b_info; > > if (info->type != LIBXL_DOMAIN_TYPE_PVH) { > LOG(ERROR, "Unsupported Arm guest type %s", > @@ -971,7 +1031,7 @@ int libxl__arch_domain_init_hw_description(libxl__gc *gc, > if (rc) > return rc; > > - rc = libxl__prepare_dtb(gc, info, state, dom); > + rc = libxl__prepare_dtb(gc, d_config, state, dom); > if (rc) goto out; > > if (!libxl_defbool_val(info->acpi)) { > diff --git a/tools/libxl/libxl_dom.c b/tools/libxl/libxl_dom.c > index 8a8a32c..2dc7696 100644 > --- a/tools/libxl/libxl_dom.c > +++ b/tools/libxl/libxl_dom.c > @@ -706,7 +706,7 @@ static int libxl__build_dom(libxl__gc *gc, uint32_t domid, > LOG(ERROR, "xc_dom_parse_image failed"); > goto out; > } > - if ( (ret = libxl__arch_domain_init_hw_description(gc, info, state, > dom)) != 0 ) { > + if ( (ret = libxl__arch_domain_init_hw_description(gc, d_config, state, > dom)) != 0 ) { > LOGE(ERROR, "libxl__arch_domain_init_hw_description failed"); > goto out; > } > diff --git a/tools/libxl/libxl_x86.c b/tools/libxl/libxl_x86.c > index dc8c703..b99ec25 100644 > --- a/tools/libxl/libxl_x86.c > +++ b/tools/libxl/libxl_x86.c > @@ -367,7 +367,7 @@ int libxl__arch_extra_memory(libxl__gc *gc, > } > > int libxl__arch_domain_init_hw_description(libxl__gc *gc, > - libxl_domain_build_info *info, > + libxl_domain_config *d_config, > libxl__domain_build_state *state, > struct xc_dom_image *dom) > { > -- > 1.9.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 |