diff options
| author | Dan Williams <dan.j.williams@intel.com> | 2024-01-05 19:24:33 -0800 |
|---|---|---|
| committer | Dan Williams <dan.j.williams@intel.com> | 2024-01-05 19:24:33 -0800 |
| commit | e16bf7e015d75fdd805528bedaf285fcb71dad2a (patch) | |
| tree | e5ec5f22bc582951752565ddf260cd4c89b95bee /drivers/cxl/core/cdat.c | |
| parent | 80dda9a69a487c72ded1ac69234c8a89d5922b04 (diff) | |
| parent | 5459e186a5c9f412334321cff58d70dcb0e48a04 (diff) | |
Merge branch 'for-6.7/cxl' into for-6.8/cxl
Pick up a late locking change + fixup that is better as merge window
material than rc material.
Diffstat (limited to 'drivers/cxl/core/cdat.c')
| -rw-r--r-- | drivers/cxl/core/cdat.c | 14 |
1 files changed, 6 insertions, 8 deletions
diff --git a/drivers/cxl/core/cdat.c b/drivers/cxl/core/cdat.c index c6208aab452f..6fe11546889f 100644 --- a/drivers/cxl/core/cdat.c +++ b/drivers/cxl/core/cdat.c @@ -7,6 +7,7 @@ #include <linux/overflow.h> #include "cxlpci.h" #include "cxlmem.h" +#include "core.h" #include "cxl.h" struct dsmas_entry { @@ -317,7 +318,6 @@ static int match_cxlrd_hb(struct device *dev, void *data) struct device *host_bridge = data; struct cxl_switch_decoder *cxlsd; struct cxl_root_decoder *cxlrd; - unsigned int seq; if (!is_root_decoder(dev)) return 0; @@ -325,13 +325,11 @@ static int match_cxlrd_hb(struct device *dev, void *data) cxlrd = to_cxl_root_decoder(dev); cxlsd = &cxlrd->cxlsd; - do { - seq = read_seqbegin(&cxlsd->target_lock); - for (int i = 0; i < cxlsd->nr_targets; i++) { - if (host_bridge == cxlsd->target[i]->dport_dev) - return 1; - } - } while (read_seqretry(&cxlsd->target_lock, seq)); + guard(rwsem_read)(&cxl_region_rwsem); + for (int i = 0; i < cxlsd->nr_targets; i++) { + if (host_bridge == cxlsd->target[i]->dport_dev) + return 1; + } return 0; } |