All of lore.kernel.org
 help / color / mirror / Atom feed
* Re: [PATCH v2 2/2] !!! TESTING ONLY !!! Allow compile virt-dma users on ARM64 platform
@ 2025-06-18  0:51 kernel test robot
  0 siblings, 0 replies; 8+ messages in thread
From: kernel test robot @ 2025-06-18  0:51 UTC (permalink / raw)
  To: oe-kbuild; +Cc: lkp, Julia Lawall

BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
In-Reply-To: <20250616124934.141782-3-al.kochet@gmail.com>
References: <20250616124934.141782-3-al.kochet@gmail.com>
TO: Alexander Kochetkov <al.kochet@gmail.com>
TO: Vinod Koul <vkoul@kernel.org>
TO: dmaengine@vger.kernel.org
TO: linux-kernel@vger.kernel.org
CC: Nishad Saraf <nishads@amd.com>
CC: Lizhi Hou <lizhi.hou@amd.com>
CC: Jacky Huang <ychuang3@nuvoton.com>
CC: "Shan-Chun Hung" <schung@nuvoton.com>
CC: Florian Fainelli <florian.fainelli@broadcom.com>
CC: Ray Jui <rjui@broadcom.com>
CC: Scott Branden <sbranden@broadcom.com>
CC: "Lars-Peter Clausen" <lars@metafoo.de>
CC: Paul Cercueil <paul@crapouillou.net>
CC: Eugeniy Paltsev <Eugeniy.Paltsev@synopsys.com>
CC: Manivannan Sadhasivam <mani@kernel.org>
CC: Frank Li <Frank.Li@nxp.com>
CC: Zhou Wang <wangzhou1@hisilicon.com>
CC: Longfang Liu <liulongfang@huawei.com>
CC: Andy Shevchenko <andy@kernel.org>
CC: Shawn Guo <shawnguo@kernel.org>
CC: Sascha Hauer <s.hauer@pengutronix.de>
CC: Pengutronix Kernel Team <kernel@pengutronix.de>
CC: Fabio Estevam <festevam@gmail.com>
CC: Keguang Zhang <keguang.zhang@gmail.com>
CC: Sean Wang <sean.wang@mediatek.com>
CC: Matthias Brugger <matthias.bgg@gmail.com>
CC: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
CC: "Andreas Färber" <afaerber@suse.de>
CC: Daniel Mack <daniel@zonque.org>
CC: Haojian Zhuang <haojian.zhuang@gmail.com>
CC: Robert Jarzmik <robert.jarzmik@free.fr>

Hi Alexander,

kernel test robot noticed the following build warnings:

