xemu/target-i386
Eduardo Habkost bc74b7db86 i386: kvm: filter CPUID feature words earlier, on cpu.c
cpu.c contains the code that will check if all requested CPU features
are available, so the filtering of KVM features must be there, so we can
implement "check" and "enforce" properly.

The only point where kvm_arch_init_vcpu() is called on i386 is:

- cpu_x86_init()
  - x86_cpu_realize() (after cpu_x86_register() is called)
    - qemu_init_vcpu()
      - qemu_kvm_start_vcpu()
        - qemu_kvm_thread_fn() (on a new thread)
          - kvm_init_vcpu()
            - kvm_arch_init_vcpu()

With this patch, the filtering will be done earlier, at:
- cpu_x86_init()
  - cpu_x86_register() (before x86_cpu_realize() is called)

Also, the KVM CPUID filtering will now be done at the same place where
the TCG CPUID feature filtering is done. Later, the code can be changed
to use the same filtering code for the "check" and "enforce" modes, as
now the cpu.c code knows exactly which CPU features are going to be
exposed to the guest (and much earlier).

One thing I was worrying about when doing this is that
kvm_arch_get_supported_cpuid() depends on kvm_irqchip_in_kernel(), and
maybe the 'kvm_kernel_irqchip' global variable wasn't initialized yet at
CPU creation time. But kvm_kernel_irqchip is initialized during
kvm_init(), that is called very early (much earlier than the machine
init function), and kvm_init() is already a requirement to run the
GET_SUPPORTED_CPUID ioctl() (as kvm_init() initializes the kvm_state
global variable).

Side note: it would be nice to keep KVM-specific code inside kvm.c. The
problem is that properly implementing -cpu check/enforce code (that's
inside cpu.c) depends directly on the feature bit filtering done using
kvm_arch_get_supported_cpuid(). Currently -cpu check/enforce is broken
because it simply uses the host CPU feature bits instead of
GET_SUPPORTED_CPUID, and we need to fix that.

Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
2012-10-30 23:39:49 -02:00
..
arch_dump.c Fix some more license versions (GPL2+ instead of GPL2) 2012-06-11 22:20:21 +02:00
arch_memory_mapping.c Rename target_phys_addr_t to hwaddr 2012-10-23 08:58:25 -05:00
cc_helper_template.h x86: avoid AREG0 for condition code helpers 2012-08-14 19:01:25 +00:00
cc_helper.c x86: Implement SMEP and SMAP 2012-10-01 08:04:22 -05:00
cpu-qom.h target-i386: Defer MCE init 2012-05-12 14:17:52 +02:00
cpu.c i386: kvm: filter CPUID feature words earlier, on cpu.c 2012-10-30 23:39:49 -02:00
cpu.h qemu: enable PV EOI for qemu 1.3 2012-10-29 17:59:06 +02:00
excp_helper.c x86: avoid an extern declaration 2012-06-28 20:28:08 +00:00
fpu_helper.c x86: switch to AREG0 free mode 2012-08-14 19:01:26 +00:00
helper.c Rename target_phys_addr_t to hwaddr 2012-10-23 08:58:25 -05:00
helper.h target-i386: rename helper flags 2012-10-28 14:54:23 +01:00
hyperv.c hyper-v: introduce Hyper-V support infrastructure. 2012-01-19 08:32:12 -02:00
hyperv.h hyperv: fix build on non-KVM hosts 2012-01-23 20:04:51 +00:00
int_helper.c x86: avoid AREG0 for integer helpers 2012-08-14 19:01:25 +00:00
ioport-user.c build: move obj-TARGET-y variables to nested Makefile.objs 2012-06-07 07:17:36 +02:00
kvm_i386.h kvm: i386: Add services required for PCI device assignment 2012-09-10 15:29:59 +03:00
kvm-stub.c kvm: Move kvm_allows_irq0_override() to target-i386, fix return type 2012-08-09 16:16:55 +03:00
kvm.c i386: kvm: filter CPUID feature words earlier, on cpu.c 2012-10-30 23:39:49 -02:00
machine.c kvm: get/set PV EOI MSR 2012-08-29 10:51:28 -05:00
Makefile.objs x86: switch to AREG0 free mode 2012-08-14 19:01:26 +00:00
mem_helper.c x86: switch to AREG0 free mode 2012-08-14 19:01:26 +00:00
misc_helper.c x86: switch to AREG0 free mode 2012-08-14 19:01:26 +00:00
ops_sse_header.h x86: avoid AREG0 for FPU helpers 2012-08-14 19:01:25 +00:00
ops_sse.h x86: avoid AREG0 for FPU helpers 2012-08-14 19:01:25 +00:00
seg_helper.c cpu_dump_state: move DUMP_FPU and DUMP_CCOP flags from x86-only to generic 2012-10-05 15:04:43 +01:00
shift_helper_template.h x86: avoid AREG0 for integer helpers 2012-08-14 19:01:25 +00:00
smm_helper.c cpu_dump_state: move DUMP_FPU and DUMP_CCOP flags from x86-only to generic 2012-10-05 15:04:43 +01:00
svm_helper.c Rename target_phys_addr_t to hwaddr 2012-10-23 08:58:25 -05:00
svm.h Use new macro QEMU_PACKED for packed structures 2011-09-03 10:45:59 +00:00
TODO target-i386: fix {min,max}{pd,ps,sd,ss} SSE2 instructions 2012-01-11 09:55:28 +01:00
translate.c Fix popcnt in long mode 2012-10-14 14:55:09 +04:00