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 --]
next 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.