[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20220622213656.81546-4-peterx@redhat.com>
Date: Wed, 22 Jun 2022 17:36:55 -0400
From: Peter Xu <peterx@...hat.com>
To: kvm@...r.kernel.org, linux-kernel@...r.kernel.org
Cc: peterx@...hat.com, Paolo Bonzini <pbonzini@...hat.com>,
Andrew Morton <akpm@...ux-foundation.org>,
David Hildenbrand <david@...hat.com>,
"Dr . David Alan Gilbert" <dgilbert@...hat.com>,
Andrea Arcangeli <aarcange@...hat.com>,
Linux MM Mailing List <linux-mm@...ck.org>,
Sean Christopherson <seanjc@...gle.com>
Subject: [PATCH 3/4] kvm: Add new pfn error KVM_PFN_ERR_INTR
Add one new PFN error type to show when we cannot finish fetching the PFN
due to interruptions. For example, by receiving a generic signal.
This prepares KVM to be able to respond to SIGUSR1 (for QEMU that's the
SIGIPI) even during e.g. handling an userfaultfd page fault.
Signed-off-by: Peter Xu <peterx@...hat.com>
---
include/linux/kvm_host.h | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h
index b646b6fcaec6..4f84a442f67f 100644
--- a/include/linux/kvm_host.h
+++ b/include/linux/kvm_host.h
@@ -96,6 +96,7 @@
#define KVM_PFN_ERR_FAULT (KVM_PFN_ERR_MASK)
#define KVM_PFN_ERR_HWPOISON (KVM_PFN_ERR_MASK + 1)
#define KVM_PFN_ERR_RO_FAULT (KVM_PFN_ERR_MASK + 2)
+#define KVM_PFN_ERR_INTR (KVM_PFN_ERR_MASK + 3)
/*
* error pfns indicate that the gfn is in slot but faild to
@@ -106,6 +107,16 @@ static inline bool is_error_pfn(kvm_pfn_t pfn)
return !!(pfn & KVM_PFN_ERR_MASK);
}
+/*
+ * When KVM_PFN_ERR_INTR is returned, it means we're interrupted during
+ * fetching the PFN (e.g. a signal might have arrived), so we may want to
+ * retry at some later point and kick the userspace to handle the signal.
+ */
+static inline bool is_intr_pfn(kvm_pfn_t pfn)
+{
+ return pfn == KVM_PFN_ERR_INTR;
+}
+
/*
* error_noslot pfns indicate that the gfn can not be
* translated to pfn - it is not in slot or failed to
--
2.32.0
Powered by blists - more mailing lists