KVM: x86 shared msr infrastructure
authorAvi Kivity <avi@redhat.com>
Mon, 7 Sep 2009 08:12:18 +0000 (11:12 +0300)
committerAvi Kivity <avi@redhat.com>
Thu, 3 Dec 2009 07:32:21 +0000 (09:32 +0200)
commit18863bdd60f895f3b3ba16b15e8331aee781e8ec
tree2d0e456a8d2dc12def13f2fed386ca9e5a440823
parent44ea2b1758d88ad822e65b1c4c21ca6164494e27
KVM: x86 shared msr infrastructure

The various syscall-related MSRs are fairly expensive to switch.  Currently
we switch them on every vcpu preemption, which is far too often:

- if we're switching to a kernel thread (idle task, threaded interrupt,
  kernel-mode virtio server (vhost-net), for example) and back, then
  there's no need to switch those MSRs since kernel threasd won't
  be exiting to userspace.

- if we're switching to another guest running an identical OS, most likely
  those MSRs will have the same value, so there's little point in reloading
  them.

- if we're running the same OS on the guest and host, the MSRs will have
  identical values and reloading is unnecessary.

This patch uses the new user return notifiers to implement last-minute
switching, and checks the msr values to avoid unnecessary reloading.

Signed-off-by: Avi Kivity <avi@redhat.com>
arch/x86/include/asm/kvm_host.h
arch/x86/kvm/Kconfig
arch/x86/kvm/x86.c