From: Cornelia Huck <cohuck@redhat.com>
To: Pierre Morel <pmorel@linux.ibm.com>
Cc: kvm@vger.kernel.org, linux-s390@vger.kernel.org,
frankja@linux.ibm.com, david@redhat.com, thuth@redhat.com
Subject: Re: [kvm-unit-tests PATCH v7 11/12] s390x: css: ssch/tsch with sense and interrupt
Date: Wed, 27 May 2020 12:09:05 +0200 [thread overview]
Message-ID: <20200527120905.5fb20a4e.cohuck@redhat.com> (raw)
In-Reply-To: <1589818051-20549-12-git-send-email-pmorel@linux.ibm.com>
On Mon, 18 May 2020 18:07:30 +0200
Pierre Morel <pmorel@linux.ibm.com> wrote:
> We add a new css_lib file to contain the I/O functions we may
> share with different tests.
> First function is the subchannel_enable() function.
>
> When a channel is enabled we can start a SENSE_ID command using
> the SSCH instruction to recognize the control unit and device.
>
> This tests the success of SSCH, the I/O interruption and the TSCH
> instructions.
>
> The test expects a device with a control unit type of 0xC0CA as the
> first subchannel of the CSS.
It might make sense to extend this to be able to check for any expected
type (e.g. 0x3832, should my suggestion to split css tests and css-pong
tests make sense.)
>
> Signed-off-by: Pierre Morel <pmorel@linux.ibm.com>
> ---
> lib/s390x/css.h | 20 ++++++
> lib/s390x/css_lib.c | 55 +++++++++++++++++
> s390x/Makefile | 1 +
> s390x/css.c | 145 ++++++++++++++++++++++++++++++++++++++++++++
> 4 files changed, 221 insertions(+)
> create mode 100644 lib/s390x/css_lib.c
(...)
> +int enable_subchannel(unsigned int sid)
> +{
> + struct schib schib;
> + struct pmcw *pmcw = &schib.pmcw;
> + int try_count = 5;
> + int cc;
> +
> + if (!(sid & SID_ONE))
> + return -1;
Hm... this error is indistinguishable for the caller from a cc 1 for
the msch. Use something else (as this is a coding error)?
> +
> + cc = stsch(sid, &schib);
> + if (cc)
> + return -cc;
> +
> + do {
> + pmcw->flags |= PMCW_ENABLE;
> +
> + cc = msch(sid, &schib);
> + if (cc)
> + return -cc;
> +
> + cc = stsch(sid, &schib);
> + if (cc)
> + return -cc;
> +
> + } while (!(pmcw->flags & PMCW_ENABLE) && --try_count);
> +
> + return try_count;
How useful is that information for the caller? I don't see the code
below making use of it.
> +}
> +
> +int start_ccw1_chain(unsigned int sid, struct ccw1 *ccw)
> +{
> + struct orb orb;
> +
> + orb.intparm = sid;
Just an idea: If you use something else here (maybe the cpa), and set
the intparm to the sid in msch, you can test something else: Does msch
properly set the intparm, and is that intparm overwritten by a
successful ssch, until the next ssch or msch comes around?
> + orb.ctrl = ORB_F_INIT_IRQ|ORB_F_FORMAT|ORB_F_LPM_DFLT;
> + orb.cpa = (unsigned int) (unsigned long)ccw;
Use a struct initializer, so that unset fields are 0?
> +
> + return ssch(sid, &orb);
> +}
(...)
> +/*
> + * test_sense
> + * Pre-requisits:
> + * - We need the QEMU PONG device as the first recognized
> + * device by the enumeration.
> + * - ./s390x-run s390x/css.elf -device ccw-pong,cu_type=0xc0ca
> + */
> +static void test_sense(void)
> +{
> + int ret;
> +
> + if (!test_device_sid) {
> + report_skip("No device");
> + return;
> + }
> +
> + ret = enable_subchannel(test_device_sid);
> + if (ret < 0) {
> + report(0,
> + "Could not enable the subchannel: %08x",
> + test_device_sid);
> + return;
> + }
> +
> + ret = register_io_int_func(irq_io);
> + if (ret) {
> + report(0, "Could not register IRQ handler");
> + goto unreg_cb;
> + }
> +
> + lowcore->io_int_param = 0;
> +
> + ret = start_subchannel(CCW_CMD_SENSE_ID, &senseid, sizeof(senseid),
> + CCW_F_SLI);
Clear senseid, before actually sending the program?
> + if (!ret) {
> + report(0, "ssch failed for SENSE ID on sch %08x",
> + test_device_sid);
> + goto unreg_cb;
> + }
> +
> + wait_for_interrupt(PSW_MASK_IO);
> +
> + if (lowcore->io_int_param != test_device_sid)
> + goto unreg_cb;
> +
> + report_info("reserved %02x cu_type %04x cu_model %02x dev_type %04x dev_model %02x",
> + senseid.reserved, senseid.cu_type, senseid.cu_model,
> + senseid.dev_type, senseid.dev_model);
> +
I'd also recommend checking that senseid.reserved is indeed 0xff -- in
combination with senseid clearing before the ssch, that ensures that
the senseid structure has actually been written to and is not pure
garbage. (It's also a cu type agnostic test :)
It also might make sense to check how much data you actually got, as
you set SLI.
> + report((senseid.cu_type == PONG_CU),
> + "cu_type: expect 0x%04x got 0x%04x",
> + PONG_CU_TYPE, senseid.cu_type);
> +
> +unreg_cb:
> + unregister_io_int_func(irq_io);
> +}
> +
> static struct {
> const char *name;
> void (*func)(void);
> } tests[] = {
> { "enumerate (stsch)", test_enumerate },
> { "enable (msch)", test_enable },
> + { "sense (ssch/tsch)", test_sense },
> { NULL, NULL }
> };
>
> @@ -145,6 +289,7 @@ int main(int argc, char *argv[])
> int i;
>
> report_prefix_push("Channel Subsystem");
> + enable_io_isc();
> for (i = 0; tests[i].name; i++) {
> report_prefix_push(tests[i].name);
> tests[i].func();
next prev parent reply other threads:[~2020-05-27 10:09 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-05-18 16:07 [kvm-unit-tests PATCH v7 00/12] s390x: Testing the Channel Subsystem I/O Pierre Morel
2020-05-18 16:07 ` [kvm-unit-tests PATCH v7 01/12] s390x: saving regs for interrupts Pierre Morel
2020-05-26 10:30 ` Janosch Frank
2020-05-26 11:39 ` Pierre Morel
2020-05-18 16:07 ` [kvm-unit-tests PATCH v7 02/12] s390x: Use PSW bits definitions in cstart Pierre Morel
2020-05-26 10:17 ` Janosch Frank
2020-05-26 11:40 ` Pierre Morel
2020-05-18 16:07 ` [kvm-unit-tests PATCH v7 03/12] s390x: Move control register bit definitions and add AFP to them Pierre Morel
2020-05-25 18:57 ` Thomas Huth
2020-05-26 11:51 ` Pierre Morel
2020-05-18 16:07 ` [kvm-unit-tests PATCH v7 04/12] s390x: interrupt registration Pierre Morel
2020-05-26 18:08 ` Thomas Huth
2020-05-27 15:54 ` Pierre Morel
2020-05-18 16:07 ` [kvm-unit-tests PATCH v7 05/12] s390x: export the clock get_clock_ms() utility Pierre Morel
2020-05-26 18:10 ` Thomas Huth
2020-06-04 6:49 ` Pierre Morel
2020-05-18 16:07 ` [kvm-unit-tests PATCH v7 06/12] s390x: use get_clock_ms() to calculate a delay in ms Pierre Morel
2020-05-26 18:16 ` Thomas Huth
2020-06-04 7:21 ` Pierre Morel
2020-05-18 16:07 ` [kvm-unit-tests PATCH v7 07/12] s390x: Library resources for CSS tests Pierre Morel
2020-05-26 16:30 ` Cornelia Huck
2020-06-04 7:42 ` Pierre Morel
2020-05-18 16:07 ` [kvm-unit-tests PATCH v7 08/12] s390x: css: stsch, enumeration test Pierre Morel
2020-05-25 19:12 ` Thomas Huth
2020-05-26 10:41 ` Janosch Frank
2020-05-26 10:49 ` Thomas Huth
2020-05-26 11:38 ` Pierre Morel
2020-05-27 8:55 ` Cornelia Huck
2020-06-04 11:35 ` Pierre Morel
2020-06-04 11:45 ` Thomas Huth
2020-06-04 12:27 ` Pierre Morel
2020-05-18 16:07 ` [kvm-unit-tests PATCH v7 09/12] s390x: css: msch, enable test Pierre Morel
2020-05-27 9:42 ` Cornelia Huck
2020-06-04 12:46 ` Pierre Morel
2020-06-04 13:29 ` Cornelia Huck
2020-06-05 7:37 ` Pierre Morel
2020-06-05 8:24 ` Pierre Morel
2020-06-05 9:00 ` Cornelia Huck
2020-05-18 16:07 ` [kvm-unit-tests PATCH v7 10/12] s390x: define function to wait for interrupt Pierre Morel
2020-05-26 10:42 ` Janosch Frank
2020-05-26 11:40 ` Pierre Morel
2020-05-27 9:45 ` Cornelia Huck
2020-06-04 12:47 ` Pierre Morel
2020-05-18 16:07 ` [kvm-unit-tests PATCH v7 11/12] s390x: css: ssch/tsch with sense and interrupt Pierre Morel
2020-05-27 10:09 ` Cornelia Huck [this message]
2020-06-05 7:37 ` Pierre Morel
2020-06-05 9:02 ` Cornelia Huck
2020-05-18 16:07 ` [kvm-unit-tests PATCH v7 12/12] s390x: css: ping pong Pierre Morel
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=20200527120905.5fb20a4e.cohuck@redhat.com \
--to=cohuck@redhat.com \
--cc=david@redhat.com \
--cc=frankja@linux.ibm.com \
--cc=kvm@vger.kernel.org \
--cc=linux-s390@vger.kernel.org \
--cc=pmorel@linux.ibm.com \
--cc=thuth@redhat.com \
/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.