Received: by 2002:a05:7412:419a:b0:f3:1519:9f41 with SMTP id i26csp1343715rdh; Fri, 24 Nov 2023 10:10:15 -0800 (PST) X-Google-Smtp-Source: AGHT+IH402WxVgpfc5ABP+1iuxvUn1C/sXQ5dz84WXEYe89aiwEwRDUCMo0dhNc/iS+Ey6XVuIzY X-Received: by 2002:a05:6a00:2d0e:b0:6c6:58ae:b39f with SMTP id fa14-20020a056a002d0e00b006c658aeb39fmr4111506pfb.6.1700849415519; Fri, 24 Nov 2023 10:10:15 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1700849415; cv=none; d=google.com; s=arc-20160816; b=WJfmdrbwMN8Dg5nQwDthFWAnlRJyv5pOYtyrWuv1ZUcbl6RcCg11momFVPLVoxG2/4 NaNReF4PH420goHuYwsR+QHYlP+VSZn08mQZ4+d1CX9WoZ2O59vuZYSzsxJJZBNt04Lc 04raD0NYQN0fVu98PRaV8H/3Iy6nUkvTD6ykvOkjQgCWBLB7uNVQwnZBSy4KjPPyGwCa RauHDBWXI0mpjJ3x7xonfSeQ71fJY5e7TEyKJ+9jmhYBG1bIUviIqXAj+4v5bHnZgay4 G7M8J745K9ArWBz2ycZcIemVrzqkZCuxV9d1baPuuUXJzZxVARc/82EUF6MKcziQx8Be FPpQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from; bh=pl67BE0hclc7sTrIlGgREdhIfCfmSAXxNp1iiwed0jc=; fh=Z6nyzAbn+Qc3khGpgGyE2bwrze7MdmA9pCgtxDnhAyA=; b=f+oyb7xeiLOL6xLrFkeq3DbSpTVAxour6E68jRITF4Vk7jSYYOKOtwW/GoRdK6CC6r e3bdbIYKnMsDXW7laJwyUamgh1iu9QSDgFEd5SXbG/F6GoEp7L9lBdvlOMuzB3dVjZGO LZoOpLYm14WTxyAIO/6Pfr3Q/Z4rpDHtd3u6GWJwvAWnmm6kNNaR7yd6+Nv55TONst5V cB9t+AgueEDZmctcQy8cQpKhQlA2O3RDHh7RE4l4QVwV5EusCVxxPQ4tizKrDgPh6oPF ePfaqbGr+/OM8DlDoNHsJwA2h2q9ACGCu54LFaOJmMszQctGIXYn/Pqb+sEL0pqGF2f/ bUHA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Return-Path: Received: from snail.vger.email (snail.vger.email. [2620:137:e000::3:7]) by mx.google.com with ESMTPS id p16-20020a056a000b5000b006c0e3332534si4187354pfo.42.2023.11.24.10.10.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Nov 2023 10:10:15 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) client-ip=2620:137:e000::3:7; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by snail.vger.email (Postfix) with ESMTP id 2CA98802A834; Fri, 24 Nov 2023 10:10:14 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at snail.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231173AbjKXSKE (ORCPT + 99 others); Fri, 24 Nov 2023 13:10:04 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54610 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229741AbjKXSKD (ORCPT ); Fri, 24 Nov 2023 13:10:03 -0500 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 3ADB819AD; Fri, 24 Nov 2023 10:10:09 -0800 (PST) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 2CC141007; Fri, 24 Nov 2023 10:10:55 -0800 (PST) Received: from e121345-lin.cambridge.arm.com (e121345-lin.cambridge.arm.com [10.1.196.40]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 800793F73F; Fri, 24 Nov 2023 10:10:07 -0800 (PST) From: Robin Murphy To: hch@lst.de Cc: rafael@kernel.org, lenb@kernel.org, robh+dt@kernel.org, frowand.list@gmail.com, m.szyprowski@samsung.com, james.quinlan@broadcom.com, iommu@lists.linux.dev, linux-acpi@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH] dma-mapping: Don't store redundant offsets Date: Fri, 24 Nov 2023 18:10:03 +0000 Message-Id: <94e0cec15546ef2be61d90869e499e40e2a55308.1700849106.git.robin.murphy@arm.com> X-Mailer: git-send-email 2.39.2.101.g768bb238c484.dirty MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_BLOCKED,SPF_HELO_NONE,SPF_NONE,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (snail.vger.email [0.0.0.0]); Fri, 24 Nov 2023 10:10:14 -0800 (PST) A bus_dma_region necessarily stores both CPU and DMA base addresses for a range, so there's no need to also store the difference between them. Signed-off-by: Robin Murphy --- drivers/acpi/scan.c | 1 - drivers/of/address.c | 1 - include/linux/dma-direct.h | 19 ++++++++++++------- kernel/dma/direct.c | 1 - 4 files changed, 12 insertions(+), 10 deletions(-) diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c index 026130b37967..c72155606550 100644 --- a/drivers/acpi/scan.c +++ b/drivers/acpi/scan.c @@ -1532,7 +1532,6 @@ int acpi_dma_get_range(struct device *dev, const struct bus_dma_region **map) r->cpu_start = rentry->res->start; r->dma_start = rentry->res->start - rentry->offset; r->size = resource_size(rentry->res); - r->offset = rentry->offset; r++; } } diff --git a/drivers/of/address.c b/drivers/of/address.c index b59956310f66..ae46a3605904 100644 --- a/drivers/of/address.c +++ b/drivers/of/address.c @@ -955,7 +955,6 @@ int of_dma_get_range(struct device_node *np, const struct bus_dma_region **map) r->cpu_start = range.cpu_addr; r->dma_start = range.bus_addr; r->size = range.size; - r->offset = range.cpu_addr - range.bus_addr; r++; } out: diff --git a/include/linux/dma-direct.h b/include/linux/dma-direct.h index 18aade195884..3eb3589ff43e 100644 --- a/include/linux/dma-direct.h +++ b/include/linux/dma-direct.h @@ -21,7 +21,6 @@ struct bus_dma_region { phys_addr_t cpu_start; dma_addr_t dma_start; u64 size; - u64 offset; }; static inline dma_addr_t translate_phys_to_dma(struct device *dev, @@ -29,9 +28,12 @@ static inline dma_addr_t translate_phys_to_dma(struct device *dev, { const struct bus_dma_region *m; - for (m = dev->dma_range_map; m->size; m++) - if (paddr >= m->cpu_start && paddr - m->cpu_start < m->size) - return (dma_addr_t)paddr - m->offset; + for (m = dev->dma_range_map; m->size; m++) { + u64 offset = paddr - m->cpu_start; + + if (paddr >= m->cpu_start && offset < m->size) + return m->dma_start + offset; + } /* make sure dma_capable fails when no translation is available */ return DMA_MAPPING_ERROR; @@ -42,9 +44,12 @@ static inline phys_addr_t translate_dma_to_phys(struct device *dev, { const struct bus_dma_region *m; - for (m = dev->dma_range_map; m->size; m++) - if (dma_addr >= m->dma_start && dma_addr - m->dma_start < m->size) - return (phys_addr_t)dma_addr + m->offset; + for (m = dev->dma_range_map; m->size; m++) { + u64 offset = dma_addr - m->dma_start; + + if (dma_addr >= m->dma_start && offset < m->size) + return m->cpu_start + offset; + } return (phys_addr_t)-1; } diff --git a/kernel/dma/direct.c b/kernel/dma/direct.c index 73c95815789a..98b2e192fd69 100644 --- a/kernel/dma/direct.c +++ b/kernel/dma/direct.c @@ -677,7 +677,6 @@ int dma_direct_set_offset(struct device *dev, phys_addr_t cpu_start, return -ENOMEM; map[0].cpu_start = cpu_start; map[0].dma_start = dma_start; - map[0].offset = offset; map[0].size = size; dev->dma_range_map = map; return 0; -- 2.39.2.101.g768bb238c484.dirty