Re: [Xenomai-core] Proposed arch/powerpc/sysdev/uic.c patch

2007-10-26 Thread Jan Kiszka
Philippe Gerum wrote:
 Jan Kiszka wrote:
 Philippe Gerum wrote:
 Steven A. Falco wrote:
 I applied the uic patch:

 diff --git a/arch/powerpc/sysdev/uic.c b/arch/powerpc/sysdev/uic.c
 index eeb38e2..5a38086 100644
 --- a/arch/powerpc/sysdev/uic.c
 +++ b/arch/powerpc/sysdev/uic.c
 @@ -48,7 +48,7 @@ struct uic {
 int index;
 int dcrbase;

 -spinlock_t lock;
 +ipipe_spinlock_t lock;

 /* The remapper for this UIC */
 struct irq_host*irqhost;

 However, this would not compile because of a type mismatch.  I have
 added the attached patch, and it now compiles and runs.  But I'm not
 sure if this is the right way to fix it.  Comments?

 This will work for the purpose of running an I-pipe enabled kernel, but
 would fail with CONFIG_IPIPE disabled. Since we need to provide both,
 I'm going to work on the proper patch for fixing the issue both ways.
 Still, your patch will work as expected for running Xenomai.
 To be consequent, we would have to wrap spin_lock_init just like the
 other operations. Suggestion (not really tested):

 
 Thanks. I have committed a tested variant.

The additional #ifdef CONFIG_IPIPE for spin_lock_init should be
redundant, in theory. What makes it necessary in practice?

Jan

-- 
Siemens AG, Corporate Technology, CT SE 2
Corporate Competence Center Embedded Linux

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


Re: [Xenomai-core] Proposed arch/powerpc/sysdev/uic.c patch

2007-10-26 Thread Philippe Gerum
Jan Kiszka wrote:
 Philippe Gerum wrote:
 Jan Kiszka wrote:
 Philippe Gerum wrote:
 Steven A. Falco wrote:
 I applied the uic patch:

 diff --git a/arch/powerpc/sysdev/uic.c b/arch/powerpc/sysdev/uic.c
 index eeb38e2..5a38086 100644
 --- a/arch/powerpc/sysdev/uic.c
 +++ b/arch/powerpc/sysdev/uic.c
 @@ -48,7 +48,7 @@ struct uic {
 int index;
 int dcrbase;

 -spinlock_t lock;
 +ipipe_spinlock_t lock;

 /* The remapper for this UIC */
 struct irq_host*irqhost;

 However, this would not compile because of a type mismatch.  I have
 added the attached patch, and it now compiles and runs.  But I'm not
 sure if this is the right way to fix it.  Comments?

 This will work for the purpose of running an I-pipe enabled kernel, but
 would fail with CONFIG_IPIPE disabled. Since we need to provide both,
 I'm going to work on the proper patch for fixing the issue both ways.
 Still, your patch will work as expected for running Xenomai.
 To be consequent, we would have to wrap spin_lock_init just like the
 other operations. Suggestion (not really tested):

 Thanks. I have committed a tested variant.
 
 The additional #ifdef CONFIG_IPIPE for spin_lock_init should be
 redundant, in theory. What makes it necessary in practice?


Nothing, actually. Fixing your previous patch this way work do it:

-   *(__ipipe_spinlock_t *)(lock) = IPIPE_SPIN_LOCK_UNLOCKED; \
+   *(ipipe_spinlock_t *)(lock) = IPIPE_SPIN_LOCK_UNLOCKED; \

-- 
Philippe.

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


Re: [Xenomai-core] Proposed arch/powerpc/sysdev/uic.c patch

2007-10-25 Thread Philippe Gerum
Steven A. Falco wrote:
 I applied the uic patch:
 
 diff --git a/arch/powerpc/sysdev/uic.c b/arch/powerpc/sysdev/uic.c
 index eeb38e2..5a38086 100644
 --- a/arch/powerpc/sysdev/uic.c
 +++ b/arch/powerpc/sysdev/uic.c
 @@ -48,7 +48,7 @@ struct uic {
 int index;
 int dcrbase;
 
 -spinlock_t lock;
 +ipipe_spinlock_t lock;
 
 /* The remapper for this UIC */
 struct irq_host*irqhost;
 
 However, this would not compile because of a type mismatch.  I have
 added the attached patch, and it now compiles and runs.  But I'm not
 sure if this is the right way to fix it.  Comments?
 

This will work for the purpose of running an I-pipe enabled kernel, but
would fail with CONFIG_IPIPE disabled. Since we need to provide both,
I'm going to work on the proper patch for fixing the issue both ways.
Still, your patch will work as expected for running Xenomai.

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


-- 
Philippe.

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


Re: [Xenomai-core] Proposed arch/powerpc/sysdev/uic.c patch

2007-10-25 Thread Jan Kiszka
Philippe Gerum wrote:
 Steven A. Falco wrote:
 I applied the uic patch:

 diff --git a/arch/powerpc/sysdev/uic.c b/arch/powerpc/sysdev/uic.c
 index eeb38e2..5a38086 100644
 --- a/arch/powerpc/sysdev/uic.c
 +++ b/arch/powerpc/sysdev/uic.c
 @@ -48,7 +48,7 @@ struct uic {
 int index;
 int dcrbase;

 -spinlock_t lock;
 +ipipe_spinlock_t lock;

 /* The remapper for this UIC */
 struct irq_host*irqhost;

 However, this would not compile because of a type mismatch.  I have
 added the attached patch, and it now compiles and runs.  But I'm not
 sure if this is the right way to fix it.  Comments?

 
 This will work for the purpose of running an I-pipe enabled kernel, but
 would fail with CONFIG_IPIPE disabled. Since we need to provide both,
 I'm going to work on the proper patch for fixing the issue both ways.
 Still, your patch will work as expected for running Xenomai.

To be consequent, we would have to wrap spin_lock_init just like the
other operations. Suggestion (not really tested):

Index: linux-2.6.23-ipipe/include/linux/spinlock.h
===
--- linux-2.6.23-ipipe.orig/include/linux/spinlock.h
+++ linux-2.6.23-ipipe/include/linux/spinlock.h
@@ -89,10 +89,22 @@ extern int __lockfunc generic__raw_read_
 # include linux/spinlock_up.h
 #endif
 
+#undef TYPE_EQUAL
+#define TYPE_EQUAL(lock, type) \
+   __builtin_types_compatible_p(typeof(lock), type *)
+
+#define spin_lock_init(lock)   \
+do {   \
+   if (TYPE_EQUAL((lock), __ipipe_spinlock_t)) \
+   *(__ipipe_spinlock_t *)(lock) = IPIPE_SPIN_LOCK_UNLOCKED; \
+   else if (TYPE_EQUAL(lock, spinlock_t))  \
+   _spin_lock_init((spinlock_t *)(lock));  \
+} while (0)
+
 #ifdef CONFIG_DEBUG_SPINLOCK
   extern void __spin_lock_init(spinlock_t *lock, const char *name,
   struct lock_class_key *key);
-# define spin_lock_init(lock)  \
+# define _spin_lock_init(lock) \
 do {   \
static struct lock_class_key __key; \
\
@@ -100,7 +112,7 @@ do {
\
 } while (0)
 
 #else
-# define spin_lock_init(lock)  \
+# define _spin_lock_init(lock) \
do { *(lock) = SPIN_LOCK_UNLOCKED; } while (0)
 #endif
 
@@ -172,10 +184,6 @@ do {   
\
 #define read_trylock(lock) __cond_lock(lock, _read_trylock(lock))
 #define write_trylock(lock)__cond_lock(lock, _write_trylock(lock))
 
-#undef TYPE_EQUAL
-#define TYPE_EQUAL(lock, type) \
-   __builtin_types_compatible_p(typeof(lock), type *)
-
 #define PICK_SPINOP(op, lock)  \
 do {   \
if (TYPE_EQUAL((lock), __ipipe_spinlock_t)) \


Jan



signature.asc
Description: OpenPGP digital signature
___
Xenomai-core mailing list
Xenomai-core@gna.org
https://mail.gna.org/listinfo/xenomai-core


Re: [Xenomai-core] Proposed arch/powerpc/sysdev/uic.c patch

2007-10-25 Thread Philippe Gerum
Jan Kiszka wrote:
 Philippe Gerum wrote:
 Steven A. Falco wrote:
 I applied the uic patch:

 diff --git a/arch/powerpc/sysdev/uic.c b/arch/powerpc/sysdev/uic.c
 index eeb38e2..5a38086 100644
 --- a/arch/powerpc/sysdev/uic.c
 +++ b/arch/powerpc/sysdev/uic.c
 @@ -48,7 +48,7 @@ struct uic {
 int index;
 int dcrbase;

 -spinlock_t lock;
 +ipipe_spinlock_t lock;

 /* The remapper for this UIC */
 struct irq_host*irqhost;

 However, this would not compile because of a type mismatch.  I have
 added the attached patch, and it now compiles and runs.  But I'm not
 sure if this is the right way to fix it.  Comments?

 This will work for the purpose of running an I-pipe enabled kernel, but
 would fail with CONFIG_IPIPE disabled. Since we need to provide both,
 I'm going to work on the proper patch for fixing the issue both ways.
 Still, your patch will work as expected for running Xenomai.
 
 To be consequent, we would have to wrap spin_lock_init just like the
 other operations. Suggestion (not really tested):


Thanks. I have committed a tested variant.

-- 
Philippe.

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