Linux CXL
 help / color / mirror / Atom feed
* [PATCH 0/2] Add cond_guard() to conditional guards
@ 2024-02-04 17:31 Fabio M. De Francesco
  2024-02-04 17:31 ` [PATCH 1/2] cleanup: " Fabio M. De Francesco
                   ` (2 more replies)
  0 siblings, 3 replies; 9+ messages in thread
From: Fabio M. De Francesco @ 2024-02-04 17:31 UTC (permalink / raw)
  To: Peter Zijlstra, Dan Williams, linux-kernel
  Cc: Ingo Molnar, linux-cxl, Fabio M. De Francesco, Ira Weiny

Add cond_guard() macro to conditional guards and use it to replace an
open-coded up_read() in show_targetN().

Cc: Peter Zijlstra <peterz@infradead.org>
Suggested-by: Dan Williams <dan.j.williams@intel.com>
Suggested-by: Ira Weiny <ira.weiny@intel.com>

Fabio M. De Francesco (2):
  cleanup: Add cond_guard() to conditional guards
  cxl/region: Use cond_guard() in show_targetN()

 drivers/cxl/core/region.c | 16 ++++------------
 include/linux/cleanup.h   | 14 ++++++++++++++
 2 files changed, 18 insertions(+), 12 deletions(-)

-- 
2.43.0


^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH 1/2] cleanup: Add cond_guard() to conditional guards
  2024-02-04 17:31 [PATCH 0/2] Add cond_guard() to conditional guards Fabio M. De Francesco
@ 2024-02-04 17:31 ` Fabio M. De Francesco
  2024-02-05 11:09   ` Jonathan Cameron
                     ` (2 more replies)
  2024-02-04 17:31 ` [PATCH 2/2] cxl/region: Use cond_guard() in show_targetN() Fabio M. De Francesco
  2024-02-05 10:56 ` [PATCH 0/2] Add cond_guard() to conditional guards Jonathan Cameron
  2 siblings, 3 replies; 9+ messages in thread
From: Fabio M. De Francesco @ 2024-02-04 17:31 UTC (permalink / raw)
  To: Peter Zijlstra, Dan Williams, linux-kernel
  Cc: Ingo Molnar, linux-cxl, Fabio M. De Francesco, Ira Weiny

Add cond_guard() macro to conditional guards.

cond_guard() is a guard to be used with the conditional variants of locks,
like down_read_trylock() or mutex_lock_interruptible().

It takes a statement (or more statements in a block) that is passed to its
second argument. That statement (or block) is executed if waiting for a
lock is interrupted or if a _trylock() fails in case of contention.

Usage example:

	cond_guard(rwsem_read_try, { printk(...); return 0; }, &semaphore);

Consistenly with the other guards, locks are unlocked at the exit of the
scope where cond_guard() is called.

Cc: Peter Zijlstra <peterz@infradead.org>
Suggested-by: Dan Williams <dan.j.williams@intel.com>
Suggested-by: Ira Weiny <ira.weiny@intel.com>
Signed-off-by: Fabio M. De Francesco <fabio.maria.de.francesco@linux.intel.com>
---
 include/linux/cleanup.h | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/include/linux/cleanup.h b/include/linux/cleanup.h
index c2d09bc4f976..3826e8ed4e09 100644
--- a/include/linux/cleanup.h
+++ b/include/linux/cleanup.h
@@ -134,6 +134,16 @@ static inline class_##_name##_t class_##_name##ext##_constructor(_init_args) \
  *	an anonymous instance of the (guard) class, not recommended for
  *	conditional locks.
  *
+ * cond_guard(name, fail, args...):
+ *	a guard to be used with the conditional variants of locks, like
+ *	down_read_trylock() or mutex_lock_interruptible. 'fail' are one or more
+ *	statements that are executed if waiting for a lock is interrupted or
+ *	if a _trylock() fails in case of contention.
+ *
+ *	Example:
+ *
+ *		cond_guard(rwsem_read_try, { printk(...); return 0; }, &semaphore);
+ *
  * scoped_guard (name, args...) { }:
  *	similar to CLASS(name, scope)(args), except the variable (with the
  *	explicit name 'scope') is declard in a for-loop such that its scope is
@@ -165,6 +175,10 @@ static inline class_##_name##_t class_##_name##ext##_constructor(_init_args) \
 
 #define __guard_ptr(_name) class_##_name##_lock_ptr
 
+#define cond_guard(_name, _ret, args...) \
+	CLASS(_name, scope)(args); \
+	if (!__guard_ptr(_name)(&scope)) _ret
+
 #define scoped_guard(_name, args...)					\
 	for (CLASS(_name, scope)(args),					\
 	     *done = NULL; __guard_ptr(_name)(&scope) && !done; done = (void *)1)
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 2/2] cxl/region: Use cond_guard() in show_targetN()
  2024-02-04 17:31 [PATCH 0/2] Add cond_guard() to conditional guards Fabio M. De Francesco
  2024-02-04 17:31 ` [PATCH 1/2] cleanup: " Fabio M. De Francesco
