[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v4 09/12] tools: add physinfo arch_capabilities handling for Arm
On Mon, Mar 27, 2023 at 11:59:41AM +0100, Luca Fancellu wrote: > --- > tools/golang/xenlight/helpers.gen.go | 2 ++ > tools/golang/xenlight/types.gen.go | 1 + > tools/include/arm-arch-capabilities.h | 33 +++++++++++++++++++++++++ Could you move that new file into "tools/include/xen-tools/", where "common-macros.h" is. The top-dir "tools/include" already has a mixture of installed and internal headers, but most of them are installed. So the fairly recent "xen-tools" dir which have been introduced to share macros at build time seems more appropriate for another built-time macro. > tools/include/xen-tools/common-macros.h | 2 ++ > > diff --git a/tools/include/arm-arch-capabilities.h > b/tools/include/arm-arch-capabilities.h > new file mode 100644 > index 000000000000..46e876651052 > --- /dev/null > +++ b/tools/include/arm-arch-capabilities.h > @@ -0,0 +1,33 @@ > +/* SPDX-License-Identifier: GPL-2.0 */ > +/* > + * Copyright (C) 2023 ARM Ltd. > + */ > + > +#ifndef ARM_ARCH_CAPABILITIES_H > +#define ARM_ARCH_CAPABILITIES_H > + > +/* Tell the Xen public headers we are a user-space tools build. */ > +#ifndef __XEN_TOOLS__ > +#define __XEN_TOOLS__ 1 Somehow, this doesn't seems appropriate in this header. This macro should instead be set on the command line. Any reason you've added this in the header? > +#endif > + > +#include <stdint.h> > +#include <xen/sysctl.h> > + > +#include <xen-tools/common-macros.h> > + > +static inline > +unsigned int arch_capabilities_arm_sve(unsigned int arch_capabilities) > +{ > +#if defined(__aarch64__) > + unsigned int sve_vl = MASK_EXTR(arch_capabilities, > + XEN_SYSCTL_PHYSCAP_ARM_SVE_MASK); > + > + /* Vector length is divided by 128 before storing it in > arch_capabilities */ > + return sve_vl * 128U; > +#else > + return 0; > +#endif > +} > + > +#endif /* ARM_ARCH_CAPABILITIES_H */ > diff --git a/tools/libs/light/libxl_types.idl > b/tools/libs/light/libxl_types.idl > index c10292e0d7e3..fd31dacf7d5a 100644 > --- a/tools/libs/light/libxl_types.idl > +++ b/tools/libs/light/libxl_types.idl > @@ -1133,6 +1133,7 @@ libxl_physinfo = Struct("physinfo", [ > ("cap_vpmu", bool), > ("cap_gnttab_v1", bool), > ("cap_gnttab_v2", bool), > + ("arch_capabilities", uint32), This additional field needs a new LIBXL_HAVE_ macro in "libxl.h". > ], dir=DIR_OUT) > > libxl_connectorinfo = Struct("connectorinfo", [ > diff --git a/tools/python/xen/lowlevel/xc/xc.c > b/tools/python/xen/lowlevel/xc/xc.c > index 35901c2d63b6..254d3b5dccd2 100644 > --- a/tools/python/xen/lowlevel/xc/xc.c > +++ b/tools/python/xen/lowlevel/xc/xc.c > @@ -7,6 +7,7 @@ > #define PY_SSIZE_T_CLEAN > #include <Python.h> > #define XC_WANT_COMPAT_MAP_FOREIGN_API > +#include <arm-arch-capabilities.h> Could you add this header ... > #include <xenctrl.h> > #include <xenguest.h> > #include <fcntl.h> > @@ -22,8 +23,6 @@ > #include <xen/hvm/hvm_info_table.h> > #include <xen/hvm/params.h> > > -#include <xen-tools/common-macros.h> > - ... here, instead? Also, I think #include common-macros, can stay. > /* Needed for Python versions earlier than 2.3. */ > #ifndef PyMODINIT_FUNC > #define PyMODINIT_FUNC DL_EXPORT(void) > @@ -897,7 +896,7 @@ static PyObject *pyxc_physinfo(XcObject *self) > if ( p != virt_caps ) > *(p-1) = '\0'; > > - return Py_BuildValue("{s:i,s:i,s:i,s:i,s:l,s:l,s:l,s:i,s:s,s:s}", > + return Py_BuildValue("{s:i,s:i,s:i,s:i,s:l,s:l,s:l,s:i,s:s,s:s,s:i}", > "nr_nodes", pinfo.nr_nodes, > "threads_per_core", pinfo.threads_per_core, > "cores_per_socket", pinfo.cores_per_socket, > @@ -907,7 +906,10 @@ static PyObject *pyxc_physinfo(XcObject *self) > "scrub_memory", > pages_to_kib(pinfo.scrub_pages), > "cpu_khz", pinfo.cpu_khz, > "hw_caps", cpu_cap, > - "virt_caps", virt_caps); > + "virt_caps", virt_caps, > + "arm_sve_vl", > + > arch_capabilities_arm_sve(pinfo.arch_capabilities) arch_capabilities_arm_sve() returns an "unsigned int", but the format is "i", which seems to be an "int". Shouldn't the format be "I" instead? https://docs.python.org/3/c-api/arg.html#c.Py_BuildValue > + ); > } > > static PyObject *pyxc_getcpuinfo(XcObject *self, PyObject *args, PyObject > *kwds) > diff --git a/tools/xl/xl_info.c b/tools/xl/xl_info.c > index 712b7638b013..bf18ba2449ef 100644 > --- a/tools/xl/xl_info.c > +++ b/tools/xl/xl_info.c > @@ -14,6 +14,7 @@ > > #define _GNU_SOURCE > > +#include <arm-arch-capabilities.h> Any reason reason to have this header first? I feel like private headers should come after public ones, so here, this include would be added between <libxlutil.h> and "xl.h". > #include <fcntl.h> > #include <inttypes.h> > #include <stdlib.h> > @@ -224,6 +225,13 @@ static void output_physinfo(void) > info.cap_gnttab_v2 ? " gnttab-v2" : "" > ); > > + /* Print arm SVE vector length only on ARM platforms */ > +#if defined(__aarch64__) > + maybe_printf("arm_sve_vector_length : %u\n", > + arch_capabilities_arm_sve(info.arch_capabilities) > + ); > +#endif > + > vinfo = libxl_get_version_info(ctx); > if (vinfo) { > i = (1 << 20) / vinfo->pagesize; Thanks, -- Anthony PERARD
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |