Re: [Xenomai-core] SMP build failure (2.6.28)

2009-02-12 Thread Gilles Chanteperdrix
Paul wrote:
> On Thursday 12 February 2009, Gilles Chanteperdrix wrote:
>> Paul wrote:
>>> Patching a 2.6.28.2 with the relevant patch in trunk, using a config with
>>> SMP enabled resulted in:
>>>
>>>   LD  kernel/xenomai/arch/built-in.o
>>>   CC  kernel/xenomai/nucleus/heap.o
>>> In file included from include/xenomai/nucleus/pod.h:34,
>>>  from kernel/xenomai/nucleus/heap.c:66:
>>> include/xenomai/nucleus/sched.h: In function ‘xnsched_self_resched_p’:
>>> include/xenomai/nucleus/sched.h:171: error: ‘nkpod’ undeclared (first use
>>> in this function)
>>> include/xenomai/nucleus/sched.h:171: error: (Each undeclared identifier
>>> is reported only once
>>> include/xenomai/nucleus/sched.h:171: error: for each function it appears
>>> in.) make[3]: *** [kernel/xenomai/nucleus/heap.o] Error 1
>>>
>>>
>>> Digging in to the nucleus/sched.h and nucleus/pod.h headers, there
>>> appears to be a circular dependency around nkpod_struct - This only hits
>>> home with CONFIG_SMP defined.
>> There must be some other option triggering the bug, because I run trunk
>> with 2.6.28 on an SMP x86(_64).
> 
> Attached, tarball of the two configs - One for SMP, the other, UP, both for 
> 32Bit.
> 
> Looking at the changelog, I see xnsched_self_resched_p was introduced in 
> r4611 - Reverting the change allows compilation to progress...

The following patch replaces a division by a memory access, which should
be better on low-end and seems to fix the issue.

Index: include/nucleus/sched.h
===
--- include/nucleus/sched.h (revision 4623)
+++ include/nucleus/sched.h (working copy)
@@ -64,6 +64,7 @@ struct xnsched_rt {
 typedef struct xnsched {
 
xnflags_t status;   /*!< Scheduler specific status bitmask. 
*/
+   int cpu;
struct xnthread *curr;  /*!< Current thread. */
xnarch_cpumask_t resched;   /*!< Mask of CPUs needing rescheduling. 
*/
 
@@ -155,7 +156,7 @@ struct xnsched_class {
 #define XNSCHED_RUNPRIO   0x8000
 
 #ifdef CONFIG_SMP
-#define xnsched_cpu(__sched__) ((__sched__) - &nkpod->sched[0])
+#define xnsched_cpu(__sched__) ((__sched__)->cpu)
 #else /* !CONFIG_SMP */
 #define xnsched_cpu(__sched__) ({ (void)__sched__; 0; })
 #endif /* CONFIG_SMP */
@@ -228,7 +229,7 @@ static inline void xnsched_reset_watchdo
 
 int xnsched_register_class(struct xnsched_class *sched_class);
 
-void xnsched_init(struct xnsched *sched);
+void xnsched_init(struct xnsched *sched, int cpu);
 
 void xnsched_destroy(struct xnsched *sched);
 
Index: ksrc/nucleus/pod.c
===
--- ksrc/nucleus/pod.c  (revision 4623)
+++ ksrc/nucleus/pod.c  (working copy)
@@ -407,7 +407,7 @@ int xnpod_init(void)
 
for (cpu = 0; cpu < nr_cpus; ++cpu) {
sched = &pod->sched[cpu];
-   xnsched_init(sched);
+   xnsched_init(sched, cpu);
appendq(&pod->threadq, &sched->rootcb.glink);
}
 
Index: ksrc/nucleus/sched.c
===
--- ksrc/nucleus/sched.c(revision 4623)
+++ ksrc/nucleus/sched.c(working copy)
@@ -82,15 +82,16 @@ static void xnsched_watchdog_handler(str
 
 #endif /* CONFIG_XENO_OPT_WATCHDOG */
 
-void xnsched_init(struct xnsched *sched)
+void xnsched_init(struct xnsched *sched, int cpu)
 {
char htimer_name[XNOBJECT_NAME_LEN];
char root_name[XNOBJECT_NAME_LEN];
union xnsched_policy_param param;
struct xnthread_init_attr attr;
-   int cpu = xnsched_cpu(sched);
struct xnsched_class *p;
 
+   sched->cpu = cpu;
+
for_each_xnsched_class(p) {
if (p->sched_init)
p->sched_init(sched);

-- 
Gilles.


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


Re: [Xenomai-core] SMP build failure (2.6.28)

2009-02-12 Thread Paul
On Thursday 12 February 2009, Gilles Chanteperdrix wrote:
> Paul wrote:
> > Patching a 2.6.28.2 with the relevant patch in trunk, using a config with
> > SMP enabled resulted in:
> >
> >   LD  kernel/xenomai/arch/built-in.o
> >   CC  kernel/xenomai/nucleus/heap.o
> > In file included from include/xenomai/nucleus/pod.h:34,
> >  from kernel/xenomai/nucleus/heap.c:66:
> > include/xenomai/nucleus/sched.h: In function ‘xnsched_self_resched_p’:
> > include/xenomai/nucleus/sched.h:171: error: ‘nkpod’ undeclared (first use
> > in this function)
> > include/xenomai/nucleus/sched.h:171: error: (Each undeclared identifier
> > is reported only once
> > include/xenomai/nucleus/sched.h:171: error: for each function it appears
> > in.) make[3]: *** [kernel/xenomai/nucleus/heap.o] Error 1
> >
> >
> > Digging in to the nucleus/sched.h and nucleus/pod.h headers, there
> > appears to be a circular dependency around nkpod_struct - This only hits
> > home with CONFIG_SMP defined.
>
> There must be some other option triggering the bug, because I run trunk
> with 2.6.28 on an SMP x86(_64).

Attached, tarball of the two configs - One for SMP, the other, UP, both for 
32Bit.

Looking at the changelog, I see xnsched_self_resched_p was introduced in 
r4611 - Reverting the change allows compilation to progress...


Regards, Paul.





configs.bz2
Description: BZip2 compressed data
___
Xenomai-core mailing list
Xenomai-core@gna.org
https://mail.gna.org/listinfo/xenomai-core


Re: [Xenomai-core] SMP build failure (2.6.28)

2009-02-12 Thread Gilles Chanteperdrix
Paul wrote:
> Patching a 2.6.28.2 with the relevant patch in trunk, using a config with SMP 
> enabled resulted in:
> 
>   LD  kernel/xenomai/arch/built-in.o
>   CC  kernel/xenomai/nucleus/heap.o
> In file included from include/xenomai/nucleus/pod.h:34,
>  from kernel/xenomai/nucleus/heap.c:66:
> include/xenomai/nucleus/sched.h: In function ‘xnsched_self_resched_p’:
> include/xenomai/nucleus/sched.h:171: error: ‘nkpod’ undeclared (first use in 
> this function)
> include/xenomai/nucleus/sched.h:171: error: (Each undeclared identifier is 
> reported only once
> include/xenomai/nucleus/sched.h:171: error: for each function it appears in.)
> make[3]: *** [kernel/xenomai/nucleus/heap.o] Error 1
> 
> 
> Digging in to the nucleus/sched.h and nucleus/pod.h headers, there appears to 
> be a circular dependency around nkpod_struct - This only hits home with 
> CONFIG_SMP defined.

There must be some other option triggering the bug, because I run trunk
with 2.6.28 on an SMP x86(_64).

-- 
Gilles.


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