In kernel 4.17, pci_get_bus_and_slot() has been removed in favor of pci_get_domain_bus_and_slot(). It appears that VirtualBox only uses domain number 0, thus pci_get_domain_bus_and_slot(0, bus, devfn) is a suitable replacement for pci_get_bus_and_slot(bus, devfn). The resulting code compiles; however, I do not use PCI passthru, which I think means that I have not actually tested the code. This patch released under a combined MIT/GPLv2 license. Shamelessly copied by the patch from Larry Finger. Signed-off-by: Matteo Bernardini diff -Naur virtualbox-kernel-5.2.8.orig/vboxpci/linux/VBoxPci-linux.c virtualbox-kernel-5.2.8/vboxpci/linux/VBoxPci-linux.c --- virtualbox-kernel-5.2.8.orig/vboxpci/linux/VBoxPci-linux.c 2018-03-14 20:33:31.000000000 +0100 +++ virtualbox-kernel-5.2.8/vboxpci/linux/VBoxPci-linux.c 2019-04-16 23:18:10.607698000 +0200 @@ -89,7 +89,14 @@ #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 20) # define PCI_DEV_GET(v,d,p) pci_get_device(v,d,p) # define PCI_DEV_PUT(x) pci_dev_put(x) +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 17, 0) +/* assume the domain number to be zero - exactly the same assumption of +* pci_get_bus_and_slot() +*/ +# define PCI_DEV_GET_SLOT(bus, devfn) pci_get_domain_bus_and_slot(0, bus, devfn) +#else # define PCI_DEV_GET_SLOT(bus, devfn) pci_get_bus_and_slot(bus, devfn) +#endif #else # define PCI_DEV_GET(v,d,p) pci_find_device(v,d,p) # define PCI_DEV_PUT(x) do { } while (0)