Subject: Re: linux-next: build warning after merge of the rdma tree

From: Lee Jones <[email-masked]>
Date: Wed, 10 Feb 2021 22:08:46 +0000

On Wed, 10 Feb 2021, Jason Gunthorpe wrote:

> On Wed, Feb 10, 2021 at 09:11:49PM +1100, Stephen Rothwell wrote:
> > Hi all,
> > 
> > After merging the rdma tree, today's linux-next build (htmldocs) produced
> > this warning:
> > 
> > drivers/infiniband/core/device.c:859: warning: Function parameter or member 'dev' not described in 'ib_port_immutable_read'
> > drivers/infiniband/core/device.c:859: warning: Function parameter or member 'port' not described in 'ib_port_immutable_read'
> > 
> > Introduced by commit
> > 
> >   7416790e2245 ("RDMA/core: Introduce and use API to read port immutable data")
> 
> drivers/infinband is W=1 clean right now in linux-next
> 
> But how can I build *only* drivers/infiniband using W=1 so I can keep
> it that way?
> 
> The rest of the kernel is not clean and creates too much warning noise
> to be usable, even with my mini config.
> 
> Just doing a 'make W=1 drivers/infiniband' is sort of OK, but then I
> end up compiling things twice
> 
> Does anyone know a good solution?

I have 2 solutions that I use;

When building locally, I have a special flag for testing branches I
maintain.  The flag indicates that the output should be passed through
a parsing script which highlights entries I care about.  The script
handles lots of other options such as building for different
architectures, running smatch and sparse, etc, but the bit you might
care about goes something like this:

 eval $make $makeoptions $extraoptions $flagoptions $diroptions 2>&1 | (\
 while read line; do
     if echo $line | grep -i "${DIRSGREP}" > /dev/null; then
         print_red "$line" >&2;
     else
         echo $line;
     fi
 done) | tail

This hides almost all output that I don't care about and highlights
the information that is of interest to me in red.

Another solution is to use a builder (I personally use Tuxsuite) to
run 70 different builds (architectures/configs) on *both* a common
base (latest -next, kernel release, stable release, etc) and the head
of the branch I care about and compare the two.  Tuxsuite is nice
since it returns a JSON file with all of the results, so comparison
becomes trivial.

Output of a failed build might look like this:

 $ build-test stable v4.9.257                    # where v4.9.257 is the common base
 Using Tuxbuild to compare build failures/warnings
  
 Tuxbuild the base [v4.9.257] 
 Total 0 (delta 0), reused 0 (delta 0)
 To [remote_repo]/linux.git
  * [new tag]                   tuxbuild-to-test-1414 -> tuxbuild-to-test-1414
 Tuxbuild the current branch [tb-some-topic-branch]
 Total 0 (delta 0), reused 0 (delta 0)
 To [remote_repo]/linux.git
  * [new tag]                   tuxbuild-to-test-1415 -> tuxbuild-to-test-1415
 Waiting for child processes to finish 
 Evaluating the results 
 
 Errors were caused
  
 [v4.9.257] tb-some-topic-branch c18034406e3b ("subsystem: Descriptive commit message")

  arc axs101_defconfig gcc-9
      https://builds.tuxbuild.com/1oIa24eac9ANKJLLMBDgP6zwE5d/ 	 Pass (0 errors - 0 warnings) : v4.9.257
      https://builds.tuxbuild.com/1oIa4WZ1jw4tJtt3mLqTNiX4C1a/ 	 Fail (6 errors - 3 warnings) : tb-some-topic-branch 

  arm allmodconfig gcc-8
      https://builds.tuxbuild.com/1oIa21QYn23XxgnDKUh9as5Pgvc/ 	 Pass (0 errors - 0 warnings) : v4.9.257
      https://builds.tuxbuild.com/1oIa4YT8nEIjaFOaFLuRVId2D7I/ 	 Fail (0 errors - 9 warnings) : tb-some-topic-branch 

  arm64 defconfig gcc-9
      https://builds.tuxbuild.com/1oIa2AR63BljDuvKHKet8Qqga7L/ 	 Pass (1 errors - 3 warnings) : v4.9.257
      https://builds.tuxbuild.com/1oIa4biSryBYrj4JoZlRGpgx8AF/ 	 Fail (2 errors - 8 warnings) : tb-some-topic-branch 

-- 
Lee Jones [李琼斯]
Senior Technical Lead - Developer Services
Linaro.org │ Open source software for Arm SoCs
Follow Linaro: Facebook | Twitter | Blog