From: Halil Pasic <pasic@linux.vnet.ibm.com>
To: Cornelia Huck <cohuck@redhat.com>
Cc: Dong Jia Shi <bjsdjshi@linux.vnet.ibm.com>,
Pierre Morel <pmorel@linux.vnet.ibm.com>,
qemu-devel@nongnu.org, Halil Pasic <pasic@linux.vnet.ibm.com>
Subject: [Qemu-devel] [PATCH 9/9] s390x: factor out common ioinst handler logic
Date: Wed, 30 Aug 2017 18:36:09 +0200 [thread overview]
Message-ID: <20170830163609.50260-10-pasic@linux.vnet.ibm.com> (raw)
In-Reply-To: <20170830163609.50260-1-pasic@linux.vnet.ibm.com>
Some of ioinst the handlers look very much the same: they basically
delegate the work to the appropriate css function (doing some always the
same stuff before and after the call to the appropriate css function).
Let us create a template and get rid of some code.
Signed-off-by: Halil Pasic <pasic@linux.vnet.ibm.com>
Suggested-by: Marc Hartmayer <mhartmay@linux.vnet.ibm.com>
Reviewed-by: Pierre Morel<pmorel@linux.vnet.ibm.com>
---
The handlers for MSCH and SSCH look very similar to our template too.
It's just that there is one more parameter to the corresponding css
function. Maybe one could do something to unify that too (e.g. some
crazy macro) but I don't think it's worth the effort. Another idea
was to make the two corresponding functions single argument too
(by Dong Jia).
---
target/s390x/ioinst.c | 77 ++++++++++-----------------------------------------
1 file changed, 14 insertions(+), 63 deletions(-)
diff --git a/target/s390x/ioinst.c b/target/s390x/ioinst.c
index a286495219..6583e5216d 100644
--- a/target/s390x/ioinst.c
+++ b/target/s390x/ioinst.c
@@ -37,7 +37,10 @@ int ioinst_disassemble_sch_ident(uint32_t value, int *m, int *cssid, int *ssid,
return 0;
}
-void ioinst_handle_xsch(S390CPU *cpu, uint64_t reg1)
+/* many ionst handlers look the same: they just delegate to a some css func */
+static void ioinst_handler_template_sch(S390CPU *cpu, uint64_t reg1,
+ const char *iname,
+ void (*handler_css)(SubchDev *))
{
int cssid, ssid, schid, m;
SubchDev *sch;
@@ -46,14 +49,14 @@ void ioinst_handle_xsch(S390CPU *cpu, uint64_t reg1)
program_interrupt(&cpu->env, PGM_OPERAND, 4);
return;
}
- trace_ioinst_sch_id("xsch", cssid, ssid, schid);
+ trace_ioinst_sch_id(iname, cssid, ssid, schid);
sch = css_find_subch(m, cssid, ssid, schid);
if (!sch || !css_subch_visible(sch)) {
setcc(cpu, 3);
return;
}
css_subch_clear_iret(sch);
- css_do_xsch(sch);
+ handler_css(sch);
if (sch->iret.pgm_chk) {
program_interrupt(&cpu->env, sch->iret.irq_code, 4);
return;
@@ -61,52 +64,19 @@ void ioinst_handle_xsch(S390CPU *cpu, uint64_t reg1)
setcc(cpu, sch->iret.cc);
}
-void ioinst_handle_csch(S390CPU *cpu, uint64_t reg1)
+void ioinst_handle_xsch(S390CPU *cpu, uint64_t reg1)
{
- int cssid, ssid, schid, m;
- SubchDev *sch;
+ ioinst_handler_template_sch(cpu, reg1, "xsch", css_do_xsch);
+}
- if (ioinst_disassemble_sch_ident(reg1, &m, &cssid, &ssid, &schid)) {
- program_interrupt(&cpu->env, PGM_OPERAND, 4);
- return;
- }
- trace_ioinst_sch_id("csch", cssid, ssid, schid);
- sch = css_find_subch(m, cssid, ssid, schid);
- if (!sch || !css_subch_visible(sch)) {
- setcc(cpu, 3);
- return;
- }
- css_subch_clear_iret(sch);
- css_do_csch(sch);
- if (sch->iret.pgm_chk) {
- program_interrupt(&cpu->env, sch->iret.irq_code, 4);
- return;
- }
- setcc(cpu, sch->iret.cc);
+void ioinst_handle_csch(S390CPU *cpu, uint64_t reg1)
+{
+ ioinst_handler_template_sch(cpu, reg1, "csch", css_do_csch);
}
void ioinst_handle_hsch(S390CPU *cpu, uint64_t reg1)
{
- int cssid, ssid, schid, m;
- SubchDev *sch;
-
- if (ioinst_disassemble_sch_ident(reg1, &m, &cssid, &ssid, &schid)) {
- program_interrupt(&cpu->env, PGM_OPERAND, 4);
- return;
- }
- trace_ioinst_sch_id("hsch", cssid, ssid, schid);
- sch = css_find_subch(m, cssid, ssid, schid);
- if (!sch || !css_subch_visible(sch)) {
- setcc(cpu, 3);
- return;
- }
- css_subch_clear_iret(sch);
- css_do_hsch(sch);
- if (sch->iret.pgm_chk) {
- program_interrupt(&cpu->env, sch->iret.irq_code, 4);
- return;
- }
- setcc(cpu, sch->iret.cc);
+ ioinst_handler_template_sch(cpu, reg1, "hsch", css_do_hsch);
}
static int ioinst_schib_valid(SCHIB *schib)
@@ -720,26 +690,7 @@ void ioinst_handle_schm(S390CPU *cpu, uint64_t reg1, uint64_t reg2,
void ioinst_handle_rsch(S390CPU *cpu, uint64_t reg1)
{
- int cssid, ssid, schid, m;
- SubchDev *sch;
-
- if (ioinst_disassemble_sch_ident(reg1, &m, &cssid, &ssid, &schid)) {
- program_interrupt(&cpu->env, PGM_OPERAND, 4);
- return;
- }
- trace_ioinst_sch_id("rsch", cssid, ssid, schid);
- sch = css_find_subch(m, cssid, ssid, schid);
- if (!sch || !css_subch_visible(sch)) {
- setcc(cpu, 3);
- return;
- }
- css_subch_clear_iret(sch);
- css_do_rsch(sch);
- if (sch->iret.pgm_chk) {
- program_interrupt(&cpu->env, sch->iret.irq_code, 4);
- return;
- }
- setcc(cpu, sch->iret.cc);
+ ioinst_handler_template_sch(cpu, reg1, "rsch", css_do_rsch);
}
#define RCHP_REG1_RES(_reg) (_reg & 0x00000000ff00ff00)
--
2.13.5
next prev parent reply other threads:[~2017-08-30 16:36 UTC|newest]
Thread overview: 60+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-08-30 16:36 [Qemu-devel] [PATCH 0/9] Halil Pasic
2017-08-30 16:36 ` [Qemu-devel] [PATCH 1/9] s390x/css: fix cc handling for XSCH Halil Pasic
2017-08-31 5:51 ` Thomas Huth
2017-08-31 6:38 ` Cornelia Huck
2017-08-31 7:32 ` Thomas Huth
2017-08-31 8:42 ` Cornelia Huck
2017-08-31 10:19 ` Halil Pasic
2017-08-31 9:09 ` Halil Pasic
2017-08-31 9:16 ` Thomas Huth
2017-08-30 16:36 ` [Qemu-devel] [PATCH 2/9] s390x: fix invalid use of cc 1 for SSCH Halil Pasic
2017-08-31 7:50 ` Thomas Huth
2017-08-31 10:54 ` Halil Pasic
2017-08-31 9:19 ` Cornelia Huck
2017-08-31 10:41 ` Halil Pasic
2017-09-05 8:02 ` Cornelia Huck
2017-09-05 15:24 ` Halil Pasic
2017-09-05 15:46 ` Cornelia Huck
2017-09-05 17:20 ` Halil Pasic
2017-09-06 8:27 ` Dong Jia Shi
2017-09-06 11:25 ` Cornelia Huck
2017-09-07 8:02 ` Dong Jia Shi
2017-09-07 11:01 ` Halil Pasic
2017-09-13 10:08 ` Cornelia Huck
2017-09-13 14:05 ` Halil Pasic
2017-09-06 11:37 ` Cornelia Huck
2017-09-06 8:37 ` Dong Jia Shi
2017-09-06 11:38 ` Cornelia Huck
2017-08-30 16:36 ` [Qemu-devel] [PATCH 3/9] s390x/css: be more consistent if broken beyond repair Halil Pasic
2017-08-31 6:10 ` Thomas Huth
2017-08-31 7:44 ` Thomas Huth
2017-08-31 9:33 ` Cornelia Huck
2017-08-30 16:36 ` [Qemu-devel] [PATCH 4/9] s390x: refactor error handling for SSCH and RSCH Halil Pasic
2017-08-31 9:55 ` Cornelia Huck
2017-09-05 15:55 ` Halil Pasic
2017-09-05 16:25 ` Cornelia Huck
2017-09-05 22:30 ` Halil Pasic
2017-09-06 4:31 ` Dong Jia Shi
2017-09-06 12:25 ` Halil Pasic
2017-09-06 14:20 ` Cornelia Huck
2017-09-06 14:43 ` Halil Pasic
2017-09-07 8:58 ` Dong Jia Shi
2017-09-07 10:15 ` Halil Pasic
2017-09-07 10:24 ` Cornelia Huck
2017-09-07 11:32 ` Halil Pasic
2017-09-07 11:41 ` Cornelia Huck
2017-09-08 3:41 ` Dong Jia Shi
2017-09-08 9:21 ` Halil Pasic
2017-09-08 9:59 ` Cornelia Huck
2017-09-25 7:31 ` Dong Jia Shi
2017-09-25 10:57 ` Halil Pasic
2017-09-27 7:55 ` Dong Jia Shi
2017-09-08 10:02 ` Cornelia Huck
2017-09-25 7:14 ` Dong Jia Shi
2017-08-30 16:36 ` [Qemu-devel] [PATCH 5/9] s390x: refactor error handling for XSCH handler Halil Pasic
2017-08-30 16:36 ` [Qemu-devel] [PATCH 6/9] s390x: refactor error handling for CSCH handler Halil Pasic
2017-08-30 16:36 ` [Qemu-devel] [PATCH 7/9] s390x: refactor error handling for HSCH handler Halil Pasic
2017-08-30 16:36 ` [Qemu-devel] [PATCH 8/9] s390x: refactor error handling for MSCH handler Halil Pasic
2017-08-30 16:36 ` Halil Pasic [this message]
2017-08-31 10:04 ` [Qemu-devel] [PATCH 0/9] Cornelia Huck
2017-08-31 10:43 ` Halil Pasic
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=20170830163609.50260-10-pasic@linux.vnet.ibm.com \
--to=pasic@linux.vnet.ibm.com \
--cc=bjsdjshi@linux.vnet.ibm.com \
--cc=cohuck@redhat.com \
--cc=pmorel@linux.vnet.ibm.com \
--cc=qemu-devel@nongnu.org \
/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.