From: Wolfgang Mauerer <wolfgang.maue...@siemens.com>

Signed-off-by: Wolfgang Mauerer <wolfgang.maue...@siemens.com>
Signed-off-by: Jan Kiszka <jan.kis...@siemens.com>
---
 ksrc/skins/native/event.c |   40 +++++++++++++++++++++-------------------
 1 files changed, 21 insertions(+), 19 deletions(-)

diff --git a/ksrc/skins/native/event.c b/ksrc/skins/native/event.c
index 5b2a8b5..d674a89 100644
--- a/ksrc/skins/native/event.c
+++ b/ksrc/skins/native/event.c
@@ -47,18 +47,16 @@
 
 #ifdef CONFIG_PROC_FS
 
-static int __event_read_proc(char *page,
-                            char **start,
-                            off_t off, int count, int *eof, void *data)
+#include <linux/seq_file.h>
+
+static int event_seq_show(struct seq_file *f, void *v)
 {
-       RT_EVENT *event = (RT_EVENT *)data;
-       char *p = page;
-       int len;
+       RT_EVENT *event = (RT_EVENT *)f->private;
        spl_t s;
 
        xnlock_get_irqsave(&nklock, s);
 
-       p += sprintf(p, "=0x%lx\n", event->value);
+       seq_printf(f, "=0x%lx\n", event->value);
 
        if (xnsynch_nsleepers(&event->synch_base) > 0) {
                xnpholder_t *holder;
@@ -74,8 +72,8 @@ static int __event_read_proc(char *page,
                            (task->wait_args.event.
                             mode & EV_ANY) ? "any" : "all";
                        unsigned long mask = task->wait_args.event.mask;
-                       p += sprintf(p, "+%s (mask=0x%lx, %s)\n",
-                                    xnthread_name(sleeper), mask, mode);
+                       seq_printf(f, "+%s (mask=0x%lx, %s)\n",
+                                  xnthread_name(sleeper), mask, mode);
                        holder =
                            nextpq(xnsynch_wait_queue(&event->synch_base),
                                   holder);
@@ -84,18 +82,21 @@ static int __event_read_proc(char *page,
 
        xnlock_put_irqrestore(&nklock, s);
 
-       len = (p - page) - off;
-       if (len <= off + count)
-               *eof = 1;
-       *start = page + off;
-       if (len > count)
-               len = count;
-       if (len < 0)
-               len = 0;
+       return 0;
+}
 
-       return len;
+static int event_seq_open(struct inode *inode, struct file *file)
+{
+       return single_open(file, event_seq_show, PDE(inode)->data);
 }
 
+static struct file_operations event_proc_fops = {
+        .owner          = THIS_MODULE,
+        .open           = event_seq_open,
+        .read           = seq_read,
+        .llseek         = seq_lseek,
+};
+
 extern xnptree_t __native_ptree;
 
 static xnpnode_t __event_pnode = {
@@ -103,8 +104,9 @@ static xnpnode_t __event_pnode = {
        .dir = NULL,
        .type = "events",
        .entries = 0,
-       .read_proc = &__event_read_proc,
+       .read_proc = NULL,
        .write_proc = NULL,
+       .fops = &event_proc_fops,
        .root = &__native_ptree,
 };
 
-- 
1.6.0.2


_______________________________________________
Xenomai-core mailing list
Xenomai-core@gna.org
https://mail.gna.org/listinfo/xenomai-core

Reply via email to