Re: [PATCH v12 13/84] KVM: Annotate that all paths in hva_to_pfn() might sleep

From: Alex Bennée
Date: Thu Aug 08 2024 - 08:00:15 EST


Sean Christopherson <seanjc@xxxxxxxxxx> writes:

> Now that hva_to_pfn() no longer supports being called in atomic context,
> move the might_sleep() annotation from hva_to_pfn_slow() to
> hva_to_pfn().

The commentary for hva_to_pfn_fast disagrees.

/*
* The fast path to get the writable pfn which will be stored in @pfn,
* true indicates success, otherwise false is returned. It's also the
* only part that runs if we can in atomic context.
*/
static bool hva_to_pfn_fast(struct kvm_follow_pfn *kfp, kvm_pfn_t *pfn)

At which point did it loose the ability to run in the atomic context? I
couldn't work it out from the commits.

>
> Signed-off-by: Sean Christopherson <seanjc@xxxxxxxxxx>
> ---
> virt/kvm/kvm_main.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
> index 84c73b4fc804..03af1a0090b1 100644
> --- a/virt/kvm/kvm_main.c
> +++ b/virt/kvm/kvm_main.c
> @@ -2807,8 +2807,6 @@ static int hva_to_pfn_slow(unsigned long addr, bool *async, bool write_fault,
> struct page *page;
> int npages;
>
> - might_sleep();
> -
> if (writable)
> *writable = write_fault;
>
> @@ -2947,6 +2945,8 @@ kvm_pfn_t hva_to_pfn(unsigned long addr, bool interruptible, bool *async,
> kvm_pfn_t pfn;
> int npages, r;
>
> + might_sleep();
> +
> if (hva_to_pfn_fast(addr, write_fault, writable, &pfn))
> return pfn;

--
Alex Bennée
Virtualisation Tech Lead @ Linaro