qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Thomas Huth <thuth@redhat.com>
To: qemu-devel@nongnu.org
Cc: Stefan Hajnoczi <stefanha@redhat.com>,
	qemu-s390x@nongnu.org,
	Nina Schoetterl-Glausch <nsg@linux.ibm.com>
Subject: [PULL 06/25] s390x/cpu topology: resetting the Topology-Change-Report
Date: Wed, 18 Oct 2023 15:06:57 +0200	[thread overview]
Message-ID: <20231018130716.286638-7-thuth@redhat.com> (raw)
In-Reply-To: <20231018130716.286638-1-thuth@redhat.com>

From: Pierre Morel <pmorel@linux.ibm.com>

During a subsystem reset the Topology-Change-Report is cleared
by the machine.
Let's ask KVM to clear the Modified Topology Change Report (MTCR)
bit of the SCA in the case of a subsystem reset.

Signed-off-by: Pierre Morel <pmorel@linux.ibm.com>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Reviewed-by: Nina Schoetterl-Glausch <nsg@linux.ibm.com>
Co-developed-by: Nina Schoetterl-Glausch <nsg@linux.ibm.com>
Signed-off-by: Nina Schoetterl-Glausch <nsg@linux.ibm.com>
Message-ID: <20231016183925.2384704-7-nsg@linux.ibm.com>
Signed-off-by: Thomas Huth <thuth@redhat.com>
---
 include/hw/s390x/cpu-topology.h |  1 +
 target/s390x/cpu.h              |  1 +
 target/s390x/kvm/kvm_s390x.h    |  1 +
 hw/s390x/cpu-topology.c         | 11 +++++++++++
 hw/s390x/s390-virtio-ccw.c      |  3 +++
 target/s390x/cpu-sysemu.c       | 13 +++++++++++++
 target/s390x/kvm/kvm.c          | 17 +++++++++++++++++
 7 files changed, 47 insertions(+)

