Module: xenomai-forge
Branch: next
Commit: 420cb0c12bd9d0b428b208cf2dced9cedfec456c
URL:    
http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=420cb0c12bd9d0b428b208cf2dced9cedfec456c

Author: Jan Kiszka <jan.kis...@siemens.com>
Date:   Wed Aug 21 09:02:01 2013 +0200

cobalt/vfile: Adjust procfs usage to latest kernel API

proc_dir_entry became opaque and create_proc_entry is gone now. Switch
to the new patterns and wrap PDE_DATA as well as proc_create_data for
older kernels.

Signed-off-by: Jan Kiszka <jan.kis...@siemens.com>

---

 .../cobalt/include/asm-generic/xenomai/wrappers.h  |   11 +++++++
 kernel/cobalt/vfile.c                              |   32 +++++++------------
 2 files changed, 23 insertions(+), 20 deletions(-)

diff --git a/kernel/cobalt/include/asm-generic/xenomai/wrappers.h 
b/kernel/cobalt/include/asm-generic/xenomai/wrappers.h
index 02eeed0..601fc30 100644
--- a/kernel/cobalt/include/asm-generic/xenomai/wrappers.h
+++ b/kernel/cobalt/include/asm-generic/xenomai/wrappers.h
@@ -72,5 +72,16 @@ unsigned long vm_mmap(struct file *file, unsigned long addr,
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(3,9,0)
 #include <linux/sched/rt.h>
 #endif /* LINUX >= 3.9.0 */
+ 
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0)
+#include <linux/proc_fs.h>
+
+#define PDE_DATA(inode)        PROC_I(inode)->pde->data
+
+static inline void proc_remove(struct proc_dir_entry *pde)
+{
+       remove_proc_entry(pde->name, pde->parent);
+}
+#endif /* < 3.10 */
 
 #endif /* _COBALT_ASM_GENERIC_WRAPPERS_H */
diff --git a/kernel/cobalt/vfile.c b/kernel/cobalt/vfile.c
index 6907f2e..375cc79 100644
--- a/kernel/cobalt/vfile.c
+++ b/kernel/cobalt/vfile.c
@@ -79,6 +79,7 @@
 #include <cobalt/kernel/lock.h>
 #include <cobalt/kernel/assert.h>
 #include <cobalt/kernel/vfile.h>
+#include <asm/xenomai/wrappers.h>
 
 /**
  * @var struct xnvfile_directory nkvfroot
@@ -148,8 +149,7 @@ static void vfile_snapshot_free(struct 
xnvfile_snapshot_iterator *it, void *buf)
 
 static int vfile_snapshot_open(struct inode *inode, struct file *file)
 {
-       struct proc_dir_entry *pde = PDE(inode);
-       struct xnvfile_snapshot *vfile = pde->data;
+       struct xnvfile_snapshot *vfile = PDE_DATA(inode);
        struct xnvfile_snapshot_ops *ops = vfile->ops;
        struct xnvfile_snapshot_iterator *it;
        int revtag, ret, nrdata;
@@ -318,8 +318,8 @@ static int vfile_snapshot_release(struct inode *inode, 
struct file *file)
 ssize_t vfile_snapshot_write(struct file *file, const char __user *buf,
                             size_t size, loff_t *ppos)
 {
-       struct proc_dir_entry *pde = PDE(file->f_path.dentry->d_inode);
-       struct xnvfile_snapshot *vfile = pde->data;
+       struct xnvfile_snapshot *vfile =
+               PDE_DATA(file->f_path.dentry->d_inode);
        struct xnvfile_input input;
        ssize_t ret;
 
@@ -414,12 +414,10 @@ int xnvfile_init_snapshot(const char *name,
 
        mode = vfile->ops->store ? 0644 : 0444;
        ppde = parent->entry.pde;
-       pde = create_proc_entry(name, mode, ppde);
+       pde = proc_create_data(name, mode, ppde, &vfile_snapshot_fops, vfile);
        if (pde == NULL)
                return -ENOMEM;
 
-       pde->proc_fops = &vfile_snapshot_fops;
-       pde->data = vfile;
        vfile->entry.parent = parent;
        vfile->entry.pde = pde;
 
@@ -505,8 +503,7 @@ static struct seq_operations vfile_regular_ops = {
 
 static int vfile_regular_open(struct inode *inode, struct file *file)
 {
-       struct proc_dir_entry *pde = PDE(inode);
-       struct xnvfile_regular *vfile = pde->data;
+       struct xnvfile_regular *vfile = PDE_DATA(inode);
        struct xnvfile_regular_ops *ops = vfile->ops;
        struct xnvfile_regular_iterator *it;
        struct seq_file *seq;
@@ -574,8 +571,8 @@ static int vfile_regular_release(struct inode *inode, 
struct file *file)
 ssize_t vfile_regular_write(struct file *file, const char __user *buf,
                            size_t size, loff_t *ppos)
 {
-       struct proc_dir_entry *pde = PDE(file->f_path.dentry->d_inode);
-       struct xnvfile_regular *vfile = pde->data;
+       struct xnvfile_regular *vfile =
+               PDE_DATA(file->f_path.dentry->d_inode);
        struct xnvfile_input input;
        ssize_t ret;
 
@@ -650,12 +647,10 @@ int xnvfile_init_regular(const char *name,
 
        mode = vfile->ops->store ? 0644 : 0444;
        ppde = parent->entry.pde;
-       pde = create_proc_entry(name, mode, ppde);
+       pde = proc_create_data(name, mode, ppde, &vfile_regular_fops, vfile);
        if (pde == NULL)
                return -ENOMEM;
 
-       pde->proc_fops = &vfile_regular_fops;
-       pde->data = vfile;
        vfile->entry.parent = parent;
        vfile->entry.pde = pde;
 
@@ -693,7 +688,7 @@ int xnvfile_init_dir(const char *name,
                parent = &sysroot;
 
        ppde = parent->entry.pde;
-       pde = create_proc_entry(name, S_IFDIR, ppde);
+       pde = proc_mkdir(name, ppde);
        if (pde == NULL)
                return -ENOMEM;
 
@@ -762,10 +757,7 @@ EXPORT_SYMBOL_GPL(xnvfile_init_link);
  */
 void xnvfile_destroy(struct xnvfile *vfile)
 {
-       struct proc_dir_entry *ppde;
-
-       ppde = vfile->parent ? vfile->parent->entry.pde : nkvfroot.entry.pde;
-       remove_proc_entry(vfile->pde->name, ppde);
+       proc_remove(vfile->pde);
 }
 EXPORT_SYMBOL_GPL(xnvfile_destroy);
 
@@ -961,7 +953,7 @@ int __init xnvfile_init_root(void)
        struct xnvfile_directory *vdir = &nkvfroot;
        struct proc_dir_entry *pde;
 
-       pde = create_proc_entry("xenomai", S_IFDIR, NULL);
+       pde = proc_mkdir("xenomai", NULL);
        if (pde == NULL)
                return -ENOMEM;
 


_______________________________________________
Xenomai-git mailing list
Xenomai-git@xenomai.org
http://www.xenomai.org/mailman/listinfo/xenomai-git

Reply via email to