On 21/02/18 20:12, kbuild test robot wrote: [...] > config: arm64-allmodconfig (attached as .config) [...] > aarch64-linux-gnu-ld: arch/arm64/kernel/head.o: relocation R_AARCH64_ABS32 against `_kernel_offset_le_lo32' can not be used when making a shared object > arch/arm64/kernel/head.o: In function `kimage_vaddr': > (.idmap.text+0x0): dangerous relocation: unsupported relocation Is this related? > arch/arm64/kernel/head.o: In function `__primary_switch': > (.idmap.text+0x340): dangerous relocation: unsupported relocation > (.idmap.text+0x348): dangerous relocation: unsupported relocation > drivers/iommu/virtio-iommu.o: In function `viommu_probe': > virtio-iommu.c:(.text+0xbdc): undefined reference to `virtio_check_driver_offered_feature' > virtio-iommu.c:(.text+0xcfc): undefined reference to `virtio_check_driver_offered_feature' > virtio-iommu.c:(.text+0xe10): undefined reference to `virtio_check_driver_offered_feature' > drivers/iommu/virtio-iommu.o: In function `viommu_send_reqs_sync': > virtio-iommu.c:(.text+0x130c): undefined reference to `virtqueue_add_sgs' > virtio-iommu.c:(.text+0x1398): undefined reference to `virtqueue_kick' > virtio-iommu.c:(.text+0x14d4): undefined reference to `virtqueue_get_buf' > drivers/iommu/virtio-iommu.o: In function `virtio_iommu_drv_init': > virtio-iommu.c:(.init.text+0x1c): undefined reference to `register_virtio_driver' > drivers/iommu/virtio-iommu.o: In function `virtio_iommu_drv_exit': >>> virtio-iommu.c:(.exit.text+0x14): undefined reference to `unregister_virtio_driver' Right. At the moment CONFIG_VIRTIO_IOMMU is a bool instead of tristate, because the IOMMU subsystem isn't entirely ready to have IOMMU drivers built as modules. In addition to exporting symbols it would also needs to hold off probing endpoints behind the IOMMU until the IOMMU driver is loaded. At the moment (I think) it gives up once userspace is reached (see of_iommu_driver_present). The above report is due to VIRTIO=m and VIRTIO_IOMMU=y. To solve it we could: a) Allow VIRTIO_IOMMU to be built as module by exporting a dozen IOMMU symbols. It would be a lie. The driver wouldn't be usable because of the probe issue discussed above, but it would build. b) Actually make any IOMMU driver work as module. Whilst it would certainly be a nice feature, it's a bigger problem and I don't think it has its place in this series. c) Make VIRTIO_IOMMU depend on VIRTIO_MMIO=y instead of VIRTIO_MMIO, which I think is the sanest for now (and does work), even though distro kernels probably all have VIRTIO=m. I prefer doing c) now and experiment with b) once I got some time. Thanks, Jean