[auto build test WARNING on vkoul-dmaengine/next]
[also build test WARNING on shawnguo/for-next sunxi/sunxi/for-next lee-mfd/for-mfd-next linus/master v6.16-rc2 next-20250617]
[cannot apply to atorgue-stm32/stm32-next lee-mfd/for-mfd-fixes]
[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/Alexander-Kochetkov/dmaengine-virt-dma-convert-tasklet-to-BH-workqueue-for-callback-invocation/20250616-205118
base:   https://git.kernel.org/pub/scm/linux/kernel/git/vkoul/dmaengine.git next
patch link:    https://lore.kernel.org/r/20250616124934.141782-3-al.kochet%40gmail.com
patch subject: [PATCH v2 2/2] !!! TESTING ONLY !!! Allow compile virt-dma users on ARM64 platform
:::::: branch date: 2 days ago
:::::: commit date: 2 days ago
config: alpha-randconfig-r052-20250618 (https://download.01.org/0day-ci/archive/20250618/202506180852.dB2jZ8KI-lkp@intel.com/config)
compiler: alpha-linux-gcc (GCC) 8.5.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250618/202506180852.dB2jZ8KI-lkp@intel.com/reproduce)

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>
| Reported-by: Julia Lawall <julia.lawall@inria.fr>
| Closes: https://lore.kernel.org/r/202506180852.dB2jZ8KI-lkp@intel.com/

All warnings (new ones prefixed by >>):

>> drivers/dma/bcm2835-dma.c:856:34: warning: 'bcm2835_dma_of_match' defined but not used [-Wunused-const-variable=]
    static const struct of_device_id bcm2835_dma_of_match[] = {
                                     ^~~~~~~~~~~~~~~~~~~~

cocci warnings: (new ones prefixed by >>)
>> drivers/dma/bcm2835-dma.c:994:36-37: WARNING opportunity for min()

vim +994 drivers/dma/bcm2835-dma.c

96286b57669073 Florian Meier  2014-01-06   855  
96286b57669073 Florian Meier  2014-01-06  @856  static const struct of_device_id bcm2835_dma_of_match[] = {
96286b57669073 Florian Meier  2014-01-06   857  	{ .compatible = "brcm,bcm2835-dma", },
96286b57669073 Florian Meier  2014-01-06   858  	{},
96286b57669073 Florian Meier  2014-01-06   859  };
96286b57669073 Florian Meier  2014-01-06   860  MODULE_DEVICE_TABLE(of, bcm2835_dma_of_match);
96286b57669073 Florian Meier  2014-01-06   861  
96286b57669073 Florian Meier  2014-01-06   862  static struct dma_chan *bcm2835_dma_xlate(struct of_phandle_args *spec,
96286b57669073 Florian Meier  2014-01-06   863  					   struct of_dma *ofdma)
96286b57669073 Florian Meier  2014-01-06   864  {
96286b57669073 Florian Meier  2014-01-06   865  	struct bcm2835_dmadev *d = ofdma->of_dma_data;
96286b57669073 Florian Meier  2014-01-06   866  	struct dma_chan *chan;
96286b57669073 Florian Meier  2014-01-06   867  
96286b57669073 Florian Meier  2014-01-06   868  	chan = dma_get_any_slave_channel(&d->ddev);
96286b57669073 Florian Meier  2014-01-06   869  	if (!chan)
96286b57669073 Florian Meier  2014-01-06   870  		return NULL;
96286b57669073 Florian Meier  2014-01-06   871  
96286b57669073 Florian Meier  2014-01-06   872  	/* Set DREQ from param */
96286b57669073 Florian Meier  2014-01-06   873  	to_bcm2835_dma_chan(chan)->dreq = spec->args[0];
96286b57669073 Florian Meier  2014-01-06   874  
96286b57669073 Florian Meier  2014-01-06   875  	return chan;
96286b57669073 Florian Meier  2014-01-06   876  }
96286b57669073 Florian Meier  2014-01-06   877  
9602a843cb3a16 Stefan Wahren  2024-12-04   878  static int bcm2835_dma_suspend_late(struct device *dev)
9602a843cb3a16 Stefan Wahren  2024-12-04   879  {
9602a843cb3a16 Stefan Wahren  2024-12-04   880  	struct bcm2835_dmadev *od = dev_get_drvdata(dev);
9602a843cb3a16 Stefan Wahren  2024-12-04   881  	struct bcm2835_chan *c, *next;
9602a843cb3a16 Stefan Wahren  2024-12-04   882  
9602a843cb3a16 Stefan Wahren  2024-12-04   883  	list_for_each_entry_safe(c, next, &od->ddev.channels,
9602a843cb3a16 Stefan Wahren  2024-12-04   884  				 vc.chan.device_node) {
9602a843cb3a16 Stefan Wahren  2024-12-04   885  		void __iomem *chan_base = c->chan_base;
9602a843cb3a16 Stefan Wahren  2024-12-04   886  
9602a843cb3a16 Stefan Wahren  2024-12-04   887  		/* Check if DMA channel is busy */
9602a843cb3a16 Stefan Wahren  2024-12-04   888  		if (readl(chan_base + BCM2835_DMA_ADDR))
9602a843cb3a16 Stefan Wahren  2024-12-04   889  			return -EBUSY;
9602a843cb3a16 Stefan Wahren  2024-12-04   890  	}
9602a843cb3a16 Stefan Wahren  2024-12-04   891  
9602a843cb3a16 Stefan Wahren  2024-12-04   892  	return 0;
9602a843cb3a16 Stefan Wahren  2024-12-04   893  }
9602a843cb3a16 Stefan Wahren  2024-12-04   894  
9602a843cb3a16 Stefan Wahren  2024-12-04   895  static const struct dev_pm_ops bcm2835_dma_pm_ops = {
95032938c7c9b2 Stefan Wahren  2025-02-22   896  	LATE_SYSTEM_SLEEP_PM_OPS(bcm2835_dma_suspend_late, NULL)
9602a843cb3a16 Stefan Wahren  2024-12-04   897  };
9602a843cb3a16 Stefan Wahren  2024-12-04   898  
96286b57669073 Florian Meier  2014-01-06   899  static int bcm2835_dma_probe(struct platform_device *pdev)
96286b57669073 Florian Meier  2014-01-06   900  {
96286b57669073 Florian Meier  2014-01-06   901  	struct bcm2835_dmadev *od;
96286b57669073 Florian Meier  2014-01-06   902  	void __iomem *base;
96286b57669073 Florian Meier  2014-01-06   903  	int rc;
e2eca6389b031c Martin Sperl   2016-04-11   904  	int i, j;
e2eca6389b031c Martin Sperl   2016-04-11   905  	int irq[BCM2835_DMA_MAX_DMA_CHAN_SUPPORTED + 1];
e2eca6389b031c Martin Sperl   2016-04-11   906  	int irq_flags;
96286b57669073 Florian Meier  2014-01-06   907  	uint32_t chans_available;
e2eca6389b031c Martin Sperl   2016-04-11   908  	char chan_name[BCM2835_DMA_CHAN_NAME_SIZE];
96286b57669073 Florian Meier  2014-01-06   909  
96286b57669073 Florian Meier  2014-01-06   910  	if (!pdev->dev.dma_mask)
96286b57669073 Florian Meier  2014-01-06   911  		pdev->dev.dma_mask = &pdev->dev.coherent_dma_mask;
96286b57669073 Florian Meier  2014-01-06   912  
96286b57669073 Florian Meier  2014-01-06   913  	rc = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32));
72503b25ee3638 Stefan Wahren  2019-07-16   914  	if (rc) {
72503b25ee3638 Stefan Wahren  2019-07-16   915  		dev_err(&pdev->dev, "Unable to set DMA mask\n");
96286b57669073 Florian Meier  2014-01-06   916  		return rc;
72503b25ee3638 Stefan Wahren  2019-07-16   917  	}
96286b57669073 Florian Meier  2014-01-06   918  
96286b57669073 Florian Meier  2014-01-06   919  	od = devm_kzalloc(&pdev->dev, sizeof(*od), GFP_KERNEL);
96286b57669073 Florian Meier  2014-01-06   920  	if (!od)
96286b57669073 Florian Meier  2014-01-06   921  		return -ENOMEM;
96286b57669073 Florian Meier  2014-01-06   922  
96286b57669073 Florian Meier  2014-01-06   923  	dma_set_max_seg_size(&pdev->dev, 0x3FFFFFFF);
96286b57669073 Florian Meier  2014-01-06   924  
4b23603a251d24 Tudor Ambarus  2022-11-10   925  	base = devm_platform_ioremap_resource(pdev, 0);
96286b57669073 Florian Meier  2014-01-06   926  	if (IS_ERR(base))
96286b57669073 Florian Meier  2014-01-06   927  		return PTR_ERR(base);
96286b57669073 Florian Meier  2014-01-06   928  
96286b57669073 Florian Meier  2014-01-06   929  	od->base = base;
96286b57669073 Florian Meier  2014-01-06   930  
96286b57669073 Florian Meier  2014-01-06   931  	dma_cap_set(DMA_SLAVE, od->ddev.cap_mask);
7f5ae3553685d5 Florian Meier  2014-01-17   932  	dma_cap_set(DMA_PRIVATE, od->ddev.cap_mask);
96286b57669073 Florian Meier  2014-01-06   933  	dma_cap_set(DMA_CYCLIC, od->ddev.cap_mask);
d9f094a02f3051 Martin Sperl   2016-03-16   934  	dma_cap_set(DMA_MEMCPY, od->ddev.cap_mask);
96286b57669073 Florian Meier  2014-01-06   935  	od->ddev.device_alloc_chan_resources = bcm2835_dma_alloc_chan_resources;
96286b57669073 Florian Meier  2014-01-06   936  	od->ddev.device_free_chan_resources = bcm2835_dma_free_chan_resources;
96286b57669073 Florian Meier  2014-01-06   937  	od->ddev.device_tx_status = bcm2835_dma_tx_status;
96286b57669073 Florian Meier  2014-01-06   938  	od->ddev.device_issue_pending = bcm2835_dma_issue_pending;
96286b57669073 Florian Meier  2014-01-06   939  	od->ddev.device_prep_dma_cyclic = bcm2835_dma_prep_dma_cyclic;
388cc7a281c06e Martin Sperl   2016-03-16   940  	od->ddev.device_prep_slave_sg = bcm2835_dma_prep_slave_sg;
d9f094a02f3051 Martin Sperl   2016-03-16   941  	od->ddev.device_prep_dma_memcpy = bcm2835_dma_prep_dma_memcpy;
39159bea78ed05 Maxime Ripard  2014-11-17   942  	od->ddev.device_config = bcm2835_dma_slave_config;
39159bea78ed05 Maxime Ripard  2014-11-17   943  	od->ddev.device_terminate_all = bcm2835_dma_terminate_all;
de92436ac40ffe Peter Ujfalusi 2017-11-14   944  	od->ddev.device_synchronize = bcm2835_dma_synchronize;
b574368024670a Maxime Ripard  2014-11-17   945  	od->ddev.src_addr_widths = BIT(DMA_SLAVE_BUSWIDTH_4_BYTES);
b574368024670a Maxime Ripard  2014-11-17   946  	od->ddev.dst_addr_widths = BIT(DMA_SLAVE_BUSWIDTH_4_BYTES);
d9f094a02f3051 Martin Sperl   2016-03-16   947  	od->ddev.directions = BIT(DMA_DEV_TO_MEM) | BIT(DMA_MEM_TO_DEV) |
d9f094a02f3051 Martin Sperl   2016-03-16   948  			      BIT(DMA_MEM_TO_MEM);
0fa5867e6a2c61 Martin Sperl   2016-03-16   949  	od->ddev.residue_granularity = DMA_RESIDUE_GRANULARITY_BURST;
6f6869dc97e865 Lukas Wunner   2019-09-11   950  	od->ddev.descriptor_reuse = true;
96286b57669073 Florian Meier  2014-01-06   951  	od->ddev.dev = &pdev->dev;
96286b57669073 Florian Meier  2014-01-06   952  	INIT_LIST_HEAD(&od->ddev.channels);
96286b57669073 Florian Meier  2014-01-06   953  
96286b57669073 Florian Meier  2014-01-06   954  	platform_set_drvdata(pdev, od);
96286b57669073 Florian Meier  2014-01-06   955  
bf75703d0912da Lukas Wunner   2019-09-11   956  	od->zero_page = dma_map_page_attrs(od->ddev.dev, ZERO_PAGE(0), 0,
bf75703d0912da Lukas Wunner   2019-09-11   957  					   PAGE_SIZE, DMA_TO_DEVICE,
bf75703d0912da Lukas Wunner   2019-09-11   958  					   DMA_ATTR_SKIP_CPU_SYNC);
bf75703d0912da Lukas Wunner   2019-09-11   959  	if (dma_mapping_error(od->ddev.dev, od->zero_page)) {
bf75703d0912da Lukas Wunner   2019-09-11   960  		dev_err(&pdev->dev, "Failed to map zero page\n");
bf75703d0912da Lukas Wunner   2019-09-11   961  		return -ENOMEM;
bf75703d0912da Lukas Wunner   2019-09-11   962  	}
bf75703d0912da Lukas Wunner   2019-09-11   963  
96286b57669073 Florian Meier  2014-01-06   964  	/* Request DMA channel mask from device tree */
96286b57669073 Florian Meier  2014-01-06   965  	if (of_property_read_u32(pdev->dev.of_node,
96286b57669073 Florian Meier  2014-01-06   966  			"brcm,dma-channel-mask",
96286b57669073 Florian Meier  2014-01-06   967  			&chans_available)) {
96286b57669073 Florian Meier  2014-01-06   968  		dev_err(&pdev->dev, "Failed to get channel mask\n");
96286b57669073 Florian Meier  2014-01-06   969  		rc = -EINVAL;
96286b57669073 Florian Meier  2014-01-06   970  		goto err_no_dma;
96286b57669073 Florian Meier  2014-01-06   971  	}
96286b57669073 Florian Meier  2014-01-06   972  
e2eca6389b031c Martin Sperl   2016-04-11   973  	/* get irqs for each channel that we support */
e2eca6389b031c Martin Sperl   2016-04-11   974  	for (i = 0; i <= BCM2835_DMA_MAX_DMA_CHAN_SUPPORTED; i++) {
e2eca6389b031c Martin Sperl   2016-04-11   975  		/* skip masked out channels */
e2eca6389b031c Martin Sperl   2016-04-11   976  		if (!(chans_available & (1 << i))) {
e2eca6389b031c Martin Sperl   2016-04-11   977  			irq[i] = -1;
e2eca6389b031c Martin Sperl   2016-04-11   978  			continue;
e2eca6389b031c Martin Sperl   2016-04-11   979  		}
e2eca6389b031c Martin Sperl   2016-04-11   980  
e2eca6389b031c Martin Sperl   2016-04-11   981  		/* get the named irq */
e2eca6389b031c Martin Sperl   2016-04-11   982  		snprintf(chan_name, sizeof(chan_name), "dma%i", i);
e2eca6389b031c Martin Sperl   2016-04-11   983  		irq[i] = platform_get_irq_byname(pdev, chan_name);
e2eca6389b031c Martin Sperl   2016-04-11   984  		if (irq[i] >= 0)
e2eca6389b031c Martin Sperl   2016-04-11   985  			continue;
e2eca6389b031c Martin Sperl   2016-04-11   986  
e2eca6389b031c Martin Sperl   2016-04-11   987  		/* legacy device tree case handling */
e2eca6389b031c Martin Sperl   2016-04-11   988  		dev_warn_once(&pdev->dev,
0eef727a47c5ea Martin Sperl   2016-04-22   989  			      "missing interrupt-names property in device tree - legacy interpretation is used\n");
e2eca6389b031c Martin Sperl   2016-04-11   990  		/*
e2eca6389b031c Martin Sperl   2016-04-11   991  		 * in case of channel >= 11
e2eca6389b031c Martin Sperl   2016-04-11   992  		 * use the 11th interrupt and that is shared
e2eca6389b031c Martin Sperl   2016-04-11   993  		 */
e2eca6389b031c Martin Sperl   2016-04-11  @994  		irq[i] = platform_get_irq(pdev, i < 11 ? i : 11);
e2eca6389b031c Martin Sperl   2016-04-11   995  	}
e2eca6389b031c Martin Sperl   2016-04-11   996  
e2eca6389b031c Martin Sperl   2016-04-11   997  	/* get irqs for each channel */
e2eca6389b031c Martin Sperl   2016-04-11   998  	for (i = 0; i <= BCM2835_DMA_MAX_DMA_CHAN_SUPPORTED; i++) {
e2eca6389b031c Martin Sperl   2016-04-11   999  		/* skip channels without irq */
e2eca6389b031c Martin Sperl   2016-04-11  1000  		if (irq[i] < 0)
e2eca6389b031c Martin Sperl   2016-04-11  1001  			continue;
e2eca6389b031c Martin Sperl   2016-04-11  1002  
e2eca6389b031c Martin Sperl   2016-04-11  1003  		/* check if there are other channels that also use this irq */
e2eca6389b031c Martin Sperl   2016-04-11  1004  		irq_flags = 0;
e2eca6389b031c Martin Sperl   2016-04-11  1005  		for (j = 0; j <= BCM2835_DMA_MAX_DMA_CHAN_SUPPORTED; j++)
e2eca6389b031c Martin Sperl   2016-04-11  1006  			if ((i != j) && (irq[j] == irq[i])) {
e2eca6389b031c Martin Sperl   2016-04-11  1007  				irq_flags = IRQF_SHARED;
96286b57669073 Florian Meier  2014-01-06  1008  				break;
e2eca6389b031c Martin Sperl   2016-04-11  1009  			}
96286b57669073 Florian Meier  2014-01-06  1010  
e2eca6389b031c Martin Sperl   2016-04-11  1011  		/* initialize the channel */
e2eca6389b031c Martin Sperl   2016-04-11  1012  		rc = bcm2835_dma_chan_init(od, i, irq[i], irq_flags);
96286b57669073 Florian Meier  2014-01-06  1013  		if (rc)
96286b57669073 Florian Meier  2014-01-06  1014  			goto err_no_dma;
96286b57669073 Florian Meier  2014-01-06  1015  	}
96286b57669073 Florian Meier  2014-01-06  1016  
96286b57669073 Florian Meier  2014-01-06  1017  	dev_dbg(&pdev->dev, "Initialized %i DMA channels\n", i);
96286b57669073 Florian Meier  2014-01-06  1018  
96286b57669073 Florian Meier  2014-01-06  1019  	/* Device-tree DMA controller registration */
96286b57669073 Florian Meier  2014-01-06  1020  	rc = of_dma_controller_register(pdev->dev.of_node,
96286b57669073 Florian Meier  2014-01-06  1021  			bcm2835_dma_xlate, od);
96286b57669073 Florian Meier  2014-01-06  1022  	if (rc) {
96286b57669073 Florian Meier  2014-01-06  1023  		dev_err(&pdev->dev, "Failed to register DMA controller\n");
96286b57669073 Florian Meier  2014-01-06  1024  		goto err_no_dma;
96286b57669073 Florian Meier  2014-01-06  1025  	}
96286b57669073 Florian Meier  2014-01-06  1026  
96286b57669073 Florian Meier  2014-01-06  1027  	rc = dma_async_device_register(&od->ddev);
96286b57669073 Florian Meier  2014-01-06  1028  	if (rc) {
96286b57669073 Florian Meier  2014-01-06  1029  		dev_err(&pdev->dev,
96286b57669073 Florian Meier  2014-01-06  1030  			"Failed to register slave DMA engine device: %d\n", rc);
96286b57669073 Florian Meier  2014-01-06  1031  		goto err_no_dma;
96286b57669073 Florian Meier  2014-01-06  1032  	}
96286b57669073 Florian Meier  2014-01-06  1033  
96286b57669073 Florian Meier  2014-01-06  1034  	dev_dbg(&pdev->dev, "Load BCM2835 DMA engine driver\n");
96286b57669073 Florian Meier  2014-01-06  1035  
96286b57669073 Florian Meier  2014-01-06  1036  	return 0;
96286b57669073 Florian Meier  2014-01-06  1037  
96286b57669073 Florian Meier  2014-01-06  1038  err_no_dma:
96286b57669073 Florian Meier  2014-01-06  1039  	bcm2835_dma_free(od);
96286b57669073 Florian Meier  2014-01-06  1040  	return rc;
96286b57669073 Florian Meier  2014-01-06  1041  }
96286b57669073 Florian Meier  2014-01-06  1042  

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

