Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

mshv: Handle insufficient contiguous memory hypervisor status

The HV_STATUS_INSUFFICIENT_CONTIGUOUS_MEMORY status indicates that the
hypervisor lacks sufficient contiguous memory for its internal allocations.

When this status is encountered, allocate and deposit
HV_MAX_CONTIGUOUS_ALLOCATION_PAGES contiguous pages to the hypervisor.
HV_MAX_CONTIGUOUS_ALLOCATION_PAGES is defined in the hypervisor headers, a
deposit of this size will always satisfy the hypervisor's requirements.

Signed-off-by: Stanislav Kinsburskii <skinsburskii@linux.microsoft.com>
Reviewed-by: Anirudh Rayabharam (Microsoft) <anirudh@anirudhrb.com>
Reviewed-by: Mukesh R <mrathor@linux.microsoft.com>
Signed-off-by: Wei Liu <wei.liu@kernel.org>

authored by

Stanislav Kinsburskii and committed by
Wei Liu
cf82dd5e ede54383

+8
+1
drivers/hv/hv_common.c
··· 793 793 _STATUS_INFO(HV_STATUS_UNKNOWN_PROPERTY, -EIO), 794 794 _STATUS_INFO(HV_STATUS_PROPERTY_VALUE_OUT_OF_RANGE, -EIO), 795 795 _STATUS_INFO(HV_STATUS_INSUFFICIENT_MEMORY, -ENOMEM), 796 + _STATUS_INFO(HV_STATUS_INSUFFICIENT_CONTIGUOUS_MEMORY, -ENOMEM), 796 797 _STATUS_INFO(HV_STATUS_INVALID_PARTITION_ID, -EINVAL), 797 798 _STATUS_INFO(HV_STATUS_INVALID_VP_INDEX, -EINVAL), 798 799 _STATUS_INFO(HV_STATUS_NOT_FOUND, -EIO),
+4
drivers/hv/hv_proc.c
··· 118 118 switch (hv_result(hv_status)) { 119 119 case HV_STATUS_INSUFFICIENT_MEMORY: 120 120 break; 121 + case HV_STATUS_INSUFFICIENT_CONTIGUOUS_MEMORY: 122 + num_pages = HV_MAX_CONTIGUOUS_ALLOCATION_PAGES; 123 + break; 121 124 default: 122 125 hv_status_err(hv_status, "Unexpected!\n"); 123 126 return -ENOMEM; ··· 133 130 { 134 131 switch (hv_result(status)) { 135 132 case HV_STATUS_INSUFFICIENT_MEMORY: 133 + case HV_STATUS_INSUFFICIENT_CONTIGUOUS_MEMORY: 136 134 return true; 137 135 } 138 136 return false;
+1
include/hyperv/hvgdk_mini.h
··· 38 38 #define HV_STATUS_INVALID_LP_INDEX 0x41 39 39 #define HV_STATUS_INVALID_REGISTER_VALUE 0x50 40 40 #define HV_STATUS_OPERATION_FAILED 0x71 41 + #define HV_STATUS_INSUFFICIENT_CONTIGUOUS_MEMORY 0x75 41 42 #define HV_STATUS_TIME_OUT 0x78 42 43 #define HV_STATUS_CALL_PENDING 0x79 43 44 #define HV_STATUS_VTL_ALREADY_ENABLED 0x86
+2
include/hyperv/hvhdk_mini.h
··· 7 7 8 8 #include "hvgdk_mini.h" 9 9 10 + #define HV_MAX_CONTIGUOUS_ALLOCATION_PAGES 8 11 + 10 12 /* 11 13 * Doorbell connection_info flags. 12 14 */