Re: [PULL 15/18] s390x/tcg: Fix CPU address returned by STIDP

2023-06-07 Thread Ilya Leoshkevich
On Wed, 2023-06-07 at 12:05 +0300, Michael Tokarev wrote:
> 06.06.2023 08:56, Thomas Huth wrote:
> > From: Ilya Leoshkevich 
> > 
> > In qemu-user-s390x, /proc/cpuinfo contains:
> > 
> > processor 0: version = 00,  identification = 00, 
> > machine = 8561
> > processor 1: version = 00,  identification = 40, 
> > machine = 8561
> > 
> > The highest nibble is supposed to contain the CPU address, but it's
> > off
> > by 2 bits. Fix the shift value and provide a symbolic constant for
> > it.
> > 
> > With the fix we get:
> > 
> > processor 0: version = 00,  identification = 00, 
> > machine = 8561
> > processor 1: version = 00,  identification = 10, 
> > machine = 8561
> > 
> > Fixes: 076d4d39b65f ("s390x/cpumodel: wire up cpu type + id for
> > TCG")
> > Reviewed-by: David Hildenbrand 
> > Signed-off-by: Ilya Leoshkevich 
> > Message-Id: <20230605113950.1169228-2-...@linux.ibm.com>
> > Signed-off-by: Thomas Huth 
> > ---
> >   target/s390x/cpu_models.h | 10 +-
> >   target/s390x/cpu_models.c |  4 ++--
> >   2 files changed, 11 insertions(+), 3 deletions(-)
> 
> Is it a -stable material too?
> (applies cleanly to 7.2 and 8.0)
> 
> Thanks,
> 
> /mjt

Yes, from my perspective, it would be good to put this into stable.
I forgot to tag it, because the rest of the series was a new feature.
Thanks for noticing!



Re: [PULL 15/18] s390x/tcg: Fix CPU address returned by STIDP

2023-06-07 Thread Michael Tokarev

06.06.2023 08:56, Thomas Huth wrote:

From: Ilya Leoshkevich 

In qemu-user-s390x, /proc/cpuinfo contains:

processor 0: version = 00,  identification = 00,  machine = 8561
processor 1: version = 00,  identification = 40,  machine = 8561

The highest nibble is supposed to contain the CPU address, but it's off
by 2 bits. Fix the shift value and provide a symbolic constant for it.

With the fix we get:

processor 0: version = 00,  identification = 00,  machine = 8561
processor 1: version = 00,  identification = 10,  machine = 8561

Fixes: 076d4d39b65f ("s390x/cpumodel: wire up cpu type + id for TCG")
Reviewed-by: David Hildenbrand 
Signed-off-by: Ilya Leoshkevich 
Message-Id: <20230605113950.1169228-2-...@linux.ibm.com>
Signed-off-by: Thomas Huth 
---
  target/s390x/cpu_models.h | 10 +-
  target/s390x/cpu_models.c |  4 ++--
  2 files changed, 11 insertions(+), 3 deletions(-)


Is it a -stable material too?
(applies cleanly to 7.2 and 8.0)

Thanks,

/mjt



[PULL 15/18] s390x/tcg: Fix CPU address returned by STIDP

2023-06-05 Thread Thomas Huth
From: Ilya Leoshkevich 

In qemu-user-s390x, /proc/cpuinfo contains:

processor 0: version = 00,  identification = 00,  machine = 8561
processor 1: version = 00,  identification = 40,  machine = 8561

The highest nibble is supposed to contain the CPU address, but it's off
by 2 bits. Fix the shift value and provide a symbolic constant for it.

With the fix we get:

processor 0: version = 00,  identification = 00,  machine = 8561
processor 1: version = 00,  identification = 10,  machine = 8561

Fixes: 076d4d39b65f ("s390x/cpumodel: wire up cpu type + id for TCG")
Reviewed-by: David Hildenbrand 
Signed-off-by: Ilya Leoshkevich 
Message-Id: <20230605113950.1169228-2-...@linux.ibm.com>
Signed-off-by: Thomas Huth 
---
 target/s390x/cpu_models.h | 10 +-
 target/s390x/cpu_models.c |  4 ++--
 2 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/target/s390x/cpu_models.h b/target/s390x/cpu_models.h
index fb1adc8b21..cc7305ec21 100644
--- a/target/s390x/cpu_models.h
+++ b/target/s390x/cpu_models.h
@@ -96,10 +96,18 @@ static inline bool s390_known_cpu_type(uint16_t type)
 {
 return s390_get_gen_for_cpu_type(type) != 0;
 }
+#define CPU_ID_SHIFT 32
+#define CPU_ID_BITS 24
+/*
+ * When cpu_id_format is 0 (basic mode), the leftmost 4 bits of cpu_id contain
+ * the rightmost 4 bits of the physical CPU address.
+ */
+#define CPU_PHYS_ADDR_BITS 4
+#define CPU_PHYS_ADDR_SHIFT (CPU_ID_SHIFT + CPU_ID_BITS - CPU_PHYS_ADDR_BITS)
 static inline uint64_t s390_cpuid_from_cpu_model(const S390CPUModel *model)
 {
 return ((uint64_t)model->cpu_ver << 56) |
-   ((uint64_t)model->cpu_id << 32) |
+   ((uint64_t)model->cpu_id << CPU_ID_SHIFT) |
((uint64_t)model->def->type << 16) |
(model->def->gen == 7 ? 0 : (uint64_t)model->cpu_id_format << 15);
 }
diff --git a/target/s390x/cpu_models.c b/target/s390x/cpu_models.c
index 457b5cb10c..ae8880e81d 100644
--- a/target/s390x/cpu_models.c
+++ b/target/s390x/cpu_models.c
@@ -607,8 +607,8 @@ void s390_realize_cpu_model(CPUState *cs, Error **errp)
 #if !defined(CONFIG_USER_ONLY)
 cpu->env.cpuid = s390_cpuid_from_cpu_model(cpu->model);
 if (tcg_enabled()) {
-/* basic mode, write the cpu address into the first 4 bit of the ID */
-cpu->env.cpuid = deposit64(cpu->env.cpuid, 54, 4, cpu->env.core_id);
+cpu->env.cpuid = deposit64(cpu->env.cpuid, CPU_PHYS_ADDR_SHIFT,
+   CPU_PHYS_ADDR_BITS, cpu->env.core_id);
 }
 #endif
 }
-- 
2.31.1