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. Signed-off-by: Larry Finger Index: VirtualBox-5.2.10/src/VBox/HostDrivers/VBoxPci/linux/VBoxPci-linux.c =================================================================== --- VirtualBox-5.2.10.orig/src/VBox/HostDrivers/VBoxPci/linux/VBoxPci-linux.c +++ VirtualBox-5.2.10/src/VBox/HostDrivers/VBoxPci/linux/VBoxPci-linux.c @@ -89,7 +89,14 @@ MODULE_VERSION(VBOX_VERSION_STRING " r" #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) Index: VirtualBox-5.2.10/src/VBox/Additions/linux/drm/vbox_ttm.c =================================================================== --- VirtualBox-5.2.10.orig/src/VBox/Additions/linux/drm/vbox_ttm.c +++ VirtualBox-5.2.10/src/VBox/Additions/linux/drm/vbox_ttm.c @@ -236,10 +236,15 @@ static struct ttm_backend_func vbox_tt_b .destroy = &vbox_ttm_backend_destroy, }; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 17, 0) +static struct ttm_tt *vbox_ttm_tt_create(struct ttm_buffer_object *bo, + u32 page_flags) +#else static struct ttm_tt *vbox_ttm_tt_create(struct ttm_bo_device *bdev, unsigned long size, u32 page_flags, struct page *dummy_read_page) +#endif { struct ttm_tt *tt; @@ -248,7 +253,11 @@ static struct ttm_tt *vbox_ttm_tt_create return NULL; tt->func = &vbox_tt_backend_func; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 17, 0) + if (ttm_tt_init(tt, bo, page_flags)) { +#else if (ttm_tt_init(tt, bdev, size, page_flags, dummy_read_page)) { +#endif kfree(tt); return NULL; } @@ -450,7 +459,11 @@ int vbox_bo_create(struct drm_device *de ret = ttm_bo_init(&vbox->ttm.bdev, &vboxbo->bo, size, ttm_bo_type_device, &vboxbo->placement, +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 17, 0) + align >> PAGE_SHIFT, false, acc_size, +#else align >> PAGE_SHIFT, false, NULL, acc_size, +#endif #if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 18, 0) || defined(RHEL_73) NULL, #endif