qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH 0/5] s390: current patches
@ 2012-10-02  7:33 Jens Freimann
  2012-10-02  7:33 ` [Qemu-devel] [PATCH 1/5] s390: use sync regs for register transfer Jens Freimann
                   ` (4 more replies)
  0 siblings, 5 replies; 15+ messages in thread
From: Jens Freimann @ 2012-10-02  7:33 UTC (permalink / raw)
  To: Alexander Graf
  Cc: Heinz Graalfs, qemu-devel, Christian Borntraeger, Jens Freimann,
	Cornelia Huck, Einar Lueck

Alex, this is our current patch queue for s390.

SCLP patches v2:
SCLP base support was changed to address your review comments and
the signal quiesce support patch now uses a powerdown notifier.

sync regs v2:
Christian's sync regs patch now follows the level statement for
KVM_PUT_FULL_STATE and _RESET_STATE and saves the sync_regs capability
in a variable.


Christian Borntraeger (1):
  s390: use sync regs for register transfer

Heinz Graalfs (4):
  s390: sclp base support
  s390: sclp event support
  s390: sclp signal quiesce support
  s390: sclp ascii console support

 hw/s390-virtio.c           |   2 +
 hw/s390x/Makefile.objs     |   3 +
 hw/s390x/event-facility.c  | 398 +++++++++++++++++++++++++++++++++++++++++++++
 hw/s390x/event-facility.h  |  96 +++++++++++
 hw/s390x/sclp.c            | 164 +++++++++++++++++++
 hw/s390x/sclp.h            | 118 ++++++++++++++
 hw/s390x/sclpconsole.c     | 306 ++++++++++++++++++++++++++++++++++
 hw/s390x/sclpquiesce.c     | 123 ++++++++++++++
 target-s390x/cpu.h         |  13 +-
 target-s390x/kvm.c         | 124 +++++++++++---
 target-s390x/misc_helper.c |  45 +----
 11 files changed, 1312 insertions(+), 80 deletions(-)
 create mode 100644 hw/s390x/event-facility.c
 create mode 100644 hw/s390x/event-facility.h
 create mode 100644 hw/s390x/sclp.c
 create mode 100644 hw/s390x/sclp.h
 create mode 100644 hw/s390x/sclpconsole.c
 create mode 100644 hw/s390x/sclpquiesce.c

-- 
1.7.11.7

