From: Eric Farman <farman@linux.ibm.com>
To: Auger Eric <eric.auger@redhat.com>,
Cornelia Huck <cohuck@redhat.com>,
Farhan Ali <alifm@linux.ibm.com>
Cc: qemu-s390x@nongnu.org, qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH] vfio-ccw: use vfio_set_irq_signaling
Date: Fri, 14 Jun 2019 11:41:41 -0400 [thread overview]
Message-ID: <e09fb36f-af61-f4bc-e525-ccdc0c08dce3@linux.ibm.com> (raw)
In-Reply-To: <5fd0fe9a-9f1e-15f1-b440-e3c505e6f3ea@redhat.com>
On 6/14/19 11:06 AM, Auger Eric wrote:
> Hi Eric,
>
> On 6/14/19 4:30 PM, Eric Farman wrote:
>>
>>
>> On 6/14/19 5:27 AM, Cornelia Huck wrote:
>>> Use the new helper.
>>>
>>> Signed-off-by: Cornelia Huck <cohuck@redhat.com>
>>> ---
>>> hw/vfio/ccw.c | 68 +++++++++++----------------------------------------
>>> 1 file changed, 14 insertions(+), 54 deletions(-)
>>>
>>> diff --git a/hw/vfio/ccw.c b/hw/vfio/ccw.c
>>> index 03a2becb3ec9..3dc08721a3db 100644
>>> --- a/hw/vfio/ccw.c
>>> +++ b/hw/vfio/ccw.c
>>> @@ -197,10 +197,7 @@ read_err:
>>> static void vfio_ccw_register_io_notifier(VFIOCCWDevice *vcdev, Error **errp)
>>> {
>>> VFIODevice *vdev = &vcdev->vdev;
>>> - struct vfio_irq_info *irq_info;
>>> - struct vfio_irq_set *irq_set;
>>> - size_t argsz;
>>> - int32_t *pfd;
>>> + int fd;
>>>
>>> if (vdev->num_irqs < VFIO_CCW_IO_IRQ_INDEX + 1) {
>>> error_setg(errp, "vfio: unexpected number of io irqs %u",
>>> @@ -208,72 +205,35 @@ static void vfio_ccw_register_io_notifier(VFIOCCWDevice *vcdev, Error **errp)
>>> return;
>>> }
>>>
>>> - argsz = sizeof(*irq_info);
>>> - irq_info = g_malloc0(argsz);
>>> - irq_info->index = VFIO_CCW_IO_IRQ_INDEX;
>>> - irq_info->argsz = argsz;
>>> - if (ioctl(vdev->fd, VFIO_DEVICE_GET_IRQ_INFO,
>>> - irq_info) < 0 || irq_info->count < 1) {
>>> - error_setg_errno(errp, errno, "vfio: Error getting irq info");
>>> - goto out_free_info;
>>> - }
>>> -
>>
>> Don't we still need this hunk? (And the out_free_info label stuff that
>> cleans it up.) I don't see vfio_set_irq_signaling() covering it.
>
> Looks this IRQ index is always implemented and exposed by the driver,
> isn't it? In such a case it shouldn't be needed to test its presence?
Right; if we were running on an old kernel, both ioctl's would fail the
same way since they were added concurrently. So the check today doesn't
seem very useful.
But since it's there, and we're taking it out, it got me wondering
whether there are/were intentions to expand GET_IRQ_INFO in the future.
I'm not aware of any reason vfio-ccw would need to, but want some
confirmation that I'm not overlooking anything.
Cheers,
Other Eric
>
> Thanks
>
> Eric
>>
>>> if (event_notifier_init(&vcdev->io_notifier, 0)) {
>>> error_setg_errno(errp, errno,
>>> "vfio: Unable to init event notifier for IO");
>>> - goto out_free_info;
>>> + return;
>>> }
>>>
>>> - argsz = sizeof(*irq_set) + sizeof(*pfd);
>>> - irq_set = g_malloc0(argsz);
>>> - irq_set->argsz = argsz;
>>> - irq_set->flags = VFIO_IRQ_SET_DATA_EVENTFD |
>>> - VFIO_IRQ_SET_ACTION_TRIGGER;
>>> - irq_set->index = VFIO_CCW_IO_IRQ_INDEX;
>>> - irq_set->start = 0;
>>> - irq_set->count = 1;
>>> - pfd = (int32_t *) &irq_set->data;
>>> -
>>> - *pfd = event_notifier_get_fd(&vcdev->io_notifier);
>>> - qemu_set_fd_handler(*pfd, vfio_ccw_io_notifier_handler, NULL, vcdev);
>>> - if (ioctl(vdev->fd, VFIO_DEVICE_SET_IRQS, irq_set)) {
>>> - error_setg(errp, "vfio: Failed to set up io notification");
>>> - qemu_set_fd_handler(*pfd, NULL, NULL, vcdev);
>>> + fd = event_notifier_get_fd(&vcdev->io_notifier);
>>> + qemu_set_fd_handler(fd, vfio_ccw_io_notifier_handler, NULL, vcdev);
>>> +
>>> + if (vfio_set_irq_signaling(vdev, VFIO_CCW_IO_IRQ_INDEX, 0,
>>> + VFIO_IRQ_SET_ACTION_TRIGGER, fd, errp)) {
>>> + qemu_set_fd_handler(fd, NULL, NULL, vcdev);
>>
>> This sure looks nice though. :)
>>
>>> event_notifier_cleanup(&vcdev->io_notifier);
>>> }
>>> -
>>> - g_free(irq_set);
>>> -
>>> -out_free_info:
>>> - g_free(irq_info);
>>> }
>>>
>>> static void vfio_ccw_unregister_io_notifier(VFIOCCWDevice *vcdev)
>>> {
>>> - struct vfio_irq_set *irq_set;
>>> - size_t argsz;
>>> - int32_t *pfd;
>>> -
>>> - argsz = sizeof(*irq_set) + sizeof(*pfd);
>>> - irq_set = g_malloc0(argsz);
>>> - irq_set->argsz = argsz;
>>> - irq_set->flags = VFIO_IRQ_SET_DATA_EVENTFD |
>>> - VFIO_IRQ_SET_ACTION_TRIGGER;
>>> - irq_set->index = VFIO_CCW_IO_IRQ_INDEX;
>>> - irq_set->start = 0;
>>> - irq_set->count = 1;
>>> - pfd = (int32_t *) &irq_set->data;
>>> - *pfd = -1;
>>> -
>>> - if (ioctl(vcdev->vdev.fd, VFIO_DEVICE_SET_IRQS, irq_set)) {
>>> - error_report("vfio: Failed to de-assign device io fd: %m");
>>> + Error *err = NULL;
>>> +
>>> + vfio_set_irq_signaling(&vcdev->vdev, VFIO_CCW_IO_IRQ_INDEX, 0,
>>> + VFIO_IRQ_SET_ACTION_TRIGGER, -1, &err);
>>> + if (err) {
>>> + error_reportf_err(err, VFIO_MSG_PREFIX, vcdev->vdev.name);
>>> }
>>>
>>> qemu_set_fd_handler(event_notifier_get_fd(&vcdev->io_notifier),
>>> NULL, NULL, vcdev);
>>> event_notifier_cleanup(&vcdev->io_notifier);
>>> -
>>> - g_free(irq_set);
>>> }
>>>
>>> static void vfio_ccw_get_region(VFIOCCWDevice *vcdev, Error **errp)
>>>
>>
>
next prev parent reply other threads:[~2019-06-14 15:56 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-06-14 9:27 [Qemu-devel] [PATCH] vfio-ccw: use vfio_set_irq_signaling Cornelia Huck
2019-06-14 13:28 ` Auger Eric
2019-06-14 14:30 ` Eric Farman
2019-06-14 15:06 ` Auger Eric
2019-06-14 15:41 ` Eric Farman [this message]
2019-06-17 9:58 ` Cornelia Huck
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=e09fb36f-af61-f4bc-e525-ccdc0c08dce3@linux.ibm.com \
--to=farman@linux.ibm.com \
--cc=alifm@linux.ibm.com \
--cc=cohuck@redhat.com \
--cc=eric.auger@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=qemu-s390x@nongnu.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).