aboutsummaryrefslogtreecommitdiff
path: root/hw/s390x
diff options
context:
space:
mode:
authorEric Farman <farman@linux.ibm.com>2021-06-18 01:25:35 +0200
committerCornelia Huck <cohuck@redhat.com>2021-06-21 08:48:21 +0200
commit1b01dedaed41c2ca6129475c22b7b778b109fae8 (patch)
treeeabdcec9c131dfeaeeb617b8c40c669a622028b5 /hw/s390x
parent3fdc622ad79636f3d7f8bed50a53bc28af1850e1 (diff)
downloadqemu-1b01dedaed41c2ca6129475c22b7b778b109fae8.zip
qemu-1b01dedaed41c2ca6129475c22b7b778b109fae8.tar.gz
qemu-1b01dedaed41c2ca6129475c22b7b778b109fae8.tar.bz2
s390x/css: Split out the IRB sense data
Let's move this logic into its own routine, so it can be reused later. Signed-off-by: Eric Farman <farman@linux.ibm.com> Reviewed-by: Thomas Huth <thuth@redhat.com> Message-Id: <20210617232537.1337506-3-farman@linux.ibm.com> Signed-off-by: Cornelia Huck <cohuck@redhat.com>
Diffstat (limited to 'hw/s390x')
-rw-r--r--hw/s390x/css.c19
1 files changed, 12 insertions, 7 deletions
diff --git a/hw/s390x/css.c b/hw/s390x/css.c
index 2025507..26bd014 100644
--- a/hw/s390x/css.c
+++ b/hw/s390x/css.c
@@ -1639,6 +1639,17 @@ static void copy_irb_to_guest(IRB *dest, const IRB *src, const PMCW *pmcw,
*irb_len = sizeof(*dest);
}
+static void build_irb_sense_data(SubchDev *sch, IRB *irb)
+{
+ int i;
+
+ /* Attention: sense_data is already BE! */
+ memcpy(irb->ecw, sch->sense_data, sizeof(sch->sense_data));
+ for (i = 0; i < ARRAY_SIZE(irb->ecw); i++) {
+ irb->ecw[i] = be32_to_cpu(irb->ecw[i]);
+ }
+}
+
int css_do_tsch_get_irb(SubchDev *sch, IRB *target_irb, int *irb_len)
{
SCHIB *schib = &sch->curr_status;
@@ -1669,14 +1680,8 @@ int css_do_tsch_get_irb(SubchDev *sch, IRB *target_irb, int *irb_len)
/* If a unit check is pending, copy sense data. */
if ((schib->scsw.dstat & SCSW_DSTAT_UNIT_CHECK) &&
(schib->pmcw.chars & PMCW_CHARS_MASK_CSENSE)) {
- int i;
-
irb.scsw.flags |= SCSW_FLAGS_MASK_ESWF | SCSW_FLAGS_MASK_ECTL;
- /* Attention: sense_data is already BE! */
- memcpy(irb.ecw, sch->sense_data, sizeof(sch->sense_data));
- for (i = 0; i < ARRAY_SIZE(irb.ecw); i++) {
- irb.ecw[i] = be32_to_cpu(irb.ecw[i]);
- }
+ build_irb_sense_data(sch, &irb);
irb.esw.erw = ESW_ERW_SENSE | (sizeof(sch->sense_data) << 8);
}
}