public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] ata: replace macro with static inline in libata.h
@ 2008-02-18 16:07 Harvey Harrison
  2008-02-20 17:16 ` Jeff Garzik
  0 siblings, 1 reply; 3+ messages in thread
From: Harvey Harrison @ 2008-02-18 16:07 UTC (permalink / raw)
  To: Andrew Morton; +Cc: Jeff Garzik, Alan Cox, LKML

Avoid ~70 sparse warnings like:
drivers/ata/pata_ali.c:176:14: warning: symbol '__x' shadows an earlier one
drivers/ata/pata_ali.c:176:14: originally declared here

Due to nesting min_t macro inside max_t macro which both use a __x
identifier internally.

Signed-off-by: Harvey Harrison <harvey.harrison@gmail.com>
---
Andrew, here is a patch that drastically reduces the number of sparse
warnings in libata.  Alan Cox has suggested a clamp_t macro be added
to kernel.h instead to avoid this issue.  I don't believe Jeff Garzik
has given an opinion yet (other than not applying it when originally
sent this was 5/11 of the libata sparse warnings)

 include/linux/libata.h |    9 ++++++++-
 1 files changed, 8 insertions(+), 1 deletions(-)

diff --git a/include/linux/libata.h b/include/linux/libata.h
index bc5a8d0..b5590fb 100644
--- a/include/linux/libata.h
+++ b/include/linux/libata.h
@@ -764,7 +764,14 @@ struct ata_timing {
 	unsigned short udma;		/* t2CYCTYP/2 */
 };
 
-#define FIT(v, vmin, vmax)	max_t(short, min_t(short, v, vmax), vmin)
+static inline short FIT(short v, short vmin, short vmax)
+{
+	if (v >= vmax)
+		return vmax;
+	if (v <= vmin)
+		return vmin;
+	return v;
+}
 
 extern const unsigned long sata_deb_timing_normal[];
 extern const unsigned long sata_deb_timing_hotplug[];
-- 
1.5.4.1.1278.gc75be




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

* Re: [PATCH] ata: replace macro with static inline in libata.h
  2008-02-18 16:07 [PATCH] ata: replace macro with static inline in libata.h Harvey Harrison
@ 2008-02-20 17:16 ` Jeff Garzik
  2008-02-20 17:36   ` [PATCH] ata: use clamp_t macro to avoid sparse warnings Harvey Harrison
  0 siblings, 1 reply; 3+ messages in thread
From: Jeff Garzik @ 2008-02-20 17:16 UTC (permalink / raw)
  To: Harvey Harrison; +Cc: Andrew Morton, Alan Cox, LKML

Harvey Harrison wrote:
> Avoid ~70 sparse warnings like:
> drivers/ata/pata_ali.c:176:14: warning: symbol '__x' shadows an earlier one
> drivers/ata/pata_ali.c:176:14: originally declared here
> 
> Due to nesting min_t macro inside max_t macro which both use a __x
> identifier internally.
> 
> Signed-off-by: Harvey Harrison <harvey.harrison@gmail.com>
> ---
> Andrew, here is a patch that drastically reduces the number of sparse
> warnings in libata.  Alan Cox has suggested a clamp_t macro be added
> to kernel.h instead to avoid this issue.  I don't believe Jeff Garzik
> has given an opinion yet (other than not applying it when originally
> sent this was 5/11 of the libata sparse warnings)
> 
>  include/linux/libata.h |    9 ++++++++-
>  1 files changed, 8 insertions(+), 1 deletions(-)
> 
> diff --git a/include/linux/libata.h b/include/linux/libata.h
> index bc5a8d0..b5590fb 100644
> --- a/include/linux/libata.h
> +++ b/include/linux/libata.h
> @@ -764,7 +764,14 @@ struct ata_timing {
>  	unsigned short udma;		/* t2CYCTYP/2 */
>  };
>  
> -#define FIT(v, vmin, vmax)	max_t(short, min_t(short, v, vmax), vmin)
> +static inline short FIT(short v, short vmin, short vmax)
> +{
> +	if (v >= vmax)
> +		return vmax;
> +	if (v <= vmin)
> +		return vmin;
> +	return v;
> +}

I agree with Alan...



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

* [PATCH] ata: use clamp_t macro to avoid sparse warnings
  2008-02-20 17:16 ` Jeff Garzik
@ 2008-02-20 17:36   ` Harvey Harrison
  0 siblings, 0 replies; 3+ messages in thread
From: Harvey Harrison @ 2008-02-20 17:36 UTC (permalink / raw)
  To: Jeff Garzik; +Cc: Andrew Morton, Alan Cox, LKML

Nesting min_t/max_t macros produces many shadowed variable warnings
due to use of __x.  Add a clamp_t macro to linux/kernel.h and use
it in the FIT macro.

Signed-off-by: Harvey Harrison <harvey.harrison@gmail.com>
---
 include/linux/kernel.h |    9 +++++++++
 include/linux/libata.h |    2 +-
 2 files changed, 10 insertions(+), 1 deletions(-)

diff --git a/include/linux/kernel.h b/include/linux/kernel.h
index 2df44e7..47924ce 100644
--- a/include/linux/kernel.h
+++ b/include/linux/kernel.h
@@ -362,6 +362,15 @@ static inline int __attribute__ ((format (printf, 1, 2))) pr_debug(const char *
 #define max_t(type,x,y) \
 	({ type __x = (x); type __y = (y); __x > __y ? __x: __y; })
 
+/*
+ * Clamp a value to within a given range using comparisons of a specified type.
+ */
+#define clamp_t(type,val,min,max) ({ \
+	type __val = (val);	\
+	type __min = (min);	\
+	type __max = (max);	\
+	__val = __val < __min ? __min: __val; \
+	__val > __max ? __max: __val; })
 
 /**
  * container_of - cast a member of a structure out to the containing structure
diff --git a/include/linux/libata.h b/include/linux/libata.h
index 2e098f9..8adc2a0 100644
--- a/include/linux/libata.h
+++ b/include/linux/libata.h
@@ -754,7 +754,7 @@ struct ata_timing {
 	unsigned short udma;		/* t2CYCTYP/2 */
 };
 
-#define FIT(v, vmin, vmax)	max_t(short, min_t(short, v, vmax), vmin)
+#define FIT(v, vmin, vmax)	clamp_t(short, v, vmin, vmax)
 
 extern const unsigned long sata_deb_timing_normal[];
 extern const unsigned long sata_deb_timing_hotplug[];
-- 
1.5.4.2.200.g99e75




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

end of thread, other threads:[~2008-02-20 17:36 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-02-18 16:07 [PATCH] ata: replace macro with static inline in libata.h Harvey Harrison
2008-02-20 17:16 ` Jeff Garzik
2008-02-20 17:36   ` [PATCH] ata: use clamp_t macro to avoid sparse warnings Harvey Harrison

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