.. | .. |
---|
29 | 29 | static bool pci_mmcfg_running_state; |
---|
30 | 30 | static bool pci_mmcfg_arch_init_failed; |
---|
31 | 31 | static DEFINE_MUTEX(pci_mmcfg_lock); |
---|
| 32 | +#define pci_mmcfg_lock_held() lock_is_held(&(pci_mmcfg_lock).dep_map) |
---|
32 | 33 | |
---|
33 | 34 | LIST_HEAD(pci_mmcfg_list); |
---|
34 | 35 | |
---|
.. | .. |
---|
54 | 55 | struct pci_mmcfg_region *cfg; |
---|
55 | 56 | |
---|
56 | 57 | /* keep list sorted by segment and starting bus number */ |
---|
57 | | - list_for_each_entry_rcu(cfg, &pci_mmcfg_list, list) { |
---|
| 58 | + list_for_each_entry_rcu(cfg, &pci_mmcfg_list, list, pci_mmcfg_lock_held()) { |
---|
58 | 59 | if (cfg->segment > new->segment || |
---|
59 | 60 | (cfg->segment == new->segment && |
---|
60 | 61 | cfg->start_bus >= new->start_bus)) { |
---|
.. | .. |
---|
118 | 119 | { |
---|
119 | 120 | struct pci_mmcfg_region *cfg; |
---|
120 | 121 | |
---|
121 | | - list_for_each_entry_rcu(cfg, &pci_mmcfg_list, list) |
---|
| 122 | + list_for_each_entry_rcu(cfg, &pci_mmcfg_list, list, pci_mmcfg_lock_held()) |
---|
122 | 123 | if (cfg->segment == segment && |
---|
123 | 124 | cfg->start_bus <= bus && bus <= cfg->end_bus) |
---|
124 | 125 | return cfg; |
---|