mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-11-19 08:05:27 +08:00
KVM: MCE: Send SRAR SIGBUS directly
Originally, SRAR SIGBUS is sent to QEMU-KVM via touching the poisoned
page. But commit 9605456919
prevents the
signal from being sent. So now the signal is sent via
force_sig_info_fault directly.
[marcelo: use send_sig_info instead]
Reported-by: Dean Nelson <dnelson@redhat.com>
Signed-off-by: Huang Ying <ying.huang@intel.com>
Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
This commit is contained in:
parent
5854dbca9b
commit
77db5cbd29
@ -2251,22 +2251,24 @@ static int __direct_map(struct kvm_vcpu *vcpu, gpa_t v, int write,
|
||||
return pt_write;
|
||||
}
|
||||
|
||||
static void kvm_send_hwpoison_signal(struct kvm *kvm, gfn_t gfn)
|
||||
static void kvm_send_hwpoison_signal(unsigned long address, struct task_struct *tsk)
|
||||
{
|
||||
char buf[1];
|
||||
void __user *hva;
|
||||
int r;
|
||||
siginfo_t info;
|
||||
|
||||
/* Touch the page, so send SIGBUS */
|
||||
hva = (void __user *)gfn_to_hva(kvm, gfn);
|
||||
r = copy_from_user(buf, hva, 1);
|
||||
info.si_signo = SIGBUS;
|
||||
info.si_errno = 0;
|
||||
info.si_code = BUS_MCEERR_AR;
|
||||
info.si_addr = (void __user *)address;
|
||||
info.si_addr_lsb = PAGE_SHIFT;
|
||||
|
||||
send_sig_info(SIGBUS, &info, tsk);
|
||||
}
|
||||
|
||||
static int kvm_handle_bad_page(struct kvm *kvm, gfn_t gfn, pfn_t pfn)
|
||||
{
|
||||
kvm_release_pfn_clean(pfn);
|
||||
if (is_hwpoison_pfn(pfn)) {
|
||||
kvm_send_hwpoison_signal(kvm, gfn);
|
||||
kvm_send_hwpoison_signal(gfn_to_hva(kvm, gfn), current);
|
||||
return 0;
|
||||
} else if (is_fault_pfn(pfn))
|
||||
return -EFAULT;
|
||||
|
Loading…
Reference in New Issue
Block a user