diff --git a/dracut/modules.d/90qubes-pciback/qubes-pciback.sh b/dracut/modules.d/90qubes-pciback/qubes-pciback.sh index fa60b4f..39390e9 100755 --- a/dracut/modules.d/90qubes-pciback/qubes-pciback.sh +++ b/dracut/modules.d/90qubes-pciback/qubes-pciback.sh @@ -3,14 +3,23 @@ type getarg >/dev/null 2>&1 || . /lib/dracut-lib.sh # Find all networking devices currenly installed... -HIDE_PCI=`lspci -mm -n | grep '^[^ ]* "02'|awk '{ ORS="";print "(" $1 ")";}'` +HIDE_PCI="`lspci -mm -n | grep '^[^ ]* "02'|awk '{print $1}'`" +# ... and optionally all USB controllers... if getargbool 0 rd.qubes.hide_all_usb; then - HIDE_PCI=$HIDE_PCI`lspci -mm -n | grep '^[^ ]* "0c03'|awk '{ ORS="";print "(" $1 ")";}'` + HIDE_PCI="$HIDE_PCI `lspci -mm -n | grep '^[^ ]* "0c03'|awk '{print $1}'`" fi -HIDE_PCI=$HIDE_PCI`getarg rd.qubes.hide_pci | tr ',' '\n'|awk '{ ORS="";print "(" $1 ")";}'` +HIDE_PCI="$HIDE_PCI `getarg rd.qubes.hide_pci | tr ',' ' '`" -# ... and hide them so that Dom0 doesn't load drivers for them -modprobe pciback hide=$HIDE_PCI 2> /dev/null || modprobe xen-pciback hide=$HIDE_PCI +modprobe xen-pciback 2>/dev/null || : +# ... and hide them so that Dom0 doesn't load drivers for them +for dev in $HIDE_PCI; do + BDF=0000:$dev + if [ -e /sys/bus/pci/devices/$BDF/driver ]; then + echo -n $BDF > /sys/bus/pci/devices/$BDF/driver/unbind + fi + echo -n $BDF > /sys/bus/pci/drivers/pciback/new_id + echo -n $BDF > /sys/bus/pci/drivers/pciback/bind +done