[systemd-devel] how to bind to other drivers using systemd

Panu Matilainen pmatilai at redhat.com
Tue Oct 13 05:08:11 PDT 2015


On 09/30/2015 08:43 PM, Flavio Leitner wrote:
> On Tue, Sep 29, 2015 at 12:30:54AM +0300, Mantas Mikulėnas wrote:
>> I wonder if this could be handled with a generic Type=oneshot,
>> ExecStart=driverctl bind foo...
>
> Could you elaborate more on that?
>
> If driverctl is an utility, we could use scripts, yeah.  The issue
> is how to identify the device. We probably would need some sort
> matching mechanism like udev does.

Since the silence is deafening, and since its usually easier to poke 
holes in something concrete no matter how incomplete and/or broken, 
here's a beginning of an approach to alternative driver assignment in 
the udev realm: http://laiskiainen.org/udev/driverctl/

# <copy/patch the bits to their places>
# echo vfio-pci > /etc/driverctl.d/0000:01:00.0
# echo 1 > /sys/bus/pci/devices/0000:01:00.0/remove
# echo 1 > /sys/bus/pci/rescan

...and there you go, udev vfio-pci is forced for that device on the 
rescan, and a real hotplug is handled similarly.

Since normally the device probing occurs early in the boot, these things 
also need to go to initramfs so a dracut module/patch is needed, and 
dracut needs to be run after adding devices here, ie

# echo vfio-pci > /etc/driverctl.d/0000:01:00.0
# dracut -f
# reboot

Having to mess with initramfs is a bit of a PITA but at least some of 
that could be hidden in the driverctl utility, and then overriding the 
default driver early in the boot means we get none of the side-effects 
with interfaces coming and going, possibly wrestling with NetworkManager 
over it etc.

For a real-world implementation there are tons of TODOs like
- support non-pci buses
- support direct bind/unbind in driverctl
- million errors situations to check
- vfio & uio -bound devices disappear from systemd, we'd probably want 
them there in some form to be able to depend on them
- etc...

	- Panu -




More information about the systemd-devel mailing list