@ 2024-02-04 17:31 ` Fabio M. De Francesco
  2024-02-05 11:11   ` Jonathan Cameron
  2024-02-05 17:06   ` Ira Weiny
  2024-02-05 10:56 ` [PATCH 0/2] Add cond_guard() to conditional guards Jonathan Cameron
  2 siblings, 2 replies; 9+ messages in thread
From: Fabio M. De Francesco @ 2024-02-04 17:31 UTC (permalink / raw)
  To: Peter Zijlstra, Dan Williams, linux-kernel
  Cc: Ingo Molnar, linux-cxl, Fabio M. De Francesco, Ira Weiny

Use cond_guard() in show_target() to not open code an up_read() in an 'out'
block. If the down_read_interruptible() fails, the statement passed to the
second argument of cond_guard() returns -EINTR.

Cc: Peter Zijlstra <peterz@infradead.org>
Suggested-by: Dan Williams <dan.j.williams@intel.com>
Suggested-by: Ira Weiny <ira.weiny@intel.com>
Signed-off-by: Fabio M. De Francesco <fabio.maria.de.francesco@linux.intel.com>
---
 drivers/cxl/core/region.c | 16 ++++------------
 1 file changed, 4 insertions(+), 12 deletions(-)

diff --git a/drivers/cxl/core/region.c b/drivers/cxl/core/region.c
index 0f05692bfec3..bd3236786a25 100644
--- a/drivers/cxl/core/region.c
+++ b/drivers/cxl/core/region.c
@@ -666,28 +666,20 @@ static size_t show_targetN(struct cxl_region *cxlr, char *buf, int pos)
 {
 	struct cxl_region_params *p = &cxlr->params;
 	struct cxl_endpoint_decoder *cxled;
-	int rc;
 
-	rc = down_read_interruptible(&cxl_region_rwsem);
-	if (rc)
-		return rc;
+	cond_guard(rwsem_read_intr, return -EINTR, &cxl_region_rwsem);
 
 	if (pos >= p->interleave_ways) {
 		dev_dbg(&cxlr->dev, "position %d out of range %d\n", pos,
 			p->interleave_ways);
-		rc = -ENXIO;
-		goto out;
+		return -ENXIO;
 	}
 
 	cxled = p->targets[pos];
 	if (!cxled)
-		rc = sysfs_emit(buf, "\n");
+		return sysfs_emit(buf, "\n");
 	else
-		rc = sysfs_emit(buf, "%s\n", dev_name(&cxled->cxld.dev));
-out:
-	up_read(&cxl_region_rwsem);
-
-	return rc;
+		return sysfs_emit(buf, "%s\n", dev_name(&cxled->cxld.dev));
 }
 
 static int match_free_decoder(struct device *dev, void *data)
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH 0/2] Add cond_guard() to conditional guards
  2024-02-04 17:31 [PATCH 0/2] Add cond_guard() to conditional guards Fabio M. De Francesco
  2024-02-04 17:31 ` [PATCH 1/2] cleanup: " Fabio M. De Francesco
  2024-02-04 17:31 ` [PATCH 2/2] cxl/region: Use cond_guard() in show_targetN() Fabio M. De Francesco
