On Fri, Aug 29, 2025 at 9:08 AM Nuno Das Neves
<nunodasne...@linux.microsoft.com> wrote:
>
> This mapping is only used for checking if the dispatch thread is
> blocked. This is only relevant for the root scheduler, so check the
> scheduler type to determine whether to map/unmap these pages, instead of
> the current check, which is incorrect.
>
> Signed-off-by: Nuno Das Neves <nunodasne...@linux.microsoft.com>
> ---
>  drivers/hv/mshv_root_main.c | 12 ++++++++----
>  1 file changed, 8 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/hv/mshv_root_main.c b/drivers/hv/mshv_root_main.c
> index e4ee9beddaf5..bbdefe8a2e9c 100644
> --- a/drivers/hv/mshv_root_main.c
> +++ b/drivers/hv/mshv_root_main.c
> @@ -987,7 +987,11 @@ mshv_partition_ioctl_create_vp(struct mshv_partition 
> *partition,
>                         goto unmap_register_page;
>         }
>
> -       if (hv_parent_partition()) {
> +       /*
> +        * This mapping of the stats page is for detecting if dispatch thread
> +        * is blocked - only relevant for root scheduler
> +        */
> +       if (hv_scheduler_type == HV_SCHEDULER_TYPE_ROOT) {
>                 ret = mshv_vp_stats_map(partition->pt_id, args.vp_index,
>                                         stats_pages);
>                 if (ret)
> @@ -1016,7 +1020,7 @@ mshv_partition_ioctl_create_vp(struct mshv_partition 
> *partition,
>         if (mshv_partition_encrypted(partition) && 
> is_ghcb_mapping_available())
>                 vp->vp_ghcb_page = page_to_virt(ghcb_page);
>
> -       if (hv_parent_partition())
> +       if (hv_scheduler_type == HV_SCHEDULER_TYPE_ROOT)
>                 memcpy(vp->vp_stats_pages, stats_pages, sizeof(stats_pages));
>
>         /*
> @@ -1039,7 +1043,7 @@ mshv_partition_ioctl_create_vp(struct mshv_partition 
> *partition,
>  free_vp:
>         kfree(vp);
>  unmap_stats_pages:
> -       if (hv_parent_partition())
> +       if (hv_scheduler_type == HV_SCHEDULER_TYPE_ROOT)
>                 mshv_vp_stats_unmap(partition->pt_id, args.vp_index);
>  unmap_ghcb_page:
>         if (mshv_partition_encrypted(partition) && 
> is_ghcb_mapping_available()) {
> @@ -1793,7 +1797,7 @@ static void destroy_partition(struct mshv_partition 
> *partition)
>                         if (!vp)
>                                 continue;
>
> -                       if (hv_parent_partition())
> +                       if (hv_scheduler_type == HV_SCHEDULER_TYPE_ROOT)
>                                 mshv_vp_stats_unmap(partition->pt_id, 
> vp->vp_index);
>
>                         if (vp->vp_register_page) {
> --
> 2.34.1
>
>
Reviewed-by: Tianyu Lan <ti...@microsoft.com>

-- 
Thanks
Tianyu Lan

Reply via email to