Re: [Xenomai-core] Proposed arch/powerpc/sysdev/uic.c patch
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
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
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
Re: [Xenomai-core] Proposed arch/powerpc/sysdev/uic.c patch
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 #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
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
[Xenomai-core] Proposed arch/powerpc/sysdev/uic.c patch
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? Steve --- /home/sfalco/uic.c 2007-10-25 15:59:35.0 -0400 +++ arch/powerpc/sysdev/uic.c 2007-10-25 16:06:16.0 -0400 @@ -231,7 +231,7 @@ return NULL; /* FIXME: panic? */ memset(uic, 0, sizeof(*uic)); - spin_lock_init(&uic->lock); + uic->lock = IPIPE_SPIN_LOCK_UNLOCKED; uic->of_node = of_node_get(node); indexp = of_get_property(node, "cell-index", &len); if (!indexp || (len != sizeof(u32))) { ___ Xenomai-core mailing list Xenomai-core@gna.org https://mail.gna.org/listinfo/xenomai-core