@ 2024-02-05 10:56 ` Jonathan Cameron
  2 siblings, 0 replies; 9+ messages in thread
From: Jonathan Cameron @ 2024-02-05 10:56 UTC (permalink / raw)
  To: Fabio M. De Francesco
  Cc: Peter Zijlstra, Dan Williams, linux-kernel, Ingo Molnar,
	linux-cxl, Ira Weiny

On Sun,  4 Feb 2024 18:31:03 +0100
"Fabio M. De Francesco" <fabio.maria.de.francesco@linux.intel.com> wrote:

> Add cond_guard() macro to conditional guards and use it to replace an
> open-coded up_read() in show_targetN().
> 
> Cc: Peter Zijlstra <peterz@infradead.org>
> Suggested-by: Dan Williams <dan.j.williams@intel.com>
> Suggested-by: Ira Weiny <ira.weiny@intel.com>

Change log since RFC v5?

> 
> Fabio M. De Francesco (2):
>   cleanup: Add cond_guard() to conditional guards
>   cxl/region: Use cond_guard() in show_targetN()
> 
>  drivers/cxl/core/region.c | 16 ++++------------
>  include/linux/cleanup.h   | 14 ++++++++++++++
>  2 files changed, 18 insertions(+), 12 deletions(-)
> 


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 1/2] cleanup: Add cond_guard() to conditional guards
  2024-02-04 17:31 ` [PATCH 1/2] cleanup: " Fabio M. De Francesco
@ 2024-02-05 11:09   ` Jonathan Cameron
  2024-02-05 17:04   ` Ira Weiny
  2024-02-05 19:13   ` Dan Williams
  2 siblings, 0 replies; 9+ messages in thread
From: Jonathan Cameron @ 2024-02-05 11:09 UTC (permalink / raw)
  To: Fabio M. De Francesco
  Cc: Peter Zijlstra, Dan Williams, linux-kernel, Ingo Molnar,
	linux-cxl, Ira Weiny

On Sun,  4 Feb 2024 18:31:04 +0100
"Fabio M. De Francesco" <fabio.maria.de.francesco@linux.intel.com> wrote:

> Add cond_guard() macro to conditional guards.
> 
> cond_guard() is a guard to be used with the conditional variants of locks,
> like down_read_trylock() or mutex_lock_interruptible().
> 
> It takes a statement (or more statements in a block) that is passed to its
> second argument. That statement (or block) is executed if waiting for a
> lock is interrupted or if a _trylock() fails in case of contention.
> 
> Usage example:
> 
> 	cond_guard(rwsem_read_try, { printk(...); return 0; }, &semaphore);
> 
> Consistenly with the other guards, locks are unlocked at the exit of the
Spell check.

> scope where cond_guard() is called.
> 
> Cc: Peter Zijlstra <peterz@infradead.org>
> Suggested-by: Dan Williams <dan.j.williams@intel.com>
> Suggested-by: Ira Weiny <ira.weiny@intel.com>
> Signed-off-by: Fabio M. De Francesco <fabio.maria.de.francesco@linux.intel.com>
> ---
>  include/linux/cleanup.h | 14 ++++++++++++++
>  1 file changed, 14 insertions(+)
> 
> diff --git a/include/linux/cleanup.h b/include/linux/cleanup.h
> index c2d09bc4f976..3826e8ed4e09 100644
> --- a/include/linux/cleanup.h
> +++ b/include/linux/cleanup.h
> @@ -134,6 +134,16 @@ static inline class_##_name##_t class_##_name##ext##_constructor(_init_args) \
>   *	an anonymous instance of the (guard) class, not recommended for
>   *	conditional locks.
>   *
> + * cond_guard(name, fail, args...):
> + *	a guard to be used with the conditional variants of locks, like
> + *	down_read_trylock() or mutex_lock_interruptible. 'fail' are one or more
> + *	statements that are executed if waiting for a lock is interrupted or
> + *	if a _trylock() fails in case of contention.
> + *
> + *	Example:
> + *
> + *		cond_guard(rwsem_read_try, { printk(...); return 0; }, &semaphore);
> + *
>   * scoped_guard (name, args...) { }:
>   *	similar to CLASS(name, scope)(args), except the variable (with the
>   *	explicit name 'scope') is declard in a for-loop such that its scope is
> @@ -165,6 +175,10 @@ static inline class_##_name##_t class_##_name##ext##_constructor(_init_args) \
>  
>  #define __guard_ptr(_name) class_##_name##_lock_ptr
>  
> +#define cond_guard(_name, _ret, args...) \
> +	CLASS(_name, scope)(args); \
> +	if (!__guard_ptr(_name)(&scope)) _ret

Use the naming that scoped_cond_guard() uses: _fail rather than _ret

> +
>  #define scoped_guard(_name, args...)					\
>  	for (CLASS(_name, scope)(args),					\
>  	     *done = NULL; __guard_ptr(_name)(&scope) && !done; done = (void *)1)


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 2/2] cxl/region: Use cond_guard() in show_targetN()
  2024-02-04 17:31 ` [PATCH 2/2] cxl/region: Use cond_guard() in show_targetN() Fabio M. De Francesco
