lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <cda74cd5-e6b6-4be3-9d01-387ee1fbc229@gmail.com>
Date: Wed, 14 Aug 2024 01:18:42 +0200
From: Mirsad Todorovac <mtodorovac69@...il.com>
To: linux-mm@...ck.org
Cc: Andrew Morton <akpm@...ux-foundation.org>, linux-kernel@...r.kernel.org,
 Saurabh Sengar <ssengar@...ux.microsoft.com>
Subject: [RFC] Re: [PROBLEM] mm/vmstat.c:34:12: error: ‘vmstat_late_init_done’ defined but not used [-Werror=unused-variable]

On 8/14/24 00:03, Mirsad Todorovac wrote:
> Hi, all,
> 
> Now, the "randconfig" seed KCONFIG_SEED=0x44AB31A6 revealed another bug:
> 
> mm/vmstat.c:34:12: error: ‘vmstat_late_init_done’ defined but not used [-Werror=unused-variable]
>    34 | static int vmstat_late_init_done;
>       |            ^~~~~~~~~~~~~~~~~~~~~
> 
> Apparently, it is obviously wrong because it is used below:
> 
> Fixes: ef534a0d51984 ("mm/vmstat: defer the refresh_zone_stat_thresholds after all CPUs bringu")
> 
> #ifdef .. #endif forest might be better documented, but this small fix makes it running
> again:
> 
> -----------------------------------------------------><----------------------------------
> diff --git a/mm/vmstat.c b/mm/vmstat.c
> index e361c2b3a8bc..85b3fc0084a8 100644
> --- a/mm/vmstat.c
> +++ b/mm/vmstat.c
> @@ -31,7 +31,10 @@
> 
>  #include "internal.h"
> 
> +#ifdef CONFIG_SMP
>  static int vmstat_late_init_done;
> +#endif /* CONFIG_SMP */
> +
>  #ifdef CONFIG_NUMA
>  int sysctl_vm_numa_stat = ENABLE_NUMA_STAT;
> 
> --
> 
> It eliminates -Werror=unused-variable and compile passes at least:
> 
>   CC      kernel/sys.o
>   CC      mm/vmstat.o
>   AR      init/built-in.a
> 
> Hope thi s helps.
> 
> Best regards,
> Mirsad Todorovac

Hi, all,

After this unobvious error that appeared only under certain configs, I thought of a little
housekeeping, according to the instructions here:

https://www.kernel.org/doc/html/v4.15/process/coding-style.html#conditional-compilation

A little homework might make the #ifdef ... #else ... #endif forest more readable:

1932:#ifdef CONFIG_SMP
1936:# ifdef CONFIG_PROC_FS
1999:# endif /* CONFIG_PROC_FS */
2137:   if (vmstat_late_init_done)
2173:   vmstat_late_init_done = 1;
2178:#endif /* CONFIG_SMP */
2188:#ifdef CONFIG_SMP
2205:#endif /* CONFIG_SMP */

or the entire mm/vmstat.c:

