All of lore.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: kbuild@lists.01.org
Subject: drivers/gpio/gpio-rockchip.c:201:53: warning: Division by zero [clang-analyzer-core.DivideZero]
Date: Sun, 09 Jan 2022 08:45:42 +0800	[thread overview]
Message-ID: <202201090830.dSQuR0Hf-lkp@intel.com> (raw)

[-- Attachment #1: Type: text/plain, Size: 18128 bytes --]

CC: llvm(a)lists.linux.dev
CC: kbuild-all(a)lists.01.org
CC: linux-kernel(a)vger.kernel.org
TO: Jianqun Xu <jay.xu@rock-chips.com>
CC: Linus Walleij <linus.walleij@linaro.org>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head:   d1587f7bfe9a0f97a75d42ac1489aeda551106bc
commit: 3bcbd1a85b68e5f864029fd6f0bb0bcc8e2f1082 gpio/rockchip: support next version gpio controller
date:   5 months ago
:::::: branch date: 25 hours ago
:::::: commit date: 5 months ago
config: mips-randconfig-c004-20220107 (https://download.01.org/0day-ci/archive/20220109/202201090830.dSQuR0Hf-lkp(a)intel.com/config)
compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project 32167bfe64a4c5dd4eb3f7a58e24f4cba76f5ac2)
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 mips cross compiling tool for clang build
        # apt-get install binutils-mips-linux-gnu
        # https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=3bcbd1a85b68e5f864029fd6f0bb0bcc8e2f1082
        git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
        git fetch --no-tags linus master
        git checkout 3bcbd1a85b68e5f864029fd6f0bb0bcc8e2f1082
        # save the config file to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=mips clang-analyzer 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>


clang-analyzer warnings: (new ones prefixed by >>)
           ^
   include/linux/list.h:628:2: note: expanded from macro 'list_for_each_entry'
           for (pos = list_first_entry(head, typeof(*pos), member);        \
           ^
   drivers/firewire/core-topology.c:328:15: note: Assuming 'i' is >= field 'port_count'
                   for (i = 0; i < node->port_count; i++) {
                               ^~~~~~~~~~~~~~~~~~~~
   drivers/firewire/core-topology.c:328:3: note: Loop condition is false. Execution continues on line 340
                   for (i = 0; i < node->port_count; i++) {
                   ^
   drivers/firewire/core-topology.c:340:3: note: Calling 'report_lost_node'
                   callback(card, node, parent);
                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/firewire/core-topology.c:351:2: note: Calling 'fw_node_put'
           fw_node_put(node);
           ^~~~~~~~~~~~~~~~~
   drivers/firewire/core.h:206:2: note: Taking true branch
           if (refcount_dec_and_test(&node->ref_count))
           ^
   drivers/firewire/core.h:207:3: note: Memory is released
                   kfree(node);
                   ^~~~~~~~~~~
   drivers/firewire/core-topology.c:351:2: note: Returning; memory was released
           fw_node_put(node);
           ^~~~~~~~~~~~~~~~~
   drivers/firewire/core-topology.c:340:3: note: Returning; memory was released
                   callback(card, node, parent);
                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/firewire/core-topology.c:325:2: note: Use of memory after it is freed
           list_for_each_entry(node, &list, link) {
           ^
   include/linux/list.h:630:13: note: expanded from macro 'list_for_each_entry'
                pos = list_next_entry(pos, member))
                      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/list.h:555:2: note: expanded from macro 'list_next_entry'
           list_entry((pos)->member.next, typeof(*(pos)), member)
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/list.h:511:2: note: expanded from macro 'list_entry'
           container_of(ptr, type, member)
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/kernel.h:494:25: note: expanded from macro 'container_of'
           void *__mptr = (void *)(ptr);                                   \
                                  ^~~~~
   drivers/firewire/core-topology.c:494:20: warning: Access to field 'node_id' results in a dereference of a null pointer (loaded from field 'root_node') [clang-analyzer-core.NullDereference]
           int node_count = (card->root_node->node_id & 0x3f) + 1;
                             ^
   drivers/firewire/core-topology.c:518:56: note: Left side of '&&' is false
           if (!is_next_generation(generation, card->generation) &&
                                                                 ^
   drivers/firewire/core-topology.c:524:2: note: Loop condition is false.  Exiting loop
           spin_lock_irqsave(&card->lock, flags);
           ^
   include/linux/spinlock.h:384:2: note: expanded from macro 'spin_lock_irqsave'
           raw_spin_lock_irqsave(spinlock_check(lock), flags);     \
           ^
   include/linux/spinlock.h:250:2: note: expanded from macro 'raw_spin_lock_irqsave'
           do {                                            \
           ^
   drivers/firewire/core-topology.c:524:2: note: Loop condition is false.  Exiting loop
           spin_lock_irqsave(&card->lock, flags);
           ^
   include/linux/spinlock.h:382:43: note: expanded from macro 'spin_lock_irqsave'
   #define spin_lock_irqsave(lock, flags)                          \
                                                                   ^
   drivers/firewire/core-topology.c:539:15: note: Calling 'build_tree'
           local_node = build_tree(card, self_ids, self_id_count);
                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/firewire/core-topology.c:182:2: note: Null pointer value stored to 'node'
           node = NULL;
           ^~~~~~~~~~~
   drivers/firewire/core-topology.c:191:2: note: Loop condition is false. Execution continues on line 301
           while (sid < end) {
           ^
   drivers/firewire/core-topology.c:301:2: note: Null pointer value stored to field 'root_node'
           card->root_node = node;
           ^~~~~~~~~~~~~~~~~~~~~~
   drivers/firewire/core-topology.c:539:15: note: Returning from 'build_tree'
           local_node = build_tree(card, self_ids, self_id_count);
                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/firewire/core-topology.c:541:2: note: Calling 'update_topology_map'
           update_topology_map(card, self_ids, self_id_count);
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/firewire/core-topology.c:494:20: note: Access to field 'node_id' results in a dereference of a null pointer (loaded from field 'root_node')
           int node_count = (card->root_node->node_id & 0x3f) + 1;
                             ^     ~~~~~~~~~
   Suppressed 2 warnings (2 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.
   Suppressed 2 warnings (2 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.
   3 warnings generated.
   drivers/gpio/gpio-pcf857x.c:237:23: warning: Value stored to 'np' during its initialization is never read [clang-analyzer-deadcode.DeadStores]
           struct device_node              *np = client->dev.of_node;
                                            ^~   ~~~~~~~~~~~~~~~~~~~
   drivers/gpio/gpio-pcf857x.c:237:23: note: Value stored to 'np' during its initialization is never read
           struct device_node              *np = client->dev.of_node;
                                            ^~   ~~~~~~~~~~~~~~~~~~~
   Suppressed 2 warnings (2 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.
   3 warnings generated.
>> drivers/gpio/gpio-rockchip.c:201:53: warning: Division by zero [clang-analyzer-core.DivideZero]
                   max_debounce = (GENMASK(23, 0) + 1) * 2 * 1000000 / freq;
                                                                     ^
   drivers/gpio/gpio-rockchip.c:272:2: note: Control jumps to 'case PIN_CONFIG_INPUT_DEBOUNCE:'  at line 273
           switch (param) {
           ^
   drivers/gpio/gpio-rockchip.c:274:3: note: Calling 'rockchip_gpio_set_debounce'
                   rockchip_gpio_set_debounce(gc, offset, true);
                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/gpio/gpio-rockchip.c:198:7: note: Calling 'IS_ERR'
           if (!IS_ERR(bank->db_clk)) {
                ^~~~~~~~~~~~~~~~~~~~
   include/linux/err.h:36:9: note: Assuming the condition is false
           return IS_ERR_VALUE((unsigned long)ptr);
                  ^
   include/linux/err.h:22:34: note: expanded from macro 'IS_ERR_VALUE'
   #define IS_ERR_VALUE(x) unlikely((unsigned long)(void *)(x) >= (unsigned long)-MAX_ERRNO)
                           ~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/compiler.h:78:42: note: expanded from macro 'unlikely'
   # define unlikely(x)    __builtin_expect(!!(x), 0)
                                               ^
   include/linux/err.h:36:2: note: Returning zero, which participates in a condition later
           return IS_ERR_VALUE((unsigned long)ptr);
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/gpio/gpio-rockchip.c:198:7: note: Returning from 'IS_ERR'
           if (!IS_ERR(bank->db_clk)) {
                ^~~~~~~~~~~~~~~~~~~~
   drivers/gpio/gpio-rockchip.c:198:2: note: Taking true branch
           if (!IS_ERR(bank->db_clk)) {
           ^
   drivers/gpio/gpio-rockchip.c:200:10: note: Calling 'clk_get_rate'
                   freq = clk_get_rate(bank->db_clk);
                          ^~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/clk.h:882:2: note: Returning zero
           return 0;
           ^~~~~~~~
   drivers/gpio/gpio-rockchip.c:200:10: note: Returning from 'clk_get_rate'
                   freq = clk_get_rate(bank->db_clk);
                          ^~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/gpio/gpio-rockchip.c:200:3: note: The value 0 is assigned to 'freq'
                   freq = clk_get_rate(bank->db_clk);
                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/gpio/gpio-rockchip.c:201:53: note: Division by zero
                   max_debounce = (GENMASK(23, 0) + 1) * 2 * 1000000 / freq;
                                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~
   Suppressed 2 warnings (2 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.
   16 warnings generated.
   fs/io_uring.c:1293:10: warning: Access to field 'io_wq' results in a dereference of a null pointer (loaded from variable 'tctx') [clang-analyzer-core.NullDereference]
           BUG_ON(!tctx->io_wq);
                   ^
   fs/io_uring.c:8869:2: note: Calling 'io_ring_ctx_wait_and_kill'
           io_ring_ctx_wait_and_kill(ctx);
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/io_uring.c:8842:6: note: Assuming field 'rings' is null
           if (ctx->rings)
               ^~~~~~~~~~
   fs/io_uring.c:8842:2: note: Taking false branch
           if (ctx->rings)
           ^
   fs/io_uring.c:8844:2: note: Loop condition is false. Execution continues on line 8846
           xa_for_each(&ctx->personalities, index, creds)
           ^
   include/linux/xarray.h:499:2: note: expanded from macro 'xa_for_each'
           xa_for_each_start(xa, index, entry, 0)
           ^
   include/linux/xarray.h:475:2: note: expanded from macro 'xa_for_each_start'
           xa_for_each_range(xa, index, entry, start, ULONG_MAX)
           ^
   include/linux/xarray.h:446:2: note: expanded from macro 'xa_for_each_range'
           for (index = start,                                             \
           ^
   fs/io_uring.c:8852:2: note: Calling 'io_iopoll_try_reap_events'
           io_iopoll_try_reap_events(ctx);
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/io_uring.c:2301:6: note: Assuming the condition is false
           if (!(ctx->flags & IORING_SETUP_IOPOLL))
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/io_uring.c:2301:2: note: Taking false branch
           if (!(ctx->flags & IORING_SETUP_IOPOLL))
           ^
   fs/io_uring.c:2305:2: note: Loop condition is true.  Entering loop body
           while (!list_empty(&ctx->iopoll_list)) {
           ^
   fs/io_uring.c:2308:3: note: Calling 'io_do_iopoll'
                   io_do_iopoll(ctx, &nr_events, 0);
                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/io_uring.c:2258:9: note: Assuming field 'poll_multi_queue' is false
           spin = !ctx->poll_multi_queue && *nr_events < min;
                  ^~~~~~~~~~~~~~~~~~~~~~
   fs/io_uring.c:2258:9: note: Left side of '&&' is true
   fs/io_uring.c:2261:2: note: Left side of '&&' is false
           list_for_each_entry_safe(req, tmp, &ctx->iopoll_list, inflight_entry) {
           ^
   include/linux/list.h:715:13: note: expanded from macro 'list_for_each_entry_safe'
           for (pos = list_first_entry(head, typeof(*pos), member),        \
                      ^
   include/linux/list.h:522:2: note: expanded from macro 'list_first_entry'
           list_entry((ptr)->next, type, member)
           ^
   include/linux/list.h:511:2: note: expanded from macro 'list_entry'

vim +201 drivers/gpio/gpio-rockchip.c

936ee2675eee1f Jianqun Xu 2021-08-16  186  
3bcbd1a85b68e5 Jianqun Xu 2021-08-16  187  static int rockchip_gpio_set_debounce(struct gpio_chip *gc,
3bcbd1a85b68e5 Jianqun Xu 2021-08-16  188  				      unsigned int offset,
3bcbd1a85b68e5 Jianqun Xu 2021-08-16  189  				      unsigned int debounce)
936ee2675eee1f Jianqun Xu 2021-08-16  190  {
936ee2675eee1f Jianqun Xu 2021-08-16  191  	struct rockchip_pin_bank *bank = gpiochip_get_data(gc);
3bcbd1a85b68e5 Jianqun Xu 2021-08-16  192  	const struct rockchip_gpio_regs	*reg = bank->gpio_regs;
3bcbd1a85b68e5 Jianqun Xu 2021-08-16  193  	unsigned long flags, div_reg, freq, max_debounce;
3bcbd1a85b68e5 Jianqun Xu 2021-08-16  194  	bool div_debounce_support;
3bcbd1a85b68e5 Jianqun Xu 2021-08-16  195  	unsigned int cur_div_reg;
3bcbd1a85b68e5 Jianqun Xu 2021-08-16  196  	u64 div;
3bcbd1a85b68e5 Jianqun Xu 2021-08-16  197  
3bcbd1a85b68e5 Jianqun Xu 2021-08-16  198  	if (!IS_ERR(bank->db_clk)) {
3bcbd1a85b68e5 Jianqun Xu 2021-08-16  199  		div_debounce_support = true;
3bcbd1a85b68e5 Jianqun Xu 2021-08-16  200  		freq = clk_get_rate(bank->db_clk);
3bcbd1a85b68e5 Jianqun Xu 2021-08-16 @201  		max_debounce = (GENMASK(23, 0) + 1) * 2 * 1000000 / freq;
3bcbd1a85b68e5 Jianqun Xu 2021-08-16  202  		if (debounce > max_debounce)
3bcbd1a85b68e5 Jianqun Xu 2021-08-16  203  			return -EINVAL;
3bcbd1a85b68e5 Jianqun Xu 2021-08-16  204  
3bcbd1a85b68e5 Jianqun Xu 2021-08-16  205  		div = debounce * freq;
3bcbd1a85b68e5 Jianqun Xu 2021-08-16  206  		div_reg = DIV_ROUND_CLOSEST_ULL(div, 2 * USEC_PER_SEC) - 1;
3bcbd1a85b68e5 Jianqun Xu 2021-08-16  207  	} else {
3bcbd1a85b68e5 Jianqun Xu 2021-08-16  208  		div_debounce_support = false;
3bcbd1a85b68e5 Jianqun Xu 2021-08-16  209  	}
936ee2675eee1f Jianqun Xu 2021-08-16  210  
936ee2675eee1f Jianqun Xu 2021-08-16  211  	raw_spin_lock_irqsave(&bank->slock, flags);
936ee2675eee1f Jianqun Xu 2021-08-16  212  
3bcbd1a85b68e5 Jianqun Xu 2021-08-16  213  	/* Only the v1 needs to configure div_en and div_con for dbclk */
3bcbd1a85b68e5 Jianqun Xu 2021-08-16  214  	if (debounce) {
3bcbd1a85b68e5 Jianqun Xu 2021-08-16  215  		if (div_debounce_support) {
3bcbd1a85b68e5 Jianqun Xu 2021-08-16  216  			/* Configure the max debounce from consumers */
3bcbd1a85b68e5 Jianqun Xu 2021-08-16  217  			cur_div_reg = readl(bank->reg_base +
3bcbd1a85b68e5 Jianqun Xu 2021-08-16  218  					    reg->dbclk_div_con);
3bcbd1a85b68e5 Jianqun Xu 2021-08-16  219  			if (cur_div_reg < div_reg)
3bcbd1a85b68e5 Jianqun Xu 2021-08-16  220  				writel(div_reg, bank->reg_base +
3bcbd1a85b68e5 Jianqun Xu 2021-08-16  221  				       reg->dbclk_div_con);
3bcbd1a85b68e5 Jianqun Xu 2021-08-16  222  			rockchip_gpio_writel_bit(bank, offset, 1,
3bcbd1a85b68e5 Jianqun Xu 2021-08-16  223  						 reg->dbclk_div_en);
3bcbd1a85b68e5 Jianqun Xu 2021-08-16  224  		}
3bcbd1a85b68e5 Jianqun Xu 2021-08-16  225  
3bcbd1a85b68e5 Jianqun Xu 2021-08-16  226  		rockchip_gpio_writel_bit(bank, offset, 1, reg->debounce);
3bcbd1a85b68e5 Jianqun Xu 2021-08-16  227  	} else {
3bcbd1a85b68e5 Jianqun Xu 2021-08-16  228  		if (div_debounce_support)
3bcbd1a85b68e5 Jianqun Xu 2021-08-16  229  			rockchip_gpio_writel_bit(bank, offset, 0,
3bcbd1a85b68e5 Jianqun Xu 2021-08-16  230  						 reg->dbclk_div_en);
3bcbd1a85b68e5 Jianqun Xu 2021-08-16  231  
3bcbd1a85b68e5 Jianqun Xu 2021-08-16  232  		rockchip_gpio_writel_bit(bank, offset, 0, reg->debounce);
3bcbd1a85b68e5 Jianqun Xu 2021-08-16  233  	}
936ee2675eee1f Jianqun Xu 2021-08-16  234  
936ee2675eee1f Jianqun Xu 2021-08-16  235  	raw_spin_unlock_irqrestore(&bank->slock, flags);
3bcbd1a85b68e5 Jianqun Xu 2021-08-16  236  
3bcbd1a85b68e5 Jianqun Xu 2021-08-16  237  	/* Enable or disable dbclk at last */
3bcbd1a85b68e5 Jianqun Xu 2021-08-16  238  	if (div_debounce_support) {
3bcbd1a85b68e5 Jianqun Xu 2021-08-16  239  		if (debounce)
3bcbd1a85b68e5 Jianqun Xu 2021-08-16  240  			clk_prepare_enable(bank->db_clk);
3bcbd1a85b68e5 Jianqun Xu 2021-08-16  241  		else
3bcbd1a85b68e5 Jianqun Xu 2021-08-16  242  			clk_disable_unprepare(bank->db_clk);
3bcbd1a85b68e5 Jianqun Xu 2021-08-16  243  	}
3bcbd1a85b68e5 Jianqun Xu 2021-08-16  244  
3bcbd1a85b68e5 Jianqun Xu 2021-08-16  245  	return 0;
936ee2675eee1f Jianqun Xu 2021-08-16  246  }
936ee2675eee1f Jianqun Xu 2021-08-16  247  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

             reply	other threads:[~2022-01-09  0:45 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-01-09  0:45 kernel test robot [this message]
  -- strict thread matches above, loose matches on Subject: below --
2022-03-21  6:57 drivers/gpio/gpio-rockchip.c:201:53: warning: Division by zero [clang-analyzer-core.DivideZero] kernel test robot
2022-04-07  4:59 kernel test robot

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=202201090830.dSQuR0Hf-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=kbuild@lists.01.org \
    /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.