Linux-Amlogic Archive on
 help / color / Atom feed
From: Russell King - ARM Linux admin <>
To: Johannes Berg <>
	Benjamin Fair <>,, Andrew Jeffery <>,
	Patrick Venture <>,,,,,
	Nancy Yuen <>,,,,
	Joe Perches <>,,
	Andrew Morton <>,,,
Subject: Re: [PATCH 00/12] treewide: Fix GENMASK misuses
Date: Wed, 10 Jul 2019 10:43:37 +0100
Message-ID: <> (raw)
In-Reply-To: <>

On Wed, Jul 10, 2019 at 11:17:31AM +0200, Johannes Berg wrote:
> On Tue, 2019-07-09 at 22:04 -0700, Joe Perches wrote:
> > These GENMASK uses are inverted argument order and the
> > actual masks produced are incorrect.  Fix them.
> > 
> > Add checkpatch tests to help avoid more misuses too.
> > 
> > Joe Perches (12):
> >   checkpatch: Add GENMASK tests
> IMHO this doesn't make a lot of sense as a checkpatch test - just throw
> in a BUILD_BUG_ON()?

My personal take on this is that GENMASK() is really not useful, it's
just pure obfuscation and leads to exactly these kinds of mistakes.

Yes, I fully understand the argument that you can just specify the
start and end bits, and it _in theory_ makes the code more readable.

However, the problem is when writing code.  GENMASK(a, b).  Is a the
starting bit or ending bit?  Is b the number of bits?  It's confusing
and causes mistakes resulting in incorrect code.  A BUILD_BUG_ON()
can catch some of the cases, but not all of them.

For example:

	GENMASK(6, 2)

would satisify the requirement that a > b, so a BUILD_BUG_ON() will
not trigger, but was the author meaning 0x3c or 0xc0?

Personally, I've decided I am _not_ going to use GENMASK() in my code
because I struggle to get the macro arguments correct - I'm _much_
happier, and it is way more reliable for me to write the mask in hex

I think this is where use of a ternary operator would come in use.  The
normal way of writing a number of bits tends to be "a:b", so if GENMASK
took something like GENMASK(6:2), then I'd have less issue with it,
because it's argument is then in a familiar notation.

Yes, I'm sure that someone will point out that the GENMASK arguments
are just in the same order, but that doesn't prevent _me_ frequently
getting it wrong - and that's the point.  The macro seems to me to
cause more problems than it solves.

RMK's Patch system:
FTTC broadband for 0.8mile line in suburbia: sync at 12.1Mbps down 622kbps up
According to 11.9Mbps down 500kbps up

linux-amlogic mailing list

  reply index

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <>
2019-07-10  5:04 ` Joe Perches
2019-07-10  5:04   ` [PATCH 06/12] mmc: meson-mx-sdio: Fix misuse of GENMASK macro Joe Perches
2019-07-10  5:04   ` [PATCH 10/12] phy: amlogic: G12A: " Joe Perches
2019-07-10  9:17   ` [PATCH 00/12] treewide: Fix GENMASK misuses Johannes Berg
2019-07-10  9:43     ` Russell King - ARM Linux admin [this message]
2019-07-10 15:45       ` Joe Perches
2019-07-10 16:01         ` Joe Perches
2019-07-11 21:30   ` David Miller
2019-07-12 12:54   ` Andrzej Hajda

Reply instructions:

You may reply publically 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:

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

  git send-email \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

Linux-Amlogic Archive on

Archives are clonable:
	git clone --mirror linux-amlogic/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 linux-amlogic linux-amlogic/ \
	public-inbox-index linux-amlogic

Newsgroup available over NNTP:

AGPL code for this site: git clone public-inbox