All of lore.kernel.org
 help / color / mirror / Atom feed
* [Xenomai-core] SMP build failure (2.6.28)
@ 2009-02-12 22:31 Paul
  2009-02-12 22:41 ` Gilles Chanteperdrix
  0 siblings, 1 reply; 4+ messages in thread
From: Paul @ 2009-02-12 22:31 UTC (permalink / raw)
  To: xenomai-core


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.


Regards, Paul.


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [Xenomai-core] SMP build failure (2.6.28)
  2009-02-12 22:31 [Xenomai-core] SMP build failure (2.6.28) Paul
@ 2009-02-12 22:41 ` Gilles Chanteperdrix
  2009-02-12 23:19   ` Paul
  0 siblings, 1 reply; 4+ messages in thread
From: Gilles Chanteperdrix @ 2009-02-12 22:41 UTC (permalink / raw)
  To: Paul; +Cc: xenomai-core

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.



^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [Xenomai-core] SMP build failure (2.6.28)
  2009-02-12 22:41 ` Gilles Chanteperdrix
@ 2009-02-12 23:19   ` Paul
  2009-02-13  2:00     ` Gilles Chanteperdrix
  0 siblings, 1 reply; 4+ messages in thread
From: Paul @ 2009-02-12 23:19 UTC (permalink / raw)
  To: Gilles Chanteperdrix; +Cc: xenomai-core

[-- Attachment #1: Type: text/plain, Size: 1395 bytes --]

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.




[-- Attachment #2: configs.bz2 --]
[-- Type: application/x-bzip2, Size: 29763 bytes --]

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [Xenomai-core] SMP build failure (2.6.28)
  2009-02-12 23:19   ` Paul
@ 2009-02-13  2:00     ` Gilles Chanteperdrix
  0 siblings, 0 replies; 4+ messages in thread
From: Gilles Chanteperdrix @ 2009-02-13  2:00 UTC (permalink / raw)
  To: Paul; +Cc: xenomai-core

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   0x80000000
 
 #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.



^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2009-02-13  2:00 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-02-12 22:31 [Xenomai-core] SMP build failure (2.6.28) Paul
2009-02-12 22:41 ` Gilles Chanteperdrix
2009-02-12 23:19   ` Paul
2009-02-13  2:00     ` Gilles Chanteperdrix

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.