[PATCH v2] s390x: kvm: Fix number of cpu reports for stsi 3.2.2

Janosch Frank posted 1 patch 4 years ago
Failed in applying to current master (apply log)
target/s390x/kvm.c | 17 ++++++++++++++++-
1 file changed, 16 insertions(+), 1 deletion(-)
[PATCH v2] s390x: kvm: Fix number of cpu reports for stsi 3.2.2
Posted by Janosch Frank 4 years ago
The cpu number reporting is handled by KVM and QEMU only fills in the
VM name, uuid and other values.

Unfortunately KVM doesn't report reserved cpus and doesn't even know
they exist until the are created via the ioctl.

So let's fix up the cpu values after KVM has written its values to the
3.2.2 sysib. To be consistent We use the same code to retrieve the cpu
numbers as the STSI TCG code in target/s390x/misc_helper.c:HELPER(stsi).

Signed-off-by: Janosch Frank <frankja@linux.ibm.com>
Reviewed-by: David Hildenbrand <david@redhat.com>
---

* Fixed commit message and add rev-by
* Calculating total_cpus from configured + reserved

---
 target/s390x/kvm.c | 17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)

diff --git a/target/s390x/kvm.c b/target/s390x/kvm.c
index 3630c15f45a48864..69881a0da0b31f72 100644
--- a/target/s390x/kvm.c
+++ b/target/s390x/kvm.c
@@ -1819,8 +1819,10 @@ static int handle_tsch(S390CPU *cpu)
 
 static void insert_stsi_3_2_2(S390CPU *cpu, __u64 addr, uint8_t ar)
 {
+    const MachineState *ms = MACHINE(qdev_get_machine());
+    uint16_t conf_cpus = 0, reserved_cpus = 0;
     SysIB_322 sysib;
-    int del;
+    int del, i;
 
     if (s390_is_pv()) {
         s390_cpu_pv_mem_read(cpu, 0, &sysib, sizeof(sysib));
@@ -1842,6 +1844,19 @@ static void insert_stsi_3_2_2(S390CPU *cpu, __u64 addr, uint8_t ar)
         memset(sysib.ext_names[del], 0,
                sizeof(sysib.ext_names[0]) * (sysib.count - del));
     }
+
+    /* count the cpus and split them into configured and reserved ones */
+    for (i = 0; i < ms->possible_cpus->len; i++) {
+        if (ms->possible_cpus->cpus[i].cpu) {
+            conf_cpus++;
+        } else {
+            reserved_cpus++;
+        }
+    }
+    sysib.vm[0].total_cpus = conf_cpus + reserved_cpus;
+    sysib.vm[0].conf_cpus = conf_cpus;
+    sysib.vm[0].reserved_cpus = reserved_cpus;
+
     /* Insert short machine name in EBCDIC, padded with blanks */
     if (qemu_name) {
         memset(sysib.vm[0].name, 0x40, sizeof(sysib.vm[0].name));
-- 
2.25.1


Re: [PATCH v2] s390x: kvm: Fix number of cpu reports for stsi 3.2.2
Posted by Cornelia Huck 4 years ago
On Tue, 31 Mar 2020 07:01:23 -0400
Janosch Frank <frankja@linux.ibm.com> wrote:

> The cpu number reporting is handled by KVM and QEMU only fills in the
> VM name, uuid and other values.
> 
> Unfortunately KVM doesn't report reserved cpus and doesn't even know
> they exist until the are created via the ioctl.
> 
> So let's fix up the cpu values after KVM has written its values to the
> 3.2.2 sysib. To be consistent We use the same code to retrieve the cpu

"...consistent, we..." (fixed up while applying)

> numbers as the STSI TCG code in target/s390x/misc_helper.c:HELPER(stsi).
> 
> Signed-off-by: Janosch Frank <frankja@linux.ibm.com>
> Reviewed-by: David Hildenbrand <david@redhat.com>
> ---
> 
> * Fixed commit message and add rev-by
> * Calculating total_cpus from configured + reserved
> 
> ---
>  target/s390x/kvm.c | 17 ++++++++++++++++-
>  1 file changed, 16 insertions(+), 1 deletion(-)
> 
> diff --git a/target/s390x/kvm.c b/target/s390x/kvm.c
> index 3630c15f45a48864..69881a0da0b31f72 100644
> --- a/target/s390x/kvm.c
> +++ b/target/s390x/kvm.c
> @@ -1819,8 +1819,10 @@ static int handle_tsch(S390CPU *cpu)
>  
>  static void insert_stsi_3_2_2(S390CPU *cpu, __u64 addr, uint8_t ar)
>  {
> +    const MachineState *ms = MACHINE(qdev_get_machine());
> +    uint16_t conf_cpus = 0, reserved_cpus = 0;
>      SysIB_322 sysib;
> -    int del;
> +    int del, i;
>  
>      if (s390_is_pv()) {
>          s390_cpu_pv_mem_read(cpu, 0, &sysib, sizeof(sysib));

This is against s390-next; rebased and applied to s390-fixes (please
double check).

[I'm holding off rebasing s390-next on top of s390-fixes resp. master;
I'll rather do that once after all pieces including the headers update
are in place.]