aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/kvm_host.h
diff options
context:
space:
mode:
authorXiao Guangrong <xiaoguangrong@linux.vnet.ibm.com>2012-08-03 03:43:51 -0400
committerAvi Kivity <avi@redhat.com>2012-08-06 09:04:59 -0400
commit9c5b11728344e1085593f494ddc8838497e7ffde (patch)
tree0452dc0149bbc6ed01001b7807e902e9d2102148 /include/linux/kvm_host.h
parent32cad84f44d186654492f1a50a1424c8906ccbd9 (diff)
KVM: let the error pfn not depend on error code
Currently, we use the error code as error pfn to indicat the error condition, it is not straightforward and it will not work on PAE 32-bit cpu with huge memory, since the valid physical address can be at most 52 bits For the normal pfn, the highest 12 bits should be zero, so we can mask these bits to indicate the error. Signed-off-by: Xiao Guangrong <xiaoguangrong@linux.vnet.ibm.com> Signed-off-by: Avi Kivity <avi@redhat.com>
Diffstat (limited to 'include/linux/kvm_host.h')
-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 07226f820e6c..d2b897ee3ac4 100644
--- a/include/linux/kvm_host.h
+++ b/include/linux/kvm_host.h
@@ -49,28 +49,34 @@
49#define KVM_MAX_MMIO_FRAGMENTS \ 49#define KVM_MAX_MMIO_FRAGMENTS \
50 (KVM_MMIO_SIZE / KVM_USER_MMIO_SIZE + KVM_EXTRA_MMIO_FRAGMENTS) 50 (KVM_MMIO_SIZE / KVM_USER_MMIO_SIZE + KVM_EXTRA_MMIO_FRAGMENTS)
51 51
52#define KVM_PFN_ERR_FAULT (-EFAULT) 52/*
53#define KVM_PFN_ERR_HWPOISON (-EHWPOISON) 53 * For the normal pfn, the highest 12 bits should be zero,
54#define KVM_PFN_ERR_BAD (-ENOENT) 54 * so we can mask these bits to indicate the error.
55 */
56#define KVM_PFN_ERR_MASK (0xfffULL << 52)
57
58#define KVM_PFN_ERR_FAULT (KVM_PFN_ERR_MASK)
59#define KVM_PFN_ERR_HWPOISON (KVM_PFN_ERR_MASK + 1)
60#define KVM_PFN_ERR_BAD (KVM_PFN_ERR_MASK + 2)
55 61
56static inline int is_error_pfn(pfn_t pfn) 62static inline bool is_error_pfn(pfn_t pfn)
57{ 63{
58 return IS_ERR_VALUE(pfn); 64 return !!(pfn & KVM_PFN_ERR_MASK);
59} 65}
60 66
61static inline int is_noslot_pfn(pfn_t pfn) 67static inline bool is_noslot_pfn(pfn_t pfn)
62{ 68{
63 return pfn == -ENOENT; 69 return pfn == KVM_PFN_ERR_BAD;
64} 70}
65 71
66static inline int is_invalid_pfn(pfn_t pfn) 72static inline bool is_invalid_pfn(pfn_t pfn)
67{ 73{
68 return !is_noslot_pfn(pfn) && is_error_pfn(pfn); 74 return !is_noslot_pfn(pfn) && is_error_pfn(pfn);
69} 75}
70 76
71#define KVM_ERR_PTR_BAD_PAGE (ERR_PTR(-ENOENT)) 77#define KVM_ERR_PTR_BAD_PAGE (ERR_PTR(-ENOENT))
72 78
73static inline int is_error_page(struct page *page) 79static inline bool is_error_page(struct page *page)
74{ 80{
75 return IS_ERR(page); 81 return IS_ERR(page);
76} 82}