Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ec154bf5 authored by Joerg Roedel's avatar Joerg Roedel
Browse files

iommu/vt-d: Don't register bus-notifier under dmar_global_lock



The notifier function will take the dmar_global_lock too, so
lockdep complains about inverse locking order when the
notifier is registered under the dmar_global_lock.

Reported-by: default avatarJan Kiszka <jan.kiszka@siemens.com>
Fixes: 59ce0515 ('iommu/vt-d: Update DRHD/RMRR/ATSR device scope caches when PCI hotplug happens')
Signed-off-by: default avatarJoerg Roedel <jroedel@suse.de>
parent 9e66317d
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -801,13 +801,16 @@ int __init dmar_dev_scope_init(void)
				dmar_free_pci_notify_info(info);
			}
		}

		bus_register_notifier(&pci_bus_type, &dmar_pci_bus_nb);
	}

	return dmar_dev_scope_status;
}

void dmar_register_bus_notifier(void)
{
	bus_register_notifier(&pci_bus_type, &dmar_pci_bus_nb);
}


int __init dmar_table_init(void)
{
+10 −0
Original line number Diff line number Diff line
@@ -4752,6 +4752,16 @@ int __init intel_iommu_init(void)
		goto out_free_dmar;
	}

	up_write(&dmar_global_lock);

	/*
	 * The bus notifier takes the dmar_global_lock, so lockdep will
	 * complain later when we register it under the lock.
	 */
	dmar_register_bus_notifier();

	down_write(&dmar_global_lock);

	if (no_iommu || dmar_disabled) {
		/*
		 * We exit the function here to ensure IOMMU's remapping and
+1 −0
Original line number Diff line number Diff line
@@ -112,6 +112,7 @@ static inline bool dmar_rcu_check(void)

extern int dmar_table_init(void);
extern int dmar_dev_scope_init(void);
extern void dmar_register_bus_notifier(void);
extern int dmar_parse_dev_scope(void *start, void *end, int *cnt,
				struct dmar_dev_scope **devices, u16 segment);
extern void *dmar_alloc_dev_scope(void *start, void *end, int *cnt);