All of lore.kernel.org
 help / color / mirror / Atom feed
From: David Hildenbrand <david@redhat.com>
To: qemu-devel@nongnu.org
Cc: thuth@redhat.com, cohuck@redhat.com,
	Christian Borntraeger <borntraeger@de.ibm.com>,
	Alexander Graf <agraf@suse.de>,
	Richard Henderson <richard.henderson@linaro.org>,
	David Hildenbrand <david@redhat.com>
Subject: [Qemu-devel] [PATCH v2 26/30] s390x/tcg: switch to new SIGP handling code
Date: Thu, 28 Sep 2017 22:37:04 +0200	[thread overview]
Message-ID: <20170928203708.9376-27-david@redhat.com> (raw)
In-Reply-To: <20170928203708.9376-1-david@redhat.com>

This effectively enables experimental SMP support. Floating interrupts are
still a mess, so allow it but print a big warning. There also seems
to be a problem with CPU hotplug (after the main loop started).

Signed-off-by: David Hildenbrand <david@redhat.com>
---
 hw/s390x/s390-virtio-ccw.c |  4 +---
 target/s390x/helper.h      |  2 +-
 target/s390x/misc_helper.c | 42 ++++++------------------------------------
 target/s390x/translate.c   |  5 +++--
 4 files changed, 11 insertions(+), 42 deletions(-)

diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c
index d188ce17ba..3a23fd3f27 100644
--- a/hw/s390x/s390-virtio-ccw.c
+++ b/hw/s390x/s390-virtio-ccw.c
@@ -58,9 +58,7 @@ static void s390_init_cpus(MachineState *machine)
     int i;
 
     if (tcg_enabled() && max_cpus > 1) {
-        error_report("Number of SMP CPUs requested (%d) exceeds max CPUs "
-                     "supported by TCG (1) on s390x", max_cpus);
-        exit(1);
+        error_report("WARNING: SMP support on s390x is experimental!");
     }
 
     /* initialize possible_cpus */
diff --git a/target/s390x/helper.h b/target/s390x/helper.h
index 52c2963baa..81c5727168 100644
--- a/target/s390x/helper.h
+++ b/target/s390x/helper.h
@@ -138,7 +138,7 @@ DEF_HELPER_FLAGS_3(sske, TCG_CALL_NO_RWG, void, env, i64, i64)
 DEF_HELPER_FLAGS_2(rrbe, TCG_CALL_NO_RWG, i32, env, i64)
 DEF_HELPER_4(mvcs, i32, env, i64, i64, i64)
 DEF_HELPER_4(mvcp, i32, env, i64, i64, i64)
-DEF_HELPER_4(sigp, i32, env, i64, i32, i64)
+DEF_HELPER_4(sigp, i32, env, i64, i32, i32)
 DEF_HELPER_FLAGS_2(sacf, TCG_CALL_NO_WG, void, env, i64)
 DEF_HELPER_FLAGS_4(idte, TCG_CALL_NO_RWG, void, env, i64, i64, i32)
 DEF_HELPER_FLAGS_4(ipte, TCG_CALL_NO_RWG, void, env, i64, i64, i32)
diff --git a/target/s390x/misc_helper.c b/target/s390x/misc_helper.c
index 0b93381188..0b3613ea5f 100644
--- a/target/s390x/misc_helper.c
+++ b/target/s390x/misc_helper.c
@@ -319,44 +319,14 @@ uint32_t HELPER(stsi)(CPUS390XState *env, uint64_t a0,
 }
 
 uint32_t HELPER(sigp)(CPUS390XState *env, uint64_t order_code, uint32_t r1,
-                      uint64_t cpu_addr)
+                      uint32_t r3)
 {
-    int cc = SIGP_CC_ORDER_CODE_ACCEPTED;
+    int cc;
 
-    HELPER_LOG("%s: %016" PRIx64 " %08x %016" PRIx64 "\n",
-               __func__, order_code, r1, cpu_addr);
-
-    /* Remember: Use "R1 or R1 + 1, whichever is the odd-numbered register"
-       as parameter (input). Status (output) is always R1. */
-
-    switch (order_code & SIGP_ORDER_MASK) {
-    case SIGP_SET_ARCH:
-        /* switch arch */
-        break;
-    case SIGP_SENSE:
-        /* enumerate CPU status */
-        if (cpu_addr) {
-            /* XXX implement when SMP comes */
-            return 3;
-        }
-        env->regs[r1] &= 0xffffffff00000000ULL;
-        cc = 1;
-        break;
-#if !defined(CONFIG_USER_ONLY)
-    case SIGP_RESTART:
-        qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET);
-        cpu_loop_exit(CPU(s390_env_get_cpu(env)));
-        break;
-    case SIGP_STOP:
-        qemu_system_shutdown_request(SHUTDOWN_CAUSE_GUEST_SHUTDOWN);
-        cpu_loop_exit(CPU(s390_env_get_cpu(env)));
-        break;
-#endif
-    default:
-        /* unknown sigp */
-        fprintf(stderr, "XXX unknown sigp: 0x%" PRIx64 "\n", order_code);
-        cc = SIGP_CC_NOT_OPERATIONAL;
-    }
+    /* TODO: needed to inject interrupts  - push further down */
+    qemu_mutex_lock_iothread();
+    cc = handle_sigp(env, order_code & SIGP_ORDER_MASK, r1, r3);
+    qemu_mutex_unlock_iothread();
 
     return cc;
 }
