summaryrefslogtreecommitdiff
path: root/drivers/cxl/core/cdat.c
diff options
context:
space:
mode:
authorDan Williams <dan.j.williams@intel.com>2024-01-05 19:24:33 -0800
committerDan Williams <dan.j.williams@intel.com>2024-01-05 19:24:33 -0800
commite16bf7e015d75fdd805528bedaf285fcb71dad2a (patch)
treee5ec5f22bc582951752565ddf260cd4c89b95bee /drivers/cxl/core/cdat.c
parent80dda9a69a487c72ded1ac69234c8a89d5922b04 (diff)
parent5459e186a5c9f412334321cff58d70dcb0e48a04 (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.c14
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;
}