@ 2024-02-05 11:11   ` Jonathan Cameron
  2024-02-05 17:06   ` Ira Weiny
  1 sibling, 0 replies; 9+ messages in thread
From: Jonathan Cameron @ 2024-02-05 11:11 UTC (permalink / raw)
  To: Fabio M. De Francesco
  Cc: Peter Zijlstra, Dan Williams, linux-kernel, Ingo Molnar,
	linux-cxl, Ira Weiny

On Sun,  4 Feb 2024 18:31:05 +0100
"Fabio M. De Francesco" <fabio.maria.de.francesco@linux.intel.com> wrote:

> Use cond_guard() in show_target() to not open code an up_read() in an 'out'
> block. If the down_read_interruptible() fails, the statement passed to the
> second argument of cond_guard() returns -EINTR.
> 
> Cc: Peter Zijlstra <peterz@infradead.org>
> Suggested-by: Dan Williams <dan.j.williams@intel.com>
> Suggested-by: Ira Weiny <ira.weiny@intel.com>
> Signed-off-by: Fabio M. De Francesco <fabio.maria.de.francesco@linux.intel.com>

LGTM

Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>

> ---
>  drivers/cxl/core/region.c | 16 ++++------------
>  1 file changed, 4 insertions(+), 12 deletions(-)
> 
> diff --git a/drivers/cxl/core/region.c b/drivers/cxl/core/region.c
> index 0f05692bfec3..bd3236786a25 100644
> --- a/drivers/cxl/core/region.c
> +++ b/drivers/cxl/core/region.c
> @@ -666,28 +666,20 @@ static size_t show_targetN(struct cxl_region *cxlr, char *buf, int pos)
>  {
>  	struct cxl_region_params *p = &cxlr->params;
>  	struct cxl_endpoint_decoder *cxled;
> -	int rc;
>  
> -	rc = down_read_interruptible(&cxl_region_rwsem);
> -	if (rc)
> -		return rc;
> +	cond_guard(rwsem_read_intr, return -EINTR, &cxl_region_rwsem);
>  
>  	if (pos >= p->interleave_ways) {
>  		dev_dbg(&cxlr->dev, "position %d out of range %d\n", pos,
>  			p->interleave_ways);
> -		rc = -ENXIO;
> -		goto out;
> +		return -ENXIO;
>  	}
>  
>  	cxled = p->targets[pos];
>  	if (!cxled)
> -		rc = sysfs_emit(buf, "\n");
> +		return sysfs_emit(buf, "\n");
>  	else
> -		rc = sysfs_emit(buf, "%s\n", dev_name(&cxled->cxld.dev));
> -out:
> -	up_read(&cxl_region_rwsem);
> -
> -	return rc;
> +		return sysfs_emit(buf, "%s\n", dev_name(&cxled->cxld.dev));
>  }
>  
>  static int match_free_decoder(struct device *dev, void *data)


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 1/2] cleanup: Add cond_guard() to conditional guards
  2024-02-04 17:31 ` [PATCH 1/2] cleanup: " Fabio M. De Francesco
  2024-02-05 11:09   ` Jonathan Cameron
@ 2024-02-05 17:04   ` Ira Weiny
  2024-02-05 19:13   ` Dan Williams
  2 siblings, 0 replies; 9+ messages in thread
From: Ira Weiny @ 2024-02-05 17:04 UTC (permalink / raw)
  To: Fabio M. De Francesco, Peter Zijlstra, Dan Williams, linux-kernel
  Cc: Ingo Molnar, linux-cxl, Fabio M. De Francesco, Ira Weiny

