qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v2 2/2] s390x/cpumodel: wire up cpu type + id fo


From: Richard Henderson
Subject: Re: [Qemu-devel] [PATCH v2 2/2] s390x/cpumodel: wire up cpu type + id for TCG
Date: Fri, 9 Jun 2017 15:01:50 -0700
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.1.0

On 06/09/2017 06:34 AM, David Hildenbrand wrote:
Let's properly expose the CPU type (machine-type number) via "STORE CPU
ID" and "STORE SUBSYSTEM INFORMATION".

As TCG emulates basic mode, the CPU identification number has the format
"Annnnn", whereby A is the CPU address, and n are parts of the CPU serial
number (0 for us for now).

A specification exception will be injected if the address is not aligned
to a double word. Low address protection will not be checked as
we're missing some more general support for that.

Signed-off-by: David Hildenbrand <address@hidden>
---
  target/s390x/cpu.h         | 2 +-
  target/s390x/cpu_models.c  | 8 ++++++--
  target/s390x/insn-data.def | 2 +-
  target/s390x/misc_helper.c | 9 ++++++---
  target/s390x/translate.c   | 9 ++-------
  5 files changed, 16 insertions(+), 14 deletions(-)

diff --git a/target/s390x/cpu.h b/target/s390x/cpu.h
index a4d31df..502d3d7 100644
--- a/target/s390x/cpu.h
+++ b/target/s390x/cpu.h
@@ -149,7 +149,7 @@ typedef struct CPUS390XState {
      CPU_COMMON
uint32_t cpu_num;
-    uint32_t machine_type;
+    uint64_t cpuid;
uint64_t tod_offset;
      uint64_t tod_basetime;
diff --git a/target/s390x/cpu_models.c b/target/s390x/cpu_models.c
index b34318f..c508ae1 100644
--- a/target/s390x/cpu_models.c
+++ b/target/s390x/cpu_models.c
@@ -737,8 +737,6 @@ static inline void apply_cpu_model(const S390CPUModel 
*model, Error **errp)
if (kvm_enabled()) {
          kvm_s390_apply_cpu_model(model, errp);
-    } else if (model) {
-        /* FIXME TCG - use data for stdip/stfl */
      }
if (!*errp) {
@@ -786,6 +784,12 @@ void s390_realize_cpu_model(CPUState *cs, Error **errp)
      }
apply_cpu_model(cpu->model, errp);
+
+    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 |= ((uint64_t)cpu->env.cpu_num & 0xf) << 54;

I changed this to deposit64 and applied the patch to my tree.


r~



reply via email to

[Prev in Thread] Current Thread [Next in Thread]