Hi all,
After merging the cxl tree, today's linux-next build (x86_64 allmodconfig)
failed like this:
drivers/cxl/core/cdat.c: In function 'match_cxlrd_hb':
drivers/cxl/core/cdat.c:327:43: error: 'struct cxl_switch_decoder' has no member named 'target_lock'
327 | seq = read_seqbegin(&cxlsd->target_lock);
| ^~
drivers/cxl/core/cdat.c:332:38: error: 'struct cxl_switch_decoder' has no member named 'target_lock'
332 | } while (read_seqretry(&cxlsd->target_lock, seq));
| ^~
Caused by commit
185c1a489f87 ("cxl: Check qos_class validity on memdev probe")
interacting with commit
5459e186a5c9 ("cxl/port: Fix missing target list lock")
from hte cls-fixes tree.
I have applied the following merge resolution for today.
From: Stephen Rothwell <[email protected]>
Date: Fri, 5 Jan 2024 15:44:24 +1100
Subject: [PATCH] fix up for "cxl: Check qos_class validity on memdev probe"
interacting with "cxl/port: Fix missing target list lock"
Signed-off-by: Stephen Rothwell <[email protected]>
---
drivers/cxl/core/cdat.c | 14 ++++++--------
1 file changed, 6 insertions(+), 8 deletions(-)
diff --git a/drivers/cxl/core/cdat.c b/drivers/cxl/core/cdat.c
index cd84d87f597a..10ac76bed477 100644
--- a/drivers/cxl/core/cdat.c
+++ b/drivers/cxl/core/cdat.c
@@ -8,6 +8,7 @@
#include "cxlpci.h"
#include "cxlmem.h"
#include "cxl.h"
+#include "core.h"
struct dsmas_entry {
struct range dpa_range;
@@ -315,7 +316,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;
@@ -323,13 +323,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;
}
--
2.43.0
--
Cheers,
Stephen Rothwell
Stephen Rothwell wrote:
> Hi all,
>
> After merging the cxl tree, today's linux-next build (x86_64 allmodconfig)
> failed like this:
>
> drivers/cxl/core/cdat.c: In function 'match_cxlrd_hb':
> drivers/cxl/core/cdat.c:327:43: error: 'struct cxl_switch_decoder' has no member named 'target_lock'
> 327 | seq = read_seqbegin(&cxlsd->target_lock);
> | ^~
> drivers/cxl/core/cdat.c:332:38: error: 'struct cxl_switch_decoder' has no member named 'target_lock'
> 332 | } while (read_seqretry(&cxlsd->target_lock, seq));
> | ^~
>
> Caused by commit
>
> 185c1a489f87 ("cxl: Check qos_class validity on memdev probe")
>
> interacting with commit
>
> 5459e186a5c9 ("cxl/port: Fix missing target list lock")
>
> from hte cls-fixes tree.
>
> I have applied the following merge resolution for today.
Yup, this looks good, I will include a this merge in my next branch
going forward.
>
> From: Stephen Rothwell <[email protected]>
> Date: Fri, 5 Jan 2024 15:44:24 +1100
> Subject: [PATCH] fix up for "cxl: Check qos_class validity on memdev probe"
>
> interacting with "cxl/port: Fix missing target list lock"
>
> Signed-off-by: Stephen Rothwell <[email protected]>
> ---
> drivers/cxl/core/cdat.c | 14 ++++++--------
> 1 file changed, 6 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/cxl/core/cdat.c b/drivers/cxl/core/cdat.c
> index cd84d87f597a..10ac76bed477 100644
> --- a/drivers/cxl/core/cdat.c
> +++ b/drivers/cxl/core/cdat.c
> @@ -8,6 +8,7 @@
> #include "cxlpci.h"
> #include "cxlmem.h"
> #include "cxl.h"
> +#include "core.h"
>
> struct dsmas_entry {
> struct range dpa_range;
> @@ -315,7 +316,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;
> @@ -323,13 +323,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;
> }
> --
> 2.43.0
>
> --
> Cheers,
> Stephen Rothwell