* [RFC] [Patch 1/4] statistics: no include hell for users
@ 2007-06-06 21:33 Martin Peschke
2007-06-06 21:39 ` Dave Hansen
0 siblings, 1 reply; 3+ messages in thread
From: Martin Peschke @ 2007-06-06 21:33 UTC (permalink / raw)
To: linux-kernel; +Cc: a.p.zijlstra, jbaron, rostedt, billh, mingo, linux-s390
Cleaning up inclusion of header files. Don't want to create
an include hell for users.
Maintain void pointers instead of dentry pointers for debugfs files.
We never poke inside those dentries anyway. We just keep them in order
to pass them back as a kind of handle to debugfs on cleanup.
Getting rid of seq_file as parameter to the label-function.
Now we just pass a buffer to the label-function.
Signed-off-by: Martin Peschke <mp3@de.ibm.com>
---
include/linux/statistic.h | 11 ++++-------
lib/statistic.c | 23 +++++++++++++++++++----
2 files changed, 23 insertions(+), 11 deletions(-)
Index: linux/include/linux/statistic.h
===================================================================
--- linux.orig/include/linux/statistic.h
+++ linux/include/linux/statistic.h
@@ -23,9 +23,7 @@
#ifndef STATISTIC_H
#define STATISTIC_H
-#include <linux/fs.h>
#include <linux/types.h>
-#include <linux/percpu.h>
/**
* struct statistic_info - description of a class of statistics
@@ -124,17 +122,16 @@ struct statistic {
struct statistic_interface {
/* private: */
struct list_head list;
- struct dentry *debugfs_dir;
- struct dentry *data_file;
- struct dentry *def_file;
+ void *debugfs_dir;
+ void *data_file;
+ void *def_file;
/* public: */
struct statistic *stat;
struct statistic_info *info;
int number;
int (*pull)(struct statistic_interface *interface);
void (*label)(struct statistic_interface *interface,
- int i, void *key,
- struct seq_file *seq);
+ int i, void *key, char *buf, int size);
void *private;
};
Index: linux/lib/statistic.c
===================================================================
--- linux.orig/lib/statistic.c
+++ linux/lib/statistic.c
@@ -483,6 +483,23 @@ static void statistic_parse_line(struct
/* sequential files comprising user interface */
+#define STATISTIC_LABEL_SIZE 128
+static void statistic_label(struct statistic_interface *interface, int i,
+ void *key, struct seq_file *seq)
+{
+ struct statistic_info *info = &interface->info[i];
+ char *buf;
+
+ if (!(info->flags & STATISTIC_FLAGS_LABEL))
+ return;
+ buf = kzalloc(STATISTIC_LABEL_SIZE, GFP_ATOMIC);
+ if (!buf)
+ return;
+ interface->label(interface, i, key, buf, STATISTIC_LABEL_SIZE - 1);
+ seq_printf(seq, "%s", buf);
+ kfree(buf);
+}
+
struct statistic_seq_private {
struct statistic_interface *interface;
int i;
@@ -995,8 +1012,7 @@ static void _statistic_data_histogram(st
int i)
{
seq_printf(seq, "%s %s%Ld %Lu ", info->name, prefix, bound, hits);
- if (info->flags & STATISTIC_FLAGS_LABEL)
- interface->label(interface, i, &bound, seq);
+ statistic_label(interface, i, &bound, seq);
seq_printf(seq, "\n");
}
@@ -1218,8 +1234,7 @@ static void statistic_data_sparse(struct
seq_printf(seq, "0x%Lx ",
*(signed long long *)entry->key);
seq_printf(seq, "%Lu ", (unsigned long long)entry->hits);
- if (info->flags & STATISTIC_FLAGS_LABEL)
- interface->label(interface, i, entry->key, seq);
+ statistic_label(interface, i, entry->key, seq);
seq_printf(seq, "\n");
}
}
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [RFC] [Patch 1/4] statistics: no include hell for users
2007-06-06 21:33 [RFC] [Patch 1/4] statistics: no include hell for users Martin Peschke
@ 2007-06-06 21:39 ` Dave Hansen
2007-06-07 0:32 ` Martin Peschke
0 siblings, 1 reply; 3+ messages in thread
From: Dave Hansen @ 2007-06-06 21:39 UTC (permalink / raw)
To: Martin Peschke
Cc: linux-kernel, a.p.zijlstra, jbaron, rostedt, billh, mingo,
linux-s390
On Wed, 2007-06-06 at 23:33 +0200, Martin Peschke wrote:
>
> struct statistic_interface {
> /* private: */
> struct list_head list;
> - struct dentry *debugfs_dir;
> - struct dentry *data_file;
> - struct dentry *def_file;
> + void *debugfs_dir;
> + void *data_file;
> + void *def_file;
If you don't actually dereference the pointer, you should just be able
to declare:
struct dentry;
and be done with it, right? You don't _need_ the includes to have just
pointers.
-- Dave
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [RFC] [Patch 1/4] statistics: no include hell for users
2007-06-06 21:39 ` Dave Hansen
@ 2007-06-07 0:32 ` Martin Peschke
0 siblings, 0 replies; 3+ messages in thread
From: Martin Peschke @ 2007-06-07 0:32 UTC (permalink / raw)
To: Dave Hansen
Cc: linux-kernel, a.p.zijlstra, jbaron, rostedt, billh, mingo,
linux-s390
Dave Hansen wrote:
> On Wed, 2007-06-06 at 23:33 +0200, Martin Peschke wrote:
>> struct statistic_interface {
>> /* private: */
>> struct list_head list;
>> - struct dentry *debugfs_dir;
>> - struct dentry *data_file;
>> - struct dentry *def_file;
>> + void *debugfs_dir;
>> + void *data_file;
>> + void *def_file;
>
> If you don't actually dereference the pointer, you should just be able
> to declare:
>
> struct dentry;
>
> and be done with it, right? You don't _need_ the includes to have just
> pointers.
Ah, looks like an established trick in kernel include files.
I guess I can revert the other, seq_file related change then as well.
Thank you. Will change my local copy.
Martin
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2007-06-07 0:32 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-06-06 21:33 [RFC] [Patch 1/4] statistics: no include hell for users Martin Peschke
2007-06-06 21:39 ` Dave Hansen
2007-06-07 0:32 ` Martin Peschke
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox