All of lore.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: kbuild@lists.01.org
Subject: [leon-rdma:rdma-next 3/31] drivers/infiniband/core/counters.c:154 alloc_and_bind() error: double unlocked 'port_counter->lock' (orig line 139)
Date: Sun, 15 Nov 2020 19:18:54 +0800	[thread overview]
Message-ID: <202011151949.EEGIrrGP-lkp@intel.com> (raw)

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

CC: kbuild-all(a)lists.01.org
TO: Leon Romanovsky <leonro@nvidia.com>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/leon/linux-rdma.git rdma-next
head:   00379b407ab12167a4a0e8264392c8c9bfb5ef2d
commit: a65107565e609c005cb5a3b12d41697ac25eb3d2 [3/31] RDMA/counter: Combine allocation and bind logic
:::::: branch date: 5 hours ago
:::::: commit date: 5 hours ago
config: i386-randconfig-m021-20201115 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-15) 9.3.0

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

smatch warnings:
drivers/infiniband/core/counters.c:154 alloc_and_bind() error: double unlocked 'port_counter->lock' (orig line 139)

vim +154 drivers/infiniband/core/counters.c

a65107565e609c Leon Romanovsky 2020-08-16   97  
a65107565e609c Leon Romanovsky 2020-08-16   98  static struct rdma_counter *alloc_and_bind(struct ib_device *dev, u8 port,
a65107565e609c Leon Romanovsky 2020-08-16   99  					   struct ib_qp *qp,
99fa331dc8629b Mark Zhang      2019-07-02  100  					   enum rdma_nl_counter_mode mode)
99fa331dc8629b Mark Zhang      2019-07-02  101  {
1bd8e0a9d0fd1b Mark Zhang      2019-07-02  102  	struct rdma_port_counter *port_counter;
99fa331dc8629b Mark Zhang      2019-07-02  103  	struct rdma_counter *counter;
1bd8e0a9d0fd1b Mark Zhang      2019-07-02  104  	int ret;
99fa331dc8629b Mark Zhang      2019-07-02  105  
c4ffee7c9bdba7 Mark Zhang      2019-07-02  106  	if (!dev->ops.counter_dealloc || !dev->ops.counter_alloc_stats)
99fa331dc8629b Mark Zhang      2019-07-02  107  		return NULL;
99fa331dc8629b Mark Zhang      2019-07-02  108  
99fa331dc8629b Mark Zhang      2019-07-02  109  	counter = kzalloc(sizeof(*counter), GFP_KERNEL);
99fa331dc8629b Mark Zhang      2019-07-02  110  	if (!counter)
99fa331dc8629b Mark Zhang      2019-07-02  111  		return NULL;
99fa331dc8629b Mark Zhang      2019-07-02  112  
99fa331dc8629b Mark Zhang      2019-07-02  113  	counter->device    = dev;
99fa331dc8629b Mark Zhang      2019-07-02  114  	counter->port      = port;
13ef5539def732 Leon Romanovsky 2020-09-22  115  
13ef5539def732 Leon Romanovsky 2020-09-22  116  	rdma_restrack_new(&counter->res, RDMA_RESTRACK_COUNTER);
c4ffee7c9bdba7 Mark Zhang      2019-07-02  117  	counter->stats = dev->ops.counter_alloc_stats(counter);
c4ffee7c9bdba7 Mark Zhang      2019-07-02  118  	if (!counter->stats)
c4ffee7c9bdba7 Mark Zhang      2019-07-02  119  		goto err_stats;
c4ffee7c9bdba7 Mark Zhang      2019-07-02  120  
1bd8e0a9d0fd1b Mark Zhang      2019-07-02  121  	port_counter = &dev->port_data[port].port_counter;
1bd8e0a9d0fd1b Mark Zhang      2019-07-02  122  	mutex_lock(&port_counter->lock);
a65107565e609c Leon Romanovsky 2020-08-16  123  	switch (mode) {
a65107565e609c Leon Romanovsky 2020-08-16  124  	case RDMA_COUNTER_MODE_MANUAL:
1bd8e0a9d0fd1b Mark Zhang      2019-07-02  125  		ret = __counter_set_mode(&port_counter->mode,
1bd8e0a9d0fd1b Mark Zhang      2019-07-02  126  					 RDMA_COUNTER_MODE_MANUAL, 0);
1bd8e0a9d0fd1b Mark Zhang      2019-07-02  127  		if (ret)
1bd8e0a9d0fd1b Mark Zhang      2019-07-02  128  			goto err_mode;
a65107565e609c Leon Romanovsky 2020-08-16  129  		break;
a65107565e609c Leon Romanovsky 2020-08-16  130  	case RDMA_COUNTER_MODE_AUTO:
a65107565e609c Leon Romanovsky 2020-08-16  131  		auto_mode_init_counter(counter, qp, port_counter->mode.mask);
a65107565e609c Leon Romanovsky 2020-08-16  132  		break;
a65107565e609c Leon Romanovsky 2020-08-16  133  	default:
a65107565e609c Leon Romanovsky 2020-08-16  134  		ret = -EOPNOTSUPP;
a65107565e609c Leon Romanovsky 2020-08-16  135  		goto err_mode;
1bd8e0a9d0fd1b Mark Zhang      2019-07-02  136  	}
1bd8e0a9d0fd1b Mark Zhang      2019-07-02  137  
1bd8e0a9d0fd1b Mark Zhang      2019-07-02  138  	port_counter->num_counters++;
1bd8e0a9d0fd1b Mark Zhang      2019-07-02 @139  	mutex_unlock(&port_counter->lock);
1bd8e0a9d0fd1b Mark Zhang      2019-07-02  140  
99fa331dc8629b Mark Zhang      2019-07-02  141  	counter->mode.mode = mode;
99fa331dc8629b Mark Zhang      2019-07-02  142  	kref_init(&counter->kref);
99fa331dc8629b Mark Zhang      2019-07-02  143  	mutex_init(&counter->lock);
99fa331dc8629b Mark Zhang      2019-07-02  144  
a65107565e609c Leon Romanovsky 2020-08-16  145  	ret = __rdma_counter_bind_qp(counter, qp);
a65107565e609c Leon Romanovsky 2020-08-16  146  	if (ret)
a65107565e609c Leon Romanovsky 2020-08-16  147  		goto err_mode;
a65107565e609c Leon Romanovsky 2020-08-16  148  
a65107565e609c Leon Romanovsky 2020-08-16  149  	rdma_restrack_parent_name(&counter->res, &qp->res);
a65107565e609c Leon Romanovsky 2020-08-16  150  	rdma_restrack_add(&counter->res);
99fa331dc8629b Mark Zhang      2019-07-02  151  	return counter;
c4ffee7c9bdba7 Mark Zhang      2019-07-02  152  
1bd8e0a9d0fd1b Mark Zhang      2019-07-02  153  err_mode:
1bd8e0a9d0fd1b Mark Zhang      2019-07-02 @154  	mutex_unlock(&port_counter->lock);
1bd8e0a9d0fd1b Mark Zhang      2019-07-02  155  	kfree(counter->stats);
c4ffee7c9bdba7 Mark Zhang      2019-07-02  156  err_stats:
13ef5539def732 Leon Romanovsky 2020-09-22  157  	rdma_restrack_put(&counter->res);
c4ffee7c9bdba7 Mark Zhang      2019-07-02  158  	kfree(counter);
c4ffee7c9bdba7 Mark Zhang      2019-07-02  159  	return NULL;
99fa331dc8629b Mark Zhang      2019-07-02  160  }
99fa331dc8629b Mark Zhang      2019-07-02  161  

:::::: The code at line 154 was first introduced by commit
:::::: 1bd8e0a9d0fd1be03d2833a0c15ac676bdf275d8 RDMA/counter: Allow manual mode configuration support

:::::: TO: Mark Zhang <markz@mellanox.com>
:::::: CC: Jason Gunthorpe <jgg@mellanox.com>

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

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 46112 bytes --]

             reply	other threads:[~2020-11-15 11:18 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-11-15 11:18 kernel test robot [this message]
  -- strict thread matches above, loose matches on Subject: below --
2020-11-16  9:49 [leon-rdma:rdma-next 3/31] drivers/infiniband/core/counters.c:154 alloc_and_bind() error: double unlocked 'port_counter->lock' (orig line 139) Dan Carpenter
2020-11-16  9:49 ` Dan Carpenter
2020-11-16  9:53 ` Leon Romanovsky

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=202011151949.EEGIrrGP-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.