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