* [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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.