lkml.org 
[lkml]   [2019]   [Jun]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[RFC 5/6] x86/pci: Pass lockdep condition to pcm_mmcfg_list iterator
    Date
    The pcm_mmcfg_list is traversed with list_for_each_entry_rcu without a
    reader-lock held, because the pci_mmcfg_lock is already held. Make this
    known to the list macro so that it fixes new lockdep warnings that
    trigger due to lockdep checks added to list_for_each_entry_rcu().

    Signed-off-by: Joel Fernandes (Google) <joel@joelfernandes.org>
    ---
    arch/x86/pci/mmconfig-shared.c | 5 +++--
    1 file changed, 3 insertions(+), 2 deletions(-)

    diff --git a/arch/x86/pci/mmconfig-shared.c b/arch/x86/pci/mmconfig-shared.c
    index 7389db538c30..6fa42e9c4e6f 100644
    --- a/arch/x86/pci/mmconfig-shared.c
    +++ b/arch/x86/pci/mmconfig-shared.c
    @@ -29,6 +29,7 @@
    static bool pci_mmcfg_running_state;
    static bool pci_mmcfg_arch_init_failed;
    static DEFINE_MUTEX(pci_mmcfg_lock);
    +#define pci_mmcfg_lock_held() lock_is_held(&(pci_mmcfg_lock).dep_map)

    LIST_HEAD(pci_mmcfg_list);

    @@ -54,7 +55,7 @@ static void list_add_sorted(struct pci_mmcfg_region *new)
    struct pci_mmcfg_region *cfg;

    /* keep list sorted by segment and starting bus number */
    - list_for_each_entry_rcu(cfg, &pci_mmcfg_list, list) {
    + list_for_each_entry_rcu(cfg, &pci_mmcfg_list, list, pci_mmcfg_lock_held()) {
    if (cfg->segment > new->segment ||
    (cfg->segment == new->segment &&
    cfg->start_bus >= new->start_bus)) {
    @@ -118,7 +119,7 @@ struct pci_mmcfg_region *pci_mmconfig_lookup(int segment, int bus)
    {
    struct pci_mmcfg_region *cfg;

    - list_for_each_entry_rcu(cfg, &pci_mmcfg_list, list)
    + list_for_each_entry_rcu(cfg, &pci_mmcfg_list, list, pci_mmcfg_lock_held())
    if (cfg->segment == segment &&
    cfg->start_bus <= bus && bus <= cfg->end_bus)
    return cfg;
    --
    2.22.0.rc1.311.g5d7573a151-goog
    \
     
     \ /
      Last update: 2019-06-02 00:29    [W:8.565 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site