Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

minmax.h: update some comments

- Change three to several.
- Remove the comment about retaining constant expressions, no longer true.
- Realign to nearer 80 columns and break on major punctiation.
- Add a leading comment to the block before __signed_type() and __is_nonneg()
Otherwise the block explaining the cast is a bit 'floating'.
Reword the rest of that comment to improve readability.

Link: https://lkml.kernel.org/r/85b050c81c1d4076aeb91a6cded45fee@AcuMS.aculab.com
Signed-off-by: David Laight <david.laight@aculab.com>
Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Cc: Arnd Bergmann <arnd@kernel.org>
Cc: Christoph Hellwig <hch@infradead.org>
Cc: Dan Carpenter <dan.carpenter@linaro.org>
Cc: Jason A. Donenfeld <Jason@zx2c4.com>
Cc: Jens Axboe <axboe@kernel.dk>
Cc: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
Cc: Mateusz Guzik <mjguzik@gmail.com>
Cc: Matthew Wilcox <willy@infradead.org>
Cc: Pedro Falcato <pedro.falcato@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>

authored by

David Laight and committed by
Andrew Morton
10666e99 71ee9b16

+24 -29
+24 -29
include/linux/minmax.h
··· 8 8 #include <linux/types.h> 9 9 10 10 /* 11 - * min()/max()/clamp() macros must accomplish three things: 11 + * min()/max()/clamp() macros must accomplish several things: 12 12 * 13 13 * - Avoid multiple evaluations of the arguments (so side-effects like 14 14 * "x++" happen only once) when non-constant. 15 - * - Retain result as a constant expressions when called with only 16 - * constant expressions (to avoid tripping VLA warnings in stack 17 - * allocation usage). 18 15 * - Perform signed v unsigned type-checking (to generate compile 19 16 * errors instead of nasty runtime surprises). 20 17 * - Unsigned char/short are always promoted to signed int and can be ··· 28 31 * bit #0 set if ok for unsigned comparisons 29 32 * bit #1 set if ok for signed comparisons 30 33 * 31 - * In particular, statically non-negative signed integer 32 - * expressions are ok for both. 34 + * In particular, statically non-negative signed integer expressions 35 + * are ok for both. 33 36 * 34 - * NOTE! Unsigned types smaller than 'int' are implicitly 35 - * converted to 'int' in expressions, and are accepted for 36 - * signed conversions for now. This is debatable. 37 + * NOTE! Unsigned types smaller than 'int' are implicitly converted to 'int' 38 + * in expressions, and are accepted for signed conversions for now. 39 + * This is debatable. 37 40 * 38 - * Note that 'x' is the original expression, and 'ux' is 39 - * the unique variable that contains the value. 41 + * Note that 'x' is the original expression, and 'ux' is the unique variable 42 + * that contains the value. 40 43 * 41 - * We use 'ux' for pure type checking, and 'x' for when 42 - * we need to look at the value (but without evaluating 43 - * it for side effects! Careful to only ever evaluate it 44 - * with sizeof() or __builtin_constant_p() etc). 44 + * We use 'ux' for pure type checking, and 'x' for when we need to look at the 45 + * value (but without evaluating it for side effects! 46 + * Careful to only ever evaluate it with sizeof() or __builtin_constant_p() etc). 45 47 * 46 - * Pointers end up being checked by the normal C type 47 - * rules at the actual comparison, and these expressions 48 - * only need to be careful to not cause warnings for 49 - * pointer use. 48 + * Pointers end up being checked by the normal C type rules at the actual 49 + * comparison, and these expressions only need to be careful to not cause 50 + * warnings for pointer use. 50 51 */ 51 52 #define __signed_type_use(x, ux) (2 + __is_nonneg(x, ux)) 52 53 #define __unsigned_type_use(x, ux) (1 + 2 * (sizeof(ux) < 4)) ··· 52 57 __signed_type_use(x, ux) : __unsigned_type_use(x, ux)) 53 58 54 59 /* 55 - * To avoid warnings about casting pointers to integers 56 - * of different sizes, we need that special sign type. 60 + * Check whether a signed value is always non-negative. 57 61 * 58 - * On 64-bit we can just always use 'long', since any 59 - * integer or pointer type can just be cast to that. 62 + * A cast is needed to avoid any warnings from values that aren't signed 63 + * integer types (in which case the result doesn't matter). 60 64 * 61 - * This does not work for 128-bit signed integers since 62 - * the cast would truncate them, but we do not use s128 63 - * types in the kernel (we do use 'u128', but they will 64 - * be handled by the !is_signed_type() case). 65 + * On 64-bit any integer or pointer type can safely be cast to 'long'. 66 + * But on 32-bit we need to avoid warnings about casting pointers to integers 67 + * of different sizes without truncating 64-bit values so 'long' or 'long long' 68 + * must be used depending on the size of the value. 65 69 * 66 - * NOTE! The cast is there only to avoid any warnings 67 - * from when values that aren't signed integer types. 70 + * This does not work for 128-bit signed integers since the cast would truncate 71 + * them, but we do not use s128 types in the kernel (we do use 'u128', 72 + * but they are handled by the !is_signed_type() case). 68 73 */ 69 74 #ifdef CONFIG_64BIT 70 75 #define __signed_type(ux) long