[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
> 



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.