* Re: [PATCH 2/2] KVM, Fix QEMU-KVM is killed by guest SRAO MCE [not found] ` <4BD69680.10402@redhat.com> @ 2010-04-27 9:25 ` Huang Ying 2010-04-27 9:30 ` Avi Kivity 0 siblings, 1 reply; 5+ messages in thread From: Huang Ying @ 2010-04-27 9:25 UTC (permalink / raw) To: Avi Kivity Cc: linux-kernel@vger.kernel.org, Andi Kleen, Andrew Morton, masbock@linux.vnet.ibm.com, kvm On Tue, 2010-04-27 at 15:47 +0800, Avi Kivity wrote: > (please copy kvm@vger.kernel.org on kvm patches) Sorry, will do that for all future patches. > On 04/27/2010 10:04 AM, Huang Ying wrote: > > > > +static void kvm_send_hwpoison_signal(struct kvm *kvm, gfn_t gfn) > > +{ > > + char buf[1]; > > + void __user *hva; > > + int r; > > + > > + /* Touch the page, so send SIGBUS */ > > + hva = (void __user *)gfn_to_hva(kvm, gfn); > > + r = copy_from_user(buf, hva, 1); > > > > No error check? What will a copy_from_user() of poisoned page expected > to return? > > Best to return -EFAULT on failure for consistency. Just want to use the side effect of copy_from_user, SIGBUS will be sent to current process because the page touched is marked as poisoned. That is, failure is expected, so the return value is not checked. > > +} > > + > > static int nonpaging_map(struct kvm_vcpu *vcpu, gva_t v, int write, gfn_t gfn) > > { > > int r; > > @@ -1997,7 +2009,11 @@ static int nonpaging_map(struct kvm_vcpu > > /* mmio */ > > if (is_error_pfn(pfn)) { > > kvm_release_pfn_clean(pfn); > > - return 1; > > + if (is_hwpoison_pfn(pfn)) { > > + kvm_send_hwpoison_signal(vcpu->kvm, gfn); > > + return 0; > > + } else > > + return 1; > > } > > > > This is duplicated several times. Please introduce a kvm_handle_bad_page(): > > if (is_error_pfn(pfn)) > return kvm_handle_bad_page(vcpu->kvm, gfn, pfn); OK. Will do that. Best Regards, Huang Ying ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 2/2] KVM, Fix QEMU-KVM is killed by guest SRAO MCE 2010-04-27 9:25 ` [PATCH 2/2] KVM, Fix QEMU-KVM is killed by guest SRAO MCE Huang Ying @ 2010-04-27 9:30 ` Avi Kivity 2010-04-28 2:56 ` Huang Ying 0 siblings, 1 reply; 5+ messages in thread From: Avi Kivity @ 2010-04-27 9:30 UTC (permalink / raw) To: Huang Ying Cc: linux-kernel@vger.kernel.org, Andi Kleen, Andrew Morton, masbock@linux.vnet.ibm.com, kvm On 04/27/2010 12:25 PM, Huang Ying wrote: > > >> On 04/27/2010 10:04 AM, Huang Ying wrote: >> >>> +static void kvm_send_hwpoison_signal(struct kvm *kvm, gfn_t gfn) >>> +{ >>> + char buf[1]; >>> + void __user *hva; >>> + int r; >>> + >>> + /* Touch the page, so send SIGBUS */ >>> + hva = (void __user *)gfn_to_hva(kvm, gfn); >>> + r = copy_from_user(buf, hva, 1); >>> >>> >> No error check? What will a copy_from_user() of poisoned page expected >> to return? >> >> Best to return -EFAULT on failure for consistency. >> > Just want to use the side effect of copy_from_user, SIGBUS will be sent > to current process because the page touched is marked as poisoned. That > is, failure is expected, so the return value is not checked. > What if the failure doesn't happen? Say, someone mmap()ed over the page. btw, better to use (void)copy_from_user(...) instead to avoid the initialized but not used warning the compiler may generate. -- error compiling committee.c: too many arguments to function ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 2/2] KVM, Fix QEMU-KVM is killed by guest SRAO MCE 2010-04-27 9:30 ` Avi Kivity @ 2010-04-28 2:56 ` Huang Ying 2010-04-28 9:47 ` Avi Kivity 0 siblings, 1 reply; 5+ messages in thread From: Huang Ying @ 2010-04-28 2:56 UTC (permalink / raw) To: Avi Kivity Cc: linux-kernel@vger.kernel.org, Andi Kleen, Andrew Morton, masbock@linux.vnet.ibm.com, kvm@vger.kernel.org On Tue, 2010-04-27 at 17:30 +0800, Avi Kivity wrote: > On 04/27/2010 12:25 PM, Huang Ying wrote: > > > > > >> On 04/27/2010 10:04 AM, Huang Ying wrote: > >> > >>> +static void kvm_send_hwpoison_signal(struct kvm *kvm, gfn_t gfn) > >>> +{ > >>> + char buf[1]; > >>> + void __user *hva; > >>> + int r; > >>> + > >>> + /* Touch the page, so send SIGBUS */ > >>> + hva = (void __user *)gfn_to_hva(kvm, gfn); > >>> + r = copy_from_user(buf, hva, 1); > >>> > >>> > >> No error check? What will a copy_from_user() of poisoned page expected > >> to return? > >> > >> Best to return -EFAULT on failure for consistency. > >> > > Just want to use the side effect of copy_from_user, SIGBUS will be sent > > to current process because the page touched is marked as poisoned. That > > is, failure is expected, so the return value is not checked. > > > > What if the failure doesn't happen? Say, someone mmap()ed over the page. Sorry, not get your idea clearly. hva is re-mmap()ed? We just read the hva, not write, so I think it should be OK here. > btw, better to use (void)copy_from_user(...) instead to avoid the > initialized but not used warning the compiler may generate. OK. Will do that. Best Regards, Huang Ying ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 2/2] KVM, Fix QEMU-KVM is killed by guest SRAO MCE 2010-04-28 2:56 ` Huang Ying @ 2010-04-28 9:47 ` Avi Kivity 2010-04-29 1:31 ` Huang Ying 0 siblings, 1 reply; 5+ messages in thread From: Avi Kivity @ 2010-04-28 9:47 UTC (permalink / raw) To: Huang Ying Cc: linux-kernel@vger.kernel.org, Andi Kleen, Andrew Morton, masbock@linux.vnet.ibm.com, kvm@vger.kernel.org On 04/28/2010 05:56 AM, Huang Ying wrote: > >>> >>> Just want to use the side effect of copy_from_user, SIGBUS will be sent >>> to current process because the page touched is marked as poisoned. That >>> is, failure is expected, so the return value is not checked. >>> >>> >> What if the failure doesn't happen? Say, someone mmap()ed over the page. >> > Sorry, not get your idea clearly. hva is re-mmap()ed? We just read the > hva, not write, so I think it should be OK here. > > We don't generate a signal in this case. Does the code continue to work correctly (not sure what correctly is in this case... should probably just continue). There's also the possibility of -EFAULT. -- error compiling committee.c: too many arguments to function ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 2/2] KVM, Fix QEMU-KVM is killed by guest SRAO MCE 2010-04-28 9:47 ` Avi Kivity @ 2010-04-29 1:31 ` Huang Ying 0 siblings, 0 replies; 5+ messages in thread From: Huang Ying @ 2010-04-29 1:31 UTC (permalink / raw) To: Avi Kivity Cc: linux-kernel@vger.kernel.org, Andi Kleen, Andrew Morton, masbock@linux.vnet.ibm.com, kvm@vger.kernel.org On Wed, 2010-04-28 at 17:47 +0800, Avi Kivity wrote: > On 04/28/2010 05:56 AM, Huang Ying wrote: > > > >>> > >>> Just want to use the side effect of copy_from_user, SIGBUS will be sent > >>> to current process because the page touched is marked as poisoned. That > >>> is, failure is expected, so the return value is not checked. > >>> > >>> > >> What if the failure doesn't happen? Say, someone mmap()ed over the page. > >> > > Sorry, not get your idea clearly. hva is re-mmap()ed? We just read the > > hva, not write, so I think it should be OK here. > > > > > > We don't generate a signal in this case. Does the code continue to work > correctly (not sure what correctly is in this case... should probably > just continue). > > There's also the possibility of -EFAULT. I think signal should be generated for copy_from_user, because the hva is poisoned now. The signal will not generated only if the hva is re-mmap()ped to some other physical page, but this should be impossible unless we have memory hotadd/hotremove in KVM. If the signal is not generated, lost or overwritten, guest will continue, and if the hva is still poisoned, the page fault will be triggered again; if the hva is not poisoned, there will be no further page fault. Best Regards, Huang Ying ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2010-04-29 1:31 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <1272351860.24125.15.camel@yhuang-dev.sh.intel.com>
[not found] ` <4BD69680.10402@redhat.com>
2010-04-27 9:25 ` [PATCH 2/2] KVM, Fix QEMU-KVM is killed by guest SRAO MCE Huang Ying
2010-04-27 9:30 ` Avi Kivity
2010-04-28 2:56 ` Huang Ying
2010-04-28 9:47 ` Avi Kivity
2010-04-29 1:31 ` Huang Ying
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox