Re: [PATCH 1/3] Implement emulator_write_phys()

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

 



Anthony Liguori wrote:
On Mon, 2007-08-27 at 18:45 +0300, Avi Kivity wrote:
Anthony Liguori wrote:
Since a hypercall may span two pages and is a gva, we need a function to write
to a gva that may span multiple pages.  emulator_write_phys() seems like the
logical choice for this.

@@ -962,8 +962,35 @@ static int emulator_write_std(unsigned long addr,
 			      unsigned int bytes,
 			      struct kvm_vcpu *vcpu
I think that emulator_write_emulated(), except for being awkwardly named, should do the job. We have enough APIs.

But! We may not overwrite the hypercall instruction while a vcpu may be executing, since there's no atomicity guarantee for code fetch. We have to to be out of guest mode while writing that insn.


Hrm, good catch.

How can we get out of guest mode given SMP guest support?


kvm_flush_remote_tlbs() is something that can be generalized. Basically, you set a bit in each vcpu and send an IPI to take them out.

But that's deadlock prone and complex. Maybe you can just take kvm->lock, zap the mmu and the flush tlbs, and patch the instruction at your leisure, as no vcpu will be able to map memory until the lock is released.

--
Any sufficiently difficult bug is indistinguishable from a feature.

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux