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 <[email protected]>
> ---
>  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) <[email protected]>


Reply via email to