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>] [day] [month] [year] [list]
Date:   Wed, 27 Jul 2022 08:44:17 +0800
From:   kernel test robot <lkp@...el.com>
To:     Lukas Wunner <lukas@...ner.de>
Cc:     llvm@...ts.linux.dev, kbuild-all@...ts.01.org,
        linux-kernel@...r.kernel.org, Mark Brown <broonie@...nel.org>
Subject: drivers/spi/spi-bcm2835.c:153:8: warning: Excessive padding in
 'struct bcm2835_spidev' (48 padding bytes, where 16 is optimal). Optimal
 fields order: clear_rx_cs, prepare_cs, clear_rx_desc, clear_rx_addr,
 consider reordering the fields or adding explicit ...

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head:   5de64d44968e4ae66ebdb0a2d08b443f189d3651
commit: ec679bda639fe84b78d473526ae27c74dea383fb spi: bcm2835: Allow arbitrary number of slaves
date:   1 year, 2 months ago
config: arm-randconfig-c002-20220722 (https://download.01.org/0day-ci/archive/20220727/202207270819.2m20mks4-lkp@intel.com/config)
compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project 72686d68c137551cce816416190a18d45b4d4e2a)
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # install arm cross compiling tool for clang build
        # apt-get install binutils-arm-linux-gnueabi
        # https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=ec679bda639fe84b78d473526ae27c74dea383fb
        git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
        git fetch --no-tags linus master
        git checkout ec679bda639fe84b78d473526ae27c74dea383fb
        # save the config file
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=arm clang-analyzer 

If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot <lkp@...el.com>

