qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH for-2.3 0/4] s390 patches for QEMU 2.3
@ 2014-12-03 14:38 Jens Freimann
  2014-12-03 14:38 ` [Qemu-devel] [PATCH for-2.3 1/4] s390x/ccw: fix oddity in machine class init Jens Freimann
                   ` (4 more replies)
  0 siblings, 5 replies; 6+ messages in thread
From: Jens Freimann @ 2014-12-03 14:38 UTC (permalink / raw)
  To: Christian Borntraeger, Alexander Graf, Cornelia Huck
  Cc: Jens Freimann, qemu-devel

Cornelia, Alex, Christian,

here are some patches targeted at QEMU 2.3. 

* Patches 1-3 are simple clean-ups 
* Patch 4 moves some register values into struct kvm_run, 
  thereby saving us a lot of set_one_reg triggered syscalls.

Cornelia Huck (1):
  s390x/ccw: fix oddity in machine class init

David Hildenbrand (2):
  s390x/kvm: sync register support helper function
  s390x/kvm: avoid syscalls by syncing registers with kvm_run

Thomas Huth (1):
  s390x/css: Clean up unnecessary CONFIG_USER_ONLY wrappers

 hw/s390x/s390-virtio-ccw.c |  2 +-
 target-s390x/cpu.h         | 81 ---------------------------------------
 target-s390x/kvm.c         | 94 ++++++++++++++++++++++++++++++----------------
 3 files changed, 63 insertions(+), 114 deletions(-)

-- 
1.8.5.5

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

* [Qemu-devel] [PATCH for-2.3 1/4] s390x/ccw: fix oddity in machine class init
  2014-12-03 14:38 [Qemu-devel] [PATCH for-2.3 0/4] s390 patches for QEMU 2.3 Jens Freimann
@ 2014-12-03 14:38 ` Jens Freimann
  2014-12-03 14:38 ` [Qemu-devel] [PATCH for-2.3 2/4] s390x/css: Clean up unnecessary CONFIG_USER_ONLY wrappers Jens Freimann
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Jens Freimann @ 2014-12-03 14:38 UTC (permalink / raw)
  To: Christian Borntraeger, Alexander Graf, Cornelia Huck
  Cc: Jens Freimann, qemu-devel

From: Cornelia Huck <cornelia.huck@de.ibm.com>

ccw_machine_class_init() uses ',' instead of ';' while initializing
the class' fields. This is almost certainly a copy/paste error and,
while legal C, rather on the unusual side. Just use ';' everywhere.

Reviewed-by: Thomas Huth <thuth@linux.vnet.ibm.com>
Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
Signed-off-by: Jens Freimann <jfrei@linux.vnet.ibm.com>
---
 hw/s390x/s390-virtio-ccw.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c
index bc4dc2a..f7b750d 100644
--- a/hw/s390x/s390-virtio-ccw.c
+++ b/hw/s390x/s390-virtio-ccw.c
@@ -181,7 +181,7 @@ static void ccw_machine_class_init(ObjectClass *oc, void *data)
     mc->no_serial = 1;
     mc->no_parallel = 1;
     mc->no_sdcard = 1;
-    mc->use_sclp = 1,
+    mc->use_sclp = 1;
     mc->max_cpus = 255;
     nc->nmi_monitor_handler = s390_nmi;
 }
-- 
1.8.5.5

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

