root以外のユーザーは、pciドライバのudevルールをバインド解除できますか?

root以外のユーザーは、pciドライバのudevルールをバインド解除できますか?

kvmグループのユーザーがpciデバイスでドライバのバインドを解除できるようにudevルールセットを作成しようとしています。問題のコマンドは次のとおりです。

echo '0000:0b:00.0' > /sys/bus/pci/devices/0000:0b:00.0/driver/unbind
echo 0x1912 0x0014 > /sys/bus/pci/drivers/vfio-pci/new_id

kvmグループのユーザーとしてこれらのタスクを実行できるようにしたいのですが、これまで運はありませんでした。まず、次のバリアントを使用してデバイス自体にグループを設定し、xhci_hcdドライバとvfio-pciドライバにグループを設定してみました。

SUBSYSTEM=="pci", ATTR{vendor}=="0x1912", ATTR{device}=="0x0014", OWNER="root", GROUP="kvm"
KERNEL=="xhci_hcd", SUBSYSTEM=="drivers", OWNER="root", GROUP="kvm"
KERNEL=="vfio-pci", SUBSYSTEM=="drivers", OWNER="root", GROUP="kvm"

しかし、これらのどれも影響を与えませんでした。テストのためにサブシステム全体にグループを設定しようとしましたが、権限は変更されていないため、完全に間違ったことをしているようです。

私が間違っていることについてのアドバイスはありますか?ありがとうございます。

答え1

まあ、質問自体が特定の結果を期待していないかどうかはわかりません。そうすれば、答えが簡単になるよりも難しくなります。

まず、使用するKERNEL / SUBSYSTEM属性が実際にカーネルで使用されている属性であることを確認するには、 "udevadm info -a -p /sys/devices/"を使用する必要があります。

2番目:一致が終わったら、udevルールから直接rebindコマンドを実行できます。

以下は、以下に基づいた例です。http://vogelchr.blogspot.com/2016/02/linuxudev-unbound-from-one-kernel.htmlボンディングメカニズムは4.15+カーネルで異なる動作をするため、PCIデバイス(NVMe SSDなど)に合わせて修正しました。

udevルール:DRIVER=="nvme", ATTRS{subsystem_device}=="0xa801",ATTRS{subsystem_vendor}=="0x144d", RUN+="/usr/local/sbin/rebind_pci_driver.sh %k vfio-pci"

これをスクリプトと呼びましょう。

#!/bin/sh
set -e
logger -t "$0" "Rebind device $1 to driver $2."
echo "$1" >"/sys/bus/pci/devices/$1/driver/unbind"
sleep 1
echo "$1" >"/sys/bus/pci/drivers/$2/bind"

関連情報