From: Vlad Zolotarov <vladz@cloudius-systems.com>
To: Greg KH <gregkh@linuxfoundation.org>
Cc: linux-kernel@vger.kernel.org, mst@redhat.com, hjk@hansjkoch.de,
corbet@lwn.net, bruce.richardson@intel.com,
avi@cloudius-systems.com, gleb@cloudius-systems.com,
stephen@networkplumber.org, alexander.duyck@gmail.com
Subject: Re: [PATCH v3 1/3] uio: add ioctl support
Date: Mon, 5 Oct 2015 13:36:35 +0300 [thread overview]
Message-ID: <561252B3.4000406@cloudius-systems.com> (raw)
In-Reply-To: <20151005080149.GB1747@kroah.com>
On 10/05/15 11:01, Greg KH wrote:
> On Mon, Oct 05, 2015 at 10:33:20AM +0300, Vlad Zolotarov wrote:
>> On 10/05/15 06:03, Greg KH wrote:
>>> On Sun, Oct 04, 2015 at 11:43:16PM +0300, Vlad Zolotarov wrote:
>>>> Signed-off-by: Vlad Zolotarov <vladz@cloudius-systems.com>
>>>> ---
>>>> drivers/uio/uio.c | 15 +++++++++++++++
>>>> include/linux/uio_driver.h | 3 +++
>>>> 2 files changed, 18 insertions(+)
>>> You add an ioctl yet fail to justify _why_ you need/want that ioctl, and
>>> you don't document it at all? Come on, you know better than that, no
>>> one can take a patch that has no changelog comments at all like this :(
>> My bad. U are absolutely right here - it was late and I was tired that I
>> missed that to someone it may not be so "crystal clear" like it is to me...
>> :)
>> Again, my bad - let me clarify it here and if we agree I'll respin the
>> series with all relevant updates including the changelog.
>>
>>> Also, I _REALLY_ don't want to add any ioctls to the UIO interface, so
>>> you had better have a really compelling argument as to why this is the
>>> _ONLY_ way you can solve this unknown problem by using such a horrid
>>> thing...
>> Pls., note that this doesn't _ADD_ any ioctls directly to UIO driver, but
>> only lets the underlying PCI drivers to have them. UIO in this case is only
>> a proxy.
> Exactly, and I don't want to provide an ioctl "proxy" for UIO drivers.
> That way lies madness and horrid code, and other nasty things (hint,
> each ioctl is a custom syscall, so you are opening up the box for all
> sorts of bad things to happen in drivers...)
>
> For example, your ioctl you use here is incorrect, and will fail
> horribly on a large majority of systems. I don't want to open up the
> requirements that more people have to know how to "do it right" in order
> to use the UIO interface for their drivers, as people will get it wrong
> (as this patch series shows...)
Sometimes there is no other (better) way to get things done. And bugs -
isn't it what code review is for? ;)
I'll fix the "int" issue.
>
>> The main idea of this series is, as mentioned in PATCH0, to add the MSI and
>> MSI-X support for uio_pci_generic driver.
> Yes, I know that, but I don't see anything that shows _how_ to use this
> api.
I get that, i'll extend PATCH3 of this series with a detailed
description in v4.
U use it as follows:
1. Bind the PCI function to uio_pci_generic.
2. Query for its interrupt mode with UIO_PCI_GENERIC_INT_MODE_GET ioctl.
3. If interrupt mode is INT#x or MSI - use the current UIO interface
for polling, namely use the UIO file descriptor.
4. Else
1. Query for the number of MSI-X vectors with
UIO_PCI_GENERIC_IRQ_NUM_GET ioctl.
2. Allocate the required number of eventfd descriptors using
eventfd() from sys/eventfd.h.
3. Bind them to the required IRQs with UIO_PCI_GENERIC_IRQ_SET ioctl.
5. When done, just unbind the PCI function from the uio_pci_generic.
> And then there's the issue of why we even need this, why not just
> write a whole new driver for this, like the previous driver did (which
> also used ioctls, yes, I didn't have the chance to object to that before
> everyone else did...)
Which "previous driver" do u refer here?
IMHO writing something instead of UIO (not just uio_pci_generic) seems
like an overkill for solving this issue. Supporting MSI-X interrupts
seem like a very beneficial feature for uio_pci_generic and it's really
not _THAT_ complicated API - just look at VFIO for a comparison... ;)
uio_pci_generic is clearly missing this important feature. And creating
another user space driver infrastructure just to add it seems extremely
unjustified.
>
>> While with MSI the things are quite simple and we may just ride the existing
>> infrastructure, with the MSI-X the things get a bit more complicated since
>> we may have more than one interrupt vector. Therefore we have to decide
>> which interface we want to give to the user.
>>
>> One option could be to make all existing interrupts trigger the same objects
>> in UIO as the current single interrupt does, however this would create an
>> awkward, quite not-flexible semantics. For instance a regular (kernel)
>> driver has a separate state machine for each interrupt line, which sometimes
>> runs on a separate CPU, etc. This way we get to the second option - allow
>> indication for each separate interrupt vector. And for obvious reasons
>> (mentioned above) we (Stephen has sent a similar series on a dpdk-dev list)
>> chose a second approach.
>>
>> In order not to invent the wheel we mimicked the VFIO approach, which allows
>> to bind the pre-allocated eventfd descriptor to the specific interrupt
>> vector using the ioctl().
>>
>> The interface is simple. The UIO_PCI_GENERIC_IRQ_SET ioctl() data is:
>>
>> struct uio_pci_generic_irq_set {
>> int vec; /* index of the IRQ to connect to starting from 0 */
>> int fd;
>> };
> And that's broken :(
Good catch. Thanks. Will fix.
I'm not a big ioctl fan myself but unfortunately I don't see a good
alternative here. proc? Would it make it cleaner?
>
> NEVER use an "int" for an ioctl, it is wrong and will cause horrible
> issues on a large number of systems. That is what the __u16 and friends
> variable types are for. You know better than this :)
>
> greg k-h
next prev parent reply other threads:[~2015-10-05 10:36 UTC|newest]
Thread overview: 96+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-10-04 20:43 [PATCH v3 0/3] uio: add MSI/MSI-X support to uio_pci_generic driver Vlad Zolotarov
2015-10-04 20:43 ` [PATCH v3 1/3] uio: add ioctl support Vlad Zolotarov
2015-10-05 3:03 ` Greg KH
2015-10-05 7:33 ` Vlad Zolotarov
2015-10-05 8:01 ` Greg KH
2015-10-05 10:36 ` Vlad Zolotarov [this message]
2015-10-05 20:02 ` Michael S. Tsirkin
[not found] ` <CAOYyTHZ2=UCYxuJKvd5S6qxp=84DBq5bMadg5wL0rFLZBh2-8Q@mail.gmail.com>
2015-10-05 22:29 ` Michael S. Tsirkin
2015-10-06 8:33 ` Vlad Zolotarov
2015-10-06 14:19 ` Michael S. Tsirkin
2015-10-06 14:30 ` Gleb Natapov
2015-10-06 15:19 ` Michael S. Tsirkin
2015-10-06 15:31 ` Vlad Zolotarov
2015-10-06 15:57 ` Gleb Natapov
2015-10-04 20:43 ` [PATCH v3 2/3] uio_pci_generic: add MSI/MSI-X support Vlad Zolotarov
2015-10-05 3:11 ` Greg KH
2015-10-05 7:41 ` Vlad Zolotarov
2015-10-05 7:56 ` Greg KH
2015-10-05 10:48 ` Vlad Zolotarov
2015-10-05 10:57 ` Greg KH
2015-10-05 11:09 ` Avi Kivity
2015-10-05 13:08 ` Greg KH
2015-10-05 11:41 ` Vlad Zolotarov
2015-10-05 11:47 ` Avi Kivity
2015-10-05 11:53 ` Vlad Zolotarov
2015-10-05 8:28 ` Avi Kivity
2015-10-05 9:49 ` Greg KH
2015-10-05 10:20 ` Avi Kivity
2015-10-06 14:38 ` Michael S. Tsirkin
2015-10-06 14:43 ` Vlad Zolotarov
2015-10-06 14:56 ` Michael S. Tsirkin
2015-10-06 15:23 ` Avi Kivity
2015-10-06 18:51 ` Alex Williamson
2015-10-06 21:32 ` Stephen Hemminger
2015-10-06 21:41 ` Alex Williamson
[not found] ` <CAOaVG152OrQz-Bbnpr0VeE+vLH7nMGsG6A3sD7eTQHormNGVUg@mail.gmail.com>
2015-10-07 7:57 ` Vlad Zolotarov
[not found] ` <5614C160.6000203@scylladb.com>
2015-10-07 8:00 ` Vlad Zolotarov
2015-10-07 8:01 ` Vlad Zolotarov
2015-10-07 6:52 ` Avi Kivity
2015-10-07 16:31 ` Alex Williamson
2015-10-07 16:39 ` Avi Kivity
2015-10-07 21:05 ` Michael S. Tsirkin
2015-10-08 4:19 ` Gleb Natapov
2015-10-08 7:41 ` Michael S. Tsirkin
2015-10-08 7:59 ` Gleb Natapov
2015-10-08 9:38 ` Michael S. Tsirkin
2015-10-08 9:45 ` Gleb Natapov
2015-10-08 12:15 ` Michael S. Tsirkin
2015-10-08 5:33 ` Avi Kivity
2015-10-08 7:32 ` Michael S. Tsirkin
2015-10-08 8:46 ` Avi Kivity
2015-10-08 9:16 ` Michael S. Tsirkin
2015-10-08 9:44 ` Avi Kivity
2015-10-08 12:06 ` Michael S. Tsirkin
2015-10-08 12:27 ` Gleb Natapov
2015-10-08 13:20 ` Michael S. Tsirkin
2015-10-08 13:28 ` Gleb Natapov
2015-10-08 16:43 ` Michael S. Tsirkin
2015-10-08 17:01 ` Gleb Natapov
2015-10-08 17:39 ` Michael S. Tsirkin
2015-10-08 17:53 ` Gleb Natapov
2015-10-08 18:38 ` Greg KH
2015-10-08 8:32 ` Michael S. Tsirkin
2015-10-08 8:52 ` Gleb Natapov
2015-10-08 9:19 ` Avi Kivity
2015-10-08 10:26 ` Michael S. Tsirkin
2015-10-08 13:20 ` Avi Kivity
2015-10-08 14:17 ` Michael S. Tsirkin
2015-10-08 15:31 ` Alex Williamson
2015-10-07 20:05 ` Michael S. Tsirkin
2015-10-07 7:55 ` Vlad Zolotarov
2015-10-08 8:48 ` Michael S. Tsirkin
2015-10-06 15:28 ` Vlad Zolotarov
2015-10-06 14:46 ` Michael S. Tsirkin
2015-10-06 15:27 ` Avi Kivity
2015-10-05 8:41 ` Stephen Hemminger
2015-10-05 9:08 ` Vlad Zolotarov
2015-10-05 10:06 ` Vlad Zolotarov
2015-10-05 20:09 ` Michael S. Tsirkin
2015-10-05 9:11 ` Vlad Zolotarov
2015-10-05 19:16 ` Michael S. Tsirkin
2015-10-04 20:43 ` [PATCH v3 3/3] Documentation: update uio-howto Vlad Zolotarov
2015-10-04 20:45 ` [PATCH v3 0/3] uio: add MSI/MSI-X support to uio_pci_generic driver Vlad Zolotarov
2015-10-05 19:50 ` Michael S. Tsirkin
2015-10-06 8:37 ` Vlad Zolotarov
2015-10-06 14:30 ` Michael S. Tsirkin
2015-10-06 14:40 ` Vlad Zolotarov
2015-10-06 15:13 ` Michael S. Tsirkin
2015-10-06 16:35 ` Vlad Zolotarov
2015-10-06 15:11 ` Avi Kivity
2015-10-06 15:15 ` Michael S. Tsirkin
2015-10-06 16:00 ` Gleb Natapov
2015-10-06 16:09 ` Avi Kivity
2015-10-07 10:25 ` Michael S. Tsirkin
2015-10-07 10:28 ` Avi Kivity
-- strict thread matches above, loose matches on Subject: below --
2015-10-04 20:39 Vlad Zolotarov
2015-10-04 20:39 ` [PATCH v3 1/3] uio: add ioctl support Vlad Zolotarov
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=561252B3.4000406@cloudius-systems.com \
--to=vladz@cloudius-systems.com \
--cc=alexander.duyck@gmail.com \
--cc=avi@cloudius-systems.com \
--cc=bruce.richardson@intel.com \
--cc=corbet@lwn.net \
--cc=gleb@cloudius-systems.com \
--cc=gregkh@linuxfoundation.org \
--cc=hjk@hansjkoch.de \
--cc=linux-kernel@vger.kernel.org \
--cc=mst@redhat.com \
--cc=stephen@networkplumber.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 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.