On 14 July 2017 at 10:25, Arnd Bergmann <arnd@xxxxxxxx> wrote: > gcc warns when MODULES_VADDR/END is defined to the same value as > VMALLOC_START/VMALLOC_END, e.g. on x86-32: > > fs/proc/kcore.c: In function ‘add_modules_range’: > fs/proc/kcore.c:622:161: error: self-comparison always evaluates to false [-Werror=tautological-compare] > if (/*MODULES_VADDR != VMALLOC_START && */MODULES_END != VMALLOC_END) { > Does it occur for subtraction as well? Or only for comparison? > The code is correct as it is required for most other configurations. > The best workaround I found for shutting up that warning is to make > it a little more complex by adding a temporary variable. The compiler > will still optimize away the code as it finds the two to be identical, > but it no longer warns because it doesn't condider the comparison > "tautological" any more. > > Signed-off-by: Arnd Bergmann <arnd@xxxxxxxx> > --- > fs/proc/kcore.c | 10 ++++++---- > 1 file changed, 6 insertions(+), 4 deletions(-) > > diff --git a/fs/proc/kcore.c b/fs/proc/kcore.c > index 45629f4b5402..c503ad657c46 100644 > --- a/fs/proc/kcore.c > +++ b/fs/proc/kcore.c > @@ -620,12 +620,14 @@ static void __init proc_kcore_text_init(void) > /* > * MODULES_VADDR has no intersection with VMALLOC_ADDR. > */ > -struct kcore_list kcore_modules; > +static struct kcore_list kcore_modules; > static void __init add_modules_range(void) > { > - if (MODULES_VADDR != VMALLOC_START && MODULES_END != VMALLOC_END) { > - kclist_add(&kcore_modules, (void *)MODULES_VADDR, > - MODULES_END - MODULES_VADDR, KCORE_VMALLOC); > + void *start = (void *)MODULES_VADDR; > + size_t len = MODULES_END - MODULES_VADDR; > + > + if (start != (void *)VMALLOC_START && len != VMALLOC_END - VMALLOC_START) { > + kclist_add(&kcore_modules, start, len, KCORE_VMALLOC); > } > } > #else > -- > 2.9.0 >