^ permalink raw reply	[flat|nested] 15+ messages in thread
* [Qemu-devel] [PATCH] s390: use sync regs for register transfer
@ 2012-08-22 11:54 Jens Freimann
  2012-09-20 12:19 ` Alexander Graf
  0 siblings, 1 reply; 15+ messages in thread
From: Jens Freimann @ 2012-08-22 11:54 UTC (permalink / raw)
  To: Alexander Graf
  Cc: Heinz Graalfs, qemu-devel, Christian Borntraeger, Jens Freimann,
	Cornelia Huck, Einar Lueck

From: Christian Borntraeger <borntraeger@de.ibm.com>

Newer kernels provide the guest registers in kvm_run. Lets use
those if available. This avoids ioctls on cpu_synchronize_state
making intercepts faster.

In addition, we have now the prefix register, the access registers
the control registers up to date. This helps in certain cases,
e.g. for resolving kernel module addresses with gdb on a guest.

On return, we only update the gprs, since qemu does not change
prefix, crs and acrs. Blindly updating those might cause some
expensive flushing in the kernel.

Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
Signed-off-by: Jens Freimann <jfrei@linux.vnet.ibm.com>
---
 target-s390x/kvm.c | 75 +++++++++++++++++++++++++++++++++++++-----------------
 1 file changed, 51 insertions(+), 24 deletions(-)

diff --git a/target-s390x/kvm.c b/target-s390x/kvm.c
index 07edf93..4598923 100644
--- a/target-s390x/kvm.c
+++ b/target-s390x/kvm.c
@@ -88,50 +88,77 @@ void kvm_arch_reset_vcpu(CPUS390XState *env)
     /* FIXME: add code to reset vcpu. */
 }
 
+/* we want to have the prefix, the GPRS, the ACRS and the CRS up to date */
+#define QEMU_NEEDED_REGS  (KVM_SYNC_PREFIX | KVM_SYNC_GPRS | \
+                         KVM_SYNC_ACRS   | KVM_SYNC_CRS)
+
+/* But qemu only changes the GPRS */
+#define QEMU_DIRTY_REGS  (KVM_SYNC_GPRS)
+
 int kvm_arch_put_registers(CPUS390XState *env, int level)
 {
     struct kvm_regs regs;
     int ret;
     int i;
 
-    ret = kvm_vcpu_ioctl(env, KVM_GET_REGS, &regs);
-    if (ret < 0) {
-        return ret;
-    }
-
-    for (i = 0; i < 16; i++) {
-        regs.gprs[i] = env->regs[i];
-    }
-
-    ret = kvm_vcpu_ioctl(env, KVM_SET_REGS, &regs);
-    if (ret < 0) {
-        return ret;
-    }
-
     env->kvm_run->psw_addr = env->psw.addr;
     env->kvm_run->psw_mask = env->psw.mask;
 
-    return ret;
+    if ((env->kvm_run->kvm_valid_regs & QEMU_NEEDED_REGS) == QEMU_NEEDED_REGS) {
+        env->kvm_run->s.regs.prefix = env->psa;
+        for (i = 0; i < 16; i++) {
+            env->kvm_run->s.regs.gprs[i] = env->regs[i];
+            env->kvm_run->kvm_dirty_regs |= QEMU_DIRTY_REGS;
+        }
+    } else {
+        for (i = 0; i < 16; i++) {
+            regs.gprs[i] = env->regs[i];
+        }
+        ret = kvm_vcpu_ioctl(env, KVM_SET_REGS, &regs);
+        if (ret < 0) {
+            return ret;
+        }
+        /* no prefix available */
+    }
+    /* sregs unchanged */
+
+    return 0;
 }
 
 int kvm_arch_get_registers(CPUS390XState *env)
 {
     int ret;
     struct kvm_regs regs;
+    struct kvm_sregs sregs;
     int i;
 
-    ret = kvm_vcpu_ioctl(env, KVM_GET_REGS, &regs);
-    if (ret < 0) {
-        return ret;
-    }
-
-    for (i = 0; i < 16; i++) {
-        env->regs[i] = regs.gprs[i];
-    }
-
     env->psw.addr = env->kvm_run->psw_addr;
     env->psw.mask = env->kvm_run->psw_mask;
 
+    if ((env->kvm_run->kvm_valid_regs & QEMU_NEEDED_REGS) == QEMU_NEEDED_REGS) {
+        env->psa = env->kvm_run->s.regs.prefix;
+        for (i = 0; i < 16; i++) {
+            env->regs[i] = env->kvm_run->s.regs.gprs[i];
+            env->cregs[i] = env->kvm_run->s.regs.crs[i];
+            env->aregs[i] = env->kvm_run->s.regs.acrs[i];
+        }
+    } else {
+        ret = kvm_vcpu_ioctl(env, KVM_GET_REGS, &regs);
+        if (ret < 0) {
+            return ret;
+        }
+        ret = kvm_vcpu_ioctl(env, KVM_GET_SREGS, &sregs);
+        if (ret < 0) {
+            return ret;
+        }
+        for (i = 0; i < 16; i++) {
+            env->regs[i] = regs.gprs[i];
+            env->cregs[i] = sregs.crs[i];
+            env->aregs[i] = sregs.acrs[i];
+        }
+        /* no prefix available */
+    }
+
     return 0;
 }
 
-- 
1.7.11.5

^ permalink raw reply related	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2012-10-12  4:12 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-10-02  7:33 [Qemu-devel] [PATCH 0/5] s390: current patches Jens Freimann
2012-10-02  7:33 ` [Qemu-devel] [PATCH 1/5] s390: use sync regs for register transfer Jens Freimann
2012-10-03 20:08   ` Blue Swirl
2012-10-04  7:56     ` [Qemu-devel] [PATCH] " Jens Freimann
2012-10-02  7:33 ` [Qemu-devel] [PATCH 2/5] s390: sclp base support Jens Freimann
2012-10-02  7:33 ` [Qemu-devel] [PATCH 3/5] s390: sclp event support Jens Freimann
2012-10-02  7:33 ` [Qemu-devel] [PATCH 4/5] s390: sclp signal quiesce support Jens Freimann
2012-10-12  0:36   ` Alexander Graf
2012-10-12  4:12     ` Christian Borntraeger
2012-10-02  7:33 ` [Qemu-devel] [PATCH 5/5] s390: sclp ascii console support Jens Freimann
  -- strict thread matches above, loose matches on Subject: below --
2012-08-22 11:54 [Qemu-devel] [PATCH] s390: use sync regs for register transfer Jens Freimann
2012-09-20 12:19 ` Alexander Graf
2012-09-20 12:49   ` Christian Borntraeger
2012-09-20 14:13     ` Alexander Graf
2012-09-20 15:21       ` Christian Borntraeger

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).