Message ID | 20151104185252.199973af.cornelia.huck@de.ibm.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Wed, Nov 4, 2015 at 9:52 AM, Cornelia Huck <cornelia.huck@de.ibm.com> wrote: > On Wed, 4 Nov 2015 15:29:23 +0100 > Cornelia Huck <cornelia.huck@de.ibm.com> wrote: > >> I'm currently suspecting some endianness issues, probably with the ecw >> accesses, which is why I'd be interested in your trace information (as >> I currently don't have a LE test setup at hand.) > > I think I've got it. We have sense_data as a byte array, which > implicitly makes it BE already. When we copy to the ecws while building > the irb, the data ends up in 32 bit values. The conversion from host > endianness to BE now treats them as LE on your system... > > Could you please give the following qemu patch a try? Tested-by: Andy Lutomirski <luto@kernel.org> Now my test script panics for the right reason (init isn't actually an s390 binary). Thanks! I'll update my branch with the latest s390 DMA stuff, and now I can give it at least basic regression testing. Of course, I have to find a root filesystem, too. :) --Andy -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Wed, 4 Nov 2015 10:14:11 -0800 Andy Lutomirski <luto@amacapital.net> wrote: > On Wed, Nov 4, 2015 at 9:52 AM, Cornelia Huck <cornelia.huck@de.ibm.com> wrote: > > On Wed, 4 Nov 2015 15:29:23 +0100 > > Cornelia Huck <cornelia.huck@de.ibm.com> wrote: > > > >> I'm currently suspecting some endianness issues, probably with the ecw > >> accesses, which is why I'd be interested in your trace information (as > >> I currently don't have a LE test setup at hand.) > > > > I think I've got it. We have sense_data as a byte array, which > > implicitly makes it BE already. When we copy to the ecws while building > > the irb, the data ends up in 32 bit values. The conversion from host > > endianness to BE now treats them as LE on your system... > > > > Could you please give the following qemu patch a try? > > Tested-by: Andy Lutomirski <luto@kernel.org> > > Now my test script panics for the right reason (init isn't actually an > s390 binary). Thanks! Cool, thanks for testing! I'll get this into qemu as a proper patch. -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Thu, 5 Nov 2015 09:11:06 +0100 Cornelia Huck <cornelia.huck@de.ibm.com> wrote: > On Wed, 4 Nov 2015 10:14:11 -0800 > Andy Lutomirski <luto@amacapital.net> wrote: > > > On Wed, Nov 4, 2015 at 9:52 AM, Cornelia Huck <cornelia.huck@de.ibm.com> wrote: > > > On Wed, 4 Nov 2015 15:29:23 +0100 > > > Cornelia Huck <cornelia.huck@de.ibm.com> wrote: > > > > > >> I'm currently suspecting some endianness issues, probably with the ecw > > >> accesses, which is why I'd be interested in your trace information (as > > >> I currently don't have a LE test setup at hand.) > > > > > > I think I've got it. We have sense_data as a byte array, which > > > implicitly makes it BE already. When we copy to the ecws while building > > > the irb, the data ends up in 32 bit values. The conversion from host > > > endianness to BE now treats them as LE on your system... > > > > > > Could you please give the following qemu patch a try? > > > > Tested-by: Andy Lutomirski <luto@kernel.org> > > > > Now my test script panics for the right reason (init isn't actually an > > s390 binary). Thanks! > > Cool, thanks for testing! I'll get this into qemu as a proper patch. FYI: The patch has been included into the qemu git tree. -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/hw/s390x/css.c b/hw/s390x/css.c index c033612..a13494e 100644 --- a/hw/s390x/css.c +++ b/hw/s390x/css.c @@ -892,8 +892,16 @@ int css_do_tsch_get_irb(SubchDev *sch, IRB *target_irb, int *irb_len) /* If a unit check is pending, copy sense data. */ if ((s->dstat & SCSW_DSTAT_UNIT_CHECK) && (p->chars & PMCW_CHARS_MASK_CSENSE)) { + uint32_t ecw[8]; + int i; + irb.scsw.flags |= SCSW_FLAGS_MASK_ESWF | SCSW_FLAGS_MASK_ECTL; - memcpy(irb.ecw, sch->sense_data, sizeof(sch->sense_data)); + /* Attention: sense_data is already BE! */ + memset(ecw, 0, sizeof(ecw)); + memcpy(ecw, sch->sense_data, sizeof(sch->sense_data)); + for (i = 0; i < ARRAY_SIZE(ecw); i++) { + irb.ecw[i] = be32_to_cpu(ecw[i]); + } irb.esw[1] = 0x01000000 | (sizeof(sch->sense_data) << 8); } }