Re: [PATCH v2 3/3] iommu: dart: Add DART iommu driver
From: Will Deacon <will@kernel.org>
Date: 2021-04-07 10:42:19
Also in:
linux-devicetree, linux-iommu, lkml
On Sun, Mar 28, 2021 at 09:40:09AM +0200, Sven Peter wrote:
Apple's new SoCs use iommus for almost all peripherals. These Device Address Resolution Tables must be setup before these peripherals can act as DMA masters. Signed-off-by: Sven Peter <redacted> --- MAINTAINERS | 1 + drivers/iommu/Kconfig | 14 + drivers/iommu/Makefile | 1 + drivers/iommu/apple-dart-iommu.c | 858 +++++++++++++++++++++++++++++++ 4 files changed, 874 insertions(+) create mode 100644 drivers/iommu/apple-dart-iommu.c
[...]
+/* must be called with held domain->lock */
+static int apple_dart_attach_stream(struct apple_dart_domain *domain,
+ struct apple_dart *dart, u32 sid)
+{
+ unsigned long flags;
+ struct apple_dart_stream *stream;
+ struct io_pgtable_cfg *pgtbl_cfg;
+ int ret;
+
+ list_for_each_entry(stream, &domain->streams, stream_head) {
+ if (stream->dart == dart && stream->sid == sid) {
+ stream->num_devices++;
+ return 0;
+ }
+ }
+
+ spin_lock_irqsave(&dart->lock, flags);
+
+ if (WARN_ON(dart->used_sids & BIT(sid))) {
+ ret = -EINVAL;
+ goto error;
+ }
+
+ stream = kzalloc(sizeof(*stream), GFP_KERNEL);
+ if (!stream) {
+ ret = -ENOMEM;
+ goto error;
+ }Just in case you missed it, a cocci bot noticed that you're using GFP_KERNEL to allocate while holding a spinlock here: https://lore.kernel.org/r/alpine.DEB.2.22.394.2104041724340.2958@hadrien (local) Will _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel