lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <20190607113835.15376-1-geert+renesas@glider.be>
Date:   Fri,  7 Jun 2019 13:38:35 +0200
From:   Geert Uytterhoeven <geert+renesas@...der.be>
To:     Dan Williams <dan.j.williams@...el.com>,
        Vinod Koul <vkoul@...nel.org>
Cc:     dmaengine@...r.kernel.org, linux-renesas-soc@...r.kernel.org,
        linux-kernel@...r.kernel.org,
        Geert Uytterhoeven <geert+renesas@...der.be>
Subject: [PATCH/RFC] dmaengine: Create symlinks from DMA channels to slaves

Currently it is not easy to find out which DMA channels are in use, and
by which slave devices.

Fix this by creating in sysfs a "slave" symlink from the DMA channel to
the actual slave device when a channel is requested, and removing it
again when the channel is released.

For now this is limited to DT and ACPI.

Signed-off-by: Geert Uytterhoeven <geert+renesas@...der.be>
---
Questions:
  1. Do you think this is useful?
  2. Should backlinks (e.g. "dma:<name>") be created from the slave
     device to the DMA channel?
     This requires storing the name in struct dma_chan, for later
     symlink removal.
  3. Should this be extended to other ways of requesting channels?
     In many cases, no device pointer is available, so a device pointer
     parameter has to be added to all DMA channel request APIs that
     don't have it yet.
---
 drivers/dma/dmaengine.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/drivers/dma/dmaengine.c b/drivers/dma/dmaengine.c
index 03ac4b96117cd8db..c11476f76fc96bcf 100644
--- a/drivers/dma/dmaengine.c
+++ b/drivers/dma/dmaengine.c
@@ -706,6 +706,10 @@ struct dma_chan *dma_request_chan(struct device *dev, const char *name)
 
 	if (chan) {
 		/* Valid channel found or requester needs to be deferred */
+		if (!IS_ERR(chan) &&
+		     sysfs_create_link(&chan->dev->device.kobj, &dev->kobj,
+				       "slave"))
+			dev_err(dev, "Cannot create DMA slave symlink\n");
 		if (!IS_ERR(chan) || PTR_ERR(chan) == -EPROBE_DEFER)
 			return chan;
 	}
@@ -786,6 +790,7 @@ void dma_release_channel(struct dma_chan *chan)
 	/* drop PRIVATE cap enabled by __dma_request_channel() */
 	if (--chan->device->privatecnt == 0)
 		dma_cap_clear(DMA_PRIVATE, chan->device->cap_mask);
+	sysfs_remove_link(&chan->dev->device.kobj, "slave");
 	mutex_unlock(&dma_list_mutex);
 }
 EXPORT_SYMBOL_GPL(dma_release_channel);
-- 
2.17.1

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