[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH 08/15] tools: Add domain_id and expert mode for overlay operations
On Wed, Apr 24, 2024 at 11:34:42AM +0800, Henry Wang wrote: > From: Vikram Garhwal <fnu.vikram@xxxxxxxxxx> > > Add domain_id and expert mode for overlay assignment. This enables dynamic > programming of nodes during runtime. > > Take the opportunity to fix the name mismatch in the xl command, the > command name should be "dt-overlay" instead of "dt_overlay". I don't like much these unrelated / opportunistic changes in a patch, I'd rather have a separate patch. And in this case, if it was on a separate patch, that separated patch could gain: Fixes: 61765a07e3d8 ("tools/xl: Add new xl command overlay for device tree overlay support") and potentially backported. > Signed-off-by: Vikram Garhwal <fnu.vikram@xxxxxxxxxx> > Signed-off-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxx> > Signed-off-by: Henry Wang <xin.wang2@xxxxxxx> > --- > tools/include/libxl.h | 8 +++++-- > tools/include/xenctrl.h | 5 +++-- > tools/libs/ctrl/xc_dt_overlay.c | 7 ++++-- > tools/libs/light/libxl_dt_overlay.c | 17 +++++++++++---- > tools/xl/xl_vmcontrol.c | 34 ++++++++++++++++++++++++++--- > 5 files changed, 58 insertions(+), 13 deletions(-) > > diff --git a/tools/include/libxl.h b/tools/include/libxl.h > index 62cb07dea6..59a3e1b37c 100644 > --- a/tools/include/libxl.h > +++ b/tools/include/libxl.h > @@ -2549,8 +2549,12 @@ libxl_device_pci *libxl_device_pci_list(libxl_ctx > *ctx, uint32_t domid, > void libxl_device_pci_list_free(libxl_device_pci* list, int num); > > #if defined(__arm__) || defined(__aarch64__) > -int libxl_dt_overlay(libxl_ctx *ctx, void *overlay, > - uint32_t overlay_size, uint8_t overlay_op); > +#define LIBXL_DT_OVERLAY_ADD 1 > +#define LIBXL_DT_OVERLAY_REMOVE 2 > + > +int libxl_dt_overlay(libxl_ctx *ctx, uint32_t domain_id, void *overlay, > + uint32_t overlay_size, uint8_t overlay_op, bool > auto_mode, > + bool domain_mapping); Sorry, you cannot change the API of an existing libxl function without providing something backward compatible. We have already a few example of this changes in libxl.h, e.g.: fded24ea8315 ("libxl: Make libxl_set_vcpuonline async") So, providing a wrapper called libxl_dt_overlay_0x041800() which call the new function. > #endif > > /* > diff --git a/tools/libs/light/libxl_dt_overlay.c > b/tools/libs/light/libxl_dt_overlay.c > index a6c709a6dc..cdb62b28cf 100644 > --- a/tools/libs/light/libxl_dt_overlay.c > +++ b/tools/libs/light/libxl_dt_overlay.c > @@ -57,10 +58,18 @@ int libxl_dt_overlay(libxl_ctx *ctx, void *overlay_dt, > uint32_t overlay_dt_size, > rc = 0; > } > > - r = xc_dt_overlay(ctx->xch, overlay_dt, overlay_dt_size, overlay_op); > + /* Check if user entered a valid domain id. */ > + rc = libxl_domain_info(CTX, NULL, domid); > + if (rc == ERROR_DOMAIN_NOTFOUND) { Why do you check specifically for "domain not found", what about other error? > + LOGD(ERROR, domid, "Non-existant domain."); > + return ERROR_FAIL; Use `goto out`, and you can let the function return ERROR_DOMAIN_NOTFOUND if that the error, we can just propagate the `rc` from libxl_domain_info(). > + } > + > + r = xc_dt_overlay(ctx->xch, domid, overlay_dt, overlay_dt_size, > overlay_op, > + domain_mapping); > > if (r) { > - LOG(ERROR, "%s: Adding/Removing overlay dtb failed.", __func__); > + LOG(ERROR, "domain%d: Adding/Removing overlay dtb failed.", domid); You could replace the macro by LOGD, instead of handwriting "domain%d". > rc = ERROR_FAIL; > } > > diff --git a/tools/xl/xl_vmcontrol.c b/tools/xl/xl_vmcontrol.c > index 98f6bd2e76..9674383ec3 100644 > --- a/tools/xl/xl_vmcontrol.c > +++ b/tools/xl/xl_vmcontrol.c > @@ -1270,21 +1270,48 @@ int main_dt_overlay(int argc, char **argv) > { > const char *overlay_ops = NULL; > const char *overlay_config_file = NULL; > + uint32_t domain_id = 0; > void *overlay_dtb = NULL; > int rc; > + bool auto_mode = true; > + bool domain_mapping = false; > uint8_t op; > int overlay_dtb_size = 0; > const int overlay_add_op = 1; > const int overlay_remove_op = 2; > > - if (argc < 2) { > - help("dt_overlay"); > + if (argc < 3) { > + help("dt-overlay"); > return EXIT_FAILURE; > } > > + if (argc > 5) { > + fprintf(stderr, "Too many arguments\n"); > + return ERROR_FAIL; > + } > + > overlay_ops = argv[1]; > overlay_config_file = argv[2]; > > + if (!strcmp(argv[argc - 1], "-e")) > + auto_mode = false; > + > + if (argc == 4 || !auto_mode) { > + domain_id = find_domain(argv[argc-1]); > + domain_mapping = true; > + } > + > + if (argc == 5 || !auto_mode) { > + domain_id = find_domain(argv[argc-2]); > + domain_mapping = true; > + } Sorry, I can't review that changes, this needs a change in the help message of dt-overlay, and something in the man page. (and that argument parsing looks convoluted). > + > + /* User didn't prove any overlay operation. */ I guess you meant "provide" instead of prove. But the comment can be discarded, it doesn't explain anything useful that the error message doesn't already explain. > + if (overlay_ops == NULL) { > + fprintf(stderr, "No overlay operation mode provided\n"); > + return ERROR_FAIL; That should be EXIT_FAILURE instead. (and I realise that the function already return ERROR_FAIL by mistake in several places. (ERROR_FAIL is a libxl error return value of -3, which isn't really a good exit value for CLI programmes.)) Thanks, -- Anthony PERARD
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |