Received: by 2002:a25:31c3:0:0:0:0:0 with SMTP id x186csp3597297ybx; Sun, 3 Nov 2019 23:03:55 -0800 (PST) X-Google-Smtp-Source: APXvYqyIEFlNnOaVr64ZHqglJiCjQ9QkJTLA2uZNK96MO6Dwb1w/G9bXO0ixfV+T/kK3StKtXwgW X-Received: by 2002:aa7:c954:: with SMTP id h20mr27104347edt.159.1572851035490; Sun, 03 Nov 2019 23:03:55 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1572851035; cv=none; d=google.com; s=arc-20160816; b=T/v1NUqqCxlGOw3Bas9KundoxydYHubuSmw09DHOEWnMVw0tY+robR47h+nRjLPupJ AzTZVcAbpoNQXXLEkWXZwHwio+udceUqvqaYmXdiIVcwYiszvGjxIdeHa5LNbS9/6sBK tOM9nNXZAdL0VUF8poMJQBRzRXMI9WA3eITr+BsHVaJ+QmMhxCn5unf4aOPwNJv9sU7k PQd2hUS9bkLv1qk+NUcCTle2F1er3viK+lS4Zn+h6WFsDoFsE8FcHYNOPMNs9JFPaSlG h2Wdg/y4vG9GLDnJjxYp0QZ77u5i96ewZDTndqjE9e6NjjfDTKkaPzdtWs3dCCwNc/+K Fesg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from; bh=XlgMMPxOgyGjSMj7m+pM10FDpb5STZw2WjNgwAthoEs=; b=OfVXktzrOZeK58nv/sBx7uMXaTd0SIzJkfj5mF7z7KajYO1zXB/+cYBVfoCI0ZsQvn McQl12aYxFW+x/wpjsajdOXuaSZNAMdXgM2A2QR4xCJyqEmNXMDm5VjJ1JKG444nQQNo bVT0ftxb9yI+4oosvf2jRP19yH3Z8sB2bUGAN8SI9Fs8Tf1KnWBIWjzF1oPUSWW3kjuH zZCLyGF+9FmkjsMRWTbrrJVPo0SvYThUrvyRElcf+DKvj4e279U02PPIfeNN+PZ1sV3W 1XR/+N6ufBhyJ8sjfNh8phDOsKFx3QyxtVHlCygIaBxiEI3iWRRud4fVINbGvlq2UHWv vIeg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=mediatek.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id s1si11481636ejl.235.2019.11.03.23.03.32; Sun, 03 Nov 2019 23:03:55 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=mediatek.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728396AbfKDHCU (ORCPT + 99 others); Mon, 4 Nov 2019 02:02:20 -0500 Received: from mailgw01.mediatek.com ([210.61.82.183]:43287 "EHLO mailgw01.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1727588AbfKDHCT (ORCPT ); Mon, 4 Nov 2019 02:02:19 -0500 X-UUID: 60ca3bbeeacc4a09bf9e714228d1a0b4-20191104 X-UUID: 60ca3bbeeacc4a09bf9e714228d1a0b4-20191104 Received: from mtkcas08.mediatek.inc [(172.21.101.126)] by mailgw01.mediatek.com (envelope-from ) (Cellopoint E-mail Firewall v4.1.10 Build 0809 with TLS) with ESMTP id 742346636; Mon, 04 Nov 2019 15:02:16 +0800 Received: from mtkcas09.mediatek.inc (172.21.101.178) by mtkmbs07n1.mediatek.inc (172.21.101.16) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Mon, 4 Nov 2019 15:02:12 +0800 Received: from localhost.localdomain (10.17.3.153) by mtkcas09.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1395.4 via Frontend Transport; Mon, 4 Nov 2019 15:02:11 +0800 From: Yong Wu To: Matthias Brugger , Joerg Roedel , Will Deacon CC: Evan Green , Robin Murphy , Tomasz Figa , , , , , , , , Nicolas Boichat , , , , Subject: [PATCH v5 6/7] iommu/mediatek: Get rid of the pgtlock Date: Mon, 4 Nov 2019 15:01:07 +0800 Message-ID: <1572850868-22315-7-git-send-email-yong.wu@mediatek.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1572850868-22315-1-git-send-email-yong.wu@mediatek.com> References: <1572850868-22315-1-git-send-email-yong.wu@mediatek.com> MIME-Version: 1.0 Content-Type: text/plain X-MTK: N Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Now we have tlb_lock for the HW tlb flush, then pgtable code hasn't needed the external "pgtlock" for a while. this patch remove the "pgtlock". Signed-off-by: Yong Wu --- drivers/iommu/mtk_iommu.c | 25 +++---------------------- 1 file changed, 3 insertions(+), 22 deletions(-) diff --git a/drivers/iommu/mtk_iommu.c b/drivers/iommu/mtk_iommu.c index 0e5f41f..c2b7ed5 100644 --- a/drivers/iommu/mtk_iommu.c +++ b/drivers/iommu/mtk_iommu.c @@ -101,8 +101,6 @@ #define MTK_M4U_TO_PORT(id) ((id) & 0x1f) struct mtk_iommu_domain { - spinlock_t pgtlock; /* lock for page table */ - struct io_pgtable_cfg cfg; struct io_pgtable_ops *iop; @@ -295,8 +293,6 @@ static int mtk_iommu_domain_finalise(struct mtk_iommu_domain *dom) { struct mtk_iommu_data *data = mtk_iommu_get_m4u_data(); - spin_lock_init(&dom->pgtlock); - dom->cfg = (struct io_pgtable_cfg) { .quirks = IO_PGTABLE_QUIRK_ARM_NS | IO_PGTABLE_QUIRK_NO_PERMS | @@ -395,18 +391,13 @@ static int mtk_iommu_map(struct iommu_domain *domain, unsigned long iova, { struct mtk_iommu_domain *dom = to_mtk_domain(domain); struct mtk_iommu_data *data = mtk_iommu_get_m4u_data(); - unsigned long flags; - int ret; /* The "4GB mode" M4U physically can not use the lower remap of Dram. */ if (data->enable_4GB) paddr |= BIT_ULL(32); - spin_lock_irqsave(&dom->pgtlock, flags); - ret = dom->iop->map(dom->iop, iova, paddr, size, prot); - spin_unlock_irqrestore(&dom->pgtlock, flags); - - return ret; + /* Synchronize with the tlb_lock */ + return dom->iop->map(dom->iop, iova, paddr, size, prot); } static size_t mtk_iommu_unmap(struct iommu_domain *domain, @@ -414,14 +405,8 @@ static size_t mtk_iommu_unmap(struct iommu_domain *domain, struct iommu_iotlb_gather *gather) { struct mtk_iommu_domain *dom = to_mtk_domain(domain); - unsigned long flags; - size_t unmapsz; - - spin_lock_irqsave(&dom->pgtlock, flags); - unmapsz = dom->iop->unmap(dom->iop, iova, size, gather); - spin_unlock_irqrestore(&dom->pgtlock, flags); - return unmapsz; + return dom->iop->unmap(dom->iop, iova, size, gather); } static void mtk_iommu_flush_iotlb_all(struct iommu_domain *domain) @@ -447,13 +432,9 @@ static phys_addr_t mtk_iommu_iova_to_phys(struct iommu_domain *domain, { struct mtk_iommu_domain *dom = to_mtk_domain(domain); struct mtk_iommu_data *data = mtk_iommu_get_m4u_data(); - unsigned long flags; phys_addr_t pa; - spin_lock_irqsave(&dom->pgtlock, flags); pa = dom->iop->iova_to_phys(dom->iop, iova); - spin_unlock_irqrestore(&dom->pgtlock, flags); - if (data->enable_4GB && pa >= MTK_IOMMU_4GB_MODE_REMAP_BASE) pa &= ~BIT_ULL(32); -- 1.9.1