Re: [PATCH v6 3/5] hyperv: Enable the hypercall output page for the VTL mode

Nuno Das Neves
2025-01-08T23:27:27Z

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 <romank@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 <nunodasneves@linux.microsoft.com>