All of lore.kernel.org
 help / color / mirror / Atom feed
From: Richard Knutsson <ricknu-0@student.ltu.se>
To: kernel-janitors@vger.kernel.org
Subject: Re: [KJ] Taking the Min and Max macro job
Date: Fri, 09 Feb 2007 08:55:09 +0000	[thread overview]
Message-ID: <45CC36ED.6000508@student.ltu.se> (raw)
In-Reply-To: <20070207235145.GZ8991@Ahmed>

Vignesh Babu BM wrote:
> Just went through the archives....
>
>         I tried to recreate the compile-failure (was some time ago since
>         it 
>         happened) when using min()/max() in a struct but it happily compiled it 
>         so (thankfully) you are correct, just need to use min()/max(). :)
>         
>         Richard Knutsson
>         
> Do you mean to say that you were able to compile when the macros were used inside struct?
> Im still not able to get that to happen...
>
> I tried that change in linux-2.6/fs/lockd/mon.c
>
> static struct rpc_procinfo	nsm_procedures[] = {
> [SM_MON] = {
> 		.p_proc		= SM_MON,
> 		.p_encode	= (kxdrproc_t) xdr_encode_mon,
> 		.p_decode	= (kxdrproc_t) xdr_decode_stat_res,
> 		.p_bufsiz	= max(SM_mon_sz, SM_monres_sz) << 2,
> 		.p_statidx	= SM_MON,
> 		.p_name		= "MONITOR",
> 	},
> [SM_UNMON] = {
> 		.p_proc		= SM_UNMON,
> 		.p_encode	= (kxdrproc_t) xdr_encode_unmon,
> 		.p_decode	= (kxdrproc_t) xdr_decode_stat,
> 		.p_bufsiz	= max(SM_mon_id_sz, SM_unmonres_sz) << 2,
> 		.p_statidx	= SM_UNMON,
> 		.p_name		= "UNMONITOR",
> 	},
> };
>   
No, I "recreated" it by making a small test-file where I used 
min()/max() in a struct, and it worked without a pip from the compiler.
Can not say I'm sure what the difference were, but xdr4.c and mon.c 
didn't seem to like it.

What do you say of something like this below? (It is not tested)

(Signed-off-by:) Richard Knutsson
---

diff --git a/include/linux/kernel.h b/include/linux/kernel.h
index 63fb18d..0533b2d 100644
--- a/include/linux/kernel.h
+++ b/include/linux/kernel.h
@@ -252,6 +252,14 @@ static inline int __attribute__ ((format (printf, 1, 2))) pr_debug(const char *
 #error "Please fix asm/byteorder.h"
 #endif /* __LITTLE_ENDIAN */
 
+
+/*
+ * __min()/__max() is unsafe.
+ * Use min()/max() when available.
+ */
+#define __min(x,y)	((x) < (y) ? (x) : (y))
+#define __max(x,y)	((x) > (y) ? (x) : (y))
+
 /*
  * min()/max() macros that also do
  * strict type-checking.. See the
@@ -261,13 +269,13 @@ static inline int __attribute__ ((format (printf, 1, 2))) pr_debug(const char *
 	typeof(x) _x = (x);	\
 	typeof(y) _y = (y);	\
 	(void) (&_x = &_y);		\
-	_x < _y ? _x : _y; })
+	__min(_x, _y); })
 
 #define max(x,y) ({ \
 	typeof(x) _x = (x);	\
 	typeof(y) _y = (y);	\
 	(void) (&_x = &_y);		\
-	_x > _y ? _x : _y; })
+	__max(_x, _y); })
 
 /*
  * ..and if you can't take the strict
@@ -276,9 +284,9 @@ static inline int __attribute__ ((format (printf, 1, 2))) pr_debug(const char *
  * Or not use min/max at all, of course.
  */
 #define min_t(type,x,y) \
-	({ type __x = (x); type __y = (y); __x < __y ? __x: __y; })
+	({ type __x = (x); type __y = (y); __min(__x, __y); })
 #define max_t(type,x,y) \
-	({ type __x = (x); type __y = (y); __x > __y ? __x: __y; })
+	({ type __x = (x); type __y = (y); __max(__x, __y); })
 
 
 /**


_______________________________________________
Kernel-janitors mailing list
Kernel-janitors@lists.osdl.org
https://lists.osdl.org/mailman/listinfo/kernel-janitors

  parent reply	other threads:[~2007-02-09  8:55 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-02-07 23:51 [KJ] Taking the Min and Max macro job Ahmed S. Darwish
2007-02-08  6:16 ` Alexey Dobriyan
2007-02-08  9:34 ` Ahmed S. Darwish
2007-02-08  9:41 ` Mehul Jani
2007-02-08 10:14 ` Mehul Jani
2007-02-08 11:40 ` Ahmed S. Darwish
2007-02-08 12:30 ` Mehul Jani
2007-02-08 12:34 ` Ahmed S. Darwish
2007-02-08 16:53 ` Robert P. J. Day
2007-02-08 18:40 ` Mehul Jani
2007-02-09  5:29 ` Mehul Jani
2007-02-09  6:44 ` Vignesh Babu BM
2007-02-09  7:15 ` Richard Knutsson
2007-02-09  7:56 ` Vignesh Babu BM
2007-02-09  8:19 ` Vignesh Babu BM
2007-02-09  8:55 ` Richard Knutsson [this message]
2007-02-09  9:41 ` Vignesh Babu BM
2007-02-09  9:56 ` Jaco Kroon
2007-02-09 12:17 ` Mehul Jani
2007-02-09 18:01 ` Richard Knutsson
2007-02-09 18:10 ` Richard Knutsson
2007-02-09 19:38 ` Mehul Jani
2007-02-09 22:28 ` Richard Knutsson
2007-02-10  5:49 ` Vignesh Babu BM
2007-02-10  8:24 ` Mehul Jani
2007-02-10 11:26 ` Robert P. J. Day

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=45CC36ED.6000508@student.ltu.se \
    --to=ricknu-0@student.ltu.se \
    --cc=kernel-janitors@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.