* =?y?q?=5BRFC=5D=5BPATCH=200/2=5D=20debugfs=3A=20Allow=20debugfs=5Fcreate=5Fdir=28=29=20to=20take=20data=20from=20caller?= @ 2012-08-08 6:24 Hiroshi Doyu [not found] ` <1344407073-12030-1-git-send-email-hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> 0 siblings, 1 reply; 17+ messages in thread From: Hiroshi Doyu @ 2012-08-08 6:24 UTC (permalink / raw) To: Hiroshi Doyu Cc: iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA, linux-tegra-u79uwXL29TY76Z2rM5mHXA, Al Viro [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #1: Type: text/plain; charset=y, Size: 2025 bytes --] The commit c3b1a35 "debugfs: make sure that debugfs_create_file() gets used only for regulars" doesn't allow to use debugfs_create_file() for creating directory, and the current debugfs_create_dir() cannot take the private data from caller. There are some cases that we want to pass some client data to dir, especially when dir is nested deeply. We can work around to pass all necessary data with some invented data structure to the end files, but if directory itself had private data, we could avoid to introduce new structures just to pass data to end files. For example, tegra iommu(smmu) case, debugfs structure could be as below. sys/ └── kernel └── debug ├── smmu.0 │ ├── mc │ │ ├── ptc │ │ └── tlb │ └── mc0 │ ├── ptc │ └── tlb └── smmu.1 ├── mc │ ├── ptc │ └── tlb ├── mc0 │ ├── ptc │ └── tlb └── mc1 ├── ptc └── tlb The end files, {ptc,tlb} depend on which mc? to belong to, and which smmu.? to belong to. The parent data can be accessed from those end files if necessary. dent = d_find_alias(s->private); cache = (int)dent->d_inode->i_private; mc = (int)dent->d_parent->d_inode->i_private; smmu = dent->d_parent->d_parent->d_inode->i_private; The original tegra smmu debugfs patch is: http://lists.linuxfoundation.org/pipermail/iommu/2012-August/004507.html Hiroshi Doyu (2): debugfs: Allow debugfs_create_dir() to take data iommu/tegra: smmu: Use __debugfs_create_dir drivers/iommu/tegra-smmu.c | 4 +--- fs/debugfs/inode.c | 7 ++++--- include/linux/debugfs.h | 9 ++++++++- 3 files changed, 13 insertions(+), 7 deletions(-) -- 1.7.5.4 ^ permalink raw reply [flat|nested] 17+ messages in thread
[parent not found: <1344407073-12030-1-git-send-email-hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>]
* [PATCH 1/2] debugfs: Allow debugfs_create_dir() to take data [not found] ` <1344407073-12030-1-git-send-email-hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> @ 2012-08-08 6:24 ` Hiroshi Doyu [not found] ` <1344407073-12030-2-git-send-email-hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> 2012-08-08 6:24 ` [PATCH 2/2] iommu/tegra: smmu: Use __debugfs_create_dir Hiroshi Doyu 2012-08-08 6:28 ` [RFC][PATCH 0/2] debugfs: Allow debugfs_create_dir() to take data from caller Hiroshi Doyu 2 siblings, 1 reply; 17+ messages in thread From: Hiroshi Doyu @ 2012-08-08 6:24 UTC (permalink / raw) To: Hiroshi Doyu Cc: iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA, linux-tegra-u79uwXL29TY76Z2rM5mHXA, Al Viro, Greg Kroah-Hartman, linux-kernel-u79uwXL29TY76Z2rM5mHXA Add __debugfs_create_dir(), which takes data passed from caller. Signed-off-by: Hiroshi Doyu <hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> --- fs/debugfs/inode.c | 7 ++++--- include/linux/debugfs.h | 9 ++++++++- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/fs/debugfs/inode.c b/fs/debugfs/inode.c index 4733eab..423df9f 100644 --- a/fs/debugfs/inode.c +++ b/fs/debugfs/inode.c @@ -387,7 +387,7 @@ struct dentry *debugfs_create_file(const char *name, umode_t mode, EXPORT_SYMBOL_GPL(debugfs_create_file); /** - * debugfs_create_dir - create a directory in the debugfs filesystem + * __debugfs_create_dir - create a directory in the debugfs filesystem * @name: a pointer to a string containing the name of the directory to * create. * @parent: a pointer to the parent dentry for this file. This should be a @@ -404,10 +404,11 @@ EXPORT_SYMBOL_GPL(debugfs_create_file); * If debugfs is not enabled in the kernel, the value -%ENODEV will be * returned. */ -struct dentry *debugfs_create_dir(const char *name, struct dentry *parent) +struct dentry *__debugfs_create_dir(const char *name, struct dentry *parent, + void *data) { return __create_file(name, S_IFDIR | S_IRWXU | S_IRUGO | S_IXUGO, - parent, NULL, NULL); + parent, data, NULL); } EXPORT_SYMBOL_GPL(debugfs_create_dir); diff --git a/include/linux/debugfs.h b/include/linux/debugfs.h index 66c434f..4ba9f0a 100644 --- a/include/linux/debugfs.h +++ b/include/linux/debugfs.h @@ -50,7 +50,14 @@ struct dentry *debugfs_create_file(const char *name, umode_t mode, struct dentry *parent, void *data, const struct file_operations *fops); -struct dentry *debugfs_create_dir(const char *name, struct dentry *parent); +struct dentry *__debugfs_create_dir(const char *name, struct dentry *parent, + void *data); + +static inline struct dentry *debugfs_create_dir(const char *name, + struct dentry *parent) +{ + return __debugfs_create_dir(name, parent, NULL); +} struct dentry *debugfs_create_symlink(const char *name, struct dentry *parent, const char *dest); -- 1.7.5.4 ^ permalink raw reply related [flat|nested] 17+ messages in thread
[parent not found: <1344407073-12030-2-git-send-email-hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>]
* Re: [PATCH 1/2] debugfs: Allow debugfs_create_dir() to take data [not found] ` <1344407073-12030-2-git-send-email-hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> @ 2012-08-08 13:34 ` Greg Kroah-Hartman [not found] ` <20120808133427.GA14417-U8xfFu+wG4EAvxtiuMwx3w@public.gmane.org> 0 siblings, 1 reply; 17+ messages in thread From: Greg Kroah-Hartman @ 2012-08-08 13:34 UTC (permalink / raw) To: Hiroshi Doyu Cc: linux-tegra-u79uwXL29TY76Z2rM5mHXA, iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA, Al Viro, linux-kernel-u79uwXL29TY76Z2rM5mHXA On Wed, Aug 08, 2012 at 09:24:32AM +0300, Hiroshi Doyu wrote: > Add __debugfs_create_dir(), which takes data passed from caller. Why? > Signed-off-by: Hiroshi Doyu <hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> > --- > fs/debugfs/inode.c | 7 ++++--- > include/linux/debugfs.h | 9 ++++++++- > 2 files changed, 12 insertions(+), 4 deletions(-) > > diff --git a/fs/debugfs/inode.c b/fs/debugfs/inode.c > index 4733eab..423df9f 100644 > --- a/fs/debugfs/inode.c > +++ b/fs/debugfs/inode.c > @@ -387,7 +387,7 @@ struct dentry *debugfs_create_file(const char *name, umode_t mode, > EXPORT_SYMBOL_GPL(debugfs_create_file); > > /** > - * debugfs_create_dir - create a directory in the debugfs filesystem > + * __debugfs_create_dir - create a directory in the debugfs filesystem > * @name: a pointer to a string containing the name of the directory to > * create. > * @parent: a pointer to the parent dentry for this file. This should be a > @@ -404,10 +404,11 @@ EXPORT_SYMBOL_GPL(debugfs_create_file); > * If debugfs is not enabled in the kernel, the value -%ENODEV will be > * returned. > */ > -struct dentry *debugfs_create_dir(const char *name, struct dentry *parent) > +struct dentry *__debugfs_create_dir(const char *name, struct dentry *parent, > + void *data) > { > return __create_file(name, S_IFDIR | S_IRWXU | S_IRUGO | S_IXUGO, > - parent, NULL, NULL); > + parent, data, NULL); > } > EXPORT_SYMBOL_GPL(debugfs_create_dir); You can't export a symbol that doesn't exist anymore. What are you trying to do here? This patch doesn't look right at all. greg k-h ^ permalink raw reply [flat|nested] 17+ messages in thread
[parent not found: <20120808133427.GA14417-U8xfFu+wG4EAvxtiuMwx3w@public.gmane.org>]
* Re: [PATCH 1/2] debugfs: Allow debugfs_create_dir() to take data [not found] ` <20120808133427.GA14417-U8xfFu+wG4EAvxtiuMwx3w@public.gmane.org> @ 2012-08-09 12:56 ` Hiroshi Doyu [not found] ` <20120809155624.b781edae9efa7c51faf6c31c-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> 0 siblings, 1 reply; 17+ messages in thread From: Hiroshi Doyu @ 2012-08-09 12:56 UTC (permalink / raw) To: Greg Kroah-Hartman, Felipe Balbi Cc: linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org, Al Viro, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Hi Greg, Felipe, On Wed, 8 Aug 2012 15:34:27 +0200 Greg Kroah-Hartman <gregkh@linuxfoundation.org> wrote: > On Wed, Aug 08, 2012 at 09:24:32AM +0300, Hiroshi Doyu wrote: > > Add __debugfs_create_dir(), which takes data passed from caller. > > Why? > > > Signed-off-by: Hiroshi Doyu <hdoyu@nvidia.com> > > --- > > fs/debugfs/inode.c | 7 ++++--- > > include/linux/debugfs.h | 9 ++++++++- > > 2 files changed, 12 insertions(+), 4 deletions(-) ..... > What are you trying to do here? This patch doesn't look right at all. I missed to send the cover letter of this patch series to LKML, which explained the background. I attached that cover letter below. Please read the following explanation too. The point was that, since directory hierarchy itself already has the necessary info, like parent <- child relationships, among each entities(here, smmu?, mc?, cache{tlb,ptc}), I just wanted to avoid to have those *residual* info embedded in normal data hierarchy, because cache{tlb,ptc} is used only in debugfs, not in the normal path. With directory/file hierarchy, we could get necessary data at any time on-the-fly. OTOH, if debugfs has the assumption that it has to be always projected from the existing data hierarchy, I should fix to have the same hierarchy in entities(here, smmu?, mc?, cache{tlb,ptc}), as Felipe pointed out in another thread. It might not be so bad that debugfs has the ability to manage its own hierarchy with i_private, apart from the original data hierarchy too. In our case, cache{tlb,ptc} data is used only for debugfs. They don't have to be in the normal data hierarchy. This depends on the above assumption, does debugfs have to be always projected from the normal data hierarchy? The original tegra smmu debugfs patch is: http://lists.linuxfoundation.org/pipermail/iommu/2012-August/004507.html Here's the original missed cover letter: Subject:[RFC][PATCH 0/2] debugfs: Allow debugfs_create_dir() to take data from caller From: Hiroshi Doyu <hdoyu@nvidia.com> To: Hiroshi Doyu <hdoyu@nvidia.com> CC: "iommu@lists.linux-foundation.org" <iommu@lists.linux-foundation.org>, "linux-tegra@vger.kernel.org" <linux-tegra@vger.kernel.org>, Al Viro <viro@zeniv.linux.org.uk> Date: Wed, 8 Aug 2012 08:24:31 +0200 Thread-Index: Ac11LoTHb+fK/MOMRX2RFTvtP89jeg== Accept-Language: en-US, en-CA, fi-FI The commit c3b1a35 "debugfs: make sure that debugfs_create_file() gets used only for regulars" doesn't allow to use debugfs_create_file() for creating directory, and the current debugfs_create_dir() cannot take the private data from caller. There are some cases that we want to pass some client data to dir, especially when dir is nested deeply. We can work around to pass all necessary data with some invented data structure to the end files, but if directory itself had private data, we could avoid to introduce new structures just to pass data to end files. For example, tegra iommu(smmu) case, debugfs structure could be as below. sys/ └── kernel └── debug ├── smmu.0 │ ├── mc │ │ ├── ptc │ │ └── tlb │ └── mc0 │ ├── ptc │ └── tlb └── smmu.1 ├── mc │ ├── ptc │ └── tlb ├── mc0 │ ├── ptc │ └── tlb └── mc1 ├── ptc └── tlb The end files, {ptc,tlb} depend on which mc? to belong to, and which smmu.? to belong to. The parent data can be accessed from those end files if necessary. dent = d_find_alias(s->private); cache = (int)dent->d_inode->i_private; mc = (int)dent->d_parent->d_inode->i_private; smmu = dent->d_parent->d_parent->d_inode->i_private; The original tegra smmu debugfs patch is: http://lists.linuxfoundation.org/pipermail/iommu/2012-August/004507.html Hiroshi Doyu (2): debugfs: Allow debugfs_create_dir() to take data iommu/tegra: smmu: Use __debugfs_create_dir drivers/iommu/tegra-smmu.c | 4 +--- fs/debugfs/inode.c | 7 ++++--- include/linux/debugfs.h | 9 ++++++++- 3 files changed, 13 insertions(+), 7 deletions(-) -- 1.7.5.4 _______________________________________________ iommu mailing list iommu@lists.linux-foundation.org https://lists.linuxfoundation.org/mailman/listinfo/iommu ^ permalink raw reply [flat|nested] 17+ messages in thread
[parent not found: <20120809155624.b781edae9efa7c51faf6c31c-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>]
* Re: [PATCH 1/2] debugfs: Allow debugfs_create_dir() to take data [not found] ` <20120809155624.b781edae9efa7c51faf6c31c-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> @ 2012-08-15 5:40 ` Hiroshi Doyu [not found] ` <20120815084008.3d8f4ac20af5dc3372cd7681-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> 2012-08-15 5:47 ` [v2 1/1] iommu/tegra: smmu: Use debugfs_create_dir for directory Hiroshi Doyu 1 sibling, 1 reply; 17+ messages in thread From: Hiroshi Doyu @ 2012-08-15 5:40 UTC (permalink / raw) To: Greg Kroah-Hartman, Felipe Balbi Cc: linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org, Al Viro, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org On Thu, 9 Aug 2012 14:56:24 +0200 Hiroshi Doyu <hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> wrote: > Hi Greg, Felipe, > > On Wed, 8 Aug 2012 15:34:27 +0200 > Greg Kroah-Hartman <gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r@public.gmane.org> wrote: > > > On Wed, Aug 08, 2012 at 09:24:32AM +0300, Hiroshi Doyu wrote: > > > Add __debugfs_create_dir(), which takes data passed from caller. > > > > Why? > > > > > Signed-off-by: Hiroshi Doyu <hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> > > > --- > > > fs/debugfs/inode.c | 7 ++++--- > > > include/linux/debugfs.h | 9 ++++++++- > > > 2 files changed, 12 insertions(+), 4 deletions(-) > ..... > > What are you trying to do here? This patch doesn't look right at all. > > I missed to send the cover letter of this patch series to LKML, which > explained the background. I attached that cover letter below. Please > read the following explanation too. Any chance to get some feedback on this? I'm also sending another version of patch, which just uses debgufs_create_dir() as Felipe suggested, in-reply-to this mail. ^ permalink raw reply [flat|nested] 17+ messages in thread
[parent not found: <20120815084008.3d8f4ac20af5dc3372cd7681-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>]
* Re: [PATCH 1/2] debugfs: Allow debugfs_create_dir() to take data [not found] ` <20120815084008.3d8f4ac20af5dc3372cd7681-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> @ 2012-08-15 13:40 ` Greg Kroah-Hartman 0 siblings, 0 replies; 17+ messages in thread From: Greg Kroah-Hartman @ 2012-08-15 13:40 UTC (permalink / raw) To: Hiroshi Doyu Cc: linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org, Al Viro, Felipe Balbi, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org On Wed, Aug 15, 2012 at 08:40:08AM +0300, Hiroshi Doyu wrote: > On Thu, 9 Aug 2012 14:56:24 +0200 > Hiroshi Doyu <hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> wrote: > > > Hi Greg, Felipe, > > > > On Wed, 8 Aug 2012 15:34:27 +0200 > > Greg Kroah-Hartman <gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r@public.gmane.org> wrote: > > > > > On Wed, Aug 08, 2012 at 09:24:32AM +0300, Hiroshi Doyu wrote: > > > > Add __debugfs_create_dir(), which takes data passed from caller. > > > > > > Why? > > > > > > > Signed-off-by: Hiroshi Doyu <hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> > > > > --- > > > > fs/debugfs/inode.c | 7 ++++--- > > > > include/linux/debugfs.h | 9 ++++++++- > > > > 2 files changed, 12 insertions(+), 4 deletions(-) > > ..... > > > What are you trying to do here? This patch doesn't look right at all. > > > > I missed to send the cover letter of this patch series to LKML, which > > explained the background. I attached that cover letter below. Please > > read the following explanation too. > > Any chance to get some feedback on this? I still don't like it, and then there's the basic fact that I'm pretty sure you broke the build with the patch, but who's noticing little things like that :) > I'm also sending another version of patch, which just uses > debgufs_create_dir() as Felipe suggested, in-reply-to this mail. I'd prefer not to change debugfs for this, so if you don't do that, I don't object to your driver-specific patch. greg k-h ^ permalink raw reply [flat|nested] 17+ messages in thread
* [v2 1/1] iommu/tegra: smmu: Use debugfs_create_dir for directory [not found] ` <20120809155624.b781edae9efa7c51faf6c31c-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> 2012-08-15 5:40 ` Hiroshi Doyu @ 2012-08-15 5:47 ` Hiroshi Doyu [not found] ` <1345009652-13408-1-git-send-email-hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> 1 sibling, 1 reply; 17+ messages in thread From: Hiroshi Doyu @ 2012-08-15 5:47 UTC (permalink / raw) To: iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA Cc: linux-tegra-u79uwXL29TY76Z2rM5mHXA, joerg.roedel-5C7GfCeVMHo, gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, balbi-l0cyMroinI0, Hiroshi Doyu The commit c3b1a35 "debugfs: make sure that debugfs_create_file() gets used only for regulars" doesn't allow to use debugfs_create_file() for dir. Keep debugfs data in smmu_device instead of directory's i_private. Signed-off-by: Hiroshi Doyu <hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> --- The original version, debugfs_create_dir() with data http://lists.linuxfoundation.org/pipermail/iommu/2012-August/004527.html http://lists.linuxfoundation.org/pipermail/iommu/2012-August/004525.html http://lists.linuxfoundation.org/pipermail/iommu/2012-August/004526.html --- drivers/iommu/tegra-smmu.c | 52 +++++++++++++++++++++++++++++-------------- 1 files changed, 35 insertions(+), 17 deletions(-) diff --git a/drivers/iommu/tegra-smmu.c b/drivers/iommu/tegra-smmu.c index 5e51fb7..c749f96 100644 --- a/drivers/iommu/tegra-smmu.c +++ b/drivers/iommu/tegra-smmu.c @@ -246,6 +246,12 @@ struct smmu_as { spinlock_t client_lock; /* for client list */ }; +struct smmu_debugfs_info { + struct smmu_device *smmu; + int mc; + int cache; +}; + /* * Per SMMU device - IOMMU device */ @@ -267,6 +273,7 @@ struct smmu_device { unsigned long asid_security; struct dentry *debugfs_root; + struct smmu_debugfs_info *debugfs_info; struct device_node *ahb; @@ -920,9 +927,10 @@ static ssize_t smmu_debugfs_stats_write(struct file *file, const char __user *buffer, size_t count, loff_t *pos) { + struct smmu_debugfs_info *info; struct smmu_device *smmu; struct dentry *dent; - int i, cache, mc; + int i; enum { _OFF = 0, _ON, @@ -950,11 +958,10 @@ static ssize_t smmu_debugfs_stats_write(struct file *file, return -EINVAL; dent = file->f_dentry; - cache = (int)dent->d_inode->i_private; - mc = (int)dent->d_parent->d_inode->i_private; - smmu = dent->d_parent->d_parent->d_inode->i_private; + info = dent->d_inode->i_private; + smmu = info->smmu; - offs = SMMU_CACHE_CONFIG(cache); + offs = SMMU_CACHE_CONFIG(info->cache); val = smmu_read(smmu, offs); switch (i) { case _OFF: @@ -986,21 +993,21 @@ static ssize_t smmu_debugfs_stats_write(struct file *file, static int smmu_debugfs_stats_show(struct seq_file *s, void *v) { + struct smmu_debugfs_info *info; struct smmu_device *smmu; struct dentry *dent; - int i, cache, mc; + int i; const char * const stats[] = { "hit", "miss", }; dent = d_find_alias(s->private); - cache = (int)dent->d_inode->i_private; - mc = (int)dent->d_parent->d_inode->i_private; - smmu = dent->d_parent->d_parent->d_inode->i_private; + info = dent->d_inode->i_private; + smmu = info->smmu; for (i = 0; i < ARRAY_SIZE(stats); i++) { u32 val; size_t offs; - offs = SMMU_STATS_CACHE_COUNT(mc, cache, i); + offs = SMMU_STATS_CACHE_COUNT(info->mc, info->cache, i); val = smmu_read(smmu, offs); seq_printf(s, "%s:%08x ", stats[i], val); @@ -1028,16 +1035,22 @@ static const struct file_operations smmu_debugfs_stats_fops = { static void smmu_debugfs_delete(struct smmu_device *smmu) { debugfs_remove_recursive(smmu->debugfs_root); + kfree(smmu->debugfs_info); } static void smmu_debugfs_create(struct smmu_device *smmu) { int i; + size_t bytes; struct dentry *root; - root = debugfs_create_file(dev_name(smmu->dev), - S_IFDIR | S_IRWXU | S_IRUGO | S_IXUGO, - NULL, smmu, NULL); + bytes = ARRAY_SIZE(smmu_debugfs_mc) * ARRAY_SIZE(smmu_debugfs_cache) * + sizeof(*smmu->debugfs_info); + smmu->debugfs_info = kmalloc(bytes, GFP_KERNEL); + if (!smmu->debugfs_info) + return; + + root = debugfs_create_dir(dev_name(smmu->dev), NULL); if (!root) goto err_out; smmu->debugfs_root = root; @@ -1046,18 +1059,23 @@ static void smmu_debugfs_create(struct smmu_device *smmu) int j; struct dentry *mc; - mc = debugfs_create_file(smmu_debugfs_mc[i], - S_IFDIR | S_IRWXU | S_IRUGO | S_IXUGO, - root, (void *)i, NULL); + mc = debugfs_create_dir(smmu_debugfs_mc[i], root); if (!mc) goto err_out; for (j = 0; j < ARRAY_SIZE(smmu_debugfs_cache); j++) { struct dentry *cache; + struct smmu_debugfs_info *info; + + info = smmu->debugfs_info; + info += i * ARRAY_SIZE(smmu_debugfs_mc) + j; + info->smmu = smmu; + info->mc = i; + info->cache = j; cache = debugfs_create_file(smmu_debugfs_cache[j], S_IWUGO | S_IRUGO, mc, - (void *)j, + (void *)info, &smmu_debugfs_stats_fops); if (!cache) goto err_out; -- 1.7.5.4 ^ permalink raw reply related [flat|nested] 17+ messages in thread
[parent not found: <1345009652-13408-1-git-send-email-hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>]
* Re: [v2 1/1] iommu/tegra: smmu: Use debugfs_create_dir for directory [not found] ` <1345009652-13408-1-git-send-email-hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> @ 2012-08-15 16:13 ` Stephen Warren [not found] ` <502BCA9E.5090206-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org> 0 siblings, 1 reply; 17+ messages in thread From: Stephen Warren @ 2012-08-15 16:13 UTC (permalink / raw) To: Hiroshi Doyu, joerg.roedel-5C7GfCeVMHo Cc: linux-tegra-u79uwXL29TY76Z2rM5mHXA, gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA, balbi-l0cyMroinI0 On 08/14/2012 11:47 PM, Hiroshi Doyu wrote: > The commit c3b1a35 "debugfs: make sure that debugfs_create_file() gets > used only for regulars" doesn't allow to use debugfs_create_file() for > dir. Keep debugfs data in smmu_device instead of directory's i_private. > > Signed-off-by: Hiroshi Doyu <hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> Tested-by: Stephen Warren <swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org> Since this fixes a BUG during kernel boot, it'd be great if this could be applied ASAP unless there are significant issues with it. ^ permalink raw reply [flat|nested] 17+ messages in thread
[parent not found: <502BCA9E.5090206-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>]
* Re: [v2 1/1] iommu/tegra: smmu: Use debugfs_create_dir for directory [not found] ` <502BCA9E.5090206-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org> @ 2012-09-04 6:51 ` Hiroshi Doyu [not found] ` <20120904.095134.292349834288373260.hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> 0 siblings, 1 reply; 17+ messages in thread From: Hiroshi Doyu @ 2012-09-04 6:51 UTC (permalink / raw) To: joerg.roedel-5C7GfCeVMHo@public.gmane.org, swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org Cc: iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org, linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r@public.gmane.org, balbi-l0cyMroinI0@public.gmane.org, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Stephen Warren <swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org> wrote @ Wed, 15 Aug 2012 18:13:18 +0200: > On 08/14/2012 11:47 PM, Hiroshi Doyu wrote: > > The commit c3b1a35 "debugfs: make sure that debugfs_create_file() gets > > used only for regulars" doesn't allow to use debugfs_create_file() for > > dir. Keep debugfs data in smmu_device instead of directory's i_private. > > > > Signed-off-by: Hiroshi Doyu <hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> > > Tested-by: Stephen Warren <swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org> > > Since this fixes a BUG during kernel boot, it'd be great if this could > be applied ASAP unless there are significant issues with it. Joerg, any chance to get this in? ^ permalink raw reply [flat|nested] 17+ messages in thread
[parent not found: <20120904.095134.292349834288373260.hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>]
* Re: [v2 1/1] iommu/tegra: smmu: Use debugfs_create_dir for directory [not found] ` <20120904.095134.292349834288373260.hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> @ 2012-09-10 18:24 ` Stephen Warren [not found] ` <504E3046.9080103-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org> 0 siblings, 1 reply; 17+ messages in thread From: Stephen Warren @ 2012-09-10 18:24 UTC (permalink / raw) To: Hiroshi Doyu, joerg.roedel-5C7GfCeVMHo@public.gmane.org Cc: linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r@public.gmane.org, iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, balbi-l0cyMroinI0@public.gmane.org On 09/04/2012 12:51 AM, Hiroshi Doyu wrote: > Stephen Warren <swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org> wrote @ Wed, 15 Aug 2012 18:13:18 +0200: > >> On 08/14/2012 11:47 PM, Hiroshi Doyu wrote: >>> The commit c3b1a35 "debugfs: make sure that debugfs_create_file() gets >>> used only for regulars" doesn't allow to use debugfs_create_file() for >>> dir. Keep debugfs data in smmu_device instead of directory's i_private. >>> >>> Signed-off-by: Hiroshi Doyu <hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> >> >> Tested-by: Stephen Warren <swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org> >> >> Since this fixes a BUG during kernel boot, it'd be great if this could >> be applied ASAP unless there are significant issues with it. > > Joerg, any chance to get this in? Joerg, could you please apply this patch ASAP? Currently, Tegra won't boot in linux-next without it. Alternatively, would you like me to take the patch through the Tegra tree? Thanks. ^ permalink raw reply [flat|nested] 17+ messages in thread
[parent not found: <504E3046.9080103-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>]
* Re: [v2 1/1] iommu/tegra: smmu: Use debugfs_create_dir for directory [not found] ` <504E3046.9080103-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org> @ 2012-09-17 16:28 ` joerg.roedel-5C7GfCeVMHo 0 siblings, 0 replies; 17+ messages in thread From: joerg.roedel-5C7GfCeVMHo @ 2012-09-17 16:28 UTC (permalink / raw) To: Stephen Warren Cc: Hiroshi Doyu, iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org, linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r@public.gmane.org, balbi-l0cyMroinI0@public.gmane.org, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org On Mon, Sep 10, 2012 at 12:24:06PM -0600, Stephen Warren wrote: > Joerg, could you please apply this patch ASAP? Currently, Tegra won't > boot in linux-next without it. Alternatively, would you like me to take > the patch through the Tegra tree? Thanks. Sorry, I had some vacation. But I am back now and will apply the patch ASAP. Joerg ^ permalink raw reply [flat|nested] 17+ messages in thread
* [PATCH 2/2] iommu/tegra: smmu: Use __debugfs_create_dir [not found] ` <1344407073-12030-1-git-send-email-hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> 2012-08-08 6:24 ` [PATCH 1/2] debugfs: Allow debugfs_create_dir() to take data Hiroshi Doyu @ 2012-08-08 6:24 ` Hiroshi Doyu [not found] ` <1344407073-12030-3-git-send-email-hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> 2012-08-08 6:28 ` [RFC][PATCH 0/2] debugfs: Allow debugfs_create_dir() to take data from caller Hiroshi Doyu 2 siblings, 1 reply; 17+ messages in thread From: Hiroshi Doyu @ 2012-08-08 6:24 UTC (permalink / raw) To: Hiroshi Doyu Cc: Grant Likely, Stephen Warren, linux-kernel-u79uwXL29TY76Z2rM5mHXA, Chris Wright, iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA, Al Viro, linux-tegra-u79uwXL29TY76Z2rM5mHXA The commit c3b1a35 "debugfs: make sure that debugfs_create_file() gets used only for regulars" doesn't allow to use debugfs_create_file() for dir. Use the version with "data", __debugfs_create_dir(). Signed-off-by: Hiroshi Doyu <hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> Reported-by: Laxman Dewangan <ldewangan-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> --- drivers/iommu/tegra-smmu.c | 4 +--- 1 files changed, 1 insertions(+), 3 deletions(-) diff --git a/drivers/iommu/tegra-smmu.c b/drivers/iommu/tegra-smmu.c index 5e51fb7..41aff7a 100644 --- a/drivers/iommu/tegra-smmu.c +++ b/drivers/iommu/tegra-smmu.c @@ -1035,9 +1035,7 @@ static void smmu_debugfs_create(struct smmu_device *smmu) int i; struct dentry *root; - root = debugfs_create_file(dev_name(smmu->dev), - S_IFDIR | S_IRWXU | S_IRUGO | S_IXUGO, - NULL, smmu, NULL); + root = __debugfs_create_dir(dev_name(smmu->dev), NULL, smmu); if (!root) goto err_out; smmu->debugfs_root = root; -- 1.7.5.4 ^ permalink raw reply related [flat|nested] 17+ messages in thread
[parent not found: <1344407073-12030-3-git-send-email-hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>]
* Re: [PATCH 2/2] iommu/tegra: smmu: Use __debugfs_create_dir [not found] ` <1344407073-12030-3-git-send-email-hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> @ 2012-08-08 15:11 ` Felipe Balbi [not found] ` <20120808151128.GC9091-S8G//mZuvNWo5Im9Ml3/Zg@public.gmane.org> 0 siblings, 1 reply; 17+ messages in thread From: Felipe Balbi @ 2012-08-08 15:11 UTC (permalink / raw) To: Hiroshi Doyu Cc: Grant Likely, Stephen Warren, linux-kernel-u79uwXL29TY76Z2rM5mHXA, Chris Wright, iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA, Al Viro, linux-tegra-u79uwXL29TY76Z2rM5mHXA [-- Attachment #1.1: Type: text/plain, Size: 1312 bytes --] Hi, On Wed, Aug 08, 2012 at 09:24:33AM +0300, Hiroshi Doyu wrote: > The commit c3b1a35 "debugfs: make sure that debugfs_create_file() gets > used only for regulars" doesn't allow to use debugfs_create_file() for > dir. Use the version with "data", __debugfs_create_dir(). > > Signed-off-by: Hiroshi Doyu <hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> > Reported-by: Laxman Dewangan <ldewangan-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> > --- > drivers/iommu/tegra-smmu.c | 4 +--- > 1 files changed, 1 insertions(+), 3 deletions(-) > > diff --git a/drivers/iommu/tegra-smmu.c b/drivers/iommu/tegra-smmu.c > index 5e51fb7..41aff7a 100644 > --- a/drivers/iommu/tegra-smmu.c > +++ b/drivers/iommu/tegra-smmu.c > @@ -1035,9 +1035,7 @@ static void smmu_debugfs_create(struct smmu_device *smmu) > int i; > struct dentry *root; > > - root = debugfs_create_file(dev_name(smmu->dev), > - S_IFDIR | S_IRWXU | S_IRUGO | S_IXUGO, > - NULL, smmu, NULL); > + root = __debugfs_create_dir(dev_name(smmu->dev), NULL, smmu); why would the directory need extra data ? Looking in mainline, tegra-smmu.c doesn't have any debugfs support, where can I see the patches adding debugfs to tegra-smmu ? It doesn't look correct that the directory will have a data field. -- balbi [-- Attachment #1.2: Digital signature --] [-- Type: application/pgp-signature, Size: 836 bytes --] [-- Attachment #2: Type: text/plain, Size: 190 bytes --] _______________________________________________ iommu mailing list iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org https://lists.linuxfoundation.org/mailman/listinfo/iommu ^ permalink raw reply [flat|nested] 17+ messages in thread
[parent not found: <20120808151128.GC9091-S8G//mZuvNWo5Im9Ml3/Zg@public.gmane.org>]
* Re: [PATCH 2/2] iommu/tegra: smmu: Use __debugfs_create_dir [not found] ` <20120808151128.GC9091-S8G//mZuvNWo5Im9Ml3/Zg@public.gmane.org> @ 2012-08-08 15:31 ` Felipe Balbi [not found] ` <20120808153100.GE9091-S8G//mZuvNWo5Im9Ml3/Zg@public.gmane.org> 0 siblings, 1 reply; 17+ messages in thread From: Felipe Balbi @ 2012-08-08 15:31 UTC (permalink / raw) To: Felipe Balbi Cc: Grant Likely, Stephen Warren, linux-kernel-u79uwXL29TY76Z2rM5mHXA, Chris Wright, iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA, Al Viro, linux-tegra-u79uwXL29TY76Z2rM5mHXA [-- Attachment #1.1: Type: text/plain, Size: 7417 bytes --] Hi, On Wed, Aug 08, 2012 at 06:11:29PM +0300, Felipe Balbi wrote: > Hi, > > On Wed, Aug 08, 2012 at 09:24:33AM +0300, Hiroshi Doyu wrote: > > The commit c3b1a35 "debugfs: make sure that debugfs_create_file() gets > > used only for regulars" doesn't allow to use debugfs_create_file() for > > dir. Use the version with "data", __debugfs_create_dir(). > > > > Signed-off-by: Hiroshi Doyu <hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> > > Reported-by: Laxman Dewangan <ldewangan-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> > > --- > > drivers/iommu/tegra-smmu.c | 4 +--- > > 1 files changed, 1 insertions(+), 3 deletions(-) > > > > diff --git a/drivers/iommu/tegra-smmu.c b/drivers/iommu/tegra-smmu.c > > index 5e51fb7..41aff7a 100644 > > --- a/drivers/iommu/tegra-smmu.c > > +++ b/drivers/iommu/tegra-smmu.c > > @@ -1035,9 +1035,7 @@ static void smmu_debugfs_create(struct smmu_device *smmu) > > int i; > > struct dentry *root; > > > > - root = debugfs_create_file(dev_name(smmu->dev), > > - S_IFDIR | S_IRWXU | S_IRUGO | S_IXUGO, > > - NULL, smmu, NULL); > > + root = __debugfs_create_dir(dev_name(smmu->dev), NULL, smmu); > > why would the directory need extra data ? Looking in mainline, > tegra-smmu.c doesn't have any debugfs support, where can I see the > patches adding debugfs to tegra-smmu ? It doesn't look correct that the > directory will have a data field. Looking at linux-next I found the commit which added it: > @@ -892,6 +909,164 @@ static struct iommu_ops smmu_iommu_ops = { > .pgsize_bitmap = SMMU_IOMMU_PGSIZES, > }; > > +/* Should be in the order of enum */ > +static const char * const smmu_debugfs_mc[] = { "mc", }; > +static const char * const smmu_debugfs_cache[] = { "tlb", "ptc", }; > + > +static ssize_t smmu_debugfs_stats_write(struct file *file, > + const char __user *buffer, > + size_t count, loff_t *pos) > +{ > + struct smmu_device *smmu; > + struct dentry *dent; > + int i, cache, mc; > + enum { > + _OFF = 0, > + _ON, > + _RESET, > + }; > + const char * const command[] = { > + [_OFF] = "off", > + [_ON] = "on", > + [_RESET] = "reset", > + }; > + char str[] = "reset"; > + u32 val; > + size_t offs; > + > + count = min_t(size_t, count, sizeof(str)); > + if (copy_from_user(str, buffer, count)) > + return -EINVAL; > + > + for (i = 0; i < ARRAY_SIZE(command); i++) > + if (strncmp(str, command[i], > + strlen(command[i])) == 0) > + break; > + > + if (i == ARRAY_SIZE(command)) > + return -EINVAL; > + > + dent = file->f_dentry; > + cache = (int)dent->d_inode->i_private; cache you can figure out by the filename. In fact, it would be much better to have tlc and ptc directories with a "status" filename which you write ON/OFF/RESET or enable/disable/reset to trigger what you need. For that to work, you should probably hold tlb and ptc on an array of some sort, and pass those as data to their respective "status" files as the data field. If tlb and ptc are properly defined structures which can point back to smmu, then you have everything you need. I mean something like: struct smmu; struct mc { const char *name; void __iomem *regs; struct smmu *smmu; }; struct smmu { struct mc mc[2]; /*what does mc stand for ? memory controller ? */ ... }; debugfs_create_dir(smmu); debugfs_create_dir(mc); debugfs_create_dir(smmu->mc[1].name); debugfs_create_dir(smmu->mc[2].name); debugfs_create_file(&smmu->mc[1], status); debugfs_create_file(&smmu->mc[2], status); or something similar. You will avoid all the trickery you did here to achieve what you need. > + mc = (int)dent->d_parent->d_inode->i_private; > + smmu = dent->d_parent->d_parent->d_inode->i_private; > + > + offs = SMMU_CACHE_CONFIG(cache); > + val = smmu_read(smmu, offs); > + switch (i) { > + case _OFF: > + val &= ~SMMU_CACHE_CONFIG_STATS_ENABLE; > + val &= ~SMMU_CACHE_CONFIG_STATS_TEST; > + smmu_write(smmu, val, offs); > + break; > + case _ON: > + val |= SMMU_CACHE_CONFIG_STATS_ENABLE; > + val &= ~SMMU_CACHE_CONFIG_STATS_TEST; > + smmu_write(smmu, val, offs); > + break; > + case _RESET: > + val |= SMMU_CACHE_CONFIG_STATS_TEST; > + smmu_write(smmu, val, offs); > + val &= ~SMMU_CACHE_CONFIG_STATS_TEST; > + smmu_write(smmu, val, offs); > + break; > + default: > + BUG(); > + break; > + } > + > + dev_dbg(smmu->dev, "%s() %08x, %08x @%08x\n", __func__, > + val, smmu_read(smmu, offs), offs); > + > + return count; > +} > + > +static int smmu_debugfs_stats_show(struct seq_file *s, void *v) > +{ > + struct smmu_device *smmu; > + struct dentry *dent; > + int i, cache, mc; > + const char * const stats[] = { "hit", "miss", }; > + > + dent = d_find_alias(s->private); > + cache = (int)dent->d_inode->i_private; > + mc = (int)dent->d_parent->d_inode->i_private; > + smmu = dent->d_parent->d_parent->d_inode->i_private; > + > + for (i = 0; i < ARRAY_SIZE(stats); i++) { > + u32 val; > + size_t offs; > + > + offs = SMMU_STATS_CACHE_COUNT(mc, cache, i); > + val = smmu_read(smmu, offs); > + seq_printf(s, "%s:%08x ", stats[i], val); > + > + dev_dbg(smmu->dev, "%s() %s %08x @%08x\n", __func__, > + stats[i], val, offs); > + } > + seq_printf(s, "\n"); > + > + return 0; > +} > + > +static int smmu_debugfs_stats_open(struct inode *inode, struct file *file) > +{ > + return single_open(file, smmu_debugfs_stats_show, inode); > +} > + > +static const struct file_operations smmu_debugfs_stats_fops = { > + .open = smmu_debugfs_stats_open, > + .read = seq_read, > + .llseek = seq_lseek, > + .release = single_release, > + .write = smmu_debugfs_stats_write, > +}; > + > +static void smmu_debugfs_delete(struct smmu_device *smmu) > +{ > + debugfs_remove_recursive(smmu->debugfs_root); > +} > + > +static void smmu_debugfs_create(struct smmu_device *smmu) > +{ > + int i; > + struct dentry *root; > + > + root = debugfs_create_file(dev_name(smmu->dev), > + S_IFDIR | S_IRWXU | S_IRUGO | S_IXUGO, > + NULL, smmu, NULL); directories don't need data. You don't even have a file_operations structure so when exactly are you going to access the data ? What you did above is actually wrong. You need to either patch this ASAP or drop the patch you wrote and rewrite the whole debugfs support. > + if (!root) > + goto err_out; > + smmu->debugfs_root = root; > + > + for (i = 0; i < ARRAY_SIZE(smmu_debugfs_mc); i++) { > + int j; > + struct dentry *mc; > + > + mc = debugfs_create_file(smmu_debugfs_mc[i], > + S_IFDIR | S_IRWXU | S_IRUGO | S_IXUGO, > + root, (void *)i, NULL); likewise here. What would you use that index for ? Even if you were to access it, how would you use it ? Not to mention that you never, ever access the private_data of the directory :-) Just convert these two to the proper debugfs_create_dir() > + if (!mc) > + goto err_out; > + > + for (j = 0; j < ARRAY_SIZE(smmu_debugfs_cache); j++) { > + struct dentry *cache; > + > + cache = debugfs_create_file(smmu_debugfs_cache[j], > + S_IWUGO | S_IRUGO, mc, > + (void *)j, > + &smmu_debugfs_stats_fops); it would be far better to pass a structure which you actually need. In this case 'smmu'. That will be a lot more useful for your code. -- balbi [-- Attachment #1.2: Digital signature --] [-- Type: application/pgp-signature, Size: 836 bytes --] [-- Attachment #2: Type: text/plain, Size: 190 bytes --] _______________________________________________ iommu mailing list iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org https://lists.linuxfoundation.org/mailman/listinfo/iommu ^ permalink raw reply [flat|nested] 17+ messages in thread
[parent not found: <20120808153100.GE9091-S8G//mZuvNWo5Im9Ml3/Zg@public.gmane.org>]
* Re: [PATCH 2/2] iommu/tegra: smmu: Use __debugfs_create_dir [not found] ` <20120808153100.GE9091-S8G//mZuvNWo5Im9Ml3/Zg@public.gmane.org> @ 2012-08-15 6:34 ` Hiroshi Doyu [not found] ` <20120815093421.c08fdbbf4d7ce6c3986861f2-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> 0 siblings, 1 reply; 17+ messages in thread From: Hiroshi Doyu @ 2012-08-15 6:34 UTC (permalink / raw) To: balbi-l0cyMroinI0@public.gmane.org, Greg Kroah-Hartman Cc: Grant Likely, Stephen Warren, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, Chris Wright, iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org, Al Viro, linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Hi, Thank you for review. Already sent the another version of patch(v2: *1), but I tried to answer the remaining questions inlined..... On Wed, 8 Aug 2012 17:31:02 +0200 Felipe Balbi <balbi-l0cyMroinI0@public.gmane.org> wrote: > * PGP Signed by an unknown key > > Hi, > > On Wed, Aug 08, 2012 at 06:11:29PM +0300, Felipe Balbi wrote: > > Hi, > > > > On Wed, Aug 08, 2012 at 09:24:33AM +0300, Hiroshi Doyu wrote: > > > The commit c3b1a35 "debugfs: make sure that debugfs_create_file() gets > > > used only for regulars" doesn't allow to use debugfs_create_file() for > > > dir. Use the version with "data", __debugfs_create_dir(). > > > > > > Signed-off-by: Hiroshi Doyu <hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> > > > Reported-by: Laxman Dewangan <ldewangan-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> > > > --- > > > drivers/iommu/tegra-smmu.c | 4 +--- > > > 1 files changed, 1 insertions(+), 3 deletions(-) > > > > > > diff --git a/drivers/iommu/tegra-smmu.c b/drivers/iommu/tegra-smmu.c > > > index 5e51fb7..41aff7a 100644 > > > --- a/drivers/iommu/tegra-smmu.c > > > +++ b/drivers/iommu/tegra-smmu.c > > > @@ -1035,9 +1035,7 @@ static void smmu_debugfs_create(struct smmu_device *smmu) > > > int i; > > > struct dentry *root; > > > > > > - root = debugfs_create_file(dev_name(smmu->dev), > > > - S_IFDIR | S_IRWXU | S_IRUGO | S_IXUGO, > > > - NULL, smmu, NULL); > > > + root = __debugfs_create_dir(dev_name(smmu->dev), NULL, smmu); > > > > why would the directory need extra data ? Looking in mainline, > > tegra-smmu.c doesn't have any debugfs support, where can I see the > > patches adding debugfs to tegra-smmu ? It doesn't look correct that the > > directory will have a data field. > > Looking at linux-next I found the commit which added it: FYI: The original tegra smmu debugfs patch is: http://lists.linuxfoundation.org/pipermail/iommu/2012-August/004507.html > > @@ -892,6 +909,164 @@ static struct iommu_ops smmu_iommu_ops = { > > .pgsize_bitmap = SMMU_IOMMU_PGSIZES, > > }; > > > > +/* Should be in the order of enum */ > > +static const char * const smmu_debugfs_mc[] = { "mc", }; > > +static const char * const smmu_debugfs_cache[] = { "tlb", "ptc", }; > > + > > +static ssize_t smmu_debugfs_stats_write(struct file *file, > > + const char __user *buffer, > > + size_t count, loff_t *pos) > > +{ > > + struct smmu_device *smmu; > > + struct dentry *dent; > > + int i, cache, mc; > > + enum { > > + _OFF = 0, > > + _ON, > > + _RESET, > > + }; > > + const char * const command[] = { > > + [_OFF] = "off", > > + [_ON] = "on", > > + [_RESET] = "reset", > > + }; > > + char str[] = "reset"; > > + u32 val; > > + size_t offs; > > + > > + count = min_t(size_t, count, sizeof(str)); > > + if (copy_from_user(str, buffer, count)) > > + return -EINVAL; > > + > > + for (i = 0; i < ARRAY_SIZE(command); i++) > > + if (strncmp(str, command[i], > > + strlen(command[i])) == 0) > > + break; > > + > > + if (i == ARRAY_SIZE(command)) > > + return -EINVAL; > > + > > + dent = file->f_dentry; > > + cache = (int)dent->d_inode->i_private; > > cache you can figure out by the filename. In fact, it would be much > better to have tlc and ptc directories with a "status" filename which > you write ON/OFF/RESET or enable/disable/reset to trigger what you need. Actually I also considered {ptc,tlb} directories, but I thought that those might be residual, or nested one more unnecessarily. The current usage is: $ echo "reset" > /sys/kernel/debug/smmu/mc/{tlb,ptc} $ echo "on" > /sys/kernel/debug/smmu/mc/{tlb,ptc} $ echo "off" > /sys/kernel/debug/smmu/mc/{tlb,ptc} $ cat /sys/kernel/debug/smmu/mc/{tlb,ptc} hit:0014910c miss:00014d22 The above format is: hit:<HIT count><SPC>miss:<MISS count><SPC><CR+LF> fscanf(fp, "hit:%lx miss:%lx", &hit, &miss); If {ptc,tlb} was dir, the usage would be: $ echo "reset" > /sys/kernel/debug/smmu/mc/{tlb,ptc}/status $ echo "on" > /sys/kernel/debug/smmu/mc/{tlb,ptc}/status $ echo "off" > /sys/kernel/debug/smmu/mc/{tlb,ptc}/status $ cat /sys/kernel/debug/smmu/mc/{tlb,ptc}/data hit:0014910c miss:00014d22 One advantage of dirs could be, you may be able to check the current status by reading "status". It might be less likely read back practically because if writing succeeded, the state should be what was written. > For that to work, you should probably hold tlb and ptc on an array of > some sort, and pass those as data to their respective "status" files as > the data field. If tlb and ptc are properly defined structures which can > point back to smmu, then you have everything you need. I also considered to introduce new structure like what you suggested below, but I felt that the parent<-chile relationships are already in directory hierarchy, and I wanted to avoid the residual data with introducing new structures. Instead of introducing new structure, those parent<-child relationships are always gotton from debugfs directory hierarchy on demand. That was why I wanted to put data in debugfs dir. With debugfs directories having private data, the connections between entities would be kept in filesystem. I've already sent another version of patch(v2, *1), which passes all necessary data to a file, put in a structure. This v2 patch may be a little bit simliear to what Felipe suggested below. *1: http://lists.linuxfoundation.org/pipermail/iommu/2012-August/004535.html > I mean something like: > > struct smmu; > > struct mc { > const char *name; > void __iomem *regs; > > struct smmu *smmu; > }; > > struct smmu { > struct mc mc[2]; /*what does mc stand for ? memory controller ? */ > > ... > }; > > debugfs_create_dir(smmu); > debugfs_create_dir(mc); > debugfs_create_dir(smmu->mc[1].name); > debugfs_create_dir(smmu->mc[2].name); > debugfs_create_file(&smmu->mc[1], status); > debugfs_create_file(&smmu->mc[2], status); > > or something similar. You will avoid all the trickery you did here to > achieve what you need. > > > + mc = (int)dent->d_parent->d_inode->i_private; > > + smmu = dent->d_parent->d_parent->d_inode->i_private; > > + > > + offs = SMMU_CACHE_CONFIG(cache); > > + val = smmu_read(smmu, offs); > > + switch (i) { > > + case _OFF: > > + val &= ~SMMU_CACHE_CONFIG_STATS_ENABLE; > > + val &= ~SMMU_CACHE_CONFIG_STATS_TEST; > > + smmu_write(smmu, val, offs); > > + break; > > + case _ON: > > + val |= SMMU_CACHE_CONFIG_STATS_ENABLE; > > + val &= ~SMMU_CACHE_CONFIG_STATS_TEST; > > + smmu_write(smmu, val, offs); > > + break; > > + case _RESET: > > + val |= SMMU_CACHE_CONFIG_STATS_TEST; > > + smmu_write(smmu, val, offs); > > + val &= ~SMMU_CACHE_CONFIG_STATS_TEST; > > + smmu_write(smmu, val, offs); > > + break; > > + default: > > + BUG(); > > + break; > > + } > > + > > + dev_dbg(smmu->dev, "%s() %08x, %08x @%08x\n", __func__, > > + val, smmu_read(smmu, offs), offs); > > + > > + return count; > > +} > > + > > +static int smmu_debugfs_stats_show(struct seq_file *s, void *v) > > +{ > > + struct smmu_device *smmu; > > + struct dentry *dent; > > + int i, cache, mc; > > + const char * const stats[] = { "hit", "miss", }; > > + > > + dent = d_find_alias(s->private); > > + cache = (int)dent->d_inode->i_private; > > + mc = (int)dent->d_parent->d_inode->i_private; > > + smmu = dent->d_parent->d_parent->d_inode->i_private; > > + > > + for (i = 0; i < ARRAY_SIZE(stats); i++) { > > + u32 val; > > + size_t offs; > > + > > + offs = SMMU_STATS_CACHE_COUNT(mc, cache, i); > > + val = smmu_read(smmu, offs); > > + seq_printf(s, "%s:%08x ", stats[i], val); > > + > > + dev_dbg(smmu->dev, "%s() %s %08x @%08x\n", __func__, > > + stats[i], val, offs); > > + } > > + seq_printf(s, "\n"); > > + > > + return 0; > > +} > > + > > +static int smmu_debugfs_stats_open(struct inode *inode, struct file *file) > > +{ > > + return single_open(file, smmu_debugfs_stats_show, inode); > > +} > > + > > +static const struct file_operations smmu_debugfs_stats_fops = { > > + .open = smmu_debugfs_stats_open, > > + .read = seq_read, > > + .llseek = seq_lseek, > > + .release = single_release, > > + .write = smmu_debugfs_stats_write, > > +}; > > + > > +static void smmu_debugfs_delete(struct smmu_device *smmu) > > +{ > > + debugfs_remove_recursive(smmu->debugfs_root); > > +} > > + > > +static void smmu_debugfs_create(struct smmu_device *smmu) > > +{ > > + int i; > > + struct dentry *root; > > + > > + root = debugfs_create_file(dev_name(smmu->dev), > > + S_IFDIR | S_IRWXU | S_IRUGO | S_IXUGO, > > + NULL, smmu, NULL); > > directories don't need data. You don't even have a file_operations > structure so when exactly are you going to access the data ? What you > did above is actually wrong. You need to either patch this ASAP or drop > the patch you wrote and rewrite the whole debugfs support. > > > + if (!root) > > + goto err_out; > > + smmu->debugfs_root = root; > > + > > + for (i = 0; i < ARRAY_SIZE(smmu_debugfs_mc); i++) { > > + int j; > > + struct dentry *mc; > > + > > + mc = debugfs_create_file(smmu_debugfs_mc[i], > > + S_IFDIR | S_IRWXU | S_IRUGO | S_IXUGO, > > + root, (void *)i, NULL); > > likewise here. What would you use that index for ? Even if you were to > access it, how would you use it ? Not to mention that you never, ever > access the private_data of the directory :-) > > Just convert these two to the proper debugfs_create_dir() > > > + if (!mc) > > + goto err_out; > > + > > + for (j = 0; j < ARRAY_SIZE(smmu_debugfs_cache); j++) { > > + struct dentry *cache; > > + > > + cache = debugfs_create_file(smmu_debugfs_cache[j], > > + S_IWUGO | S_IRUGO, mc, > > + (void *)j, > > + &smmu_debugfs_stats_fops); > > it would be far better to pass a structure which you actually need. In > this case 'smmu'. That will be a lot more useful for your code. ^ permalink raw reply [flat|nested] 17+ messages in thread
[parent not found: <20120815093421.c08fdbbf4d7ce6c3986861f2-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>]
* Re: [PATCH 2/2] iommu/tegra: smmu: Use __debugfs_create_dir [not found] ` <20120815093421.c08fdbbf4d7ce6c3986861f2-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> @ 2012-08-15 7:07 ` Felipe Balbi 0 siblings, 0 replies; 17+ messages in thread From: Felipe Balbi @ 2012-08-15 7:07 UTC (permalink / raw) To: Hiroshi Doyu Cc: Grant Likely, Stephen Warren, Greg Kroah-Hartman, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, balbi-l0cyMroinI0@public.gmane.org, Chris Wright, iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org, Al Viro, linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org [-- Attachment #1.1: Type: text/plain, Size: 5131 bytes --] Hi, On Wed, Aug 15, 2012 at 09:34:21AM +0300, Hiroshi Doyu wrote: > > > @@ -892,6 +909,164 @@ static struct iommu_ops smmu_iommu_ops = { > > > .pgsize_bitmap = SMMU_IOMMU_PGSIZES, > > > }; > > > > > > +/* Should be in the order of enum */ > > > +static const char * const smmu_debugfs_mc[] = { "mc", }; > > > +static const char * const smmu_debugfs_cache[] = { "tlb", "ptc", }; > > > + > > > +static ssize_t smmu_debugfs_stats_write(struct file *file, > > > + const char __user *buffer, > > > + size_t count, loff_t *pos) > > > +{ > > > + struct smmu_device *smmu; > > > + struct dentry *dent; > > > + int i, cache, mc; > > > + enum { > > > + _OFF = 0, > > > + _ON, > > > + _RESET, > > > + }; > > > + const char * const command[] = { > > > + [_OFF] = "off", > > > + [_ON] = "on", > > > + [_RESET] = "reset", > > > + }; > > > + char str[] = "reset"; > > > + u32 val; > > > + size_t offs; > > > + > > > + count = min_t(size_t, count, sizeof(str)); > > > + if (copy_from_user(str, buffer, count)) > > > + return -EINVAL; > > > + > > > + for (i = 0; i < ARRAY_SIZE(command); i++) > > > + if (strncmp(str, command[i], > > > + strlen(command[i])) == 0) > > > + break; > > > + > > > + if (i == ARRAY_SIZE(command)) > > > + return -EINVAL; > > > + > > > + dent = file->f_dentry; > > > + cache = (int)dent->d_inode->i_private; > > > > cache you can figure out by the filename. In fact, it would be much > > better to have tlc and ptc directories with a "status" filename which > > you write ON/OFF/RESET or enable/disable/reset to trigger what you need. > > Actually I also considered {ptc,tlb} directories, but I thought that > those might be residual, or nested one more unnecessarily. > > The current usage is: > > $ echo "reset" > /sys/kernel/debug/smmu/mc/{tlb,ptc} > $ echo "on" > /sys/kernel/debug/smmu/mc/{tlb,ptc} > $ echo "off" > /sys/kernel/debug/smmu/mc/{tlb,ptc} > $ cat /sys/kernel/debug/smmu/mc/{tlb,ptc} > hit:0014910c miss:00014d22 > > The above format is: > hit:<HIT count><SPC>miss:<MISS count><SPC><CR+LF> if you're just printing hit and miss count, wouldn't it be a bit more human-friendly to print it in decimal rather than hex ? no strong feelings against either way, just thought I'd mention it. > fscanf(fp, "hit:%lx miss:%lx", &hit, &miss); > > > If {ptc,tlb} was dir, the usage would be: > > $ echo "reset" > /sys/kernel/debug/smmu/mc/{tlb,ptc}/status > $ echo "on" > /sys/kernel/debug/smmu/mc/{tlb,ptc}/status > $ echo "off" > /sys/kernel/debug/smmu/mc/{tlb,ptc}/status > $ cat /sys/kernel/debug/smmu/mc/{tlb,ptc}/data > hit:0014910c miss:00014d22 > > One advantage of dirs could be, you may be able to check the current > status by reading "status". It might be less likely read back > practically because if writing succeeded, the state should be what was > written. sure. > > For that to work, you should probably hold tlb and ptc on an array of > > some sort, and pass those as data to their respective "status" files as > > the data field. If tlb and ptc are properly defined structures which can > > point back to smmu, then you have everything you need. > > I also considered to introduce new structure like what you suggested > below, but I felt that the parent<-chile relationships are already in > directory hierarchy, and I wanted to avoid the residual data with > introducing new structures. Instead of introducing new structure, > those parent<-child relationships are always gotton from debugfs > directory hierarchy on demand. That was why I wanted to put data in > debugfs dir. With debugfs directories having private data, the > connections between entities would be kept in filesystem. fair enough. > I've already sent another version of patch(v2, *1), which passes all > necessary data to a file, put in a structure. This v2 patch may be a > little bit simliear to what Felipe suggested below. I looked over that, but I'm not sure you should introduce that smmu_debugfs_info structure. Look at what we do on drivers/usb/dwc3/debugfs.c, we don't add any extra structures for debugfs, we use what the driver already has (struct dwc3-only, currently). If we were to add debgufs support for each USB endpoint, I would pass struct dwc3_ep as data for the files. See that I would still be able to access struct dwc3, should I need it, because struct dwc3_ep knows which struct dwc3 it belongs to. That's what I meant when I suggested adding more structures, not something for debugfs-only, but something for the whole driver to use. Just re-design the driver a little bit and you won't need to allocate memory when creating debugfs directories, because the data you need is already available. -- balbi [-- Attachment #1.2: Digital signature --] [-- Type: application/pgp-signature, Size: 836 bytes --] [-- Attachment #2: Type: text/plain, Size: 190 bytes --] _______________________________________________ iommu mailing list iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org https://lists.linuxfoundation.org/mailman/listinfo/iommu ^ permalink raw reply [flat|nested] 17+ messages in thread
* [RFC][PATCH 0/2] debugfs: Allow debugfs_create_dir() to take data from caller [not found] ` <1344407073-12030-1-git-send-email-hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> 2012-08-08 6:24 ` [PATCH 1/2] debugfs: Allow debugfs_create_dir() to take data Hiroshi Doyu 2012-08-08 6:24 ` [PATCH 2/2] iommu/tegra: smmu: Use __debugfs_create_dir Hiroshi Doyu @ 2012-08-08 6:28 ` Hiroshi Doyu 2 siblings, 0 replies; 17+ messages in thread From: Hiroshi Doyu @ 2012-08-08 6:28 UTC (permalink / raw) To: Hiroshi Doyu Cc: linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org, Al Viro Added missing Subject: [RFC][PATCH 0/2] debugfs: Allow debugfs_create_dir() to take data from caller On Wed, 8 Aug 2012 08:24:31 +0200 Hiroshi Doyu <hdoyu@nvidia.com> wrote: > The commit c3b1a35 "debugfs: make sure that debugfs_create_file() gets > used only for regulars" doesn't allow to use debugfs_create_file() for > creating directory, and the current debugfs_create_dir() cannot take > the private data from caller. There are some cases that we want to pass some > client data to dir, especially when dir is nested deeply. We can work > around to pass all necessary data with some invented data structure to > the end files, but if directory itself had private data, we could > avoid to introduce new structures just to pass data to end files. > > For example, tegra iommu(smmu) case, debugfs structure could be as > below. > > sys/ > └── kernel > └── debug > ├── smmu.0 > │ ├── mc > │ │ ├── ptc > │ │ └── tlb > │ └── mc0 > │ ├── ptc > │ └── tlb > └── smmu.1 > ├── mc > │ ├── ptc > │ └── tlb > ├── mc0 > │ ├── ptc > │ └── tlb > └── mc1 > ├── ptc > └── tlb > > The end files, {ptc,tlb} depend on which mc? to belong to, and > which smmu.? to belong to. The parent data can be accessed from those > end files if necessary. > > dent = d_find_alias(s->private); > cache = (int)dent->d_inode->i_private; > mc = (int)dent->d_parent->d_inode->i_private; > smmu = dent->d_parent->d_parent->d_inode->i_private; > > The original tegra smmu debugfs patch is: > http://lists.linuxfoundation.org/pipermail/iommu/2012-August/004507.html > > Hiroshi Doyu (2): > debugfs: Allow debugfs_create_dir() to take data > iommu/tegra: smmu: Use __debugfs_create_dir > > drivers/iommu/tegra-smmu.c | 4 +--- > fs/debugfs/inode.c | 7 ++++--- > include/linux/debugfs.h | 9 ++++++++- > 3 files changed, 13 insertions(+), 7 deletions(-) > > -- > 1.7.5.4 > _______________________________________________ iommu mailing list iommu@lists.linux-foundation.org https://lists.linuxfoundation.org/mailman/listinfo/iommu ^ permalink raw reply [flat|nested] 17+ messages in thread
end of thread, other threads:[~2012-09-17 16:28 UTC | newest] Thread overview: 17+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2012-08-08 6:24 =?y?q?=5BRFC=5D=5BPATCH=200/2=5D=20debugfs=3A=20Allow=20debugfs=5Fcreate=5Fdir=28=29=20to=20take=20data=20from=20caller?= Hiroshi Doyu [not found] ` <1344407073-12030-1-git-send-email-hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> 2012-08-08 6:24 ` [PATCH 1/2] debugfs: Allow debugfs_create_dir() to take data Hiroshi Doyu [not found] ` <1344407073-12030-2-git-send-email-hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> 2012-08-08 13:34 ` Greg Kroah-Hartman [not found] ` <20120808133427.GA14417-U8xfFu+wG4EAvxtiuMwx3w@public.gmane.org> 2012-08-09 12:56 ` Hiroshi Doyu [not found] ` <20120809155624.b781edae9efa7c51faf6c31c-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> 2012-08-15 5:40 ` Hiroshi Doyu [not found] ` <20120815084008.3d8f4ac20af5dc3372cd7681-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> 2012-08-15 13:40 ` Greg Kroah-Hartman 2012-08-15 5:47 ` [v2 1/1] iommu/tegra: smmu: Use debugfs_create_dir for directory Hiroshi Doyu [not found] ` <1345009652-13408-1-git-send-email-hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> 2012-08-15 16:13 ` Stephen Warren [not found] ` <502BCA9E.5090206-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org> 2012-09-04 6:51 ` Hiroshi Doyu [not found] ` <20120904.095134.292349834288373260.hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> 2012-09-10 18:24 ` Stephen Warren [not found] ` <504E3046.9080103-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org> 2012-09-17 16:28 ` joerg.roedel-5C7GfCeVMHo 2012-08-08 6:24 ` [PATCH 2/2] iommu/tegra: smmu: Use __debugfs_create_dir Hiroshi Doyu [not found] ` <1344407073-12030-3-git-send-email-hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> 2012-08-08 15:11 ` Felipe Balbi [not found] ` <20120808151128.GC9091-S8G//mZuvNWo5Im9Ml3/Zg@public.gmane.org> 2012-08-08 15:31 ` Felipe Balbi [not found] ` <20120808153100.GE9091-S8G//mZuvNWo5Im9Ml3/Zg@public.gmane.org> 2012-08-15 6:34 ` Hiroshi Doyu [not found] ` <20120815093421.c08fdbbf4d7ce6c3986861f2-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> 2012-08-15 7:07 ` Felipe Balbi 2012-08-08 6:28 ` [RFC][PATCH 0/2] debugfs: Allow debugfs_create_dir() to take data from caller Hiroshi Doyu
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).