diff --git a/include/hw/s390x/cpu-topology.h b/include/hw/s390x/cpu-topology.h
index f95d26d37c..e33e7c66df 100644
--- a/include/hw/s390x/cpu-topology.h
+++ b/include/hw/s390x/cpu-topology.h
@@ -56,6 +56,7 @@ static inline void s390_topology_setup_cpu(MachineState *ms,
 #endif
 
 extern S390Topology s390_topology;
+void s390_topology_reset(void);
 
 static inline int s390_std_socket(int n, CpuTopology *smp)
 {
diff --git a/target/s390x/cpu.h b/target/s390x/cpu.h
index 09bff39fe4..40c5cedd0e 100644
--- a/target/s390x/cpu.h
+++ b/target/s390x/cpu.h
@@ -654,6 +654,7 @@ typedef struct SysIBCPUListEntry {
 QEMU_BUILD_BUG_ON(sizeof(SysIBCPUListEntry) != 16);
 
 void insert_stsi_15_1_x(S390CPU *cpu, int sel2, uint64_t addr, uint8_t ar, uintptr_t ra);
+void s390_cpu_topology_set_changed(bool changed);
 
 /* MMU defines */
 #define ASCE_ORIGIN           (~0xfffULL) /* segment table origin             */
diff --git a/target/s390x/kvm/kvm_s390x.h b/target/s390x/kvm/kvm_s390x.h
index f9785564d0..649dae5948 100644
--- a/target/s390x/kvm/kvm_s390x.h
+++ b/target/s390x/kvm/kvm_s390x.h
@@ -47,5 +47,6 @@ void kvm_s390_crypto_reset(void);
 void kvm_s390_restart_interrupt(S390CPU *cpu);
 void kvm_s390_stop_interrupt(S390CPU *cpu);
 void kvm_s390_set_diag318(CPUState *cs, uint64_t diag318_info);
+int kvm_s390_topology_set_mtcr(uint64_t attr);
 
 #endif /* KVM_S390X_H */
diff --git a/hw/s390x/cpu-topology.c b/hw/s390x/cpu-topology.c
index 13168341b6..7ec9319272 100644
--- a/hw/s390x/cpu-topology.c
+++ b/hw/s390x/cpu-topology.c
@@ -90,6 +90,17 @@ static void s390_topology_init(MachineState *ms)
                                             smp->books * smp->drawers);
 }
 
+/**
+ * s390_topology_reset:
+ *
+ * Generic reset for CPU topology, calls s390_topology_reset()
+ * to reset the kernel Modified Topology Change Record.
+ */
+void s390_topology_reset(void)
+{
+    s390_cpu_topology_set_changed(false);
+}
+
 /**
  * s390_topology_cpu_default:
  * @cpu: pointer to a S390CPU
diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c
index 7fe2bce20c..6012165d41 100644
--- a/hw/s390x/s390-virtio-ccw.c
+++ b/hw/s390x/s390-virtio-ccw.c
@@ -124,6 +124,9 @@ static void subsystem_reset(void)
             device_cold_reset(dev);
         }
     }
+    if (s390_has_topology()) {
+        s390_topology_reset();
+    }
 }
 
 static int virtio_ccw_hcall_notify(const uint64_t *args)
diff --git a/target/s390x/cpu-sysemu.c b/target/s390x/cpu-sysemu.c
index 8112561e5e..1cd30c1d84 100644
--- a/target/s390x/cpu-sysemu.c
+++ b/target/s390x/cpu-sysemu.c
@@ -307,3 +307,16 @@ void s390_do_cpu_set_diag318(CPUState *cs, run_on_cpu_data arg)
         kvm_s390_set_diag318(cs, arg.host_ulong);
     }
 }
+
+void s390_cpu_topology_set_changed(bool changed)
+{
+    int ret;
+
+    if (kvm_enabled()) {
+        ret = kvm_s390_topology_set_mtcr(changed);
+        if (ret) {
+            error_report("Failed to set Modified Topology Change Report: %s",
+                         strerror(-ret));
+        }
+    }
+}
diff --git a/target/s390x/kvm/kvm.c b/target/s390x/kvm/kvm.c
index 53d6300809..d6bda3a2a8 100644
--- a/target/s390x/kvm/kvm.c
+++ b/target/s390x/kvm/kvm.c
@@ -2664,6 +2664,23 @@ int kvm_s390_get_zpci_op(void)
     return cap_zpci_op;
 }
 
+int kvm_s390_topology_set_mtcr(uint64_t attr)
+{
+    struct kvm_device_attr attribute = {
+        .group = KVM_S390_VM_CPU_TOPOLOGY,
+        .attr  = attr,
+    };
+
+    if (!s390_has_feat(S390_FEAT_CONFIGURATION_TOPOLOGY)) {
+        return 0;
+    }
+    if (!kvm_vm_check_attr(kvm_state, KVM_S390_VM_CPU_TOPOLOGY, attr)) {
+        return -ENOTSUP;
+    }
+
+    return kvm_vm_ioctl(kvm_state, KVM_SET_DEVICE_ATTR, &attribute);
+}
+
 void kvm_arch_accel_class_init(ObjectClass *oc)
 {
 }
-- 
2.41.0



  parent reply	other threads:[~2023-10-18 13:14 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-10-18 13:06 [PULL 00/25] s390x patches Thomas Huth
2023-10-18 13:06 ` [PULL 01/25] qapi: machine.json: change docs regarding CPU topology Thomas Huth
2023-10-18 13:06 ` [PULL 02/25] CPU topology: extend with s390 specifics Thomas Huth
2023-10-18 13:06 ` [PULL 03/25] s390x/cpu topology: add topology entries on CPU hotplug Thomas Huth
2023-10-19 17:57   ` Nina Schoetterl-Glausch
2023-10-18 13:06 ` [PULL 04/25] target/s390x/cpu topology: handle STSI(15) and build the SYSIB Thomas Huth
2023-10-18 13:06 ` [PULL 05/25] s390x/sclp: reporting the maximum nested topology entries Thomas Huth
2023-10-18 13:06 ` Thomas Huth [this message]
2023-10-19 16:35   ` [PULL 06/25] s390x/cpu topology: resetting the Topology-Change-Report Stefan Hajnoczi
2023-10-19 17:55     ` Nina Schoetterl-Glausch
2023-10-19 19:32       ` Thomas Huth
2023-10-20  9:26         ` Nina Schoetterl-Glausch
2023-10-18 13:06 ` [PULL 07/25] s390x/cpu topology: interception of PTF instruction Thomas Huth
2023-10-18 13:06 ` [PULL 08/25] target/s390x/cpu topology: activate CPU topology Thomas Huth
2023-10-18 13:07 ` [PULL 09/25] qapi/s390x/cpu topology: set-cpu-topology qmp command Thomas Huth
2023-10-18 13:07 ` [PULL 10/25] machine: adding s390 topology to query-cpu-fast Thomas Huth
2023-10-18 13:07 ` [PULL 11/25] machine: adding s390 topology to info hotpluggable-cpus Thomas Huth
2023-10-18 13:07 ` [PULL 12/25] qapi/s390x/cpu topology: CPU_POLARIZATION_CHANGE QAPI event Thomas Huth
2023-10-18 13:07 ` [PULL 13/25] qapi/s390x/cpu topology: add query-s390x-cpu-polarization command Thomas Huth
2023-10-18 13:07 ` [PULL 14/25] docs/s390x/cpu topology: document s390x cpu topology Thomas Huth
2023-10-18 13:07 ` [PULL 15/25] tests/avocado: s390x cpu topology core Thomas Huth
2023-10-18 13:07 ` [PULL 16/25] tests/avocado: s390x cpu topology polarization Thomas Huth
2023-10-18 13:07 ` [PULL 17/25] tests/avocado: s390x cpu topology entitlement tests Thomas Huth
2023-10-18 13:07 ` [PULL 18/25] tests/avocado: s390x cpu topology test dedicated CPU Thomas Huth
2023-10-18 13:07 ` [PULL 19/25] tests/avocado: s390x cpu topology test socket full Thomas Huth
2023-10-18 13:07 ` [PULL 20/25] tests/avocado: s390x cpu topology dedicated errors Thomas Huth
2023-10-18 13:07 ` [PULL 21/25] tests/avocado: s390x cpu topology bad move Thomas Huth
2023-10-18 13:07 ` [PULL 22/25] hw/s390x: Clean up global variable shadowing in quiesce_powerdown_req() Thomas Huth
2023-10-18 13:07 ` [PULL 23/25] target/s390x/kvm: Turn KVM_CAP_SYNC_REGS into a hard requirement Thomas Huth
2023-10-18 13:07 ` [PULL 24/25] target/s390x/kvm: Simplify the GPRs, ACRs, CRs and prefix synchronization code Thomas Huth
2023-10-18 13:07 ` [PULL 25/25] tests/qtest/migration-test: Disable the analyze-migration.py test on s390x Thomas Huth

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=20231018130716.286638-7-thuth@redhat.com \
    --to=thuth@redhat.com \
    --cc=nsg@linux.ibm.com \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-s390x@nongnu.org \
    --cc=stefanha@redhat.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).