diff options
-rw-r--r-- | arch/x86/kvm/mmu.c | 2 | ||||
-rw-r--r-- | include/linux/kvm_host.h | 2 | ||||
-rw-r--r-- | virt/kvm/kvm_main.c | 13 |
3 files changed, 3 insertions, 14 deletions
diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c index 9cf90c8d584..d3cdf69da51 100644 --- a/arch/x86/kvm/mmu.c +++ b/arch/x86/kvm/mmu.c | |||
@@ -2649,7 +2649,7 @@ static void kvm_send_hwpoison_signal(unsigned long address, struct task_struct * | |||
2649 | static int kvm_handle_bad_page(struct kvm_vcpu *vcpu, gfn_t gfn, pfn_t pfn) | 2649 | static int kvm_handle_bad_page(struct kvm_vcpu *vcpu, gfn_t gfn, pfn_t pfn) |
2650 | { | 2650 | { |
2651 | kvm_release_pfn_clean(pfn); | 2651 | kvm_release_pfn_clean(pfn); |
2652 | if (is_hwpoison_pfn(pfn)) { | 2652 | if (pfn == KVM_PFN_ERR_HWPOISON) { |
2653 | kvm_send_hwpoison_signal(gfn_to_hva(vcpu->kvm, gfn), current); | 2653 | kvm_send_hwpoison_signal(gfn_to_hva(vcpu->kvm, gfn), current); |
2654 | return 0; | 2654 | return 0; |
2655 | } | 2655 | } |
diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index ef5554f4748..840f44a096c 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h | |||
@@ -49,6 +49,7 @@ | |||
49 | (KVM_MMIO_SIZE / KVM_USER_MMIO_SIZE + KVM_EXTRA_MMIO_FRAGMENTS) | 49 | (KVM_MMIO_SIZE / KVM_USER_MMIO_SIZE + KVM_EXTRA_MMIO_FRAGMENTS) |
50 | 50 | ||
51 | #define KVM_PFN_ERR_FAULT (-EFAULT) | 51 | #define KVM_PFN_ERR_FAULT (-EFAULT) |
52 | #define KVM_PFN_ERR_HWPOISON (-EHWPOISON) | ||
52 | 53 | ||
53 | /* | 54 | /* |
54 | * vcpu->requests bit members | 55 | * vcpu->requests bit members |
@@ -395,7 +396,6 @@ extern struct page *bad_page; | |||
395 | 396 | ||
396 | int is_error_page(struct page *page); | 397 | int is_error_page(struct page *page); |
397 | int is_error_pfn(pfn_t pfn); | 398 | int is_error_pfn(pfn_t pfn); |
398 | int is_hwpoison_pfn(pfn_t pfn); | ||
399 | int is_noslot_pfn(pfn_t pfn); | 399 | int is_noslot_pfn(pfn_t pfn); |
400 | int is_invalid_pfn(pfn_t pfn); | 400 | int is_invalid_pfn(pfn_t pfn); |
401 | int kvm_is_error_hva(unsigned long addr); | 401 | int kvm_is_error_hva(unsigned long addr); |
diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c index ef0491645a1..7fce2d5787a 100644 --- a/virt/kvm/kvm_main.c +++ b/virt/kvm/kvm_main.c | |||
@@ -939,17 +939,6 @@ static pfn_t get_bad_pfn(void) | |||
939 | return -ENOENT; | 939 | return -ENOENT; |
940 | } | 940 | } |
941 | 941 | ||
942 | static pfn_t get_hwpoison_pfn(void) | ||
943 | { | ||
944 | return -EHWPOISON; | ||
945 | } | ||
946 | |||
947 | int is_hwpoison_pfn(pfn_t pfn) | ||
948 | { | ||
949 | return pfn == -EHWPOISON; | ||
950 | } | ||
951 | EXPORT_SYMBOL_GPL(is_hwpoison_pfn); | ||
952 | |||
953 | int is_noslot_pfn(pfn_t pfn) | 942 | int is_noslot_pfn(pfn_t pfn) |
954 | { | 943 | { |
955 | return pfn == -ENOENT; | 944 | return pfn == -ENOENT; |
@@ -1115,7 +1104,7 @@ static pfn_t hva_to_pfn(unsigned long addr, bool atomic, bool *async, | |||
1115 | if (npages == -EHWPOISON || | 1104 | if (npages == -EHWPOISON || |
1116 | (!async && check_user_page_hwpoison(addr))) { | 1105 | (!async && check_user_page_hwpoison(addr))) { |
1117 | up_read(¤t->mm->mmap_sem); | 1106 | up_read(¤t->mm->mmap_sem); |
1118 | return get_hwpoison_pfn(); | 1107 | return KVM_PFN_ERR_HWPOISON; |
1119 | } | 1108 | } |
1120 | 1109 | ||
1121 | vma = find_vma_intersection(current->mm, addr, addr+1); | 1110 | vma = find_vma_intersection(current->mm, addr, addr+1); |