Re: [PATCH v2 3/4] mshv: Handle insufficient contiguous memory hypervisor status
From: Anirudh Rayabharam
Date: Thu Feb 05 2026 - 13:03:35 EST
On Mon, Feb 02, 2026 at 05:59:09PM +0000, Stanislav Kinsburskii wrote:
> 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@xxxxxxxxxxxxxxxxxxx>
> ---
> drivers/hv/hv_common.c | 1 +
> drivers/hv/hv_proc.c | 4 ++++
> include/hyperv/hvgdk_mini.h | 1 +
> include/hyperv/hvhdk_mini.h | 2 ++
> 4 files changed, 8 insertions(+)
>
> diff --git a/drivers/hv/hv_common.c b/drivers/hv/hv_common.c
> index 0a3ab7efed46..c7f63c9de503 100644
> --- a/drivers/hv/hv_common.c
> +++ b/drivers/hv/hv_common.c
> @@ -791,6 +791,7 @@ static const struct hv_status_info hv_status_infos[] = {
> _STATUS_INFO(HV_STATUS_UNKNOWN_PROPERTY, -EIO),
> _STATUS_INFO(HV_STATUS_PROPERTY_VALUE_OUT_OF_RANGE, -EIO),
> _STATUS_INFO(HV_STATUS_INSUFFICIENT_MEMORY, -ENOMEM),
> + _STATUS_INFO(HV_STATUS_INSUFFICIENT_CONTIGUOUS_MEMORY, -ENOMEM),
> _STATUS_INFO(HV_STATUS_INVALID_PARTITION_ID, -EINVAL),
> _STATUS_INFO(HV_STATUS_INVALID_VP_INDEX, -EINVAL),
> _STATUS_INFO(HV_STATUS_NOT_FOUND, -EIO),
> diff --git a/drivers/hv/hv_proc.c b/drivers/hv/hv_proc.c
> index ffa25cd6e4e9..dfa27be66ff7 100644
> --- a/drivers/hv/hv_proc.c
> +++ b/drivers/hv/hv_proc.c
> @@ -119,6 +119,9 @@ int hv_deposit_memory_node(int node, u64 partition_id,
> case HV_STATUS_INSUFFICIENT_MEMORY:
> num_pages = 1;
> break;
> + case HV_STATUS_INSUFFICIENT_CONTIGUOUS_MEMORY:
> + num_pages = HV_MAX_CONTIGUOUS_ALLOCATION_PAGES;
> + break;
> default:
> hv_status_err(hv_status, "Unexpected!\n");
> return -ENOMEM;
> @@ -131,6 +134,7 @@ bool hv_result_needs_memory(u64 status)
> {
> switch (hv_result(status)) {
> case HV_STATUS_INSUFFICIENT_MEMORY:
> + case HV_STATUS_INSUFFICIENT_CONTIGUOUS_MEMORY:
> return true;
> }
> return false;
> diff --git a/include/hyperv/hvgdk_mini.h b/include/hyperv/hvgdk_mini.h
> index 04b18d0e37af..70f22ef44948 100644
> --- a/include/hyperv/hvgdk_mini.h
> +++ b/include/hyperv/hvgdk_mini.h
> @@ -38,6 +38,7 @@ struct hv_u128 {
> #define HV_STATUS_INVALID_LP_INDEX 0x41
> #define HV_STATUS_INVALID_REGISTER_VALUE 0x50
> #define HV_STATUS_OPERATION_FAILED 0x71
> +#define HV_STATUS_INSUFFICIENT_CONTIGUOUS_MEMORY 0x75
> #define HV_STATUS_TIME_OUT 0x78
> #define HV_STATUS_CALL_PENDING 0x79
> #define HV_STATUS_VTL_ALREADY_ENABLED 0x86
> diff --git a/include/hyperv/hvhdk_mini.h b/include/hyperv/hvhdk_mini.h
> index c0300910808b..091c03e26046 100644
> --- a/include/hyperv/hvhdk_mini.h
> +++ b/include/hyperv/hvhdk_mini.h
> @@ -7,6 +7,8 @@
>
> #include "hvgdk_mini.h"
>
> +#define HV_MAX_CONTIGUOUS_ALLOCATION_PAGES 8
> +
> /*
> * Doorbell connection_info flags.
> */
>
>
Reviewed-by: Anirudh Rayabharam (Microsoft) <anirudh@xxxxxxxxxxxxx>