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]>
Acked-by: Stanislav Kinsburskii <[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) {
-- 
2.34.1


Reply via email to