All of lore.kernel.org
 help / color / mirror / Atom feed
From: David Hildenbrand <david@redhat.com>
To: qemu-s390x@nongnu.org, qemu-devel@nongnu.org
Cc: Christian Borntraeger <borntraeger@de.ibm.com>,
	Cornelia Huck <cohuck@redhat.com>,
	Richard Henderson <rth@twiddle.net>,
	Alexander Graf <agraf@suse.de>,
	David Hildenbrand <david@redhat.com>
Subject: [Qemu-devel] [PATCH v1 for-2.12 06/15] s390x/diag: pass the retaddr into handle_diag_308()
Date: Tue, 28 Nov 2017 21:33:16 +0100	[thread overview]
Message-ID: <20171128203326.6062-7-david@redhat.com> (raw)
In-Reply-To: <20171128203326.6062-1-david@redhat.com>

Needed to later drop potential_page_fault() from the diag TCG translate
function.

Convert program_interrupt() to program_interrupt_ra() directly, making
use of the passed address.

Signed-off-by: David Hildenbrand <david@redhat.com>
---
 target/s390x/diag.c        | 14 +++++++-------
 target/s390x/internal.h    |  3 ++-
 target/s390x/kvm.c         |  2 +-
 target/s390x/misc_helper.c |  2 +-
 4 files changed, 11 insertions(+), 10 deletions(-)

diff --git a/target/s390x/diag.c b/target/s390x/diag.c
index dbbb9e886f..425a74efcd 100644
--- a/target/s390x/diag.c
+++ b/target/s390x/diag.c
@@ -99,19 +99,19 @@ int handle_diag_288(CPUS390XState *env, uint64_t r1, uint64_t r3)
 #define DIAG_308_RC_NO_CONF         0x0102
 #define DIAG_308_RC_INVALID         0x0402
 
