All of lore.kernel.org
 help / color / mirror / Atom feed
From: Igor Mammedov <imammedo@redhat.com>
To: qemu-devel@nongnu.org
Cc: Eduardo Habkost <ehabkost@redhat.com>,
	Peter Maydell <peter.maydell@linaro.org>,
	Andrew Jones <drjones@redhat.com>,
	David Gibson <david@gibson.dropbear.id.au>,
	Eric Blake <eblake@redhat.com>,
	Paolo Bonzini <pbonzini@redhat.com>,
	Shannon Zhao <zhaoshenglong@huawei.com>,
	qemu-arm@nongnu.org, qemu-ppc@nongnu.org
Subject: [Qemu-devel] [PATCH v2 02/24] hw/arm/virt: extract mp-affinity calculation in separate function
Date: Wed,  3 May 2017 14:56:56 +0200	[thread overview]
Message-ID: <1493816238-33120-3-git-send-email-imammedo@redhat.com> (raw)
In-Reply-To: <1493816238-33120-1-git-send-email-imammedo@redhat.com>

Signed-off-by: Igor Mammedov <imammedo@redhat.com>
---
v2:
 (Drew)
   - s/virt_idx2mp_affinity/virt_cpu_mp_affinity/
   - add arm_cpu_mp_affinity() to reduce code duplication
---
 target/arm/cpu.h |  2 ++
 hw/arm/virt.c    | 43 ++++++++++++++++++++++++++-----------------
 target/arm/cpu.c | 12 +++++++++---
 3 files changed, 37 insertions(+), 20 deletions(-)

diff --git a/target/arm/cpu.h b/target/arm/cpu.h
index 1055bfe..048faed 100644
--- a/target/arm/cpu.h
+++ b/target/arm/cpu.h
@@ -710,6 +710,8 @@ static inline ARMCPU *arm_env_get_cpu(CPUARMState *env)
     return container_of(env, ARMCPU, env);
 }
 
+uint64_t arm_cpu_mp_affinity(int idx, uint8_t clustersz);
+
 #define ENV_GET_CPU(e) CPU(arm_env_get_cpu(e))
 
 #define ENV_OFFSET offsetof(ARMCPU, env)
diff --git a/hw/arm/virt.c b/hw/arm/virt.c
index 5f62a03..61ae437 100644
--- a/hw/arm/virt.c
+++ b/hw/arm/virt.c
@@ -1194,6 +1194,29 @@ void virt_machine_done(Notifier *notifier, void *data)
     virt_build_smbios(vms);
 }
 
