2018-09-11 10:39:08 |
Paolo Pisati |
description |
Hi,
booting the bionic kernel (4.15.0-29-generic) on my Tegra20 device (no iommu), I found it crashes during display driver setup. The bootlog (and crash) is attached. Asking on Tegra IRC channel, digetx found that this is caused by the IPMMU-VMSA driver which is always registered via initcall. Adding "initcall_blacklist=ipmmu_init" to the kernel parameters makes it boot fine.
Maybe this buggy driver should be disabled in the config (or fixed somehow)? |
[Impact]
The ipmmu-vmsa driver registers itself to the system via an initcall() to ipmmu_init(), and in case it's the first (or the only) iommu driver, it registers its iommu ops to the platform bus - in the tegra2 case, there's no iommu hardware, so all drivers bail out, except for the ipmmu-vmsa.
Later on, during boot, when the Tegra host1x is probing (drivers/gpu/host1x/dev.c::host1x_probe()), it checks if an iommu device is present (drivers/iommu/iommu.c::iommu_present() that does so by identifying if any iommu ops were registered) and attach to the supposedly present device, incurring in a null pointer dereference.
Upstream quickly acknowledged the problem, and rolled a patch to restrict the ipmmu-vmsa driver to register if and only if a compatible device is present.
The fix appared initially in 4.19, and was later backported via stable to 4.18.x, and this is a clean cherry pick of that commit.
[Fix]
Apply the attached patch and recompile.
[How to test]
Try to boot a patched kernel on a Tegra2 board.
[Regession potential]
None, the fix is trivial.
--
Original bug:
Hi,
booting the bionic kernel (4.15.0-29-generic) on my Tegra20 device (no iommu), I found it crashes during display driver setup. The bootlog (and crash) is attached. Asking on Tegra IRC channel, digetx found that this is caused by the IPMMU-VMSA driver which is always registered via initcall. Adding "initcall_blacklist=ipmmu_init" to the kernel parameters makes it boot fine.
Maybe this buggy driver should be disabled in the config (or fixed somehow)? |
|