From: Harvey Harrison Signed-off-by: Harvey Harrison Acked-by: Randy Dunlap Signed-off-by: Andrew Morton --- include/linux/kernel.h | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff -puN include/linux/kernel.h~add-macros-similar-to-min-max-min_t-max_t-doc include/linux/kernel.h --- a/include/linux/kernel.h~add-macros-similar-to-min-max-min_t-max_t-doc +++ a/include/linux/kernel.h @@ -354,6 +354,15 @@ extern void print_hex_dump_bytes(const c (void) (&_max1 == &_max2); \ _max1 > _max2 ? _max1 : _max2; }) +/** + * clamp - return a value clamped to a given range with strict typechecking + * @val: current value + * @min: minimum allowable value + * @max: maximum allowable value + * + * This macro does strict typechecking of min/max to make sure they are of the + * same type as val. See the unnecessary pointer comparisons. + */ #define clamp(val, min, max) ({ \ typeof(val) __val = (val); \ typeof(min) __min = (min); \ @@ -379,6 +388,16 @@ extern void print_hex_dump_bytes(const c type __max2 = (y); \ __max1 > __max2 ? __max1: __max2; }) +/** + * clamp_t - return a value clamped to a given range using a given type + * @type: the type of variable to use + * @val: current value + * @min: minimum allowable value + * @max: maximum allowable value + * + * This macro does no typechecking and uses temporary variables of type + * 'type' to make all the comparisons. + */ #define clamp_t(type, val, min, max) ({ \ type __val = (val); \ type __min = (min); \ @@ -386,6 +405,17 @@ extern void print_hex_dump_bytes(const c __val = __val < __min ? __min: __val; \ __val > __max ? __max: __val; }) +/** + * clamp_val - return a value clamped to a given range using val's type + * @val: current value + * @min: minimum allowable value + * @max: maximum allowable value + * + * This macro does no typechecking and uses temporary variables of whatever + * type the input argument 'val' is. This is useful when val is an unsigned + * type and min and max are literals that will otherwise be assigned a signed + * integer type. + */ #define clamp_val(val, min, max) ({ \ typeof(val) __val = (val); \ typeof(val) __min = (min); \ _