iommu/vt-d: Fix RCU-list bugs in intel_iommu_init()
authorQian Cai <cai@lca.pw>
Thu, 5 Mar 2020 20:00:46 +0000 (15:00 -0500)
committerJoerg Roedel <jroedel@suse.de>
Tue, 10 Mar 2020 09:30:33 +0000 (10:30 +0100)
commit2d48ea0efb8887ebba3e3720bb5b738aced4e574
tree7f2a45433c9fe2e38224efa9a6620c428361627b
parent65ac74f1de3334852fb7d9b1b430fa5a06524276
iommu/vt-d: Fix RCU-list bugs in intel_iommu_init()

There are several places traverse RCU-list without holding any lock in
intel_iommu_init(). Fix them by acquiring dmar_global_lock.

 WARNING: suspicious RCU usage
 -----------------------------
 drivers/iommu/intel-iommu.c:5216 RCU-list traversed in non-reader section!!

 other info that might help us debug this:

 rcu_scheduler_active = 2, debug_locks = 1
 no locks held by swapper/0/1.

 Call Trace:
  dump_stack+0xa0/0xea
  lockdep_rcu_suspicious+0x102/0x10b
  intel_iommu_init+0x947/0xb13
  pci_iommu_init+0x26/0x62
  do_one_initcall+0xfe/0x500
  kernel_init_freeable+0x45a/0x4f8
  kernel_init+0x11/0x139
  ret_from_fork+0x3a/0x50
 DMAR: Intel(R) Virtualization Technology for Directed I/O

Fixes: d8190dc63886 ("iommu/vt-d: Enable DMA remapping after rmrr mapped")
Signed-off-by: Qian Cai <cai@lca.pw>
Acked-by: Lu Baolu <baolu.lu@linux.intel.com>
Signed-off-by: Joerg Roedel <jroedel@suse.de>
drivers/iommu/intel-iommu.c