From: Dmitry Osipenko <digetx@gmail.com> To: Nicolin Chen <nicoleotsuka@gmail.com>, thierry.reding@gmail.com, joro@8bytes.org, krzk@kernel.org Cc: linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org, iommu@lists.linux-foundation.org, jonathanh@nvidia.com Subject: Re: [PATCH 5/5] iommu/tegra-smmu: Add pagetable mappings to debugfs Date: Sat, 26 Sep 2020 17:48:54 +0300 [thread overview] Message-ID: <0c9ca297-d656-59a5-eefd-00e0c0542c29@gmail.com> (raw) In-Reply-To: <20200926080719.6822-6-nicoleotsuka@gmail.com> 26.09.2020 11:07, Nicolin Chen пишет: ... > +static int tegra_smmu_mappings_show(struct seq_file *s, void *data) > +{ > + struct tegra_smmu_group_debug *group_debug = s->private; > + const struct tegra_smmu_swgroup *group; > + struct tegra_smmu_as *as; > + struct tegra_smmu *smmu; > + int pd_index, pt_index; > + u64 pte_count = 0; > + u32 pde_count = 0; > + u32 val, ptb_reg; > + u32 *pd; > + > + if (!group_debug || !group_debug->priv || !group_debug->group) > + return 0; > + > + group = group_debug->group; > + as = group_debug->priv; > + smmu = as->smmu; > + > + val = smmu_readl(smmu, group->reg) & SMMU_ASID_ENABLE; > + if (!val) > + return 0; > + > + pd = page_address(as->pd); > + if (!pd) > + return 0; > + > + seq_printf(s, "\nSWGROUP: %s\nASID: %d\nreg: 0x%x\n", group->name, > + as->id, group->reg); > + > + mutex_lock(&smmu->lock); > + smmu_writel(smmu, as->id & 0x7f, SMMU_PTB_ASID); > + ptb_reg = smmu_readl(smmu, SMMU_PTB_DATA); I think the whole traverse needs a locking protection, doesn't it? > + mutex_unlock(&smmu->lock); > + > + seq_printf(s, "PTB_ASID: 0x%x\nas->pd_dma: 0x%llx\n", ptb_reg, as->pd_dma); > + seq_puts(s, "{\n"); > + > + for (pd_index = 0; pd_index < SMMU_NUM_PDE; pd_index++) { > + struct page *pt; > + u32 *addr; > + > + if (!as->count[pd_index] || !pd[pd_index]) > + continue; > + > + pde_count++; > + pte_count += as->count[pd_index]; > + seq_printf(s, "\t[%d] 0x%x (%d)\n", > + pd_index, pd[pd_index], as->count[pd_index]); > + pt = as->pts[pd_index]; > + addr = page_address(pt); This needs as->lock protection. > + seq_puts(s, "\t{\n"); > + seq_printf(s, "\t\t%-5s %-4s %12s %12s\n", "PDE", "ATTR", "PHYS", "IOVA"); > + for (pt_index = 0; pt_index < SMMU_NUM_PTE; pt_index++) { > + u64 iova; > + > + if (!addr[pt_index]) > + continue; > + > + iova = ((dma_addr_t)pd_index & (SMMU_NUM_PDE - 1)) << SMMU_PDE_SHIFT; > + iova |= ((dma_addr_t)pt_index & (SMMU_NUM_PTE - 1)) << SMMU_PTE_SHIFT; > + > + seq_printf(s, "\t\t#%-4d 0x%-4x 0x%-12llx 0x%-12llx\n", > + pt_index, addr[pt_index] >> SMMU_PTE_ATTR_SHIFT, > + SMMU_PFN_PHYS(addr[pt_index] & ~SMMU_PTE_ATTR), iova); > + } > + seq_puts(s, "\t}\n"); > + } > + seq_puts(s, "}\n"); > + seq_printf(s, "Total PDE count: %d\n", pde_count); > + seq_printf(s, "Total PTE count: %lld\n", pte_count); > + > + return 0; > +} > + > +DEFINE_SHOW_ATTRIBUTE(tegra_smmu_mappings); > + > static void tegra_smmu_debugfs_init(struct tegra_smmu *smmu) > { > + const struct tegra_smmu_soc *soc = smmu->soc; > + struct tegra_smmu_group_debug *group_debug; > + struct device *dev = smmu->dev; > + struct dentry *d; > + int i; > + > + group_debug = devm_kzalloc(dev, sizeof(*group_debug) * soc->num_swgroups, GFP_KERNEL); devm_kcalloc()
WARNING: multiple messages have this Message-ID (diff)
From: Dmitry Osipenko <digetx@gmail.com> To: Nicolin Chen <nicoleotsuka@gmail.com>, thierry.reding@gmail.com, joro@8bytes.org, krzk@kernel.org Cc: linux-tegra@vger.kernel.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, jonathanh@nvidia.com Subject: Re: [PATCH 5/5] iommu/tegra-smmu: Add pagetable mappings to debugfs Date: Sat, 26 Sep 2020 17:48:54 +0300 [thread overview] Message-ID: <0c9ca297-d656-59a5-eefd-00e0c0542c29@gmail.com> (raw) In-Reply-To: <20200926080719.6822-6-nicoleotsuka@gmail.com> 26.09.2020 11:07, Nicolin Chen пишет: ... > +static int tegra_smmu_mappings_show(struct seq_file *s, void *data) > +{ > + struct tegra_smmu_group_debug *group_debug = s->private; > + const struct tegra_smmu_swgroup *group; > + struct tegra_smmu_as *as; > + struct tegra_smmu *smmu; > + int pd_index, pt_index; > + u64 pte_count = 0; > + u32 pde_count = 0; > + u32 val, ptb_reg; > + u32 *pd; > + > + if (!group_debug || !group_debug->priv || !group_debug->group) > + return 0; > + > + group = group_debug->group; > + as = group_debug->priv; > + smmu = as->smmu; > + > + val = smmu_readl(smmu, group->reg) & SMMU_ASID_ENABLE; > + if (!val) > + return 0; > + > + pd = page_address(as->pd); > + if (!pd) > + return 0; > + > + seq_printf(s, "\nSWGROUP: %s\nASID: %d\nreg: 0x%x\n", group->name, > + as->id, group->reg); > + > + mutex_lock(&smmu->lock); > + smmu_writel(smmu, as->id & 0x7f, SMMU_PTB_ASID); > + ptb_reg = smmu_readl(smmu, SMMU_PTB_DATA); I think the whole traverse needs a locking protection, doesn't it? > + mutex_unlock(&smmu->lock); > + > + seq_printf(s, "PTB_ASID: 0x%x\nas->pd_dma: 0x%llx\n", ptb_reg, as->pd_dma); > + seq_puts(s, "{\n"); > + > + for (pd_index = 0; pd_index < SMMU_NUM_PDE; pd_index++) { > + struct page *pt; > + u32 *addr; > + > + if (!as->count[pd_index] || !pd[pd_index]) > + continue; > + > + pde_count++; > + pte_count += as->count[pd_index]; > + seq_printf(s, "\t[%d] 0x%x (%d)\n", > + pd_index, pd[pd_index], as->count[pd_index]); > + pt = as->pts[pd_index]; > + addr = page_address(pt); This needs as->lock protection. > + seq_puts(s, "\t{\n"); > + seq_printf(s, "\t\t%-5s %-4s %12s %12s\n", "PDE", "ATTR", "PHYS", "IOVA"); > + for (pt_index = 0; pt_index < SMMU_NUM_PTE; pt_index++) { > + u64 iova; > + > + if (!addr[pt_index]) > + continue; > + > + iova = ((dma_addr_t)pd_index & (SMMU_NUM_PDE - 1)) << SMMU_PDE_SHIFT; > + iova |= ((dma_addr_t)pt_index & (SMMU_NUM_PTE - 1)) << SMMU_PTE_SHIFT; > + > + seq_printf(s, "\t\t#%-4d 0x%-4x 0x%-12llx 0x%-12llx\n", > + pt_index, addr[pt_index] >> SMMU_PTE_ATTR_SHIFT, > + SMMU_PFN_PHYS(addr[pt_index] & ~SMMU_PTE_ATTR), iova); > + } > + seq_puts(s, "\t}\n"); > + } > + seq_puts(s, "}\n"); > + seq_printf(s, "Total PDE count: %d\n", pde_count); > + seq_printf(s, "Total PTE count: %lld\n", pte_count); > + > + return 0; > +} > + > +DEFINE_SHOW_ATTRIBUTE(tegra_smmu_mappings); > + > static void tegra_smmu_debugfs_init(struct tegra_smmu *smmu) > { > + const struct tegra_smmu_soc *soc = smmu->soc; > + struct tegra_smmu_group_debug *group_debug; > + struct device *dev = smmu->dev; > + struct dentry *d; > + int i; > + > + group_debug = devm_kzalloc(dev, sizeof(*group_debug) * soc->num_swgroups, GFP_KERNEL); devm_kcalloc() _______________________________________________ iommu mailing list iommu@lists.linux-foundation.org https://lists.linuxfoundation.org/mailman/listinfo/iommu
next prev parent reply other threads:[~2020-09-26 14:48 UTC|newest] Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-09-26 8:07 [PATCH 0/5] iommu/tegra-smmu: Adding PCI support and mappings debugfs node Nicolin Chen 2020-09-26 8:07 ` Nicolin Chen 2020-09-26 8:07 ` [PATCH 1/5] iommu/tegra-smmu: Unwrap tegra_smmu_group_get Nicolin Chen 2020-09-26 8:07 ` Nicolin Chen 2020-09-28 7:13 ` Thierry Reding 2020-09-28 7:13 ` Thierry Reding 2020-09-28 19:33 ` Nicolin Chen 2020-09-28 19:33 ` Nicolin Chen 2020-09-26 8:07 ` [PATCH 2/5] iommu/tegra-smmu: Expend mutex protection range Nicolin Chen 2020-09-26 8:07 ` Nicolin Chen 2020-09-26 8:07 ` [PATCH 3/5] iommu/tegra-smmu: Use iommu_fwspec in .probe_/.attach_device() Nicolin Chen 2020-09-26 8:07 ` Nicolin Chen 2020-09-26 14:48 ` Dmitry Osipenko 2020-09-26 14:48 ` Dmitry Osipenko 2020-09-26 20:42 ` Nicolin Chen 2020-09-26 20:42 ` Nicolin Chen 2020-09-28 7:29 ` Thierry Reding 2020-09-28 7:29 ` Thierry Reding 2020-09-28 7:52 ` Thierry Reding 2020-09-28 7:52 ` Thierry Reding 2020-09-28 22:18 ` Nicolin Chen 2020-09-28 22:18 ` Nicolin Chen 2020-09-29 4:06 ` Dmitry Osipenko 2020-09-29 4:06 ` Dmitry Osipenko 2020-09-29 5:36 ` Nicolin Chen 2020-09-29 5:36 ` Nicolin Chen 2020-09-26 8:07 ` [PATCH 4/5] iommu/tegra-smmu: Add PCI support Nicolin Chen 2020-09-26 8:07 ` Nicolin Chen 2020-09-26 22:18 ` Dmitry Osipenko 2020-09-26 22:18 ` Dmitry Osipenko 2020-09-28 22:31 ` Nicolin Chen 2020-09-28 22:31 ` Nicolin Chen 2020-09-28 7:55 ` Thierry Reding 2020-09-28 7:55 ` Thierry Reding 2020-09-28 22:33 ` Nicolin Chen 2020-09-28 22:33 ` Nicolin Chen 2020-09-26 8:07 ` [PATCH 5/5] iommu/tegra-smmu: Add pagetable mappings to debugfs Nicolin Chen 2020-09-26 8:07 ` Nicolin Chen 2020-09-26 14:48 ` Dmitry Osipenko [this message] 2020-09-26 14:48 ` Dmitry Osipenko 2020-09-26 20:47 ` Nicolin Chen 2020-09-26 20:47 ` Nicolin Chen 2020-09-26 21:41 ` Dmitry Osipenko 2020-09-26 21:41 ` Dmitry Osipenko 2020-09-26 21:24 ` Dmitry Osipenko 2020-09-26 21:24 ` Dmitry Osipenko 2020-09-26 21:37 ` Dmitry Osipenko 2020-09-26 21:37 ` Dmitry Osipenko
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=0c9ca297-d656-59a5-eefd-00e0c0542c29@gmail.com \ --to=digetx@gmail.com \ --cc=iommu@lists.linux-foundation.org \ --cc=jonathanh@nvidia.com \ --cc=joro@8bytes.org \ --cc=krzk@kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-tegra@vger.kernel.org \ --cc=nicoleotsuka@gmail.com \ --cc=thierry.reding@gmail.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.