From: Stanislav Kinsburskii <[email protected]>

Currently vp->vp_stats_pages is only used by the root scheduler for fast
interrupt injection.

Soon, vp_stats_pages will also be needed for exposing child VP stats to
userspace via debugfs. Mapping the pages a second time to a different
address causes an error on L1VH.

Remove the scheduler requirement and always map the vp stats pages.

Signed-off-by: Stanislav Kinsburskii <[email protected]>
Signed-off-by: Nuno Das Neves <[email protected]>
---
 drivers/hv/mshv_root_main.c | 25 ++++++++-----------------
 1 file changed, 8 insertions(+), 17 deletions(-)

diff --git a/drivers/hv/mshv_root_main.c b/drivers/hv/mshv_root_main.c
index faca3cc63e79..fbfc9e7d9fa4 100644
--- a/drivers/hv/mshv_root_main.c
+++ b/drivers/hv/mshv_root_main.c
@@ -1077,16 +1077,10 @@ mshv_partition_ioctl_create_vp(struct mshv_partition 
*partition,
                        goto unmap_register_page;
        }
 
-       /*
-        * 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)
-                       goto unmap_ghcb_page;
-       }
+       ret = mshv_vp_stats_map(partition->pt_id, args.vp_index,
+                               stats_pages);
+       if (ret)
+               goto unmap_ghcb_page;
 
        vp = kzalloc(sizeof(*vp), GFP_KERNEL);
        if (!vp)
@@ -1110,8 +1104,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_scheduler_type == HV_SCHEDULER_TYPE_ROOT)
-               memcpy(vp->vp_stats_pages, stats_pages, sizeof(stats_pages));
+       memcpy(vp->vp_stats_pages, stats_pages, sizeof(stats_pages));
 
        /*
         * Keep anon_inode_getfd last: it installs fd in the file struct and
@@ -1133,8 +1126,7 @@ mshv_partition_ioctl_create_vp(struct mshv_partition 
*partition,
 free_vp:
        kfree(vp);
 unmap_stats_pages:
-       if (hv_scheduler_type == HV_SCHEDULER_TYPE_ROOT)
-               mshv_vp_stats_unmap(partition->pt_id, args.vp_index, 
stats_pages);
+       mshv_vp_stats_unmap(partition->pt_id, args.vp_index, stats_pages);
 unmap_ghcb_page:
        if (mshv_partition_encrypted(partition) && is_ghcb_mapping_available())
                hv_unmap_vp_state_page(partition->pt_id, args.vp_index,
@@ -1754,9 +1746,8 @@ static void destroy_partition(struct mshv_partition 
*partition)
                        if (!vp)
                                continue;
 
-                       if (hv_scheduler_type == HV_SCHEDULER_TYPE_ROOT)
-                               mshv_vp_stats_unmap(partition->pt_id, 
vp->vp_index,
-                                                   vp->vp_stats_pages);
+                       mshv_vp_stats_unmap(partition->pt_id, vp->vp_index,
+                                           vp->vp_stats_pages);
 
                        if (vp->vp_register_page) {
                                (void)hv_unmap_vp_state_page(partition->pt_id,
-- 
2.34.1


Reply via email to