-void handle_diag_308(CPUS390XState *env, uint64_t r1, uint64_t r3)
+void handle_diag_308(CPUS390XState *env, uint64_t r1, uint64_t r3, uintptr_t ra)
 {
     uint64_t addr =  env->regs[r1];
     uint64_t subcode = env->regs[r3];
     IplParameterBlock *iplb;
 
     if (env->psw.mask & PSW_MASK_PSTATE) {
-        program_interrupt(env, PGM_PRIVILEGED, ILEN_AUTO);
+        program_interrupt_ra(env, PGM_PRIVILEGED, ILEN_AUTO, ra);
         return;
     }
 
     if ((subcode & ~0x0ffffULL) || (subcode > 6)) {
-        program_interrupt(env, PGM_SPECIFICATION, ILEN_AUTO);
+        program_interrupt_ra(env, PGM_SPECIFICATION, ILEN_AUTO, ra);
         return;
     }
 
@@ -136,12 +136,12 @@ void handle_diag_308(CPUS390XState *env, uint64_t r1, uint64_t r3)
         break;
     case 5:
         if ((r1 & 1) || (addr & 0x0fffULL)) {
-            program_interrupt(env, PGM_SPECIFICATION, ILEN_AUTO);
+            program_interrupt_ra(env, PGM_SPECIFICATION, ILEN_AUTO, ra);
             return;
         }
         if (!address_space_access_valid(&address_space_memory, addr,
                                         sizeof(IplParameterBlock), false)) {
-            program_interrupt(env, PGM_ADDRESSING, ILEN_AUTO);
+            program_interrupt_ra(env, PGM_ADDRESSING, ILEN_AUTO, ra);
             return;
         }
         iplb = g_new0(IplParameterBlock, 1);
@@ -165,12 +165,12 @@ out:
         return;
     case 6:
         if ((r1 & 1) || (addr & 0x0fffULL)) {
-            program_interrupt(env, PGM_SPECIFICATION, ILEN_AUTO);
+            program_interrupt_ra(env, PGM_SPECIFICATION, ILEN_AUTO, ra);
             return;
         }
         if (!address_space_access_valid(&address_space_memory, addr,
                                         sizeof(IplParameterBlock), true)) {
-            program_interrupt(env, PGM_ADDRESSING, ILEN_AUTO);
+            program_interrupt_ra(env, PGM_ADDRESSING, ILEN_AUTO, ra);
             return;
         }
         iplb = s390_ipl_get_iplb();
diff --git a/target/s390x/internal.h b/target/s390x/internal.h
index 9db5f2d49d..6817b2c432 100644
--- a/target/s390x/internal.h
+++ b/target/s390x/internal.h
@@ -411,7 +411,8 @@ int mmu_translate_real(CPUS390XState *env, target_ulong raddr, int rw,
 
 /* misc_helper.c */
 int handle_diag_288(CPUS390XState *env, uint64_t r1, uint64_t r3);
-void handle_diag_308(CPUS390XState *env, uint64_t r1, uint64_t r3);
+void handle_diag_308(CPUS390XState *env, uint64_t r1, uint64_t r3,
+                     uintptr_t ra);
 
 
 /* translate.c */
diff --git a/target/s390x/kvm.c b/target/s390x/kvm.c
index 061abf9d4b..7bd0679fda 100644
--- a/target/s390x/kvm.c
+++ b/target/s390x/kvm.c
@@ -1451,7 +1451,7 @@ static void kvm_handle_diag_308(S390CPU *cpu, struct kvm_run *run)
     cpu_synchronize_state(CPU(cpu));
     r1 = (run->s390_sieic.ipa & 0x00f0) >> 4;
     r3 = run->s390_sieic.ipa & 0x000f;
-    handle_diag_308(&cpu->env, r1, r3);
+    handle_diag_308(&cpu->env, r1, r3, 0);
 }
 
 static int handle_sw_breakpoint(S390CPU *cpu, struct kvm_run *run)
diff --git a/target/s390x/misc_helper.c b/target/s390x/misc_helper.c
index a8a1958b06..e50ea480be 100644
--- a/target/s390x/misc_helper.c
+++ b/target/s390x/misc_helper.c
@@ -88,7 +88,7 @@ void HELPER(diag)(CPUS390XState *env, uint32_t r1, uint32_t r3, uint32_t num)
     case 0x308:
         /* ipl */
         qemu_mutex_lock_iothread();
-        handle_diag_308(env, r1, r3);
+        handle_diag_308(env, r1, r3, GETPC());
         qemu_mutex_unlock_iothread();
         r = 0;
         break;
-- 
2.14.3

  parent reply	other threads:[~2017-11-28 20:33 UTC|newest]

Thread overview: 54+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-11-28 20:33 [Qemu-devel] [PATCH v1 for-2.12 00/15] s390x/tcg: cleanup and fix program interrupts David Hildenbrand
2017-11-28 20:33 ` [Qemu-devel] [PATCH v1 for-2.12 01/15] s390x/tcg: introduce and use program_interrupt_ra() David Hildenbrand
2017-11-29 14:55   ` Cornelia Huck
2017-11-29 15:13     ` David Hildenbrand
2017-11-29 17:16   ` Richard Henderson
2017-11-28 20:33 ` [Qemu-devel] [PATCH v1 for-2.12 02/15] s390x/tcg: get rid of runtime_exception() David Hildenbrand
2017-11-29 17:17   ` Richard Henderson
2017-11-28 20:33 ` [Qemu-devel] [PATCH v1 for-2.12 03/15] s390x/tcg: rip out dead tpi code David Hildenbrand
2017-11-29  3:10   ` [Qemu-devel] [qemu-s390x] " Thomas Huth
2017-11-29 17:28   ` [Qemu-devel] " Richard Henderson
2017-11-28 20:33 ` [Qemu-devel] [PATCH v1 for-2.12 04/15] s390x/ioinst: pass the retaddr to all IO instructions David Hildenbrand
2017-11-29 15:13   ` Cornelia Huck
2017-11-29 15:14     ` David Hildenbrand
2017-11-29 15:35       ` Cornelia Huck
2017-11-29 15:38         ` David Hildenbrand
2017-11-29 15:39           ` Cornelia Huck
2017-11-29 15:45             ` David Hildenbrand
2017-11-29 15:57               ` Cornelia Huck
2017-11-29 16:05                 ` David Hildenbrand
2017-11-29 17:35   ` Richard Henderson
2017-11-28 20:33 ` [Qemu-devel] [PATCH v1 for-2.12 05/15] s390x/pci: pass the retaddr to all PCI instructions David Hildenbrand
2017-11-29 17:37   ` Richard Henderson
2017-11-28 20:33 ` David Hildenbrand [this message]
2017-11-29 17:38   ` [Qemu-devel] [PATCH v1 for-2.12 06/15] s390x/diag: pass the retaddr into handle_diag_308() Richard Henderson
2017-11-28 20:33 ` [Qemu-devel] [PATCH v1 for-2.12 07/15] s390x: handle exceptions during s390_cpu_virt_mem_rw() correctly (TCG) David Hildenbrand
2017-11-29 15:50   ` Cornelia Huck
2017-11-29 15:54     ` David Hildenbrand
2017-11-29 15:59       ` Cornelia Huck
2017-11-29 16:25         ` David Hildenbrand
2017-11-29 17:52   ` Richard Henderson
2017-11-28 20:33 ` [Qemu-devel] [PATCH v1 for-2.12 08/15] s390x/tcg: io instructions don't need potential_page_fault() David Hildenbrand
2017-11-29 17:53   ` Richard Henderson
2017-11-28 20:33 ` [Qemu-devel] [PATCH v1 for-2.12 09/15] s390x/tcg: use program_interrupt_ra() in SCLP Service Call David Hildenbrand
2017-11-29 18:10   ` Richard Henderson
2017-11-29 19:01     ` David Hildenbrand
2017-11-28 20:33 ` [Qemu-devel] [PATCH v1 for-2.12 10/15] s390x/tcg: use program_interrupt_ra() in DIAG David Hildenbrand
2017-11-29 18:11   ` Richard Henderson
2017-11-28 20:33 ` [Qemu-devel] [PATCH v1 for-2.12 11/15] s390x/tcg: use program_interrupt_ra() in per_check_exception() David Hildenbrand
2017-11-29 18:13   ` Richard Henderson
2017-11-28 20:33 ` [Qemu-devel] [PATCH v1 for-2.12 12/15] s390x/tcg: use program_interrupt_ra() in SACF David Hildenbrand
2017-11-29 18:13   ` Richard Henderson
2017-11-28 20:33 ` [Qemu-devel] [PATCH v1 for-2.12 13/15] s390x/tcg: use program_interrupt_ra() in STSI David Hildenbrand
2017-11-29 15:53   ` Cornelia Huck
2017-11-29 15:56     ` David Hildenbrand
2017-11-29 18:14   ` Richard Henderson
2017-11-28 20:33 ` [Qemu-devel] [PATCH v1 for-2.12 14/15] s390x/tcg: drop program_interrupt() David Hildenbrand
2017-11-29 15:55   ` Cornelia Huck
2017-11-29 18:18   ` Richard Henderson
2017-11-29 18:57     ` David Hildenbrand
2017-11-28 20:33 ` [Qemu-devel] [PATCH v1 for-2.12 15/15] s390x/tcg: drop potential_page_fault() David Hildenbrand
2017-11-29 18:20   ` Richard Henderson
2017-11-29 13:51 ` [Qemu-devel] [qemu-s390x] [PATCH v1 for-2.12 00/15] s390x/tcg: cleanup and fix program interrupts Thomas Huth
2017-11-29 14:06   ` David Hildenbrand
2017-11-29 14:44     ` Cornelia Huck

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=20171128203326.6062-7-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=qemu-s390x@nongnu.org \
    --cc=rth@twiddle.net \
    /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.