linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] debugfs: add get/set for atomic types
@ 2012-10-26 15:49 Seth Jennings
  2012-10-26 16:13 ` Greg Kroah-Hartman
  0 siblings, 1 reply; 4+ messages in thread
From: Seth Jennings @ 2012-10-26 15:49 UTC (permalink / raw)
  To: Greg Kroah-Hartman; +Cc: Seth Jennings, linux-kernel, Robert Jennings

debugfs currently lacks the ability to create attributes
that set/get atomic_t values.

This patch adds support for this through a new
debugfs_create_atomic_t() function.

Signed-off-by: Seth Jennings <sjenning@linux.vnet.ibm.com>
---
 fs/debugfs/file.c       |   42 ++++++++++++++++++++++++++++++++++++++++++
 include/linux/debugfs.h |    2 ++
 2 files changed, 44 insertions(+)

diff --git a/fs/debugfs/file.c b/fs/debugfs/file.c
index c5ca6ae..b6f163f 100644
--- a/fs/debugfs/file.c
+++ b/fs/debugfs/file.c
@@ -21,6 +21,7 @@
 #include <linux/debugfs.h>
 #include <linux/io.h>
 #include <linux/slab.h>
+#include <linux/atomic.h>
 
 static ssize_t default_read_file(struct file *file, char __user *buf,
 				 size_t count, loff_t *ppos)
@@ -403,6 +404,47 @@ struct dentry *debugfs_create_size_t(const char *name, umode_t mode,
 }
 EXPORT_SYMBOL_GPL(debugfs_create_size_t);
 
+static int debugfs_atomic_t_set(void *data, u64 val)
+{
+	atomic_set((atomic_t *)data, val);
+	return 0;
+}
+static int debugfs_atomic_t_get(void *data, u64 *val)
+{
+	*val = atomic_read((atomic_t *)data);
+	return 0;
+}
+DEFINE_SIMPLE_ATTRIBUTE(fops_atomic_t, debugfs_atomic_t_get,
+			debugfs_atomic_t_set, "%d\n");
+DEFINE_SIMPLE_ATTRIBUTE(fops_atomic_t_ro, debugfs_atomic_t_get, NULL, "%d\n");
+DEFINE_SIMPLE_ATTRIBUTE(fops_atomic_t_wo, NULL, debugfs_atomic_t_set, "%d\n");
+
+/**
+ * debugfs_create_atomic_t - create a debugfs file that is used to read and
+ * write an atomic_t value
+ * @name: a pointer to a string containing the name of the file to create.
+ * @mode: the permission that the file should have
+ * @parent: a pointer to the parent dentry for this file.  This should be a
+ *          directory dentry if set.  If this parameter is %NULL, then the
+ *          file will be created in the root of the debugfs filesystem.
+ * @value: a pointer to the variable that the file should read to and write
+ *         from.
+ */
+struct dentry *debugfs_create_atomic_t(const char *name, umode_t mode,
+				 struct dentry *parent, atomic_t *value)
+{
+	/* if there are no write bits set, make read only */
+	if (!(mode & S_IWUGO))
+		return debugfs_create_file(name, mode, parent, value,
+					&fops_atomic_t_ro);
+	/* if there are no read bits set, make write only */
+	if (!(mode & S_IRUGO))
+		return debugfs_create_file(name, mode, parent, value,
+					&fops_atomic_t_wo);
+
+	return debugfs_create_file(name, mode, parent, value, &fops_atomic_t);
+}
+EXPORT_SYMBOL_GPL(debugfs_create_atomic_t);
 
 static ssize_t read_file_bool(struct file *file, char __user *user_buf,
 			      size_t count, loff_t *ppos)
diff --git a/include/linux/debugfs.h b/include/linux/debugfs.h
index 66c434f..51fea70 100644
--- a/include/linux/debugfs.h
+++ b/include/linux/debugfs.h
@@ -79,6 +79,8 @@ struct dentry *debugfs_create_x64(const char *name, umode_t mode,
 				  struct dentry *parent, u64 *value);
 struct dentry *debugfs_create_size_t(const char *name, umode_t mode,
 				     struct dentry *parent, size_t *value);
+struct dentry *debugfs_create_atomic_t(const char *name, umode_t mode,
+				     struct dentry *parent, atomic_t *value);
 struct dentry *debugfs_create_bool(const char *name, umode_t mode,
 				  struct dentry *parent, u32 *value);
 
-- 
1.7.9.5


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH] debugfs: add get/set for atomic types
  2012-10-26 15:49 [PATCH] debugfs: add get/set for atomic types Seth Jennings
@ 2012-10-26 16:13 ` Greg Kroah-Hartman
  2012-10-26 18:46   ` Seth Jennings
  0 siblings, 1 reply; 4+ messages in thread
From: Greg Kroah-Hartman @ 2012-10-26 16:13 UTC (permalink / raw)
  To: Seth Jennings; +Cc: linux-kernel, Robert Jennings

On Fri, Oct 26, 2012 at 10:49:01AM -0500, Seth Jennings wrote:
> debugfs currently lacks the ability to create attributes
> that set/get atomic_t values.
> 
> This patch adds support for this through a new
> debugfs_create_atomic_t() function.

Why would you want to set an atomic variable type from userspace?  What
in-kernel code needs this?

thanks,

greg k-h

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] debugfs: add get/set for atomic types
  2012-10-26 16:13 ` Greg Kroah-Hartman