34:#ifdef CONFIG_SMP
35:static int vmstat_late_init_done;
36:#endif /* CONFIG_SMP */
38:#ifdef CONFIG_NUMA
108:#endif /* CONFIG_NUMA */
110:#ifdef CONFIG_VM_EVENT_COUNTERS
159:#endif /* CONFIG_VM_EVENT_COUNTERS */
172:#ifdef CONFIG_NUMA
198:#endif /* CONFIG_NUMA */
200:#ifdef CONFIG_SMP
548:# ifdef CONFIG_HAVE_CMPXCHG_LOCAL
692:# else
771:# endif /* CONFIG_HAVE_CMPXCHG_LOCAL */
833:#ifdef CONFIG_NUMA
836:#endif /* CONFIG_NUMA */
844:#ifdef CONFIG_NUMA
873:#endif /* CONFIG_NUMA */
923:#ifdef CONFIG_NUMA
933:#endif /* CONFIG_NUMA */
972:#ifdef CONFIG_NUMA
980:#endif /* CONFIG_NUMA */
982:#endif /* CONFIG_SMP */
984:#ifdef CONFIG_NUMA
1024:# ifdef CONFIG_SMP
1027:# endif /* CONFIG_SMP */
1038:#endif /* CONFIG_NUMA */
1058:#ifdef CONFIG_COMPACTION
1162:#endif /* CONFIG_COMPACTION */
1164:#if defined(CONFIG_PROC_FS) || defined(CONFIG_SYSFS) || \
1166:# ifdef CONFIG_ZONE_DMA
1167:# define TEXT_FOR_DMA(xx) xx "_dma",
1168:# else
1169:# define TEXT_FOR_DMA(xx)
1170:# endif
1172:# ifdef CONFIG_ZONE_DMA32
1173:# define TEXT_FOR_DMA32(xx) xx "_dma32",
1174:# else
1175:# define TEXT_FOR_DMA32(xx)
1176:# endif
1178:# ifdef CONFIG_HIGHMEM
1179:# define TEXT_FOR_HIGHMEM(xx) xx "_high",
1180:# else
1181:# define TEXT_FOR_HIGHMEM(xx)
1182:# endif
1184:# ifdef CONFIG_ZONE_DEVICE
1185:# define TEXT_FOR_DEVICE(xx) xx "_device",
1186:# else
1187:# define TEXT_FOR_DEVICE(xx)
1188:# endif
1190:# define TEXTS_FOR_ZONES(xx) TEXT_FOR_DMA(xx) TEXT_FOR_DMA32(xx) xx "_normal", \
1205:# if IS_ENABLED(CONFIG_ZSMALLOC)
1207:# endif
1209:# ifdef CONFIG_UNACCEPTED_MEMORY
1211:# endif
1214:# ifdef CONFIG_NUMA
1221:# endif
1262:# if IS_ENABLED(CONFIG_SHADOW_CALL_STACK)
1264:# endif
1267:# ifdef CONFIG_IOMMU_SUPPORT
1269:# endif
1270:# ifdef CONFIG_SWAP
1272:# endif
1273:# ifdef CONFIG_NUMA_BALANCING
1276:# endif
1286:# if defined(CONFIG_VM_EVENT_COUNTERS) || defined(CONFIG_MEMCG)
1320:#  ifdef CONFIG_NUMA
1323:#  endif
1337:#  ifdef CONFIG_NUMA_BALANCING
1343:#  endif
1344:#  ifdef CONFIG_MIGRATION
1350:#  endif
1351:#  ifdef CONFIG_COMPACTION
1361:#  endif
1363:#  ifdef CONFIG_HUGETLB_PAGE
1366:#  endif
1367:#  ifdef CONFIG_CMA
1370:#  endif
1379:#  ifdef CONFIG_TRANSPARENT_HUGEPAGE
1396:#   ifdef CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD
1398:#   endif
1403:#  endif /*CONFIG_TRANSPARENT_HUGEPAGE */
1404:#  ifdef CONFIG_MEMORY_BALLOON
1407:#   ifdef CONFIG_BALLOON_COMPACTION
1409:#   endif
1410:#  endif /* CONFIG_MEMORY_BALLOON */
1411:#  ifdef CONFIG_DEBUG_TLBFLUSH
1416:#  endif /* CONFIG_DEBUG_TLBFLUSH */
1418:#  ifdef CONFIG_SWAP
1421:#   ifdef CONFIG_KSM
1423:#   endif /* CONFIG_KSM */
1424:#  endif /* CONFIG_SWAP */
1425:#  ifdef CONFIG_KSM
1427:#  endif
1428:#  ifdef CONFIG_ZSWAP
1432:#  endif
1433:#  ifdef CONFIG_X86
1436:#  endif
1437:#  ifdef CONFIG_PER_VMA_LOCK_STATS
1442:#  endif
1443:#  ifdef CONFIG_DEBUG_STACK_USAGE
1445:#   if THREAD_SIZE > 1024
1447:#   endif
1448:#   if THREAD_SIZE > 2048
1450:#   endif
1451:#   if THREAD_SIZE > 4096
1453:#   endif
1454:#   if THREAD_SIZE > 8192
1456:#   endif
1457:#   if THREAD_SIZE > 16384
1459:#   endif
1460:#   if THREAD_SIZE > 32768
1462:#   endif
1463:#   if THREAD_SIZE > 65536
1465:#   endif
1466:#  endif /* CONFIG_DEBUG_STACK_USAGE */
1467:# endif /* CONFIG_VM_EVENT_COUNTERS || CONFIG_MEMCG */
1469:#endif /* CONFIG_PROC_FS || CONFIG_SYSFS || CONFIG_NUMA || CONFIG_MEMCG */
1471:#if (defined(CONFIG_DEBUG_FS) && defined(CONFIG_COMPACTION)) || \
1521:#endif /* CONFIG_DEBUG_FS && CONFIG_COMPACTION || CONFIG_PROC_FS */
1523:#ifdef CONFIG_PROC_FS
1660:# ifdef CONFIG_PAGE_OWNER
1675:# endif /* CONFIG_PAGE_OWNER */
1783:# ifdef CONFIG_NUMA
1787:# endif
1804:# ifdef CONFIG_SMP
1808:# endif
1839:#define NR_VMSTAT_ITEMS (NR_VM_ZONE_STAT_ITEMS + \
1864:# ifdef CONFIG_NUMA
1868:# endif
1883:# ifdef CONFIG_VM_EVENT_COUNTERS
1887:# endif
1930:#endif /* CONFIG_PROC_FS */
1932:#ifdef CONFIG_SMP
1936:# ifdef CONFIG_PROC_FS
1999:# endif /* CONFIG_PROC_FS */
2137:   if (vmstat_late_init_done)
2173:   vmstat_late_init_done = 1;
2178:#endif /* CONFIG_SMP */
2188:#ifdef CONFIG_SMP
2205:#endif /* CONFIG_SMP */
2206:#ifdef CONFIG_PROC_FS
2211:#endif /* CONFIG_PROC_FS */
2214:#if defined(CONFIG_DEBUG_FS) && defined(CONFIG_COMPACTION)
2347:#endif /* CONFIG_DEBUG_FS && CONFIG_COMPACTION */

Indentation is optional, but preprocessors traditionally allowed it since the early 1990s I
think :-/

Please find attached patch with and without #ifdef indentation. (Both compile w GCC 13.2.0.)

Thank you.

Best regards,
Mirsad Todorovac

View attachment "mm_vmstat_endif.diff" of type "text/x-patch" (4523 bytes)

View attachment "mm_vmstat_endif_02.diff" of type "text/x-patch" (14193 bytes)

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