1. 03 5月, 2007 11 次提交
  2. 27 3月, 2007 2 次提交
    • I
      KVM: always reload segment selectors · 6d9658df
      Ingo Molnar 提交于
      failed VM entry on VMX might still change %fs or %gs, thus make sure
      that KVM always reloads the segment selectors. This is crutial on both
      x86 and x86_64: x86 has __KERNEL_PDA in %fs on which things like
      'current' depends and x86_64 has 0 there and needs MSR_GS_BASE to work.
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      6d9658df
    • A
      KVM: Prevent system selectors leaking into guest on real->protected mode transition on vmx · 6af11b9e
      Avi Kivity 提交于
      Intel virtualization extensions do not support virtualizing real mode.  So
      kvm uses virtualized vm86 mode to run real mode code.  Unfortunately, this
      virtualized vm86 mode does not support the so called "big real" mode, where
      the segment selector and base do not agree with each other according to the
      real mode rules (base == selector << 4).
      
      To work around this, kvm checks whether a selector/base pair violates the
      virtualized vm86 rules, and if so, forces it into conformance.  On a
      transition back to protected mode, if we see that the guest did not touch
      a forced segment, we restore it back to the original protected mode value.
      
      This pile of hacks breaks down if the gdt has changed in real mode, as it
      can cause a segment selector to point to a system descriptor instead of a
      normal data segment.  In fact, this happens with the Windows bootloader
      and the qemu acpi bios, where a protected mode memcpy routine issues an
      innocent 'pop %es' and traps on an attempt to load a system descriptor.
      
      "Fix" by checking if the to-be-restored selector points at a system segment,
      and if so, coercing it into a normal data segment.  The long term solution,
      of course, is to abandon vm86 mode and use emulation for big real mode.
      Signed-off-by: NAvi Kivity <avi@qumranet.com>
      6af11b9e
  3. 18 3月, 2007 1 次提交
  4. 04 3月, 2007 7 次提交
  5. 13 2月, 2007 6 次提交
  6. 10 2月, 2007 1 次提交
  7. 02 2月, 2007 1 次提交
  8. 23 1月, 2007 2 次提交
    • A
      [PATCH] KVM: fix race between mmio reads and injected interrupts · cccf748b
      Avi Kivity 提交于
      The kvm mmio read path looks like:
      
       1. guest read faults
       2. kvm emulates read, calls emulator_read_emulated()
       3. fails as a read requires userspace help
       4. exit to userspace
       5. userspace emulates read, kvm sets vcpu->mmio_read_completed
       6. re-enter guest, fault again
       7. kvm emulates read, calls emulator_read_emulated()
       8. succeeds as vcpu->mmio_read_emulated is set
       9. instruction completes and guest is resumed
      
      A problem surfaces if the userspace exit (step 5) also requests an interrupt
      injection.  In that case, the guest does not re-execute the original
      instruction, but the interrupt handler.  The next time an mmio read is
      exectued (likely for a different address), step 3 will find
      vcpu->mmio_read_completed set and return the value read for the original
      instruction.
      
      The problem manifested itself in a few annoying ways:
      - little squares appear randomly on console when switching virtual terminals
      - ne2000 fails under nfs read load
      - rtl8139 complains about "pci errors" even though the device model is
        incapable of issuing them.
      
      Fix by skipping interrupt injection if an mmio read is pending.
      
      A better fix is to avoid re-entry into the guest, and re-emulating immediately
      instead.  However that's a bit more complex.
      Signed-off-by: NAvi Kivity <avi@qumranet.com>
      Cc: Ingo Molnar <mingo@elte.hu>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      cccf748b
    • H
      [PATCH] vmx: Fix register constraint in launch code · e0015489
      Herbert Xu 提交于
      Both "=r" and "=g" breaks my build on i386:
      
        $ make
          CC [M]  drivers/kvm/vmx.o
        {standard input}: Assembler messages:
        {standard input}:3318: Error: bad register name `%sil'
        make[1]: *** [drivers/kvm/vmx.o] Error 1
        make: *** [_module_drivers/kvm] Error 2
      
      The reason is that setbe requires an 8-bit register but "=r" does not
      constrain the target register to be one that has an 8-bit version on
      i386.
      
      According to
      
      	http://gcc.gnu.org/bugzilla/show_bug.cgi?id=10153
      
      the correct constraint is "=q".
      Signed-off-by: NHerbert Xu <herbert@gondor.apana.org.au>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      e0015489
  9. 12 1月, 2007 1 次提交
    • I
      [PATCH] KVM: add VM-exit profiling · 07031e14
      Ingo Molnar 提交于
      This adds the profile=kvm boot option, which enables KVM to profile VM
      exits.
      
      Use: "readprofile -m ./System.map | sort -n" to see the resulting
      output:
      
         [...]
         18246 serial_out                               148.3415
         18945 native_flush_tlb                         378.9000
         23618 serial_in                                212.7748
         29279 __spin_unlock_irq                        622.9574
         43447 native_apic_write                        2068.9048
         52702 enable_8259A_irq                         742.2817
         54250 vgacon_scroll                             89.3740
         67394 ide_inb                                  6126.7273
         79514 copy_page_range                           98.1654
         84868 do_wp_page                                86.6000
        140266 pit_read                                 783.6089
        151436 ide_outb                                 25239.3333
        152668 native_io_delay                          21809.7143
        174783 mask_and_ack_8259A                       783.7803
        362404 native_set_pte_at                        36240.4000
       1688747 total                                      0.5009
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      Acked-by: NAvi Kivity <avi@qumranet.com>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      07031e14
  10. 06 1月, 2007 8 次提交