* [Qemu-devel] [PATCH for-2.3 2/4] s390x/css: Clean up unnecessary CONFIG_USER_ONLY wrappers
  2014-12-03 14:38 [Qemu-devel] [PATCH for-2.3 0/4] s390 patches for QEMU 2.3 Jens Freimann
  2014-12-03 14:38 ` [Qemu-devel] [PATCH for-2.3 1/4] s390x/ccw: fix oddity in machine class init Jens Freimann
@ 2014-12-03 14:38 ` Jens Freimann
  2014-12-03 14:38 ` [Qemu-devel] [PATCH for-2.3 3/4] s390x/kvm: sync register support helper function Jens Freimann
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Jens Freimann @ 2014-12-03 14:38 UTC (permalink / raw)
  To: Christian Borntraeger, Alexander Graf, Cornelia Huck
  Cc: Jens Freimann, qemu-devel, Thomas Huth

From: Thomas Huth <thuth@linux.vnet.ibm.com>

The css functions are only used from ioinst.c and other files that are
only built for CONFIG_SOFTMMU. So we do not need the dummy wrappers for
the CONFIG_USER_ONLY target in the cpu.h header.

Signed-off-by: Thomas Huth <thuth@linux.vnet.ibm.com>
Signed-off-by: Jens Freimann <jfrei@linux.vnet.ibm.com>
Reviewed-by: Jason J. Herne <jjherne@us.ibm.com>
Acked-by: Cornelia Huck <cornelia.huck@de.ibm.com>
---
 target-s390x/cpu.h | 81 ------------------------------------------------------
 1 file changed, 81 deletions(-)

diff --git a/target-s390x/cpu.h b/target-s390x/cpu.h
index fe2f95d..23ad336 100644
--- a/target-s390x/cpu.h
+++ b/target-s390x/cpu.h
@@ -457,87 +457,6 @@ int css_enable_mss(void);
 int css_do_rsch(SubchDev *sch);
 int css_do_rchp(uint8_t cssid, uint8_t chpid);
 bool css_present(uint8_t cssid);
-#else
-static inline SubchDev *css_find_subch(uint8_t m, uint8_t cssid, uint8_t ssid,
-                                       uint16_t schid)
-{
-    return NULL;
-}
-static inline bool css_subch_visible(SubchDev *sch)
-{
-    return false;
-}
-static inline void css_conditional_io_interrupt(SubchDev *sch)
-{
-}
-static inline int css_do_stsch(SubchDev *sch, SCHIB *schib)
-{
-    return -ENODEV;
-}
-static inline bool css_schid_final(uint8_t cssid, uint8_t ssid, uint16_t schid)
-{
-    return true;
-}
-static inline int css_do_msch(SubchDev *sch, SCHIB *schib)
-{
-    return -ENODEV;
-}
-static inline int css_do_xsch(SubchDev *sch)
-{
-    return -ENODEV;
-}
-static inline int css_do_csch(SubchDev *sch)
-{
-    return -ENODEV;
-}
-static inline int css_do_hsch(SubchDev *sch)
-{
-    return -ENODEV;
-}
-static inline int css_do_ssch(SubchDev *sch, ORB *orb)
-{
-    return -ENODEV;
-}
-static inline int css_do_tsch(SubchDev *sch, IRB *irb)
-{
-    return -ENODEV;
-}
-static inline int css_do_stcrw(CRW *crw)
-{
-    return 1;
-}
-static inline int css_do_tpi(IOIntCode *int_code, int lowcore)
-{
-    return 0;
-}
-static inline int css_collect_chp_desc(int m, uint8_t cssid, uint8_t f_chpid,
-                                       int rfmt, uint8_t l_chpid, void *buf)
-{
-    return 0;
-}
-static inline void css_do_schm(uint8_t mbk, int update, int dct, uint64_t mbo)
-{
-}
-static inline int css_enable_mss(void)
-{
-    return -EINVAL;
-}
-static inline int css_enable_mcsse(void)
-{
-    return -EINVAL;
-}
-static inline int css_do_rsch(SubchDev *sch)
-{
-    return -ENODEV;
-}
-static inline int css_do_rchp(uint8_t cssid, uint8_t chpid)
-{
-    return -ENODEV;
-}
-static inline bool css_present(uint8_t cssid)
-{
-    return false;
-}
 #endif
 
 #define cpu_init(model) (&cpu_s390x_init(model)->env)
-- 
1.8.5.5

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

* [Qemu-devel] [PATCH for-2.3 3/4] s390x/kvm: sync register support helper function
  2014-12-03 14:38 [Qemu-devel] [PATCH for-2.3 0/4] s390 patches for QEMU 2.3 Jens Freimann
  2014-12-03 14:38 ` [Qemu-devel] [PATCH for-2.3 1/4] s390x/ccw: fix oddity in machine class init Jens Freimann
  2014-12-03 14:38 ` [Qemu-devel] [PATCH for-2.3 2/4] s390x/css: Clean up unnecessary CONFIG_USER_ONLY wrappers Jens Freimann
@ 2014-12-03 14:38 ` Jens Freimann
  2014-12-03 14:38 ` [Qemu-devel] [PATCH for-2.3 4/4] s390x/kvm: avoid syscalls by syncing registers with kvm_run Jens Freimann
  2014-12-04  6:29 ` [Qemu-devel] [PATCH for-2.3 0/4] s390 patches for QEMU 2.3 Cornelia Huck
  4 siblings, 0 replies; 6+ messages in thread