^ permalink raw reply	[flat|nested] 8+ messages in thread
* [PATCH v2 0/2] dmaengine: virt-dma: convert tasklet to BH workqueue for callback invocation
@ 2025-06-16 12:48 Alexander Kochetkov
  2025-06-16 12:48 ` [PATCH v2 2/2] !!! TESTING ONLY !!! Allow compile virt-dma users on ARM64 platform Alexander Kochetkov
  0 siblings, 1 reply; 8+ messages in thread
From: Alexander Kochetkov @ 2025-06-16 12:48 UTC (permalink / raw)
  To: Vinod Koul, dmaengine, linux-kernel
  Cc: Nishad Saraf, Lizhi Hou, Jacky Huang, Shan-Chun Hung,
	Florian Fainelli, Ray Jui, Scott Branden, Lars-Peter Clausen,
	Paul Cercueil, Eugeniy Paltsev, Manivannan Sadhasivam, Frank Li,
	Zhou Wang, Longfang Liu, Andy Shevchenko, Shawn Guo, Sascha Hauer,
	Pengutronix Kernel Team, Fabio Estevam, Keguang Zhang, Sean Wang,
	Matthias Brugger, AngeloGioacchino Del Regno, Andreas Färber,
	Daniel Mack, Haojian Zhuang, Robert Jarzmik, Paul Walmsley,
	Samuel Holland, Orson Zhai, Baolin Wang, Chunyan Zhang,
	Patrice Chotard, Amélie Delaunay, Maxime Coquelin,
	Alexandre Torgue, Chen-Yu Tsai, Jernej Skrabec, Laxman Dewangan,
	Jon Hunter, Thierry Reding, Peter Ujfalusi, Kunihiko Hayashi,
	Masami Hiramatsu, Dave Jiang, Amit Vadhavana,
	Uwe Kleine-König, Ulf Hansson, Md Sadre Alam,
	Alexander Kochetkov, Casey Connolly, Kees Cook, Fenghua Yu,
	Jyothi Kumar Seerapu

Hello!

Here is v2.

I've updated patch accoding to recomendations from Andy Shevchenko:
- where possible I placed #include <linux/interrupt.h> in correct position
  to keep include list ordered.

Also I provide patch file for Kconfig files. It allows to compile most of
virt-dma users on unsupported architecture. I've used ARM64 configuration
to compile kernel.

One driver (qcom_adm.o) is impossible to compile on ARM64, and that intended
behaviour. It has condition 'depends on (ARCH_QCOM || COMPILE_TEST) &&
!PHYS_ADDR_T_64BIT' preventing from building it on 64-bit architectures.
I've checked it doesn't touch virt-dma fields directly and contains
#include <linux/interrupt.h> already. It looks that it doesn't need any
changes. Anyway, I tried to compile it and only get the following errors:

/kernel-source/drivers/dma/qcom/qcom_adm.c: In function 'adm_process_fc_descriptors':
/kernel-source/drivers/dma/qcom/qcom_adm.c:245:21: error: assignment to 'u32 *' 
{aka 'unsigned int *'} from incompatible pointer type 'phys_addr_t *' 
{aka 'long long unsigned int *'} [-Werror=incompatible-pointer-types]
  245 |                 src = &achan->slave.src_addr;
      |                     ^
/kernel-source/drivers/dma/qcom/qcom_adm.c:251:21: error: assignment to 'u32 *' 
{aka 'unsigned int *'} from incompatible pointer type 'phys_addr_t *' 
{aka 'long long unsigned int *'} [-Werror=incompatible-pointer-types]
  251 |                 dst = &achan->slave.dst_addr;
      |                     ^
/kernel-source/drivers/dma/qcom/qcom_adm.c: In function 'adm_process_non_fc_descriptors':
/kernel-source/drivers/dma/qcom/qcom_adm.c:309:21: error: assignment to 'u32 *' 
{aka 'unsigned int *'} from incompatible pointer type 'phys_addr_t *' 
{aka 'long long unsigned int *'} [-Werror=incompatible-pointer-types]
  309 |                 src = &achan->slave.src_addr;
      |                     ^
/kernel-source/drivers/dma/qcom/qcom_adm.c:313:21: error: assignment to 'u32 *' 
{aka 'unsigned int *'} from incompatible pointer type 'phys_addr_t *' 
{aka 'long long unsigned int *'} [-Werror=incompatible-pointer-types]
  313 |                 dst = &achan->slave.dst_addr;
      |                     ^
/kernel-source/drivers/dma/qcom/qcom_adm.c: In function 'adm_dma_probe':
/kernel-source/drivers/dma/qcom/qcom_adm.c:77:41: warning: conversion from 
'long unsigned int' to 'u32' {aka 'unsigned int'} changes value from 
'18446744072371568648' to '2956984328' [-Woverflow]
   77 | #define ADM_CI_RANGE_START(x)           ((x) << 16)
/kernel-source/drivers/dma/qcom/qcom_adm.c:848:16: note: in expansion of 
macro 'ADM_CI_RANGE_START'
  848 |         writel(ADM_CI_RANGE_START(0x40) | ADM_CI_RANGE_END(0xb0) |


In order to detect all users of virt-dma, I did following.

I got all include files containing 'virt-dma.h' or 'struct virt_dma_chan'.

$ git grep -l -e virt-dma.h -e 'struct virt_dma_chan' -- '*.h'
drivers/dma/amd/ae4dma/ae4dma.h
drivers/dma/amd/ptdma/ptdma.h
drivers/dma/amd/qdma/qdma.h
drivers/dma/dw-axi-dmac/dw-axi-dmac.h
drivers/dma/dw-edma/dw-edma-core.h
drivers/dma/fsl-dpaa2-qdma/dpaa2-qdma.h
drivers/dma/fsl-edma-common.h
drivers/dma/hsu/hsu.h
drivers/dma/idma64.h
drivers/dma/sf-pdma/sf-pdma.h
drivers/dma/st_fdma.h
drivers/dma/virt-dma.h

I got all include files containing all include files found in step 1:

$ git grep -l -e ae4dma.h -e ptdma.h -e qdma.h -e dw-axi-dmac.h \
              -e dw-edma-core.h -e dpaa2-qdma.h -e fsl-edma-common.h \
              -e hsu.h -e idma64.h -e sf-pdma.h -e st_fdma.h -e virt-dma.h \
              -e 'struct virt_dma_chan' -- '*.h'
drivers/dma/amd/ae4dma/ae4dma.h
drivers/dma/amd/ptdma/ptdma.h
drivers/dma/amd/qdma/qdma.h
drivers/dma/dw-axi-dmac/dw-axi-dmac.h
drivers/dma/dw-edma/dw-edma-core.h
drivers/dma/fsl-dpaa2-qdma/dpaa2-qdma.h
drivers/dma/fsl-edma-common.h
drivers/dma/hsu/hsu.h
drivers/dma/idma64.h
drivers/dma/sf-pdma/sf-pdma.h
drivers/dma/st_fdma.h
drivers/dma/virt-dma.h
drivers/net/ethernet/mediatek/mtk_eth_soc.h
include/linux/dma/hsu.h

After that I got all users of virt dma:
$ git grep -l -e ae4dma.h -e ptdma.h -e qdma.h -e dw-axi-dmac.h \
              -e dw-edma-core.h -e dpaa2-qdma.h -e fsl-edma-common.h \
              -e hsu.h -e idma64.h -e sf-pdma.h -e st_fdma.h -e virt-dma.h \
              -e mtk_eth_soc.h -e 'struct virt_dma_chan' -- '*.c'

drivers/dma/amba-pl08x.c
drivers/dma/amd/ae4dma/ae4dma-dev.c
drivers/dma/amd/ae4dma/ae4dma-pci.c
drivers/dma/amd/ptdma/ptdma-debugfs.c
drivers/dma/amd/ptdma/ptdma-dev.c
drivers/dma/amd/ptdma/ptdma-dmaengine.c
drivers/dma/amd/ptdma/ptdma-pci.c
drivers/dma/amd/qdma/qdma-comm-regs.c
drivers/dma/amd/qdma/qdma.c
drivers/dma/arm-dma350.c
drivers/dma/at_hdmac.c
drivers/dma/bcm2835-dma.c
drivers/dma/dma-axi-dmac.c
drivers/dma/dma-jz4780.c
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c
drivers/dma/dw-edma/dw-edma-core.c
drivers/dma/dw-edma/dw-edma-pcie.c
drivers/dma/dw-edma/dw-edma-v0-core.c
drivers/dma/dw-edma/dw-edma-v0-debugfs.c
drivers/dma/dw-edma/dw-hdma-v0-core.c
drivers/dma/dw-edma/dw-hdma-v0-debugfs.c
drivers/dma/fsl-dpaa2-qdma/dpaa2-qdma.c
drivers/dma/fsl-edma-common.c
drivers/dma/fsl-edma-main.c
drivers/dma/fsl-edma-trace.c
drivers/dma/fsl-qdma.c
drivers/dma/hisi_dma.c
drivers/dma/hsu/hsu.c
drivers/dma/hsu/pci.c
drivers/dma/idma64.c
drivers/dma/img-mdc-dma.c
drivers/dma/imx-sdma.c
drivers/dma/k3dma.c
drivers/dma/lgm/lgm-dma.c
drivers/dma/loongson1-apb-dma.c
drivers/dma/loongson2-apb-dma.c
drivers/dma/mcf-edma-main.c
drivers/dma/mediatek/mtk-cqdma.c
drivers/dma/mediatek/mtk-hsdma.c
drivers/dma/mediatek/mtk-uart-apdma.c
drivers/dma/milbeaut-hdmac.c
drivers/dma/milbeaut-xdmac.c
drivers/dma/moxart-dma.c
drivers/dma/owl-dma.c
drivers/dma/pxa_dma.c
drivers/dma/qcom/bam_dma.c
drivers/dma/qcom/gpi.c
drivers/dma/qcom/qcom_adm.c
drivers/dma/sa11x0-dma.c
drivers/dma/sf-pdma/sf-pdma.c
drivers/dma/sh/rz-dmac.c
drivers/dma/sh/usb-dmac.c
drivers/dma/sprd-dma.c
drivers/dma/st_fdma.c
drivers/dma/stm32/stm32-dma.c
drivers/dma/stm32/stm32-dma3.c
drivers/dma/stm32/stm32-mdma.c
drivers/dma/sun4i-dma.c
drivers/dma/sun6i-dma.c
drivers/dma/tegra186-gpc-dma.c
drivers/dma/tegra210-adma.c
drivers/dma/ti/edma.c
drivers/dma/ti/k3-udma.c
drivers/dma/ti/omap-dma.c
drivers/dma/uniphier-mdmac.c
drivers/dma/uniphier-xdmac.c
drivers/dma/virt-dma.c
drivers/dma/xilinx/xdma.c
drivers/dma/xilinx/xilinx_dpdma.c
drivers/mfd/intel-lpss.c
drivers/net/ethernet/airoha/airoha_eth.c
drivers/net/ethernet/mediatek/mtk_eth_path.c
drivers/net/ethernet/mediatek/mtk_eth_soc.c
drivers/net/ethernet/mediatek/mtk_ppe.c
drivers/net/ethernet/mediatek/mtk_ppe_debugfs.c
drivers/net/ethernet/mediatek/mtk_ppe_offload.c
drivers/net/ethernet/mediatek/mtk_wed.c
drivers/pci/controller/pcie-xilinx-dma-pl.c
drivers/tty/serial/8250/8250_mid.c

After that I compiled kernel with following options:
CONFIG_COMPILE_TEST=y
CONFIG_FORCE_PCI=y
CONFIG_PCI=y
CONFIG_PCI_MSI=y
CONFIG_AMD_QDMA=y
CONFIG_AMD_PTDMA=y
CONFIG_DW_AXI_DMAC=y
CONFIG_DW_EDMA=y
CONFIG_DW_EDMA_PCIE=y
CONFIG_INTEL_LDMA=y
CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_MT6577=y
CONFIG_MTK_HSDMA=y
CONFIG_MTK_CQDMA=y
CONFIG_MTK_UART_APDMA=y
# CONFIG_QCOM_ADM=y - error: assignment to 'u32 *' {aka 'unsigned int *'} from incompatible pointer type 'phys_addr_t *'
CONFIG_QCOM_GPI_DMA=y
CONFIG_QCOM_BAM_DMA=y
CONFIG_SF_PDMA=y
CONFIG_STM32_DMA=y
CONFIG_STM32_MDMA=y
CONFIG_STM32_DMA3=y
CONFIG_DMA_OMAP=y
CONFIG_TI_EDMA=y
CONFIG_TI_MESSAGE_MANAGER=y
CONFIG_TI_SCI_PROTOCOL=y
CONFIG_TI_SCI_INTA_IRQCHIP=y
CONFIG_TI_K3_UDMA=y
CONFIG_XILINX_ZYNQMP_DPDMA=y
CONFIG_XILINX_XDMA=y
CONFIG_AMBA_PL08X=y
CONFIG_ARM_DMA350=y
CONFIG_FSL_EDMA=y
CONFIG_FSL_QDMA=y
CONFIG_MCF_EDMA=y
CONFIG_INTEL_IDMA64=y
CONFIG_DMA_SUN6I=y
CONFIG_DMA_SUN4I=y
CONFIG_AT_HDMAC=y
CONFIG_REMOTEPROC=y
CONFIG_ST_FDMA=y
CONFIG_K3_DMA=y
CONFIG_DMA_SA11X0=y
CONFIG_AXI_DMAC=y
CONFIG_IMG_MDC_DMA=y
CONFIG_UNIPHIER_XDMAC=y
CONFIG_UNIPHIER_MDMAC=y
CONFIG_LOONGSON1_APB_DMA=y
CONFIG_LOONGSON2_APB_DMA=y
CONFIG_DMA_BCM2835=y
CONFIG_TEGRA210_ADMA=y
CONFIG_TEGRA186_GPC_DMA=y
CONFIG_MOXART_DMA=y
CONFIG_DMA_JZ4780=y
CONFIG_IMX_SDMA=y
CONFIG_OWL_DMA=y
CONFIG_SPRD_DMA=y
CONFIG_MILBEAUT_XDMAC=y
CONFIG_MILBEAUT_HDMAC=y
CONFIG_HISI_DMA=y
CONFIG_FSL_MC_BUS=y
CONFIG_FSL_MC_DPIO=y
CONFIG_FSL_DPAA2_QDMA=y
CONFIG_RZ_DMAC=y
CONFIG_RENESAS_USB_DMAC=y
CONFIG_PXA_DMA=y
CONFIG_HSU_DMA=y
CONFIG_HSU_DMA_PCI=y
CONFIG_MFD_INTEL_LPSS=y
CONFIG_NET_AIROHA=y
CONFIG_NET_VENDOR_MEDIATEK=y
CONFIG_NET_MEDIATEK_SOC=y
CONFIG_NET_MEDIATEK_SOC_WED=y
CONFIG_PCIE_XILINX_DMA_PL=y
CONFIG_SERIAL_8250_MID=y
CONFIG_AMD_AE4DMA=y

After that I've used following script to check compilation (it used file
list obtained in previous step):
#!/bin/bash

for f in `cat files`; do
    f=`echo $f | sed 's/.c$/.o/'`
    test -f $f && echo $f: ok || echo $f: No such file or directory
done

It produced following output:
$ ./check
drivers/dma/amba-pl08x.o: ok
drivers/dma/amd/ae4dma/ae4dma-dev.o: ok
drivers/dma/amd/ae4dma/ae4dma-pci.o: ok
drivers/dma/amd/ptdma/ptdma-debugfs.o: ok
drivers/dma/amd/ptdma/ptdma-dev.o: ok
drivers/dma/amd/ptdma/ptdma-dmaengine.o: ok
drivers/dma/amd/ptdma/ptdma-pci.o: ok
drivers/dma/amd/qdma/qdma-comm-regs.o: ok
drivers/dma/amd/qdma/qdma.o: ok
drivers/dma/arm-dma350.o: ok
drivers/dma/at_hdmac.o: ok
drivers/dma/bcm2835-dma.o: ok
drivers/dma/dma-axi-dmac.o: ok
drivers/dma/dma-jz4780.o: ok
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.o: ok
drivers/dma/dw-edma/dw-edma-core.o: ok
drivers/dma/dw-edma/dw-edma-pcie.o: ok
drivers/dma/dw-edma/dw-edma-v0-core.o: ok
drivers/dma/dw-edma/dw-edma-v0-debugfs.o: ok
drivers/dma/dw-edma/dw-hdma-v0-core.o: ok
drivers/dma/dw-edma/dw-hdma-v0-debugfs.o: ok
drivers/dma/fsl-dpaa2-qdma/dpaa2-qdma.o: ok
drivers/dma/fsl-edma-common.o: ok
drivers/dma/fsl-edma-main.o: ok
drivers/dma/fsl-edma-trace.o: ok
drivers/dma/fsl-qdma.o: ok
drivers/dma/hisi_dma.o: ok
drivers/dma/hsu/hsu.o: ok
drivers/dma/hsu/pci.o: ok
drivers/dma/idma64.o: ok
drivers/dma/img-mdc-dma.o: ok
drivers/dma/imx-sdma.o: ok
drivers/dma/k3dma.o: ok
drivers/dma/lgm/lgm-dma.o: ok
drivers/dma/loongson1-apb-dma.o: ok
drivers/dma/loongson2-apb-dma.o: ok
drivers/dma/mcf-edma-main.o: ok
drivers/dma/mediatek/mtk-cqdma.o: ok
drivers/dma/mediatek/mtk-hsdma.o: ok
drivers/dma/mediatek/mtk-uart-apdma.o: ok
drivers/dma/milbeaut-hdmac.o: ok
drivers/dma/milbeaut-xdmac.o: ok
drivers/dma/moxart-dma.o: ok
drivers/dma/owl-dma.o: ok
drivers/dma/pxa_dma.o: ok
drivers/dma/qcom/bam_dma.o: ok
drivers/dma/qcom/gpi.o: ok
drivers/dma/qcom/qcom_adm.o: No such file or directory
drivers/dma/sa11x0-dma.o: ok
drivers/dma/sf-pdma/sf-pdma.o: ok
drivers/dma/sh/rz-dmac.o: ok
drivers/dma/sh/usb-dmac.o: ok
drivers/dma/sprd-dma.o: ok
drivers/dma/st_fdma.o: ok
drivers/dma/stm32/stm32-dma.o: ok
drivers/dma/stm32/stm32-dma3.o: ok
drivers/dma/stm32/stm32-mdma.o: ok
drivers/dma/sun4i-dma.o: ok
drivers/dma/sun6i-dma.o: ok
drivers/dma/tegra186-gpc-dma.o: ok
drivers/dma/tegra210-adma.o: ok
drivers/dma/ti/edma.o: ok
drivers/dma/ti/k3-udma.o: ok
drivers/dma/ti/omap-dma.o: ok
drivers/dma/uniphier-mdmac.o: ok
drivers/dma/uniphier-xdmac.o: ok
drivers/dma/virt-dma.o: ok
drivers/dma/xilinx/xdma.o: ok
drivers/dma/xilinx/xilinx_dpdma.o: ok
drivers/mfd/intel-lpss.o: ok
drivers/net/ethernet/airoha/airoha_eth.o: ok
drivers/net/ethernet/mediatek/mtk_eth_path.o: ok
drivers/net/ethernet/mediatek/mtk_eth_soc.o: ok
drivers/net/ethernet/mediatek/mtk_ppe.o: ok
drivers/net/ethernet/mediatek/mtk_ppe_debugfs.o: ok
drivers/net/ethernet/mediatek/mtk_ppe_offload.o: ok
drivers/net/ethernet/mediatek/mtk_wed.o: ok
drivers/pci/controller/pcie-xilinx-dma-pl.o: ok
drivers/tty/serial/8250/8250_mid.o: ok


Alexander Kochetkov (2):
  dmaengine: virt-dma: convert tasklet to BH workqueue for callback
    invocation
  Allow compile virt-dma users on ARM64 platform

 drivers/dma/Kconfig                           | 22 +++++++++----------
 drivers/dma/amd/Kconfig                       |  4 ++--
 drivers/dma/amd/qdma/qdma.c                   |  1 +
 drivers/dma/arm-dma350.c                      |  1 +
 drivers/dma/bcm2835-dma.c                     |  2 +-
 drivers/dma/dma-axi-dmac.c                    |  8 +++----
 drivers/dma/dma-jz4780.c                      |  2 +-
 .../dma/dw-axi-dmac/dw-axi-dmac-platform.c    |  2 +-
 drivers/dma/dw-edma/dw-edma-core.c            |  2 +-
 drivers/dma/fsl-edma-common.c                 |  2 +-
 drivers/dma/fsl-edma-common.h                 |  1 +
 drivers/dma/fsl-qdma.c                        |  3 ++-
 drivers/dma/hisi_dma.c                        |  2 +-
 drivers/dma/hsu/Kconfig                       |  4 ++--
 drivers/dma/hsu/hsu.c                         |  2 +-
 drivers/dma/idma64.c                          |  3 ++-
 drivers/dma/img-mdc-dma.c                     |  2 +-
 drivers/dma/imx-sdma.c                        |  2 +-
 drivers/dma/k3dma.c                           |  2 +-
 drivers/dma/loongson1-apb-dma.c               |  2 +-
 drivers/dma/mediatek/mtk-cqdma.c              |  2 +-
 drivers/dma/mediatek/mtk-hsdma.c              |  3 ++-
 drivers/dma/mediatek/mtk-uart-apdma.c         |  4 ++--
 drivers/dma/owl-dma.c                         |  2 +-
 drivers/dma/pxa_dma.c                         |  2 +-
 drivers/dma/qcom/Kconfig                      |  6 ++---
 drivers/dma/qcom/bam_dma.c                    |  4 ++--
 drivers/dma/qcom/gpi.c                        |  1 +
 drivers/dma/qcom/qcom_adm.c                   |  2 +-
 drivers/dma/sa11x0-dma.c                      |  2 +-
 drivers/dma/sf-pdma/sf-pdma.c                 |  3 ++-
 drivers/dma/sprd-dma.c                        |  2 +-
 drivers/dma/st_fdma.c                         |  2 +-
 drivers/dma/stm32/stm32-dma.c                 |  1 +
 drivers/dma/stm32/stm32-dma3.c                |  1 +
 drivers/dma/stm32/stm32-mdma.c                |  1 +
 drivers/dma/sun6i-dma.c                       |  2 +-
 drivers/dma/tegra186-gpc-dma.c                |  2 +-
 drivers/dma/tegra210-adma.c                   |  3 ++-
 drivers/dma/ti/Kconfig                        |  2 +-
 drivers/dma/ti/edma.c                         |  2 +-
 drivers/dma/ti/k3-udma.c                      | 10 ++++-----
 drivers/dma/ti/omap-dma.c                     |  2 +-
 drivers/dma/uniphier-xdmac.c                  |  1 +
 drivers/dma/virt-dma.c                        |  8 +++----
 drivers/dma/virt-dma.h                        | 10 ++++-----
 drivers/mfd/Kconfig                           |  2 +-
 47 files changed, 82 insertions(+), 69 deletions(-)

-- 
2.43.0


^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2025-06-18  0:52 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-06-18  0:51 [PATCH v2 2/2] !!! TESTING ONLY !!! Allow compile virt-dma users on ARM64 platform kernel test robot
  -- strict thread matches above, loose matches on Subject: below --
2025-06-16 12:48 [PATCH v2 0/2] dmaengine: virt-dma: convert tasklet to BH workqueue for callback invocation Alexander Kochetkov
2025-06-16 12:48 ` [PATCH v2 2/2] !!! TESTING ONLY !!! Allow compile virt-dma users on ARM64 platform Alexander Kochetkov
2025-06-17  9:30   ` kernel test robot
2025-06-17 10:16     ` Alexander Kochetkov
2025-06-17 11:13       ` Andy Shevchenko
2025-06-17 10:32   ` kernel test robot
2025-06-17 13:00   ` kernel test robot
2025-06-17 13:21   ` kernel test robot

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.