Re: [PATCH] of: of_match_node: Make stub an inline function to avoid W=1 warnings

From: Andrew Lunn
Date: Sun Aug 30 2020 - 11:25:04 EST


On Fri, Aug 28, 2020 at 05:09:52PM -0600, Rob Herring wrote:
> On Fri, Aug 28, 2020 at 7:00 AM Andrew Lunn <andrew@xxxxxxx> wrote:
> >
> > On Fri, Aug 28, 2020 at 04:19:39AM +0200, Andrew Lunn wrote:
> > > When building without CONFIG_OF and W=1, errors are given about unused
> > > arrays of match data, because of_match_node is stubbed as a macro. The
> > > compile does not see it takes parameters when not astub, so it
> > > generates warnings about unused variables. Replace the stub with an
> > > inline function to avoid these false warnings.
> >
> > Hi Rob
> >
> > So 0-day shows some people have worked around this with #ifdef
> > CONFIG_OF around the match table.
> >
> > I checked the object code for the file i'm interested in. The
> > optimiser has correctly throw away the match table and all code around
> > it with the inline stub.
> >
> > Which do you prefer? This patch and i remove the #ifdef, or the old
> > stub and if add #ifdef around the driver i'm getting warnings from?
>
> Use of_device_get_match_data instead of of_match_node.
>

Hi Rob

That does not work in the use case i'm interested in, which is giving
a W=1 warning. Take a look at the last example in
Documentation/devicetree/bindings/net/dsa/marvell.txt

We have an Ethernet switch, using the compatible string
"marvell,mv88e6390". Embedded within the hardware, and within the same
driver, we have two MDIO busses. One is internal, for the PHYs
integrated into the switch, and one is external, of discrete PHY
connected to the switch. The external MDIO bus has its own compatible
string. However, there is no struct driver for it, the switch driver
is driving the MDIO bus. So of_device_get_match_data() will use the
wrong match table.

Andrew