Hi Luca, > On 12 Apr 2023, at 11:49, Luca Fancellu <luca.fance...@arm.com> wrote: > > When the arm platform supports SVE, advertise the feature in the > field arch_capabilities in struct xen_sysctl_physinfo by encoding > the SVE vector length in it. > > Signed-off-by: Luca Fancellu <luca.fance...@arm.com> Reviewed-by: Bertrand Marquis <bertrand.marq...@arm.com>
Cheers Bertrand > --- > Changes from v4: > - Write arch_capabilities from arch_do_physinfo instead of using > stub functions (Jan) > Changes from v3: > - domainconfig_encode_vl is now named sve_encode_vl > Changes from v2: > - Remove XEN_SYSCTL_PHYSCAP_ARM_SVE_SHFT, use MASK_INSR and > protect with ifdef XEN_SYSCTL_PHYSCAP_ARM_SVE_MASK (Jan) > - Use the helper function sve_arch_cap_physinfo to encode > the VL into physinfo arch_capabilities field. > Changes from v1: > - Use only arch_capabilities and some defines to encode SVE VL > (Bertrand, Stefano, Jan) > Changes from RFC: > - new patch > --- > xen/arch/arm/sysctl.c | 4 ++++ > xen/include/public/sysctl.h | 4 ++++ > 2 files changed, 8 insertions(+) > > diff --git a/xen/arch/arm/sysctl.c b/xen/arch/arm/sysctl.c > index b0a78a8b10d0..e9a0661146e4 100644 > --- a/xen/arch/arm/sysctl.c > +++ b/xen/arch/arm/sysctl.c > @@ -11,11 +11,15 @@ > #include <xen/lib.h> > #include <xen/errno.h> > #include <xen/hypercall.h> > +#include <asm/arm64/sve.h> > #include <public/sysctl.h> > > void arch_do_physinfo(struct xen_sysctl_physinfo *pi) > { > pi->capabilities |= XEN_SYSCTL_PHYSCAP_hvm | XEN_SYSCTL_PHYSCAP_hap; > + > + pi->arch_capabilities |= MASK_INSR(sve_encode_vl(get_sys_vl_len()), > + XEN_SYSCTL_PHYSCAP_ARM_SVE_MASK); > } > > long arch_do_sysctl(struct xen_sysctl *sysctl, > diff --git a/xen/include/public/sysctl.h b/xen/include/public/sysctl.h > index 2b24d6bfd00e..9d06e92d0f6a 100644 > --- a/xen/include/public/sysctl.h > +++ b/xen/include/public/sysctl.h > @@ -94,6 +94,10 @@ struct xen_sysctl_tbuf_op { > /* Max XEN_SYSCTL_PHYSCAP_* constant. Used for ABI checking. */ > #define XEN_SYSCTL_PHYSCAP_MAX XEN_SYSCTL_PHYSCAP_gnttab_v2 > > +#if defined(__arm__) || defined(__aarch64__) > +#define XEN_SYSCTL_PHYSCAP_ARM_SVE_MASK (0x1FU) > +#endif > + > struct xen_sysctl_physinfo { > uint32_t threads_per_core; > uint32_t cores_per_socket; > -- > 2.34.1 >