Hi Paul,
kernel test robot noticed the following build errors:
[auto build test ERROR on jic23-iio/togreg] [also build test ERROR on vkoul-dmaengine/next linus/master v6.10-rc4 next-20240618] [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#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Paul-Cercueil/dmaengine-Add-A... base: https://git.kernel.org/pub/scm/linux/kernel/git/jic23/iio.git togreg patch link: https://lore.kernel.org/r/20240618100302.72886-4-paul%40crapouillou.net patch subject: [PATCH v11 3/7] iio: core: Add new DMABUF interface infrastructure config: x86_64-randconfig-161-20240619 (https://download.01.org/0day-ci/archive/20240619/202406191014.9JAzwRV6-lkp@i...) compiler: clang version 18.1.5 (https://github.com/llvm/llvm-project 617a15a9eac96088ae5e9134248d8236e34b91b1) reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240619/202406191014.9JAzwRV6-lkp@i...)
If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot lkp@intel.com | Closes: https://lore.kernel.org/oe-kbuild-all/202406191014.9JAzwRV6-lkp@intel.com/
All errors (new ones prefixed by >>):
drivers/iio/industrialio-buffer.c:1715:3: error: cannot jump from this goto statement to its label
1715 | goto err_dmabuf_unmap_attachment; | ^ drivers/iio/industrialio-buffer.c:1720:2: note: jump bypasses initialization of variable with __attribute__((cleanup)) 1720 | guard(mutex)(&buffer->dmabufs_mutex); | ^ include/linux/cleanup.h:164:15: note: expanded from macro 'guard' 164 | CLASS(_name, __UNIQUE_ID(guard)) | ^ include/linux/compiler.h:189:29: note: expanded from macro '__UNIQUE_ID' 189 | #define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __COUNTER__) | ^ include/linux/compiler_types.h:84:22: note: expanded from macro '__PASTE' 84 | #define __PASTE(a,b) ___PASTE(a,b) | ^ include/linux/compiler_types.h:83:23: note: expanded from macro '___PASTE' 83 | #define ___PASTE(a,b) a##b | ^ <scratch space>:126:1: note: expanded from here 126 | __UNIQUE_ID_guard696 | ^ drivers/iio/industrialio-buffer.c:1704:3: error: cannot jump from this goto statement to its label 1704 | goto err_resv_unlock; | ^ drivers/iio/industrialio-buffer.c:1720:2: note: jump bypasses initialization of variable with __attribute__((cleanup)) 1720 | guard(mutex)(&buffer->dmabufs_mutex); | ^ include/linux/cleanup.h:164:15: note: expanded from macro 'guard' 164 | CLASS(_name, __UNIQUE_ID(guard)) | ^ include/linux/compiler.h:189:29: note: expanded from macro '__UNIQUE_ID' 189 | #define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __COUNTER__) | ^ include/linux/compiler_types.h:84:22: note: expanded from macro '__PASTE' 84 | #define __PASTE(a,b) ___PASTE(a,b) | ^ include/linux/compiler_types.h:83:23: note: expanded from macro '___PASTE' 83 | #define ___PASTE(a,b) a##b | ^ <scratch space>:126:1: note: expanded from here 126 | __UNIQUE_ID_guard696 | ^ drivers/iio/industrialio-buffer.c:1695:3: error: cannot jump from this goto statement to its label 1695 | goto err_dmabuf_detach; | ^ drivers/iio/industrialio-buffer.c:1720:2: note: jump bypasses initialization of variable with __attribute__((cleanup)) 1720 | guard(mutex)(&buffer->dmabufs_mutex); | ^ include/linux/cleanup.h:164:15: note: expanded from macro 'guard' 164 | CLASS(_name, __UNIQUE_ID(guard)) | ^ include/linux/compiler.h:189:29: note: expanded from macro '__UNIQUE_ID' 189 | #define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __COUNTER__) | ^ include/linux/compiler_types.h:84:22: note: expanded from macro '__PASTE' 84 | #define __PASTE(a,b) ___PASTE(a,b) | ^ include/linux/compiler_types.h:83:23: note: expanded from macro '___PASTE' 83 | #define ___PASTE(a,b) a##b | ^ <scratch space>:126:1: note: expanded from here 126 | __UNIQUE_ID_guard696 | ^ drivers/iio/industrialio-buffer.c:1690:3: error: cannot jump from this goto statement to its label 1690 | goto err_dmabuf_put; | ^ drivers/iio/industrialio-buffer.c:1720:2: note: jump bypasses initialization of variable with __attribute__((cleanup)) 1720 | guard(mutex)(&buffer->dmabufs_mutex); | ^ include/linux/cleanup.h:164:15: note: expanded from macro 'guard' 164 | CLASS(_name, __UNIQUE_ID(guard)) | ^ include/linux/compiler.h:189:29: note: expanded from macro '__UNIQUE_ID' 189 | #define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __COUNTER__) | ^ include/linux/compiler_types.h:84:22: note: expanded from macro '__PASTE' 84 | #define __PASTE(a,b) ___PASTE(a,b) | ^ include/linux/compiler_types.h:83:23: note: expanded from macro '___PASTE' 83 | #define ___PASTE(a,b) a##b | ^ <scratch space>:126:1: note: expanded from here 126 | __UNIQUE_ID_guard696 | ^ drivers/iio/industrialio-buffer.c:1684:3: error: cannot jump from this goto statement to its label 1684 | goto err_free_priv; | ^ drivers/iio/industrialio-buffer.c:1720:2: note: jump bypasses initialization of variable with __attribute__((cleanup)) 1720 | guard(mutex)(&buffer->dmabufs_mutex); | ^ include/linux/cleanup.h:164:15: note: expanded from macro 'guard' 164 | CLASS(_name, __UNIQUE_ID(guard)) | ^ include/linux/compiler.h:189:29: note: expanded from macro '__UNIQUE_ID' 189 | #define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __COUNTER__) | ^ include/linux/compiler_types.h:84:22: note: expanded from macro '__PASTE' 84 | #define __PASTE(a,b) ___PASTE(a,b) | ^ include/linux/compiler_types.h:83:23: note: expanded from macro '___PASTE' 83 | #define ___PASTE(a,b) a##b
vim +1715 drivers/iio/industrialio-buffer.c
1655 1656 static int iio_buffer_attach_dmabuf(struct iio_dev_buffer_pair *ib, 1657 int __user *user_fd, bool nonblock) 1658 { 1659 struct iio_dev *indio_dev = ib->indio_dev; 1660 struct iio_buffer *buffer = ib->buffer; 1661 struct dma_buf_attachment *attach; 1662 struct iio_dmabuf_priv *priv, *each; 1663 struct dma_buf *dmabuf; 1664 int err, fd; 1665 1666 if (!buffer->access->attach_dmabuf 1667 || !buffer->access->detach_dmabuf 1668 || !buffer->access->enqueue_dmabuf) 1669 return -EPERM; 1670 1671 if (copy_from_user(&fd, user_fd, sizeof(fd))) 1672 return -EFAULT; 1673 1674 priv = kzalloc(sizeof(*priv), GFP_KERNEL); 1675 if (!priv) 1676 return -ENOMEM; 1677 1678 spin_lock_init(&priv->lock); 1679 priv->context = dma_fence_context_alloc(1); 1680 1681 dmabuf = dma_buf_get(fd); 1682 if (IS_ERR(dmabuf)) { 1683 err = PTR_ERR(dmabuf); 1684 goto err_free_priv; 1685 } 1686 1687 attach = dma_buf_attach(dmabuf, indio_dev->dev.parent); 1688 if (IS_ERR(attach)) { 1689 err = PTR_ERR(attach); 1690 goto err_dmabuf_put; 1691 } 1692 1693 err = iio_dma_resv_lock(dmabuf, nonblock); 1694 if (err) 1695 goto err_dmabuf_detach; 1696 1697 priv->dir = buffer->direction == IIO_BUFFER_DIRECTION_IN 1698 ? DMA_FROM_DEVICE : DMA_TO_DEVICE; 1699 1700 priv->sgt = dma_buf_map_attachment(attach, priv->dir); 1701 if (IS_ERR(priv->sgt)) { 1702 err = PTR_ERR(priv->sgt); 1703 dev_err(&indio_dev->dev, "Unable to map attachment: %d\n", err); 1704 goto err_resv_unlock; 1705 } 1706 1707 kref_init(&priv->ref); 1708 priv->buffer = buffer; 1709 priv->attach = attach; 1710 attach->importer_priv = priv; 1711 1712 priv->block = buffer->access->attach_dmabuf(buffer, attach); 1713 if (IS_ERR(priv->block)) { 1714 err = PTR_ERR(priv->block);
1715 goto err_dmabuf_unmap_attachment;
1716 } 1717 1718 dma_resv_unlock(dmabuf->resv); 1719 1720 guard(mutex)(&buffer->dmabufs_mutex); 1721 1722 /* 1723 * Check whether we already have an attachment for this driver/DMABUF 1724 * combo. If we do, refuse to attach. 1725 */ 1726 list_for_each_entry(each, &buffer->dmabufs, entry) { 1727 if (each->attach->dev == indio_dev->dev.parent 1728 && each->attach->dmabuf == dmabuf) { 1729 /* 1730 * We unlocked the reservation object, so going through 1731 * the cleanup code would mean re-locking it first. 1732 * At this stage it is simpler to free the attachment 1733 * using iio_buffer_dma_put(). 1734 */ 1735 iio_buffer_dmabuf_put(attach); 1736 return -EBUSY; 1737 } 1738 } 1739 1740 /* Otherwise, add the new attachment to our dmabufs list. */ 1741 list_add(&priv->entry, &buffer->dmabufs); 1742 1743 return 0; 1744 1745 err_dmabuf_unmap_attachment: 1746 dma_buf_unmap_attachment(attach, priv->sgt, priv->dir); 1747 err_resv_unlock: 1748 dma_resv_unlock(dmabuf->resv); 1749 err_dmabuf_detach: 1750 dma_buf_detach(dmabuf, attach); 1751 err_dmabuf_put: 1752 dma_buf_put(dmabuf); 1753 err_free_priv: 1754 kfree(priv); 1755 1756 return err; 1757 } 1758