From: Dong Jia Shi <bjsdjshi@linux.vnet.ibm.com>
To: Alex Williamson <alex.williamson@redhat.com>
Cc: Dong Jia Shi <bjsdjshi@linux.vnet.ibm.com>,
kvm@vger.kernel.org, linux-s390@vger.kernel.org,
qemu-devel@nongnu.org, renxiaof@linux.vnet.ibm.com,
cornelia.huck@de.ibm.com, borntraeger@de.ibm.com, agraf@suse.com,
pmorel@linux.vnet.ibm.com, pasic@linux.vnet.ibm.com,
wkywang@linux.vnet.ibm.com
Subject: Re: [Qemu-devel] [PATCH RFC v2 08/12] vfio/ccw: get io region info
Date: Wed, 18 Jan 2017 13:22:56 +0800 [thread overview]
Message-ID: <20170118052256.GP30301@bjsdjshi@linux.vnet.ibm.com> (raw)
In-Reply-To: <20170117154934.568c6ea3@t450s.home>
* Alex Williamson <alex.williamson@redhat.com> [2017-01-17 15:49:34 -0700]:
> On Thu, 12 Jan 2017 08:25:09 +0100
> Dong Jia Shi <bjsdjshi@linux.vnet.ibm.com> wrote:
>
> > vfio-ccw provides an MMIO region for I/O operations. We fetch its
> > information via ioctls here, then we can use it performing I/O
> > instructions and retrieving I/O results later on.
> >
> > Signed-off-by: Xiao Feng Ren <renxiaof@linux.vnet.ibm.com>
> > ---
> > hw/vfio/ccw.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++
> > 1 file changed, 52 insertions(+)
> >
> > diff --git a/hw/vfio/ccw.c b/hw/vfio/ccw.c
> > index 881010b..93394c2 100644
> > --- a/hw/vfio/ccw.c
> > +++ b/hw/vfio/ccw.c
> > @@ -21,11 +21,15 @@
> > #include "hw/vfio/vfio-common.h"
> > #include "hw/s390x/s390-ccw.h"
> > #include "hw/s390x/ccw-device.h"
> > +#include "standard-headers/asm-s390/vfio_ccw.h"
> >
> > #define TYPE_VFIO_CCW "vfio-ccw"
> > typedef struct VFIOCCWDevice {
> > S390CCWDevice cdev;
> > VFIODevice vdev;
> > + uint64_t io_region_size;
> > + uint64_t io_region_offset;
> > + struct ccw_io_region *io_region;
> > } VFIOCCWDevice;
> >
> > static void vfio_ccw_compute_needs_reset(VFIODevice *vdev)
> > @@ -50,6 +54,46 @@ static void vfio_ccw_reset(DeviceState *dev)
> > ioctl(vcdev->vdev.fd, VFIO_DEVICE_RESET);
> > }
> >
> > +static void vfio_ccw_get_region(VFIOCCWDevice *vcdev, Error **errp)
> > +{
> > + VFIODevice *vdev = &vcdev->vdev;
> > + struct vfio_region_info *info;
> > + int ret;
> > +
> > + /* Sanity check device */
> > + if (!(vdev->flags & VFIO_DEVICE_FLAGS_CCW)) {
> > + error_setg(errp, "vfio: Um, this isn't a vfio-ccw device");
> > + return;
> > + }
> > +
> > + if (vdev->num_regions != VFIO_CCW_NUM_REGIONS) {
> > + error_setg(errp, "vfio: Unexpected number of the I/O region %u",
> > + vdev->num_regions);
> > + return;
> > + }
>
> I think you want < here, not !=, otherwise you we can never add another
> region to describe something new on a vfio-ccw device without breaking
> this code. You've defined in the uapi that region index zero is always
> VFIO_CCW_CONFIG_REGION_INDEX and this code only depends on that, no
> matter what additional regions might be added. That's done below.
>
Right! Thanks for pointing out. I will fix.
> > +
> > + ret = vfio_get_region_info(vdev, VFIO_CCW_CONFIG_REGION_INDEX, &info);
> > + if (ret) {
> > + error_setg(errp, "vfio: Error getting config info: %d", ret);
> > + return;
> > + }
> > +
> > + vcdev->io_region_size = info->size;
> > + if (sizeof(*vcdev->io_region) != vcdev->io_region_size) {
> > + error_setg(errp, "vfio: Unexpected size of the I/O region");
> > + return;
> > + }
> > + vcdev->io_region_offset = info->offset;
> > + vcdev->io_region = g_malloc0(info->size);
> > +
> > + g_free(info);
> > +}
> > +
> > +static void vfio_ccw_put_region(VFIOCCWDevice *vcdev)
> > +{
> > + g_free(vcdev->io_region);
> > +}
> > +
> > static void vfio_put_device(VFIOCCWDevice *vcdev)
> > {
> > g_free(vcdev->vdev.name);
> > @@ -144,8 +188,15 @@ static void vfio_ccw_realize(DeviceState *dev, Error **errp)
> > goto out_device_err;
> > }
> >
> > + vfio_ccw_get_region(vcdev, errp);
> > + if (*errp) {
> > + goto out_region_err;
> > + }
> > +
> > return;
> >
> > +out_region_err:
> > + vfio_put_device(vcdev);
> > out_device_err:
> > vfio_ccw_put_group(group, path);
> > out_group_err:
> > @@ -166,6 +217,7 @@ static void vfio_ccw_unrealize(DeviceState *dev, Error **errp)
> > cdc->unrealize(cdev, errp);
> > }
> >
> > + vfio_ccw_put_region(vcdev);
> > vfio_put_device(vcdev);
> > vfio_put_group(group);
> > }
>
--
Dong Jia
next prev parent reply other threads:[~2017-01-18 5:23 UTC|newest]
Thread overview: 55+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-01-12 7:25 [PATCH RFC v2 00/12] basic channel IO passthrough infrastructure based on vfio Dong Jia Shi
2017-01-12 7:25 ` [Qemu-devel] " Dong Jia Shi
2017-01-12 7:25 ` [PATCH RFC v2 01/12] update-linux-headers: add asm-s390/vfio_ccw.h Dong Jia Shi
2017-01-12 7:25 ` [Qemu-devel] " Dong Jia Shi
2017-01-12 7:25 ` [PATCH RFC v2 02/12] vfio: linux-headers update for vfio-ccw Dong Jia Shi
2017-01-12 7:25 ` [Qemu-devel] " Dong Jia Shi
2017-01-17 21:51 ` Alex Williamson
2017-01-17 21:51 ` [Qemu-devel] " Alex Williamson
2017-01-18 2:51 ` Dong Jia Shi
2017-01-18 12:41 ` Cornelia Huck
2017-01-18 12:41 ` [Qemu-devel] " Cornelia Huck
2017-01-18 20:43 ` Alex Williamson
2017-01-18 20:43 ` [Qemu-devel] " Alex Williamson
2017-01-19 1:54 ` Dong Jia Shi
2017-01-19 1:54 ` [Qemu-devel] " Dong Jia Shi
2017-01-18 2:51 ` Dong Jia Shi
2017-01-12 7:25 ` [PATCH RFC v2 03/12] s390x/css: add s390-map-css machine option Dong Jia Shi
2017-01-12 7:25 ` [Qemu-devel] " Dong Jia Shi
2017-02-17 2:08 ` Dong Jia Shi
2017-02-17 2:08 ` [Qemu-devel] " Dong Jia Shi
2017-01-12 7:25 ` [PATCH RFC v2 04/12] s390x/css: realize css_sch_build_schib Dong Jia Shi
2017-01-12 7:25 ` [Qemu-devel] " Dong Jia Shi
2017-01-12 7:25 ` [PATCH RFC v2 05/12] s390x/css: realize css_create_sch Dong Jia Shi
2017-01-12 7:25 ` [Qemu-devel] " Dong Jia Shi
2017-01-12 7:25 ` [PATCH RFC v2 06/12] s390x/css: device support for s390-ccw passthrough Dong Jia Shi
2017-01-12 7:25 ` [Qemu-devel] " Dong Jia Shi
2017-01-12 7:25 ` [PATCH RFC v2 07/12] vfio/ccw: vfio based subchannel passthrough driver Dong Jia Shi
2017-01-12 7:25 ` [Qemu-devel] " Dong Jia Shi
2017-01-17 22:49 ` Alex Williamson
2017-01-17 22:49 ` [Qemu-devel] " Alex Williamson
2017-01-18 3:22 ` Dong Jia Shi
2017-01-18 3:22 ` Dong Jia Shi
2017-01-12 7:25 ` [PATCH RFC v2 08/12] vfio/ccw: get io region info Dong Jia Shi
2017-01-12 7:25 ` [Qemu-devel] " Dong Jia Shi
2017-01-17 22:49 ` Alex Williamson
2017-01-17 22:49 ` [Qemu-devel] " Alex Williamson
2017-01-18 5:22 ` Dong Jia Shi [this message]
2017-01-18 5:51 ` Dong Jia Shi
2017-01-18 5:51 ` Dong Jia Shi
2017-01-18 5:22 ` Dong Jia Shi
2017-01-12 7:25 ` [PATCH RFC v2 09/12] vfio/ccw: get irqs info and set the eventfd fd Dong Jia Shi
2017-01-12 7:25 ` [Qemu-devel] " Dong Jia Shi
2017-01-17 22:53 ` Alex Williamson
2017-01-17 22:53 ` [Qemu-devel] " Alex Williamson
2017-01-18 5:55 ` Dong Jia Shi
2017-01-18 5:55 ` Dong Jia Shi
2017-01-12 7:25 ` [PATCH RFC v2 10/12] s390x/css: introduce and realize ccw-request callback Dong Jia Shi
2017-01-12 7:25 ` [Qemu-devel] " Dong Jia Shi
2017-01-12 7:25 ` [PATCH RFC v2 11/12] s390x/css: ccws translation infrastructure Dong Jia Shi
2017-01-12 7:25 ` [Qemu-devel] " Dong Jia Shi
2017-01-12 7:25 ` [PATCH RFC v2 12/12] vfio/ccw: update sense data if a unit check is pending Dong Jia Shi
2017-01-12 7:25 ` [Qemu-devel] " Dong Jia Shi
2017-01-12 8:00 ` [Qemu-devel] [PATCH RFC v2 00/12] basic channel IO passthrough infrastructure based on vfio no-reply
2017-01-12 8:00 ` no-reply
2017-01-12 8:00 ` no-reply
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=20170118052256.GP30301@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=kvm@vger.kernel.org \
--cc=linux-s390@vger.kernel.org \
--cc=pasic@linux.vnet.ibm.com \
--cc=pmorel@linux.vnet.ibm.com \
--cc=qemu-devel@nongnu.org \
--cc=renxiaof@linux.vnet.ibm.com \
--cc=wkywang@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.