From: Zhen Lei <thunder.leizhen@huawei.com> To: Robin Murphy <robin.murphy@arm.com>, Will Deacon <will.deacon@arm.com>, Matthias Brugger <matthias.bgg@gmail.com>, Rob Clark <robdclark@gmail.com>, Joerg Roedel <joro@8bytes.org>, linux-mediatek <linux-mediatek@lists.infradead.org>, linux-arm-msm <linux-arm-msm@vger.kernel.org>, linux-arm-kernel <linux-arm-kernel@lists.infradead.org>, iommu <iommu@lists.linux-foundation.org>, linux-kernel <linux-kernel@vger.kernel.org> Cc: Zhen Lei <thunder.leizhen@huawei.com>, Hanjun Guo <guohanjun@huawei.com>, Libin <huawei.libin@huawei.com>, Guozhu Li <liguozhu@hisilicon.com>, Xinwei Hu <huxinwei@huawei.com> Subject: [PATCH 6/7] iommu/io-pgtable-arm: add support for non-strict mode Date: Thu, 31 May 2018 15:42:48 +0800 [thread overview] Message-ID: <1527752569-18020-7-git-send-email-thunder.leizhen@huawei.com> (raw) In-Reply-To: <1527752569-18020-1-git-send-email-thunder.leizhen@huawei.com> To support the non-strict mode, now we only tlbi and sync for the strict mode. But for the non-leaf case, always follow strict mode. Signed-off-by: Zhen Lei <thunder.leizhen@huawei.com> --- drivers/iommu/io-pgtable-arm.c | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/drivers/iommu/io-pgtable-arm.c b/drivers/iommu/io-pgtable-arm.c index e0f52db..1a65b7b 100644 --- a/drivers/iommu/io-pgtable-arm.c +++ b/drivers/iommu/io-pgtable-arm.c @@ -287,7 +287,7 @@ static void __arm_lpae_set_pte(arm_lpae_iopte *ptep, arm_lpae_iopte pte, static size_t __arm_lpae_unmap(struct arm_lpae_io_pgtable *data, unsigned long iova, size_t size, int lvl, - arm_lpae_iopte *ptep); + arm_lpae_iopte *ptep, int strict); static void __arm_lpae_init_pte(struct arm_lpae_io_pgtable *data, phys_addr_t paddr, arm_lpae_iopte prot, @@ -329,7 +329,7 @@ static int arm_lpae_init_pte(struct arm_lpae_io_pgtable *data, size_t sz = ARM_LPAE_BLOCK_SIZE(lvl, data); tblp = ptep - ARM_LPAE_LVL_IDX(iova, lvl, data); - if (WARN_ON(__arm_lpae_unmap(data, iova, sz, lvl, tblp) != sz)) + if (WARN_ON(__arm_lpae_unmap(data, iova, sz, lvl, tblp, IOMMU_STRICT) != sz)) return -EINVAL; } @@ -526,7 +526,7 @@ static void arm_lpae_free_pgtable(struct io_pgtable *iop) static size_t arm_lpae_split_blk_unmap(struct arm_lpae_io_pgtable *data, unsigned long iova, size_t size, arm_lpae_iopte blk_pte, int lvl, - arm_lpae_iopte *ptep) + arm_lpae_iopte *ptep, int strict) { struct io_pgtable_cfg *cfg = &data->iop.cfg; arm_lpae_iopte pte, *tablep; @@ -571,15 +571,17 @@ static size_t arm_lpae_split_blk_unmap(struct arm_lpae_io_pgtable *data, } if (unmap_idx < 0) - return __arm_lpae_unmap(data, iova, size, lvl, tablep); + return __arm_lpae_unmap(data, iova, size, lvl, tablep, strict); + + if (strict) + io_pgtable_tlb_add_flush(&data->iop, iova, size, size, true); - io_pgtable_tlb_add_flush(&data->iop, iova, size, size, true); return size; } static size_t __arm_lpae_unmap(struct arm_lpae_io_pgtable *data, unsigned long iova, size_t size, int lvl, - arm_lpae_iopte *ptep) + arm_lpae_iopte *ptep, int strict) { arm_lpae_iopte pte; struct io_pgtable *iop = &data->iop; @@ -604,7 +606,7 @@ static size_t __arm_lpae_unmap(struct arm_lpae_io_pgtable *data, io_pgtable_tlb_sync(iop); ptep = iopte_deref(pte, data); __arm_lpae_free_pgtable(data, lvl + 1, ptep); - } else { + } else if (strict) { io_pgtable_tlb_add_flush(iop, iova, size, size, true); } @@ -615,12 +617,12 @@ static size_t __arm_lpae_unmap(struct arm_lpae_io_pgtable *data, * minus the part we want to unmap */ return arm_lpae_split_blk_unmap(data, iova, size, pte, - lvl + 1, ptep); + lvl + 1, ptep, strict); } /* Keep on walkin' */ ptep = iopte_deref(pte, data); - return __arm_lpae_unmap(data, iova, size, lvl + 1, ptep); + return __arm_lpae_unmap(data, iova, size, lvl + 1, ptep, strict); } static size_t arm_lpae_unmap(struct io_pgtable_ops *ops, unsigned long iova, @@ -633,7 +635,7 @@ static size_t arm_lpae_unmap(struct io_pgtable_ops *ops, unsigned long iova, if (WARN_ON(iova >= (1ULL << data->iop.cfg.ias))) return 0; - return __arm_lpae_unmap(data, iova, size, lvl, ptep); + return __arm_lpae_unmap(data, iova, size, lvl, ptep, strict); } static phys_addr_t arm_lpae_iova_to_phys(struct io_pgtable_ops *ops, -- 1.8.3
WARNING: multiple messages have this Message-ID (diff)
From: thunder.leizhen@huawei.com (Zhen Lei) To: linux-arm-kernel@lists.infradead.org Subject: [PATCH 6/7] iommu/io-pgtable-arm: add support for non-strict mode Date: Thu, 31 May 2018 15:42:48 +0800 [thread overview] Message-ID: <1527752569-18020-7-git-send-email-thunder.leizhen@huawei.com> (raw) In-Reply-To: <1527752569-18020-1-git-send-email-thunder.leizhen@huawei.com> To support the non-strict mode, now we only tlbi and sync for the strict mode. But for the non-leaf case, always follow strict mode. Signed-off-by: Zhen Lei <thunder.leizhen@huawei.com> --- drivers/iommu/io-pgtable-arm.c | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/drivers/iommu/io-pgtable-arm.c b/drivers/iommu/io-pgtable-arm.c index e0f52db..1a65b7b 100644 --- a/drivers/iommu/io-pgtable-arm.c +++ b/drivers/iommu/io-pgtable-arm.c @@ -287,7 +287,7 @@ static void __arm_lpae_set_pte(arm_lpae_iopte *ptep, arm_lpae_iopte pte, static size_t __arm_lpae_unmap(struct arm_lpae_io_pgtable *data, unsigned long iova, size_t size, int lvl, - arm_lpae_iopte *ptep); + arm_lpae_iopte *ptep, int strict); static void __arm_lpae_init_pte(struct arm_lpae_io_pgtable *data, phys_addr_t paddr, arm_lpae_iopte prot, @@ -329,7 +329,7 @@ static int arm_lpae_init_pte(struct arm_lpae_io_pgtable *data, size_t sz = ARM_LPAE_BLOCK_SIZE(lvl, data); tblp = ptep - ARM_LPAE_LVL_IDX(iova, lvl, data); - if (WARN_ON(__arm_lpae_unmap(data, iova, sz, lvl, tblp) != sz)) + if (WARN_ON(__arm_lpae_unmap(data, iova, sz, lvl, tblp, IOMMU_STRICT) != sz)) return -EINVAL; } @@ -526,7 +526,7 @@ static void arm_lpae_free_pgtable(struct io_pgtable *iop) static size_t arm_lpae_split_blk_unmap(struct arm_lpae_io_pgtable *data, unsigned long iova, size_t size, arm_lpae_iopte blk_pte, int lvl, - arm_lpae_iopte *ptep) + arm_lpae_iopte *ptep, int strict) { struct io_pgtable_cfg *cfg = &data->iop.cfg; arm_lpae_iopte pte, *tablep; @@ -571,15 +571,17 @@ static size_t arm_lpae_split_blk_unmap(struct arm_lpae_io_pgtable *data, } if (unmap_idx < 0) - return __arm_lpae_unmap(data, iova, size, lvl, tablep); + return __arm_lpae_unmap(data, iova, size, lvl, tablep, strict); + + if (strict) + io_pgtable_tlb_add_flush(&data->iop, iova, size, size, true); - io_pgtable_tlb_add_flush(&data->iop, iova, size, size, true); return size; } static size_t __arm_lpae_unmap(struct arm_lpae_io_pgtable *data, unsigned long iova, size_t size, int lvl, - arm_lpae_iopte *ptep) + arm_lpae_iopte *ptep, int strict) { arm_lpae_iopte pte; struct io_pgtable *iop = &data->iop; @@ -604,7 +606,7 @@ static size_t __arm_lpae_unmap(struct arm_lpae_io_pgtable *data, io_pgtable_tlb_sync(iop); ptep = iopte_deref(pte, data); __arm_lpae_free_pgtable(data, lvl + 1, ptep); - } else { + } else if (strict) { io_pgtable_tlb_add_flush(iop, iova, size, size, true); } @@ -615,12 +617,12 @@ static size_t __arm_lpae_unmap(struct arm_lpae_io_pgtable *data, * minus the part we want to unmap */ return arm_lpae_split_blk_unmap(data, iova, size, pte, - lvl + 1, ptep); + lvl + 1, ptep, strict); } /* Keep on walkin' */ ptep = iopte_deref(pte, data); - return __arm_lpae_unmap(data, iova, size, lvl + 1, ptep); + return __arm_lpae_unmap(data, iova, size, lvl + 1, ptep, strict); } static size_t arm_lpae_unmap(struct io_pgtable_ops *ops, unsigned long iova, @@ -633,7 +635,7 @@ static size_t arm_lpae_unmap(struct io_pgtable_ops *ops, unsigned long iova, if (WARN_ON(iova >= (1ULL << data->iop.cfg.ias))) return 0; - return __arm_lpae_unmap(data, iova, size, lvl, ptep); + return __arm_lpae_unmap(data, iova, size, lvl, ptep, strict); } static phys_addr_t arm_lpae_iova_to_phys(struct io_pgtable_ops *ops, -- 1.8.3
next prev parent reply other threads:[~2018-05-31 7:42 UTC|newest] Thread overview: 57+ messages / expand[flat|nested] mbox.gz Atom feed top 2018-05-31 7:42 [PATCH 0/7] add non-strict mode support for arm-smmu-v3 Zhen Lei 2018-05-31 7:42 ` Zhen Lei 2018-05-31 7:42 ` Zhen Lei 2018-05-31 7:42 ` [PATCH 1/7] iommu/dma: fix trival coding style mistake Zhen Lei 2018-05-31 7:42 ` Zhen Lei [not found] ` <1527752569-18020-2-git-send-email-thunder.leizhen-hv44wF8Li93QT0dZR+AlfA@public.gmane.org> 2018-05-31 13:03 ` Robin Murphy 2018-05-31 13:03 ` Robin Murphy 2018-05-31 13:03 ` Robin Murphy [not found] ` <b473059d-fee6-1627-4749-192771038741-5wv7dgnIgG8@public.gmane.org> 2018-06-04 11:05 ` Leizhen (ThunderTown) 2018-06-04 11:05 ` Leizhen (ThunderTown) 2018-06-04 11:05 ` Leizhen (ThunderTown) [not found] ` <1527752569-18020-1-git-send-email-thunder.leizhen-hv44wF8Li93QT0dZR+AlfA@public.gmane.org> 2018-05-31 7:42 ` [PATCH 2/7] iommu/arm-smmu-v3: fix the implementation of flush_iotlb_all hook Zhen Lei 2018-05-31 7:42 ` Zhen Lei 2018-05-31 7:42 ` Zhen Lei 2018-05-31 11:24 ` [PATCH 0/7] add non-strict mode support for arm-smmu-v3 Robin Murphy 2018-05-31 11:24 ` Robin Murphy 2018-05-31 11:24 ` Robin Murphy 2018-05-31 13:49 ` Hanjun Guo 2018-05-31 13:49 ` Hanjun Guo 2018-05-31 14:25 ` Robin Murphy 2018-05-31 14:25 ` Robin Murphy [not found] ` <92b240f5-596e-87a9-863a-b18475042cce-5wv7dgnIgG8@public.gmane.org> 2018-06-01 6:50 ` Leizhen (ThunderTown) 2018-06-01 6:50 ` Leizhen (ThunderTown) 2018-06-01 6:50 ` Leizhen (ThunderTown) 2018-06-10 11:13 ` Leizhen (ThunderTown) 2018-06-10 11:13 ` Leizhen (ThunderTown) 2018-06-10 11:13 ` Leizhen (ThunderTown) 2018-05-31 7:42 ` [PATCH 3/7] iommu: prepare for the non-strict mode support Zhen Lei 2018-05-31 7:42 ` Zhen Lei [not found] ` <1527752569-18020-4-git-send-email-thunder.leizhen-hv44wF8Li93QT0dZR+AlfA@public.gmane.org> 2018-05-31 13:04 ` Robin Murphy 2018-05-31 13:04 ` Robin Murphy 2018-05-31 13:04 ` Robin Murphy 2018-06-04 11:27 ` Leizhen (ThunderTown) 2018-06-04 11:27 ` Leizhen (ThunderTown) 2018-05-31 7:42 ` [PATCH 4/7] iommu/amd: make sure TLB to be flushed before IOVA freed Zhen Lei 2018-05-31 7:42 ` Zhen Lei 2018-05-31 13:04 ` Robin Murphy 2018-05-31 13:04 ` Robin Murphy 2018-06-04 11:41 ` Leizhen (ThunderTown) 2018-06-04 11:41 ` Leizhen (ThunderTown) 2018-05-31 7:42 ` [PATCH 5/7] iommu/dma: add support for non-strict mode Zhen Lei 2018-05-31 7:42 ` Zhen Lei 2018-05-31 13:04 ` Robin Murphy 2018-05-31 13:04 ` Robin Murphy [not found] ` <65cfe2f9-eb23-d81c-270e-ae80e96b6009-5wv7dgnIgG8@public.gmane.org> 2018-06-04 12:04 ` Leizhen (ThunderTown) 2018-06-04 12:04 ` Leizhen (ThunderTown) 2018-06-04 12:04 ` Leizhen (ThunderTown) [not found] ` <1527752569-18020-6-git-send-email-thunder.leizhen-hv44wF8Li93QT0dZR+AlfA@public.gmane.org> 2018-06-01 17:51 ` kbuild test robot 2018-06-01 17:51 ` kbuild test robot 2018-06-01 17:51 ` kbuild test robot [not found] ` <201806020106.eRUp2Ehc%fengguang.wu-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org> 2018-06-04 12:19 ` Leizhen (ThunderTown) 2018-06-04 12:19 ` Leizhen (ThunderTown) 2018-06-04 12:19 ` Leizhen (ThunderTown) 2018-05-31 7:42 ` Zhen Lei [this message] 2018-05-31 7:42 ` [PATCH 6/7] iommu/io-pgtable-arm: " Zhen Lei 2018-05-31 7:42 ` [PATCH 7/7] iommu/arm-smmu-v3: " Zhen Lei 2018-05-31 7:42 ` Zhen Lei
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=1527752569-18020-7-git-send-email-thunder.leizhen@huawei.com \ --to=thunder.leizhen@huawei.com \ --cc=guohanjun@huawei.com \ --cc=huawei.libin@huawei.com \ --cc=huxinwei@huawei.com \ --cc=iommu@lists.linux-foundation.org \ --cc=joro@8bytes.org \ --cc=liguozhu@hisilicon.com \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-arm-msm@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-mediatek@lists.infradead.org \ --cc=matthias.bgg@gmail.com \ --cc=robdclark@gmail.com \ --cc=robin.murphy@arm.com \ --cc=will.deacon@arm.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
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.