Fix min/max macros in include/common.h
authorAaron Williams <Aaron.Williams@caviumnetworks.com>
Tue, 1 Feb 2011 03:55:50 +0000 (19:55 -0800)
committerWolfgang Denk <wd@denx.de>
Tue, 12 Apr 2011 20:58:30 +0000 (22:58 +0200)
There is a bug in the min and max macros in common.h which occurs if
Y is a larger type than X. For example, if Y is a 64-bit value and X
is a 32-bit value then Y will be truncated to 32-bits.  This fix
matches what is done in the Linux kernel but without the additional
type checking present in the kernel version.

Signed-off-by: Aaron Williams <aaron.williams@caviumnetworks.com>
include/common.h

index 54503ed3ebafe3402c02a751727c0dc5508283b7..9ba16012fe4ae08c1dca605ff8e0c58aa99d21ae 100644 (file)
@@ -180,11 +180,13 @@ typedef void (interrupt_handler_t)(void *);
  * General Purpose Utilities
  */
 #define min(X, Y)                              \
-       ({ typeof (X) __x = (X), __y = (Y);     \
+       ({ typeof (X) __x = (X);                \
+               typeof (Y) __y = (Y);           \
                (__x < __y) ? __x : __y; })
 
 #define max(X, Y)                              \
-       ({ typeof (X) __x = (X), __y = (Y);     \
+       ({ typeof (X) __x = (X);                \
+               typeof (Y) __y = (Y);           \
                (__x > __y) ? __x : __y; })
 
 #define MIN(x, y)  min(x, y)