From: Jens Freimann @ 2014-12-03 14:38 UTC (permalink / raw)
  To: Christian Borntraeger, Alexander Graf, Cornelia Huck
  Cc: David Hildenbrand, Jens Freimann, qemu-devel

From: David Hildenbrand <dahi@linux.vnet.ibm.com>

Let's unify the code to sync registers by moving the checks into a helper
function can_sync_regs().

Signed-off-by: David Hildenbrand <dahi@linux.vnet.ibm.com>
Signed-off-by: Jens Freimann <jfrei@linux.vnet.ibm.com>
Reviewed-by: Cornelia Huck <cornelia.huck@de.ibm.com>
---
 target-s390x/kvm.c | 22 ++++++++++++----------
 1 file changed, 12 insertions(+), 10 deletions(-)

diff --git a/target-s390x/kvm.c b/target-s390x/kvm.c
index 2c638ab..b691ffe 100644
--- a/target-s390x/kvm.c
+++ b/target-s390x/kvm.c
@@ -202,6 +202,11 @@ void kvm_s390_reset_vcpu(S390CPU *cpu)
     }
 }
 
+static int can_sync_regs(CPUState *cs, int regs)
+{
+    return cap_sync_regs && (cs->kvm_run->kvm_valid_regs & regs) == regs;
+}
+
 int kvm_arch_put_registers(CPUState *cs, int level)
 {
     S390CPU *cpu = S390_CPU(cs);
@@ -216,7 +221,7 @@ int kvm_arch_put_registers(CPUState *cs, int level)
     cs->kvm_run->psw_addr = env->psw.addr;
     cs->kvm_run->psw_mask = env->psw.mask;
 
-    if (cap_sync_regs && cs->kvm_run->kvm_valid_regs & KVM_SYNC_GPRS) {
+    if (can_sync_regs(cs, KVM_SYNC_GPRS)) {
         for (i = 0; i < 16; i++) {
             cs->kvm_run->s.regs.gprs[i] = env->regs[i];
             cs->kvm_run->kvm_dirty_regs |= KVM_SYNC_GPRS;
@@ -273,9 +278,8 @@ int kvm_arch_put_registers(CPUState *cs, int level)
         }
     }
 
-    if (cap_sync_regs &&
-        cs->kvm_run->kvm_valid_regs & KVM_SYNC_ACRS &&
-        cs->kvm_run->kvm_valid_regs & KVM_SYNC_CRS) {
+    /* access registers and control registers*/
+    if (can_sync_regs(cs, KVM_SYNC_ACRS | KVM_SYNC_CRS)) {
         for (i = 0; i < 16; i++) {
             cs->kvm_run->s.regs.acrs[i] = env->aregs[i];
             cs->kvm_run->s.regs.crs[i] = env->cregs[i];
@@ -294,7 +298,7 @@ int kvm_arch_put_registers(CPUState *cs, int level)
     }
 
     /* Finally the prefix */
-    if (cap_sync_regs && cs->kvm_run->kvm_valid_regs & KVM_SYNC_PREFIX) {
+    if (can_sync_regs(cs, KVM_SYNC_PREFIX)) {
         cs->kvm_run->s.regs.prefix = env->psa;
         cs->kvm_run->kvm_dirty_regs |= KVM_SYNC_PREFIX;
     } else {
@@ -317,7 +321,7 @@ int kvm_arch_get_registers(CPUState *cs)
     env->psw.mask = cs->kvm_run->psw_mask;
 
     /* the GPRS */
-    if (cap_sync_regs && cs->kvm_run->kvm_valid_regs & KVM_SYNC_GPRS) {
+    if (can_sync_regs(cs, KVM_SYNC_GPRS)) {
         for (i = 0; i < 16; i++) {
             env->regs[i] = cs->kvm_run->s.regs.gprs[i];
         }
@@ -332,9 +336,7 @@ int kvm_arch_get_registers(CPUState *cs)
     }
 
     /* The ACRS and CRS */
-    if (cap_sync_regs &&
-        cs->kvm_run->kvm_valid_regs & KVM_SYNC_ACRS &&
-        cs->kvm_run->kvm_valid_regs & KVM_SYNC_CRS) {
+    if (can_sync_regs(cs, KVM_SYNC_ACRS | KVM_SYNC_CRS)) {
         for (i = 0; i < 16; i++) {
             env->aregs[i] = cs->kvm_run->s.regs.acrs[i];
             env->cregs[i] = cs->kvm_run->s.regs.crs[i];
@@ -361,7 +363,7 @@ int kvm_arch_get_registers(CPUState *cs)
     env->fpc = fpu.fpc;
 
     /* The prefix */
-    if (cap_sync_regs && cs->kvm_run->kvm_valid_regs & KVM_SYNC_PREFIX) {
+    if (can_sync_regs(cs, KVM_SYNC_PREFIX)) {
         env->psa = cs->kvm_run->s.regs.prefix;
     }
 
-- 
1.8.5.5

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

* [Qemu-devel] [PATCH for-2.3 4/4] s390x/kvm: avoid syscalls by syncing registers with kvm_run
  2014-12-03 14:38 [Qemu-devel] [PATCH for-2.3 0/4] s390 patches for QEMU 2.3 Jens Freimann
                   ` (2 preceding siblings ...)
  2014-12-03 14:38 ` [Qemu-devel] [PATCH for-2.3 3/4] s390x/kvm: sync register support helper function Jens Freimann
@ 2014-12-03 14:38 ` Jens Freimann
  2014-12-04  6:29 ` [Qemu-devel] [PATCH for-2.3 0/4] s390 patches for QEMU 2.3 Cornelia Huck
  4 siblings, 0 replies; 6+ messages in thread
From: Jens Freimann @ 2014-12-03 14:38 UTC (permalink / raw)
  To: Christian Borntraeger, Alexander Graf, Cornelia Huck
  Cc: David Hildenbrand, Jens Freimann, qemu-devel

From: David Hildenbrand <dahi@linux.vnet.ibm.com>

We can avoid loads of syscalls when dropping to user space by storing the values
of more registers directly within kvm_run.

Support is added for:
- ARCH0: CPU timer, clock comparator, TOD programmable register,
         guest breaking-event register, program parameter
- PFAULT: pfault parameters (token, select, compare)

Signed-off-by: David Hildenbrand <dahi@linux.vnet.ibm.com>
Signed-off-by: Jens Freimann <jfrei@linux.vnet.ibm.com>
Reviewed-by: Cornelia Huck <cornelia.huck@de.ibm.com>
Acked-by: Christian Borntraeger <borntraeger@de.ibm.com>
---
 target-s390x/kvm.c | 72 +++++++++++++++++++++++++++++++++++++-----------------
 1 file changed, 50 insertions(+), 22 deletions(-)

diff --git a/target-s390x/kvm.c b/target-s390x/kvm.c
index b691ffe..5a18634 100644
--- a/target-s390x/kvm.c
+++ b/target-s390x/kvm.c
@@ -252,18 +252,33 @@ int kvm_arch_put_registers(CPUState *cs, int level)
         return 0;
     }
 
-    /*
-     * These ONE_REGS are not protected by a capability. As they are only
-     * necessary for migration we just trace a possible error, but don't
-     * return with an error return code.
-     */
-    kvm_set_one_reg(cs, KVM_REG_S390_CPU_TIMER, &env->cputm);
-    kvm_set_one_reg(cs, KVM_REG_S390_CLOCK_COMP, &env->ckc);
-    kvm_set_one_reg(cs, KVM_REG_S390_TODPR, &env->todpr);
-    kvm_set_one_reg(cs, KVM_REG_S390_GBEA, &env->gbea);
-    kvm_set_one_reg(cs, KVM_REG_S390_PP, &env->pp);
+    if (can_sync_regs(cs, KVM_SYNC_ARCH0)) {
+        cs->kvm_run->s.regs.cputm = env->cputm;
+        cs->kvm_run->s.regs.ckc = env->ckc;
+        cs->kvm_run->s.regs.todpr = env->todpr;
+        cs->kvm_run->s.regs.gbea = env->gbea;
+        cs->kvm_run->s.regs.pp = env->pp;
+        cs->kvm_run->kvm_dirty_regs |= KVM_SYNC_ARCH0;
+    } else {
+        /*
+         * These ONE_REGS are not protected by a capability. As they are only
+         * necessary for migration we just trace a possible error, but don't
+         * return with an error return code.
+         */
+        kvm_set_one_reg(cs, KVM_REG_S390_CPU_TIMER, &env->cputm);
+        kvm_set_one_reg(cs, KVM_REG_S390_CLOCK_COMP, &env->ckc);
+        kvm_set_one_reg(cs, KVM_REG_S390_TODPR, &env->todpr);
+        kvm_set_one_reg(cs, KVM_REG_S390_GBEA, &env->gbea);
+        kvm_set_one_reg(cs, KVM_REG_S390_PP, &env->pp);
+    }
 
-    if (cap_async_pf) {
+    /* pfault parameters */
+    if (can_sync_regs(cs, KVM_SYNC_PFAULT)) {
+        cs->kvm_run->s.regs.pft = env->pfault_token;
+        cs->kvm_run->s.regs.pfs = env->pfault_select;
+        cs->kvm_run->s.regs.pfc = env->pfault_compare;
+        cs->kvm_run->kvm_dirty_regs |= KVM_SYNC_PFAULT;
+    } else if (cap_async_pf) {
         r = kvm_set_one_reg(cs, KVM_REG_S390_PFTOKEN, &env->pfault_token);
         if (r < 0) {
             return r;
@@ -367,18 +382,31 @@ int kvm_arch_get_registers(CPUState *cs)
         env->psa = cs->kvm_run->s.regs.prefix;
     }
 
-    /*
-     * These ONE_REGS are not protected by a capability. As they are only
-     * necessary for migration we just trace a possible error, but don't
-     * return with an error return code.
-     */
-    kvm_get_one_reg(cs, KVM_REG_S390_CPU_TIMER, &env->cputm);
-    kvm_get_one_reg(cs, KVM_REG_S390_CLOCK_COMP, &env->ckc);
-    kvm_get_one_reg(cs, KVM_REG_S390_TODPR, &env->todpr);
-    kvm_get_one_reg(cs, KVM_REG_S390_GBEA, &env->gbea);
-    kvm_get_one_reg(cs, KVM_REG_S390_PP, &env->pp);
+    if (can_sync_regs(cs, KVM_SYNC_ARCH0)) {
+        env->cputm = cs->kvm_run->s.regs.cputm;
+        env->ckc = cs->kvm_run->s.regs.ckc;
+        env->todpr = cs->kvm_run->s.regs.todpr;
+        env->gbea = cs->kvm_run->s.regs.gbea;
+        env->pp = cs->kvm_run->s.regs.pp;
+    } else {
+        /*
+         * These ONE_REGS are not protected by a capability. As they are only
+         * necessary for migration we just trace a possible error, but don't
+         * return with an error return code.
+         */
+        kvm_get_one_reg(cs, KVM_REG_S390_CPU_TIMER, &env->cputm);
+        kvm_get_one_reg(cs, KVM_REG_S390_CLOCK_COMP, &env->ckc);
+        kvm_get_one_reg(cs, KVM_REG_S390_TODPR, &env->todpr);
+        kvm_get_one_reg(cs, KVM_REG_S390_GBEA, &env->gbea);
+        kvm_get_one_reg(cs, KVM_REG_S390_PP, &env->pp);
+    }
 
-    if (cap_async_pf) {
+    /* pfault parameters */
+    if (can_sync_regs(cs, KVM_SYNC_PFAULT)) {
+        env->pfault_token = cs->kvm_run->s.regs.pft;
+        env->pfault_select = cs->kvm_run->s.regs.pfs;
+        env->pfault_compare = cs->kvm_run->s.regs.pfc;
+    } else if (cap_async_pf) {
         r = kvm_get_one_reg(cs, KVM_REG_S390_PFTOKEN, &env->pfault_token);
         if (r < 0) {
             return r;
-- 
1.8.5.5

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

* Re: [Qemu-devel] [PATCH for-2.3 0/4] s390 patches for QEMU 2.3
  2014-12-03 14:38 [Qemu-devel] [PATCH for-2.3 0/4] s390 patches for QEMU 2.3 Jens Freimann
                   ` (3 preceding siblings ...)
  2014-12-03 14:38 ` [Qemu-devel] [PATCH for-2.3 4/4] s390x/kvm: avoid syscalls by syncing registers with kvm_run Jens Freimann
@ 2014-12-04  6:29 ` Cornelia Huck
  4 siblings, 0 replies; 6+ messages in thread
From: Cornelia Huck @ 2014-12-04  6:29 UTC (permalink / raw)
  To: Jens Freimann; +Cc: Christian Borntraeger, Alexander Graf, qemu-devel

On Wed,  3 Dec 2014 15:38:27 +0100
Jens Freimann <jfrei@linux.vnet.ibm.com> wrote:

> Cornelia, Alex, Christian,
> 
> here are some patches targeted at QEMU 2.3. 
> 
> * Patches 1-3 are simple clean-ups 
> * Patch 4 moves some register values into struct kvm_run, 
>   thereby saving us a lot of set_one_reg triggered syscalls.
> 
> Cornelia Huck (1):
>   s390x/ccw: fix oddity in machine class init
> 
> David Hildenbrand (2):
>   s390x/kvm: sync register support helper function
>   s390x/kvm: avoid syscalls by syncing registers with kvm_run
> 
> Thomas Huth (1):
>   s390x/css: Clean up unnecessary CONFIG_USER_ONLY wrappers
> 
>  hw/s390x/s390-virtio-ccw.c |  2 +-
>  target-s390x/cpu.h         | 81 ---------------------------------------
>  target-s390x/kvm.c         | 94 ++++++++++++++++++++++++++++++----------------
>  3 files changed, 63 insertions(+), 114 deletions(-)
> 

Patches added to my s390-next queue.

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

end of thread, other threads:[~2014-12-04  6:29 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-12-03 14:38 [Qemu-devel] [PATCH for-2.3 0/4] s390 patches for QEMU 2.3 Jens Freimann
2014-12-03 14:38 ` [Qemu-devel] [PATCH for-2.3 1/4] s390x/ccw: fix oddity in machine class init Jens Freimann
2014-12-03 14:38 ` [Qemu-devel] [PATCH for-2.3 2/4] s390x/css: Clean up unnecessary CONFIG_USER_ONLY wrappers Jens Freimann
2014-12-03 14:38 ` [Qemu-devel] [PATCH for-2.3 3/4] s390x/kvm: sync register support helper function Jens Freimann
2014-12-03 14:38 ` [Qemu-devel] [PATCH for-2.3 4/4] s390x/kvm: avoid syscalls by syncing registers with kvm_run Jens Freimann
2014-12-04  6:29 ` [Qemu-devel] [PATCH for-2.3 0/4] s390 patches for QEMU 2.3 Cornelia Huck

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