All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jakub Kicinski <kuba@kernel.org>
To: Andrew Morton <akpm@linux-foundation.org>, torvalds@linux-foundation.org
Cc: Bart Van Assche <bvanassche@acm.org>,
	linux-mm@kvack.org, Ivan Shapovalov <intelfx@intelfx.name>,
	Vlastimil Babka <vbabka@suse.cz>,
	David Laight <david.laight@aculab.com>,
	Nathan Chancellor <nathan@kernel.org>,
	Pasha Tatashin <pasha.tatashin@soleen.com>,
	David Rientjes <rientjes@google.com>,
	David Hildenbrand <david@redhat.com>,
	Kaiyang Zhao <kaiyang2@cs.cmu.edu>,
	Joel Granados <joel.granados@kernel.org>,
	Sourav Panda <souravpanda@google.com>,
	Johannes Weiner <hannes@cmpxchg.org>
Subject: Re: [PATCH] mm: Fix clang W=1 compiler warnings
Date: Fri, 7 Feb 2025 16:49:26 -0800	[thread overview]
Message-ID: <20250207164926.6daeac77@kernel.org> (raw)
In-Reply-To: <20250131191231.1370466-1-bvanassche@acm.org>

On Fri, 31 Jan 2025 11:12:23 -0800 Bart Van Assche wrote:
> Commit 30c2de0a267c ("mm/vmstat: fix a W=1 clang compiler warning")
> suppresses some but not all compiler warnings that are reported by clang
> when building mm/ with W=1. Hence revert commit 30c2de0a267c and instead
> make NR_LRU_BASE and NR_ZONE_LRU_BASE integer constants instead of
> enumeration constants. Additionally, convert the item##_NORMAL constants
> from type enum vm_event_item into int before subtracting ZONE_NORMAL. The
> latter constant has type enum zone_type.

