Re: [RFC 2/2] KVM, MCE, unpoison memory address across reboot

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Am 05.01.2011 07:45, Huang Ying wrote:
> On Fri, 2010-12-31 at 17:10 +0800, Jan Kiszka wrote:
>> Am 31.12.2010 06:22, Huang Ying wrote:
>>> In Linux kernel HWPoison processing implementation, the virtual
>>> address in processes mapping the error physical memory page is marked
>>> as HWPoison.  So that, the further accessing to the virtual
>>> address will kill corresponding processes with SIGBUS.
>>>
>>> If the error physical memory page is used by a KVM guest, the SIGBUS
>>> will be sent to QEMU, and QEMU will simulate a MCE to report that
>>> memory error to the guest OS.  If the guest OS can not recover from
>>> the error (for example, the page is accessed by kernel code), guest OS
>>> will reboot the system.  But because the underlying host virtual
>>> address backing the guest physical memory is still poisoned, if the
>>> guest system accesses the corresponding guest physical memory even
>>> after rebooting, the SIGBUS will still be sent to QEMU and MCE will be
>>> simulated.  That is, guest system can not recover via rebooting.
>>>
>>> In fact, across rebooting, the contents of guest physical memory page
>>> need not to be kept.  We can allocate a new host physical page to
>>> back the corresponding guest physical address.
>>>
>>> This patch fixes this issue in QEMU-KVM via calling qemu_ram_remap()
>>> to clear the corresponding page table entry, so that make it possible
>>> to allocate a new page to recover the issue.
>>>
>>> Signed-off-by: Huang Ying <ying.huang@xxxxxxxxx>
>>> ---
>>>  kvm.h             |    2 ++
>>>  qemu-kvm.c        |   37 +++++++++++++++++++++++++++++++++++++
>>
>> What's missing in upstream to make this a uq/master patch? We are still
>> piling up features and fixes in qemu-kvm* that should better target
>> upstream directly. That's work needlessly done twice.
> 
> OK. I will do that. Just based on uq/master is sufficient to make it an
> upstream patch?

This how things work: You base your upstream changes onto uq/master,
they get picked up and then merged into qemu, qemu-kvm merges upstream
back, and then you have your bits ready in both trees. Sometimes it
takes some additional tweaking the qemu-kvm after the merge, but I hope
we can significantly reduce the need for that very soon.

> 
>> Is this infrastructure really arch-independent? Will there be other
>> users besides x86? If not, better keep it in target-i386/kvm.c.
> 
> No.  It is used only in x86.  I will move it into target-i386/kvm.c.
> 

Perfect. Then you just need to extend kvm_arch_init_vcpu with your reset
registration, and both upstream and qemu-kvm will gain the feature
automatically.

Jan

Attachment: signature.asc
Description: OpenPGP digital signature


[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux