All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [RFC v2 00/18] Fix APIC-ID-based CPU topology
@ 2012-10-03 13:28 Eduardo Habkost
  2012-10-03 13:28 ` [Qemu-devel] [RFC 01/18] pc: create "PC" device class Eduardo Habkost
                   ` (17 more replies)
  0 siblings, 18 replies; 44+ messages in thread
From: Eduardo Habkost @ 2012-10-03 13:28 UTC (permalink / raw)
  To: qemu-devel
  Cc: Igor Mammedov, Andreas Färber, Gleb Natapov, Paolo Bonzini

Bug description:

The CPU APIC IDs generated by QEMU are broken if the number of cores-per-socket
or threads-per-core are not powers of 2, as the bits on the APIC ID do not
correspond to what's expected to reflect the CPU sockets/cores/threads
topology[1].

[1] http://software.intel.com/en-us/articles/intel-64-architecture-processor-topolog
y-enumeration/

Changes v1 -> v2:

 * Created a qemu-stdio.h file for some I/O related definitions
 * Now all the topology-based APIC ID calculation logic is inside pc.c
 * I have now created a "PC" object just to carry the machine-type compatibility
   flag that keeps the previous behavior.
   * Dropped the qemu_global_get() function, as it is not needed anymore
 * Fixed compile errors on non-x86 targets with KVM enabled (ppc, s390x)
 * Add more descriptive comments on THE FW_CFG_MAX_CPUS calculation
 * Add pointers to documentation on topology.h

This series is based on the cpu-queue branch, from:
 https://github.com/ehabkost/qemu/commits/cpu-queue
 (more exactly, it was based on commit 8ffa1dbb0f4efa3d465d66bcdfbf545c350fe3ae)
This series is available on git, at:
 https://github.com/ehabkost/qemu-hacks/commits/work/apicid-rfc-v2-2012-10-03

Eduardo Habkost (18):
  pc: create "PC" device class
  pc: create PC object on pc_init1()
  pc: add PC object argument to some init functions
  move I/O-related definitions from qemu-common.h to a new header
    (qemu-stdio.h)
  cpus.h: include cpu-stdio.h
  hw/apic.c: rename bit functions to not conflict with bitops.h (v2)
  kvm: create kvm_arch_vcpu_id() function
  target-i386: kvm: set vcpu_id to APIC ID instead of CPU index (v2)
  target-i386: cpu: move cpuid_apic_id initialization to
    cpu_x86_register()
  target-i386: cpu: add apic_id argument to cpu_x86_register()
  target-i386: cpu_x86_init: allow APIC ID to be set by caller
  fw_cfg: remove FW_CFG_MAX_CPUS from fw_cfg_init()
  pc: set explicit APIC ID for CPUs
  pc: create apic_id_for_cpu() function (v3)
  pc: set fw_cfg data based on APIC ID calculation (v2)
  tests: support target-specific unit tests
  target-i386: topology & APIC ID utility functions (v2)
  pc: generate APIC IDs according to CPU topology (v3)

 cpus.h                 |   2 +
 hw/apic.c              |  35 ++++++-------
 hw/fw_cfg.c            |   1 -
 hw/pc.c                | 125 ++++++++++++++++++++++++++++++++++++++++------
 hw/pc.h                |  11 +++-
 hw/pc_piix.c           |  11 +++-
 hw/ppc_newworld.c      |   1 +
 hw/ppc_oldworld.c      |   1 +
 hw/sun4m.c             |   3 ++
 hw/sun4u.c             |   1 +
 kvm-all.c              |   2 +-
 kvm.h                  |   3 ++
 qemu-common.h          |  57 +--------------------
 qemu-stdio.h           |  73 +++++++++++++++++++++++++++
 target-i386/cpu.c      |   6 +--
 target-i386/cpu.h      |   6 +--
 target-i386/helper.c   |  15 +++++-
 target-i386/kvm.c      |   5 ++
 target-i386/topology.h | 133 +++++++++++++++++++++++++++++++++++++++++++++++++
 target-ppc/kvm.c       |   5 ++
 target-s390x/kvm.c     |   5 ++
 tests/.gitignore       |   1 +
 tests/Makefile         |  19 +++++--
 tests/test-x86-cpuid.c | 102 +++++++++++++++++++++++++++++++++++++
 24 files changed, 519 insertions(+), 104 deletions(-)
 create mode 100644 qemu-stdio.h
 create mode 100644 target-i386/topology.h
 create mode 100644 tests/test-x86-cpuid.c

-- 
1.7.11.4

^ permalink raw reply	[flat|nested] 44+ messages in thread

end of thread, other threads:[~2012-10-04 19:10 UTC | newest]

Thread overview: 44+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-10-03 13:28 [Qemu-devel] [RFC v2 00/18] Fix APIC-ID-based CPU topology Eduardo Habkost
2012-10-03 13:28 ` [Qemu-devel] [RFC 01/18] pc: create "PC" device class Eduardo Habkost
2012-10-03 14:38   ` Paolo Bonzini
2012-10-03 14:48     ` Eduardo Habkost
2012-10-03 14:50       ` Paolo Bonzini
2012-10-04 13:46   ` Anthony Liguori
2012-10-04 13:50     ` Paolo Bonzini
2012-10-04 14:28       ` Anthony Liguori
2012-10-04 14:43         ` Eduardo Habkost
2012-10-04 15:10           ` Anthony Liguori
2012-10-04 16:03             ` Eduardo Habkost
2012-10-04 17:42               ` Anthony Liguori
2012-10-04 17:51                 ` Eduardo Habkost
2012-10-04 16:00       ` Andreas Färber
2012-10-04 13:57     ` Eduardo Habkost
2012-10-04 14:29       ` Anthony Liguori
2012-10-04 15:57         ` Eduardo Habkost
2012-10-04 17:43           ` Anthony Liguori
2012-10-03 13:28 ` [Qemu-devel] [RFC 02/18] pc: create PC object on pc_init1() Eduardo Habkost
2012-10-03 14:40   ` Paolo Bonzini
2012-10-03 14:53     ` Eduardo Habkost
2012-10-03 14:54       ` Paolo Bonzini
2012-10-03 13:28 ` [Qemu-devel] [RFC 03/18] pc: add PC object argument to some init functions Eduardo Habkost
2012-10-04 11:56   ` Igor Mammedov
2012-10-03 13:29 ` [Qemu-devel] [RFC 04/18] move I/O-related definitions from qemu-common.h to a new header (qemu-stdio.h) Eduardo Habkost
2012-10-03 13:29 ` [Qemu-devel] [RFC 05/18] cpus.h: include qemu-stdio.h Eduardo Habkost
2012-10-04 12:00   ` Igor Mammedov
2012-10-04 13:14     ` Eduardo Habkost
2012-10-04 14:05       ` Igor Mammedov
2012-10-03 13:29 ` [Qemu-devel] [RFC 06/18] hw/apic.c: rename bit functions to not conflict with bitops.h (v2) Eduardo Habkost
2012-10-03 13:29 ` [Qemu-devel] [RFC 07/18] kvm: create kvm_arch_vcpu_id() function Eduardo Habkost
2012-10-03 13:29 ` [Qemu-devel] [RFC 08/18] target-i386: kvm: set vcpu_id to APIC ID instead of CPU index (v2) Eduardo Habkost
2012-10-03 13:29 ` [Qemu-devel] [RFC 09/18] target-i386: cpu: move cpuid_apic_id initialization to cpu_x86_register() Eduardo Habkost
2012-10-03 13:29 ` [Qemu-devel] [RFC 10/18] target-i386: cpu: add apic_id argument " Eduardo Habkost
2012-10-03 13:29 ` [Qemu-devel] [RFC 11/18] target-i386: cpu_x86_init: allow APIC ID to be set by caller Eduardo Habkost
2012-10-04 12:47   ` Igor Mammedov
2012-10-03 13:29 ` [Qemu-devel] [RFC 12/18] fw_cfg: remove FW_CFG_MAX_CPUS from fw_cfg_init() Eduardo Habkost
2012-10-03 13:29 ` [Qemu-devel] [RFC 13/18] pc: set explicit APIC ID for CPUs Eduardo Habkost
2012-10-03 13:29 ` [Qemu-devel] [RFC 14/18] pc: create apic_id_for_cpu() function (v3) Eduardo Habkost
2012-10-03 13:29 ` [Qemu-devel] [RFC 15/18] pc: set fw_cfg data based on APIC ID calculation (v2) Eduardo Habkost
2012-10-03 13:29 ` [Qemu-devel] [RFC 16/18] tests: support target-specific unit tests Eduardo Habkost
2012-10-03 13:29 ` [Qemu-devel] [RFC 17/18] target-i386: topology & APIC ID utility functions (v2) Eduardo Habkost
2012-10-03 20:11   ` Blue Swirl
2012-10-03 13:29 ` [Qemu-devel] [RFC 18/18] pc: generate APIC IDs according to CPU topology (v3) Eduardo Habkost

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.