|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v2 18/19] xen/sysctl: wrap around arch-specific arch_do_sysctl
On 18.04.2025 11:46, Penny, Zheng wrote:
> [Public]
>
> Hi,
>
>> -----Original Message-----
>> From: Jan Beulich <jbeulich@xxxxxxxx>
>> Sent: Tuesday, April 1, 2025 10:47 PM
>> To: Penny, Zheng <penny.zheng@xxxxxxx>
>> Cc: Huang, Ray <Ray.Huang@xxxxxxx>; Stefano Stabellini
>> <sstabellini@xxxxxxxxxx>; Julien Grall <julien@xxxxxxx>; Bertrand Marquis
>> <bertrand.marquis@xxxxxxx>; Orzel, Michal <Michal.Orzel@xxxxxxx>;
>> Volodymyr Babchuk <Volodymyr_Babchuk@xxxxxxxx>; Andrew Cooper
>> <andrew.cooper3@xxxxxxxxxx>; Anthony PERARD <anthony.perard@xxxxxxxxxx>;
>> Roger Pau Monné <roger.pau@xxxxxxxxxx>; Alistair Francis
>> <alistair.francis@xxxxxxx>; Bob Eshleman <bobbyeshleman@xxxxxxxxx>;
>> Connor Davis <connojdavis@xxxxxxxxx>; Oleksii Kurochko
>> <oleksii.kurochko@xxxxxxxxx>; Stabellini, Stefano
>> <stefano.stabellini@xxxxxxx>; Sergiy Kibrik <Sergiy_Kibrik@xxxxxxxx>; xen-
>> devel@xxxxxxxxxxxxxxxxxxxx
>> Subject: Re: [PATCH v2 18/19] xen/sysctl: wrap around arch-specific
>> arch_do_sysctl
>>
>> On 26.03.2025 06:50, Penny Zheng wrote:
>>> Function arch_do_sysctl is to perform arch-specific sysctl op.
>>> Some functions, like psr_get_info for x86, DTB overlay support for
>>> arm, are solely available through sysctl op, then they all shall be
>>> wrapped with CONFIG_SYSCTL Also, remove all #ifdef CONFIG_SYSCTL-s in
>>> arch-specific sysctl.c, as we put the guardian in Makefile for the
>>> whole file.
>>>
>>> Signed-off-by: Stefano Stabellini <stefano.stabellini@xxxxxxx>
>>> Signed-off-by: Sergiy Kibrik <Sergiy_Kibrik@xxxxxxxx>
>>> Signed-off-by: Penny Zheng <Penny.Zheng@xxxxxxx>
>>> ---
>>> - use "depends on" for config OVERLAY_DTB
>>> - no need to wrap declaration
>>> - add transient #ifdef in sysctl.c for correct compilation
>>> ---
>>> xen/arch/arm/Kconfig | 1 +
>>> xen/arch/arm/Makefile | 2 +-
>>> xen/arch/arm/sysctl.c | 2 --
>>> xen/arch/riscv/stubs.c | 2 +-
>>> xen/arch/x86/Makefile | 2 +-
>>> xen/arch/x86/psr.c | 18 ++++++++++++++++++
>>> xen/arch/x86/sysctl.c | 2 --
>>> xen/common/sysctl.c | 2 ++
>>> 8 files changed, 24 insertions(+), 7 deletions(-)
>>>
>>> diff --git a/xen/arch/arm/Kconfig b/xen/arch/arm/Kconfig index
>>> ffdff1f0a3..aa1b4a6e6b 100644
>>> --- a/xen/arch/arm/Kconfig
>>> +++ b/xen/arch/arm/Kconfig
>>> @@ -141,6 +141,7 @@ config HAS_ITS
>>>
>>> config OVERLAY_DTB
>>> bool "DTB overlay support (UNSUPPORTED)" if UNSUPPORTED
>>> + depends on SYSCTL
>>> help
>>> Dynamic addition/removal of Xen device tree nodes using a dtbo.
>>>
>>> diff --git a/xen/arch/arm/Makefile b/xen/arch/arm/Makefile index
>>> 4837ad467a..7c6015b84d 100644
>>> --- a/xen/arch/arm/Makefile
>>> +++ b/xen/arch/arm/Makefile
>>> @@ -54,7 +54,7 @@ obj-y += smpboot.o
>>> obj-$(CONFIG_STATIC_EVTCHN) += static-evtchn.init.o
>>> obj-$(CONFIG_STATIC_MEMORY) += static-memory.init.o
>>> obj-$(CONFIG_STATIC_SHM) += static-shmem.init.o -obj-y += sysctl.o
>>> +obj-$(CONFIG_SYSCTL) += sysctl.o
>>> obj-y += time.o
>>> obj-y += traps.o
>>> obj-y += vcpreg.o
>>> diff --git a/xen/arch/arm/sysctl.c b/xen/arch/arm/sysctl.c index
>>> 2d350b700a..32cab4feff 100644
>>> --- a/xen/arch/arm/sysctl.c
>>> +++ b/xen/arch/arm/sysctl.c
>>> @@ -15,7 +15,6 @@
>>> #include <asm/arm64/sve.h>
>>> #include <public/sysctl.h>
>>>
>>> -#ifdef CONFIG_SYSCTL
>>> void arch_do_physinfo(struct xen_sysctl_physinfo *pi) {
>>> pi->capabilities |= XEN_SYSCTL_PHYSCAP_hvm |
>>> XEN_SYSCTL_PHYSCAP_hap; @@ -23,7 +22,6 @@ void
>> arch_do_physinfo(struct xen_sysctl_physinfo *pi)
>>> pi->arch_capabilities |= MASK_INSR(sve_encode_vl(get_sys_vl_len()),
>>>
>>> XEN_SYSCTL_PHYSCAP_ARM_SVE_MASK); } -#endif
>>>
>>> long arch_do_sysctl(struct xen_sysctl *sysctl,
>>> XEN_GUEST_HANDLE_PARAM(xen_sysctl_t) u_sysctl)
>>> diff --git a/xen/arch/riscv/stubs.c b/xen/arch/riscv/stubs.c index
>>> 7b3f748886..ae865e1972 100644
>>> --- a/xen/arch/riscv/stubs.c
>>> +++ b/xen/arch/riscv/stubs.c
>>> @@ -322,13 +322,13 @@ unsigned long raw_copy_from_guest(void *to,
>>> const void __user *from,
>>>
>>> /* sysctl.c */
>>>
>>> +#ifdef CONFIG_SYSCTL
>>> long arch_do_sysctl(struct xen_sysctl *sysctl,
>>> XEN_GUEST_HANDLE_PARAM(xen_sysctl_t) u_sysctl) {
>>> BUG_ON("unimplemented");
>>> }
>>>
>>> -#ifdef CONFIG_SYSCTL
>>> void arch_do_physinfo(struct xen_sysctl_physinfo *pi) {
>>> BUG_ON("unimplemented");
>>> diff --git a/xen/arch/x86/Makefile b/xen/arch/x86/Makefile index
>>> f59c9665fd..837eafcbc0 100644
>>> --- a/xen/arch/x86/Makefile
>>> +++ b/xen/arch/x86/Makefile
>>> @@ -79,7 +79,7 @@ ifneq ($(CONFIG_PV_SHIM_EXCLUSIVE),y) obj-y +=
>>> domctl.o obj-y += platform_hypercall.o
>>> obj-$(CONFIG_COMPAT) += x86_64/platform_hypercall.o -obj-y +=
>>> sysctl.o
>>> +obj-$(CONFIG_SYSCTL) += sysctl.o
>>> endif
>>
>> I think I had indicated before that this shouldn't stay inside the
>> conditional, but
>> move back up. Whether that is to happen here or while addressing my
>> respective
>> comment on patch 01 I can't easily tell.
>
> We want that "PV_SHIM_EXCLUSIVE likely wants / needs sorting as
> a prereq anyway", does the prereq here mean that prereq in kconfig,
> something like
> ```
> config SYSCTL
> depends on xxx
> ```
I'm sorry, but I fear I can't interpret what you're saying (possibly asking).
>>> --- a/xen/common/sysctl.c
>>> +++ b/xen/common/sysctl.c
>>> @@ -490,8 +490,10 @@ long
>> do_sysctl(XEN_GUEST_HANDLE_PARAM(xen_sysctl_t) u_sysctl)
>>> break;
>>>
>>> default:
>>> +#ifdef CONFIG_SYSCTL
>>> ret = arch_do_sysctl(op, u_sysctl);
>>> copyback = 0;
>>> +#endif
>>> break;
>>> }
>>
>> This isn't enough. "ret" is 0 when reaching the default: label, but may not
>> stay 0 for
>> the return from the function. I understand (expect) this is going to be
>> dropped
>> again in the next patch, but even if only transiently needed this should be
>> kept
>> correct imo. Things might be different if patch 02 introduced the option
>> without a
>> prompt, i.e. always enabled. Then all the #ifdef-ary added up to here would
>> be
>> merely syntactic sugar. In fact in that case you could omit all the
>> transient #ifdef
>> that the last patch is going to remove again. Please consider going that
>> route.
>>
>> Otherwise I think the #endif also needs moving up, for copyback to still be
>> cleared
>> here.
>>
>
> I'll change it to as follows to complement case for CONFIG_SYSCTL==n, plz
> correct me if I understand wrongly here:
> ```
> default:
> +#ifdef CONFIG_SYSCTL
> ret = arch_do_sysctl(op, u_sysctl);
> +#else
> + ret = -EOPNOTSUPP;
> +#endif
> copyback = 0;
> break;
> ```
This is an option, yes, yet I'd like my other outline to be taken into
consideration,
too (for imo resulting in less churn overall).
Jan
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |