[PATCH] dma-buf: fix and rework dma_buf_poll
kernel test robot
lkp at intel.com
Thu Jun 17 09:38:03 UTC 2021
Hi "Christian,
I love your patch! Perhaps something to improve:
[auto build test WARNING on next-20210616]
[cannot apply to tegra-drm/drm/tegra/for-next linus/master v5.13-rc6 v5.13-rc5 v5.13-rc4 v5.13-rc6]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]
url: https://github.com/0day-ci/linux/commits/Christian-K-nig/dma-buf-fix-and-rework-dma_buf_poll/20210617-103036
base: c7d4c1fd91ab4a6d2620497921a9c6bf54650ab8
config: s390-randconfig-r022-20210617 (attached as .config)
compiler: clang version 13.0.0 (https://github.com/llvm/llvm-project 64720f57bea6a6bf033feef4a5751ab9c0c3b401)
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 s390 cross compiling tool for clang build
# apt-get install binutils-s390x-linux-gnu
# https://github.com/0day-ci/linux/commit/dfa9f2ec4c082b73e644e2c565e58e2291f94463
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Christian-K-nig/dma-buf-fix-and-rework-dma_buf_poll/20210617-103036
git checkout dfa9f2ec4c082b73e644e2c565e58e2291f94463
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=s390
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp at intel.com>
All warnings (new ones prefixed by >>):
>> drivers/dma-buf/dma-buf.c:284:17: warning: variable 'fence_excl' is uninitialized when used here [-Wuninitialized]
dma_fence_put(fence_excl);
^~~~~~~~~~
drivers/dma-buf/dma-buf.c:213:30: note: initialize the variable 'fence_excl' to silence this warning
struct dma_fence *fence_excl;
^
= NULL
1 warning generated.
vim +/fence_excl +284 drivers/dma-buf/dma-buf.c
206
207 static __poll_t dma_buf_poll(struct file *file, poll_table *poll)
208 {
209 struct dma_buf_poll_cb_t *dcb;
210 struct dma_buf *dmabuf;
211 struct dma_resv *resv;
212 struct dma_resv_list *fobj;
213 struct dma_fence *fence_excl;
214 unsigned shared_count, seq;
215 struct dma_fence *fence;
216 __poll_t events;
217 int r, i;
218
219 dmabuf = file->private_data;
220 if (!dmabuf || !dmabuf->resv)
221 return EPOLLERR;
222
223 resv = dmabuf->resv;
224
225 poll_wait(file, &dmabuf->poll, poll);
226
227 events = poll_requested_events(poll) & (EPOLLIN | EPOLLOUT);
228 if (!events)
229 return 0;
230
231 dcb = events & EPOLLOUT ? &dmabuf->cb_out : &dmabuf->cb_in;
232
233 /* Only queue a new one if we are not still waiting for the old one */
234 spin_lock_irq(&dmabuf->poll.lock);
235 if (dcb->active)
236 events = 0;
237 else
238 dcb->active = events;
239 spin_unlock_irq(&dmabuf->poll.lock);
240 if (!events)
241 return 0;
242
243 retry:
244 seq = read_seqcount_begin(&resv->seq);
245 rcu_read_lock();
246
247 fobj = rcu_dereference(resv->fence);
248 if (fobj && events & EPOLLOUT)
249 shared_count = fobj->shared_count;
250 else
251 shared_count = 0;
252
253 for (i = 0; i < shared_count; ++i) {
254 fence = rcu_dereference(fobj->shared[i]);
255 fence = dma_fence_get_rcu(fence);
256 if (!fence || read_seqcount_retry(&resv->seq, seq)) {
257 /* Concurrent modify detected, force re-check */
258 dma_fence_put(fence);
259 rcu_read_unlock();
260 goto retry;
261 }
262
263 r = dma_fence_add_callback(fence, &dcb->cb, dma_buf_poll_cb);
264 dma_fence_put(fence);
265 if (!r) {
266 /* Callback queued */
267 events = 0;
268 goto out;
269 }
270 }
271
272 fence = dma_resv_excl_fence(resv);
273 if (fence) {
274 fence = dma_fence_get_rcu(fence);
275 if (!fence || read_seqcount_retry(&resv->seq, seq)) {
276 /* Concurrent modify detected, force re-check */
277 dma_fence_put(fence);
278 rcu_read_unlock();
279 goto retry;
280
281 }
282
283 r = dma_fence_add_callback(fence, &dcb->cb, dma_buf_poll_cb);
> 284 dma_fence_put(fence_excl);
285 if (!r) {
286 /* Callback queued */
287 events = 0;
288 goto out;
289 }
290 }
291
292 /* No callback queued, wake up any additional waiters. */
293 dma_buf_poll_cb(NULL, &dcb->cb);
294
295 out:
296 rcu_read_unlock();
297 return events;
298 }
299
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
-------------- next part --------------
A non-text attachment was scrubbed...
Name: .config.gz
Type: application/gzip
Size: 33433 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/dri-devel/attachments/20210617/d18fe7c6/attachment-0001.gz>
More information about the dri-devel
mailing list