summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/linux/kvm_host.h24
1 files changed, 15 insertions, 9 deletions
diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h
index 07226f820e6..d2b897ee3ac 100644
--- a/include/linux/kvm_host.h
+++ b/include/linux/kvm_host.h
@@ -49,28 +49,34 @@
#define KVM_MAX_MMIO_FRAGMENTS \
(KVM_MMIO_SIZE / KVM_USER_MMIO_SIZE + KVM_EXTRA_MMIO_FRAGMENTS)
-#define KVM_PFN_ERR_FAULT (-EFAULT)
-#define KVM_PFN_ERR_HWPOISON (-EHWPOISON)
-#define KVM_PFN_ERR_BAD (-ENOENT)
+/*
+ * For the normal pfn, the highest 12 bits should be zero,
+ * so we can mask these bits to indicate the error.
+ */
+#define KVM_PFN_ERR_MASK (0xfffULL << 52)
+
+#define KVM_PFN_ERR_FAULT (KVM_PFN_ERR_MASK)
+#define KVM_PFN_ERR_HWPOISON (KVM_PFN_ERR_MASK + 1)
+#define KVM_PFN_ERR_BAD (KVM_PFN_ERR_MASK + 2)
-static inline int is_error_pfn(pfn_t pfn)
+static inline bool is_error_pfn(pfn_t pfn)
{
- return IS_ERR_VALUE(pfn);
+ return !!(pfn & KVM_PFN_ERR_MASK);
}
-static inline int is_noslot_pfn(pfn_t pfn)
+static inline bool is_noslot_pfn(pfn_t pfn)
{
- return pfn == -ENOENT;
+ return pfn == KVM_PFN_ERR_BAD;
}
-static inline int is_invalid_pfn(pfn_t pfn)
+static inline bool is_invalid_pfn(pfn_t pfn)
{
return !is_noslot_pfn(pfn) && is_error_pfn(pfn);
}
#define KVM_ERR_PTR_BAD_PAGE (ERR_PTR(-ENOENT))
-static inline int is_error_page(struct page *page)
+static inline bool is_error_page(struct page *page)
{
return IS_ERR(page);
}