+static uint64_t virt_cpu_mp_affinity(VirtMachineState *vms, int idx)
+{
+    uint8_t clustersz = ARM_DEFAULT_CPUS_PER_CLUSTER;
+    VirtMachineClass *vmc = VIRT_MACHINE_GET_CLASS(vms);
+
+    if (!vmc->disallow_affinity_adjustment) {
+        /* Adjust MPIDR like 64-bit KVM hosts, which incorporate the
+         * GIC's target-list limitations. 32-bit KVM hosts currently
+         * always create clusters of 4 CPUs, but that is expected to
+         * change when they gain support for gicv3. When KVM is enabled
+         * it will override the changes we make here, therefore our
+         * purposes are to make TCG consistent (with 64-bit KVM hosts)
+         * and to improve SGI efficiency.
+         */
+        if (vms->gic_version == 3) {
+            clustersz = GICV3_TARGETLIST_BITS;
+        } else {
+            clustersz = GIC_TARGETLIST_BITS;
+        }
+    }
+    return arm_cpu_mp_affinity(idx, clustersz);
+}
+
 static void machvirt_init(MachineState *machine)
 {
     VirtMachineState *vms = VIRT_MACHINE(machine);
@@ -1210,7 +1233,6 @@ static void machvirt_init(MachineState *machine)
     CPUClass *cc;
     Error *err = NULL;
     bool firmware_loaded = bios_name || drive_get(IF_PFLASH, 0, 0);
-    uint8_t clustersz;
 
     if (!cpu_model) {
         cpu_model = "cortex-a15";
@@ -1263,10 +1285,8 @@ static void machvirt_init(MachineState *machine)
      */
     if (vms->gic_version == 3) {
         virt_max_cpus = vms->memmap[VIRT_GIC_REDIST].size / 0x20000;
-        clustersz = GICV3_TARGETLIST_BITS;
     } else {
         virt_max_cpus = GIC_NCPU;
-        clustersz = GIC_TARGETLIST_BITS;
     }
 
     if (max_cpus > virt_max_cpus) {
@@ -1326,20 +1346,9 @@ static void machvirt_init(MachineState *machine)
 
     for (n = 0; n < smp_cpus; n++) {
         Object *cpuobj = object_new(typename);
-        if (!vmc->disallow_affinity_adjustment) {
-            /* Adjust MPIDR like 64-bit KVM hosts, which incorporate the
-             * GIC's target-list limitations. 32-bit KVM hosts currently
-             * always create clusters of 4 CPUs, but that is expected to
-             * change when they gain support for gicv3. When KVM is enabled
-             * it will override the changes we make here, therefore our
-             * purposes are to make TCG consistent (with 64-bit KVM hosts)
-             * and to improve SGI efficiency.
-             */
-            uint8_t aff1 = n / clustersz;
-            uint8_t aff0 = n % clustersz;
-            object_property_set_int(cpuobj, (aff1 << ARM_AFF1_SHIFT) | aff0,
-                                    "mp-affinity", NULL);
-        }
+
+        object_property_set_int(cpuobj, virt_cpu_mp_affinity(vms, n),
+                                "mp-affinity", NULL);
 
         if (!vms->secure) {
             object_property_set_bool(cpuobj, false, "has_el3", NULL);
diff --git a/target/arm/cpu.c b/target/arm/cpu.c
index b357aee..ee1406d 100644
--- a/target/arm/cpu.c
+++ b/target/arm/cpu.c
@@ -458,6 +458,13 @@ static void arm_disas_set_info(CPUState *cpu, disassemble_info *info)
     }
 }
 
+uint64_t arm_cpu_mp_affinity(int idx, uint8_t clustersz)
+{
+    uint32_t Aff1 = idx / clustersz;
+    uint32_t Aff0 = idx % clustersz;
+    return (Aff1 << ARM_AFF1_SHIFT) | Aff0;
+}
+
 static void arm_cpu_initfn(Object *obj)
 {
     CPUState *cs = CPU(obj);
@@ -709,9 +716,8 @@ static void arm_cpu_realizefn(DeviceState *dev, Error **errp)
      * so these bits always RAZ.
      */
     if (cpu->mp_affinity == ARM64_AFFINITY_INVALID) {
-        uint32_t Aff1 = cs->cpu_index / ARM_DEFAULT_CPUS_PER_CLUSTER;
-        uint32_t Aff0 = cs->cpu_index % ARM_DEFAULT_CPUS_PER_CLUSTER;
-        cpu->mp_affinity = (Aff1 << ARM_AFF1_SHIFT) | Aff0;
+        cpu->mp_affinity = arm_cpu_mp_affinity(cs->cpu_index,
+                                               ARM_DEFAULT_CPUS_PER_CLUSTER);
     }
 
     if (cpu->reset_hivecs) {
-- 
2.7.4

  parent reply	other threads:[~2017-05-03 12:57 UTC|newest]

Thread overview: 94+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-05-03 12:56 [Qemu-devel] [PATCH v2 00/24] numa: add '-numa cpu' option Igor Mammedov
2017-05-03 12:56 ` [Qemu-devel] [PATCH v2 01/24] tests: add CPUs to numa node mapping test Igor Mammedov
2017-05-03 14:32   ` Eduardo Habkost
2017-05-04 13:17   ` Eduardo Habkost
2017-05-03 12:56 ` Igor Mammedov [this message]
2017-05-04  9:20   ` [Qemu-devel] [PATCH v2 02/24] hw/arm/virt: extract mp-affinity calculation in separate function Andrew Jones
2017-05-04 13:21   ` Eduardo Habkost
2017-05-03 12:56 ` [Qemu-devel] [PATCH v2 03/24] hw/arm/virt: use machine->possible_cpus for storing possible topology info Igor Mammedov
2017-05-04  9:38   ` Andrew Jones
2017-05-04 12:55     ` Igor Mammedov
2017-05-04 13:16       ` Andrew Jones
2017-05-04 14:33         ` Igor Mammedov
2017-05-03 12:56 ` [Qemu-devel] [PATCH v2 04/24] hw/arm/virt: explicitly allocate cpu_index for cpus Igor Mammedov
2017-05-03 12:56 ` [Qemu-devel] [PATCH v2 05/24] numa: move source of default CPUs to NUMA node mapping into boards Igor Mammedov
2017-05-03 14:42   ` Eduardo Habkost
2017-05-03 15:57     ` Igor Mammedov
2017-05-04  7:32     ` David Gibson
2017-05-05  8:01       ` Igor Mammedov
2017-05-03 14:59   ` Eduardo Habkost
2017-05-03 16:14     ` Igor Mammedov
2017-05-03 15:13   ` Eduardo Habkost
2017-05-04  9:19     ` Igor Mammedov
2017-05-03 12:57 ` [Qemu-devel] [PATCH v2 06/24] spapr: add node-id property to sPAPR core Igor Mammedov
2017-05-03 14:46   ` Eduardo Habkost
2017-05-03 16:12     ` Igor Mammedov
2017-05-04 16:49       ` David Gibson
2017-05-05  8:04         ` Igor Mammedov
2017-05-03 12:57 ` [Qemu-devel] [PATCH v2 07/24] pc: add node-id property to CPU Igor Mammedov
2017-05-05 20:29   ` Eduardo Habkost
2017-05-09 13:14     ` Igor Mammedov
2017-05-03 12:57 ` [Qemu-devel] [PATCH v2 08/24] virt-arm: " Igor Mammedov
2017-05-04  9:57   ` Andrew Jones
2017-05-03 12:57 ` [Qemu-devel] [PATCH v2 09/24] numa: add check that board supports cpu_index to node mapping Igor Mammedov
2017-05-03 15:04   ` Eduardo Habkost
2017-05-03 16:19     ` Igor Mammedov
2017-05-03 17:31       ` Eduardo Habkost
2017-05-04  9:07         ` Igor Mammedov
2017-05-04 10:01   ` Andrew Jones
2017-05-04 16:51   ` David Gibson
2017-05-03 12:57 ` [Qemu-devel] [PATCH v2 10/24] numa: mirror cpu to node mapping in MachineState::possible_cpus Igor Mammedov
2017-05-03 15:20   ` Eduardo Habkost
2017-05-04  8:44     ` Igor Mammedov
2017-05-05 12:16     ` Igor Mammedov
2017-05-05 17:04       ` Eduardo Habkost
2017-05-05 20:00         ` Igor Mammedov
2017-05-04 11:40   ` Andrew Jones
2017-05-04 12:57     ` Igor Mammedov
2017-05-05 11:28     ` Igor Mammedov
2017-05-05 11:47       ` Andrew Jones
2017-05-03 12:57 ` [Qemu-devel] [PATCH v2 11/24] numa: do default mapping based on possible_cpus instead of node_cpu bitmaps Igor Mammedov
2017-05-04 11:45   ` Andrew Jones
2017-05-03 12:57 ` [Qemu-devel] [PATCH v2 12/24] numa: add numa_[has_]node_id() wrappers Igor Mammedov
2017-05-04 12:30   ` Andrew Jones
2017-05-05  1:45   ` David Gibson
2017-05-05  8:09     ` Igor Mammedov
2017-05-05  9:06       ` Andrew Jones
2017-05-05 17:12         ` Eduardo Habkost
2017-05-05 20:04           ` Igor Mammedov
2017-05-03 12:57 ` [Qemu-devel] [PATCH v2 13/24] pc: get numa node mapping from possible_cpus instead of numa_get_node_for_cpu() Igor Mammedov
2017-05-04 12:30   ` Andrew Jones
2017-05-03 12:57 ` [Qemu-devel] [PATCH v2 14/24] spapr: " Igor Mammedov
2017-05-05  3:15   ` David Gibson
2017-05-03 12:57 ` [Qemu-devel] [PATCH v2 15/24] virt-arm: " Igor Mammedov
2017-05-04 12:33   ` Andrew Jones
2017-05-03 12:57 ` [Qemu-devel] [PATCH v2 16/24] QMP: include CpuInstanceProperties into query_cpus output output Igor Mammedov
2017-05-03 12:57 ` [Qemu-devel] [PATCH v2 17/24] tests: numa: add case for QMP command query-cpus Igor Mammedov
2017-05-05  3:22   ` David Gibson
2017-05-03 12:57 ` [Qemu-devel] [PATCH v2 18/24] numa: remove no longer used numa_get_node_for_cpu() Igor Mammedov
2017-05-04 12:34   ` Andrew Jones
2017-05-03 12:57 ` [Qemu-devel] [PATCH v2 19/24] numa: remove no longer need numa_post_machine_init() Igor Mammedov
2017-05-04 12:35   ` Andrew Jones
2017-05-03 12:57 ` [Qemu-devel] [PATCH v2 20/24] machine: call machine init from wrapper Igor Mammedov
2017-05-04 12:43   ` Andrew Jones
2017-05-05  3:23   ` David Gibson
2017-05-08 14:31   ` Eduardo Habkost
2017-05-03 12:57 ` [Qemu-devel] [PATCH v2 21/24] numa: use possible_cpus for not mapped CPUs check Igor Mammedov
2017-05-04 12:43   ` Andrew Jones
2017-05-04 13:06     ` Igor Mammedov
2017-05-03 12:57 ` [Qemu-devel] [PATCH v2 22/24] numa: remove node_cpu bitmaps as they are no longer used Igor Mammedov
2017-05-04 12:45   ` Andrew Jones
2017-05-03 12:57 ` [Qemu-devel] [PATCH v2 23/24] numa: add '-numa cpu, ...' option for property based node mapping Igor Mammedov
2017-05-03 16:35   ` Eduardo Habkost
2017-05-03 16:39     ` Eric Blake
2017-05-03 17:38       ` Eduardo Habkost
2017-05-03 17:58         ` Eduardo Habkost
2017-05-04  9:52           ` Igor Mammedov
2017-05-08  5:40   ` David Gibson
2017-05-08 14:47     ` Eduardo Habkost
2017-05-09 15:58     ` Igor Mammedov
2017-05-10  1:15       ` David Gibson
2017-05-03 12:57 ` [Qemu-devel] [PATCH v2 24/24] tests: check -numa node, cpu=props_list usecase Igor Mammedov
2017-05-08  6:35   ` David Gibson
2017-05-04 13:41 ` [Qemu-devel] [PATCH v2 00/24] numa: add '-numa cpu' option Eduardo Habkost
2017-05-04 14:34   ` Igor Mammedov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1493816238-33120-3-git-send-email-imammedo@redhat.com \
    --to=imammedo@redhat.com \
    --cc=david@gibson.dropbear.id.au \
    --cc=drjones@redhat.com \
    --cc=eblake@redhat.com \
    --cc=ehabkost@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-arm@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-ppc@nongnu.org \
    --cc=zhaoshenglong@huawei.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.