|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v1 11/19] xen/sysctl: wrap around XEN_SYSCTL_page_offline_op
On Wed, 12 Mar 2025, Penny Zheng wrote:
> The following functions are only to deal with XEN_SYSCTL_page_offline_op,
> then shall be wrapped:
> - xsm_page_offline
> - online_page
> - query_page_offline
>
> Signed-off-by: Penny Zheng <Penny.Zheng@xxxxxxx>
Reviewed-by: Stefano Stabellini <sstabellini@xxxxxxxxxx>
> ---
> xen/common/page_alloc.c | 2 ++
> xen/include/xen/mm.h | 13 ++++++++++++-
> xen/include/xsm/dummy.h | 7 +++++++
> xen/include/xsm/xsm.h | 9 +++++++++
> xen/xsm/dummy.c | 2 ++
> xen/xsm/flask/hooks.c | 6 ++++++
> 6 files changed, 38 insertions(+), 1 deletion(-)
>
> diff --git a/xen/common/page_alloc.c b/xen/common/page_alloc.c
> index b5ec4bda7d..7476d37238 100644
> --- a/xen/common/page_alloc.c
> +++ b/xen/common/page_alloc.c
> @@ -1759,6 +1759,7 @@ int offline_page(mfn_t mfn, int broken, uint32_t
> *status)
> return 0;
> }
>
> +#ifdef CONFIG_SYSCTL
> /*
> * Online the memory.
> * The caller should make sure end_pfn <= max_page,
> @@ -1843,6 +1844,7 @@ int query_page_offline(mfn_t mfn, uint32_t *status)
>
> return 0;
> }
> +#endif /* CONFIG_SYSCTL */
>
> /*
> * This function should only be called with valid pages from the same NUMA
> diff --git a/xen/include/xen/mm.h b/xen/include/xen/mm.h
> index ae1c48a615..86bbb15890 100644
> --- a/xen/include/xen/mm.h
> +++ b/xen/include/xen/mm.h
> @@ -144,9 +144,20 @@ unsigned long avail_domheap_pages(void);
> unsigned long avail_node_heap_pages(unsigned int nodeid);
> #define alloc_domheap_page(d,f) (alloc_domheap_pages(d,0,f))
> #define free_domheap_page(p) (free_domheap_pages(p,0))
> -int online_page(mfn_t mfn, uint32_t *status);
> int offline_page(mfn_t mfn, int broken, uint32_t *status);
> +#ifdef CONFIG_SYSCTL
> +int online_page(mfn_t mfn, uint32_t *status);
> int query_page_offline(mfn_t mfn, uint32_t *status);
> +#else
> +static inline int online_page(mfn_t mfn, uint32_t *status)
> +{
> + return -EOPNOTSUPP;
> +}
> +static inline int query_page_offline(mfn_t mfn, uint32_t *status)
> +{
> + return -EOPNOTSUPP;
> +}
> +#endif /* CONFIG_SYSCTL */
>
> void heap_init_late(void);
>
> diff --git a/xen/include/xsm/dummy.h b/xen/include/xsm/dummy.h
> index 35d084aca7..5f89fc98fc 100644
> --- a/xen/include/xsm/dummy.h
> +++ b/xen/include/xsm/dummy.h
> @@ -497,11 +497,18 @@ static XSM_INLINE int cf_check
> xsm_resource_setup_misc(XSM_DEFAULT_VOID)
> return xsm_default_action(action, current->domain, NULL);
> }
>
> +#ifdef CONFIG_SYSCTL
> static XSM_INLINE int cf_check xsm_page_offline(XSM_DEFAULT_ARG uint32_t cmd)
> {
> XSM_ASSERT_ACTION(XSM_HOOK);
> return xsm_default_action(action, current->domain, NULL);
> }
> +#else
> +static XSM_INLINE int cf_check xsm_page_offline(XSM_DEFAULT_ARG uint32_t cmd)
> +{
> + return -EOPNOTSUPP;
> +}
> +#endif
>
> static XSM_INLINE int cf_check xsm_hypfs_op(XSM_DEFAULT_VOID)
> {
> diff --git a/xen/include/xsm/xsm.h b/xen/include/xsm/xsm.h
> index d322740de1..d6f27aa977 100644
> --- a/xen/include/xsm/xsm.h
> +++ b/xen/include/xsm/xsm.h
> @@ -140,7 +140,9 @@ struct xsm_ops {
> int (*resource_setup_gsi)(int gsi);
> int (*resource_setup_misc)(void);
>
> +#ifdef CONFIG_SYSCTL
> int (*page_offline)(uint32_t cmd);
> +#endif
> int (*hypfs_op)(void);
>
> long (*do_xsm_op)(XEN_GUEST_HANDLE_PARAM(void) op);
> @@ -601,10 +603,17 @@ static inline int xsm_resource_setup_misc(xsm_default_t
> def)
> return alternative_call(xsm_ops.resource_setup_misc);
> }
>
> +#ifdef CONFIG_SYSCTL
> static inline int xsm_page_offline(xsm_default_t def, uint32_t cmd)
> {
> return alternative_call(xsm_ops.page_offline, cmd);
> }
> +#else
> +static inline int xsm_page_offline(xsm_default_t def, uint32_t cmd)
> +{
> + return -EOPNOTSUPP;
> +}
> +#endif
>
> static inline int xsm_hypfs_op(xsm_default_t def)
> {
> diff --git a/xen/xsm/dummy.c b/xen/xsm/dummy.c
> index 4c97db0c48..aa89ee5331 100644
> --- a/xen/xsm/dummy.c
> +++ b/xen/xsm/dummy.c
> @@ -96,7 +96,9 @@ static const struct xsm_ops __initconst_cf_clobber
> dummy_ops = {
> .resource_setup_gsi = xsm_resource_setup_gsi,
> .resource_setup_misc = xsm_resource_setup_misc,
>
> +#ifdef CONFIG_SYSCTL
> .page_offline = xsm_page_offline,
> +#endif
> .hypfs_op = xsm_hypfs_op,
> .hvm_param = xsm_hvm_param,
> .hvm_param_altp2mhvm = xsm_hvm_param_altp2mhvm,
> diff --git a/xen/xsm/flask/hooks.c b/xen/xsm/flask/hooks.c
> index 7c46657d97..9819cd407d 100644
> --- a/xen/xsm/flask/hooks.c
> +++ b/xen/xsm/flask/hooks.c
> @@ -1206,10 +1206,12 @@ static int cf_check flask_resource_unplug_core(void)
> return avc_current_has_perm(SECINITSID_DOMXEN, SECCLASS_RESOURCE,
> RESOURCE__UNPLUG, NULL);
> }
>
> +#ifdef CONFIG_SYSCTL
> static int flask_resource_use_core(void)
> {
> return avc_current_has_perm(SECINITSID_DOMXEN, SECCLASS_RESOURCE,
> RESOURCE__USE, NULL);
> }
> +#endif
>
> static int cf_check flask_resource_plug_pci(uint32_t machine_bdf)
> {
> @@ -1274,6 +1276,7 @@ static int cf_check flask_resource_setup_misc(void)
> return avc_current_has_perm(SECINITSID_XEN, SECCLASS_RESOURCE,
> RESOURCE__SETUP, NULL);
> }
>
> +#ifdef CONFIG_SYSCTL
> static inline int cf_check flask_page_offline(uint32_t cmd)
> {
> switch ( cmd )
> @@ -1288,6 +1291,7 @@ static inline int cf_check flask_page_offline(uint32_t
> cmd)
> return avc_unknown_permission("page_offline", cmd);
> }
> }
> +#endif
>
> static inline int cf_check flask_hypfs_op(void)
> {
> @@ -1948,7 +1952,9 @@ static const struct xsm_ops __initconst_cf_clobber
> flask_ops = {
> .resource_setup_gsi = flask_resource_setup_gsi,
> .resource_setup_misc = flask_resource_setup_misc,
>
> +#ifdef CONFIG_SYSCTL
> .page_offline = flask_page_offline,
> +#endif
> .hypfs_op = flask_hypfs_op,
> .hvm_param = flask_hvm_param,
> .hvm_param_altp2mhvm = flask_hvm_param_altp2mhvm,
> --
> 2.34.1
>
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |