On 04/06/2020 13.35, Pierre Morel wrote: > > > On 2020-05-27 10:55, Cornelia Huck wrote: >> On Mon, 18 May 2020 18:07:27 +0200 >> Pierre Morel <pmorel@xxxxxxxxxxxxx> wrote: >> >>> First step for testing the channel subsystem is to enumerate the css and >>> retrieve the css devices. >>> >>> This tests the success of STSCH I/O instruction, we do not test the >>> reaction of the VM for an instruction with wrong parameters. >>> >>> Signed-off-by: Pierre Morel <pmorel@xxxxxxxxxxxxx> >>> --- >>> s390x/Makefile | 1 + >>> s390x/css.c | 89 +++++++++++++++++++++++++++++++++++++++++++++ >>> s390x/unittests.cfg | 4 ++ >>> 3 files changed, 94 insertions(+) >>> create mode 100644 s390x/css.c >> >> (...) >> >>> +static void test_enumerate(void) >>> +{ >>> + struct pmcw *pmcw = &schib.pmcw; >>> + int cc; >>> + int scn; >>> + int scn_found = 0; >>> + int dev_found = 0; >>> + >>> + for (scn = 0; scn < 0xffff; scn++) { >>> + cc = stsch(scn|SID_ONE, &schib); >>> + switch (cc) { >>> + case 0: /* 0 means SCHIB stored */ >>> + break; >>> + case 3: /* 3 means no more channels */ >>> + goto out; >>> + default: /* 1 or 2 should never happened for STSCH */ >>> + report(0, "Unexpected cc=%d on subchannel number 0x%x", >>> + cc, scn); >>> + return; >>> + } >>> + >>> + /* We currently only support type 0, a.k.a. I/O channels */ >>> + if (PMCW_CHANNEL_TYPE(pmcw) != 0) >>> + continue; >>> + >>> + /* We ignore I/O channels without valid devices */ >>> + scn_found++; >>> + if (!(pmcw->flags & PMCW_DNV)) >>> + continue; >>> + >>> + /* We keep track of the first device as our test device */ >>> + if (!test_device_sid) >>> + test_device_sid = scn | SID_ONE; >>> + >>> + dev_found++; >>> + } >>> + >>> +out: >>> + report(dev_found, >>> + "Tested subchannels: %d, I/O subchannels: %d, I/O >>> devices: %d", >>> + scn, scn_found, dev_found); >> >> Just wondering: with the current invocation, you expect to find exactly >> one subchannel with a valid device, right? > ...snip... > >>> diff --git a/s390x/unittests.cfg b/s390x/unittests.cfg >>> index 07013b2..a436ec0 100644 >>> --- a/s390x/unittests.cfg >>> +++ b/s390x/unittests.cfg >>> @@ -83,3 +83,7 @@ extra_params = -m 1G >>> [sclp-3g] >>> file = sclp.elf >>> extra_params = -m 3G >>> + >>> +[css] >>> +file = css.elf >>> +extra_params =-device ccw-pong >> >> Hm... you could test enumeration even with a QEMU that does not include >> support for the pong device, right? Would it be worthwhile to split out >> a set of css tests that use e.g. a virtio-net-ccw device, and have a >> css-pong set of tests that require the pong device? >> > > Yes, you are right, using a virtio-net-ccw will allow to keep this test > without waiting for the PONG device to exist. > > @Thomas, what do you think? I will still have to figure something out > for PONG tests but here, it should be OK with virtio-net-ccw. Sure, sounds good. We can go with -device virtio-net-ccw for now, and then later add an additional entry a la: [css-pong] file = css.elf device = ccw-pong ... where the test scripts then check for the availability of the device first before starting the test? Thomas