On 1/8/2025 2:21 PM, Roman Kisel wrote:
> Due to the hypercall page not being allocated in the VTL mode,
> the code resorts to using a part of the input page.
> 
> Allocate the hypercall output page in the VTL mode thus enabling
> it to use it for output and share code with dom0.
> 
> Signed-off-by: Roman Kisel <rom...@linux.microsoft.com>
> ---
>  drivers/hv/hv_common.c | 11 ++++++++---
>  1 file changed, 8 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/hv/hv_common.c b/drivers/hv/hv_common.c
> index c6ed3ba4bf61..af5d1dc451f6 100644
> --- a/drivers/hv/hv_common.c
> +++ b/drivers/hv/hv_common.c
> @@ -278,6 +278,11 @@ static void hv_kmsg_dump_register(void)
>       }
>  }
>  
> +static inline bool hv_output_page_exists(void)
> +{
> +     return hv_root_partition || IS_ENABLED(CONFIG_HYPERV_VTL_MODE);
> +}
> +
>  int __init hv_common_init(void)
>  {
>       int i;
> @@ -340,7 +345,7 @@ int __init hv_common_init(void)
>       BUG_ON(!hyperv_pcpu_input_arg);
>  
>       /* Allocate the per-CPU state for output arg for root */
> -     if (hv_root_partition) {
> +     if (hv_output_page_exists()) {
>               hyperv_pcpu_output_arg = alloc_percpu(void *);
>               BUG_ON(!hyperv_pcpu_output_arg);
>       }
> @@ -435,7 +440,7 @@ int hv_common_cpu_init(unsigned int cpu)
>       void **inputarg, **outputarg;
>       u64 msr_vp_index;
>       gfp_t flags;
> -     int pgcount = hv_root_partition ? 2 : 1;
> +     const int pgcount = hv_output_page_exists() ? 2 : 1;
>       void *mem;
>       int ret;
>  
> @@ -453,7 +458,7 @@ int hv_common_cpu_init(unsigned int cpu)
>               if (!mem)
>                       return -ENOMEM;
>  
> -             if (hv_root_partition) {
> +             if (hv_output_page_exists()) {
>                       outputarg = (void 
> **)this_cpu_ptr(hyperv_pcpu_output_arg);
>                       *outputarg = (char *)mem + HV_HYP_PAGE_SIZE;
>               }

Reviewed-by: Nuno Das Neves <nunodasne...@linux.microsoft.com>

Reply via email to