clang-analyzer warnings: (new ones prefixed by >>)
               ^~~~~~~
   drivers/clocksource/sh_mtu2.c:417:2: note: Taking false branch
           if (ret < 0)
           ^
   drivers/clocksource/sh_mtu2.c:420:22: note: Assuming '__UNIQUE_ID___x183' is >= '__UNIQUE_ID___y184'
           mtu->num_channels = min_t(unsigned int, ret,
                               ^
   include/linux/minmax.h:110:27: note: expanded from macro 'min_t'
   #define min_t(type, x, y)       __careful_cmp((type)(x), (type)(y), <)
                                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/minmax.h:44:3: note: expanded from macro '__careful_cmp'
                   __cmp_once(x, y, __UNIQUE_ID(__x), __UNIQUE_ID(__y), op))
                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/minmax.h:39:3: note: expanded from macro '__cmp_once'
                   __cmp(unique_x, unique_y, op); })
                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/minmax.h:34:26: note: expanded from macro '__cmp'
   #define __cmp(x, y, op) ((x) op (y) ? (x) : (y))
                            ^~~~~~~~~~
   drivers/clocksource/sh_mtu2.c:420:22: note: '?' condition is false
           mtu->num_channels = min_t(unsigned int, ret,
                               ^
   include/linux/minmax.h:110:27: note: expanded from macro 'min_t'
   #define min_t(type, x, y)       __careful_cmp((type)(x), (type)(y), <)
                                   ^
   include/linux/minmax.h:44:3: note: expanded from macro '__careful_cmp'
                   __cmp_once(x, y, __UNIQUE_ID(__x), __UNIQUE_ID(__y), op))
                   ^
   include/linux/minmax.h:39:3: note: expanded from macro '__cmp_once'
                   __cmp(unique_x, unique_y, op); })
                   ^
   include/linux/minmax.h:34:26: note: expanded from macro '__cmp'
   #define __cmp(x, y, op) ((x) op (y) ? (x) : (y))
                            ^
   drivers/clocksource/sh_mtu2.c:425:6: note: Assuming field 'channels' is not equal to NULL
           if (mtu->channels == NULL) {
               ^~~~~~~~~~~~~~~~~~~~~
   drivers/clocksource/sh_mtu2.c:425:2: note: Taking false branch
           if (mtu->channels == NULL) {
           ^
   drivers/clocksource/sh_mtu2.c:430:2: note: Loop condition is true.  Entering loop body
           for (i = 0; i < mtu->num_channels; ++i) {
           ^
   drivers/clocksource/sh_mtu2.c:432:7: note: 'ret' is >= 0
                   if (ret < 0)
                       ^~~
   drivers/clocksource/sh_mtu2.c:432:3: note: Taking false branch
                   if (ret < 0)
                   ^
   drivers/clocksource/sh_mtu2.c:430:2: note: Loop condition is true.  Entering loop body
           for (i = 0; i < mtu->num_channels; ++i) {
           ^
   drivers/clocksource/sh_mtu2.c:432:7: note: 'ret' is >= 0
                   if (ret < 0)
                       ^~~
   drivers/clocksource/sh_mtu2.c:432:3: note: Taking false branch
                   if (ret < 0)
                   ^
   drivers/clocksource/sh_mtu2.c:430:2: note: Loop condition is true.  Entering loop body
           for (i = 0; i < mtu->num_channels; ++i) {
           ^
   drivers/clocksource/sh_mtu2.c:432:7: note: Assuming 'ret' is >= 0
                   if (ret < 0)
                       ^~~~~~~
   drivers/clocksource/sh_mtu2.c:432:3: note: Taking false branch
                   if (ret < 0)
                   ^
   drivers/clocksource/sh_mtu2.c:430:37: note: The value 3 is assigned to 'i'
           for (i = 0; i < mtu->num_channels; ++i) {
                                              ^~~
   drivers/clocksource/sh_mtu2.c:430:14: note: Assuming 'i' is < field 'num_channels'
           for (i = 0; i < mtu->num_channels; ++i) {
                       ^~~~~~~~~~~~~~~~~~~~~
   drivers/clocksource/sh_mtu2.c:430:2: note: Loop condition is true.  Entering loop body
           for (i = 0; i < mtu->num_channels; ++i) {
           ^
   drivers/clocksource/sh_mtu2.c:431:50: note: Passing the value 3 via 2nd parameter 'index'
                   ret = sh_mtu2_setup_channel(&mtu->channels[i], i, mtu);
                                                                  ^
   drivers/clocksource/sh_mtu2.c:431:9: note: Calling 'sh_mtu2_setup_channel'
                   ret = sh_mtu2_setup_channel(&mtu->channels[i], i, mtu);
                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/clocksource/sh_mtu2.c:350:6: note: Assuming 'irq' is >= 0
           if (irq < 0) {
               ^~~~~~~
   drivers/clocksource/sh_mtu2.c:350:2: note: Taking false branch
           if (irq < 0) {
           ^
   drivers/clocksource/sh_mtu2.c:358:6: note: Assuming 'ret' is 0
           if (ret) {
               ^~~
   drivers/clocksource/sh_mtu2.c:358:2: note: Taking false branch
           if (ret) {
           ^
   drivers/clocksource/sh_mtu2.c:364:26: note: The right operand of '+' is a garbage value due to array index out of bounds
           ch->base = mtu->mapbase + sh_mtu2_channel_offsets[index];
                                   ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   Suppressed 1 warnings (1 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   2 warnings generated.
>> drivers/spi/spi-bcm2835.c:153:8: warning: Excessive padding in 'struct bcm2835_spidev' (48 padding bytes, where 16 is optimal). Optimal fields order: clear_rx_cs, prepare_cs, clear_rx_desc, clear_rx_addr, consider reordering the fields or adding explicit padding members [clang-analyzer-optin.performance.Padding]
   struct bcm2835_spidev {
   ~~~~~~~^~~~~~~~~~~~~~~~
   drivers/spi/spi-bcm2835.c:153:8: note: Excessive padding in 'struct bcm2835_spidev' (48 padding bytes, where 16 is optimal). Optimal fields order: clear_rx_cs, prepare_cs, clear_rx_desc, clear_rx_addr, consider reordering the fields or adding explicit padding members
   struct bcm2835_spidev {
   ~~~~~~~^~~~~~~~~~~~~~~~
   drivers/spi/spi-bcm2835.c:1164:20: warning: Access to field 'device' results in a dereference of a null pointer (loaded from field 'dma_rx') [clang-analyzer-core.NullDereference]
                   dma_unmap_single(ctlr->dma_rx->device->dev,
                                    ^
   drivers/spi/spi-bcm2835.c:1213:27: note: Calling 'spi_controller_get_devdata'
           struct bcm2835_spi *bs = spi_controller_get_devdata(ctlr);
                                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/spi/spi.h:675:2: note: Returning without writing to 'ctlr->dma_rx'
           return dev_get_drvdata(&ctlr->dev);
           ^
   drivers/spi/spi-bcm2835.c:1213:27: note: Returning from 'spi_controller_get_devdata'
           struct bcm2835_spi *bs = spi_controller_get_devdata(ctlr);
                                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/spi/spi-bcm2835.c:1219:6: note: Assuming 'slv' is non-null
           if (!slv) {
               ^~~~
   drivers/spi/spi-bcm2835.c:1219:2: note: Taking false branch
           if (!slv) {
           ^
   drivers/spi/spi-bcm2835.c:1239:6: note: Assuming the condition is false
           if (spi->mode & SPI_CPOL)
               ^~~~~~~~~~~~~~~~~~~~
   drivers/spi/spi-bcm2835.c:1239:2: note: Taking false branch
           if (spi->mode & SPI_CPOL)
           ^
   drivers/spi/spi-bcm2835.c:1241:6: note: Assuming the condition is false
           if (spi->mode & SPI_CPHA)
               ^~~~~~~~~~~~~~~~~~~~
   drivers/spi/spi-bcm2835.c:1241:2: note: Taking false branch
           if (spi->mode & SPI_CPHA)
           ^
   drivers/spi/spi-bcm2835.c:1249:6: note: Assuming field 'dma_rx' is null
           if (ctlr->dma_rx) {
               ^~~~~~~~~~~~
   drivers/spi/spi-bcm2835.c:1249:2: note: Taking false branch
           if (ctlr->dma_rx) {
           ^
   drivers/spi/spi-bcm2835.c:1262:6: note: Assuming the condition is false
           if (spi->mode & SPI_NO_CS)
               ^~~~~~~~~~~~~~~~~~~~~
   drivers/spi/spi-bcm2835.c:1262:2: note: Taking false branch
           if (spi->mode & SPI_NO_CS)
           ^
   drivers/spi/spi-bcm2835.c:1268:6: note: Assuming field 'cs_gpiod' is null
           if (spi->cs_gpiod)
               ^~~~~~~~~~~~~
   drivers/spi/spi-bcm2835.c:1268:2: note: Taking false branch
           if (spi->cs_gpiod)
           ^
   drivers/spi/spi-bcm2835.c:1270:6: note: Assuming field 'chip_select' is <= 1
           if (spi->chip_select > 1) {
               ^~~~~~~~~~~~~~~~~~~~
   drivers/spi/spi-bcm2835.c:1270:2: note: Taking false branch
           if (spi->chip_select > 1) {
           ^
   drivers/spi/spi-bcm2835.c:1292:6: note: Assuming 'chip' is non-null
           if (!chip)
               ^~~~~
   drivers/spi/spi-bcm2835.c:1292:2: note: Taking false branch
           if (!chip)
           ^
   drivers/spi/spi-bcm2835.c:1299:2: note: Taking true branch
           if (IS_ERR(spi->cs_gpiod)) {
           ^
   drivers/spi/spi-bcm2835.c:1301:3: note: Control jumps to line 1311
                   goto err_cleanup;
                   ^
   drivers/spi/spi-bcm2835.c:1311:2: note: Calling 'bcm2835_spi_cleanup'
           bcm2835_spi_cleanup(spi);
           ^~~~~~~~~~~~~~~~~~~~~~~~
   drivers/spi/spi-bcm2835.c:1160:6: note: Assuming field 'clear_rx_desc' is null
           if (slv->clear_rx_desc)
               ^~~~~~~~~~~~~~~~~~
   drivers/spi/spi-bcm2835.c:1160:2: note: Taking false branch
           if (slv->clear_rx_desc)
           ^
   drivers/spi/spi-bcm2835.c:1163:6: note: Assuming field 'clear_rx_addr' is not equal to 0
           if (slv->clear_rx_addr)
               ^~~~~~~~~~~~~~~~~~
   drivers/spi/spi-bcm2835.c:1163:2: note: Taking true branch
           if (slv->clear_rx_addr)
           ^
   drivers/spi/spi-bcm2835.c:1164:20: note: Access to field 'device' results in a dereference of a null pointer (loaded from field 'dma_rx')
                   dma_unmap_single(ctlr->dma_rx->device->dev,
                                    ^
   include/linux/dma-mapping.h:427:61: note: expanded from macro 'dma_unmap_single'
   #define dma_unmap_single(d, a, s, r) dma_unmap_single_attrs(d, a, s, r, 0)
                                                               ^
   2 warnings generated.
   drivers/leds/leds-pca955x.c:402:11: warning: Access to field 'name' results in a dereference of a null pointer [clang-analyzer-core.NullDereference]
                           name = to_of_node(child)->name;
                                  ^
   include/linux/of.h:161:2: note: expanded from macro 'to_of_node'
           ({                                                              \
           ^
   drivers/leds/leds-pca955x.c:442:6: note: Assuming 'pdata' is null
--
                   ^
   security/apparmor/domain.c:1407:9: note: Assuming 'i' is >= field 'size'
                   new = fn_label_build_in_ns(label, profile, GFP_KERNEL,
                         ^
   security/apparmor/include/lib.h:284:2: note: expanded from macro 'fn_label_build_in_ns'
           fn_label_build((L), (P), (GFP),                                 \
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   security/apparmor/include/lib.h:228:7: note: expanded from macro 'fn_label_build'
                   if (vec_setup(label, __lvec, (L)->size, (GFP))) {       \
                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   security/apparmor/include/label.h:33:15: note: expanded from macro 'vec_setup'
                   for (i = 0; i < (N); i++)                               \
                               ^~~~~~~
   security/apparmor/domain.c:1407:9: note: Loop condition is false. Execution continues on line 1407
                   new = fn_label_build_in_ns(label, profile, GFP_KERNEL,
                         ^
   security/apparmor/include/lib.h:284:2: note: expanded from macro 'fn_label_build_in_ns'
           fn_label_build((L), (P), (GFP),                                 \
           ^
   security/apparmor/include/lib.h:228:7: note: expanded from macro 'fn_label_build'
                   if (vec_setup(label, __lvec, (L)->size, (GFP))) {       \
                       ^
   security/apparmor/include/label.h:33:3: note: expanded from macro 'vec_setup'
                   for (i = 0; i < (N); i++)                               \
                   ^
   security/apparmor/domain.c:1407:9: note: '__lvec' is non-null
                   new = fn_label_build_in_ns(label, profile, GFP_KERNEL,
                         ^
   security/apparmor/include/lib.h:284:2: note: expanded from macro 'fn_label_build_in_ns'
           fn_label_build((L), (P), (GFP),                                 \
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   security/apparmor/include/lib.h:228:24: note: expanded from macro 'fn_label_build'
                   if (vec_setup(label, __lvec, (L)->size, (GFP))) {       \
                                        ^~~~~~
   security/apparmor/include/label.h:37:3: note: expanded from macro 'vec_setup'
           (V) ? 0 : -ENOMEM;                                              \
            ^
   security/apparmor/domain.c:1407:9: note: '?' condition is true
                   new = fn_label_build_in_ns(label, profile, GFP_KERNEL,
                         ^
   security/apparmor/include/lib.h:284:2: note: expanded from macro 'fn_label_build_in_ns'
           fn_label_build((L), (P), (GFP),                                 \
           ^
   security/apparmor/include/lib.h:228:7: note: expanded from macro 'fn_label_build'
                   if (vec_setup(label, __lvec, (L)->size, (GFP))) {       \
                       ^
   security/apparmor/include/label.h:37:2: note: expanded from macro 'vec_setup'
           (V) ? 0 : -ENOMEM;                                              \
           ^
   security/apparmor/domain.c:1407:9: note: Taking false branch
                   new = fn_label_build_in_ns(label, profile, GFP_KERNEL,
                         ^
   security/apparmor/include/lib.h:284:2: note: expanded from macro 'fn_label_build_in_ns'
           fn_label_build((L), (P), (GFP),                                 \
           ^
   security/apparmor/include/lib.h:228:3: note: expanded from macro 'fn_label_build'
                   if (vec_setup(label, __lvec, (L)->size, (GFP))) {       \
                   ^
   security/apparmor/domain.c:1407:9: note: Loop condition is false. Execution continues on line 1407
                   new = fn_label_build_in_ns(label, profile, GFP_KERNEL,
                         ^
   security/apparmor/include/lib.h:284:2: note: expanded from macro 'fn_label_build_in_ns'
           fn_label_build((L), (P), (GFP),                                 \
           ^
   security/apparmor/include/lib.h:233:3: note: expanded from macro 'fn_label_build'
                   label_for_each(__i, (L), (P)) {                         \
                   ^
   security/apparmor/include/label.h:158:2: note: expanded from macro 'label_for_each'
           for ((I).i = 0; ((P) = (L)->vec[(I).i]); ++((I).i))
           ^
   security/apparmor/domain.c:1407:9: note: The value 0 is assigned to '__j'
                   new = fn_label_build_in_ns(label, profile, GFP_KERNEL,
                         ^
   security/apparmor/include/lib.h:284:2: note: expanded from macro 'fn_label_build_in_ns'
           fn_label_build((L), (P), (GFP),                                 \
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   security/apparmor/include/lib.h:240:8: note: expanded from macro 'fn_label_build'
                   for (__j = __count = 0; __j < (L)->size; __j++)         \
                        ^~~~~~~~~~~~~~~~~
   security/apparmor/domain.c:1407:9: note: Loop condition is true.  Entering loop body
                   new = fn_label_build_in_ns(label, profile, GFP_KERNEL,
                         ^
   security/apparmor/include/lib.h:284:2: note: expanded from macro 'fn_label_build_in_ns'
           fn_label_build((L), (P), (GFP),                                 \
           ^
   security/apparmor/include/lib.h:240:3: note: expanded from macro 'fn_label_build'
                   for (__j = __count = 0; __j < (L)->size; __j++)         \
                   ^
   security/apparmor/domain.c:1407:9: note: Access to field 'size' results in a dereference of a null pointer
                   new = fn_label_build_in_ns(label, profile, GFP_KERNEL,
                         ^
   security/apparmor/include/lib.h:284:2: note: expanded from macro 'fn_label_build_in_ns'
           fn_label_build((L), (P), (GFP),                                 \
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   security/apparmor/include/lib.h:241:15: note: expanded from macro 'fn_label_build'
                           __count += __lvec[__j]->size;                   \
                                      ^~~~~~~~~~~~~~~~~
   Suppressed 2 warnings (1 in non-user code, 1 with check filters).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   2 warnings generated.
>> drivers/spi/spi-bcm2835.c:153:8: warning: Excessive padding in 'struct bcm2835_spidev' (48 padding bytes, where 16 is optimal). Optimal fields order: clear_rx_cs, prepare_cs, clear_rx_desc, clear_rx_addr, consider reordering the fields or adding explicit padding members [clang-analyzer-optin.performance.Padding]
   struct bcm2835_spidev {
   ~~~~~~~^~~~~~~~~~~~~~~~
   drivers/spi/spi-bcm2835.c:153:8: note: Excessive padding in 'struct bcm2835_spidev' (48 padding bytes, where 16 is optimal). Optimal fields order: clear_rx_cs, prepare_cs, clear_rx_desc, clear_rx_addr, consider reordering the fields or adding explicit padding members
   struct bcm2835_spidev {
   ~~~~~~~^~~~~~~~~~~~~~~~
   drivers/spi/spi-bcm2835.c:1164:20: warning: Access to field 'device' results in a dereference of a null pointer (loaded from field 'dma_rx') [clang-analyzer-core.NullDereference]
                   dma_unmap_single(ctlr->dma_rx->device->dev,
                                    ^
   drivers/spi/spi-bcm2835.c:1213:27: note: Calling 'spi_controller_get_devdata'
           struct bcm2835_spi *bs = spi_controller_get_devdata(ctlr);
                                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/spi/spi.h:675:2: note: Returning without writing to 'ctlr->dma_rx'
           return dev_get_drvdata(&ctlr->dev);
           ^
   drivers/spi/spi-bcm2835.c:1213:27: note: Returning from 'spi_controller_get_devdata'
           struct bcm2835_spi *bs = spi_controller_get_devdata(ctlr);
                                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/spi/spi-bcm2835.c:1219:6: note: Assuming 'slv' is non-null
           if (!slv) {
               ^~~~
   drivers/spi/spi-bcm2835.c:1219:2: note: Taking false branch
           if (!slv) {
           ^
   drivers/spi/spi-bcm2835.c:1239:6: note: Assuming the condition is false
           if (spi->mode & SPI_CPOL)
               ^~~~~~~~~~~~~~~~~~~~
   drivers/spi/spi-bcm2835.c:1239:2: note: Taking false branch
           if (spi->mode & SPI_CPOL)
           ^
   drivers/spi/spi-bcm2835.c:1241:6: note: Assuming the condition is false
           if (spi->mode & SPI_CPHA)
               ^~~~~~~~~~~~~~~~~~~~
   drivers/spi/spi-bcm2835.c:1241:2: note: Taking false branch
           if (spi->mode & SPI_CPHA)
           ^
   drivers/spi/spi-bcm2835.c:1249:6: note: Assuming field 'dma_rx' is null
           if (ctlr->dma_rx) {
               ^~~~~~~~~~~~
   drivers/spi/spi-bcm2835.c:1249:2: note: Taking false branch
           if (ctlr->dma_rx) {
           ^
   drivers/spi/spi-bcm2835.c:1262:6: note: Assuming the condition is false
           if (spi->mode & SPI_NO_CS)
               ^~~~~~~~~~~~~~~~~~~~~
   drivers/spi/spi-bcm2835.c:1262:2: note: Taking false branch
           if (spi->mode & SPI_NO_CS)
           ^
   drivers/spi/spi-bcm2835.c:1268:6: note: Assuming field 'cs_gpiod' is null
           if (spi->cs_gpiod)
               ^~~~~~~~~~~~~
   drivers/spi/spi-bcm2835.c:1268:2: note: Taking false branch
           if (spi->cs_gpiod)
           ^
   drivers/spi/spi-bcm2835.c:1270:6: note: Assuming field 'chip_select' is <= 1
           if (spi->chip_select > 1) {
               ^~~~~~~~~~~~~~~~~~~~
   drivers/spi/spi-bcm2835.c:1270:2: note: Taking false branch
           if (spi->chip_select > 1) {
           ^
   drivers/spi/spi-bcm2835.c:1292:6: note: Assuming 'chip' is non-null
           if (!chip)
               ^~~~~
   drivers/spi/spi-bcm2835.c:1292:2: note: Taking false branch
           if (!chip)
           ^
   drivers/spi/spi-bcm2835.c:1299:2: note: Taking true branch
           if (IS_ERR(spi->cs_gpiod)) {
           ^
   drivers/spi/spi-bcm2835.c:1301:3: note: Control jumps to line 1311
                   goto err_cleanup;
                   ^
   drivers/spi/spi-bcm2835.c:1311:2: note: Calling 'bcm2835_spi_cleanup'
           bcm2835_spi_cleanup(spi);
           ^~~~~~~~~~~~~~~~~~~~~~~~
   drivers/spi/spi-bcm2835.c:1160:6: note: Assuming field 'clear_rx_desc' is null
           if (slv->clear_rx_desc)
               ^~~~~~~~~~~~~~~~~~
   drivers/spi/spi-bcm2835.c:1160:2: note: Taking false branch
           if (slv->clear_rx_desc)
           ^
   drivers/spi/spi-bcm2835.c:1163:6: note: Assuming field 'clear_rx_addr' is not equal to 0
           if (slv->clear_rx_addr)
               ^~~~~~~~~~~~~~~~~~
   drivers/spi/spi-bcm2835.c:1163:2: note: Taking true branch
           if (slv->clear_rx_addr)
           ^
   drivers/spi/spi-bcm2835.c:1164:20: note: Access to field 'device' results in a dereference of a null pointer (loaded from field 'dma_rx')
                   dma_unmap_single(ctlr->dma_rx->device->dev,
                                    ^
   include/linux/dma-mapping.h:427:61: note: expanded from macro 'dma_unmap_single'
   #define dma_unmap_single(d, a, s, r) dma_unmap_single_attrs(d, a, s, r, 0)
                                                               ^
   1 warning generated.
   Suppressed 1 warnings (1 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   1 warning generated.
   Suppressed 1 warnings (1 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
   1 warning generated.
   Suppressed 1 warnings (1 in non-user code).

vim +153 drivers/spi/spi-bcm2835.c

   142	
   143	/**
   144	 * struct bcm2835_spidev - BCM2835 SPI slave
   145	 * @prepare_cs: precalculated CS register value for ->prepare_message()
   146	 *	(uses slave-specific clock polarity and phase settings)
   147	 * @clear_rx_desc: preallocated RX DMA descriptor used for TX-only transfers
   148	 *	(cyclically clears RX FIFO by writing @clear_rx_cs to CS register)
   149	 * @clear_rx_addr: bus address of @clear_rx_cs
   150	 * @clear_rx_cs: precalculated CS register value to clear RX FIFO
   151	 *	(uses slave-specific clock polarity and phase settings)
   152	 */
 > 153	struct bcm2835_spidev {
   154		u32 prepare_cs;
   155		struct dma_async_tx_descriptor *clear_rx_desc;
   156		dma_addr_t clear_rx_addr;
   157		u32 clear_rx_cs ____cacheline_aligned;
   158	};
   159	

-- 
0-DAY CI Kernel Test Service
https://01.org/lkp

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