[Xenomai-git] Philippe Gerum : segfault latency

2014-04-25 Thread git repository hosting
Module: xenomai-gch
Branch: for-forge-rtdm-rework
Commit: 2382ec33e73437579e73ed80d298c11fdfab1bcb
URL:
http://git.xenomai.org/?p=xenomai-gch.git;a=commit;h=2382ec33e73437579e73ed80d298c11fdfab1bcb

Author: Philippe Gerum r...@xenomai.org
Date:   Sun Mar  9 11:00:11 2014 +0100

segfault latency

On 03/08/2014 08:34 PM, Gilles Chanteperdrix wrote:
 On 03/08/2014 08:25 PM, Gilles Chanteperdrix wrote:

 Rere,

 j'ai une segfault de latency quand il essaie d'afficher le message
 disant qu'il ne trouve pas le registry daemon. J'ai pensé à la taille de
 la stack, que j'ai donc agrandie à 128K, et j'ai toujours la segfault.
 D'autre part, je vois que le paramètre name de la fonction printout
 est 0x60. Je suppute que c'est le nom du thread?

 À+.

 Le patch suivant corrige:

 diff --git a/lib/copperplate/init.c b/lib/copperplate/init.c
 index 19036e6..62abf3c 100644
 --- a/lib/copperplate/init.c
 +++ b/lib/copperplate/init.c
 @@ -539,13 +539,14 @@ void copperplate_init(int *argcp, char *const **argvp)
  goto fail;
  }

 +   threadobj_pkg_init();
 +
  if (__node_info.no_registry == 0) {
  ret = registry_pkg_init(uargv[0]);
  if (ret)
  goto fail;
  }

 -   threadobj_pkg_init();
  ret = timerobj_pkg_init();
  if (ret) {
  warning(failed to initialize timer support);


 Mais je ne pense pas que ce soit suffisant: threadobj_pkg_init doit
 avoir été appelé avant tout appel à warning histoire que la clé de TSD
 utilisée par threadobj_current() soit valide. Sinon 0 est pris comme clé
 et threadobj_current() retourne n'importe quoi (0xc dans mon cas).


Je voudrais éviter que l'overlay de la main thread et tous les autres
préparatifs aient lieu avant de forker le registry. Et puis en théorie,
il faudrait que le tsd soit dispo dès le début des inits complexes qui
sont susceptibles de paniquer ou faire un warning. Est-ce que ce truc
marche pour toi ?

---

 include/boilerplate/ancillaries.h |4 
 include/copperplate/threadobj.h   |2 ++
 lib/boilerplate/ancillaries.c |   12 
 lib/copperplate/init.c|2 ++
 lib/copperplate/threadobj.c   |6 ++
 5 files changed, 18 insertions(+), 8 deletions(-)

diff --git a/include/boilerplate/ancillaries.h 
b/include/boilerplate/ancillaries.h
index fc04f2f..da1e827 100644
--- a/include/boilerplate/ancillaries.h
+++ b/include/boilerplate/ancillaries.h
@@ -55,11 +55,15 @@ void __printout(const char *name,
 void __panic(const char *name,
 const char *fmt, va_list ap);
 
+void early_panic(const char *fmt, ...);
+
 void panic(const char *fmt, ...);
 
 void __warning(const char *name,
   const char *fmt, va_list ap);
 
+void early_warning(const char *fmt, ...);
+
 void warning(const char *fmt, ...);
 
 const char *symerror(int errnum);
diff --git a/include/copperplate/threadobj.h b/include/copperplate/threadobj.h
index d5e4591..7e5f7de 100644
--- a/include/copperplate/threadobj.h
+++ b/include/copperplate/threadobj.h
@@ -355,6 +355,8 @@ static inline int threadobj_local_p(struct threadobj *thobj)
 
 #endif /* !CONFIG_XENO_PSHARED */
 
+void threadobj_init_key(void);
+
 void threadobj_pkg_init(void);
 
 #ifdef __cplusplus
diff --git a/lib/boilerplate/ancillaries.c b/lib/boilerplate/ancillaries.c
index 59d49c3..35bd401 100644
--- a/lib/boilerplate/ancillaries.c
+++ b/lib/boilerplate/ancillaries.c
@@ -150,8 +150,7 @@ void __run_cleanup_block(struct cleanup_block *cb)
cb-handler(cb-arg);
 }
 
-__attribute__ ((weak))
-void panic(const char *fmt, ...)
+void early_panic(const char *fmt, ...)
 {
va_list ap;
 
@@ -160,8 +159,10 @@ void panic(const char *fmt, ...)
va_end(ap);
 }
 
-__attribute__ ((weak))
-void warning(const char *fmt, ...)
+void panic(const char *fmt, ...)
+__attribute__((alias(early_panic), weak));
+
+void early_warning(const char *fmt, ...)
 {
va_list ap;
 
@@ -170,6 +171,9 @@ void warning(const char *fmt, ...)
va_end(ap);
 }
 
+void warning(const char *fmt, ...)
+__attribute__((alias(early_warning), weak));
+
 char *generate_name(char *buf, const char *radix,
struct name_generator *ngen)
 {
diff --git a/lib/copperplate/init.c b/lib/copperplate/init.c
index 19036e6..58e5dc1 100644
--- a/lib/copperplate/init.c
+++ b/lib/copperplate/init.c
@@ -487,6 +487,8 @@ void copperplate_init(int *argcp, char *const **argvp)
 
boilerplate_init();
 
+   threadobj_init_key();
+
/* Our node id. is the tid of the main thread. */
__node_id = copperplate_get_tid();
 
diff --git a/lib/copperplate/threadobj.c b/lib/copperplate/threadobj.c
index b75d331..79fcdb2 100644
--- a/lib/copperplate/threadobj.c
+++ b/lib/copperplate/threadobj.c
@@ -77,10 +77,10 @@ struct threadobj *__threadobj_current;
  */
 pthread_key_t threadobj_tskey;
 
-static inline void threadobj_init_key(void)
+void threadobj_init_key(void)
 {
  

[Xenomai-git] Gilles Chanteperdrix : arm: fix context switch for 3.11+

2014-04-25 Thread git repository hosting
Module: xenomai-gch
Branch: for-forge
Commit: a829a62f75e216c5509c89f14570bae5365c4447
URL:
http://git.xenomai.org/?p=xenomai-gch.git;a=commit;h=a829a62f75e216c5509c89f14570bae5365c4447

Author: Gilles Chanteperdrix gilles.chanteperd...@xenomai.org
Date:   Fri Apr 25 21:29:26 2014 +0200

arm: fix context switch for 3.11+

---

 kernel/cobalt/arch/arm/switch.S |4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/kernel/cobalt/arch/arm/switch.S b/kernel/cobalt/arch/arm/switch.S
index 5a4ecbc..6258a15 100644
--- a/kernel/cobalt/arch/arm/switch.S
+++ b/kernel/cobalt/arch/arm/switch.S
@@ -141,11 +141,11 @@ ENTRY(__asm_thread_switch)
  THUMB(stmia   ip!, {r4 - sl, fp} )@ Store most regs on 
stack
  THUMB(str sp, [ip], #4   )
  THUMB(str lr, [ip], #4   )
-   load_tls r2, r4, r5
+   load_tls r1, r4, r5
 #ifdef CONFIG_CPU_USE_DOMAINS
ldr r6, [r1, #TI_CPU_DOMAIN]
 #endif
-   switch_tls r1, r4, r5, r3, r7
+   switch_tls r0, r4, r5, r3, r7
 #ifdef CONFIG_CPU_USE_DOMAINS
mcr p15, 0, r6, c3, c0, 0   @ Set domain register
 #endif


___
Xenomai-git mailing list
Xenomai-git@xenomai.org
http://www.xenomai.org/mailman/listinfo/xenomai-git


[Xenomai-git] Gilles Chanteperdrix : cobalt/trace: fix compilation error

2014-04-25 Thread git repository hosting
Module: xenomai-gch
Branch: for-forge
Commit: 61a9234133669ac7ea27b631667e6c5f3dd83c14
URL:
http://git.xenomai.org/?p=xenomai-gch.git;a=commit;h=61a9234133669ac7ea27b631667e6c5f3dd83c14

Author: Gilles Chanteperdrix gilles.chanteperd...@xenomai.org
Date:   Fri Apr 25 21:34:05 2014 +0200

cobalt/trace: fix compilation error

---

 kernel/cobalt/thread.c |2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/kernel/cobalt/thread.c b/kernel/cobalt/thread.c
index 1bff44d..c2abd7c 100644
--- a/kernel/cobalt/thread.c
+++ b/kernel/cobalt/thread.c
@@ -1625,7 +1625,7 @@ EXPORT_SYMBOL_GPL(xnthread_migrate);
 
 void xnthread_migrate_passive(struct xnthread *thread, struct xnsched *sched)
 {  /* nklocked, IRQs off */
-   trace_cobalt_thread_migrate_passive(thread, cpu);
+   trace_cobalt_thread_migrate_passive(thread, xnsched_cpu(sched));
 
if (thread-sched == sched)
return;


___
Xenomai-git mailing list
Xenomai-git@xenomai.org
http://www.xenomai.org/mailman/listinfo/xenomai-git


[Xenomai-git] Gilles Chanteperdrix : cobalt/shadow: do not use xnsched_current_thread()

2014-04-25 Thread git repository hosting
Module: xenomai-gch
Branch: for-forge
Commit: a4b8e90560b52abe29962fd3f10ed768d3b24a54
URL:
http://git.xenomai.org/?p=xenomai-gch.git;a=commit;h=a4b8e90560b52abe29962fd3f10ed768d3b24a54

Author: Gilles Chanteperdrix gilles.chanteperd...@xenomai.org
Date:   Fri Apr 25 21:32:33 2014 +0200

cobalt/shadow: do not use xnsched_current_thread()

for the implementation of per personality private data.

---

 kernel/cobalt/shadow.c |   40 +---
 1 file changed, 17 insertions(+), 23 deletions(-)

diff --git a/kernel/cobalt/shadow.c b/kernel/cobalt/shadow.c
index 04652bf..c107dc4 100644
--- a/kernel/cobalt/shadow.c
+++ b/kernel/cobalt/shadow.c
@@ -82,6 +82,7 @@ static void *mayday_page;
 static struct xnsynch yield_sync;
 
 static struct hlist_head *process_hash;
+static DEFINE_XNLOCK(process_hash_lock);
 #define PROCESS_HASH_SIZE 13
 
 static int enter_personality(struct xnshadow_process *process,
@@ -114,8 +115,13 @@ static unsigned __attribute__((pure)) 
process_hash_crunch(struct mm_struct *mm)
 
 static struct xnshadow_process *__process_hash_search(struct mm_struct *mm)
 {
-   unsigned bucket = process_hash_crunch(mm);
struct xnshadow_process *p;
+   unsigned bucket;
+
+   if (mm == NULL)
+   return NULL;
+
+   bucket = process_hash_crunch(mm);

atomic_only();
 
@@ -131,9 +137,9 @@ static struct xnshadow_process *process_hash_search(struct 
mm_struct *mm)
struct xnshadow_process *process;
spl_t s;

-   xnlock_get_irqsave(nklock, s);
+   xnlock_get_irqsave(process_hash_lock, s);
process = __process_hash_search(mm);
-   xnlock_put_irqrestore(nklock, s);
+   xnlock_put_irqrestore(process_hash_lock, s);

return process;
 }
@@ -145,7 +151,7 @@ static int process_hash_enter(struct xnshadow_process *p)
int err;
spl_t s;
 
-   xnlock_get_irqsave(nklock, s);
+   xnlock_get_irqsave(process_hash_lock, s);
if (__process_hash_search(mm)) {
err = -EBUSY;
goto out;
@@ -155,7 +161,7 @@ static int process_hash_enter(struct xnshadow_process *p)
hlist_add_head(p-hlink, process_hash[bucket]);
err = 0;
   out:
-   xnlock_put_irqrestore(nklock, s);
+   xnlock_put_irqrestore(process_hash_lock, s);
return err;
 }
 
@@ -163,10 +169,10 @@ static void process_hash_remove(struct xnshadow_process 
*p)
 {
spl_t s;
 
-   xnlock_get_irqsave(nklock, s);
+   xnlock_get_irqsave(process_hash_lock, s);
if (p-mm)
hlist_del(p-hlink);
-   xnlock_put_irqrestore(nklock, s);
+   xnlock_put_irqrestore(process_hash_lock, s);
 }
 
 /* nklock locked, irqs off. */
@@ -175,7 +181,7 @@ static void *private_lookup(unsigned int muxid)
struct xnshadow_process *p = xnshadow_current_process();
 
if (p == NULL) {
-   p = __process_hash_search(current-mm);
+   p = process_hash_search(current-mm);
if (p == NULL)
return NULL;
}
@@ -1327,10 +1333,10 @@ static int xnshadow_sys_bind(unsigned int magic,
 
return -ESRCH;
 do_bind:
-   xnlock_get_irqsave(nklock, s);
+   xnlock_get_irqsave(process_hash_lock, s);
process = __process_hash_search(current-mm);
priv = private_lookup(muxid);
-   xnlock_put_irqrestore(nklock, s);
+   xnlock_put_irqrestore(process_hash_lock, s);
 
/*
 * Protect from the same process binding to the same interface
@@ -1753,19 +1759,7 @@ EXPORT_SYMBOL_GPL(xnshadow_unregister_personality);
  */
 void *xnshadow_get_context(unsigned int muxid)
 {
-   struct xnthread *curr;
-   void *context = NULL;
-   spl_t s;
-
-   xnlock_get_irqsave(nklock, s);
-
-   curr = xnsched_current_thread();
-   if (likely(xnthread_test_state(curr, XNROOT|XNUSER)))
-   context = private_lookup(muxid);
-
-   xnlock_put_irqrestore(nklock, s);
-
-   return context;
+   return private_lookup(muxid);
 }
 EXPORT_SYMBOL_GPL(xnshadow_get_context);
 


___
Xenomai-git mailing list
Xenomai-git@xenomai.org
http://www.xenomai.org/mailman/listinfo/xenomai-git


[Xenomai-git] Gilles Chanteperdrix : cobalt/shadow: do not use xnsched_current_thread()

2014-04-25 Thread git repository hosting
Module: xenomai-gch
Branch: for-forge
Commit: a622d84783ee8d4d536a316e950008cd51c373fc
URL:
http://git.xenomai.org/?p=xenomai-gch.git;a=commit;h=a622d84783ee8d4d536a316e950008cd51c373fc

Author: Gilles Chanteperdrix gilles.chanteperd...@xenomai.org
Date:   Fri Apr 25 21:32:33 2014 +0200

cobalt/shadow: do not use xnsched_current_thread()

for the implementation of per personality private data.

---

 kernel/cobalt/shadow.c |   40 +---
 1 file changed, 17 insertions(+), 23 deletions(-)

diff --git a/kernel/cobalt/shadow.c b/kernel/cobalt/shadow.c
index 04652bf..c107dc4 100644
--- a/kernel/cobalt/shadow.c
+++ b/kernel/cobalt/shadow.c
@@ -82,6 +82,7 @@ static void *mayday_page;
 static struct xnsynch yield_sync;
 
 static struct hlist_head *process_hash;
+static DEFINE_XNLOCK(process_hash_lock);
 #define PROCESS_HASH_SIZE 13
 
 static int enter_personality(struct xnshadow_process *process,
@@ -114,8 +115,13 @@ static unsigned __attribute__((pure)) 
process_hash_crunch(struct mm_struct *mm)
 
 static struct xnshadow_process *__process_hash_search(struct mm_struct *mm)
 {
-   unsigned bucket = process_hash_crunch(mm);
struct xnshadow_process *p;
+   unsigned bucket;
+
+   if (mm == NULL)
+   return NULL;
+
+   bucket = process_hash_crunch(mm);

atomic_only();
 
@@ -131,9 +137,9 @@ static struct xnshadow_process *process_hash_search(struct 
mm_struct *mm)
struct xnshadow_process *process;
spl_t s;

-   xnlock_get_irqsave(nklock, s);
+   xnlock_get_irqsave(process_hash_lock, s);
process = __process_hash_search(mm);
-   xnlock_put_irqrestore(nklock, s);
+   xnlock_put_irqrestore(process_hash_lock, s);

return process;
 }
@@ -145,7 +151,7 @@ static int process_hash_enter(struct xnshadow_process *p)
int err;
spl_t s;
 
-   xnlock_get_irqsave(nklock, s);
+   xnlock_get_irqsave(process_hash_lock, s);
if (__process_hash_search(mm)) {
err = -EBUSY;
goto out;
@@ -155,7 +161,7 @@ static int process_hash_enter(struct xnshadow_process *p)
hlist_add_head(p-hlink, process_hash[bucket]);
err = 0;
   out:
-   xnlock_put_irqrestore(nklock, s);
+   xnlock_put_irqrestore(process_hash_lock, s);
return err;
 }
 
@@ -163,10 +169,10 @@ static void process_hash_remove(struct xnshadow_process 
*p)
 {
spl_t s;
 
-   xnlock_get_irqsave(nklock, s);
+   xnlock_get_irqsave(process_hash_lock, s);
if (p-mm)
hlist_del(p-hlink);
-   xnlock_put_irqrestore(nklock, s);
+   xnlock_put_irqrestore(process_hash_lock, s);
 }
 
 /* nklock locked, irqs off. */
@@ -175,7 +181,7 @@ static void *private_lookup(unsigned int muxid)
struct xnshadow_process *p = xnshadow_current_process();
 
if (p == NULL) {
-   p = __process_hash_search(current-mm);
+   p = process_hash_search(current-mm);
if (p == NULL)
return NULL;
}
@@ -1327,10 +1333,10 @@ static int xnshadow_sys_bind(unsigned int magic,
 
return -ESRCH;
 do_bind:
-   xnlock_get_irqsave(nklock, s);
+   xnlock_get_irqsave(process_hash_lock, s);
process = __process_hash_search(current-mm);
priv = private_lookup(muxid);
-   xnlock_put_irqrestore(nklock, s);
+   xnlock_put_irqrestore(process_hash_lock, s);
 
/*
 * Protect from the same process binding to the same interface
@@ -1753,19 +1759,7 @@ EXPORT_SYMBOL_GPL(xnshadow_unregister_personality);
  */
 void *xnshadow_get_context(unsigned int muxid)
 {
-   struct xnthread *curr;
-   void *context = NULL;
-   spl_t s;
-
-   xnlock_get_irqsave(nklock, s);
-
-   curr = xnsched_current_thread();
-   if (likely(xnthread_test_state(curr, XNROOT|XNUSER)))
-   context = private_lookup(muxid);
-
-   xnlock_put_irqrestore(nklock, s);
-
-   return context;
+   return private_lookup(muxid);
 }
 EXPORT_SYMBOL_GPL(xnshadow_get_context);
 


___
Xenomai-git mailing list
Xenomai-git@xenomai.org
http://www.xenomai.org/mailman/listinfo/xenomai-git


[Xenomai-git] Gilles Chanteperdrix : cobalt/arm: fix context switch for 3.11+

2014-04-25 Thread git repository hosting
Module: xenomai-gch
Branch: for-forge
Commit: 6ca967023d0f36941d1648777dbf03d819c8fbbb
URL:
http://git.xenomai.org/?p=xenomai-gch.git;a=commit;h=6ca967023d0f36941d1648777dbf03d819c8fbbb

Author: Gilles Chanteperdrix gilles.chanteperd...@xenomai.org
Date:   Fri Apr 25 21:29:26 2014 +0200

cobalt/arm: fix context switch for 3.11+

---

 kernel/cobalt/arch/arm/switch.S |4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/kernel/cobalt/arch/arm/switch.S b/kernel/cobalt/arch/arm/switch.S
index 5a4ecbc..6258a15 100644
--- a/kernel/cobalt/arch/arm/switch.S
+++ b/kernel/cobalt/arch/arm/switch.S
@@ -141,11 +141,11 @@ ENTRY(__asm_thread_switch)
  THUMB(stmia   ip!, {r4 - sl, fp} )@ Store most regs on 
stack
  THUMB(str sp, [ip], #4   )
  THUMB(str lr, [ip], #4   )
-   load_tls r2, r4, r5
+   load_tls r1, r4, r5
 #ifdef CONFIG_CPU_USE_DOMAINS
ldr r6, [r1, #TI_CPU_DOMAIN]
 #endif
-   switch_tls r1, r4, r5, r3, r7
+   switch_tls r0, r4, r5, r3, r7
 #ifdef CONFIG_CPU_USE_DOMAINS
mcr p15, 0, r6, c3, c0, 0   @ Set domain register
 #endif


___
Xenomai-git mailing list
Xenomai-git@xenomai.org
http://www.xenomai.org/mailman/listinfo/xenomai-git


[Xenomai-git] Gilles Chanteperdrix : cobalt/trace: fix compilation error

2014-04-25 Thread git repository hosting
Module: xenomai-gch
Branch: for-forge
Commit: 6992d9b1e5a7bf176ded16c8e6f99472e1d424b6
URL:
http://git.xenomai.org/?p=xenomai-gch.git;a=commit;h=6992d9b1e5a7bf176ded16c8e6f99472e1d424b6

Author: Gilles Chanteperdrix gilles.chanteperd...@xenomai.org
Date:   Fri Apr 25 21:34:05 2014 +0200

cobalt/trace: fix compilation error

---

 kernel/cobalt/thread.c |2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/kernel/cobalt/thread.c b/kernel/cobalt/thread.c
index 1bff44d..c2abd7c 100644
--- a/kernel/cobalt/thread.c
+++ b/kernel/cobalt/thread.c
@@ -1625,7 +1625,7 @@ EXPORT_SYMBOL_GPL(xnthread_migrate);
 
 void xnthread_migrate_passive(struct xnthread *thread, struct xnsched *sched)
 {  /* nklocked, IRQs off */
-   trace_cobalt_thread_migrate_passive(thread, cpu);
+   trace_cobalt_thread_migrate_passive(thread, xnsched_cpu(sched));
 
if (thread-sched == sched)
return;


___
Xenomai-git mailing list
Xenomai-git@xenomai.org
http://www.xenomai.org/mailman/listinfo/xenomai-git


[Xenomai-git] Gilles Chanteperdrix : cobalt/shadow: do not use xnsched_current_thread()

2014-04-25 Thread git repository hosting
Module: xenomai-gch
Branch: for-forge
Commit: 4e337713391eefe63ccd204b9ce2f564e29d4de6
URL:
http://git.xenomai.org/?p=xenomai-gch.git;a=commit;h=4e337713391eefe63ccd204b9ce2f564e29d4de6

Author: Gilles Chanteperdrix gilles.chanteperd...@xenomai.org
Date:   Fri Apr 25 21:32:33 2014 +0200

cobalt/shadow: do not use xnsched_current_thread()

for the implementation of per personality private data.

---

 kernel/cobalt/shadow.c |   42 +++---
 1 file changed, 15 insertions(+), 27 deletions(-)

diff --git a/kernel/cobalt/shadow.c b/kernel/cobalt/shadow.c
index 04652bf..d5052b7 100644
--- a/kernel/cobalt/shadow.c
+++ b/kernel/cobalt/shadow.c
@@ -82,6 +82,7 @@ static void *mayday_page;
 static struct xnsynch yield_sync;
 
 static struct hlist_head *process_hash;
+static DEFINE_XNLOCK(process_hash_lock);
 #define PROCESS_HASH_SIZE 13
 
 static int enter_personality(struct xnshadow_process *process,
@@ -116,7 +117,7 @@ static struct xnshadow_process 
*__process_hash_search(struct mm_struct *mm)
 {
unsigned bucket = process_hash_crunch(mm);
struct xnshadow_process *p;
-   
+
atomic_only();
 
hlist_for_each_entry(p, process_hash[bucket], hlink)
@@ -131,9 +132,9 @@ static struct xnshadow_process *process_hash_search(struct 
mm_struct *mm)
struct xnshadow_process *process;
spl_t s;

-   xnlock_get_irqsave(nklock, s);
+   xnlock_get_irqsave(process_hash_lock, s);
process = __process_hash_search(mm);
-   xnlock_put_irqrestore(nklock, s);
+   xnlock_put_irqrestore(process_hash_lock, s);

return process;
 }
@@ -145,7 +146,7 @@ static int process_hash_enter(struct xnshadow_process *p)
int err;
spl_t s;
 
-   xnlock_get_irqsave(nklock, s);
+   xnlock_get_irqsave(process_hash_lock, s);
if (__process_hash_search(mm)) {
err = -EBUSY;
goto out;
@@ -155,7 +156,7 @@ static int process_hash_enter(struct xnshadow_process *p)
hlist_add_head(p-hlink, process_hash[bucket]);
err = 0;
   out:
-   xnlock_put_irqrestore(nklock, s);
+   xnlock_put_irqrestore(process_hash_lock, s);
return err;
 }
 
@@ -163,10 +164,10 @@ static void process_hash_remove(struct xnshadow_process 
*p)
 {
spl_t s;
 
-   xnlock_get_irqsave(nklock, s);
+   xnlock_get_irqsave(process_hash_lock, s);
if (p-mm)
hlist_del(p-hlink);
-   xnlock_put_irqrestore(nklock, s);
+   xnlock_put_irqrestore(process_hash_lock, s);
 }
 
 /* nklock locked, irqs off. */
@@ -174,11 +175,10 @@ static void *private_lookup(unsigned int muxid)
 {
struct xnshadow_process *p = xnshadow_current_process();
 
-   if (p == NULL) {
-   p = __process_hash_search(current-mm);
-   if (p == NULL)
-   return NULL;
-   }
+   if (p == NULL  current-mm)
+   p = process_hash_search(current-mm);
+   if (p == NULL)
+   return NULL;
 
return p-priv[muxid];
 }
@@ -1327,10 +1327,10 @@ static int xnshadow_sys_bind(unsigned int magic,
 
return -ESRCH;
 do_bind:
-   xnlock_get_irqsave(nklock, s);
+   xnlock_get_irqsave(process_hash_lock, s);
process = __process_hash_search(current-mm);
priv = private_lookup(muxid);
-   xnlock_put_irqrestore(nklock, s);
+   xnlock_put_irqrestore(process_hash_lock, s);
 
/*
 * Protect from the same process binding to the same interface
@@ -1753,19 +1753,7 @@ EXPORT_SYMBOL_GPL(xnshadow_unregister_personality);
  */
 void *xnshadow_get_context(unsigned int muxid)
 {
-   struct xnthread *curr;
-   void *context = NULL;
-   spl_t s;
-
-   xnlock_get_irqsave(nklock, s);
-
-   curr = xnsched_current_thread();
-   if (likely(xnthread_test_state(curr, XNROOT|XNUSER)))
-   context = private_lookup(muxid);
-
-   xnlock_put_irqrestore(nklock, s);
-
-   return context;
+   return private_lookup(muxid);
 }
 EXPORT_SYMBOL_GPL(xnshadow_get_context);
 


___
Xenomai-git mailing list
Xenomai-git@xenomai.org
http://www.xenomai.org/mailman/listinfo/xenomai-git


[Xenomai-git] Gilles Chanteperdrix : cobalt/trace: fix compilation error

2014-04-25 Thread git repository hosting
Module: xenomai-gch
Branch: for-forge
Commit: 2e0a5d0f96d46dec141040a65a83713c40e9dfb8
URL:
http://git.xenomai.org/?p=xenomai-gch.git;a=commit;h=2e0a5d0f96d46dec141040a65a83713c40e9dfb8

Author: Gilles Chanteperdrix gilles.chanteperd...@xenomai.org
Date:   Fri Apr 25 21:34:05 2014 +0200

cobalt/trace: fix compilation error

---

 kernel/cobalt/thread.c |2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/kernel/cobalt/thread.c b/kernel/cobalt/thread.c
index 1bff44d..c2abd7c 100644
--- a/kernel/cobalt/thread.c
+++ b/kernel/cobalt/thread.c
@@ -1625,7 +1625,7 @@ EXPORT_SYMBOL_GPL(xnthread_migrate);
 
 void xnthread_migrate_passive(struct xnthread *thread, struct xnsched *sched)
 {  /* nklocked, IRQs off */
-   trace_cobalt_thread_migrate_passive(thread, cpu);
+   trace_cobalt_thread_migrate_passive(thread, xnsched_cpu(sched));
 
if (thread-sched == sched)
return;


___
Xenomai-git mailing list
Xenomai-git@xenomai.org
http://www.xenomai.org/mailman/listinfo/xenomai-git