[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH 09/15] tools/libs/light: Modify dtbo to domU linux dtbo format
On Wed, Apr 24, 2024 at 11:34:43AM +0800, Henry Wang wrote: > diff --git a/tools/libs/light/libxl_dt_overlay.c > b/tools/libs/light/libxl_dt_overlay.c > index cdb62b28cf..eaf11a0f9c 100644 > --- a/tools/libs/light/libxl_dt_overlay.c > +++ b/tools/libs/light/libxl_dt_overlay.c > @@ -41,6 +42,69 @@ static int check_overlay_fdt(libxl__gc *gc, void *fdt, > size_t size) > return 0; > } > > +static int modify_overlay_for_domU(libxl__gc *gc, void *overlay_dt_domU, > + size_t size) > +{ > + int rc = 0; > + int virtual_interrupt_parent = GUEST_PHANDLE_GIC; > + const struct fdt_property *fdt_prop_node = NULL; > + int overlay; > + int prop_len = 0; > + int subnode = 0; > + int fragment; > + const char *prop_name; > + const char *target_path = "/"; > + > + fdt_for_each_subnode(fragment, overlay_dt_domU, 0) { > + prop_name = fdt_getprop(overlay_dt_domU, fragment, "target-path", > + &prop_len); > + if (prop_name == NULL) { > + LOG(ERROR, "target-path property not found\n"); LOG* macros already takes care of adding \n, no need to add an extra one. > + rc = ERROR_FAIL; > + goto err; > + } > + > + /* Change target path for domU dtb. */ > + rc = fdt_setprop_string(overlay_dt_domU, fragment, "target-path", fdt_setprop_string() isn't a libxl function, store the return value in a variable named `r` instead. > + target_path); > + if (rc) { > + LOG(ERROR, "Setting interrupt parent property failed for %s\n", > + prop_name); > + goto err; > + } > + > + overlay = fdt_subnode_offset(overlay_dt_domU, fragment, > "__overlay__"); > + > + fdt_for_each_subnode(subnode, overlay_dt_domU, overlay) > + { > + const char *node_name = fdt_get_name(overlay_dt_domU, subnode, > + NULL); > + > + fdt_prop_node = fdt_getprop(overlay_dt_domU, subnode, > + "interrupt-parent", &prop_len); > + if (fdt_prop_node == NULL) { > + LOG(DETAIL, "%s property not found for %s. Skip to next > node\n", > + "interrupt-parent", node_name); Why do you have "interrupt-parent" in a separate argument? Do you meant to do something like const char *some_name = "interrupt-parent"; and use that in the 4 different places that this string is used? (Using a variable mean that we (or the compiler) can make sure that they are all spelled correctly. > + continue; > + } > + > + rc = fdt_setprop_inplace_u32(overlay_dt_domU, subnode, > + "interrupt-parent", > + virtual_interrupt_parent); > + if (rc) { > + LOG(ERROR, "Setting interrupt parent property failed for > %s\n", > + "interrupt-parent"); > + goto err; > + } > + } > + } > + > +return 0; Missed indentation. > + > +err: > + return rc; A few things, looks like `rc` is always going to be ERROR_FAIL here, unless you find an libxl_error code that better describe the error, so you could forgo the `rc` variable. Also, if you don't need to clean up anything in the function or have a generic error message, you could simply "return " instead of using the "goto" style. > +} > + > int libxl_dt_overlay(libxl_ctx *ctx, uint32_t domid, void *overlay_dt, > uint32_t overlay_dt_size, uint8_t overlay_op, > bool auto_mode, bool domain_mapping) > @@ -73,6 +137,15 @@ int libxl_dt_overlay(libxl_ctx *ctx, uint32_t domid, void > *overlay_dt, > rc = ERROR_FAIL; > } > > + /* > + * auto_mode doesn't apply to dom0 as dom0 can get the physical > + * description of the hardware. > + */ > + if (domid && auto_mode) { > + if (overlay_op == LIBXL_DT_OVERLAY_ADD) Shouldn't libxl complain if the operation is different? > + rc = modify_overlay_for_domU(gc, overlay_dt, overlay_dt_size); > + } > + > out: > GC_FREE; > return rc; Thanks, -- Anthony PERARD
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |