|
@@ -1450,20 +1450,14 @@ static void invalidate_icache_guest_page(kvm_pfn_t pfn, unsigned long size)
|
|
static void kvm_send_hwpoison_signal(unsigned long address,
|
|
static void kvm_send_hwpoison_signal(unsigned long address,
|
|
struct vm_area_struct *vma)
|
|
struct vm_area_struct *vma)
|
|
{
|
|
{
|
|
- siginfo_t info;
|
|
|
|
-
|
|
|
|
- clear_siginfo(&info);
|
|
|
|
- info.si_signo = SIGBUS;
|
|
|
|
- info.si_errno = 0;
|
|
|
|
- info.si_code = BUS_MCEERR_AR;
|
|
|
|
- info.si_addr = (void __user *)address;
|
|
|
|
|
|
+ short lsb;
|
|
|
|
|
|
if (is_vm_hugetlb_page(vma))
|
|
if (is_vm_hugetlb_page(vma))
|
|
- info.si_addr_lsb = huge_page_shift(hstate_vma(vma));
|
|
|
|
|
|
+ lsb = huge_page_shift(hstate_vma(vma));
|
|
else
|
|
else
|
|
- info.si_addr_lsb = PAGE_SHIFT;
|
|
|
|
|
|
+ lsb = PAGE_SHIFT;
|
|
|
|
|
|
- send_sig_info(SIGBUS, &info, current);
|
|
|
|
|
|
+ send_sig_mceerr(BUS_MCEERR_AR, (void __user *)address, lsb, current);
|
|
}
|
|
}
|
|
|
|
|
|
static int user_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa,
|
|
static int user_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa,
|