Message ID | 20221207061815.7404-8-vikram.garhwal@amd.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | dynamic node programming using overlay dtbo | expand |
On Tue, Dec 06, 2022 at 10:18:13PM -0800, Vikram Garhwal wrote: > diff --git a/tools/include/xenctrl.h b/tools/include/xenctrl.h > index 0c8b4c3aa7..a71bc0bb1d 100644 > --- a/tools/include/xenctrl.h > +++ b/tools/include/xenctrl.h > @@ -2633,6 +2633,9 @@ int xc_livepatch_replace(xc_interface *xch, char *name, uint32_t timeout, uint32 > int xc_domain_cacheflush(xc_interface *xch, uint32_t domid, > xen_pfn_t start_pfn, xen_pfn_t nr_pfns); > > +int xc_dt_overlay(xc_interface *xch, void *overlay_fdt, > + uint32_t overlay_fdt_size, uint8_t overlay_op); > + Since xc_dt_overlay.c is only built on CONFIG_ARM=y, could you enclose that prototype in "#if defined(__arm__) || defined(__aarch64__)"? > /* Compat shims */ > #include "xenctrl_compat.h" > > diff --git a/tools/libs/ctrl/Makefile.common b/tools/libs/ctrl/Makefile.common > index 0a09c28fd3..247afbe5f9 100644 > --- a/tools/libs/ctrl/Makefile.common > +++ b/tools/libs/ctrl/Makefile.common > @@ -24,6 +24,7 @@ OBJS-y += xc_hcall_buf.o > OBJS-y += xc_foreign_memory.o > OBJS-y += xc_kexec.o > OBJS-y += xc_resource.o > +OBJS-$(CONFIG_ARM) += xc_dt_overlay.o > OBJS-$(CONFIG_X86) += xc_psr.o > OBJS-$(CONFIG_X86) += xc_pagetab.o > OBJS-$(CONFIG_Linux) += xc_linux.o > diff --git a/tools/libs/ctrl/xc_dt_overlay.c b/tools/libs/ctrl/xc_dt_overlay.c > new file mode 100644 > index 0000000000..325c9ef4c0 > --- /dev/null > +++ b/tools/libs/ctrl/xc_dt_overlay.c > +#include "xc_bitops.h" > +#include "xc_private.h" > +#include <xen/hvm/hvm_op.h> > +#include <libfdt.h> Why all these headers? "xc_private.h" seems sufficient. There isn't any bitmap operation, so xc_bitops.h seems unused. The device tree isn't manipulated so libfdt.h seems unused. hvm_op.h seems to be for HVMOP, not SYSCTL hypercall, xc_private.h might already include the right header to do SYSCTL. Thanks,
diff --git a/tools/include/xenctrl.h b/tools/include/xenctrl.h index 0c8b4c3aa7..a71bc0bb1d 100644 --- a/tools/include/xenctrl.h +++ b/tools/include/xenctrl.h @@ -2633,6 +2633,9 @@ int xc_livepatch_replace(xc_interface *xch, char *name, uint32_t timeout, uint32 int xc_domain_cacheflush(xc_interface *xch, uint32_t domid, xen_pfn_t start_pfn, xen_pfn_t nr_pfns); +int xc_dt_overlay(xc_interface *xch, void *overlay_fdt, + uint32_t overlay_fdt_size, uint8_t overlay_op); + /* Compat shims */ #include "xenctrl_compat.h" diff --git a/tools/libs/ctrl/Makefile.common b/tools/libs/ctrl/Makefile.common index 0a09c28fd3..247afbe5f9 100644 --- a/tools/libs/ctrl/Makefile.common +++ b/tools/libs/ctrl/Makefile.common @@ -24,6 +24,7 @@ OBJS-y += xc_hcall_buf.o OBJS-y += xc_foreign_memory.o OBJS-y += xc_kexec.o OBJS-y += xc_resource.o +OBJS-$(CONFIG_ARM) += xc_dt_overlay.o OBJS-$(CONFIG_X86) += xc_psr.o OBJS-$(CONFIG_X86) += xc_pagetab.o OBJS-$(CONFIG_Linux) += xc_linux.o diff --git a/tools/libs/ctrl/xc_dt_overlay.c b/tools/libs/ctrl/xc_dt_overlay.c new file mode 100644 index 0000000000..325c9ef4c0 --- /dev/null +++ b/tools/libs/ctrl/xc_dt_overlay.c @@ -0,0 +1,51 @@ +/* + * + * Device Tree Overlay functions. + * Copyright (C) 2021 Xilinx Inc. + * Author Vikram Garhwal <fnu.vikram@xilinx.com> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; If not, see <http://www.gnu.org/licenses/>. + */ + +#include "xc_bitops.h" +#include "xc_private.h" +#include <xen/hvm/hvm_op.h> +#include <libfdt.h> + +int xc_dt_overlay(xc_interface *xch, void *overlay_fdt, + uint32_t overlay_fdt_size, uint8_t overlay_op) +{ + int err; + DECLARE_SYSCTL; + + DECLARE_HYPERCALL_BOUNCE(overlay_fdt, overlay_fdt_size, + XC_HYPERCALL_BUFFER_BOUNCE_IN); + + if ( (err = xc_hypercall_bounce_pre(xch, overlay_fdt)) ) + goto err; + + sysctl.cmd = XEN_SYSCTL_dt_overlay; + sysctl.u.dt_overlay.overlay_op = overlay_op; + sysctl.u.dt_overlay.overlay_fdt_size = overlay_fdt_size; + + set_xen_guest_handle(sysctl.u.dt_overlay.overlay_fdt, overlay_fdt); + + if ( (err = do_sysctl(xch, &sysctl)) != 0 ) + PERROR("%s failed", __func__); + +err: + xc_hypercall_bounce_post(xch, overlay_fdt); + + return err; +}
xc_dt_overlay() sends the device tree binary overlay, size of .dtbo and overlay operation type i.e. add or remove to xen. Signed-off-by: Vikram Garhwal <vikram.garhwal@amd.com> --- tools/include/xenctrl.h | 3 ++ tools/libs/ctrl/Makefile.common | 1 + tools/libs/ctrl/xc_dt_overlay.c | 51 +++++++++++++++++++++++++++++++++ 3 files changed, 55 insertions(+) create mode 100644 tools/libs/ctrl/xc_dt_overlay.c