- echo Unbinding $dev from virtio-pci
- echo $dev > /sys/bus/pci/drivers/virtio-pci/unbind
- echo Binding $dev to ${TARGET_DRIVER}
- echo $dev > /sys/bus/pci/drivers/${TARGET_DRIVER}/bind
+ class=$(cat /sys/bus/pci/drivers/virtio-pci/${dev}/class)
+ if [ "$class" = "0x020000" ]; then
+ echo Unbinding $dev from virtio-pci
+ echo $dev > /sys/bus/pci/drivers/virtio-pci/unbind
+ echo Binding $dev to ${TARGET_DRIVER}
+ echo $dev > /sys/bus/pci/drivers/${TARGET_DRIVER}/bind
+ fi
+done
+
+# RCU and IRQ affinity
+for i in $(ls /proc/irq/ | grep [0-9])
+do
+ echo 1 > /proc/irq/$i/smp_affinity
+done
+echo 1 | sudo tee /sys/bus/workqueue/devices/writeback/cpumask
+
+# There is a bug causing packet loss when VM is initialized. This workaround is
+# supposed to re-initialize CPUs.
+for i in $(ls -d /sys/devices/system/cpu/cpu[1-9]/online); do
+ echo 0 | sudo tee $i
+ sleep 2
+ echo 1 | sudo tee $i