Fabio M. De Francesco wrote:
> Add cond_guard() macro to conditional guards.
> 
> cond_guard() is a guard to be used with the conditional variants of locks,
> like down_read_trylock() or mutex_lock_interruptible().
> 
> It takes a statement (or more statements in a block) that is passed to its
> second argument. That statement (or block) is executed if waiting for a
> lock is interrupted or if a _trylock() fails in case of contention.
> 
> Usage example:
> 
> 	cond_guard(rwsem_read_try, { printk(...); return 0; }, &semaphore);
> 
> Consistenly with the other guards, locks are unlocked at the exit of the

Consistently

Reviewed-by: Ira Weiny <ira.weiny@intel.com>

> scope where cond_guard() is called.
> 
> Cc: Peter Zijlstra <peterz@infradead.org>
> Suggested-by: Dan Williams <dan.j.williams@intel.com>
> Suggested-by: Ira Weiny <ira.weiny@intel.com>
> Signed-off-by: Fabio M. De Francesco <fabio.maria.de.francesco@linux.intel.com>
> ---
>  include/linux/cleanup.h | 14 ++++++++++++++
>  1 file changed, 14 insertions(+)
> 
> diff --git a/include/linux/cleanup.h b/include/linux/cleanup.h
> index c2d09bc4f976..3826e8ed4e09 100644
> --- a/include/linux/cleanup.h
> +++ b/include/linux/cleanup.h
> @@ -134,6 +134,16 @@ static inline class_##_name##_t class_##_name##ext##_constructor(_init_args) \
>   *	an anonymous instance of the (guard) class, not recommended for
>   *	conditional locks.
>   *
> + * cond_guard(name, fail, args...):
> + *	a guard to be used with the conditional variants of locks, like
> + *	down_read_trylock() or mutex_lock_interruptible. 'fail' are one or more
> + *	statements that are executed if waiting for a lock is interrupted or
> + *	if a _trylock() fails in case of contention.
> + *
> + *	Example:
> + *
> + *		cond_guard(rwsem_read_try, { printk(...); return 0; }, &semaphore);
> + *
>   * scoped_guard (name, args...) { }:
>   *	similar to CLASS(name, scope)(args), except the variable (with the
>   *	explicit name 'scope') is declard in a for-loop such that its scope is
> @@ -165,6 +175,10 @@ static inline class_##_name##_t class_##_name##ext##_constructor(_init_args) \
>  
>  #define __guard_ptr(_name) class_##_name##_lock_ptr
>  
> +#define cond_guard(_name, _ret, args...) \
> +	CLASS(_name, scope)(args); \
> +	if (!__guard_ptr(_name)(&scope)) _ret
> +
>  #define scoped_guard(_name, args...)					\
>  	for (CLASS(_name, scope)(args),					\
>  	     *done = NULL; __guard_ptr(_name)(&scope) && !done; done = (void *)1)
> -- 
> 2.43.0
> 



^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 2/2] cxl/region: Use cond_guard() in show_targetN()
  2024-02-04 17:31 ` [PATCH 2/2] cxl/region: Use cond_guard() in show_targetN() Fabio M. De Francesco
  2024-02-05 11:11   ` Jonathan Cameron