diff --git a/target/s390x/translate.c b/target/s390x/translate.c
index 405d94b87d..6a2e084f87 100644
--- a/target/s390x/translate.c
+++ b/target/s390x/translate.c
@@ -3710,11 +3710,12 @@ static ExitStatus op_servc(DisasContext *s, DisasOps *o)
 static ExitStatus op_sigp(DisasContext *s, DisasOps *o)
 {
     TCGv_i32 r1 = tcg_const_i32(get_field(s->fields, r1));
+    TCGv_i32 r3 = tcg_const_i32(get_field(s->fields, r3));
     check_privileged(s);
-    potential_page_fault(s);
-    gen_helper_sigp(cc_op, cpu_env, o->in2, r1, o->in1);
+    gen_helper_sigp(cc_op, cpu_env, o->in2, r1, r3);
     set_cc_static(s);
     tcg_temp_free_i32(r1);
+    tcg_temp_free_i32(r3);
     return NO_EXIT;
 }
 #endif
-- 
2.13.5

  parent reply	other threads:[~2017-09-28 20:39 UTC|newest]

Thread overview: 65+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-09-28 20:36 [Qemu-devel] [PATCH v2 00/30] s390x: SMP for TCG David Hildenbrand
2017-09-28 20:36 ` [Qemu-devel] [PATCH v2 01/30] s390x/tcg: turn INTERRUPT_EXT into a mask David Hildenbrand
2017-10-06  7:08   ` Thomas Huth
2017-10-10 14:20     ` Cornelia Huck
2017-10-10 16:49       ` Richard Henderson
2017-09-28 20:36 ` [Qemu-devel] [PATCH v2 02/30] s390x/tcg: cleanup service interrupt injection David Hildenbrand
2017-10-06 13:17   ` Richard Henderson
2017-10-10 14:23   ` Cornelia Huck
2017-09-28 20:36 ` [Qemu-devel] [PATCH v2 03/30] s390x/tcg: injection of emergency signals and external calls David Hildenbrand
2017-10-06 13:18   ` Richard Henderson
2017-09-28 20:36 ` [Qemu-devel] [PATCH v2 04/30] s390x/tcg: rework checking for deliverable interrupts David Hildenbrand
2017-10-06 13:31   ` Richard Henderson
2017-09-28 20:36 ` [Qemu-devel] [PATCH v2 05/30] s390x/tcg: take care of external interrupt subclasses David Hildenbrand
2017-10-06 13:34   ` Richard Henderson
2017-09-28 20:36 ` [Qemu-devel] [PATCH v2 06/30] s390x/tcg: STOPPED cpus can never wake up David Hildenbrand
2017-09-28 20:36 ` [Qemu-devel] [PATCH v2 07/30] s390x/tcg: a CPU cannot switch state due to an interrupt David Hildenbrand
2017-09-28 20:36 ` [Qemu-devel] [PATCH v2 08/30] target/s390x: factor out handling of WAIT PSW into s390_handle_wait() David Hildenbrand
2017-09-28 20:36 ` [Qemu-devel] [PATCH v2 09/30] s390x/tcg: handle WAIT PSWs during interrupt injection David Hildenbrand
2017-10-06 13:37   ` Richard Henderson
2017-09-28 20:36 ` [Qemu-devel] [PATCH v2 10/30] target/s390x: interpret PSW_MASK_WAIT only for TCG David Hildenbrand
2017-10-06 13:37   ` Richard Henderson
2017-10-11  8:05   ` Cornelia Huck
2017-09-28 20:36 ` [Qemu-devel] [PATCH v2 11/30] s390x/kvm: pass ipb directly into handle_sigp() David Hildenbrand
2017-09-28 20:36 ` [Qemu-devel] [PATCH v2 12/30] s390x/kvm: generalize SIGP stop and restart interrupt injection David Hildenbrand
2017-09-28 20:36 ` [Qemu-devel] [PATCH v2 13/30] s390x/kvm: factor out storing of CPU status David Hildenbrand
2017-10-06 13:39   ` Richard Henderson
2017-09-28 20:36 ` [Qemu-devel] [PATCH v2 14/30] s390x/kvm: factor out storing of adtl " David Hildenbrand
2017-09-28 20:36 ` [Qemu-devel] [PATCH v2 15/30] s390x/kvm: drop two debug prints David Hildenbrand
2017-09-28 20:36 ` [Qemu-devel] [PATCH v2 16/30] s390x/kvm: factor out SIGP code into sigp.c David Hildenbrand
2017-10-11  8:27   ` Cornelia Huck
2017-09-28 20:36 ` [Qemu-devel] [PATCH v2 17/30] MAINTAINERS: use s390 KVM maintainers for target/s390x/sigp.c David Hildenbrand
2017-10-06 13:40   ` Richard Henderson
2017-10-06 14:09     ` Cornelia Huck
2017-09-28 20:36 ` [Qemu-devel] [PATCH v2 18/30] s390x/kvm: factor out actual handling of STOP interrupts David Hildenbrand
2017-10-06 13:42   ` Richard Henderson
2017-09-28 20:36 ` [Qemu-devel] [PATCH v2 19/30] s390x/tcg: implement SIGP SENSE RUNNING STATUS David Hildenbrand
2017-10-06 13:44   ` Richard Henderson
2017-09-28 20:36 ` [Qemu-devel] [PATCH v2 20/30] s390x/tcg: implement SIGP SENSE David Hildenbrand
2017-10-06 13:45   ` Richard Henderson
2017-10-11  8:34   ` Cornelia Huck
2017-09-28 20:36 ` [Qemu-devel] [PATCH v2 21/30] s390x/tcg: implement SIGP EXTERNAL CALL David Hildenbrand
2017-10-06 13:46   ` Richard Henderson
2017-09-28 20:37 ` [Qemu-devel] [PATCH v2 22/30] s390x/tcg: implement SIGP EMERGENCY SIGNAL David Hildenbrand
2017-10-06 13:47   ` Richard Henderson
2017-09-28 20:37 ` [Qemu-devel] [PATCH v2 23/30] s390x/tcg: implement SIGP CONDITIONAL " David Hildenbrand
2017-10-06 13:49   ` Richard Henderson
2017-09-28 20:37 ` [Qemu-devel] [PATCH v2 24/30] s390x/tcg: implement STOP and RESET interrupts for TCG David Hildenbrand
2017-10-06 13:59   ` Richard Henderson
2017-10-11  8:45   ` Cornelia Huck
2017-09-28 20:37 ` [Qemu-devel] [PATCH v2 25/30] s390x/tcg: flush the tlb on SIGP SET PREFIX David Hildenbrand
2017-10-06 13:59   ` Richard Henderson
2017-09-28 20:37 ` David Hildenbrand [this message]
2017-10-06 14:02   ` [Qemu-devel] [PATCH v2 26/30] s390x/tcg: switch to new SIGP handling code Richard Henderson
2017-10-11  8:50     ` Cornelia Huck
2017-09-28 20:37 ` [Qemu-devel] [PATCH v2 27/30] s390x/cpumodel: allow to enable SENSE RUNNING STATUS for qemu David Hildenbrand
2017-10-06 14:03   ` Richard Henderson
2017-09-28 20:37 ` [Qemu-devel] [PATCH v2 28/30] s390x/tcg: unlock NMI David Hildenbrand
2017-10-06 14:04   ` Richard Henderson
2017-10-11  9:00   ` Cornelia Huck
2017-09-28 20:37 ` [Qemu-devel] [PATCH v2 29/30] s390x/tcg: refactor stfl(e) to use s390_get_feat_block() David Hildenbrand
2017-10-06 14:07   ` Richard Henderson
2017-09-28 20:37 ` [Qemu-devel] [PATCH v2 30/30] target/s390x: special handling when starting a CPU with WAIT PSW David Hildenbrand
2017-10-06 14:10   ` Richard Henderson
2017-10-11 12:07 ` [Qemu-devel] [PATCH v2 00/30] s390x: SMP for TCG Cornelia Huck
2017-10-16  7:14   ` David Hildenbrand

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20170928203708.9376-27-david@redhat.com \
    --to=david@redhat.com \
    --cc=agraf@suse.de \
    --cc=borntraeger@de.ibm.com \
    --cc=cohuck@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=richard.henderson@linaro.org \
    --cc=thuth@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.