@ 2012-10-26 18:46   ` Seth Jennings
  2012-10-26 23:55     ` Greg Kroah-Hartman
  0 siblings, 1 reply; 4+ messages in thread
From: Seth Jennings @ 2012-10-26 18:46 UTC (permalink / raw)
  To: Greg Kroah-Hartman; +Cc: linux-kernel, Robert Jennings

On 10/26/2012 11:13 AM, Greg Kroah-Hartman wrote:
> On Fri, Oct 26, 2012 at 10:49:01AM -0500, Seth Jennings wrote:
>> debugfs currently lacks the ability to create attributes
>> that set/get atomic_t values.
>>
>> This patch adds support for this through a new
>> debugfs_create_atomic_t() function.
> 
> Why would you want to set an atomic variable type from userspace?

In my particular use case, I'm not setting from userspace, only getting.

All the other types are symmetric, being both settable and gettable,
so I was just trying to blend with the other types.

> What in-kernel code needs this?

None, yet.  I am working on code that does.

If you would rather me send this as part of the patchset for that
code, I can.  I just wanted to get this in early if I could since it
is functionality I can see others using.

For an example, see drivers/staging/ramster/zcache-main.c:132 where
both atomic and non-atomic version of stats are being maintained so
that the non-atomic version can be read by debugfs.

Beside not having an in-kernel user yet, does this approach look good
to you?

Seth


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] debugfs: add get/set for atomic types
  2012-10-26 18:46   ` Seth Jennings
@ 2012-10-26 23:55     ` Greg Kroah-Hartman
  0 siblings, 0 replies; 4+ messages in thread
From: Greg Kroah-Hartman @ 2012-10-26 23:55 UTC (permalink / raw)
  To: Seth Jennings; +Cc: linux-kernel, Robert Jennings

On Fri, Oct 26, 2012 at 01:46:38PM -0500, Seth Jennings wrote:
> On 10/26/2012 11:13 AM, Greg Kroah-Hartman wrote:
> > On Fri, Oct 26, 2012 at 10:49:01AM -0500, Seth Jennings wrote:
> >> debugfs currently lacks the ability to create attributes
> >> that set/get atomic_t values.
> >>
> >> This patch adds support for this through a new
> >> debugfs_create_atomic_t() function.
> > 
> > Why would you want to set an atomic variable type from userspace?
> 
> In my particular use case, I'm not setting from userspace, only getting.

That's good, you wouldn't want to set an atomic from userspace.

> All the other types are symmetric, being both settable and gettable,
> so I was just trying to blend with the other types.

Fair enough.

> > What in-kernel code needs this?
> 
> None, yet.  I am working on code that does.
> 
> If you would rather me send this as part of the patchset for that
> code, I can.  I just wanted to get this in early if I could since it
> is functionality I can see others using.
> 
> For an example, see drivers/staging/ramster/zcache-main.c:132 where
> both atomic and non-atomic version of stats are being maintained so
> that the non-atomic version can be read by debugfs.
> 
> Beside not having an in-kernel user yet, does this approach look good
> to you?

It looks reasonable, but please hold off and submit this as part of a
patch series that needs it.  No need to add it now.

thanks,

greg k-h

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2012-10-26 23:55 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-10-26 15:49 [PATCH] debugfs: add get/set for atomic types Seth Jennings
2012-10-26 16:13 ` Greg Kroah-Hartman
2012-10-26 18:46   ` Seth Jennings
2012-10-26 23:55     ` Greg Kroah-Hartman

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).