[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [qemu-s390x] [Qemu-devel] [RFC PATCH v2 1/3] s390x/ccs: add ccw-test
From: |
Cornelia Huck |
Subject: |
Re: [qemu-s390x] [Qemu-devel] [RFC PATCH v2 1/3] s390x/ccs: add ccw-testdev emulated device |
Date: |
Thu, 7 Dec 2017 12:59:01 +0100 |
On Thu, 7 Dec 2017 07:33:19 +0100
Thomas Huth <address@hidden> wrote:
> On 08.11.2017 17:54, Halil Pasic wrote:
> > +static ccw_cb_t get_ccw_cb(CcwTestDevOpMode op_mode)
> > +{
> > + switch (op_mode) {
> > + case OP_MODE_FIB:
> > + return ccw_testdev_ccw_cb_mode_fib;
> > + case OP_MODE_NOP:
> > + default:
> > + return ccw_testdev_ccw_cb_mode_nop;
>
> Do we really want to use "nop" for unknown modes? Or should there rather
> be a ccw_testdev_ccw_cb_mode_error instead, too?
I like the idea of an error mode.
Related: Should the device have a mechanism to report the supported
modes?
>
> > + }
> > +}
(...)
> > +/* TODO This is the out-of-band variant. We may want to get rid of it */
>
> I agree, this should rather go away in the final version.
I'm not sure that the in-band variant with its magic buffer value is
superior to this version using a dedicated hypercall.
>
> > +static int set_mode_diag(const uint64_t *args)
> > +{
> > + uint64_t subch_id = args[0];
> > + uint64_t op_mode = args[1];
> > + SubchDev *sch;
> > + CcwTestDevDevice *dev;
> > + int cssid, ssid, schid, m;
> > +
> > + if (ioinst_disassemble_sch_ident(subch_id, &m, &cssid, &ssid, &schid))
> > {
> > + return -EINVAL;
> > + }
> > + sch = css_find_subch(m, cssid, ssid, schid);
> > + if (!sch || !css_subch_visible(sch)) {
> > + return -EINVAL;
> > + }
> > + dev = CCW_TESTDEV(sch->driver_data);
> > + if (dev->op_mode_locked) {
> > + return op_mode == dev->op_mode ? 0 : -EINVAL;
> > + }
> > + dev->op_mode = op_mode;
> > + sch->ccw_cb = get_ccw_cb(dev->op_mode);
> > + return 0;