Re: [PATCH] media: zoran: move to dma-mapping interface

From: kbuild test robot
Date: Thu Apr 26 2018 - 13:50:51 EST


Hi Arnd,

I love your patch! Perhaps something to improve:

[auto build test WARNING on linuxtv-media/master]
[also build test WARNING on v4.17-rc2 next-20180426]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url: https://github.com/0day-ci/linux/commits/Arnd-Bergmann/media-zoran-move-to-dma-mapping-interface/20180426-032120
base: git://linuxtv.org/media_tree.git master
reproduce:
# apt-get install sparse
make ARCH=x86_64 allmodconfig
make C=1 CF=-D__CHECK_ENDIAN__


sparse warnings: (new ones prefixed by >>)

>> drivers/media/pci/zoran/zoran_driver.c:419:33: sparse: incorrect type in argument 2 (different base types) @@ expected unsigned long long [unsigned] [usertype] addr @@ got nsigned long long [unsigned] [usertype] addr @@
drivers/media/pci/zoran/zoran_driver.c:419:33: expected unsigned long long [unsigned] [usertype] addr
drivers/media/pci/zoran/zoran_driver.c:419:33: got restricted __le32 [assigned] [usertype] frag_tab

vim +419 drivers/media/pci/zoran/zoran_driver.c

395
396 /* free the MJPEG grab buffers */
397 static void jpg_fbuffer_free(struct zoran_fh *fh)
398 {
399 struct zoran *zr = fh->zr;
400 int i, j, off;
401 unsigned char *mem;
402 __le32 frag_tab;
403 struct zoran_buffer *buffer;
404
405 dprintk(4, KERN_DEBUG "%s: %s\n", ZR_DEVNAME(zr), __func__);
406
407 for (i = 0, buffer = &fh->buffers.buffer[0];
408 i < fh->buffers.num_buffers; i++, buffer++) {
409 if (!buffer->jpg.frag_tab)
410 continue;
411
412 if (fh->buffers.need_contiguous) {
413 frag_tab = buffer->jpg.frag_tab[0];
414
415 if (frag_tab) {
416 mem = buffer->jpg.frag_virt_tab[0];
417 for (off = 0; off < fh->buffers.buffer_size; off += PAGE_SIZE)
418 ClearPageReserved(virt_to_page(mem + off));
> 419 dma_unmap_single(&zr->pci_dev->dev, frag_tab, PAGE_SIZE, DMA_FROM_DEVICE);
420 kfree(mem);
421 buffer->jpg.frag_tab[0] = 0;
422 buffer->jpg.frag_tab[1] = 0;
423 }
424 } else {
425 for (j = 0; j < fh->buffers.buffer_size / PAGE_SIZE; j++) {
426 frag_tab = buffer->jpg.frag_tab[2 * j];
427
428 if (!frag_tab)
429 break;
430 ClearPageReserved(virt_to_page(buffer->jpg.frag_virt_tab[j]));
431 dma_unmap_single(&zr->pci_dev->dev, le32_to_cpu(frag_tab), PAGE_SIZE, DMA_FROM_DEVICE);
432 free_page((unsigned long)buffer->jpg.frag_virt_tab[j]);
433 buffer->jpg.frag_virt_tab[j] = NULL;
434 buffer->jpg.frag_tab[2 * j] = 0;
435 buffer->jpg.frag_tab[2 * j + 1] = 0;
436 }
437 }
438
439 dma_unmap_single(&zr->pci_dev->dev, buffer->jpg.frag_tab_dma, PAGE_SIZE, DMA_TO_DEVICE);
440 free_page((unsigned long)buffer->jpg.frag_tab);
441 free_page((unsigned long)buffer->jpg.frag_virt_tab);
442 buffer->jpg.frag_virt_tab = NULL;
443 buffer->jpg.frag_tab = NULL;
444 }
445
446 fh->buffers.allocated = 0;
447 }
448

---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation