On Tue, Sep 16, 2025 at 04:44:18PM -0700, Nuno Das Neves 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 <[email protected]>
> Reviewed-by: Anirudh Rayabharam <[email protected]>
> Reviewed-by: Praveen K Paladugu <[email protected]>
> Reviewed-by: Easwar Hariharan <[email protected]>
> Reviewed-by: Tianyu Lan <[email protected]>
> ---
>  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 e3b2bd417c46..24df47726363 100644
> --- a/drivers/hv/mshv_root_main.c
> +++ b/drivers/hv/mshv_root_main.c
> @@ -934,7 +934,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)
> @@ -963,7 +967,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));
>  
>       /*
> @@ -986,7 +990,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()) 
> {
> @@ -1740,7 +1744,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) {

Acked-by: Stanislav Kinsburskii <[email protected]>

> -- 
> 2.34.1
> 

Reply via email to