From: Dong Jia Shi <bjsdjshi@linux.vnet.ibm.com>
To: Auger Eric <eric.auger@redhat.com>
Cc: Dong Jia Shi <bjsdjshi@linux.vnet.ibm.com>,
kvm@vger.kernel.org, linux-s390@vger.kernel.org,
qemu-devel@nongnu.org, borntraeger@de.ibm.com,
alex.williamson@redhat.com,
Xiao Feng Ren <renxiaof@linux.vnet.ibm.com>,
cornelia.huck@de.ibm.com, agraf@suse.com
Subject: Re: [Qemu-devel] [PATCH v6 10/13] s390x/css: introduce and realize ccw-request callback
Date: Tue, 2 May 2017 10:15:19 +0800 [thread overview]
Message-ID: <20170502021519.GA27968@bjsdjshi@linux.vnet.ibm.com> (raw)
In-Reply-To: <6a3e0621-9e16-ddd4-c1d9-2a7351ebb9e6@redhat.com>
* Auger Eric <eric.auger@redhat.com> [2017-05-01 19:28:23 +0200]:
Hi Eric,
> > diff --git a/hw/s390x/s390-ccw.h b/hw/s390x/s390-ccw.h
> > index b58d8e9..4e2fa65 100644
> > --- a/hw/s390x/s390-ccw.h
> > +++ b/hw/s390x/s390-ccw.h
> > @@ -27,6 +27,7 @@ typedef struct S390CCWDevice {
> > CcwDevice parent_obj;
> > CssDevId hostid;
> > char *mdevid;
> > + int (*handle_request) (ORB *, SCSW *, void *);
> shouldn't this callback be part of the class instead?
Ok. This sounds more proper.
>
> > } S390CCWDevice;
> >
> > typedef struct S390CCWDeviceClass {
> > diff --git a/hw/vfio/ccw.c b/hw/vfio/ccw.c
> > index cda3057..3ff78c5 100644
> > --- a/hw/vfio/ccw.c
> > +++ b/hw/vfio/ccw.c
> > @@ -47,6 +47,36 @@ struct VFIODeviceOps vfio_ccw_ops = {
> > .vfio_compute_needs_reset = vfio_ccw_compute_needs_reset,
> > };
> >
> > +static int vfio_ccw_handle_request(ORB *orb, SCSW *scsw, void *data)
> > +{
> > + S390CCWDevice *cdev = data;
> > + VFIOCCWDevice *vcdev = DO_UPCAST(VFIOCCWDevice, cdev, cdev);
> > + struct ccw_io_region *region = vcdev->io_region;
> > + int ret;
> > +
> > + QEMU_BUILD_BUG_ON(sizeof(region->orb_area) != sizeof(ORB));
> > + QEMU_BUILD_BUG_ON(sizeof(region->scsw_area) != sizeof(SCSW));
> > + QEMU_BUILD_BUG_ON(sizeof(region->irb_area) != sizeof(IRB));
> > +
> > + memset(region, 0, sizeof(*region));
> > +
> > + memcpy(region->orb_area, orb, sizeof(ORB));
> > + memcpy(region->scsw_area, scsw, sizeof(SCSW));
> > +
> > +again:
> > + ret = pwrite(vcdev->vdev.fd, region,
> > + vcdev->io_region_size, vcdev->io_region_offset);
> > + if (ret != vcdev->io_region_size) {
> > + if (errno == EAGAIN) {
> > + goto again;
> > + }
> > + error_report("vfio-ccw: wirte I/O region failed with errno=%d", errno);
> > + return -errno;
> > + }
> > +
> > + return region->ret_code;
> > +}
> > +
> > static void vfio_ccw_reset(DeviceState *dev)
> > {
> > CcwDevice *ccw_dev = DO_UPCAST(CcwDevice, parent_obj, dev);
> > @@ -59,10 +89,52 @@ static void vfio_ccw_reset(DeviceState *dev)
> > static void vfio_ccw_io_notifier_handler(void *opaque)
> > {
> > VFIOCCWDevice *vcdev = opaque;
> > + struct ccw_io_region *region = vcdev->io_region;
> > + S390CCWDevice *cdev = S390_CCW_DEVICE(vcdev);
> > + CcwDevice *ccw_dev = CCW_DEVICE(cdev);
> > + SubchDev *sch = ccw_dev->sch;
> > + SCSW *s = &sch->curr_status.scsw;
> > + IRB irb;
> >
> > if (!event_notifier_test_and_clear(&vcdev->io_notifier)) {
> > return;
> > }
> > +
> > + if (pread(vcdev->vdev.fd, region,
> > + vcdev->io_region_size, vcdev->io_region_offset) == -1) {
> is it possible to read less bytes than requested?
Currently, impossible. The kernel side returns either the full region,
or an error.
But we surely could make it more friendly for a partial return. I will
add a check for that case, and generate a channel program check for it.
>
> Thanks
>
> Eric
> > + switch (errno) {
> > + case ENODEV:
> > + /* Generate a deferred cc 3 condition. */
> > + s->flags |= SCSW_FLAGS_MASK_CC;
> > + s->ctrl &= ~SCSW_CTRL_MASK_STCTL;
> > + s->ctrl |= (SCSW_STCTL_ALERT | SCSW_STCTL_STATUS_PEND);
> > + goto read_err;
> > + case EFAULT:
> > + /* memory problem, generate channel data check */
> > + s->ctrl &= ~SCSW_ACTL_START_PEND;
> > + s->cstat = SCSW_CSTAT_DATA_CHECK;
> > + s->ctrl &= ~SCSW_CTRL_MASK_STCTL;
> > + s->ctrl |= SCSW_STCTL_PRIMARY | SCSW_STCTL_SECONDARY |
> > + SCSW_STCTL_ALERT | SCSW_STCTL_STATUS_PEND;
> > + goto read_err;
> > + default:
> > + /* error, generate channel program check */
> > + s->ctrl &= ~SCSW_ACTL_START_PEND;
> > + s->cstat = SCSW_CSTAT_PROG_CHECK;
> > + s->ctrl &= ~SCSW_CTRL_MASK_STCTL;
> > + s->ctrl |= SCSW_STCTL_PRIMARY | SCSW_STCTL_SECONDARY |
> > + SCSW_STCTL_ALERT | SCSW_STCTL_STATUS_PEND;
> > + goto read_err;
> > + }
> > + }
> > +
> > + memcpy(&irb, region->irb_area, sizeof(IRB));
> > +
> > + /* Update control block via irb. */
> > + copy_scsw_to_guest(s, &irb.scsw);
> > +
> > +read_err:
> > + css_inject_io_interrupt(sch);
> > }
> >
> > static void vfio_ccw_register_io_notifier(VFIOCCWDevice *vcdev, Error **errp)
[...]
--
Dong Jia Shi
next prev parent reply other threads:[~2017-05-02 2:15 UTC|newest]
Thread overview: 45+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-04-28 13:09 [PATCH v6 00/13] basic channel IO passthrough infrastructure based on vfio Dong Jia Shi
2017-04-28 13:09 ` [Qemu-devel] " Dong Jia Shi
2017-04-28 13:09 ` [PATCH v6 01/13] update-linux-headers: update for vfio-ccw Dong Jia Shi
2017-04-28 13:09 ` [Qemu-devel] " Dong Jia Shi
2017-04-28 13:09 ` [PATCH v6 02/13] vfio: linux-headers " Dong Jia Shi
2017-04-28 13:09 ` [Qemu-devel] " Dong Jia Shi
2017-04-28 13:09 ` [PATCH v6 03/13] s390x/css: add s390-squash-mcss machine option Dong Jia Shi
2017-04-28 13:09 ` [Qemu-devel] " Dong Jia Shi
2017-04-28 13:09 ` [PATCH v6 04/13] s390x/css: realize css_sch_build_schib Dong Jia Shi
2017-04-28 13:09 ` [Qemu-devel] " Dong Jia Shi
2017-04-28 13:09 ` [PATCH v6 05/13] s390x/css: realize css_create_sch Dong Jia Shi
2017-04-28 13:09 ` [Qemu-devel] " Dong Jia Shi
2017-04-28 13:09 ` [PATCH v6 06/13] s390x/css: device support for s390-ccw passthrough Dong Jia Shi
2017-04-28 13:09 ` [Qemu-devel] " Dong Jia Shi
2017-05-01 11:08 ` Auger Eric
2017-05-02 2:37 ` Dong Jia Shi
2017-05-01 11:20 ` Auger Eric
2017-05-01 11:24 ` Auger Eric
2017-04-28 13:09 ` [PATCH v6 07/13] vfio/ccw: vfio based subchannel passthrough driver Dong Jia Shi
2017-04-28 13:09 ` [Qemu-devel] " Dong Jia Shi
2017-05-01 11:08 ` Auger Eric
2017-05-02 5:07 ` Dong Jia Shi
2017-05-02 6:48 ` Auger Eric
2017-04-28 13:09 ` [PATCH v6 08/13] vfio/ccw: get io region info Dong Jia Shi
2017-04-28 13:09 ` [Qemu-devel] " Dong Jia Shi
2017-05-01 11:08 ` Auger Eric
2017-05-02 5:16 ` Dong Jia Shi
2017-04-28 13:09 ` [PATCH v6 09/13] vfio/ccw: get irqs info and set the eventfd fd Dong Jia Shi
2017-04-28 13:09 ` [Qemu-devel] " Dong Jia Shi
2017-05-01 11:08 ` Auger Eric
2017-05-02 5:37 ` Dong Jia Shi
2017-05-02 6:49 ` Dong Jia Shi
2017-04-28 13:09 ` [PATCH v6 10/13] s390x/css: introduce and realize ccw-request callback Dong Jia Shi
2017-04-28 13:09 ` [Qemu-devel] " Dong Jia Shi
2017-05-01 17:28 ` Auger Eric
2017-05-02 2:15 ` Dong Jia Shi [this message]
2017-05-02 16:04 ` Cornelia Huck
2017-05-03 2:18 ` Dong Jia Shi
2017-05-03 11:14 ` Cornelia Huck
2017-04-28 13:09 ` [PATCH v6 11/13] s390x/css: ccw translation infrastructure Dong Jia Shi
2017-04-28 13:09 ` [Qemu-devel] " Dong Jia Shi
2017-04-28 13:09 ` [PATCH v6 12/13] vfio/ccw: update sense data if a unit check is pending Dong Jia Shi
2017-04-28 13:09 ` [Qemu-devel] " Dong Jia Shi
2017-04-28 13:09 ` [PATCH v6 13/13] MAINTAINERS: Add vfio-ccw maintainer Dong Jia Shi
2017-04-28 13:09 ` [Qemu-devel] " Dong Jia Shi
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=20170502021519.GA27968@bjsdjshi@linux.vnet.ibm.com \
--to=bjsdjshi@linux.vnet.ibm.com \
--cc=agraf@suse.com \
--cc=alex.williamson@redhat.com \
--cc=borntraeger@de.ibm.com \
--cc=cornelia.huck@de.ibm.com \
--cc=eric.auger@redhat.com \
--cc=kvm@vger.kernel.org \
--cc=linux-s390@vger.kernel.org \
--cc=qemu-devel@nongnu.org \
--cc=renxiaof@linux.vnet.ibm.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.