[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v6 10/13] s390x/css: introduce and realize ccw-r
From: |
Cornelia Huck |
Subject: |
Re: [Qemu-devel] [PATCH v6 10/13] s390x/css: introduce and realize ccw-request callback |
Date: |
Wed, 3 May 2017 13:14:32 +0200 |
On Wed, 3 May 2017 10:18:50 +0800
Dong Jia Shi <address@hidden> wrote:
> * Cornelia Huck <address@hidden> [2017-05-02 18:04:07 +0200]:
>
> > On Tue, 2 May 2017 10:15:19 +0800
> > Dong Jia Shi <address@hidden> wrote:
> >
> > > * Auger Eric <address@hidden> [2017-05-01 19:28:23 +0200]:
> >
> > > > > 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.
> >
> > I think a channel-control check would be more appropriate here.
>
> Hi Conny,
>
> After reading PoP 14-43, I think you are right.
(...)
> So I decide to add this piece of code:
> if (size != vcdev->io_region_size) {
> /* Information transfer error, generate channel-control check. */
> s->ctrl &= ~SCSW_ACTL_START_PEND;
> s->cstat = SCSW_CSTAT_CHN_CTRL_CHK;
> s->ctrl &= ~SCSW_CTRL_MASK_STCTL;
> s->ctrl |= SCSW_STCTL_PRIMARY | SCSW_STCTL_SECONDARY |
> SCSW_STCTL_ALERT | SCSW_STCTL_STATUS_PEND;
> goto read_err;
> }
Looks good.