From: Jinank Jain <jinankjain@linux.microsoft.com>
Introduce mshv_use_overlay_gpfn() to check if a page needs to be
allocated and passed to the hypervisor to map VP state pages. This is
only needed on L1VH, and only on some (newer) versions of the
hypervisor, hence the need to check vmm_capabilities.
Introduce functions hv_map/unmap_vp_state_page() to handle the
allocation and freeing.
Signed-off-by: Jinank Jain <jinankjain@linux.microsoft.com>
Signed-off-by: Nuno Das Neves <nunodasneves@linux.microsoft.com>
Reviewed-by: Praveen K Paladugu <prapal@linux.microsoft.com>
Reviewed-by: Easwar Hariharan <easwar.hariharan@linux.microsoft.com>
---
drivers/hv/mshv_root.h | 11 +++---
drivers/hv/mshv_root_hv_call.c | 61 +++++++++++++++++++++++++---
drivers/hv/mshv_root_main.c | 72 +++++++++++++++++-----------------
3 files changed, 96 insertions(+), 48 deletions(-)
diff --git a/drivers/hv/mshv_root.h b/drivers/hv/mshv_root.h
index 0cb1e2589fe1..d7c9520ef788 100644
--- a/drivers/hv/mshv_root.h
+++ b/drivers/hv/mshv_root.h
@@ -279,11 +279,12 @@ int hv_call_set_vp_state(u32 vp_index, u64 partition_id,
/* Choose between pages and bytes */
struct hv_vp_state_data state_data, u64 page_count,
struct page **pages, u32 num_bytes, u8 *bytes);
-int hv_call_map_vp_state_page(u64 partition_id, u32 vp_index, u32 type,
- union hv_input_vtl input_vtl,
- struct page **state_page);
-int hv_call_unmap_vp_state_page(u64 partition_id, u32 vp_index, u32 type,
- union hv_input_vtl input_vtl);
+int hv_map_vp_state_page(u64 partition_id, u32 vp_index, u32 type,
+ union hv_input_vtl input_vtl,
+ struct page **state_page);
+int hv_unmap_vp_state_page(u64 partition_id, u32 vp_index, u32 type,
+ void *page_addr,
+ union hv_input_vtl input_vtl);
int hv_call_create_port(u64 port_partition_id, union hv_port_id port_id,
u64 connection_partition_id, struct hv_port_info *port_info,
u8 port_vtl, u8 min_connection_vtl, int node);
diff --git a/drivers/hv/mshv_root_hv_call.c b/drivers/hv/mshv_root_hv_call.c
index 3fd3cce23f69..1132ba7b2399 100644
--- a/drivers/hv/mshv_root_hv_call.c
+++ b/drivers/hv/mshv_root_hv_call.c
@@ -526,9 +526,9 @@ int hv_call_set_vp_state(u32 vp_index, u64 partition_id,
return ret;
}
-int hv_call_map_vp_state_page(u64 partition_id, u32 vp_index, u32 type,
- union hv_input_vtl input_vtl,
- struct page **state_page)
+static int hv_call_map_vp_state_page(u64 partition_id, u32 vp_index, u32 type,
+ union hv_input_vtl input_vtl,
+ struct page **state_page)
{
struct hv_input_map_vp_state_page *input;
struct hv_output_map_vp_state_page *output;
@@ -547,7 +547,14 @@ int hv_call_map_vp_state_page(u64 partition_id, u32 vp_index, u32 type,
input->type = type;
input->input_vtl = input_vtl;
- status = hv_do_hypercall(HVCALL_MAP_VP_STATE_PAGE, input, output);
+ if (*state_page) {
+ input->flags.map_location_provided = 1;
+ input->requested_map_location =
+ page_to_pfn(*state_page);
+ }
+
+ status = hv_do_hypercall(HVCALL_MAP_VP_STATE_PAGE, input,
+ output);
if (hv_result(status) != HV_STATUS_INSUFFICIENT_MEMORY) {
if (hv_result_success(status))
@@ -565,8 +572,39 @@ int hv_call_map_vp_state_page(u64 partition_id, u32 vp_index, u32 type,
return ret;
}
-int hv_call_unmap_vp_state_page(u64 partition_id, u32 vp_index, u32 type,
- union hv_input_vtl input_vtl)
+static bool mshv_use_overlay_gpfn(void)
+{
+ return hv_l1vh_partition() &&
+ mshv_root.vmm_caps.vmm_can_provide_overlay_gpfn;
+}
+
+int hv_map_vp_state_page(u64 partition_id, u32 vp_index, u32 type,
+ union hv_input_vtl input_vtl,
+ struct page **state_page)
+{
+ int ret = 0;
+ struct page *allocated_page = NULL;
+
+ if (mshv_use_overlay_gpfn()) {
+ allocated_page = alloc_page(GFP_KERNEL);
+ if (!allocated_page)
+ return -ENOMEM;
+ *state_page = allocated_page;
+ } else {
+ *state_page = NULL;
+ }
+
+ ret = hv_call_map_vp_state_page(partition_id, vp_index, type, input_vtl,
+ state_page);
+
+ if (ret && allocated_page)
+ __free_page(allocated_page);
+
+ return ret;
+}
+
+static int hv_call_unmap_vp_state_page(u64 partition_id, u32 vp_index, u32 type,
+ union hv_input_vtl input_vtl)
{
unsigned long flags;
u64 status;
@@ -590,6 +628,17 @@ int hv_call_unmap_vp_state_page(u64 partition_id, u32 vp_index, u32 type,
return hv_result_to_errno(status);
}
+int hv_unmap_vp_state_page(u64 partition_id, u32 vp_index, u32 type,
+ void *page_addr, union hv_input_vtl input_vtl)
+{
+ int ret = hv_call_unmap_vp_state_page(partition_id, vp_index, type, input_vtl);
+
+ if (mshv_use_overlay_gpfn() && page_addr)
+ __free_page(virt_to_page(page_addr));
+
+ return ret;
+}
+
int hv_call_get_partition_property_ex(u64 partition_id, u64 property_code,
u64 arg, void *property_value,
size_t property_value_sz)
diff --git a/drivers/hv/mshv_root_main.c b/drivers/hv/mshv_root_main.c
index f7738cefbdf3..7352c4f9652e 100644
--- a/drivers/hv/mshv_root_main.c
+++ b/drivers/hv/mshv_root_main.c
@@ -908,28 +908,25 @@ mshv_partition_ioctl_create_vp(struct mshv_partition *partition,
if (ret)
return ret;
- ret = hv_call_map_vp_state_page(partition->pt_id, args.vp_index,
- HV_VP_STATE_PAGE_INTERCEPT_MESSAGE,
- input_vtl_zero,
- &intercept_message_page);
+ ret = hv_map_vp_state_page(partition->pt_id, args.vp_index,
+ HV_VP_STATE_PAGE_INTERCEPT_MESSAGE,
+ input_vtl_zero, &intercept_message_page);
if (ret)
goto destroy_vp;
if (!mshv_partition_encrypted(partition)) {
- ret = hv_call_map_vp_state_page(partition->pt_id, args.vp_index,
- HV_VP_STATE_PAGE_REGISTERS,
- input_vtl_zero,
- ®ister_page);
+ ret = hv_map_vp_state_page(partition->pt_id, args.vp_index,
+ HV_VP_STATE_PAGE_REGISTERS,
+ input_vtl_zero, ®ister_page);
if (ret)
goto unmap_intercept_message_page;
}
if (mshv_partition_encrypted(partition) &&
is_ghcb_mapping_available()) {
- ret = hv_call_map_vp_state_page(partition->pt_id, args.vp_index,
- HV_VP_STATE_PAGE_GHCB,
- input_vtl_normal,
- &ghcb_page);
+ ret = hv_map_vp_state_page(partition->pt_id, args.vp_index,
+ HV_VP_STATE_PAGE_GHCB,
+ input_vtl_normal, &ghcb_page);
if (ret)
goto unmap_register_page;
}
@@ -993,21 +990,19 @@ mshv_partition_ioctl_create_vp(struct mshv_partition *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()) {
- hv_call_unmap_vp_state_page(partition->pt_id, args.vp_index,
- HV_VP_STATE_PAGE_GHCB,
- input_vtl_normal);
- }
+ if (mshv_partition_encrypted(partition) && is_ghcb_mapping_available())
+ hv_unmap_vp_state_page(partition->pt_id, args.vp_index,
+ HV_VP_STATE_PAGE_GHCB, vp->vp_ghcb_page,
+ input_vtl_normal);
unmap_register_page:
- if (!mshv_partition_encrypted(partition)) {
- hv_call_unmap_vp_state_page(partition->pt_id, args.vp_index,
- HV_VP_STATE_PAGE_REGISTERS,
- input_vtl_zero);
- }
+ if (!mshv_partition_encrypted(partition))
+ hv_unmap_vp_state_page(partition->pt_id, args.vp_index,
+ HV_VP_STATE_PAGE_REGISTERS,
+ vp->vp_register_page, input_vtl_zero);
unmap_intercept_message_page:
- hv_call_unmap_vp_state_page(partition->pt_id, args.vp_index,
- HV_VP_STATE_PAGE_INTERCEPT_MESSAGE,
- input_vtl_zero);
+ hv_unmap_vp_state_page(partition->pt_id, args.vp_index,
+ HV_VP_STATE_PAGE_INTERCEPT_MESSAGE,
+ vp->vp_intercept_msg_page, input_vtl_zero);
destroy_vp:
hv_call_delete_vp(partition->pt_id, args.vp_index);
return ret;
@@ -1748,24 +1743,27 @@ static void destroy_partition(struct mshv_partition *partition)
mshv_vp_stats_unmap(partition->pt_id, vp->vp_index);
if (vp->vp_register_page) {
- (void)hv_call_unmap_vp_state_page(partition->pt_id,
- vp->vp_index,
- HV_VP_STATE_PAGE_REGISTERS,
- input_vtl_zero);
+ (void)hv_unmap_vp_state_page(partition->pt_id,
+ vp->vp_index,
+ HV_VP_STATE_PAGE_REGISTERS,
+ vp->vp_register_page,
+ input_vtl_zero);
vp->vp_register_page = NULL;
}
- (void)hv_call_unmap_vp_state_page(partition->pt_id,
- vp->vp_index,
- HV_VP_STATE_PAGE_INTERCEPT_MESSAGE,
- input_vtl_zero);
+ (void)hv_unmap_vp_state_page(partition->pt_id,
+ vp->vp_index,
+ HV_VP_STATE_PAGE_INTERCEPT_MESSAGE,
+ vp->vp_intercept_msg_page,
+ input_vtl_zero);
vp->vp_intercept_msg_page = NULL;
if (vp->vp_ghcb_page) {
- (void)hv_call_unmap_vp_state_page(partition->pt_id,
- vp->vp_index,
- HV_VP_STATE_PAGE_GHCB,
- input_vtl_normal);
+ (void)hv_unmap_vp_state_page(partition->pt_id,
+ vp->vp_index,
+ HV_VP_STATE_PAGE_GHCB,
+ vp->vp_ghcb_page,
+ input_vtl_normal);
vp->vp_ghcb_page = NULL;
}
--
2.34.1
Hi Nuno, kernel test robot noticed the following build warnings: [auto build test WARNING on linus/master] [also build test WARNING on v6.17-rc5 next-20250911] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Nuno-Das-Neves/mshv-Only-map-vp-vp_stats_pages-if-on-root-scheduler/20250911-071732 base: linus/master patch link: https://lore.kernel.org/r/1757546089-2002-5-git-send-email-nunodasneves%40linux.microsoft.com patch subject: [PATCH v2 4/5] mshv: Allocate vp state page for HVCALL_MAP_VP_STATE_PAGE on L1VH config: x86_64-randconfig-072-20250911 (https://download.01.org/0day-ci/archive/20250912/202509120214.YMomVkdP-lkp@intel.com/config) compiler: clang version 20.1.8 (https://github.com/llvm/llvm-project 87f0227cb60147a26a1eeb4fb06e3b505e9c7261) reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250912/202509120214.YMomVkdP-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202509120214.YMomVkdP-lkp@intel.com/ All warnings (new ones prefixed by >>): >> drivers/hv/mshv_root_main.c:966:7: warning: variable 'vp' is used uninitialized whenever 'if' condition is true [-Wsometimes-uninitialized] 966 | if (ret) | ^~~ drivers/hv/mshv_root_main.c:1030:11: note: uninitialized use occurs here 1030 | vp->vp_intercept_msg_page, input_vtl_zero); | ^~ drivers/hv/mshv_root_main.c:966:3: note: remove the 'if' if its condition is always false 966 | if (ret) | ^~~~~~~~ 967 | goto unmap_ghcb_page; | ~~~~~~~~~~~~~~~~~~~~ drivers/hv/mshv_root_main.c:955:7: warning: variable 'vp' is used uninitialized whenever 'if' condition is true [-Wsometimes-uninitialized] 955 | if (ret) | ^~~ drivers/hv/mshv_root_main.c:1030:11: note: uninitialized use occurs here 1030 | vp->vp_intercept_msg_page, input_vtl_zero); | ^~ drivers/hv/mshv_root_main.c:955:3: note: remove the 'if' if its condition is always false 955 | if (ret) | ^~~~~~~~ 956 | goto unmap_register_page; | ~~~~~~~~~~~~~~~~~~~~~~~~ drivers/hv/mshv_root_main.c:946:7: warning: variable 'vp' is used uninitialized whenever 'if' condition is true [-Wsometimes-uninitialized] 946 | if (ret) | ^~~ drivers/hv/mshv_root_main.c:1030:11: note: uninitialized use occurs here 1030 | vp->vp_intercept_msg_page, input_vtl_zero); | ^~ drivers/hv/mshv_root_main.c:946:3: note: remove the 'if' if its condition is always false 946 | if (ret) | ^~~~~~~~ 947 | goto unmap_intercept_message_page; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/hv/mshv_root_main.c:917:20: note: initialize the variable 'vp' to silence this warning 917 | struct mshv_vp *vp; | ^ | = NULL drivers/hv/mshv_root_main.c:41:20: warning: unused function 'hv_parent_partition' [-Wunused-function] 41 | static inline bool hv_parent_partition(void) | ^~~~~~~~~~~~~~~~~~~ 4 warnings generated. vim +966 drivers/hv/mshv_root_main.c 621191d709b1488 Nuno Das Neves 2025-03-14 911 621191d709b1488 Nuno Das Neves 2025-03-14 912 static long 621191d709b1488 Nuno Das Neves 2025-03-14 913 mshv_partition_ioctl_create_vp(struct mshv_partition *partition, 621191d709b1488 Nuno Das Neves 2025-03-14 914 void __user *arg) 621191d709b1488 Nuno Das Neves 2025-03-14 915 { 621191d709b1488 Nuno Das Neves 2025-03-14 916 struct mshv_create_vp args; 621191d709b1488 Nuno Das Neves 2025-03-14 917 struct mshv_vp *vp; 621191d709b1488 Nuno Das Neves 2025-03-14 918 struct page *intercept_message_page, *register_page, *ghcb_page; 621191d709b1488 Nuno Das Neves 2025-03-14 919 void *stats_pages[2]; 621191d709b1488 Nuno Das Neves 2025-03-14 920 long ret; 621191d709b1488 Nuno Das Neves 2025-03-14 921 621191d709b1488 Nuno Das Neves 2025-03-14 922 if (copy_from_user(&args, arg, sizeof(args))) 621191d709b1488 Nuno Das Neves 2025-03-14 923 return -EFAULT; 621191d709b1488 Nuno Das Neves 2025-03-14 924 621191d709b1488 Nuno Das Neves 2025-03-14 925 if (args.vp_index >= MSHV_MAX_VPS) 621191d709b1488 Nuno Das Neves 2025-03-14 926 return -EINVAL; 621191d709b1488 Nuno Das Neves 2025-03-14 927 621191d709b1488 Nuno Das Neves 2025-03-14 928 if (partition->pt_vp_array[args.vp_index]) 621191d709b1488 Nuno Das Neves 2025-03-14 929 return -EEXIST; 621191d709b1488 Nuno Das Neves 2025-03-14 930 621191d709b1488 Nuno Das Neves 2025-03-14 931 ret = hv_call_create_vp(NUMA_NO_NODE, partition->pt_id, args.vp_index, 621191d709b1488 Nuno Das Neves 2025-03-14 932 0 /* Only valid for root partition VPs */); 621191d709b1488 Nuno Das Neves 2025-03-14 933 if (ret) 621191d709b1488 Nuno Das Neves 2025-03-14 934 return ret; 621191d709b1488 Nuno Das Neves 2025-03-14 935 debba2f23756254 Jinank Jain 2025-09-10 936 ret = hv_map_vp_state_page(partition->pt_id, args.vp_index, 621191d709b1488 Nuno Das Neves 2025-03-14 937 HV_VP_STATE_PAGE_INTERCEPT_MESSAGE, debba2f23756254 Jinank Jain 2025-09-10 938 input_vtl_zero, &intercept_message_page); 621191d709b1488 Nuno Das Neves 2025-03-14 939 if (ret) 621191d709b1488 Nuno Das Neves 2025-03-14 940 goto destroy_vp; 621191d709b1488 Nuno Das Neves 2025-03-14 941 621191d709b1488 Nuno Das Neves 2025-03-14 942 if (!mshv_partition_encrypted(partition)) { debba2f23756254 Jinank Jain 2025-09-10 943 ret = hv_map_vp_state_page(partition->pt_id, args.vp_index, 621191d709b1488 Nuno Das Neves 2025-03-14 944 HV_VP_STATE_PAGE_REGISTERS, debba2f23756254 Jinank Jain 2025-09-10 945 input_vtl_zero, ®ister_page); 621191d709b1488 Nuno Das Neves 2025-03-14 946 if (ret) 621191d709b1488 Nuno Das Neves 2025-03-14 947 goto unmap_intercept_message_page; 621191d709b1488 Nuno Das Neves 2025-03-14 948 } 621191d709b1488 Nuno Das Neves 2025-03-14 949 621191d709b1488 Nuno Das Neves 2025-03-14 950 if (mshv_partition_encrypted(partition) && 621191d709b1488 Nuno Das Neves 2025-03-14 951 is_ghcb_mapping_available()) { debba2f23756254 Jinank Jain 2025-09-10 952 ret = hv_map_vp_state_page(partition->pt_id, args.vp_index, 621191d709b1488 Nuno Das Neves 2025-03-14 953 HV_VP_STATE_PAGE_GHCB, debba2f23756254 Jinank Jain 2025-09-10 954 input_vtl_normal, &ghcb_page); 621191d709b1488 Nuno Das Neves 2025-03-14 955 if (ret) 621191d709b1488 Nuno Das Neves 2025-03-14 956 goto unmap_register_page; 621191d709b1488 Nuno Das Neves 2025-03-14 957 } 621191d709b1488 Nuno Das Neves 2025-03-14 958 1af6cc3b10421f1 Nuno Das Neves 2025-09-10 959 /* 1af6cc3b10421f1 Nuno Das Neves 2025-09-10 960 * This mapping of the stats page is for detecting if dispatch thread 1af6cc3b10421f1 Nuno Das Neves 2025-09-10 961 * is blocked - only relevant for root scheduler 1af6cc3b10421f1 Nuno Das Neves 2025-09-10 962 */ 1af6cc3b10421f1 Nuno Das Neves 2025-09-10 963 if (hv_scheduler_type == HV_SCHEDULER_TYPE_ROOT) { 621191d709b1488 Nuno Das Neves 2025-03-14 964 ret = mshv_vp_stats_map(partition->pt_id, args.vp_index, 621191d709b1488 Nuno Das Neves 2025-03-14 965 stats_pages); 621191d709b1488 Nuno Das Neves 2025-03-14 @966 if (ret) 621191d709b1488 Nuno Das Neves 2025-03-14 967 goto unmap_ghcb_page; 621191d709b1488 Nuno Das Neves 2025-03-14 968 } 621191d709b1488 Nuno Das Neves 2025-03-14 969 621191d709b1488 Nuno Das Neves 2025-03-14 970 vp = kzalloc(sizeof(*vp), GFP_KERNEL); 621191d709b1488 Nuno Das Neves 2025-03-14 971 if (!vp) 621191d709b1488 Nuno Das Neves 2025-03-14 972 goto unmap_stats_pages; 621191d709b1488 Nuno Das Neves 2025-03-14 973 621191d709b1488 Nuno Das Neves 2025-03-14 974 vp->vp_partition = mshv_partition_get(partition); 621191d709b1488 Nuno Das Neves 2025-03-14 975 if (!vp->vp_partition) { 621191d709b1488 Nuno Das Neves 2025-03-14 976 ret = -EBADF; 621191d709b1488 Nuno Das Neves 2025-03-14 977 goto free_vp; 621191d709b1488 Nuno Das Neves 2025-03-14 978 } 621191d709b1488 Nuno Das Neves 2025-03-14 979 621191d709b1488 Nuno Das Neves 2025-03-14 980 mutex_init(&vp->vp_mutex); 621191d709b1488 Nuno Das Neves 2025-03-14 981 init_waitqueue_head(&vp->run.vp_suspend_queue); 621191d709b1488 Nuno Das Neves 2025-03-14 982 atomic64_set(&vp->run.vp_signaled_count, 0); 621191d709b1488 Nuno Das Neves 2025-03-14 983 621191d709b1488 Nuno Das Neves 2025-03-14 984 vp->vp_index = args.vp_index; 621191d709b1488 Nuno Das Neves 2025-03-14 985 vp->vp_intercept_msg_page = page_to_virt(intercept_message_page); 621191d709b1488 Nuno Das Neves 2025-03-14 986 if (!mshv_partition_encrypted(partition)) 621191d709b1488 Nuno Das Neves 2025-03-14 987 vp->vp_register_page = page_to_virt(register_page); 621191d709b1488 Nuno Das Neves 2025-03-14 988 621191d709b1488 Nuno Das Neves 2025-03-14 989 if (mshv_partition_encrypted(partition) && is_ghcb_mapping_available()) 621191d709b1488 Nuno Das Neves 2025-03-14 990 vp->vp_ghcb_page = page_to_virt(ghcb_page); 621191d709b1488 Nuno Das Neves 2025-03-14 991 1af6cc3b10421f1 Nuno Das Neves 2025-09-10 992 if (hv_scheduler_type == HV_SCHEDULER_TYPE_ROOT) 621191d709b1488 Nuno Das Neves 2025-03-14 993 memcpy(vp->vp_stats_pages, stats_pages, sizeof(stats_pages)); 621191d709b1488 Nuno Das Neves 2025-03-14 994 621191d709b1488 Nuno Das Neves 2025-03-14 995 /* 621191d709b1488 Nuno Das Neves 2025-03-14 996 * Keep anon_inode_getfd last: it installs fd in the file struct and 621191d709b1488 Nuno Das Neves 2025-03-14 997 * thus makes the state accessible in user space. 621191d709b1488 Nuno Das Neves 2025-03-14 998 */ 621191d709b1488 Nuno Das Neves 2025-03-14 999 ret = anon_inode_getfd("mshv_vp", &mshv_vp_fops, vp, 621191d709b1488 Nuno Das Neves 2025-03-14 1000 O_RDWR | O_CLOEXEC); 621191d709b1488 Nuno Das Neves 2025-03-14 1001 if (ret < 0) 621191d709b1488 Nuno Das Neves 2025-03-14 1002 goto put_partition; 621191d709b1488 Nuno Das Neves 2025-03-14 1003 621191d709b1488 Nuno Das Neves 2025-03-14 1004 /* already exclusive with the partition mutex for all ioctls */ 621191d709b1488 Nuno Das Neves 2025-03-14 1005 partition->pt_vp_count++; 621191d709b1488 Nuno Das Neves 2025-03-14 1006 partition->pt_vp_array[args.vp_index] = vp; 621191d709b1488 Nuno Das Neves 2025-03-14 1007 621191d709b1488 Nuno Das Neves 2025-03-14 1008 return ret; 621191d709b1488 Nuno Das Neves 2025-03-14 1009 621191d709b1488 Nuno Das Neves 2025-03-14 1010 put_partition: 621191d709b1488 Nuno Das Neves 2025-03-14 1011 mshv_partition_put(partition); 621191d709b1488 Nuno Das Neves 2025-03-14 1012 free_vp: 621191d709b1488 Nuno Das Neves 2025-03-14 1013 kfree(vp); 621191d709b1488 Nuno Das Neves 2025-03-14 1014 unmap_stats_pages: 1af6cc3b10421f1 Nuno Das Neves 2025-09-10 1015 if (hv_scheduler_type == HV_SCHEDULER_TYPE_ROOT) 621191d709b1488 Nuno Das Neves 2025-03-14 1016 mshv_vp_stats_unmap(partition->pt_id, args.vp_index); 621191d709b1488 Nuno Das Neves 2025-03-14 1017 unmap_ghcb_page: debba2f23756254 Jinank Jain 2025-09-10 1018 if (mshv_partition_encrypted(partition) && is_ghcb_mapping_available()) debba2f23756254 Jinank Jain 2025-09-10 1019 hv_unmap_vp_state_page(partition->pt_id, args.vp_index, debba2f23756254 Jinank Jain 2025-09-10 1020 HV_VP_STATE_PAGE_GHCB, vp->vp_ghcb_page, 621191d709b1488 Nuno Das Neves 2025-03-14 1021 input_vtl_normal); 621191d709b1488 Nuno Das Neves 2025-03-14 1022 unmap_register_page: debba2f23756254 Jinank Jain 2025-09-10 1023 if (!mshv_partition_encrypted(partition)) debba2f23756254 Jinank Jain 2025-09-10 1024 hv_unmap_vp_state_page(partition->pt_id, args.vp_index, 621191d709b1488 Nuno Das Neves 2025-03-14 1025 HV_VP_STATE_PAGE_REGISTERS, debba2f23756254 Jinank Jain 2025-09-10 1026 vp->vp_register_page, input_vtl_zero); 621191d709b1488 Nuno Das Neves 2025-03-14 1027 unmap_intercept_message_page: debba2f23756254 Jinank Jain 2025-09-10 1028 hv_unmap_vp_state_page(partition->pt_id, args.vp_index, 621191d709b1488 Nuno Das Neves 2025-03-14 1029 HV_VP_STATE_PAGE_INTERCEPT_MESSAGE, debba2f23756254 Jinank Jain 2025-09-10 1030 vp->vp_intercept_msg_page, input_vtl_zero); 621191d709b1488 Nuno Das Neves 2025-03-14 1031 destroy_vp: 621191d709b1488 Nuno Das Neves 2025-03-14 1032 hv_call_delete_vp(partition->pt_id, args.vp_index); 621191d709b1488 Nuno Das Neves 2025-03-14 1033 return ret; 621191d709b1488 Nuno Das Neves 2025-03-14 1034 } 621191d709b1488 Nuno Das Neves 2025-03-14 1035 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki
© 2016 - 2025 Red Hat, Inc.