@ 2024-02-05 17:06   ` Ira Weiny
  1 sibling, 0 replies; 9+ messages in thread
From: Ira Weiny @ 2024-02-05 17:06 UTC (permalink / raw)
  To: Fabio M. De Francesco, Peter Zijlstra, Dan Williams, linux-kernel
  Cc: Ingo Molnar, linux-cxl, Fabio M. De Francesco, Ira Weiny

Fabio M. De Francesco wrote:
> Use cond_guard() in show_target() to not open code an up_read() in an 'out'
> block. If the down_read_interruptible() fails, the statement passed to the
> second argument of cond_guard() returns -EINTR.
> 
> Cc: Peter Zijlstra <peterz@infradead.org>
> Suggested-by: Dan Williams <dan.j.williams@intel.com>
> Suggested-by: Ira Weiny <ira.weiny@intel.com>
> Signed-off-by: Fabio M. De Francesco <fabio.maria.de.francesco@linux.intel.com>
> ---
>  drivers/cxl/core/region.c | 16 ++++------------
>  1 file changed, 4 insertions(+), 12 deletions(-)
> 
> diff --git a/drivers/cxl/core/region.c b/drivers/cxl/core/region.c
> index 0f05692bfec3..bd3236786a25 100644
> --- a/drivers/cxl/core/region.c
> +++ b/drivers/cxl/core/region.c
> @@ -666,28 +666,20 @@ static size_t show_targetN(struct cxl_region *cxlr, char *buf, int pos)
>  {
>  	struct cxl_region_params *p = &cxlr->params;
>  	struct cxl_endpoint_decoder *cxled;
> -	int rc;
>  
> -	rc = down_read_interruptible(&cxl_region_rwsem);
> -	if (rc)
> -		return rc;
> +	cond_guard(rwsem_read_intr, return -EINTR, &cxl_region_rwsem);
>  
>  	if (pos >= p->interleave_ways) {
>  		dev_dbg(&cxlr->dev, "position %d out of range %d\n", pos,
>  			p->interleave_ways);
> -		rc = -ENXIO;
> -		goto out;
> +		return -ENXIO;
>  	}
>  
>  	cxled = p->targets[pos];
>  	if (!cxled)
> -		rc = sysfs_emit(buf, "\n");
> +		return sysfs_emit(buf, "\n");
>  	else

NIT: This else is not needed anymore.

Reviewed-by: Ira Weiny <ira.weiny@intel.com>

> -		rc = sysfs_emit(buf, "%s\n", dev_name(&cxled->cxld.dev));
> -out:
> -	up_read(&cxl_region_rwsem);
> -
> -	return rc;
> +		return sysfs_emit(buf, "%s\n", dev_name(&cxled->cxld.dev));
>  }
>  
>  static int match_free_decoder(struct device *dev, void *data)
> -- 
> 2.43.0
> 



^ permalink raw reply	[flat|nested] 9+ messages in thread

* RE: [PATCH 1/2] cleanup: Add cond_guard() to conditional guards
  2024-02-04 17:31 ` [PATCH 1/2] cleanup: " Fabio M. De Francesco
  2024-02-05 11:09   ` Jonathan Cameron
  2024-02-05 17:04   ` Ira Weiny
@ 2024-02-05 19:13   ` Dan Williams
  2 siblings, 0 replies; 9+ messages in thread
From: Dan Williams @ 2024-02-05 19:13 UTC (permalink / raw)
  To: Fabio M. De Francesco, Peter Zijlstra, Dan Williams, linux-kernel
  Cc: Ingo Molnar, linux-cxl, Fabio M. De Francesco, Ira Weiny

Fabio M. De Francesco wrote:
> Add cond_guard() macro to conditional guards.
> 
> cond_guard() is a guard to be used with the conditional variants of locks,
> like down_read_trylock() or mutex_lock_interruptible().
> 
> It takes a statement (or more statements in a block) that is passed to its

s/or more statements in a block/or statement-expression)/

s/to its/as its/

> second argument. That statement (or block) is executed if waiting for a
> lock is interrupted or if a _trylock() fails in case of contention.
> 
> Usage example:
> 
> 	cond_guard(rwsem_read_try, { printk(...); return 0; }, &semaphore);

Missed commenting on this in the last posting, but multi-statement fail
cases that print and return 0 are unlikely to ever be the common case. I
think the most simple to understand example is an interruptible lock
that returns -EINTR on failure:

	cond_guard(mutex_intr, return -EINTR, &mutex);

...and then maybe mention that _fail can be a statement-expression if
needed.

> Consistenly with the other guards, locks are unlocked at the exit of the

s/Consistenly with the other guards/Consistent with other usage of guard()/

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2024-02-05 19:14 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-02-04 17:31 [PATCH 0/2] Add cond_guard() to conditional guards Fabio M. De Francesco
2024-02-04 17:31 ` [PATCH 1/2] cleanup: " Fabio M. De Francesco
2024-02-05 11:09   ` Jonathan Cameron
2024-02-05 17:04   ` Ira Weiny
2024-02-05 19:13   ` Dan Williams
2024-02-04 17:31 ` [PATCH 2/2] cxl/region: Use cond_guard() in show_targetN() Fabio M. De Francesco
2024-02-05 11:11   ` Jonathan Cameron
2024-02-05 17:06   ` Ira Weiny
2024-02-05 10:56 ` [PATCH 0/2] Add cond_guard() to conditional guards Jonathan Cameron

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox