| .. | .. |
|---|
| 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; |
|---|