[PATCH] dma-buf: fix and rework dma_buf_poll v3
Dan Carpenter
dan.carpenter at oracle.com
Wed Jun 23 09:28:03 UTC 2021
Hi "Christian,
url: https://github.com/0day-ci/linux/commits/Christian-K-nig/dma-buf-fix-and-rework-dma_buf_poll-v3/20210622-210643
base: git://anongit.freedesktop.org/tegra/linux.git drm/tegra/for-next
config: i386-randconfig-m021-20210622 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp at intel.com>
Reported-by: Dan Carpenter <dan.carpenter at oracle.com>
smatch warnings:
drivers/dma-buf/dma-buf.c:290 dma_buf_poll() error: uninitialized symbol 'fence_excl'.
vim +/fence_excl +290 drivers/dma-buf/dma-buf.c
afc9a42b7464f7 Al Viro 2017-07-03 208 static __poll_t dma_buf_poll(struct file *file, poll_table *poll)
9b495a5887994a Maarten Lankhorst 2014-07-01 209 {
d40fce0f010662 Christian König 2021-06-22 210 struct dma_buf_poll_cb_t *dcb;
9b495a5887994a Maarten Lankhorst 2014-07-01 211 struct dma_buf *dmabuf;
52791eeec1d9f4 Christian König 2019-08-11 212 struct dma_resv *resv;
52791eeec1d9f4 Christian König 2019-08-11 213 struct dma_resv_list *fobj;
f54d1867005c33 Chris Wilson 2016-10-25 214 struct dma_fence *fence_excl;
b016cd6ed4b772 Chris Wilson 2019-08-14 215 unsigned shared_count, seq;
d40fce0f010662 Christian König 2021-06-22 216 struct dma_fence *fence;
d40fce0f010662 Christian König 2021-06-22 217 __poll_t events;
d40fce0f010662 Christian König 2021-06-22 218 int r, i;
9b495a5887994a Maarten Lankhorst 2014-07-01 219
9b495a5887994a Maarten Lankhorst 2014-07-01 220 dmabuf = file->private_data;
9b495a5887994a Maarten Lankhorst 2014-07-01 221 if (!dmabuf || !dmabuf->resv)
a9a08845e9acbd Linus Torvalds 2018-02-11 222 return EPOLLERR;
9b495a5887994a Maarten Lankhorst 2014-07-01 223
9b495a5887994a Maarten Lankhorst 2014-07-01 224 resv = dmabuf->resv;
9b495a5887994a Maarten Lankhorst 2014-07-01 225
9b495a5887994a Maarten Lankhorst 2014-07-01 226 poll_wait(file, &dmabuf->poll, poll);
9b495a5887994a Maarten Lankhorst 2014-07-01 227
a9a08845e9acbd Linus Torvalds 2018-02-11 228 events = poll_requested_events(poll) & (EPOLLIN | EPOLLOUT);
9b495a5887994a Maarten Lankhorst 2014-07-01 229 if (!events)
9b495a5887994a Maarten Lankhorst 2014-07-01 230 return 0;
9b495a5887994a Maarten Lankhorst 2014-07-01 231
d40fce0f010662 Christian König 2021-06-22 232 dcb = events & EPOLLOUT ? &dmabuf->cb_out : &dmabuf->cb_in;
d40fce0f010662 Christian König 2021-06-22 233
d40fce0f010662 Christian König 2021-06-22 234 /* Only queue a new one if we are not still waiting for the old one */
d40fce0f010662 Christian König 2021-06-22 235 spin_lock_irq(&dmabuf->poll.lock);
d40fce0f010662 Christian König 2021-06-22 236 if (dcb->active)
d40fce0f010662 Christian König 2021-06-22 237 events = 0;
d40fce0f010662 Christian König 2021-06-22 238 else
d40fce0f010662 Christian König 2021-06-22 239 dcb->active = events;
d40fce0f010662 Christian König 2021-06-22 240 spin_unlock_irq(&dmabuf->poll.lock);
d40fce0f010662 Christian König 2021-06-22 241 if (!events)
d40fce0f010662 Christian König 2021-06-22 242 return 0;
d40fce0f010662 Christian König 2021-06-22 243
b016cd6ed4b772 Chris Wilson 2019-08-14 244 retry:
b016cd6ed4b772 Chris Wilson 2019-08-14 245 seq = read_seqcount_begin(&resv->seq);
3c3b177a9369b2 Maarten Lankhorst 2014-07-01 246 rcu_read_lock();
b016cd6ed4b772 Chris Wilson 2019-08-14 247
b016cd6ed4b772 Chris Wilson 2019-08-14 248 fobj = rcu_dereference(resv->fence);
d40fce0f010662 Christian König 2021-06-22 249 if (fobj && events & EPOLLOUT)
b016cd6ed4b772 Chris Wilson 2019-08-14 250 shared_count = fobj->shared_count;
b016cd6ed4b772 Chris Wilson 2019-08-14 251 else
b016cd6ed4b772 Chris Wilson 2019-08-14 252 shared_count = 0;
d40fce0f010662 Christian König 2021-06-22 253
d40fce0f010662 Christian König 2021-06-22 254 for (i = 0; i < shared_count; ++i) {
d40fce0f010662 Christian König 2021-06-22 255 fence = rcu_dereference(fobj->shared[i]);
d40fce0f010662 Christian König 2021-06-22 256 fence = dma_fence_get_rcu(fence);
d40fce0f010662 Christian König 2021-06-22 257 if (!fence || read_seqcount_retry(&resv->seq, seq)) {
d40fce0f010662 Christian König 2021-06-22 258 /* Concurrent modify detected, force re-check */
d40fce0f010662 Christian König 2021-06-22 259 dma_fence_put(fence);
b016cd6ed4b772 Chris Wilson 2019-08-14 260 rcu_read_unlock();
b016cd6ed4b772 Chris Wilson 2019-08-14 261 goto retry;
b016cd6ed4b772 Chris Wilson 2019-08-14 262 }
b016cd6ed4b772 Chris Wilson 2019-08-14 263
d40fce0f010662 Christian König 2021-06-22 264 r = dma_fence_add_callback(fence, &dcb->cb, dma_buf_poll_cb);
d40fce0f010662 Christian König 2021-06-22 265 if (!r) {
d40fce0f010662 Christian König 2021-06-22 266 /* Callback queued */
d40fce0f010662 Christian König 2021-06-22 267 events = 0;
d40fce0f010662 Christian König 2021-06-22 268 goto out;
9b495a5887994a Maarten Lankhorst 2014-07-01 269 }
d40fce0f010662 Christian König 2021-06-22 270 dma_fence_put(fence);
04a5faa8cbe5a8 Maarten Lankhorst 2014-07-01 271 }
9b495a5887994a Maarten Lankhorst 2014-07-01 272
d40fce0f010662 Christian König 2021-06-22 273 fence = dma_resv_get_excl(resv);
d40fce0f010662 Christian König 2021-06-22 274 if (fence && shared_count == 0) {
d40fce0f010662 Christian König 2021-06-22 275 fence = dma_fence_get_rcu(fence);
d40fce0f010662 Christian König 2021-06-22 276 if (!fence || read_seqcount_retry(&resv->seq, seq)) {
d40fce0f010662 Christian König 2021-06-22 277 /* Concurrent modify detected, force re-check */
d40fce0f010662 Christian König 2021-06-22 278 dma_fence_put(fence);
d40fce0f010662 Christian König 2021-06-22 279 rcu_read_unlock();
d40fce0f010662 Christian König 2021-06-22 280 goto retry;
9b495a5887994a Maarten Lankhorst 2014-07-01 281
d40fce0f010662 Christian König 2021-06-22 282 }
9b495a5887994a Maarten Lankhorst 2014-07-01 283
d40fce0f010662 Christian König 2021-06-22 284 r = dma_fence_add_callback(fence, &dcb->cb, dma_buf_poll_cb);
d40fce0f010662 Christian König 2021-06-22 285 if (!r) {
d40fce0f010662 Christian König 2021-06-22 286 /* Callback queued */
d40fce0f010662 Christian König 2021-06-22 287 events = 0;
9b495a5887994a Maarten Lankhorst 2014-07-01 288 goto out;
3c3b177a9369b2 Maarten Lankhorst 2014-07-01 289 }
d40fce0f010662 Christian König 2021-06-22 @290 dma_fence_put(fence_excl);
^^^^^^^^^^
Never initialized. Is part of the commit missing?
04a5faa8cbe5a8 Maarten Lankhorst 2014-07-01 291 }
9b495a5887994a Maarten Lankhorst 2014-07-01 292
9b495a5887994a Maarten Lankhorst 2014-07-01 293 /* No callback queued, wake up any additional waiters. */
9b495a5887994a Maarten Lankhorst 2014-07-01 294 dma_buf_poll_cb(NULL, &dcb->cb);
9b495a5887994a Maarten Lankhorst 2014-07-01 295
9b495a5887994a Maarten Lankhorst 2014-07-01 296 out:
3c3b177a9369b2 Maarten Lankhorst 2014-07-01 297 rcu_read_unlock();
9b495a5887994a Maarten Lankhorst 2014-07-01 298 return events;
9b495a5887994a Maarten Lankhorst 2014-07-01 299 }
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
More information about the dri-devel
mailing list