From: Alex Williamson <alex.williamson-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
To: Konrad Rzeszutek Wilk
<konrad.wilk-QHcLZuEGTsvQT0dZR+AlfA@public.gmane.org>
Cc: "kvm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org"
<kvm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
"jan.kiszka-kv7WeFo6aLtBDgjK7y7TUQ@public.gmane.org"
<jan.kiszka-kv7WeFo6aLtBDgjK7y7TUQ@public.gmane.org>,
"will.deacon-5wv7dgnIgG8@public.gmane.org"
<will.deacon-5wv7dgnIgG8@public.gmane.org>,
Stuart Yoder
<stuart.yoder-KZfg59tc24xl57MIdRCFDg@public.gmane.org>,
"a.rigo-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org"
<a.rigo-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org>,
Michal Hocko <mhocko-AlSwsSmVLrQ@public.gmane.org>,
Scott Wood <scottwood-KZfg59tc24xl57MIdRCFDg@public.gmane.org>,
Varun Sethi <Varun.Sethi-KZfg59tc24xl57MIdRCFDg@public.gmane.org>,
"kvmarm-FPEHb7Xf0XXUo1n7N8X6UoWGPAHP3yOg@public.gmane.org"
<kvmarm-FPEHb7Xf0XXUo1n7N8X6UoWGPAHP3yOg@public.gmane.org>,
"Rafael J. Wysocki"
<rafael.j.wysocki-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>,
Alexander Graf <agraf-l3A5Bk7waGM@public.gmane.org>,
Guenter Roeck <linux-0h96xk9xTtrk1uMJSBkQmQ@public.gmane.org>,
Dmitry Kasatkin
<d.kasatkin-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>,
Tejun Heo <tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
Bjorn Helgaas <bhelgaas-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>,
Antonios Motakis
<a.motakis-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org>,
"tech-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org"
<tech-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org>,
Toshi Kani <toshi.kani-VXdhtT5mjnY@public.gmane.org>,
Greg KH
<gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r@public.gmane.org>,
"linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org"
<linux-kernel@vger.k>
Subject: Re: mechanism to allow a driver to bind to any device
Date: Wed, 26 Mar 2014 11:26:37 -0600 [thread overview]
Message-ID: <1395854797.632.272.camel@ul30vt.home> (raw)
In-Reply-To: <20140326170406.GA22902-6K5HmflnPlqSPmnEAIUT9EEOCMrvLtNR@public.gmane.org>
On Wed, 2014-03-26 at 13:04 -0400, Konrad Rzeszutek Wilk wrote:
> On Wed, Mar 26, 2014 at 10:49:52AM -0600, Alex Williamson wrote:
> > On Wed, 2014-03-26 at 12:32 -0400, Konrad Rzeszutek Wilk wrote:
> > > On Wed, Mar 26, 2014 at 10:21:02AM -0600, Alex Williamson wrote:
> > > > On Wed, 2014-03-26 at 23:06 +0800, Alexander Graf wrote:
> > > > >
> > > > > > Am 26.03.2014 um 22:40 schrieb Konrad Rzeszutek Wilk <konrad.wilk-QHcLZuEGTsvQT0dZR+AlfA@public.gmane.org>:
> > > > > >
> > > > > >> On Wed, Mar 26, 2014 at 01:40:32AM +0000, Stuart Yoder wrote:
> > > > > >> Hi Greg,
> > > > > >>
> > > > > >> We (Linaro, Freescale, Virtual Open Systems) are trying get an issue
> > > > > >> closed that has been perculating for a while around creating a mechanism
> > > > > >> that will allow kernel drivers like vfio can bind to devices of any type.
> > > > > >>
> > > > > >> This thread with you:
> > > > > >> http://www.spinics.net/lists/kvm-arm/msg08370.html
> > > > > >> ...seems to have died out, so am trying to get your response
> > > > > >> and will summarize again. Vfio drivers in the kernel (regardless of
> > > > > >> bus type) need to bind to devices of any type. The driver's function
> > > > > >> is to simply export hardware resources of any type to user space.
> > > > > >>
> > > > > >> There are several approaches that have been proposed:
> > > > > >
> > > > > > You seem to have missed the one I proposed.
> > > > > >>
> > > > > >> 1. new_id -- (current approach) the user explicitly registers
> > > > > >> each new device type with the vfio driver using the new_id
> > > > > >> mechanism.
> > > > > >>
> > > > > >> Problem: multiple drivers will be resident that handle the
> > > > > >> same device type...and there is nothing user space hotplug
> > > > > >> infrastructure can do to help.
> > > > > >>
> > > > > >> 2. "any id" -- the vfio driver could specify a wildcard match
> > > > > >> of some kind in its ID match table which would allow it to
> > > > > >> match and bind to any possible device id. However,
> > > > > >> we don't want the vfio driver grabbing _all_ devices...just the ones we
> > > > > >> explicitly want to pass to user space.
> > > > > >>
> > > > > >> The proposed patch to support this was to create a new flag
> > > > > >> "sysfs_bind_only" in struct device_driver. When this flag
> > > > > >> is set, the driver can only bind to devices via the sysfs
> > > > > >> bind file. This would allow the wildcard match to work.
> > > > > >>
> > > > > >> Patch is here:
> > > > > >> https://lkml.org/lkml/2013/12/3/253
> > > > > >>
> > > > > >> 3. "Driver initiated explicit bind" -- with this approach the
> > > > > >> vfio driver would create a private 'bind' sysfs object
> > > > > >> and the user would echo the requested device into it:
> > > > > >>
> > > > > >> echo 0001:03:00.0 > /sys/bus/pci/drivers/vfio-pci/vfio_bind
> > > > > >>
> > > > > >> In order to make that work, the driver would need to call
> > > > > >> driver_probe_device() and thus we need this patch:
> > > > > >> https://lkml.org/lkml/2014/2/8/175
> > > > > >
> > > > > > 4). Use the 'unbind' (from the original device) and 'bind' to vfio driver.
> > > > >
> > > > > This is approach 2, no?
> > > > >
> > > > > >
> > > > > > Which I think is what is currently being done. Why is that not sufficient?
> > > > >
> > > > > How would 'bind to vfio driver' look like?
> > > > >
> > > > > > The only thing I see in the URL is " That works, but it is ugly."
> > > > > > There is some mention of race but I don't see how - if you do the 'unbind'
> > > > > > on the original driver and then bind the BDF to the VFIO how would you get
> > > > > > a race?
> > > > >
> > > > > Typically on PCI, you do a
> > > > >
> > > > > - add wildcard (pci id) match to vfio driver
> > > > > - unbind driver
> > > > > -> reprobe
> > > > > -> device attaches to vfio driver because it is the least recent match
> > > > > - remove wildcard match from vfio driver
> > > > >
> > > > > If in between you hotplug add a card of the same type, it gets attached to vfio - even though the logical "default driver" would be the device specific driver.
> > > >
> > > > I've mentioned drivers_autoprobe in the past, but I'm not sure we're
> > > > really factoring it into the discussion. drivers_autoprobe allows us to
> > > > toggle two points:
> > > >
> > > > a) When a new device is added whether we automatically give drivers a
> > > > try at binding to it
> > > >
> > > > b) When a new driver is added whether it gets to try to bind to anything
> > > > in the system
> > > >
> > > > So we do have a mechanism to avoid the race, but the problem is that it
> > > > becomes the responsibility of userspace to:
> > > >
> > > > 1) turn off drivers_autoprobe
> > > > 2) unbind/new_id/bind/remove_id
> > > > 3) turn on drivers_autoprobe
> > > > 4) call drivers_probe for anything added between 1) & 3)
> > > >
> > > > Is the question about the ugliness of the current solution whether it's
> > > > unreasonable to ask userspace to do this?
> > > >
> > > > What we seem to be asking for above is more like an autoprobe flag per
> > > > driver where there's some way for this special driver to opt out of auto
> > > > probing. Option 2. in Stuart's list does this by short-cutting ID
> > > > matching so that a "match" is only found when using the sysfs bind path,
> > > > option 3. enables a way for a driver to expose their own sysfs entry
> > > > point for binding. The latter feels particularly chaotic since drivers
> > > > get to make-up their own bind mechanism.
> > > >
> > > > Another twist I'll throw in is that devices can be hot added to IOMMU
> > > > groups that are in-use by userspace. When that happens we'd like to be
> > > > able to disable driver autoprobe of the device to avoid a host driver
> > > > automatically binding to the device. I wonder if instead of looking at
> > > > the problem from the driver perspective, if we were to instead look at
> > > > it from the device perspective if we might find a solution that would
> > > > address both. For instance, if devices had a driver_probe_id property
> > > > that was by default set to their bus specific ID match ("$VENDOR
> > > > $DEVICE" on PCI) could we use that to write new match IDs so that a
> > > > device could only bind to a given driver? Effectively we could then
> > > > bind either using the current method of adding to the list of IDs a
> > > > driver will match of changing the ID that a device would match. Does
> > > > that get us anywhere? Thanks,
> > >
> > > The other option for this is to having some sort of priority on the
> > > device probing with hotplugging.
> > >
> > > That is you can could do the following:
> > >
> > > 1) add the device vendor/model in vfio
> > > 2) unbind the BDF from the original driver.
> > > 3) hotplug happens - any new device that has the device vendor/model gets
> > > owned by vfio instead of the original device.
> >
> > This doesn't help the device-added-to-inuse-group problem though because
> > we have no idea if the new device would have the same vendor/model as
> > other devices in the group. By making the device probe ID modifiable,
>
> Um, you add a hotplugged PCI device in a group that is in usage?
Sure, what if your IOMMU group is an entire conventional PCI
sub-hierarchy that supports hotplug.
> > vfio can watch the IOMMU group notifiers and change the probe ID of new
>
> Ewwww.
How is that so terrible? Is it worse than BUG()?
> > devices to either prevent the host driver from claiming them or to allow
> > vfio to claim them. At the same time we change the problem from "this
> > driver can attach to this kind of device" to "this device can attach to
> > that driver", which also solves Stuart's problem. Thanks,
> >
> > Alex
> >
> > > 4). bind the BDF to the vfio.
> > >
> > > Granted that is a bit silly too - as the admin might want to have the new
> > > hotplugged device be owned by the native driver.
> > >
> > > In which case, why not just switch out from using device vendor/model
> > > to just using BDF values?
>
> Which would still solve the problem. The user-space would just have to
> reassign the device to the vfio group.
Sorry, I'm not really seeing how your proposal is different than what we
have already. The steps above are exactly what we have today. The
'new_slot' entry mentioned in reply to Stuart seems to be nothing more
than a PCI specific shortcut for new_id, but nothing substantive changes
about the binding path. Thanks,
Alex
next prev parent reply other threads:[~2014-03-26 17:26 UTC|newest]
Thread overview: 51+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-02-08 17:29 [RFC PATCH v4 00/10] VFIO support for platform devices Antonios Motakis
2014-02-08 17:29 ` [RFC PATCH v4 04/10] VFIO_PLATFORM: Initial skeleton of " Antonios Motakis
[not found] ` <1391880580-471-1-git-send-email-a.motakis-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org>
2014-02-08 17:29 ` [RFC PATCH v4 01/10] driver core: export driver_probe_device() Antonios Motakis
[not found] ` <1391880580-471-2-git-send-email-a.motakis-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org>
2014-02-14 22:27 ` Greg KH
[not found] ` <20140214222716.GA11838-U8xfFu+wG4EAvxtiuMwx3w@public.gmane.org>
2014-02-14 23:00 ` Stuart Yoder
[not found] ` <ba7597fd8c9f4d91bbccfb42e31a165e-ufbTtyGzTTT8GZusEWM6WuO6mTEJWrR4XA4E9RH9d+qIuWR1G4zioA@public.gmane.org>
2014-02-15 2:47 ` Greg KH
[not found] ` <20140215024725.GA2542-U8xfFu+wG4EAvxtiuMwx3w@public.gmane.org>
2014-02-15 16:33 ` Stuart Yoder
[not found] ` <7043e1edd9974de590dcb392cd8aff14-ufbTtyGzTTT8GZusEWM6WuO6mTEJWrR4XA4E9RH9d+qIuWR1G4zioA@public.gmane.org>
2014-02-15 17:33 ` Greg KH
[not found] ` <20140215173348.GA8056-U8xfFu+wG4EAvxtiuMwx3w@public.gmane.org>
2014-02-15 18:19 ` Stuart Yoder
[not found] ` <38f0473542954fe8b312a1f7b61a3d21-ufbTtyGzTTT8GZusEWM6WuO6mTEJWrR4XA4E9RH9d+qIuWR1G4zioA@public.gmane.org>
2014-02-18 0:38 ` Scott Wood
2014-02-20 22:34 ` Stuart Yoder
[not found] ` <b6374a0f30194969ba4622ff2f58ae65-ufbTtyGzTTT8GZusEWM6WuO6mTEJWrR4XA4E9RH9d+qIuWR1G4zioA@public.gmane.org>
2014-02-20 22:43 ` Greg KH
[not found] ` <20140220224337.GA20097-U8xfFu+wG4EAvxtiuMwx3w@public.gmane.org>
2014-03-06 22:25 ` Stuart Yoder
2014-03-26 1:40 ` mechanism to allow a driver to bind to any device Stuart Yoder
[not found] ` <54cd150235ba4954becdd12f725c5ebd-ufbTtyGzTTT8GZusEWM6WuO6mTEJWrR4XA4E9RH9d+qIuWR1G4zioA@public.gmane.org>
2014-03-26 14:40 ` Konrad Rzeszutek Wilk
[not found] ` <20140326144025.GA18387-6K5HmflnPlqSPmnEAIUT9EEOCMrvLtNR@public.gmane.org>
2014-03-26 15:06 ` Alexander Graf
[not found] ` <D45FC8F2-7807-4BBB-A253-8EFCD091D6BD-l3A5Bk7waGM@public.gmane.org>
2014-03-26 16:21 ` Alex Williamson
[not found] ` <1395850862.632.247.camel-85EaTFmN5p//9pzu0YdTqQ@public.gmane.org>
2014-03-26 16:32 ` Konrad Rzeszutek Wilk
[not found] ` <20140326163209.GB21368-6K5HmflnPlqSPmnEAIUT9EEOCMrvLtNR@public.gmane.org>
2014-03-26 16:49 ` Alex Williamson
[not found] ` <1395852592.632.253.camel-85EaTFmN5p//9pzu0YdTqQ@public.gmane.org>
2014-03-26 17:04 ` Konrad Rzeszutek Wilk
[not found] ` <20140326170406.GA22902-6K5HmflnPlqSPmnEAIUT9EEOCMrvLtNR@public.gmane.org>
2014-03-26 17:26 ` Alex Williamson [this message]
2014-03-26 17:51 ` Stuart Yoder
2014-03-26 22:09 ` Alex Williamson
[not found] ` <1395871761.632.316.camel-85EaTFmN5p//9pzu0YdTqQ@public.gmane.org>
2014-03-28 16:58 ` Konrad Rzeszutek Wilk
[not found] ` <20140328165809.GA12659-6K5HmflnPlqSPmnEAIUT9EEOCMrvLtNR@public.gmane.org>
2014-03-28 17:10 ` Alex Williamson
[not found] ` <1396026623.4502.34.camel-85EaTFmN5p//9pzu0YdTqQ@public.gmane.org>
2014-03-31 22:36 ` Kim Phillips
[not found] ` <20140331173627.e4abfb3397287c3b9aff6606-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2014-03-31 23:52 ` Alex Williamson
2014-03-31 18:47 ` Stuart Yoder
[not found] ` <7d1b495cdb6a415e8d3b7f60f409991c-ufbTtyGzTTT8GZusEWM6WuO6mTEJWrR4XA4E9RH9d+qIuWR1G4zioA@public.gmane.org>
2014-03-31 19:47 ` Greg KH
[not found] ` <20140331194705.GA13014-U8xfFu+wG4EAvxtiuMwx3w@public.gmane.org>
2014-03-31 20:23 ` Stuart Yoder
[not found] ` <c6a10ce9bfd84287b5c5aa3809987b2b-ufbTtyGzTTT8GZusEWM6WuO6mTEJWrR4XA4E9RH9d+qIuWR1G4zioA@public.gmane.org>
2014-03-31 22:32 ` Kim Phillips
2014-03-31 18:32 ` Stuart Yoder
2014-03-26 16:24 ` Konrad Rzeszutek Wilk
2014-03-26 15:32 ` Stuart Yoder
2014-03-26 21:39 ` Antonios Motakis
[not found] ` <CAG8rG2xCvCGJWwZTnkia5GD3BVJZB9SmKOm79T6Q1FnhgB+urw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-03-28 6:59 ` Greg KH
[not found] ` <20140328065942.GB14619-U8xfFu+wG4EAvxtiuMwx3w@public.gmane.org>
2014-03-31 18:21 ` Stuart Yoder
2014-03-26 21:42 ` Antonios Motakis
2014-02-08 17:29 ` [RFC PATCH v4 02/10] VFIO_IOMMU_TYPE1: Introduce the VFIO_DMA_MAP_FLAG_EXEC flag Antonios Motakis
[not found] ` <1391880580-471-3-git-send-email-a.motakis-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org>
2014-02-10 20:04 ` Alex Williamson
2014-02-08 17:29 ` [RFC PATCH v4 03/10] VFIO_IOMMU_TYPE1: workaround to build for platform devices Antonios Motakis
2014-02-08 17:29 ` [RFC PATCH v4 05/10] VFIO_PLATFORM: Return info for device and its memory mapped IO regions Antonios Motakis
[not found] ` <1391880580-471-6-git-send-email-a.motakis-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org>
2014-02-10 22:32 ` Alex Williamson
2014-02-08 17:29 ` [RFC PATCH v4 06/10] VFIO_PLATFORM: Read and write support for the device fd Antonios Motakis
[not found] ` <1391880580-471-7-git-send-email-a.motakis-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org>
2014-02-10 22:45 ` Alex Williamson
[not found] ` <1392072326.15608.181.camel-85EaTFmN5p//9pzu0YdTqQ@public.gmane.org>
2014-02-10 23:12 ` Scott Wood
[not found] ` <1392073951.6733.383.camel-88ow+0ZRuxG2UiBs7uKeOtHuzzzSOjJt@public.gmane.org>
2014-02-10 23:20 ` Alex Williamson
2014-02-08 17:29 ` [RFC PATCH v4 07/10] VFIO_PLATFORM: Support MMAP of MMIO regions Antonios Motakis
2014-02-08 17:29 ` [RFC PATCH v4 08/10] VFIO_PLATFORM: Return IRQ info Antonios Motakis
2014-02-08 17:29 ` [RFC PATCH v4 09/10] VFIO_PLATFORM: Initial interrupts support Antonios Motakis
2014-02-08 17:29 ` [RFC PATCH v4 10/10] VFIO_PLATFORM: Support for maskable and automasked interrupts Antonios Motakis
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=1395854797.632.272.camel@ul30vt.home \
--to=alex.williamson-h+wxahxf7alqt0dzr+alfa@public.gmane.org \
--cc=Varun.Sethi-KZfg59tc24xl57MIdRCFDg@public.gmane.org \
--cc=a.motakis-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org \
--cc=a.rigo-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org \
--cc=agraf-l3A5Bk7waGM@public.gmane.org \
--cc=bhelgaas-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org \
--cc=d.kasatkin-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org \
--cc=gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r@public.gmane.org \
--cc=jan.kiszka-kv7WeFo6aLtBDgjK7y7TUQ@public.gmane.org \
--cc=konrad.wilk-QHcLZuEGTsvQT0dZR+AlfA@public.gmane.org \
--cc=kvm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=kvmarm-FPEHb7Xf0XXUo1n7N8X6UoWGPAHP3yOg@public.gmane.org \
--cc=linux-0h96xk9xTtrk1uMJSBkQmQ@public.gmane.org \
--cc=linux-kernel@vger.k \
--cc=mhocko-AlSwsSmVLrQ@public.gmane.org \
--cc=rafael.j.wysocki-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org \
--cc=scottwood-KZfg59tc24xl57MIdRCFDg@public.gmane.org \
--cc=stuart.yoder-KZfg59tc24xl57MIdRCFDg@public.gmane.org \
--cc=tech-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org \
--cc=tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
--cc=toshi.kani-VXdhtT5mjnY@public.gmane.org \
--cc=will.deacon-5wv7dgnIgG8@public.gmane.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).