Could we possibly please still consider taking this in for 6.14? :(
Since the warning comes from vmstat.h pretty much every object file
generates this warning. clang 19 is getting more widely used now, 
its making it hard to see new warnings.

> diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h
> index 9540b41894da..bc139c704538 100644
> --- a/include/linux/mmzone.h
> +++ b/include/linux/mmzone.h
> @@ -135,11 +135,20 @@ enum numa_stat_item {
>  #define NR_VM_NUMA_EVENT_ITEMS 0
>  #endif
>  
> +/*
> + * NR_ZONE_LRU_BASE and NR_VM_ZONE_STAT_ITEMS are often added to enumeration
> + * constants of another type than enum_zone_stat_item. Define these constants
> + * as an integer instead of enum node_stat_item to prevent that the compiler
> + * warns about enumeration type mismatches when these constants are used.
> + */
> +#define NR_ZONE_LRU_BASE	(__NR_ZONE_LRU_BASE + 0)
> +#define NR_VM_ZONE_STAT_ITEMS	(__NR_VM_ZONE_STAT_ITEMS + 0)
> +
>  enum zone_stat_item {
>  	/* First 128 byte cacheline (assuming 64 bit words) */
>  	NR_FREE_PAGES,
> -	NR_ZONE_LRU_BASE, /* Used only for compaction and reclaim retry */
> -	NR_ZONE_INACTIVE_ANON = NR_ZONE_LRU_BASE,
> +	__NR_ZONE_LRU_BASE, /* Used only for compaction and reclaim retry */
> +	NR_ZONE_INACTIVE_ANON = __NR_ZONE_LRU_BASE,
>  	NR_ZONE_ACTIVE_ANON,
>  	NR_ZONE_INACTIVE_FILE,
>  	NR_ZONE_ACTIVE_FILE,
> @@ -155,11 +164,18 @@ enum zone_stat_item {
>  #ifdef CONFIG_UNACCEPTED_MEMORY
>  	NR_UNACCEPTED,
>  #endif
> -	NR_VM_ZONE_STAT_ITEMS };
> +	__NR_VM_ZONE_STAT_ITEMS };
> +
> +/*
> + * enum lru_list constants are often added to NR_LRU_BASE. Define NR_LRU_BASE
> + * as an integer instead of enum node_stat_item to prevent that the compiler
> + * warns about enumeration type mismatches.
> + */
> +#define NR_LRU_BASE (__NR_LRU_BASE + 0)
>  
>  enum node_stat_item {
> -	NR_LRU_BASE,
> -	NR_INACTIVE_ANON = NR_LRU_BASE, /* must match order of LRU_[IN]ACTIVE */
> +	__NR_LRU_BASE,
> +	NR_INACTIVE_ANON = __NR_LRU_BASE, /*must match order of LRU_[IN]ACTIVE*/
>  	NR_ACTIVE_ANON,		/*  "     "     "   "       "         */
>  	NR_INACTIVE_FILE,	/*  "     "     "   "       "         */
>  	NR_ACTIVE_FILE,		/*  "     "     "   "       "         */
> diff --git a/include/linux/vmstat.h b/include/linux/vmstat.h
> index 9f3a04345b86..72d1974ee81f 100644
> --- a/include/linux/vmstat.h
> +++ b/include/linux/vmstat.h
> @@ -135,8 +135,13 @@ static inline void vm_events_fold_cpu(int cpu)
>  #define count_vm_vma_lock_event(x) do {} while (0)
>  #endif
>  
> +/*
> + * item##_NORMAL has type enum vm_event_item while ZONE_NORMAL and zid have
> + * type enum zone_type. Suppress compiler warnings about mixing different
> + * enumeration types by converting item##_NORMAL into an int with '+ 0'.
> + */
>  #define __count_zid_vm_events(item, zid, delta) \
> -	__count_vm_events(item##_NORMAL - ZONE_NORMAL + zid, delta)
> +	__count_vm_events((item##_NORMAL + 0) - ZONE_NORMAL + zid, delta)
>  
>  /*
>   * Zone and node-based page accounting with per cpu differentials.
> @@ -515,7 +520,7 @@ static inline const char *node_stat_name(enum node_stat_item item)
>  
>  static inline const char *lru_list_name(enum lru_list lru)
>  {
> -	return node_stat_name(NR_LRU_BASE + (enum node_stat_item)lru) + 3; // skip "nr_"
> +	return node_stat_name(NR_LRU_BASE + lru) + 3; // skip "nr_"
>  }
>  
>  #if defined(CONFIG_VM_EVENT_COUNTERS) || defined(CONFIG_MEMCG)
> 
> 



  parent reply	other threads:[~2025-02-08  0:49 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-01-31 19:12 [PATCH] mm: Fix clang W=1 compiler warnings Bart Van Assche
2025-02-03 13:32 ` Vlastimil Babka
2025-02-08  0:49 ` Jakub Kicinski [this message]
2025-02-08  1:01   ` Linus Torvalds
2025-02-08  1:38     ` Jakub Kicinski
2025-02-08  2:18       ` Nathan Chancellor
2025-02-08  3:11       ` Linus Torvalds
2025-02-08  3:33         ` Nathan Chancellor
2025-02-08  3:49           ` Linus Torvalds
2025-02-08  4:24             ` Linus Torvalds
2025-02-10 18:33               ` Jakub Kicinski
2025-02-08  2:55     ` Bart Van Assche
2025-02-08  3:22       ` Linus Torvalds
2025-02-08  3:30         ` Bart Van Assche
2025-02-08 10:28 ` Matthew Wilcox
2025-02-11 14:34   ` Vlastimil Babka
2025-02-11 18:48     ` Bart Van Assche
2025-02-11 19:25       ` Matthew Wilcox

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20250207164926.6daeac77@kernel.org \
    --to=kuba@kernel.org \
    --cc=akpm@linux-foundation.org \
    --cc=bvanassche@acm.org \
    --cc=david.laight@aculab.com \
    --cc=david@redhat.com \
    --cc=hannes@cmpxchg.org \
    --cc=intelfx@intelfx.name \
    --cc=joel.granados@kernel.org \
    --cc=kaiyang2@cs.cmu.edu \
    --cc=linux-mm@kvack.org \
    --cc=nathan@kernel.org \
    --cc=pasha.tatashin@soleen.com \
    --cc=rientjes@google.com \
    --cc=souravpanda@google.com \
    --cc=torvalds@linux-foundation.org \
    --cc=vbabka@suse.cz \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.