Thank you very much for the detailed explanation.
The updated patch is attached.

With best wishes,
Vladimir


Philippe Gerum wrote:
On Thu, 2009-06-11 at 12:16 +0200, Jan Kiszka wrote:
Vladimir Zapolskiy wrote:
Hi Jan,
I observed that LINUX_VERSION_CODE comparisons are common enough in
Xenomai code. Do you propose to make a separate header, which is
included from nucleus, drivers and arch files?
Yes, it's common, but we also keep a lot of wrapping in asm-*/wrappers.h.


No, it's not that common actually. Most of them are used in the HAL,
half of those in assembly files because we don't have assembly-level
wrappers, and the remaining spots are located in a few RT drivers
(namely serial, CAN and irqbench).

So the canonical way to fix this is indeed to add the proper wrapper to
include/asm-generic/wrappers.h. TIA,

Jan

PS: Please avoid top-posts.

>From aa0d1003333982f5840879d0b435b9673986ea2f Mon Sep 17 00:00:00 2001
From: Vladimir Zapolskiy <vladimir.zapols...@siemens.com>
Date: Thu, 11 Jun 2009 15:26:19 +0400
Subject: [PATCH] Made conditional inclusion of owner field in struct proc_dir_entry due to changes in 2.6.30.

Signed-off-by: Vladimir Zapolskiy <vladimir.zapols...@siemens.com>
---
 include/asm-generic/wrappers.h       |   13 +++++++++++++
 ksrc/arch/generic/hal.c              |    6 +++---
 ksrc/drivers/comedi/device.c         |    2 +-
 ksrc/drivers/comedi/rtdm_interface.c |    4 ++--
 ksrc/nucleus/registry.c              |    2 +-
 5 files changed, 20 insertions(+), 7 deletions(-)

diff --git a/include/asm-generic/wrappers.h b/include/asm-generic/wrappers.h
index 12e4070..cbb8c43 100644
--- a/include/asm-generic/wrappers.h
+++ b/include/asm-generic/wrappers.h
@@ -523,4 +523,17 @@ static inline int wrap_raise_cap(int cap)
 }
 #endif /* LINUX_VERSION_CODE >= 2.6.29 */
 
+#ifdef CONFIG_PROC_FS
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30)
+#include <linux/module.h>
+#include <linux/proc_fs.h>
+static inline void wrap_proc_dir_entry_owner(struct proc_dir_entry *entry)
+{
+    entry->owner = THIS_MODULE;
+}
+#else  /* LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30) */
+#define wrap_proc_dir_entry_owner(entry)
+#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30) */
+#endif /* CONFIG_PROC_FS */
+
 #endif /* _XENO_ASM_GENERIC_WRAPPERS_H */
diff --git a/ksrc/arch/generic/hal.c b/ksrc/arch/generic/hal.c
index e4f0f31..762e544 100644
--- a/ksrc/arch/generic/hal.c
+++ b/ksrc/arch/generic/hal.c
@@ -738,7 +738,7 @@ struct proc_dir_entry *rthal_add_proc_leaf(const char *name,
 	entry->data = data;
 	entry->read_proc = rdproc;
 	entry->write_proc = wrproc;
-	entry->owner = THIS_MODULE;
+	wrap_proc_dir_entry_owner(entry);
 
 	return entry;
 }
@@ -756,7 +756,7 @@ struct proc_dir_entry *rthal_add_proc_seq(const char *name,
 		return NULL;
 
 	entry->proc_fops = fops;
-	entry->owner = THIS_MODULE;
+	wrap_proc_dir_entry_owner(entry);
 
 	if (size)
 		entry->size = size;
@@ -773,7 +773,7 @@ static int rthal_proc_register(void)
 		return -1;
 	}
 
-	rthal_proc_root->owner = THIS_MODULE;
+	wrap_proc_dir_entry_owner(rthal_proc_root);
 
 	rthal_add_proc_leaf("hal", &hal_read_proc, NULL, NULL, rthal_proc_root);
 	rthal_add_proc_leaf("faults",
diff --git a/ksrc/drivers/comedi/device.c b/ksrc/drivers/comedi/device.c
index 51f1125..f60dfcd 100644
--- a/ksrc/drivers/comedi/device.c
+++ b/ksrc/drivers/comedi/device.c
@@ -144,7 +144,7 @@ int comedi_proc_attach(comedi_cxt_t * cxt)
 	entry->data = dev->transfer;
 	entry->write_proc = NULL;
 	entry->read_proc = comedi_rdproc_transfer;
-	entry->owner = THIS_MODULE;
+	wrap_proc_dir_entry_owner(entry);
 
       out_setup_proc_transfer:
 	/* Frees the file name buffer */
diff --git a/ksrc/drivers/comedi/rtdm_interface.c b/ksrc/drivers/comedi/rtdm_interface.c
index 7d78a45..d4ea5ac 100644
--- a/ksrc/drivers/comedi/rtdm_interface.c
+++ b/ksrc/drivers/comedi/rtdm_interface.c
@@ -78,7 +78,7 @@ int comedi_init_proc(void)
 	entry->data = NULL;
 	entry->write_proc = NULL;
 	entry->read_proc = comedi_rdproc_devs;
-	entry->owner = THIS_MODULE;
+	wrap_proc_dir_entry_owner(enrty);
 
 	/* Creates the drivers related file */
 	entry = create_proc_entry("drivers", 0444, comedi_proc_root);
@@ -93,7 +93,7 @@ int comedi_init_proc(void)
 	entry->data = NULL;
 	entry->write_proc = NULL;
 	entry->read_proc = comedi_rdproc_drvs;
-	entry->owner = THIS_MODULE;
+	wrap_proc_dir_entry_owner(enrty);
 
 	return 0;
 
diff --git a/ksrc/nucleus/registry.c b/ksrc/nucleus/registry.c
index 6c7ec20..6d67dfd 100644
--- a/ksrc/nucleus/registry.c
+++ b/ksrc/nucleus/registry.c
@@ -280,7 +280,7 @@ static struct proc_dir_entry *add_proc_link(const char *name,
 	if (!entry)
 		return NULL;
 
-	entry->owner = THIS_MODULE;
+	wrap_proc_dir_entry_owner(entry);
 
 	return entry;
 }
-- 
1.6.2.4

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

Reply via email to