[Xenomai-git] Gilles Chanteperdrix : cobalt/sched: bypass scheduler lock in irq

2015-10-17 Thread git repository hosting
Module: xenomai-3
Branch: arm64
Commit: 9a8be3bd8fdaca6654a7db16c886af7d508f5477
URL:
http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=9a8be3bd8fdaca6654a7db16c886af7d508f5477

Author: Gilles Chanteperdrix 
Date:   Sun Oct 11 19:10:23 2015 +0200

cobalt/sched: bypass scheduler lock in irq

When preempting a relaxed thread, in case the thread is in the middle of
a call to xnthread_relax().

---

 kernel/cobalt/sched.c |   22 +++---
 1 file changed, 19 insertions(+), 3 deletions(-)

diff --git a/kernel/cobalt/sched.c b/kernel/cobalt/sched.c
index 56014e0..792bb80 100644
--- a/kernel/cobalt/sched.c
+++ b/kernel/cobalt/sched.c
@@ -322,7 +322,8 @@ struct xnsched *xnsched_finish_unlocked_switch(struct 
xnsched *sched)
 
 void xnsched_lock(void)
 {
-   struct xnthread *curr = xnthread_current();
+   struct xnsched *sched = xnsched_current();
+   struct xnthread *curr = sched->curr;
 
/*
 * CAUTION: The fast xnthread_current() accessor carries the
@@ -333,8 +334,16 @@ void xnsched_lock(void)
 * Either way, we don't need to grab the super lock.
 */
if (unlikely(curr == NULL || xnthread_test_state(curr, XNRELAX))) {
+   /*
+* In IRQ: scheduler already locked, and we may have
+* interrupted xnthread_relax() where the BUG_ON condition is
+* temporarily false.
+*/
+   if (sched->lflags & XNINIRQ)
+   return;
+
irqoff_only();
-   curr = _current()->rootcb;
+   curr = >rootcb;
XENO_BUG_ON(COBALT, xnsched_current()->curr != curr);
}
 
@@ -344,9 +353,16 @@ EXPORT_SYMBOL_GPL(xnsched_lock);
 
 void xnsched_unlock(void)
 {
-   struct xnthread *curr = xnthread_current();
+   struct xnsched *sched = xnsched_current();
+   struct xnthread *curr = sched->curr;
 
if (unlikely(curr == NULL || xnthread_test_state(curr, XNRELAX))) {
+   /*
+* In IRQ
+*/
+   if (sched->lflags & XNINIRQ)
+   return;
+
irqoff_only();
curr = _current()->rootcb;
}


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


[Xenomai-git] Gilles Chanteperdrix : cobalt/sched: avoid leaking the reschedule bit

2015-10-17 Thread git repository hosting
Module: xenomai-3
Branch: arm64
Commit: 587fc2649724f0ff519a4f75244148898ae85da7
URL:
http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=587fc2649724f0ff519a4f75244148898ae85da7

Author: Gilles Chanteperdrix 
Date:   Fri Oct 16 11:27:39 2015 +0200

cobalt/sched: avoid leaking the reschedule bit

handle_setaffinity_event ends up calling migrate_thread() which sets
the rescheduling bit. However, since this happens for a passive
migration, xnsched_run() is not called, and the reschedule bit
remains. This causes remote notifications to not send an IPI, and
delay them until the system calls xnsched_run() for another reason.

Fix this by setting the reschedule bit in xnsched_migrate_passive() only
if the thread blockbits are not set.

---

 kernel/cobalt/sched.c |5 -
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/kernel/cobalt/sched.c b/kernel/cobalt/sched.c
index 792bb80..fab0d7c 100644
--- a/kernel/cobalt/sched.c
+++ b/kernel/cobalt/sched.c
@@ -481,7 +481,6 @@ static void migrate_thread(struct xnthread *thread, struct 
xnsched *sched)
 * WARNING: the scheduling class may have just changed as a
 * result of calling the per-class migration hook.
 */
-   xnsched_set_resched(thread->sched);
thread->sched = sched;
 }
 
@@ -491,6 +490,7 @@ static void migrate_thread(struct xnthread *thread, struct 
xnsched *sched)
  */
 void xnsched_migrate(struct xnthread *thread, struct xnsched *sched)
 {
+   xnsched_set_resched(thread->sched);
migrate_thread(thread, sched);
 
 #ifdef CONFIG_XENO_ARCH_UNLOCKED_SWITCH
@@ -511,11 +511,14 @@ void xnsched_migrate(struct xnthread *thread, struct 
xnsched *sched)
  */
 void xnsched_migrate_passive(struct xnthread *thread, struct xnsched *sched)
 {
+   struct xnsched *last_sched = thread->sched;
+
migrate_thread(thread, sched);
 
if (!xnthread_test_state(thread, XNTHREAD_BLOCK_BITS)) {
xnsched_requeue(thread);
xnthread_set_state(thread, XNREADY);
+   xnsched_set_resched(last_sched);
}
 }
 


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


[Xenomai-git] Philippe Gerum : lib, utils: cleanup getopt_long option arrays

2015-10-17 Thread git repository hosting
Module: xenomai-3
Branch: arm64
Commit: 85110e10ea3a5965f46e55b53caa9fc60b751e91
URL:
http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=85110e10ea3a5965f46e55b53caa9fc60b751e91

Author: Philippe Gerum 
Date:   Sun Oct  4 17:36:48 2015 +0200

lib, utils: cleanup getopt_long option arrays

---

 lib/alchemy/init.c|   11 ++-
 lib/boilerplate/setup.c   |   15 ++-
 lib/cobalt/init.c |   12 +---
 lib/copperplate/init.c|   12 ++--
 lib/copperplate/regd/regd.c   |   18 +++---
 lib/psos/init.c   |9 -
 lib/smokey/init.c |9 +
 lib/vxworks/init.c|   11 ++-
 utils/analogy/analogy_calibrate.c |   13 -
 utils/autotune/autotune.c |   12 
 utils/corectl/corectl.c   |4 +++-
 utils/hdb/hdb.c   |2 +-
 utils/slackspot/slackspot.c   |   31 +++
 13 files changed, 64 insertions(+), 95 deletions(-)

diff --git a/lib/alchemy/init.c b/lib/alchemy/init.c
index 14eb4d1..2efd138 100644
--- a/lib/alchemy/init.c
+++ b/lib/alchemy/init.c
@@ -49,16 +49,9 @@ static const struct option alchemy_options[] = {
{
 #define clock_resolution_opt   0
.name = "alchemy-clock-resolution",
-   .has_arg = 1,
-   .flag = NULL,
-   .val = 0
+   .has_arg = required_argument,
},
-   {
-   .name = NULL,
-   .has_arg = 0,
-   .flag = NULL,
-   .val = 0
-   }
+   { /* Sentinel */ }
 };
 
 static int alchemy_parse_option(int optnum, const char *optarg)
diff --git a/lib/boilerplate/setup.c b/lib/boilerplate/setup.c
index 5273a5e..1cc66a7 100644
--- a/lib/boilerplate/setup.c
+++ b/lib/boilerplate/setup.c
@@ -56,55 +56,60 @@ static const struct option base_options[] = {
{
 #define affinity_opt   1
.name = "cpu-affinity",
-   .has_arg = 1,
+   .has_arg = required_argument,
},
{
 #define verbose_opt2
.name = "verbose",
-   .has_arg = 2,
+   .has_arg = optional_argument,
},
{
 #define silent_opt 3
.name = "silent",
+   .has_arg = no_argument,
.flag = &__base_setup_data.verbosity_level,
.val = 0,
},
{
 #define quiet_opt  4
.name = "quiet",
+   .has_arg = no_argument,
.flag = &__base_setup_data.verbosity_level,
.val = 0,
},
{
 #define version_opt5
.name = "version",
+   .has_arg = no_argument,
},
{
 #define dumpconfig_opt 6
.name = "dump-config",
+   .has_arg = no_argument,
},
{
 #define no_sanity_opt  7
.name = "no-sanity",
+   .has_arg = no_argument,
.flag = &__base_setup_data.no_sanity,
.val = 1
},
{
 #define sanity_opt 8
.name = "sanity",
+   .has_arg = no_argument,
.flag = &__base_setup_data.no_sanity,
},
{
 #define no_mlock_opt   9
 #ifdef CONFIG_XENO_MERCURY
.name = "no-mlock",
+   .has_arg = no_argument,
.flag = &__base_setup_data.no_mlock,
.val = 1
 #endif
},
-   {
-   /* sentinel */
-   }
+   { /* Sentinel */ }
 };
 
 void __weak application_version(void)
diff --git a/lib/cobalt/init.c b/lib/cobalt/init.c
index 9d1674d..3e88d06 100644
--- a/lib/cobalt/init.c
+++ b/lib/cobalt/init.c
@@ -56,26 +56,24 @@ static const struct option cobalt_options[] = {
{
 #define main_prio_opt  0
.name = "main-prio",
-   .has_arg = 1,
+   .has_arg = required_argument,
},
{
 #define print_bufsz_opt1
.name = "print-buffer-size",
-   .has_arg = 1,
+   .has_arg = required_argument,
},
{
 #define print_bufcnt_opt   2
.name = "print-buffer-count",
-   .has_arg = 1,
+   .has_arg = required_argument,
},
{
 #define print_syncdelay_opt3
.name = "print-sync-delay",
-   .has_arg = 1,
+   .has_arg = required_argument,
},
-   {
-   /* sentinel */
-   }
+   { /* Sentinel */ }
 };
 
 static void sigill_handler(int sig)
diff --git a/lib/copperplate/init.c b/lib/copperplate/init.c
index f12bffc..3ce4584 100644
--- a/lib/copperplate/init.c
+++ b/lib/copperplate/init.c
@@ -51,33 +51,33 @@ static const struct option copperplate_options[] = {
{
 #define mempool_opt0
.name = 

[Xenomai-git] Philippe Gerum : cobalt/powerpc: upgrade I-pipe support

2015-10-17 Thread git repository hosting
Module: xenomai-3
Branch: arm64
Commit: d18d5aa14deb8c81cef820f88bae8a5004d360cf
URL:
http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=d18d5aa14deb8c81cef820f88bae8a5004d360cf

Author: Philippe Gerum 
Date:   Tue Oct  6 15:38:33 2015 +0200

cobalt/powerpc: upgrade I-pipe support

---

 .../patches/ipipe-core-3.16.7-powerpc-5.patch  |15596 
 ...-2.patch => ipipe-core-3.18.20-powerpc-3.patch} |   89 +-
 2 files changed, 56 insertions(+), 15629 deletions(-)

Diff:   
http://git.xenomai.org/?p=xenomai-3.git;a=commitdiff;h=d18d5aa14deb8c81cef820f88bae8a5004d360cf

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


[Xenomai-git] Philippe Gerum : cobalt/rtdm: display path of wrongly accessed file

2015-10-17 Thread git repository hosting
Module: xenomai-3
Branch: arm64
Commit: bc30c3d719ed39f1864e66144e5ff18031f4a8dd
URL:
http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=bc30c3d719ed39f1864e66144e5ff18031f4a8dd

Author: Philippe Gerum 
Date:   Sat Oct  3 18:11:45 2015 +0200

cobalt/rtdm: display path of wrongly accessed file

---

 kernel/cobalt/rtdm/fd.c |   16 +---
 1 file changed, 9 insertions(+), 7 deletions(-)

diff --git a/kernel/cobalt/rtdm/fd.c b/kernel/cobalt/rtdm/fd.c
index 4d1e597..aeb494b 100644
--- a/kernel/cobalt/rtdm/fd.c
+++ b/kernel/cobalt/rtdm/fd.c
@@ -730,37 +730,39 @@ void rtdm_fd_init(void)
kthread_run(fd_cleanup_thread, NULL, "rtdm_fd");
 }
 
-static inline void warn_user(const char *name)
+static inline void warn_user(struct file *file, const char *call)
 {
+   struct dentry *dentry = file->f_path.dentry;
+   
printk(XENO_WARNING
-  "%s[%d] called regular %s() with RTDM file/socket\n",
-  current->comm, current->pid, name + 5);
+  "%s[%d] called regular %s() on /dev/rtdm/%s\n",
+  current->comm, current->pid, call + 5, dentry->d_name.name);
 }
 
 static ssize_t dumb_read(struct file *file, char  __user *buf,
 size_t count, loff_t __user *ppos)
 {
-   warn_user(__func__);
+   warn_user(file, __func__);
return -EINVAL;
 }
 
 static ssize_t dumb_write(struct file *file,  const char __user *buf,
  size_t count, loff_t __user *ppos)
 {
-   warn_user(__func__);
+   warn_user(file, __func__);
return -EINVAL;
 }
 
 static unsigned int dumb_poll(struct file *file, poll_table *pt)
 {
-   warn_user(__func__);
+   warn_user(file, __func__);
return -EINVAL;
 }
 
 static long dumb_ioctl(struct file *file, unsigned int cmd,
   unsigned long arg)
 {
-   warn_user(__func__);
+   warn_user(file, __func__);
return -EINVAL;
 }
 


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


[Xenomai-git] Philippe Gerum : cobalt/x86: upgrade I-pipe support

2015-10-17 Thread git repository hosting
Module: xenomai-3
Branch: arm64
Commit: afbe6d48c2a43daddabf5e20cb9c0f631e925098
URL:
http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=afbe6d48c2a43daddabf5e20cb9c0f631e925098

Author: Philippe Gerum 
Date:   Tue Oct  6 15:38:37 2015 +0200

cobalt/x86: upgrade I-pipe support

---

 .../arch/x86/patches/ipipe-core-3.16.7-x86-5.patch |15377 
 ...-x86-2.patch => ipipe-core-3.18.20-x86-3.patch} |   89 +-
 2 files changed, 56 insertions(+), 15410 deletions(-)

Diff:   
http://git.xenomai.org/?p=xenomai-3.git;a=commitdiff;h=afbe6d48c2a43daddabf5e20cb9c0f631e925098

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


[Xenomai-git] Philippe Gerum : cobalt/arm64: restrict unlocked switch to SMP

2015-10-17 Thread git repository hosting
Module: xenomai-3
Branch: arm64
Commit: 42ed1574420c688b4acb5e21c2ec1adc3d16a1b3
URL:
http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=42ed1574420c688b4acb5e21c2ec1adc3d16a1b3

Author: Philippe Gerum 
Date:   Thu Sep 17 11:43:50 2015 +0200

cobalt/arm64: restrict unlocked switch to SMP

Unlocked switching for Xenomai/ARM was specifically introduced for
improving the interrupt latency on low-end armv4/armv5 platforms with
VIVT caches.

The once massive overhead imposed on the MMU context switching code
for invalidating the cache is long gone with VIPT indexing, and
keeping IRQs off while switching the memory context on armv8 these
days is not an issue. Actually, the complexity of the code involved in
dealing with unlocked switching may overbalance the expected gain.

However, the mainline kernel implementation for ASID management in the
SMP case currently requires us to keep IRQs enabled when allocating a
new MM context over the Xenomai domain, just like it did for aarch32
during the 2.6.3x time frame until the IPI-based approach was
eventually dropped.

So, let's restrict unlocked switching to the SMP case, forcing it off
otherwise, in the hope we can drop it entirely in the future.

At this chance, CONFIG_IPIPE_WANT_PREEMPTIBLE_SWITCH moves to the
kernel area, where it actually belongs.

---

 kernel/cobalt/arch/arm64/Kconfig |   21 +
 1 file changed, 1 insertion(+), 20 deletions(-)

diff --git a/kernel/cobalt/arch/arm64/Kconfig b/kernel/cobalt/arch/arm64/Kconfig
index dc6485d..927c647 100644
--- a/kernel/cobalt/arch/arm64/Kconfig
+++ b/kernel/cobalt/arch/arm64/Kconfig
@@ -1,27 +1,8 @@
 source "kernel/xenomai/Kconfig"
 source "drivers/xenomai/Kconfig"
 
-menu "Machine/platform-specific options"
-
 config XENO_ARCH_UNLOCKED_SWITCH
-   bool "Unlocked context switch"
-   default y
-   help
-   The Cobalt core may allow non-atomic execution of the
-   machine-dependent context switching code, so that other CPUs
-   and/or local interrupts may execute concurrently.
-
-   This option reduces interrupt latency when costly cache and
-   TLB flushes are required to switch context.
-
-   You definitely want to enable that option on low-end ARM
-   platforms.
-endmenu
-
-config IPIPE_WANT_PREEMPTIBLE_SWITCH
-   bool
-   default y if XENO_ARCH_UNLOCKED_SWITCH
-   default n if !XENO_ARCH_UNLOCKED_SWITCH
+   def_bool IPIPE_WANT_PREEMPTIBLE_SWITCH
 
 config IPIPE_WANT_ACTIVE_MM
def_bool y


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


[Xenomai-git] Philippe Gerum : boilerplate/libc: add placeholder for pthread_setaffinity_np()

2015-10-17 Thread git repository hosting
Module: xenomai-3
Branch: arm64
Commit: 54161943141f38048a4fe741eeb6d62a533e8c1b
URL:
http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=54161943141f38048a4fe741eeb6d62a533e8c1b

Author: Philippe Gerum 
Date:   Mon Oct  5 15:18:45 2015 +0200

boilerplate/libc: add placeholder for pthread_setaffinity_np()

---

 configure.ac   |1 +
 include/boilerplate/libc.h |   10 ++
 2 files changed, 11 insertions(+)

diff --git a/configure.ac b/configure.ac
index b613515..8027b7d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -509,6 +509,7 @@ AC_CHECK_FUNCS([pthread_mutexattr_setprotocol   \
pthread_condattr_setclock   \
pthread_spin_lock fork  \
pthread_attr_setaffinity_np \
+   pthread_setaffinity_np  \
pthread_getattr_np  \
pthread_atfork  \
pthread_setname_np  \
diff --git a/include/boilerplate/libc.h b/include/boilerplate/libc.h
index d65ce3f..f544ef4 100644
--- a/include/boilerplate/libc.h
+++ b/include/boilerplate/libc.h
@@ -118,6 +118,16 @@ int pthread_attr_setaffinity_np(pthread_attr_t *attr,
return 0;
return ENOSYS;
 }
+
+static inline
+int pthread_setaffinity_np(pthread_t thread, size_t cpusetsize,
+  const cpu_set_t *cpuset)
+{
+   if (CPU_ISSET(0, cpuset) && CPU_COUNT(cpuset) == 1)
+   return 0;
+   return ENOSYS;
+}
+
 #endif /* !HAVE_PTHREAD_ATTR_SETAFFINITY_NP */
 
 #if !defined(HAVE_CLOCK_NANOSLEEP) && defined(CONFIG_XENO_MERCURY)


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


[Xenomai-git] Philippe Gerum : cobalt/posix/memory: use fixed minors for UMM devices

2015-10-17 Thread git repository hosting
Module: xenomai-3
Branch: arm64
Commit: 411605d4fac651577d932f51f7a978d92f09d074
URL:
http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=411605d4fac651577d932f51f7a978d92f09d074

Author: Philippe Gerum 
Date:   Sun Oct  4 10:17:52 2015 +0200

cobalt/posix/memory: use fixed minors for UMM devices

---

 kernel/cobalt/posix/memory.c |6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/kernel/cobalt/posix/memory.c b/kernel/cobalt/posix/memory.c
index 9e4d093..5304272 100644
--- a/kernel/cobalt/posix/memory.c
+++ b/kernel/cobalt/posix/memory.c
@@ -210,9 +210,8 @@ static struct rtdm_driver umm_driver = {
  RTDM_CLASS_MEMORY,
  RTDM_SUBCLASS_GENERIC,
  0),
-   .device_flags   =   RTDM_NAMED_DEVICE,
+   .device_flags   =   RTDM_NAMED_DEVICE|RTDM_FIXED_MINOR,
.device_count   =   2,
-   .context_size   =   0,
.ops = {
.ioctl_rt   =   umm_ioctl_rt,
.ioctl_nrt  =   umm_ioctl_nrt,
@@ -225,10 +224,12 @@ static struct rtdm_device umm_devices[] = {
[ UMM_PRIVATE ] = {
.driver = _driver,
.label = COBALT_MEMDEV_PRIVATE,
+   .minor = UMM_PRIVATE,
},
[ UMM_SHARED ] = {
.driver = _driver,
.label = COBALT_MEMDEV_SHARED,
+   .minor = UMM_SHARED,
},
 };
 
@@ -239,7 +240,6 @@ static struct rtdm_driver sysmem_driver = {
  0),
.device_flags   =   RTDM_NAMED_DEVICE,
.device_count   =   1,
-   .context_size   =   0,
.ops = {
.open   =   sysmem_open,
.ioctl_rt   =   sysmem_ioctl_rt,


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


[Xenomai-git] Gilles Chanteperdrix : cobalt/mutex: propagate autoinit error

2015-10-17 Thread git repository hosting
Module: xenomai-3
Branch: arm64
Commit: 67ae83b2f26ff7550e3390781bf9fe10b3aef41b
URL:
http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=67ae83b2f26ff7550e3390781bf9fe10b3aef41b

Author: Gilles Chanteperdrix 
Date:   Sun Oct 11 19:14:55 2015 +0200

cobalt/mutex: propagate autoinit error

instead of using assert.

---

 lib/cobalt/mutex.c |   11 +--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/lib/cobalt/mutex.c b/lib/cobalt/mutex.c
index daf0e3a..0b62f4d 100644
--- a/lib/cobalt/mutex.c
+++ b/lib/cobalt/mutex.c
@@ -212,12 +212,19 @@ static int __attribute__((cold)) 
cobalt_mutex_autoinit(pthread_mutex_t *mutex)
pthread_mutexattr_init();
pthread_mutexattr_settype(, type);
err = __COBALT(pthread_mutex_lock(_autoinit_mutex));
-   assert(err = 0);
+   if (err) {
+   ret = err;
+   goto out;
+   }
if (_mutex->magic != COBALT_MUTEX_MAGIC)
ret = __COBALT(pthread_mutex_init(mutex, ));
err = __COBALT(pthread_mutex_unlock(_autoinit_mutex));
-   assert(err == 0);
+   if (err) {
+   if (ret == 0)
+   ret = err;
+   }
 
+  out:
pthread_mutexattr_destroy();
 
return ret;


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


[Xenomai-git] Dmitriy Cherkasov : cobalt/arm64: features.h: disable XNARCH_HAVE_LLMULSHFT, XNARCH_HAVE_NODIV_LLIMD for armv8/aarch64, as arm64 does not have these

2015-10-17 Thread git repository hosting
Module: xenomai-3
Branch: arm64
Commit: 246a5ae58da2a2521c248398351e61836059f722
URL:
http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=246a5ae58da2a2521c248398351e61836059f722

Author: Dmitriy Cherkasov 
Date:   Thu May  7 16:40:07 2015 -0700

cobalt/arm64: features.h: disable XNARCH_HAVE_LLMULSHFT, 
XNARCH_HAVE_NODIV_LLIMD for armv8/aarch64, as arm64 does not have these

---

 kernel/cobalt/arch/arm64/include/asm/xenomai/uapi/features.h |2 ++
 1 file changed, 2 insertions(+)

diff --git a/kernel/cobalt/arch/arm64/include/asm/xenomai/uapi/features.h 
b/kernel/cobalt/arch/arm64/include/asm/xenomai/uapi/features.h
index fe50182..85faa59 100644
--- a/kernel/cobalt/arch/arm64/include/asm/xenomai/uapi/features.h
+++ b/kernel/cobalt/arch/arm64/include/asm/xenomai/uapi/features.h
@@ -28,8 +28,10 @@
 
 #define XENOMAI_FEAT_MAN (__xn_feat_generic_man_mask)
 
+#ifndef __aarch64__
 #define XNARCH_HAVE_LLMULSHFT1
 #define XNARCH_HAVE_NODIV_LLIMD  1
+#endif
 
 struct cobalt_featinfo_archdep { /* no arch-specific feature */ };
 


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


[Xenomai-git] Philippe Gerum : cobalt/arm: upgrade I-pipe support

2015-10-17 Thread git repository hosting
Module: xenomai-3
Branch: arm64
Commit: cdd4d58892b456cf18a122329f21a5bd6d40c54e
URL:
http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=cdd4d58892b456cf18a122329f21a5bd6d40c54e

Author: Philippe Gerum 
Date:   Tue Oct  6 15:38:27 2015 +0200

cobalt/arm: upgrade I-pipe support

---

 ...-arm-5.patch => ipipe-core-3.18.20-arm-6.patch} |  134 +---
 1 file changed, 86 insertions(+), 48 deletions(-)

diff --git a/kernel/cobalt/arch/arm/patches/ipipe-core-3.18.20-arm-5.patch 
b/kernel/cobalt/arch/arm/patches/ipipe-core-3.18.20-arm-6.patch
similarity index 99%
rename from kernel/cobalt/arch/arm/patches/ipipe-core-3.18.20-arm-5.patch
rename to kernel/cobalt/arch/arm/patches/ipipe-core-3.18.20-arm-6.patch
index 6bded0c..073b2a7 100644
--- a/kernel/cobalt/arch/arm/patches/ipipe-core-3.18.20-arm-5.patch
+++ b/kernel/cobalt/arch/arm/patches/ipipe-core-3.18.20-arm-6.patch
@@ -159,17 +159,18 @@ index 38c89ca..7c954bc 100644
  
  # Keep at91 dtb files sorted alphabetically for each SoC
 diff --git a/arch/arm/boot/dts/imx6qdl.dtsi b/arch/arm/boot/dts/imx6qdl.dtsi
-index 9596ed5..3e7a4a3 100644
+index 9596ed5..8957633e 100644
 --- a/arch/arm/boot/dts/imx6qdl.dtsi
 +++ b/arch/arm/boot/dts/imx6qdl.dtsi
-@@ -125,6 +125,12 @@
+@@ -125,6 +125,13 @@
clocks = < IMX6QDL_CLK_TWD>;
};
  
 +  timer@00a00200 {
 +  compatible = "arm,cortex-a9-global-timer";
 +  reg = <0x00a00200 0x20>;
-+  clocks = < 15>;
++  interrupts = <1 11 0xf01>;
++  clocks = < IMX6QDL_CLK_TWD>;
 +  };
 +
L2: l2-cache@00a02000 {
@@ -690,10 +691,10 @@ index 000..19b50df
 +  power = <50>;
 +};
 diff --git a/arch/arm/boot/dts/omap4.dtsi b/arch/arm/boot/dts/omap4.dtsi
-index 878c979..aae32e6 100644
+index 878c979..dc2450d 100644
 --- a/arch/arm/boot/dts/omap4.dtsi
 +++ b/arch/arm/boot/dts/omap4.dtsi
-@@ -72,6 +72,12 @@
+@@ -72,6 +72,13 @@
interrupts = ;
};
  
@@ -701,6 +702,7 @@ index 878c979..aae32e6 100644
 +  compatible = "arm,cortex-a9-global-timer";
 +  reg = <0x48240200 0x20>;
 +  clocks = <_periphclk>;
++  interrupts = ;
 +  };
 +
/*
@@ -1651,7 +1653,7 @@ index bb28af7..780ca50 100644
  static inline void sp804_clockevents_init(void __iomem *base, unsigned int 
irq, const char *name)
 diff --git a/arch/arm/include/asm/ipipe.h b/arch/arm/include/asm/ipipe.h
 new file mode 100644
-index 000..5c7e9bd
+index 000..76c7b6b
 --- /dev/null
 +++ b/arch/arm/include/asm/ipipe.h
 @@ -0,0 +1,272 @@
@@ -1699,7 +1701,7 @@ index 000..5c7e9bd
 +#include 
 +#include 
 +
-+#define IPIPE_CORE_RELEASE5
++#define IPIPE_CORE_RELEASE6
 +
 +struct ipipe_domain;
 +
@@ -3717,6 +3719,19 @@ index 4176df7..8451be2 100644
  /*
   * These are the registers used in the syscall handler, and allow us to
   * have in theory up to 7 arguments to a function - r0 to r6.
+diff --git a/arch/arm/kernel/hibernate.c b/arch/arm/kernel/hibernate.c
+index cfb354f..d11d476 100644
+--- a/arch/arm/kernel/hibernate.c
 b/arch/arm/kernel/hibernate.c
+@@ -83,7 +83,7 @@ static void notrace arch_restore_image(void *unused)
+ {
+   struct pbe *pbe;
+ 
+-  cpu_switch_mm(idmap_pgd, _mm);
++  cpu_switch_mm(idmap_pgd, _mm, 1);
+   for (pbe = restore_pblist; pbe; pbe = pbe->next)
+   copy_page(pbe->orig_address, pbe->address);
+ 
 diff --git a/arch/arm/kernel/ipipe.c b/arch/arm/kernel/ipipe.c
 new file mode 100644
 index 000..9577fbb
@@ -4285,10 +4300,10 @@ index 000..9577fbb
 +EXPORT_SYMBOL_GPL(cpu_architecture);
 diff --git a/arch/arm/kernel/ipipe_tsc.c b/arch/arm/kernel/ipipe_tsc.c
 new file mode 100644
-index 000..f0cfd86
+index 000..4a87f0c
 --- /dev/null
 +++ b/arch/arm/kernel/ipipe_tsc.c
-@@ -0,0 +1,201 @@
+@@ -0,0 +1,203 @@
 +#include 
 +#include 
 +#include 
@@ -4456,6 +4471,8 @@ index 000..f0cfd86
 +  ipipe_tsc_update_timer.function = __ipipe_tsc_update_fn;
 +  mod_timer(_tsc_update_timer,
 +  jiffies + ipipe_tsc_update_timer.data);
++
++  __ipipe_tracer_hrclock_initialized();
 +}
 +
 +void __ipipe_mach_get_tscinfo(struct __ipipe_tscinfo *info)
@@ -4969,7 +4986,7 @@ index bd19834..c49e067 100644
} while (thread_flags & _TIF_WORK_MASK);
return 0;
 diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c
-index a8e32aa..bd81cc5 100644
+index a8e32aa..4939e05 100644
 --- a/arch/arm/kernel/smp.c
 +++ b/arch/arm/kernel/smp.c
 @@ -72,8 +72,24 @@ enum ipi_msg_type {
@@ -5016,18 +5033,16 @@ index a8e32aa..bd81cc5 100644
  
/*
 * All kernel threads share the same mm context; grab a
-@@ -514,6 +537,93 @@ void arch_irq_work_raise(void)
+@@ -514,6 +537,91 @@ void arch_irq_work_raise(void)
  #endif
  
  #ifdef CONFIG_GENERIC_CLOCKEVENTS_BROADCAST
 +
 +static inline void ipi_timer(void)
 +{

[Xenomai-git] Gilles Chanteperdrix : cobalt/cond: fix autoinit

2015-10-17 Thread git repository hosting
Module: xenomai-3
Branch: arm64
Commit: a792041f32220080ff19ceb47c97d5fb9155dad2
URL:
http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=a792041f32220080ff19ceb47c97d5fb9155dad2

Author: Gilles Chanteperdrix 
Date:   Fri Oct  2 23:01:09 2015 +0200

cobalt/cond: fix autoinit

Drop comparison with PTHREAD_COND_INITIALIZER, as the structure
contains 4 bytes of padding for external alignment on ARM, which are
not initialized by PTHREAD_COND_INITIALIZER. The memcmp may fail whereas
the pthread_cond_t structure is correctly initialized.

---

 lib/cobalt/cond.c |5 -
 1 file changed, 5 deletions(-)

diff --git a/lib/cobalt/cond.c b/lib/cobalt/cond.c
index 19ef372..7eeb9e6 100644
--- a/lib/cobalt/cond.c
+++ b/lib/cobalt/cond.c
@@ -194,11 +194,6 @@ static void __pthread_cond_cleanup(void *data)
 
 static int __attribute__((cold)) cobalt_cond_autoinit(pthread_cond_t *cond)
 {
-   static pthread_cond_t uninit_cond = PTHREAD_COND_INITIALIZER;
-
-   if (memcmp(cond, _cond, sizeof(*cond)))
-   return EINVAL;
-
return __COBALT(pthread_cond_init(cond, NULL));
 }
 


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


[Xenomai-git] Gilles Chanteperdrix : cobalt/mutex: invalidate autoinit mutex upon fork

2015-10-17 Thread git repository hosting
Module: xenomai-3
Branch: arm64
Commit: e55f70bc55ea8f408eabaa9aee635a4b0547294d
URL:
http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=e55f70bc55ea8f408eabaa9aee635a4b0547294d

Author: Gilles Chanteperdrix 
Date:   Sun Oct 11 19:13:53 2015 +0200

cobalt/mutex: invalidate autoinit mutex upon fork

In order to avoid an EBUSY error because the same mutex is reinitialized
by the child process.

---

 lib/cobalt/mutex.c |3 +++
 1 file changed, 3 insertions(+)

diff --git a/lib/cobalt/mutex.c b/lib/cobalt/mutex.c
index f613478..daf0e3a 100644
--- a/lib/cobalt/mutex.c
+++ b/lib/cobalt/mutex.c
@@ -60,6 +60,8 @@ static pthread_mutex_t cobalt_autoinit_mutex;
 
 void cobalt_mutex_init(void)
 {
+   struct cobalt_mutex_shadow *_mutex =
+   &((union cobalt_mutex_union 
*)_autoinit_mutex)->shadow_mutex;
pthread_mutexattr_t rt_init_mattr;
int err __attribute__((unused));
 
@@ -67,6 +69,7 @@ void cobalt_mutex_init(void)
 
pthread_mutexattr_init(_init_mattr);
pthread_mutexattr_setprotocol(_init_mattr, PTHREAD_PRIO_INHERIT);
+   _mutex->magic = ~COBALT_MUTEX_MAGIC;
err = __COBALT(pthread_mutex_init(_autoinit_mutex,
_init_mattr));
assert(err == 0);


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


[Xenomai-git] Gilles Chanteperdrix : smokey/posix-cond: add testcase for autoinit

2015-10-17 Thread git repository hosting
Module: xenomai-3
Branch: arm64
Commit: a675f686d9a0b97a4cf397b11a6362787ee8a471
URL:
http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=a675f686d9a0b97a4cf397b11a6362787ee8a471

Author: Gilles Chanteperdrix 
Date:   Fri Oct  2 23:06:14 2015 +0200

smokey/posix-cond: add testcase for autoinit

---

 testsuite/smokey/posix-cond/posix-cond.c |   53 ++
 1 file changed, 53 insertions(+)

diff --git a/testsuite/smokey/posix-cond/posix-cond.c 
b/testsuite/smokey/posix-cond/posix-cond.c
index 5429d1f..6c9a458 100644
--- a/testsuite/smokey/posix-cond/posix-cond.c
+++ b/testsuite/smokey/posix-cond/posix-cond.c
@@ -204,6 +204,35 @@ static void *cond_signaler(void *cookie)
return NULL;
 }
 
+static void autoinit_simple_condwait(void)
+{
+   pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
+   unsigned long long start;
+   pthread_mutex_t mutex;
+   struct cond_mutex cm = {
+   .mutex = ,
+   .cond = ,
+   };
+   pthread_t cond_signaler_tid;
+
+   smokey_trace("%s", __func__);
+
+   check("mutex_init", mutex_init(, PTHREAD_MUTEX_DEFAULT, 0), 0);
+   check("mutex_lock", mutex_lock(), 0);
+   check("thread_spawn",
+ thread_spawn(_signaler_tid, 2, cond_signaler, ), 0);
+   thread_msleep(11);
+
+   start = timer_get_tsc();
+   check("cond_wait", cond_wait(, , 0), 0);
+   check_sleep("cond_wait", start);
+   thread_msleep(10);
+   check("mutex_unlock", mutex_unlock(), 0);
+   check("thread_join", thread_join(cond_signaler_tid), 0);
+   check("mutex_destroy", mutex_destroy(), 0);
+   check("cond_destroy", cond_destroy(), 0);
+}
+
 static void simple_condwait(void)
 {
unsigned long long start;
@@ -257,6 +286,28 @@ static void relative_condwait(void)
check("cond_destroy", cond_destroy(), 0);
 }
 
+static void autoinit_absolute_condwait(void)
+{
+   pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
+   unsigned long long start;
+   pthread_mutex_t mutex;
+
+   smokey_trace("%s", __func__);
+
+   check("mutex_init", mutex_init(, PTHREAD_MUTEX_DEFAULT, 0), 0);
+   check("mutex_lock", mutex_lock(), 0);
+
+   start = timer_get_tsc();
+   check("cond_wait",
+ cond_wait_until(, , timer_read() + 10 * NS_PER_MS),
+ -ETIMEDOUT);
+   check_sleep("cond_wait", start);
+
+   check("mutex_unlock", mutex_unlock(), 0);
+   check("mutex_destroy", mutex_destroy(), 0);
+   check("cond_destroy", cond_destroy(), 0);
+}
+
 static void absolute_condwait(void)
 {
unsigned long long start;
@@ -633,8 +684,10 @@ int run_posix_cond(struct smokey_test *t, int argc, char 
*const argv[])
sparam.sched_priority = 2;
pthread_setschedparam(pthread_self(), SCHED_FIFO, );
 
+   autoinit_simple_condwait();
simple_condwait();
relative_condwait();
+   autoinit_absolute_condwait();
absolute_condwait();
sig_norestart_condwait();
sig_restart_condwait();


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


[Xenomai-git] Gilles Chanteperdrix : posix/mutex: fix autoinit

2015-10-17 Thread git repository hosting
Module: xenomai-3
Branch: arm64
Commit: dfa9ad71e481c70069cce539b462806ab2abee6c
URL:
http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=dfa9ad71e481c70069cce539b462806ab2abee6c

Author: Gilles Chanteperdrix 
Date:   Fri Oct  2 23:07:16 2015 +0200

posix/mutex: fix autoinit

If several threads call simultaneously pthread_mutex_lock() on a mutex
initialized with PTHREAD_MUTEX_INITIALIZER, the current automatic
intialization may result in several initializations of the mutex.
Serialize the automatic initialization with a global mutex to avoid
that.

This can be done only for automatic initialization, as
pthread_mutex_init() may be called from a non Xenomai thread, which
could not sleep on a cobalt mutex, and serializing with a plain Linux
mutex would cause a switch to secondary mode for pthread_mutex_lock() in
case of automatic initialization.

Using a condition variable would create a cancellation point, whereas
pthread_mutex_lock() and pthread_mutex_unlock() can not be cancellation
points.

---

 lib/cobalt/init.c |2 +-
 lib/cobalt/internal.h |2 +-
 lib/cobalt/mutex.c|   26 +++---
 3 files changed, 25 insertions(+), 5 deletions(-)

diff --git a/lib/cobalt/init.c b/lib/cobalt/init.c
index 2910f6e..9d1674d 100644
--- a/lib/cobalt/init.c
+++ b/lib/cobalt/init.c
@@ -172,6 +172,7 @@ static void __cobalt_init(void)
sizeof(sem_t),
sizeof(struct cobalt_sem_shadow));
 
+   cobalt_mutex_init();
cobalt_thread_init();
cobalt_print_init();
 }
@@ -189,7 +190,6 @@ int cobalt_init(void)
int policy, ret;
 
commit_stack_memory();  /* We only need this for the main thread */
-   cobalt_default_mutexattr_init();
cobalt_default_condattr_init();
__cobalt_init();
 
diff --git a/lib/cobalt/internal.h b/lib/cobalt/internal.h
index 540c286..4f03cf0 100644
--- a/lib/cobalt/internal.h
+++ b/lib/cobalt/internal.h
@@ -51,7 +51,7 @@ void cobalt_print_init_atfork(void);
 
 void cobalt_ticks_init(unsigned long long freq);
 
-void cobalt_default_mutexattr_init(void);
+void cobalt_mutex_init(void);
 
 void cobalt_default_condattr_init(void);
 
diff --git a/lib/cobalt/mutex.c b/lib/cobalt/mutex.c
index e4024e3..f613478 100644
--- a/lib/cobalt/mutex.c
+++ b/lib/cobalt/mutex.c
@@ -56,10 +56,21 @@
  */
 
 static pthread_mutexattr_t cobalt_default_mutexattr;
+static pthread_mutex_t cobalt_autoinit_mutex;
 
-void cobalt_default_mutexattr_init(void)
+void cobalt_mutex_init(void)
 {
+   pthread_mutexattr_t rt_init_mattr;
+   int err __attribute__((unused));
+
pthread_mutexattr_init(_default_mutexattr);
+
+   pthread_mutexattr_init(_init_mattr);
+   pthread_mutexattr_setprotocol(_init_mattr, PTHREAD_PRIO_INHERIT);
+   err = __COBALT(pthread_mutex_init(_autoinit_mutex,
+   _init_mattr));
+   assert(err == 0);
+   pthread_mutexattr_destroy(_init_mattr);
 }
 
 /**
@@ -176,12 +187,15 @@ COBALT_IMPL(int, pthread_mutex_destroy, (pthread_mutex_t 
*mutex))
 static int __attribute__((cold)) cobalt_mutex_autoinit(pthread_mutex_t *mutex)
 {
static pthread_mutex_t uninit_normal_mutex = PTHREAD_MUTEX_INITIALIZER;
+   struct cobalt_mutex_shadow *_mutex =
+   &((union cobalt_mutex_union *)mutex)->shadow_mutex;
static pthread_mutex_t uninit_recursive_mutex =
PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP;
static pthread_mutex_t uninit_errorcheck_mutex =
PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP;
+   int err __attribute__((unused));
pthread_mutexattr_t mattr;
-   int ret, type;
+   int ret = 0, type;
 
if (memcmp(mutex, _normal_mutex, sizeof(*mutex)) == 0)
type = PTHREAD_MUTEX_DEFAULT;
@@ -194,7 +208,13 @@ static int __attribute__((cold)) 
cobalt_mutex_autoinit(pthread_mutex_t *mutex)
 
pthread_mutexattr_init();
pthread_mutexattr_settype(, type);
-   ret = __COBALT(pthread_mutex_init(mutex, ));
+   err = __COBALT(pthread_mutex_lock(_autoinit_mutex));
+   assert(err = 0);
+   if (_mutex->magic != COBALT_MUTEX_MAGIC)
+   ret = __COBALT(pthread_mutex_init(mutex, ));
+   err = __COBALT(pthread_mutex_unlock(_autoinit_mutex));
+   assert(err == 0);
+
pthread_mutexattr_destroy();
 
return ret;


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


[Xenomai-git] Philippe Gerum : drivers/can/flexcan: leave management of references to devm

2015-10-17 Thread git repository hosting
Module: xenomai-3
Branch: arm64
Commit: 584f825fd0c7dcf1d7d4ad6f59e253d935c88b5d
URL:
http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=584f825fd0c7dcf1d7d4ad6f59e253d935c88b5d

Author: Philippe Gerum 
Date:   Mon Oct  5 14:06:54 2015 +0200

drivers/can/flexcan: leave management of references to devm

Echoes commit 1994454 from Xenomai 2.6.

---

 kernel/drivers/can/rtcan_flexcan.c |8 
 1 file changed, 8 deletions(-)

diff --git a/kernel/drivers/can/rtcan_flexcan.c 
b/kernel/drivers/can/rtcan_flexcan.c
index 27c856d..ac88d07 100644
--- a/kernel/drivers/can/rtcan_flexcan.c
+++ b/kernel/drivers/can/rtcan_flexcan.c
@@ -996,12 +996,6 @@ static void unregister_flexcandev(struct rtcan_device *dev)
rtcan_dev_unregister(dev);
 }
 
-static void put_clocks(struct flexcan_priv *priv)
-{
-   clk_put(priv->clk_per);
-   clk_put(priv->clk_ipg);
-}
-
 static struct of_device_id flexcan_of_match[] = {
{ .compatible = "fsl,p1010-flexcan", .data = _p1010_devtype_data, },
{ .compatible = "fsl,imx28-flexcan", .data = _imx28_devtype_data, },
@@ -1125,7 +1119,6 @@ out_register:
 out_map:
release_mem_region(mem->start, mem_size);
 out_get:
-   put_clocks(priv);
rtcan_dev_free(dev);
 
return err;
@@ -1143,7 +1136,6 @@ static int flexcan_remove(struct platform_device *pdev)
 
mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
release_mem_region(mem->start, resource_size(mem));
-   put_clocks(priv);
 
rtcan_dev_free(dev);
 


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


[Xenomai-git] Philippe Gerum : alchemy/heap: allow zero size for SBA binding

2015-10-17 Thread git repository hosting
Module: xenomai-3
Branch: arm64
Commit: b4a4fdba401f004d55f49ba6ed89755e86da208f
URL:
http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=b4a4fdba401f004d55f49ba6ed89755e86da208f

Author: Philippe Gerum 
Date:   Wed Oct 14 14:45:30 2015 +0200

alchemy/heap: allow zero size for SBA binding

---

 lib/alchemy/heap.c |4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/lib/alchemy/heap.c b/lib/alchemy/heap.c
index 20531e3..146bfa1 100644
--- a/lib/alchemy/heap.c
+++ b/lib/alchemy/heap.c
@@ -442,7 +442,9 @@ int rt_heap_alloc_timed(RT_HEAP *heap,
p = __mptr(hcb->sba);
if (p)
goto done;
-   if (size > 0 && size != hcb->size) {
+   if (size == 0)
+   size = heapobj_size(>hobj);
+   else if (size != hcb->size) {
ret = -EINVAL;
goto done;
}


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


[Xenomai-git] Philippe Gerum : doc/doxygen: expand macro confusing to the parser

2015-10-17 Thread git repository hosting
Module: xenomai-3
Branch: arm64
Commit: f66763e28a96eb19f438bc1f761c4bba5dfe7db7
URL:
http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=f66763e28a96eb19f438bc1f761c4bba5dfe7db7

Author: Philippe Gerum 
Date:   Tue Oct  6 16:28:39 2015 +0200

doc/doxygen: expand macro confusing to the parser

---

 doc/doxygen/xeno3prm-common.conf.in |1 +
 1 file changed, 1 insertion(+)

diff --git a/doc/doxygen/xeno3prm-common.conf.in 
b/doc/doxygen/xeno3prm-common.conf.in
index 9f3fca9..097a582 100644
--- a/doc/doxygen/xeno3prm-common.conf.in
+++ b/doc/doxygen/xeno3prm-common.conf.in
@@ -651,6 +651,7 @@ PREDEFINED = DOXYGEN_CPP\
CONFIG_SMP  \
 "dref_type(T)=opaque"  \
 "EXPORT_SYMBOL_GPL(symbol)=//" \
+"DECLARE_BITMAP(symbol, nr)=unsigned long symbol[BITS_TO_LONGS(nr)]" \
"COBALT_IMPL(T,I,A)=T I A"  \
"COBALT_DECL(T,P)=T P"  \
"COBALT_SYSCALL(N,M,T,A)=T N A" \


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


[Xenomai-git] Dmitriy Cherkasov : cobalt/arm64: add basic FPU support

2015-10-17 Thread git repository hosting
Module: xenomai-3
Branch: arm64
Commit: 8e4278c23c6ab7a269864d697d4d62e97936d72b
URL:
http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=8e4278c23c6ab7a269864d697d4d62e97936d72b

Author: Dmitriy Cherkasov 
Date:   Fri Sep 11 17:58:54 2015 -0700

cobalt/arm64: add basic FPU support

---

 kernel/cobalt/arch/arm64/Kconfig   |2 +-
 .../cobalt/arch/arm64/include/asm/xenomai/fptest.h |   11 +-
 .../cobalt/arch/arm64/include/asm/xenomai/thread.h |   17 +-
 .../arch/arm64/include/asm/xenomai/uapi/fptest.h   |   83 +++--
 kernel/cobalt/arch/arm64/thread.c  |  329 +---
 lib/cobalt/arch/arm64/features.c   |4 +-
 6 files changed, 153 insertions(+), 293 deletions(-)

diff --git a/kernel/cobalt/arch/arm64/Kconfig b/kernel/cobalt/arch/arm64/Kconfig
index dd5a8c6..27b5026 100644
--- a/kernel/cobalt/arch/arm64/Kconfig
+++ b/kernel/cobalt/arch/arm64/Kconfig
@@ -8,7 +8,7 @@ config XENO_ARCH_WANT_TIP
def_bool y
 
 config XENO_ARCH_FPU
-   def_bool VFP
+   def_bool y
 
 config XENO_ARCH_SYS3264
 def_bool n
diff --git a/kernel/cobalt/arch/arm64/include/asm/xenomai/fptest.h 
b/kernel/cobalt/arch/arm64/include/asm/xenomai/fptest.h
index a76f1e6..743d758 100644
--- a/kernel/cobalt/arch/arm64/include/asm/xenomai/fptest.h
+++ b/kernel/cobalt/arch/arm64/include/asm/xenomai/fptest.h
@@ -20,15 +20,10 @@
 #define _COBALT_ARM_ASM_FPTEST_H
 
 #include 
+#include 
 #include 
 
-#ifdef CONFIG_VFP
-#define have_vfp (elf_hwcap & HWCAP_VFP)
-#else /* !CONFIG_VFP */
-#define have_vfp 0
-#endif /* !CONFIG_VFP */
-
-#include 
+#define have_fp (elf_hwcap & HWCAP_FP)
 
 static inline int fp_kernel_supported(void)
 {
@@ -46,7 +41,7 @@ static inline void fp_linux_end(void)
 
 static inline int fp_detect(void)
 {
-   return have_vfp ? __COBALT_HAVE_VFP : 0;
+   return have_fp ? __COBALT_HAVE_FPU : 0;
 }
 
 #endif /* _COBALT_ARM_ASM_FPTEST_H */
diff --git a/kernel/cobalt/arch/arm64/include/asm/xenomai/thread.h 
b/kernel/cobalt/arch/arm64/include/asm/xenomai/thread.h
index a8d7ed4..bfcceb4 100644
--- a/kernel/cobalt/arch/arm64/include/asm/xenomai/thread.h
+++ b/kernel/cobalt/arch/arm64/include/asm/xenomai/thread.h
@@ -21,21 +21,12 @@
 
 #include 
 
-#ifdef CONFIG_XENO_ARCH_FPU
-#ifdef CONFIG_VFP
-#include 
-#endif /* CONFIG_VFP */
-#endif /* !CONFIG_XENO_ARCH_FPU */
 
 struct xnarchtcb {
struct xntcb core;
 #ifdef CONFIG_XENO_ARCH_FPU
-#ifdef CONFIG_VFP
-   union vfp_state *fpup;
+   struct fpsimd_state *fpup;
 #define xnarch_fpu_ptr(tcb) ((tcb)->fpup)
-#else
-#define xnarch_fpu_ptr(tcb) NULL
-#endif
 #endif
struct {
unsigned long pc;
@@ -67,7 +58,7 @@ static inline void xnarch_enter_root(struct xnthread *root) { 
}
 
 int xnarch_escalate(void);
 
-#if defined(CONFIG_XENO_ARCH_FPU) && defined(CONFIG_VFP)
+#if defined(CONFIG_XENO_ARCH_FPU)
 
 static inline void xnarch_init_root_tcb(struct xnthread *thread)
 {
@@ -88,7 +79,7 @@ void xnarch_switch_fpu(struct xnthread *from, struct xnthread 
*thread);
 int xnarch_handle_fpu_fault(struct xnthread *from, 
struct xnthread *to, struct ipipe_trap_data *d);
 
-#else /* !CONFIG_XENO_ARCH_FPU || !CONFIG_VFP */
+#else /* !CONFIG_XENO_ARCH_FPU */
 
 static inline void xnarch_init_root_tcb(struct xnthread *thread) { }
 static inline void xnarch_init_shadow_tcb(struct xnthread *thread) { }
@@ -114,7 +105,7 @@ static inline int xnarch_handle_fpu_fault(struct xnthread 
*from,
 {
return 0;
 }
-#endif /*  !CONFIG_XENO_ARCH_FPU || !CONFIG_VFP */
+#endif /*  !CONFIG_XENO_ARCH_FPU */
 
 static inline void xnarch_enable_kfpu(void) { }
 
diff --git a/kernel/cobalt/arch/arm64/include/asm/xenomai/uapi/fptest.h 
b/kernel/cobalt/arch/arm64/include/asm/xenomai/uapi/fptest.h
index 65a3e31..25bc976 100644
--- a/kernel/cobalt/arch/arm64/include/asm/xenomai/uapi/fptest.h
+++ b/kernel/cobalt/arch/arm64/include/asm/xenomai/uapi/fptest.h
@@ -18,53 +18,86 @@
 #ifndef _COBALT_ARM_ASM_UAPI_FPTEST_H
 #define _COBALT_ARM_ASM_UAPI_FPTEST_H
 
-#ifdef __aarch64__
-/* CP10 and CP11, used for the FP/NEON operations, are already excluded from
-the list of valid operands for the generic coprocessor instructions */
-#define __COBALT_HAVE_VFP  0
-#else
-#define __COBALT_HAVE_VFP  0x1
-#endif
+#define __COBALT_HAVE_FPU  0x1
 
 static inline void fp_regs_set(int features, unsigned int val)
 {
-#if __COBALT_HAVE_VFP != 0
-   unsigned long long e[16];
+
+   unsigned long long e[32];
unsigned int i;
 
-   if (features & __COBALT_HAVE_VFP) {
-   for (i = 0; i < 16; i++)
+   if (features & __COBALT_HAVE_FPU) {
+
+   for (i = 0; i < 32; i++)
e[i] = val;
 
-   /* vldm %0!, {d0-d15},
-  AKA fldmiax %0!, {d0-d15} */
-   __asm__ __volatile__("ldc p11, cr0, [%0],#32*4":
-"=r"(i): "0"([0]): "memory");
+   

[Xenomai-git] Dmitriy Cherkasov : cobalt/arm64: FPU code cleanup

2015-10-17 Thread git repository hosting
Module: xenomai-3
Branch: arm64
Commit: dbaf7a78feb68dc2ae630c48dbad270a6cfac759
URL:
http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=dbaf7a78feb68dc2ae630c48dbad270a6cfac759

Author: Dmitriy Cherkasov 
Date:   Fri Oct  2 12:54:37 2015 -0700

cobalt/arm64: FPU code cleanup

---

 kernel/cobalt/arch/arm64/thread.c |   89 -
 1 file changed, 39 insertions(+), 50 deletions(-)

diff --git a/kernel/cobalt/arch/arm64/thread.c 
b/kernel/cobalt/arch/arm64/thread.c
index db369be..35dbd72 100644
--- a/kernel/cobalt/arch/arm64/thread.c
+++ b/kernel/cobalt/arch/arm64/thread.c
@@ -36,31 +36,44 @@
 
 #if defined(CONFIG_XENO_ARCH_FPU)
 
-static void enable_fpsimd(void) {
-   __asm__ __volatile__("mrs x1, cpacr_el1\n\
-   orr x1, x1, #(0x3 << 20)\n\
-   msr cpacr_el1, x1\n\
-   isb" : : : "x1", "memory", "cc");
+#define FPSIMD_EN (0x3 << 20)
+
+static inline unsigned long get_cpacr(void)
+{
+   unsigned long result;
+   __asm__ __volatile__("mrs %0, cpacr_el1": "=r"(result));
+   return result;
+}
+
+static inline void set_cpacr(long val)
+{
+   __asm__ __volatile__ (
+   "msr cpacr_el1, %0\n\t"
+   "isb"
+   : /* */ : "r"(val));
 }
 
-static void disable_fpsimd(void) {
-   __asm__ __volatile__("mrs x1, cpacr_el1\n\
-   and x1, x1, #~(0x3 << 20)\n\
-   msr cpacr_el1, x1\n\
-   isb" : : : "x1", "memory", "cc");
+static void enable_fpsimd(void)
+{
+   unsigned long cpacr = get_cpacr();
+   cpacr |= FPSIMD_EN;
+   set_cpacr(cpacr);
+}
+
+static void disable_fpsimd(void)
+{
+   unsigned long cpacr = get_cpacr();
+   cpacr &= ~FPSIMD_EN;
+   set_cpacr(cpacr);
 }
 
 int xnarch_fault_fpu_p(struct ipipe_trap_data *d)
 {
-   /* check if this is an FPU access trap to be handled by Xenomai */
-   if(d->exception == IPIPE_TRAP_FPU_ACC){
-   return 1;
-   }
-   /* FPU already enabled, propagate fault to kernel */
-   return 0;
+   return (d->exception == IPIPE_TRAP_FPU_ACC);
 }
 
-static inline struct fpsimd_state *get_fpu_owner(struct xnarchtcb *tcb) {
+static inline struct fpsimd_state *get_fpu_owner(struct xnarchtcb *tcb)
+{
return &(tcb->core.tsp->fpsimd_state);
 }
 
@@ -68,7 +81,6 @@ void xnarch_leave_root(struct xnthread *root)
 {
struct xnarchtcb *rootcb = xnthread_archtcb(root);
rootcb->fpup = get_fpu_owner(rootcb);
-   disable_fpsimd();
 }
 
 void xnarch_save_fpu(struct xnthread *thread)
@@ -83,29 +95,15 @@ void xnarch_switch_fpu(struct xnthread *from, struct 
xnthread *to)
struct fpsimd_state *const from_fpup = from ? from->tcb.fpup : NULL;
struct fpsimd_state *const to_fpup = to->tcb.fpup;
 
-   /*
-* This only gets called if XNFPU flag is set, or if migrating to Linux.
-* In both cases, this means turn on FPU and switch.
-*/
enable_fpsimd();
 
-   if (xnthread_test_state(to, XNROOT) == 0) {
-   if (from_fpup == to_fpup)
-   return;
-
-   if (from_fpup)
-   fpsimd_save_state(from_fpup);
-
-   fpsimd_load_state(to_fpup);
-   }
-   else {
-   /* Going to Linux. */
-   if (from_fpup)
-   fpsimd_save_state(from_fpup);
+   if (from_fpup == to_fpup)
+   return;
 
-   fpsimd_load_state(to_fpup);
-   }
+   if (from_fpup)
+   fpsimd_save_state(from_fpup);
 
+   fpsimd_load_state(to_fpup);
 }
 
 int xnarch_handle_fpu_fault(struct xnthread *from, 
@@ -113,9 +111,9 @@ int xnarch_handle_fpu_fault(struct xnthread *from,
 {
spl_t s;
 
+   /* FPU should already be enabled for XNFPU tasks. */
if (xnthread_test_state(to, XNFPU))
-   /* FPU is already enabled, probably an exception */
-  return 0;
+   BUG();
 
xnlock_get_irqsave(, s);
xnthread_set_state(to, XNFPU);
@@ -124,20 +122,13 @@ int xnarch_handle_fpu_fault(struct xnthread *from,
xnarch_switch_fpu(from, to);
 
return 1;
-
 }
 
 void xnarch_init_shadow_tcb(struct xnthread *thread)
 {
-   spl_t s;
struct xnarchtcb *tcb = xnthread_archtcb(thread);
-
tcb->fpup = &(tcb->core.host_task->thread.fpsimd_state);
-
-   xnlock_get_irqsave(, s);
xnthread_clear_state(thread, XNFPU);
-   xnlock_put_irqrestore(, s);
-
 }
 #endif /* CONFIG_XENO_ARCH_FPU */
 
@@ -210,16 +201,14 @@ void xnarch_switch_to(struct xnthread *out, struct 
xnthread *in)
xnarch_tls_thread_switch(in_tcb->core.tip->task);
xnarch_contextidr_thread_switch(in_tcb->core.tip->task);
 
-   /* check if we need to switch FPU on return to Linux */
-   if (xnthread_test_state(in, XNROOT) == 1)
-   

[Xenomai-git] Dmitriy Cherkasov : cobalt/arm64: add lazy FPU switching

2015-10-17 Thread git repository hosting
Module: xenomai-3
Branch: arm64
Commit: dd1e86f3c5c2007c74c448334b21a00d8b40f0c5
URL:
http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=dd1e86f3c5c2007c74c448334b21a00d8b40f0c5

Author: Dmitriy Cherkasov 
Date:   Thu Oct  1 15:47:41 2015 -0700

cobalt/arm64: add lazy FPU switching

---

 kernel/cobalt/arch/arm64/thread.c |   83 +++--
 1 file changed, 62 insertions(+), 21 deletions(-)

diff --git a/kernel/cobalt/arch/arm64/thread.c 
b/kernel/cobalt/arch/arm64/thread.c
index 316525f6..db369be 100644
--- a/kernel/cobalt/arch/arm64/thread.c
+++ b/kernel/cobalt/arch/arm64/thread.c
@@ -32,16 +32,31 @@
 #include 
 #include 
 #include 
-
+#include 
 
 #if defined(CONFIG_XENO_ARCH_FPU)
 
-static DEFINE_MUTEX(vfp_check_lock);
+static void enable_fpsimd(void) {
+   __asm__ __volatile__("mrs x1, cpacr_el1\n\
+   orr x1, x1, #(0x3 << 20)\n\
+   msr cpacr_el1, x1\n\
+   isb" : : : "x1", "memory", "cc");
+}
 
+static void disable_fpsimd(void) {
+   __asm__ __volatile__("mrs x1, cpacr_el1\n\
+   and x1, x1, #~(0x3 << 20)\n\
+   msr cpacr_el1, x1\n\
+   isb" : : : "x1", "memory", "cc");
+}
 
 int xnarch_fault_fpu_p(struct ipipe_trap_data *d)
 {
-   /* FPU never trapped, this will be a fault */
+   /* check if this is an FPU access trap to be handled by Xenomai */
+   if(d->exception == IPIPE_TRAP_FPU_ACC){
+   return 1;
+   }
+   /* FPU already enabled, propagate fault to kernel */
return 0;
 }
 
@@ -53,6 +68,7 @@ void xnarch_leave_root(struct xnthread *root)
 {
struct xnarchtcb *rootcb = xnthread_archtcb(root);
rootcb->fpup = get_fpu_owner(rootcb);
+   disable_fpsimd();
 }
 
 void xnarch_save_fpu(struct xnthread *thread)
@@ -65,45 +81,67 @@ void xnarch_save_fpu(struct xnthread *thread)
 void xnarch_switch_fpu(struct xnthread *from, struct xnthread *to)
 {
struct fpsimd_state *const from_fpup = from ? from->tcb.fpup : NULL;
-
-   /* always switch, no lazy switching */
-
struct fpsimd_state *const to_fpup = to->tcb.fpup;
 
-   if (from_fpup == to_fpup)
-   return;
+   /*
+* This only gets called if XNFPU flag is set, or if migrating to Linux.
+* In both cases, this means turn on FPU and switch.
+*/
+   enable_fpsimd();
+
+   if (xnthread_test_state(to, XNROOT) == 0) {
+   if (from_fpup == to_fpup)
+   return;
 
-   if (from_fpup)
-   fpsimd_save_state(from_fpup);
+   if (from_fpup)
+   fpsimd_save_state(from_fpup);
 
-   fpsimd_load_state(to_fpup);
+   fpsimd_load_state(to_fpup);
+   }
+   else {
+   /* Going to Linux. */
+   if (from_fpup)
+   fpsimd_save_state(from_fpup);
 
-   /* always set FPU enabled */
-   xnthread_set_state(to, XNFPU);
+   fpsimd_load_state(to_fpup);
+   }
 
 }
 
 int xnarch_handle_fpu_fault(struct xnthread *from, 
struct xnthread *to, struct ipipe_trap_data *d)
 {
-   /* FPU always enabled, faults force exit to Linux */
-   return 0;
+   spl_t s;
+
+   if (xnthread_test_state(to, XNFPU))
+   /* FPU is already enabled, probably an exception */
+  return 0;
+
+   xnlock_get_irqsave(, s);
+   xnthread_set_state(to, XNFPU);
+   xnlock_put_irqrestore(, s);
+
+   xnarch_switch_fpu(from, to);
+
+   return 1;
+
 }
 
 void xnarch_init_shadow_tcb(struct xnthread *thread)
 {
+   spl_t s;
struct xnarchtcb *tcb = xnthread_archtcb(thread);
 
tcb->fpup = &(tcb->core.host_task->thread.fpsimd_state);
 
-   /* XNFPU is always set, no lazy switching */
-   xnthread_set_state(thread, XNFPU);
+   xnlock_get_irqsave(, s);
+   xnthread_clear_state(thread, XNFPU);
+   xnlock_put_irqrestore(, s);
+
 }
 #endif /* CONFIG_XENO_ARCH_FPU */
 
-
 /* Switch support functions */
-
 static void xnarch_tls_thread_switch(struct task_struct *next)
 {
unsigned long tpidr, tpidrro;
@@ -141,8 +179,7 @@ static inline void xnarch_contextidr_thread_switch(struct 
task_struct *next)
 {
 }
 #endif
-
-/*/Switch support functions */
+/* End switch support functions */
 
 void xnarch_switch_to(struct xnthread *out, struct xnthread *in)
 {
@@ -173,6 +210,10 @@ void xnarch_switch_to(struct xnthread *out, struct 
xnthread *in)
xnarch_tls_thread_switch(in_tcb->core.tip->task);
xnarch_contextidr_thread_switch(in_tcb->core.tip->task);
 
+   /* check if we need to switch FPU on return to Linux */
+   if (xnthread_test_state(in, XNROOT) == 1)
+   xnarch_switch_fpu(out, in);
+
/*
 * Complete any pending TLB or cache maintenance on this CPU in case
 * the thread 

[Xenomai-git] Philippe Gerum : cobalt: bump ABI revision level

2015-10-17 Thread git repository hosting
Module: xenomai-3
Branch: arm64
Commit: f6573ba64fa65afe62b7420dd0b204b468836177
URL:
http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=f6573ba64fa65afe62b7420dd0b204b468836177

Author: Philippe Gerum 
Date:   Thu Jul 30 14:20:45 2015 +0200

cobalt: bump ABI revision level

---

 kernel/cobalt/arch/arm64/include/asm/xenomai/uapi/features.h |2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/kernel/cobalt/arch/arm64/include/asm/xenomai/uapi/features.h 
b/kernel/cobalt/arch/arm64/include/asm/xenomai/uapi/features.h
index 85faa59..3bea0ef 100644
--- a/kernel/cobalt/arch/arm64/include/asm/xenomai/uapi/features.h
+++ b/kernel/cobalt/arch/arm64/include/asm/xenomai/uapi/features.h
@@ -22,7 +22,7 @@
 #define _COBALT_ARM_ASM_UAPI_FEATURES_H
 
 /* The ABI revision level we use on this arch. */
-#define XENOMAI_ABI_REV   15UL
+#define XENOMAI_ABI_REV   16UL
 
 #define XENOMAI_FEAT_DEP (__xn_feat_generic_mask)
 


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


[Xenomai-git] Don Mahurin : cobalt/arm64: Use empty mayday implementation for arm64.

2015-10-17 Thread git repository hosting
Module: xenomai-3
Branch: arm64
Commit: 1f9b4c901ef08a5c8b2cc82932759e54b0e60fba
URL:
http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=1f9b4c901ef08a5c8b2cc82932759e54b0e60fba

Author: Don Mahurin 
Date:   Mon Sep 14 12:52:27 2015 -0700

cobalt/arm64: Use empty mayday implementation for arm64.

The arm mayday implementation was not correct for arm64. Replace with empty 
implementation.
Handle mayday in the linux domain, using xnthread_relax. This change is 
essentially the same as the general change proposed in the 'Mayday issues 
again' discussion (Jan Kiszka, Jun 21), though only applied to arch/arm64.

---

 kernel/cobalt/arch/arm64/mayday.c |   86 +
 1 file changed, 1 insertion(+), 85 deletions(-)

diff --git a/kernel/cobalt/arch/arm64/mayday.c 
b/kernel/cobalt/arch/arm64/mayday.c
index bc51ad6..ca1151c 100644
--- a/kernel/cobalt/arch/arm64/mayday.c
+++ b/kernel/cobalt/arch/arm64/mayday.c
@@ -28,72 +28,6 @@ static void *mayday;
 
 static inline void setup_mayday(void *page)
 {
-   /*
-* We want this code to appear at the top of the MAYDAY page:
-*
-* ifdef ARM_EABI
-*
-* e59f000c ldr r0, [pc, #12]
-* e59f700c ldr r7, [pc, #12]
-* ef00 svc 0x
-* e3a0 mov r0, #0
-* e580 str r0, [r0]; 
-* 105e .word   0x105e  ; sc_cobalt_mayday | 
__COBALT_SYSCALL_BIT
-* 000f0042 .word   0x000f0042
-*
-* elif ARM_OABI
-*
-* e59f0008 ldr r0, [pc, #8]
-* ef9f0042 swi 0x009f0042
-* e3a0 mov r0, #0
-* e580 str r0, [r0]; 
-* 105e .word   0x105e  ; sc_cobalt_mayday | 
__COBALT_SYSCALL_BIT
-*
-* endif
-*
-* 32bit instruction words will be laid out by the compiler as
-* the target endianness requires.
-*
-* We don't mess with CPSR here, so no need to save/restore it
-* in handle/fixup code.
-*/
-#ifdef __ARM_EABI__
-   static const struct {
-   u32 ldr_r0;
-   u32 ldr_r7;
-   u32 swi_0;
-   u32 mov_r0;
-   u32 str_r0;
-   u32 cst_r0;
-   u32 cst_r7;
-   } code = {
-   .ldr_r0 = 0xe59f000c,
-   .ldr_r7 = 0xe59f700c,
-   .swi_0 = 0xef00,
-   .mov_r0 = 0xe3a0,
-   .str_r0 = 0xe580,
-   .cst_r0 =  __xn_syscode(sc_cobalt_mayday),
-   .cst_r7 = 0x000f0042,
-   };
-#else /* OABI */
-   static const struct {
-   u32 ldr_r0;
-   u32 swi_syscall;
-   u32 mov_r0;
-   u32 str_r0;
-   u32 cst_r0;
-   } code = {
-   .ldr_r0 = 0xe59f0008,
-   .swi_syscall = 0xef9f0042,
-   .mov_r0 = 0xe3a0,
-   .str_r0 = 0xe580,
-   .cst_r0 =  __xn_syscode(sc_cobalt_mayday),
-   };
-#endif /* OABI */
-
-   memcpy(page, , sizeof(code));
-
-   flush_dcache_page(vmalloc_to_page(page));
 }
 
 int xnarch_init_mayday(void)
@@ -120,27 +54,9 @@ void *xnarch_get_mayday_page(void)
 void xnarch_handle_mayday(struct xnarchtcb *tcb, struct pt_regs *regs,
  unsigned long tramp)
 {
-   tcb->mayday.pc = regs->pc;
-   tcb->mayday.r0 = regs->regs[0];
-#ifdef __ARM_EABI__
-   tcb->mayday.r7 = regs->regs[7];
-#endif
-#ifdef CONFIG_ARM_THUMB
-   /* The code on the mayday page must be run in ARM mode */
-   tcb->mayday.psr = regs->cpsr;
-   regs->cpsr &= ~PSR_T_BIT;
-#endif
-   regs->pc = tramp;
+   xnthread_relax(0, 0);
 }
 
 void xnarch_fixup_mayday(struct xnarchtcb *tcb, struct pt_regs *regs)
 {
-   regs->pc = tcb->mayday.pc;
-   regs->regs[0] = tcb->mayday.r0;
-#ifdef __ARM_EABI__
-   regs->regs[7] = tcb->mayday.r7;
-#endif
-#ifdef CONFIG_ARM_THUMB
-   regs->cpsr = tcb->mayday.psr;
-#endif
 }


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


[Xenomai-git] Gilles Chanteperdrix : testsuite/smokey: tsc: add tsc test

2015-10-17 Thread git repository hosting
Module: xenomai-gch
Branch: for-forge
Commit: cf981e52146a2e8a31b2c3747b98dafa1de43abb
URL:
http://git.xenomai.org/?p=xenomai-gch.git;a=commit;h=cf981e52146a2e8a31b2c3747b98dafa1de43abb

Author: Gilles Chanteperdrix 
Date:   Fri Oct 16 21:02:13 2015 +0200

testsuite/smokey: tsc: add tsc test

---

 configure.ac |1 +
 testsuite/smokey/Makefile.am |2 +
 testsuite/smokey/tsc/Makefile.am |8 ++
 testsuite/smokey/tsc/tsc.c   |  186 ++
 4 files changed, 197 insertions(+)

diff --git a/configure.ac b/configure.ac
index 8027b7d..36d7fb7 100644
--- a/configure.ac
+++ b/configure.ac
@@ -889,6 +889,7 @@ AC_CONFIG_FILES([ \
testsuite/smokey/bufp/Makefile \
testsuite/smokey/sigdebug/Makefile \
testsuite/smokey/timerfd/Makefile \
+   testsuite/smokey/tsc/Makefile \
testsuite/smokey/leaks/Makefile \
testsuite/clocktest/Makefile \
testsuite/xeno-test/Makefile \
diff --git a/testsuite/smokey/Makefile.am b/testsuite/smokey/Makefile.am
index 8e82464..87e0555 100644
--- a/testsuite/smokey/Makefile.am
+++ b/testsuite/smokey/Makefile.am
@@ -22,6 +22,7 @@ SUBDIRS = \
sched-tp\
sigdebug\
timerfd \
+   tsc \
vdso-access \
xddp
 else
@@ -65,5 +66,6 @@ DIST_SUBDIRS =\
sched-tp\
sigdebug\
timerfd \
+   tsc \
vdso-access \
xddp
diff --git a/testsuite/smokey/tsc/Makefile.am b/testsuite/smokey/tsc/Makefile.am
new file mode 100644
index 000..dbe4528
--- /dev/null
+++ b/testsuite/smokey/tsc/Makefile.am
@@ -0,0 +1,8 @@
+
+noinst_LIBRARIES = libtsc.a
+
+libtsc_a_SOURCES = tsc.c
+
+libtsc_a_CPPFLAGS =\
+   @XENO_USER_CFLAGS@  \
+   -I$(top_srcdir)/include
diff --git a/testsuite/smokey/tsc/tsc.c b/testsuite/smokey/tsc/tsc.c
new file mode 100644
index 000..3d6de72
--- /dev/null
+++ b/testsuite/smokey/tsc/tsc.c
@@ -0,0 +1,186 @@
+/*
+ * Copyright (C) 2011-2012,2015 Gilles Chanteperdrix 
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+#include 
+#include 
+
+#include 
+#include 
+#include 
+
+#include 
+
+#include 
+
+#define DURATION 1000
+
+#if CONFIG_SMP
+#define smp_sched_setaffinity(pid,len,mask) sched_setaffinity(pid,len,mask)
+#define smp_sched_getaffinity(pid,len,mask) sched_getaffinity(pid,len,mask)
+#else /* !CONFIG_SMP */
+#define smp_sched_setaffinity(pid,len,mask) 0
+#define smp_sched_getaffinity(pid,len,mask) 0
+#endif /* !CONFIG_SMP */
+
+smokey_test_plugin(tsc,
+   SMOKEY_ARGLIST(
+   SMOKEY_INT(duration),
+   ),
+   "Check that emulated tsc is monotonic"
+);
+
+
+static inline unsigned long long timer_get_tsc(void)
+{
+   /*
+* The additional function call clockobj_get_tsc() makes a big
+* difference on low end
+*/
+   return cobalt_read_tsc();
+}
+
+static inline unsigned long long timer_tsc2ns(unsigned long long tsc)
+{
+   return clockobj_tsc_to_ns(tsc);
+}
+
+static inline unsigned long long timer_ns2tsc(unsigned long long ns)
+{
+   return clockobj_ns_to_tsc(ns);
+}
+
+static int run_tsc(struct smokey_test *t, int argc, char *const argv[])
+{
+   unsigned long long runtime, start, jump, tsc1, tsc2;
+   unsigned long long one_sec_tsc;
+   unsigned long long sum, g_sum;
+   unsigned long long loops, g_loops;
+   unsigned dt, min, max, g_min, g_max;
+   unsigned long long secs;
+   unsigned i, margin;
+
+#if CONFIG_SMP
+   /* Pin the test to the CPU it is currently running on */
+   cpu_set_t mask;
+
+   if (smp_sched_getaffinity(0, sizeof(mask), ) == 0)
+   for (i = 0; i < sysconf(_SC_NPROCESSORS_ONLN); i++)
+

[Xenomai-git] Gilles Chanteperdrix : rtnet: transfer skb ownership when sending

2015-10-17 Thread git repository hosting
Module: xenomai-gch
Branch: for-forge
Commit: aa853c5c309aae865c6422518bcb9ba373227c95
URL:
http://git.xenomai.org/?p=xenomai-gch.git;a=commit;h=aa853c5c309aae865c6422518bcb9ba373227c95

Author: Gilles Chanteperdrix 
Date:   Tue Oct 13 21:14:10 2015 +0200

rtnet: transfer skb ownership when sending

to the device pool, to avoid crashes when a socket is destroyed while it
has buffers queued in the device transmit ring. This is a consequence of
commit 45474093d65bfa43968815520059dd530b4d9b78, buffers from the socket
pool no longer prevent the socket from being destroyed.

At this chance, rename the device pool "rx_pool" to "dev_pool", as it is
now also used for transmission.

---

 kernel/drivers/net/drivers/8139too.c   |3 +-
 kernel/drivers/net/drivers/at91_ether.c|2 +-
 kernel/drivers/net/drivers/e1000/e1000_main.c  |2 +-
 kernel/drivers/net/drivers/e1000e/netdev.c |3 +-
 kernel/drivers/net/drivers/eepro100.c  |3 +-
 kernel/drivers/net/drivers/eth1394.c   |3 +-
 kernel/drivers/net/drivers/experimental/3c59x.c|2 +-
 .../net/drivers/experimental/e1000/e1000_main.c|3 +-
 kernel/drivers/net/drivers/fec.c   |3 +-
 kernel/drivers/net/drivers/macb.c  |2 +-
 .../drivers/net/drivers/mpc52xx_fec/mpc52xx_fec.c  |2 +-
 kernel/drivers/net/drivers/mpc8260_fcc_enet.c  |2 +-
 kernel/drivers/net/drivers/mpc8xx_enet.c   |2 +-
 kernel/drivers/net/drivers/mpc8xx_fec.c|2 +-
 kernel/drivers/net/drivers/natsemi.c   |3 +-
 kernel/drivers/net/drivers/pcnet32.c   |2 +-
 kernel/drivers/net/drivers/r8169.c |3 +-
 kernel/drivers/net/drivers/smc9.c  |2 +-
 kernel/drivers/net/drivers/tulip/tulip_core.c  |3 +-
 kernel/drivers/net/drivers/via-rhine.c |3 +-
 kernel/drivers/net/stack/include/rtdev.h   |4 +--
 kernel/drivers/net/stack/include/rtwlan.h  |2 +-
 kernel/drivers/net/stack/ipv4/udp/udp.c|3 --
 kernel/drivers/net/stack/rtdev.c   |   34 
 kernel/drivers/net/stack/rtwlan.c  |4 +--
 25 files changed, 55 insertions(+), 42 deletions(-)

diff --git a/kernel/drivers/net/drivers/8139too.c 
b/kernel/drivers/net/drivers/8139too.c
index 1e102fb..8b1a7df 100644
--- a/kernel/drivers/net/drivers/8139too.c
+++ b/kernel/drivers/net/drivers/8139too.c
@@ -636,7 +636,8 @@ static int rtl8139_init_board (struct pci_dev *pdev,
*dev_out = NULL;
 
/* dev and rtdev->priv zeroed in alloc_etherdev */
-   rtdev=rt_alloc_etherdev(sizeof (struct rtl8139_private), rx_pool_size);
+   rtdev=rt_alloc_etherdev(sizeof (struct rtl8139_private),
+   rx_pool_size + NUM_TX_DESC);
if (rtdev==NULL) {
rtdm_printk (KERN_ERR PFX "%s: Unable to alloc new net 
device\n", pci_name(pdev));
return -ENOMEM;
diff --git a/kernel/drivers/net/drivers/at91_ether.c 
b/kernel/drivers/net/drivers/at91_ether.c
index b9dc2ea..c697978 100644
--- a/kernel/drivers/net/drivers/at91_ether.c
+++ b/kernel/drivers/net/drivers/at91_ether.c
@@ -309,7 +309,7 @@ static int __init at91ether_probe(struct platform_device 
*pdev)
if (!regs)
return -ENOENT;
 
-   dev = rt_alloc_etherdev(sizeof(struct macb), MAX_RX_DESCR * 2);
+   dev = rt_alloc_etherdev(sizeof(struct macb), MAX_RX_DESCR * 2 + 2);
if (!dev)
return -ENOMEM;
 
diff --git a/kernel/drivers/net/drivers/e1000/e1000_main.c 
b/kernel/drivers/net/drivers/e1000/e1000_main.c
index 30b3108..51e9a82 100644
--- a/kernel/drivers/net/drivers/e1000/e1000_main.c
+++ b/kernel/drivers/net/drivers/e1000/e1000_main.c
@@ -716,7 +716,7 @@ static int e1000_probe(struct pci_dev *pdev,
 
pci_set_master(pdev);
 
-   netdev = rt_alloc_etherdev(sizeof(struct e1000_adapter), 16);
+   netdev = rt_alloc_etherdev(sizeof(struct e1000_adapter), 48);
if (!netdev) {
err = -ENOMEM;
goto err_alloc_etherdev;
diff --git a/kernel/drivers/net/drivers/e1000e/netdev.c 
b/kernel/drivers/net/drivers/e1000e/netdev.c
index d83d228..219b978 100644
--- a/kernel/drivers/net/drivers/e1000e/netdev.c
+++ b/kernel/drivers/net/drivers/e1000e/netdev.c
@@ -3941,7 +3941,8 @@ static int e1000_probe(struct pci_dev *pdev,
goto err_alloc_etherdev;
 
err = -ENOMEM;
-   netdev = rt_alloc_etherdev(sizeof(struct e1000_adapter), 
RT_E1000E_NUM_RXD);
+   netdev = rt_alloc_etherdev(sizeof(*adapter),
+   2 * RT_E1000E_NUM_RXD + 256);
if (!netdev)
goto err_alloc_etherdev;
 
diff --git a/kernel/drivers/net/drivers/eepro100.c 
b/kernel/drivers/net/drivers/eepro100.c
index 03c9aa7..6d54643 100644
--- 

[Xenomai-git] Gilles Chanteperdrix : rtdm/schedule_work: avoid ipipe_work_post_root

2015-10-17 Thread git repository hosting
Module: xenomai-gch
Branch: for-forge
Commit: f94857e52a688ffcf7ce6158392188fb8df4497f
URL:
http://git.xenomai.org/?p=xenomai-gch.git;a=commit;h=f94857e52a688ffcf7ce6158392188fb8df4497f

Author: Gilles Chanteperdrix 
Date:   Tue Oct 13 21:05:53 2015 +0200

rtdm/schedule_work: avoid ipipe_work_post_root

if called from root domain.

---

 kernel/cobalt/rtdm/drvlib.c |   10 +++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/kernel/cobalt/rtdm/drvlib.c b/kernel/cobalt/rtdm/drvlib.c
index 0ea344d..481ad83 100644
--- a/kernel/cobalt/rtdm/drvlib.c
+++ b/kernel/cobalt/rtdm/drvlib.c
@@ -1518,14 +1518,18 @@ static void lostage_schedule_work(struct 
ipipe_work_header *work)
  */
 void rtdm_schedule_nrt_work(struct work_struct *lostage_work)
 {
-   struct lostage_schedule_work macb_work = {
+   struct lostage_schedule_work ipipe_work = {
.work = {
-   .size = sizeof(macb_work),
+   .size = sizeof(ipipe_work),
.handler = lostage_schedule_work,
},
.lostage_work = lostage_work,
};
-   ipipe_post_work_root(_work, work);
+
+   if (ipipe_root_p)
+   schedule_work(lostage_work);
+   else
+   ipipe_post_work_root(_work, work);
 }
 EXPORT_SYMBOL_GPL(rtdm_schedule_nrt_work);
 


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


[Xenomai-git] Gilles Chanteperdrix : rtnet: transfer skb ownership when sending

2015-10-17 Thread git repository hosting
Module: xenomai-gch
Branch: for-forge
Commit: 47df60a83350ff6b18c8c6670db545833a2401a5
URL:
http://git.xenomai.org/?p=xenomai-gch.git;a=commit;h=47df60a83350ff6b18c8c6670db545833a2401a5

Author: Gilles Chanteperdrix 
Date:   Tue Oct 13 21:14:10 2015 +0200

rtnet: transfer skb ownership when sending

to the device pool, to avoid crashes when a socket is destroyed while it
has buffers queued in the device transmit ring. This is a consequence of
commit 45474093d65bfa43968815520059dd530b4d9b78, buffers from the socket
pool no longer prevent the socket from being destroyed.

At this chance, rename the device pool "rx_pool" to "dev_pool", as it is
now also used for transmission.

---

 kernel/drivers/net/drivers/8139too.c   |3 +-
 kernel/drivers/net/drivers/at91_ether.c|2 +-
 kernel/drivers/net/drivers/e1000/e1000_main.c  |2 +-
 kernel/drivers/net/drivers/e1000e/netdev.c |3 +-
 kernel/drivers/net/drivers/eepro100.c  |3 +-
 kernel/drivers/net/drivers/eth1394.c   |3 +-
 kernel/drivers/net/drivers/experimental/3c59x.c|2 +-
 .../net/drivers/experimental/e1000/e1000_main.c|3 +-
 kernel/drivers/net/drivers/fec.c   |3 +-
 kernel/drivers/net/drivers/macb.c  |2 +-
 .../drivers/net/drivers/mpc52xx_fec/mpc52xx_fec.c  |2 +-
 kernel/drivers/net/drivers/mpc8260_fcc_enet.c  |2 +-
 kernel/drivers/net/drivers/mpc8xx_enet.c   |2 +-
 kernel/drivers/net/drivers/mpc8xx_fec.c|2 +-
 kernel/drivers/net/drivers/natsemi.c   |3 +-
 kernel/drivers/net/drivers/pcnet32.c   |2 +-
 kernel/drivers/net/drivers/r8169.c |3 +-
 kernel/drivers/net/drivers/smc9.c  |2 +-
 kernel/drivers/net/drivers/tulip/tulip_core.c  |3 +-
 kernel/drivers/net/drivers/via-rhine.c |3 +-
 kernel/drivers/net/stack/include/rtdev.h   |4 +--
 kernel/drivers/net/stack/include/rtwlan.h  |2 +-
 kernel/drivers/net/stack/ipv4/udp/udp.c|3 --
 kernel/drivers/net/stack/rtdev.c   |   34 
 kernel/drivers/net/stack/rtwlan.c  |4 +--
 25 files changed, 55 insertions(+), 42 deletions(-)

diff --git a/kernel/drivers/net/drivers/8139too.c 
b/kernel/drivers/net/drivers/8139too.c
index 1e102fb..8b1a7df 100644
--- a/kernel/drivers/net/drivers/8139too.c
+++ b/kernel/drivers/net/drivers/8139too.c
@@ -636,7 +636,8 @@ static int rtl8139_init_board (struct pci_dev *pdev,
*dev_out = NULL;
 
/* dev and rtdev->priv zeroed in alloc_etherdev */
-   rtdev=rt_alloc_etherdev(sizeof (struct rtl8139_private), rx_pool_size);
+   rtdev=rt_alloc_etherdev(sizeof (struct rtl8139_private),
+   rx_pool_size + NUM_TX_DESC);
if (rtdev==NULL) {
rtdm_printk (KERN_ERR PFX "%s: Unable to alloc new net 
device\n", pci_name(pdev));
return -ENOMEM;
diff --git a/kernel/drivers/net/drivers/at91_ether.c 
b/kernel/drivers/net/drivers/at91_ether.c
index b9dc2ea..c697978 100644
--- a/kernel/drivers/net/drivers/at91_ether.c
+++ b/kernel/drivers/net/drivers/at91_ether.c
@@ -309,7 +309,7 @@ static int __init at91ether_probe(struct platform_device 
*pdev)
if (!regs)
return -ENOENT;
 
-   dev = rt_alloc_etherdev(sizeof(struct macb), MAX_RX_DESCR * 2);
+   dev = rt_alloc_etherdev(sizeof(struct macb), MAX_RX_DESCR * 2 + 2);
if (!dev)
return -ENOMEM;
 
diff --git a/kernel/drivers/net/drivers/e1000/e1000_main.c 
b/kernel/drivers/net/drivers/e1000/e1000_main.c
index 30b3108..51e9a82 100644
--- a/kernel/drivers/net/drivers/e1000/e1000_main.c
+++ b/kernel/drivers/net/drivers/e1000/e1000_main.c
@@ -716,7 +716,7 @@ static int e1000_probe(struct pci_dev *pdev,
 
pci_set_master(pdev);
 
-   netdev = rt_alloc_etherdev(sizeof(struct e1000_adapter), 16);
+   netdev = rt_alloc_etherdev(sizeof(struct e1000_adapter), 48);
if (!netdev) {
err = -ENOMEM;
goto err_alloc_etherdev;
diff --git a/kernel/drivers/net/drivers/e1000e/netdev.c 
b/kernel/drivers/net/drivers/e1000e/netdev.c
index d83d228..219b978 100644
--- a/kernel/drivers/net/drivers/e1000e/netdev.c
+++ b/kernel/drivers/net/drivers/e1000e/netdev.c
@@ -3941,7 +3941,8 @@ static int e1000_probe(struct pci_dev *pdev,
goto err_alloc_etherdev;
 
err = -ENOMEM;
-   netdev = rt_alloc_etherdev(sizeof(struct e1000_adapter), 
RT_E1000E_NUM_RXD);
+   netdev = rt_alloc_etherdev(sizeof(*adapter),
+   2 * RT_E1000E_NUM_RXD + 256);
if (!netdev)
goto err_alloc_etherdev;
 
diff --git a/kernel/drivers/net/drivers/eepro100.c 
b/kernel/drivers/net/drivers/eepro100.c
index 03c9aa7..6d54643 100644
--- 

[Xenomai-git] Gilles Chanteperdrix : testsuite/smokey: tsc: add tsc test

2015-10-17 Thread git repository hosting
Module: xenomai-gch
Branch: for-forge
Commit: 0f3f73fdeb08e1e9e71fe4dd359d8722182b6253
URL:
http://git.xenomai.org/?p=xenomai-gch.git;a=commit;h=0f3f73fdeb08e1e9e71fe4dd359d8722182b6253

Author: Gilles Chanteperdrix 
Date:   Fri Oct 16 21:02:13 2015 +0200

testsuite/smokey: tsc: add tsc test

---

 configure.ac |1 +
 testsuite/smokey/Makefile.am |2 +
 testsuite/smokey/tsc/Makefile.am |8 ++
 testsuite/smokey/tsc/tsc.c   |  186 ++
 4 files changed, 197 insertions(+)

diff --git a/configure.ac b/configure.ac
index 8027b7d..36d7fb7 100644
--- a/configure.ac
+++ b/configure.ac
@@ -889,6 +889,7 @@ AC_CONFIG_FILES([ \
testsuite/smokey/bufp/Makefile \
testsuite/smokey/sigdebug/Makefile \
testsuite/smokey/timerfd/Makefile \
+   testsuite/smokey/tsc/Makefile \
testsuite/smokey/leaks/Makefile \
testsuite/clocktest/Makefile \
testsuite/xeno-test/Makefile \
diff --git a/testsuite/smokey/Makefile.am b/testsuite/smokey/Makefile.am
index 8e82464..87e0555 100644
--- a/testsuite/smokey/Makefile.am
+++ b/testsuite/smokey/Makefile.am
@@ -22,6 +22,7 @@ SUBDIRS = \
sched-tp\
sigdebug\
timerfd \
+   tsc \
vdso-access \
xddp
 else
@@ -65,5 +66,6 @@ DIST_SUBDIRS =\
sched-tp\
sigdebug\
timerfd \
+   tsc \
vdso-access \
xddp
diff --git a/testsuite/smokey/tsc/Makefile.am b/testsuite/smokey/tsc/Makefile.am
new file mode 100644
index 000..dbe4528
--- /dev/null
+++ b/testsuite/smokey/tsc/Makefile.am
@@ -0,0 +1,8 @@
+
+noinst_LIBRARIES = libtsc.a
+
+libtsc_a_SOURCES = tsc.c
+
+libtsc_a_CPPFLAGS =\
+   @XENO_USER_CFLAGS@  \
+   -I$(top_srcdir)/include
diff --git a/testsuite/smokey/tsc/tsc.c b/testsuite/smokey/tsc/tsc.c
new file mode 100644
index 000..3d6de72
--- /dev/null
+++ b/testsuite/smokey/tsc/tsc.c
@@ -0,0 +1,186 @@
+/*
+ * Copyright (C) 2011-2012,2015 Gilles Chanteperdrix 
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+#include 
+#include 
+
+#include 
+#include 
+#include 
+
+#include 
+
+#include 
+
+#define DURATION 1000
+
+#if CONFIG_SMP
+#define smp_sched_setaffinity(pid,len,mask) sched_setaffinity(pid,len,mask)
+#define smp_sched_getaffinity(pid,len,mask) sched_getaffinity(pid,len,mask)
+#else /* !CONFIG_SMP */
+#define smp_sched_setaffinity(pid,len,mask) 0
+#define smp_sched_getaffinity(pid,len,mask) 0
+#endif /* !CONFIG_SMP */
+
+smokey_test_plugin(tsc,
+   SMOKEY_ARGLIST(
+   SMOKEY_INT(duration),
+   ),
+   "Check that emulated tsc is monotonic"
+);
+
+
+static inline unsigned long long timer_get_tsc(void)
+{
+   /*
+* The additional function call clockobj_get_tsc() makes a big
+* difference on low end
+*/
+   return cobalt_read_tsc();
+}
+
+static inline unsigned long long timer_tsc2ns(unsigned long long tsc)
+{
+   return clockobj_tsc_to_ns(tsc);
+}
+
+static inline unsigned long long timer_ns2tsc(unsigned long long ns)
+{
+   return clockobj_ns_to_tsc(ns);
+}
+
+static int run_tsc(struct smokey_test *t, int argc, char *const argv[])
+{
+   unsigned long long runtime, start, jump, tsc1, tsc2;
+   unsigned long long one_sec_tsc;
+   unsigned long long sum, g_sum;
+   unsigned long long loops, g_loops;
+   unsigned dt, min, max, g_min, g_max;
+   unsigned long long secs;
+   unsigned i, margin;
+
+#if CONFIG_SMP
+   /* Pin the test to the CPU it is currently running on */
+   cpu_set_t mask;
+
+   if (smp_sched_getaffinity(0, sizeof(mask), ) == 0)
+   for (i = 0; i < sysconf(_SC_NPROCESSORS_ONLN); i++)
+

[Xenomai-git] Gilles Chanteperdrix : testsuite/dohell: sync after dd to disk

2015-10-17 Thread git repository hosting
Module: xenomai-gch
Branch: for-forge
Commit: 1a15ac6113a0fe930582e7225ba4074db2dc386e
URL:
http://git.xenomai.org/?p=xenomai-gch.git;a=commit;h=1a15ac6113a0fe930582e7225ba4074db2dc386e

Author: Gilles Chanteperdrix 
Date:   Tue Oct 13 21:11:53 2015 +0200

testsuite/dohell: sync after dd to disk

in order to actually write file on disk, on machine with RAM larger than
file size.

---

 testsuite/xeno-test/dohell |2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/testsuite/xeno-test/dohell b/testsuite/xeno-test/dohell
index 918da8a..68c5a5f 100644
--- a/testsuite/xeno-test/dohell
+++ b/testsuite/xeno-test/dohell
@@ -59,7 +59,7 @@ if [ -n "$server" ]; then
 fi
 
 if [ -n "$mntpoint" ]; then
-while :; do dd if=/dev/zero of=$mntpoint/bigfile bs=1024000 count=100; 
done &
+while :; do dd if=/dev/zero of=$mntpoint/bigfile bs=1024000 count=100; 
sync; done &
 pids="$pids $!"
 fi
 


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


[Xenomai-git] Gilles Chanteperdrix : rtnet/e1000e: use rtdm schedule work

2015-10-17 Thread git repository hosting
Module: xenomai-gch
Branch: for-forge
Commit: 7e0f7c8849774881ba1b1e3a637e72a899f8523e
URL:
http://git.xenomai.org/?p=xenomai-gch.git;a=commit;h=7e0f7c8849774881ba1b1e3a637e72a899f8523e

Author: Gilles Chanteperdrix 
Date:   Tue Oct 13 21:08:03 2015 +0200

rtnet/e1000e: use rtdm schedule work

in order to avoid calling schedule_work from head domain.

---

 kernel/drivers/net/drivers/e1000e/netdev.c |   16 
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/kernel/drivers/net/drivers/e1000e/netdev.c 
b/kernel/drivers/net/drivers/e1000e/netdev.c
index 775ee08..d83d228 100644
--- a/kernel/drivers/net/drivers/e1000e/netdev.c
+++ b/kernel/drivers/net/drivers/e1000e/netdev.c
@@ -581,7 +581,7 @@ static void e1000e_update_rdt_wa(struct e1000_adapter 
*adapter, unsigned int i)
u32 rctl = er32(RCTL);
ew32(RCTL, rctl & ~E1000_RCTL_EN);
e_err("ME firmware caused invalid RDT - resetting\n");
-   schedule_work(>reset_task);
+   rtdm_schedule_nrt_work(>reset_task);
}
 }
 
@@ -594,7 +594,7 @@ static void e1000e_update_tdt_wa(struct e1000_adapter 
*adapter, unsigned int i)
u32 tctl = er32(TCTL);
ew32(TCTL, tctl & ~E1000_TCTL_EN);
e_err("ME firmware caused invalid TDT - resetting\n");
-   schedule_work(>reset_task);
+   rtdm_schedule_nrt_work(>reset_task);
}
 }
 
@@ -949,7 +949,7 @@ static int e1000_intr_msi(rtdm_irq_t *irq_handle)
 */
if ((adapter->flags & FLAG_LSC_GIG_SPEED_DROP) &&
(!(er32(STATUS) & E1000_STATUS_LU)))
-   schedule_work(>downshift_task);
+   rtdm_schedule_nrt_work(>downshift_task);
 
/*
 * 80003ES2LAN workaround-- For packet buffer work-around on
@@ -2885,7 +2885,7 @@ static void e1000_update_phy_info(unsigned long data)
if (test_bit(__E1000_DOWN, >state))
return;
 
-   schedule_work(>update_phy_task);
+   rtdm_schedule_nrt_work(>update_phy_task);
 }
 
 /**
@@ -3018,7 +3018,7 @@ static void e1000e_check_82574_phy_workaround(struct 
e1000_adapter *adapter)
 
if (adapter->phy_hang_count > 1) {
adapter->phy_hang_count = 0;
-   schedule_work(>reset_task);
+   rtdm_schedule_nrt_work(>reset_task);
}
 }
 
@@ -3031,7 +3031,7 @@ static void e1000_watchdog(unsigned long data)
struct e1000_adapter *adapter = (struct e1000_adapter *) data;
 
/* Do the rest outside of interrupt context */
-   schedule_work(>watchdog_task);
+   rtdm_schedule_nrt_work(>watchdog_task);
 
/* TODO: make this use queue_delayed_work() */
 }
@@ -3172,7 +3172,7 @@ static void e1000_watchdog_task(struct work_struct *work)
  round_jiffies(jiffies + 2 * HZ));
 
if (adapter->flags & FLAG_RX_NEEDS_RESTART)
-   schedule_work(>reset_task);
+   rtdm_schedule_nrt_work(>reset_task);
}
}
 
@@ -3200,7 +3200,7 @@ link_up:
 * to get done, so reset controller to flush Tx.
 * (Do the reset outside of interrupt context).
 */
-   schedule_work(>reset_task);
+   rtdm_schedule_nrt_work(>reset_task);
/* return immediately since reset is imminent */
return;
}


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


[Xenomai-git] Gilles Chanteperdrix : rtdm/devices: do not use minor 0 for all protocols

2015-10-17 Thread git repository hosting
Module: xenomai-gch
Branch: for-forge
Commit: d529c7725773543f5902dc9d7026b1663ff1009a
URL:
http://git.xenomai.org/?p=xenomai-gch.git;a=commit;h=d529c7725773543f5902dc9d7026b1663ff1009a

Author: Gilles Chanteperdrix 
Date:   Fri Oct 16 19:29:56 2015 +0200

rtdm/devices: do not use minor 0 for all protocols

Since the device is indexed by its major and minor, device_destroy()
does not destroy the right device if there is more than one.

---

 kernel/cobalt/rtdm/device.c |   27 ---
 1 file changed, 24 insertions(+), 3 deletions(-)

diff --git a/kernel/cobalt/rtdm/device.c b/kernel/cobalt/rtdm/device.c
index 4943be4..bcc2ab5 100644
--- a/kernel/cobalt/rtdm/device.c
+++ b/kernel/cobalt/rtdm/device.c
@@ -52,6 +52,7 @@
 static struct rb_root protocol_devices;
 
 static DEFINE_MUTEX(register_lock);
+static DECLARE_BITMAP(protocol_devices_minor_map, RTDM_MAX_MINOR);
 
 static struct class *rtdm_class;
 
@@ -424,14 +425,29 @@ int rtdm_dev_register(struct rtdm_device *dev)
}
__set_bit(minor, drv->minor_map);
} else {
-   dev->minor = -1;
+   if (drv->device_flags & RTDM_FIXED_MINOR) {
+   minor = dev->minor;
+   if (minor < 0 || minor >= RTDM_MAX_MINOR) {
+   ret = -ENXIO;
+   goto fail;
+   }
+   } else {
+   minor = find_first_zero_bit(protocol_devices_minor_map,
+   RTDM_MAX_MINOR);
+   if (minor >= RTDM_MAX_MINOR) {
+   ret = -ENXIO;
+   goto fail;
+   }
+   dev->minor = minor;
+   }
+
dev->name = kstrdup(dev->label, GFP_KERNEL);
if (dev->name == NULL) {
ret = -ENOMEM;
goto fail;
}
 
-   rdev = MKDEV(0, 0);
+   rdev = MKDEV(0, minor);
kdev = device_create(rtdm_class, NULL, rdev,
 dev, dev->name);
if (IS_ERR(kdev)) {
@@ -443,6 +459,7 @@ int rtdm_dev_register(struct rtdm_device *dev)
ret = xnid_enter(_devices, >proto.id, id);
if (ret < 0)
goto fail;
+   __set_bit(minor, protocol_devices_minor_map);
}
 
dev->rdev = rdev;
@@ -500,8 +517,10 @@ void rtdm_dev_unregister(struct rtdm_device *dev)
if (drv->device_flags & RTDM_NAMED_DEVICE) {
xnregistry_remove(dev->named.handle);
__clear_bit(dev->minor, drv->minor_map);
-   } else
+   } else {
xnid_remove(_devices, >proto.id);
+   __clear_bit(dev->minor, protocol_devices_minor_map);
+   }
 
device_destroy(rtdm_class, dev->rdev);
 
@@ -527,6 +546,8 @@ int __init rtdm_init(void)
rtdm_class->dev_groups = rtdm_groups;
rtdm_class->devnode = rtdm_devnode;
 
+   bitmap_zero(protocol_devices_minor_map, RTDM_MAX_MINOR);
+
return 0;
 }
 


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


[Xenomai-git] Gilles Chanteperdrix : rtnet/e1000e: use rtdm schedule work

2015-10-17 Thread git repository hosting
Module: xenomai-gch
Branch: for-forge
Commit: 721f7387c6cd3f9f70a03ff13b574b072036daee
URL:
http://git.xenomai.org/?p=xenomai-gch.git;a=commit;h=721f7387c6cd3f9f70a03ff13b574b072036daee

Author: Gilles Chanteperdrix 
Date:   Tue Oct 13 21:08:03 2015 +0200

rtnet/e1000e: use rtdm schedule work

in order to avoid calling schedule_work from head domain.

---

 kernel/drivers/net/drivers/e1000e/netdev.c |   16 
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/kernel/drivers/net/drivers/e1000e/netdev.c 
b/kernel/drivers/net/drivers/e1000e/netdev.c
index 775ee08..d83d228 100644
--- a/kernel/drivers/net/drivers/e1000e/netdev.c
+++ b/kernel/drivers/net/drivers/e1000e/netdev.c
@@ -581,7 +581,7 @@ static void e1000e_update_rdt_wa(struct e1000_adapter 
*adapter, unsigned int i)
u32 rctl = er32(RCTL);
ew32(RCTL, rctl & ~E1000_RCTL_EN);
e_err("ME firmware caused invalid RDT - resetting\n");
-   schedule_work(>reset_task);
+   rtdm_schedule_nrt_work(>reset_task);
}
 }
 
@@ -594,7 +594,7 @@ static void e1000e_update_tdt_wa(struct e1000_adapter 
*adapter, unsigned int i)
u32 tctl = er32(TCTL);
ew32(TCTL, tctl & ~E1000_TCTL_EN);
e_err("ME firmware caused invalid TDT - resetting\n");
-   schedule_work(>reset_task);
+   rtdm_schedule_nrt_work(>reset_task);
}
 }
 
@@ -949,7 +949,7 @@ static int e1000_intr_msi(rtdm_irq_t *irq_handle)
 */
if ((adapter->flags & FLAG_LSC_GIG_SPEED_DROP) &&
(!(er32(STATUS) & E1000_STATUS_LU)))
-   schedule_work(>downshift_task);
+   rtdm_schedule_nrt_work(>downshift_task);
 
/*
 * 80003ES2LAN workaround-- For packet buffer work-around on
@@ -2885,7 +2885,7 @@ static void e1000_update_phy_info(unsigned long data)
if (test_bit(__E1000_DOWN, >state))
return;
 
-   schedule_work(>update_phy_task);
+   rtdm_schedule_nrt_work(>update_phy_task);
 }
 
 /**
@@ -3018,7 +3018,7 @@ static void e1000e_check_82574_phy_workaround(struct 
e1000_adapter *adapter)
 
if (adapter->phy_hang_count > 1) {
adapter->phy_hang_count = 0;
-   schedule_work(>reset_task);
+   rtdm_schedule_nrt_work(>reset_task);
}
 }
 
@@ -3031,7 +3031,7 @@ static void e1000_watchdog(unsigned long data)
struct e1000_adapter *adapter = (struct e1000_adapter *) data;
 
/* Do the rest outside of interrupt context */
-   schedule_work(>watchdog_task);
+   rtdm_schedule_nrt_work(>watchdog_task);
 
/* TODO: make this use queue_delayed_work() */
 }
@@ -3172,7 +3172,7 @@ static void e1000_watchdog_task(struct work_struct *work)
  round_jiffies(jiffies + 2 * HZ));
 
if (adapter->flags & FLAG_RX_NEEDS_RESTART)
-   schedule_work(>reset_task);
+   rtdm_schedule_nrt_work(>reset_task);
}
}
 
@@ -3200,7 +3200,7 @@ link_up:
 * to get done, so reset controller to flush Tx.
 * (Do the reset outside of interrupt context).
 */
-   schedule_work(>reset_task);
+   rtdm_schedule_nrt_work(>reset_task);
/* return immediately since reset is imminent */
return;
}


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


[Xenomai-git] Gilles Chanteperdrix : testsuite/dohell: sync after dd to disk

2015-10-17 Thread git repository hosting
Module: xenomai-gch
Branch: for-forge
Commit: 27e5d93887f85dd61fee1ad5aa9912182bb9bec9
URL:
http://git.xenomai.org/?p=xenomai-gch.git;a=commit;h=27e5d93887f85dd61fee1ad5aa9912182bb9bec9

Author: Gilles Chanteperdrix 
Date:   Tue Oct 13 21:11:53 2015 +0200

testsuite/dohell: sync after dd to disk

in order to actually write file on disk, on machine with RAM larger than
file size.

---

 testsuite/xeno-test/dohell |2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/testsuite/xeno-test/dohell b/testsuite/xeno-test/dohell
index 918da8a..68c5a5f 100644
--- a/testsuite/xeno-test/dohell
+++ b/testsuite/xeno-test/dohell
@@ -59,7 +59,7 @@ if [ -n "$server" ]; then
 fi
 
 if [ -n "$mntpoint" ]; then
-while :; do dd if=/dev/zero of=$mntpoint/bigfile bs=1024000 count=100; 
done &
+while :; do dd if=/dev/zero of=$mntpoint/bigfile bs=1024000 count=100; 
sync; done &
 pids="$pids $!"
 fi
 


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


[Xenomai-git] Gilles Chanteperdrix : rtdm/devices: do not use minor 0 for all protocols

2015-10-17 Thread git repository hosting
Module: xenomai-gch
Branch: for-forge
Commit: e9e660807a6690ce5f866863a3d4d40e7f30b279
URL:
http://git.xenomai.org/?p=xenomai-gch.git;a=commit;h=e9e660807a6690ce5f866863a3d4d40e7f30b279

Author: Gilles Chanteperdrix 
Date:   Fri Oct 16 19:29:56 2015 +0200

rtdm/devices: do not use minor 0 for all protocols

Since the device is indexed by its major and minor, device_destroy()
does not destroy the right device if there is more than one.

---

 kernel/cobalt/rtdm/device.c |   19 ---
 1 file changed, 16 insertions(+), 3 deletions(-)

diff --git a/kernel/cobalt/rtdm/device.c b/kernel/cobalt/rtdm/device.c
index 4943be4..0fdfa2d 100644
--- a/kernel/cobalt/rtdm/device.c
+++ b/kernel/cobalt/rtdm/device.c
@@ -52,6 +52,7 @@
 static struct rb_root protocol_devices;
 
 static DEFINE_MUTEX(register_lock);
+static DECLARE_BITMAP(protocol_devices_minor_map, RTDM_MAX_MINOR);
 
 static struct class *rtdm_class;
 
@@ -424,14 +425,21 @@ int rtdm_dev_register(struct rtdm_device *dev)
}
__set_bit(minor, drv->minor_map);
} else {
-   dev->minor = -1;
+   minor = find_first_zero_bit(protocol_devices_minor_map,
+   RTDM_MAX_MINOR);
+   if (minor >= RTDM_MAX_MINOR) {
+   ret = -ENXIO;
+   goto fail;
+   }
+   dev->minor = minor;
+
dev->name = kstrdup(dev->label, GFP_KERNEL);
if (dev->name == NULL) {
ret = -ENOMEM;
goto fail;
}
 
-   rdev = MKDEV(0, 0);
+   rdev = MKDEV(0, minor);
kdev = device_create(rtdm_class, NULL, rdev,
 dev, dev->name);
if (IS_ERR(kdev)) {
@@ -443,6 +451,7 @@ int rtdm_dev_register(struct rtdm_device *dev)
ret = xnid_enter(_devices, >proto.id, id);
if (ret < 0)
goto fail;
+   __set_bit(minor, protocol_devices_minor_map);
}
 
dev->rdev = rdev;
@@ -500,8 +509,10 @@ void rtdm_dev_unregister(struct rtdm_device *dev)
if (drv->device_flags & RTDM_NAMED_DEVICE) {
xnregistry_remove(dev->named.handle);
__clear_bit(dev->minor, drv->minor_map);
-   } else
+   } else {
xnid_remove(_devices, >proto.id);
+   __clear_bit(dev->minor, protocol_devices_minor_map);
+   }
 
device_destroy(rtdm_class, dev->rdev);
 
@@ -527,6 +538,8 @@ int __init rtdm_init(void)
rtdm_class->dev_groups = rtdm_groups;
rtdm_class->devnode = rtdm_devnode;
 
+   bitmap_zero(protocol_devices_minor_map, RTDM_MAX_MINOR);
+
return 0;
 }
 


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


[Xenomai-git] Philippe Gerum : copperplate/regd: do not involve Cobalt before binding is done

2015-10-17 Thread git repository hosting
Module: xenomai-3
Branch: arm64
Commit: e44620495d0b8f0d029250b44dfeef4a47dcd155
URL:
http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=e44620495d0b8f0d029250b44dfeef4a47dcd155

Author: Philippe Gerum 
Date:   Thu Oct 15 09:59:21 2015 +0200

copperplate/regd: do not involve Cobalt before binding is done

Some early code in sysregd wants to set the regular scheduling policy
of the main thread prior to binding to the Cobalt core manually. Make
sure to force a libc call for this, instead of going through a Cobalt
syscall first.

Functionally speaking, the effect will be the same since
pthread_setschedparam() mirrors the request to the regular C library,
which is what we'll need eventually. However we won't receive the
scary warning about a syscall being denied for an unbound process from
the Cobalt core when debug mode is enabled, e.g.:

[Xenomai] syscall <7> denied to sysregd[22217]

---

 lib/copperplate/regd/regd.c |2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/copperplate/regd/regd.c b/lib/copperplate/regd/regd.c
index 25bd7a5..5d69d83 100644
--- a/lib/copperplate/regd/regd.c
+++ b/lib/copperplate/regd/regd.c
@@ -538,7 +538,7 @@ int main(int argc, char *const *argv)
 
/* Force SCHED_OTHER. */
schedp.sched_priority = 0;
-   pthread_setschedparam(pthread_self(), SCHED_OTHER, );
+   __STD(pthread_setschedparam(pthread_self(), SCHED_OTHER, ));
 
memset(, 0, sizeof(sa));
sa.sa_handler = SIG_IGN;


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


[Xenomai-git] Gilles Chanteperdrix : cobalt/process: avoid crash at fork

2015-10-17 Thread git repository hosting
Module: xenomai-3
Branch: arm64
Commit: e30f30df631fff143233732cf21756fe2f29c7dc
URL:
http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=e30f30df631fff143233732cf21756fe2f29c7dc

Author: Gilles Chanteperdrix 
Date:   Sun Oct 11 23:29:47 2015 +0200

cobalt/process: avoid crash at fork

When handle_cleanup_event() is called because a thread is calling exec
after a fork from a Xenomai process, handle_taskexit_event() is called
before remove_process(). However, handle_taskexit_event() calls
clear_threadinfo(), so that later calls to cobalt_current_process()
return NULL, causing crashes in cleanup functions relying on
cobalt_current_process() or cobalt_ppd_get(), such as
cobalt_mutex_reclaim().

---

 kernel/cobalt/posix/process.c |   23 ++-
 1 file changed, 18 insertions(+), 5 deletions(-)

diff --git a/kernel/cobalt/posix/process.c b/kernel/cobalt/posix/process.c
index e7f8a93..c5a3297 100644
--- a/kernel/cobalt/posix/process.c
+++ b/kernel/cobalt/posix/process.c
@@ -200,7 +200,8 @@ static void remove_process(struct cobalt_process *process)
 * upon return from detach_process() for the Cobalt
 * personality, so don't dereference it afterwards.
 */
-   process->priv[xid] = NULL;
+   if (xid)
+   process->priv[xid] = NULL;
__clear_bit(personality->xid, >permap);
personality->ops.detach_process(priv);
atomic_dec(>refcnt);
@@ -1006,7 +1007,7 @@ static void unregister_debugged_thread(struct xnthread 
*thread)
xnlock_put_irqrestore(, s);
 }
 
-static int handle_taskexit_event(struct task_struct *p) /* p == current */
+static void __handle_taskexit_event(struct task_struct *p)
 {
struct cobalt_ppd *sys_ppd;
struct xnthread *thread;
@@ -1036,13 +1037,18 @@ static int handle_taskexit_event(struct task_struct *p) 
/* p == current */
if (atomic_dec_and_test(_ppd->refcnt))
remove_process(cobalt_current_process());
}
+}
+
+static int handle_taskexit_event(struct task_struct *p) /* p == current */
+{
+   __handle_taskexit_event(p);
 
/*
 * __xnthread_cleanup() -> ... -> finalize_thread
 * handler. From that point, the TCB is dropped. Be careful of
 * not treading on stale memory within @thread.
 */
-   __xnthread_cleanup(thread);
+   __xnthread_cleanup(xnthread_current());
 
clear_threadinfo();
 
@@ -1198,6 +1204,8 @@ static int handle_cleanup_event(struct mm_struct *mm)
old = cobalt_set_process(process);
sys_ppd = cobalt_ppd_get(0);
if (sys_ppd != _kernel_ppd) {
+   bool running_exec;
+
/*
 * Detect a userland shadow running exec(), i.e. still
 * attached to the current linux task (no prior
@@ -1208,12 +1216,17 @@ static int handle_cleanup_event(struct mm_struct *mm)
 * notifier manually for it.
 */
thread = xnthread_current();
-   if (thread && (current->flags & PF_EXITING) == 0) {
-   handle_taskexit_event(current);
+   running_exec = thread && (current->flags & PF_EXITING) == 0;
+   if (running_exec) {
+   __handle_taskexit_event(current);
ipipe_disable_notifier(current);
}
if (atomic_dec_and_test(_ppd->refcnt))
remove_process(process);
+   if (running_exec) {
+   __xnthread_cleanup(thread);
+   clear_threadinfo();
+   }
}
 
/*


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


[Xenomai-git] Don Mahurin : lib/cobalt/arm64: implement syscall for armv8/aarch64

2015-10-17 Thread git repository hosting
Module: xenomai-3
Branch: arm64
Commit: 8d5ec545a43f974be9ff1ae1b90eccafc4898325
URL:
http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=8d5ec545a43f974be9ff1ae1b90eccafc4898325

Author: Don Mahurin 
Date:   Fri May  8 10:39:32 2015 -0700

lib/cobalt/arm64: implement syscall for armv8/aarch64

---

 lib/cobalt/arch/arm64/include/asm/xenomai/syscall.h |8 
 1 file changed, 8 insertions(+)

diff --git a/lib/cobalt/arch/arm64/include/asm/xenomai/syscall.h 
b/lib/cobalt/arch/arm64/include/asm/xenomai/syscall.h
index 8f48eb1..1d5806c 100644
--- a/lib/cobalt/arch/arm64/include/asm/xenomai/syscall.h
+++ b/lib/cobalt/arch/arm64/include/asm/xenomai/syscall.h
@@ -88,6 +88,7 @@
 #define __sys2(x)  #x
 #define __sys1(x)  __sys2(x)
 
+#ifndef __aarch64__
 #ifdef __ARM_EABI__
 #define __SYS_REG , "r7"
 #define __SYS_REG_DECL register unsigned long __r7 __asm__ ("r7")
@@ -102,6 +103,13 @@
 #define __NR_OABI_SYSCALL_BASE 0x90
 #define __SYS_CALLOP "swi\t" __sys1(__NR_OABI_SYSCALL_BASE + XENO_ARM_SYSCALL) 
""
 #endif
+#else
+#define __SYS_REG , "r8"
+#define __SYS_REG_DECL register unsigned long __r8 __asm__ ("r8")
+#define __SYS_REG_SET __r8 = XENO_ARM_SYSCALL
+#define __SYS_REG_INPUT ,"r" (__r8)
+#define __SYS_CALLOP "svc\t0"
+#endif
 
 #define XENOMAI_DO_SYSCALL(nr, op, args...)\
({  \


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


[Xenomai-git] Gilles Chanteperdrix : rtnet: add option to enable debug asserts

2015-10-17 Thread git repository hosting
Module: xenomai-3
Branch: arm64
Commit: b27d15bb77bdf9163d1eb60aa5c9d7741e609f75
URL:
http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=b27d15bb77bdf9163d1eb60aa5c9d7741e609f75

Author: Gilles Chanteperdrix 
Date:   Sun Oct 11 19:11:18 2015 +0200

rtnet: add option to enable debug asserts

---

 kernel/drivers/net/Kconfig |   15 ---
 1 file changed, 12 insertions(+), 3 deletions(-)

diff --git a/kernel/drivers/net/Kconfig b/kernel/drivers/net/Kconfig
index 6e63437..caffc1f 100644
--- a/kernel/drivers/net/Kconfig
+++ b/kernel/drivers/net/Kconfig
@@ -1,9 +1,18 @@
 menu "RTnet"
 
 config XENO_DRIVERS_NET
-   depends on m
-   select NET
-   tristate "RTnet, TCP/IP socket interface"
+depends on m
+select NET
+tristate "RTnet, TCP/IP socket interface"
+
+config XENO_DRIVERS_RTNET_CHECKED
+bool "Internal Bug Checks"
+default n
+---help---
+Switch on if you face crashes when RTnet is running or if you suspect
+any other RTnet-related issues. This feature will add a few sanity
+checks at critical points that will produce warnings on the kernel
+console in case certain internal bugs are detected.
 
 source "drivers/xenomai/net/stack/Kconfig"
 source "drivers/xenomai/net/drivers/Kconfig"


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


[Xenomai-git] Don Mahurin : cobalt/arm64: fix warning: expects argument of type ' long unsigned int', but argument has type 'u64'

2015-10-17 Thread git repository hosting
Module: xenomai-3
Branch: arm64
Commit: 3bd940f0d8d63ff4ceb8f254d352e9ba826f28d4
URL:
http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=3bd940f0d8d63ff4ceb8f254d352e9ba826f28d4

Author: Don Mahurin 
Date:   Thu May 14 17:34:53 2015 -0700

cobalt/arm64: fix warning: expects argument of type 'long unsigned int', but 
argument has type 'u64'

---

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

diff --git a/kernel/cobalt/posix/syscall.c b/kernel/cobalt/posix/syscall.c
index 7f2e1c6..03cae7d 100644
--- a/kernel/cobalt/posix/syscall.c
+++ b/kernel/cobalt/posix/syscall.c
@@ -814,7 +814,7 @@ linux_syscall:
return KEVENT_PROPAGATE;
 
 bad_syscall:
-   printk(XENO_WARNING "bad syscall <%#lx>\n", __xn_syscall(regs));
+   printk(XENO_WARNING "bad syscall <%#llx>\n", __xn_syscall(regs));
 
__xn_error_return(regs, -ENOSYS);
 


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


[Xenomai-git] Gilles Chanteperdrix : rtnet: fix reference count issues

2015-10-17 Thread git repository hosting
Module: xenomai-3
Branch: arm64
Commit: be3bda5cf3e3908a4207221788bbbf96d61adbe1
URL:
http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=be3bda5cf3e3908a4207221788bbbf96d61adbe1

Author: Gilles Chanteperdrix 
Date:   Sun Oct 11 16:04:40 2015 +0200

rtnet: fix reference count issues

---

 kernel/drivers/net/stack/include/rtskb.h|3 +--
 kernel/drivers/net/stack/ipv4/ip_input.c|1 +
 kernel/drivers/net/stack/rtmac/rtmac_vnic.c |5 +
 kernel/drivers/net/stack/rtskb.c|   17 -
 4 files changed, 7 insertions(+), 19 deletions(-)

diff --git a/kernel/drivers/net/stack/include/rtskb.h 
b/kernel/drivers/net/stack/include/rtskb.h
index a6ef860..7489aa6 100644
--- a/kernel/drivers/net/stack/include/rtskb.h
+++ b/kernel/drivers/net/stack/include/rtskb.h
@@ -242,7 +242,6 @@ struct rtskb_pool_lock_ops {
 struct rtskb_pool {
 struct rtskb_queue queue;
 const struct rtskb_pool_lock_ops *lock_ops;
-unsigned lock_count;
 void *lock_cookie;
 };
 
@@ -736,7 +735,7 @@ extern unsigned int __rtskb_module_pool_init(struct 
rtskb_pool *pool,
 #define rtskb_module_pool_init(pool, size) \
 __rtskb_module_pool_init(pool, size, THIS_MODULE)
 
-extern int rtskb_pool_release(struct rtskb_pool *pool);
+extern void rtskb_pool_release(struct rtskb_pool *pool);
 
 extern unsigned int rtskb_pool_extend(struct rtskb_pool *pool,
  unsigned int add_rtskbs);
diff --git a/kernel/drivers/net/stack/ipv4/ip_input.c 
b/kernel/drivers/net/stack/ipv4/ip_input.c
index c9c871e..2d2a751 100644
--- a/kernel/drivers/net/stack/ipv4/ip_input.c
+++ b/kernel/drivers/net/stack/ipv4/ip_input.c
@@ -88,6 +88,7 @@ static inline void rt_ip_local_deliver(struct rtskb *skb)
 
 if (err) {
 kfree_rtskb(skb);
+   rt_socket_dereference(sock);
 return;
 }
 }
diff --git a/kernel/drivers/net/stack/rtmac/rtmac_vnic.c 
b/kernel/drivers/net/stack/rtmac/rtmac_vnic.c
index 510e714..3bdb760 100644
--- a/kernel/drivers/net/stack/rtmac/rtmac_vnic.c
+++ b/kernel/drivers/net/stack/rtmac/rtmac_vnic.c
@@ -286,12 +286,9 @@ int rtmac_vnic_add(struct rtnet_device *rtdev, 
vnic_xmit_handler vnic_xmit)
 int rtmac_vnic_unregister(struct rtnet_device *rtdev)
 {
 struct rtmac_priv   *mac_priv = rtdev->mac_priv;
-int err;
 
 if (mac_priv->vnic) {
-   err = rtskb_pool_release(_priv->vnic_skb_pool);
-   if (err < 0)
-   return err;
+   rtskb_pool_release(_priv->vnic_skb_pool);
unregister_netdev(mac_priv->vnic);
free_netdev(mac_priv->vnic);
mac_priv->vnic = NULL;
diff --git a/kernel/drivers/net/stack/rtskb.c b/kernel/drivers/net/stack/rtskb.c
index 8afd6a6..f560902 100644
--- a/kernel/drivers/net/stack/rtskb.c
+++ b/kernel/drivers/net/stack/rtskb.c
@@ -156,14 +156,11 @@ static struct rtskb *__rtskb_pool_dequeue(struct 
rtskb_pool *pool)
 struct rtskb_queue *queue = >queue;
 struct rtskb *skb;
 
-if (pool->lock_count == 0 && !pool->lock_ops->trylock(pool->lock_cookie))
+if (!pool->lock_ops->trylock(pool->lock_cookie))
return NULL;
 skb = __rtskb_dequeue(queue);
-if (skb == NULL) {
-   if (pool->lock_count == 0) /* This can only happen if pool has 0 
packets */
+if (skb == NULL)
pool->lock_ops->unlock(pool->lock_cookie);
-} else
-   ++pool->lock_count;
 
 return skb;
 }
@@ -187,8 +184,7 @@ static void __rtskb_pool_queue_tail(struct rtskb_pool 
*pool, struct rtskb *skb)
 struct rtskb_queue *queue = >queue;
 
 __rtskb_queue_tail(queue,skb);
-if (--pool->lock_count == 0)
-   pool->lock_ops->unlock(pool->lock_cookie);
+pool->lock_ops->unlock(pool->lock_cookie);
 }
 
 void rtskb_pool_queue_tail(struct rtskb_pool *pool, struct rtskb *skb)
@@ -332,7 +328,6 @@ unsigned int rtskb_pool_init(struct rtskb_pool *pool,
rtskb_pools_max = rtskb_pools;
 
 pool->lock_ops = lock_ops ?: _nop_pool_lock_ops;
-pool->lock_count = 0;
 pool->lock_cookie = lock_cookie;
 
 return i;
@@ -372,13 +367,10 @@ EXPORT_SYMBOL_GPL(__rtskb_module_pool_init);
  *  __rtskb_pool_release
  *  @pool: pool to release
  */
-int rtskb_pool_release(struct rtskb_pool *pool)
+void rtskb_pool_release(struct rtskb_pool *pool)
 {
 struct rtskb *skb;
 
-if (pool->lock_count)
-   return -EBUSY;
-
 while ((skb = rtskb_dequeue(>queue)) != NULL) {
rtdev_unmap_rtskb(skb);
kmem_cache_free(rtskb_slab_pool, skb);
@@ -386,7 +378,6 @@ int rtskb_pool_release(struct rtskb_pool *pool)
 }
 
 rtskb_pools--;
-return 0;
 }
 
 EXPORT_SYMBOL_GPL(rtskb_pool_release);


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


[Xenomai-git] Philippe Gerum : cobalt/arm64: sanitize calibration file

2015-10-17 Thread git repository hosting
Module: xenomai-3
Branch: arm64
Commit: 5bba89482203d592b6e30c0f14e448c4b2640b70
URL:
http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=5bba89482203d592b6e30c0f14e448c4b2640b70

Author: Philippe Gerum 
Date:   Thu Sep 17 04:01:49 2015 +0200

cobalt/arm64: sanitize calibration file

---

 .../arch/arm64/include/asm/xenomai/calibration.h   |   44 +---
 1 file changed, 11 insertions(+), 33 deletions(-)

diff --git a/kernel/cobalt/arch/arm64/include/asm/xenomai/calibration.h 
b/kernel/cobalt/arch/arm64/include/asm/xenomai/calibration.h
index e303a04..e85521e 100644
--- a/kernel/cobalt/arch/arm64/include/asm/xenomai/calibration.h
+++ b/kernel/cobalt/arch/arm64/include/asm/xenomai/calibration.h
@@ -1,13 +1,10 @@
 /*
- * Copyright (C) 2001,2002,2003,2004,2005 Philippe Gerum .
+ * Copyright (C) 2015 Philippe Gerum .
  *
- * ARM port
- *   Copyright (C) 2005 Stelian Pop
- *
- * Xenomai is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
+ * Xenomai is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published
+ * by the Free Software Foundation; either version 2 of the License,
+ * or (at your option) any later version.
  *
  * Xenomai is distributed in the hope that it will be useful, but
  * WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -19,41 +16,22 @@
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
  * 02111-1307, USA.
  */
-#ifndef _COBALT_ARM_ASM_CALIBRATION_H
-#define _COBALT_ARM_ASM_CALIBRATION_H
-
-unsigned int omap_rev(void);
-#define cpu_is_omap44xx() ((omap_rev() & 0xff) == 0x44)
+#ifndef _COBALT_ARM64_ASM_CALIBRATION_H
+#define _COBALT_ARM64_ASM_CALIBRATION_H
 
 static inline void xnarch_get_latencies(struct xnclock_gravity *p)
 {
unsigned int ulat;
 #if CONFIG_XENO_OPT_TIMING_SCHEDLAT != 0
ulat = CONFIG_XENO_OPT_TIMING_SCHEDLAT;
-#elif defined(CONFIG_ARCH_AT91RM9200)
-   ulat = 8500;
-#elif defined(CONFIG_ARCH_AT91SAM9263)
-   ulat = 11000;
-#elif defined(CONFIG_SOC_IMX6Q)
-   ulat = 6000;
-#elif defined(CONFIG_ARCH_MX51)
-   ulat = 5000;
-#elif defined(CONFIG_ARCH_MX53)
-   ulat = 5000;
-#elif defined(CONFIG_ARCH_MX6)
-   ulat = 2000;
-#elif defined(CONFIG_SOC_IMX7)
-   ulat = 2000;
-#elif defined(CONFIG_SOC_LS1021A)
-   ulat = 2800;
-#elif defined(CONFIG_ARCH_OMAP)
-   ulat = cpu_is_omap44xx() ? 2500 : 5000;
+#elif defined(CONFIG_ARCH_HISI)
+   ulat = 4000;
 #else
-   ulat = 9500;/* XXX sane? */
+   ulat = 4000;
 #endif
p->user = xnclock_ns_to_ticks(, ulat);
p->kernel = xnclock_ns_to_ticks(, 
CONFIG_XENO_OPT_TIMING_KSCHEDLAT);
p->irq = xnclock_ns_to_ticks(, CONFIG_XENO_OPT_TIMING_IRQLAT);
 }
 
-#endif /* !_COBALT_ARM_ASM_CALIBRATION_H */
+#endif /* !_COBALT_ARM64_ASM_CALIBRATION_H */


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


[Xenomai-git] Philippe Gerum : boilerplate/version: fix version suffix for non-devel release

2015-10-17 Thread git repository hosting
Module: xenomai-3
Branch: arm64
Commit: fa9133cea6916ae1ebebccdd84592b06002d5caa
URL:
http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=fa9133cea6916ae1ebebccdd84592b06002d5caa

Author: Philippe Gerum 
Date:   Fri Oct 16 19:06:44 2015 +0200

boilerplate/version: fix version suffix for non-devel release

---

 lib/boilerplate/version.c |6 --
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/lib/boilerplate/version.c b/lib/boilerplate/version.c
index 271349d..d28c496 100644
--- a/lib/boilerplate/version.c
+++ b/lib/boilerplate/version.c
@@ -19,7 +19,9 @@
 #include "git-stamp.h"
 
 #ifndef GIT_STAMP
-#define GIT_STAMP  ""
+#define devel_suffix  ""
+#else
+#define devel_suffix  " -- " GIT_STAMP
 #endif
 
 #ifdef CONFIG_XENO_COBALT
@@ -29,7 +31,7 @@
 #endif
 
 const char *xenomai_version_string = PACKAGE_NAME \
-   core_suffix PACKAGE_VERSION " -- " GIT_STAMP;
+   core_suffix PACKAGE_VERSION devel_suffix;
 
 #ifdef __PROGRAM__
 


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


[Xenomai-git] Dmitriy Cherkasov : cobalt/arm64: machine.h: use slightly faster ffnz implementation

2015-10-17 Thread git repository hosting
Module: xenomai-3
Branch: arm64
Commit: e0a335e565ab71d96b7aa4b764e42725befaa52e
URL:
http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=e0a335e565ab71d96b7aa4b764e42725befaa52e

Author: Dmitriy Cherkasov 
Date:   Wed Jun 17 16:09:20 2015 -0700

cobalt/arm64: machine.h: use slightly faster ffnz implementation

---

 kernel/cobalt/arch/arm64/include/asm/xenomai/machine.h |   12 +++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/kernel/cobalt/arch/arm64/include/asm/xenomai/machine.h 
b/kernel/cobalt/arch/arm64/include/asm/xenomai/machine.h
index 417a7b0..b8290bf 100644
--- a/kernel/cobalt/arch/arm64/include/asm/xenomai/machine.h
+++ b/kernel/cobalt/arch/arm64/include/asm/xenomai/machine.h
@@ -37,13 +37,23 @@
 #include 
 #include 
 #include 
+#include 
 
 /* D-side always behaves as PIPT on AArch64 (see 
arch/arm64/include/asm/cachetype.h) */
 #define xnarch_cache_aliasing() 0
 
 static inline __attribute_const__ unsigned long ffnz(unsigned long ul)
 {
-   return __builtin_ffsl(ul) - 1;
+   int __r;
+
+   /* zero input is not valid */
+   XENO_WARN_ON(COBALT, ul == 0);
+
+   __asm__ ("rbit\t%0, %1\n"
+"clz\t%0, %0\n"
+   : "=r" (__r) : "r"(ul) : "cc");
+
+   return __r;
 }
 
 #include 


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


[Xenomai-git] Dmitriy Cherkasov : cobalt/arm64: machine.h: Add 64-bit ffnz implementation. This fixes crash when running xddp-echo.

2015-10-17 Thread git repository hosting
Module: xenomai-3
Branch: arm64
Commit: 8ad5dbed7d396191a0e2b2310f98e23e4e8fe389
URL:
http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=8ad5dbed7d396191a0e2b2310f98e23e4e8fe389

Author: Dmitriy Cherkasov 
Date:   Mon Jun 15 17:10:37 2015 -0700

cobalt/arm64: machine.h: Add 64-bit ffnz implementation. This fixes crash when 
running xddp-echo.

---

 kernel/cobalt/arch/arm64/include/asm/xenomai/machine.h |4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/kernel/cobalt/arch/arm64/include/asm/xenomai/machine.h 
b/kernel/cobalt/arch/arm64/include/asm/xenomai/machine.h
index e078564..417a7b0 100644
--- a/kernel/cobalt/arch/arm64/include/asm/xenomai/machine.h
+++ b/kernel/cobalt/arch/arm64/include/asm/xenomai/machine.h
@@ -43,9 +43,7 @@
 
 static inline __attribute_const__ unsigned long ffnz(unsigned long ul)
 {
-   int __r;
-   __asm__("clz\t%0, %1" : "=r" (__r) : "r"(ul & (-ul)) : "cc");
-   return 31 - __r;
+   return __builtin_ffsl(ul) - 1;
 }
 
 #include 


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


[Xenomai-git] Dmitriy Cherkasov : cobalt/arm64: xenomai/syscall.h: update syscall register

2015-10-17 Thread git repository hosting
Module: xenomai-3
Branch: arm64
Commit: e0b5e760138aebfa6d67abe042a971ed9a340afb
URL:
http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=e0b5e760138aebfa6d67abe042a971ed9a340afb

Author: Dmitriy Cherkasov 
Date:   Fri May  8 15:54:18 2015 -0700

cobalt/arm64: xenomai/syscall.h: update syscall register

---

 kernel/cobalt/arch/arm64/include/asm/xenomai/syscall.h |6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/kernel/cobalt/arch/arm64/include/asm/xenomai/syscall.h 
b/kernel/cobalt/arch/arm64/include/asm/xenomai/syscall.h
index 2fdd890..7bf95fb 100644
--- a/kernel/cobalt/arch/arm64/include/asm/xenomai/syscall.h
+++ b/kernel/cobalt/arch/arm64/include/asm/xenomai/syscall.h
@@ -40,10 +40,10 @@
 #define __xn_reg_sys(__regs)   ((__regs)->orig_x0)
 /* In OABI_COMPAT mode, handle both OABI and EABI userspace syscalls */
 #ifdef CONFIG_OABI_COMPAT
-#define __xn_syscall_p(__regs) (((__regs)->regs[7] == __NR_OABI_SYSCALL_BASE + 
XENO_ARM_SYSCALL) || \
-((__regs)->regs[7] == __ARM_NR_ipipe))
+#define __xn_syscall_p(__regs) (((__regs)->regs[8] == __NR_OABI_SYSCALL_BASE + 
XENO_ARM_SYSCALL) || \
+((__regs)->regs[8] == __ARM_NR_ipipe))
 #else /* !CONFIG_OABI_COMPAT */
-#define __xn_syscall_p(__regs) ((__regs)->regs[7] == __ARM_NR_ipipe)
+#define __xn_syscall_p(__regs) ((__regs)->regs[8] == __ARM_NR_ipipe)
 #endif /* !CONFIG_OABI_COMPAT */
 #define __xn_syscall(__regs)   (__xn_reg_sys(__regs) & ~__COBALT_SYSCALL_BIT)
 


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


[Xenomai-git] Philippe Gerum : cobalt/arm64: assume TLS is properly supported

2015-10-17 Thread git repository hosting
Module: xenomai-3
Branch: arm64
Commit: 41fb8ec2b36c28a046fa683758a7cbd19699447a
URL:
http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=41fb8ec2b36c28a046fa683758a7cbd19699447a

Author: Philippe Gerum 
Date:   Thu Sep 17 02:19:57 2015 +0200

cobalt/arm64: assume TLS is properly supported

---

 lib/cobalt/arch/arm64/include/asm/xenomai/syscall.h |9 +++--
 1 file changed, 3 insertions(+), 6 deletions(-)

diff --git a/lib/cobalt/arch/arm64/include/asm/xenomai/syscall.h 
b/lib/cobalt/arch/arm64/include/asm/xenomai/syscall.h
index 1d5806c..8e7ad61 100644
--- a/lib/cobalt/arch/arm64/include/asm/xenomai/syscall.h
+++ b/lib/cobalt/arch/arm64/include/asm/xenomai/syscall.h
@@ -18,8 +18,8 @@
  * License along with this library; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA.
  */
-#ifndef _LIB_COBALT_ARM_SYSCALL_H
-#define _LIB_COBALT_ARM_SYSCALL_H
+#ifndef _LIB_COBALT_ARM64_SYSCALL_H
+#define _LIB_COBALT_ARM64_SYSCALL_H
 
 #include 
 #include 
@@ -29,9 +29,6 @@
  * Some of the following macros have been adapted from Linux's
  * implementation of the syscall mechanism in :
  */
-#if defined(HAVE_TLS) && __GNUC__ == 4 && __GNUC_MINOR__ >= 3
-#error TLS support (__thread) is broken with GCC >= 4.3, use --disable-tls 
when configuring
-#endif
 
 #define LOADARGS_0(syscode, dummy...)  \
__a0 = (unsigned long) (syscode)
@@ -143,4 +140,4 @@
 #define XENOMAI_SYSBIND(breq)  \
XENOMAI_DO_SYSCALL(1,sc_cobalt_bind,breq)
 
-#endif /* !_LIB_COBALT_ARM_SYSCALL_H */
+#endif /* !_LIB_COBALT_ARM64_SYSCALL_H */


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


[Xenomai-git] Philippe Gerum : cobalt/arm64: drop aarch32 bits from feature set

2015-10-17 Thread git repository hosting
Module: xenomai-3
Branch: arm64
Commit: 215930a73fe900ad9e6b244343657783542c93c0
URL:
http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=215930a73fe900ad9e6b244343657783542c93c0

Author: Philippe Gerum 
Date:   Thu Sep 17 02:16:10 2015 +0200

cobalt/arm64: drop aarch32 bits from feature set

---

 .../arch/arm64/include/asm/xenomai/features.h  |   44 ++--
 1 file changed, 4 insertions(+), 40 deletions(-)

diff --git a/lib/cobalt/arch/arm64/include/asm/xenomai/features.h 
b/lib/cobalt/arch/arm64/include/asm/xenomai/features.h
index 0d6702b..6dfe64c 100644
--- a/lib/cobalt/arch/arm64/include/asm/xenomai/features.h
+++ b/lib/cobalt/arch/arm64/include/asm/xenomai/features.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2005 Philippe Gerum .
+ * Copyright (C) 2015 Philippe Gerum .
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -15,52 +15,16 @@
  * License along with this library; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA.
  */
-#ifndef _LIB_COBALT_ARM_FEATURES_H
-#define _LIB_COBALT_ARM_FEATURES_H
+#ifndef _LIB_COBALT_ARM64_FEATURES_H
+#define _LIB_COBALT_ARM64_FEATURES_H
 
 #include_next 
 #include 
 
-#if defined(__ARM_ARCH_2__)
-#define __LINUX_ARM_ARCH__ 2
-#endif /* armv2 */
-
-#if defined(__ARM_ARCH_3__)
-#define __LINUX_ARM_ARCH__ 3
-#endif /* armv3 */
-
-#if defined(__ARM_ARCH_4__) || defined(__ARM_ARCH_4T__)
-#define __LINUX_ARM_ARCH__ 4
-#endif /* armv4 */
-
-#if defined(__ARM_ARCH_5__) || defined(__ARM_ARCH_5T__) \
-   || defined(__ARM_ARCH_5E__) || defined(__ARM_ARCH_5TE__)
-#define __LINUX_ARM_ARCH__ 5
-#endif /* armv5 */
-
-#if defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6K__) \
-   || defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6ZK__)
-#define __LINUX_ARM_ARCH__ 6
-#endif /* armv6 */
-
-#if defined(__ARM_ARCH_7A__)
-#define __LINUX_ARM_ARCH__ 7
-#endif /* armv7 */
-
-#if defined(__aarch64__)
 #define __LINUX_ARM_ARCH__ 8
-#endif /* armv8 */
-
-#ifndef __LINUX_ARM_ARCH__
-#error "Could not find current ARM architecture"
-#endif
-
-#if __LINUX_ARM_ARCH__ < 6 && defined(CONFIG_SMP)
-#error "SMP not supported below armv6, compile with -march=armv6 or above"
-#endif
 
 #include 
 
 int cobalt_fp_detect(void);
 
-#endif /* !_LIB_COBALT_ARM_FEATURES_H */
+#endif /* !_LIB_COBALT_ARM64_FEATURES_H */


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


[Xenomai-git] Don Mahurin : lib/cobalt/arm64: add __LINUX_ARM_ARCH__ form armv8/aarch64

2015-10-17 Thread git repository hosting
Module: xenomai-3
Branch: arm64
Commit: 95bc3e9cd2d0700c7a5940dc6f1e58b8bae4a03a
URL:
http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=95bc3e9cd2d0700c7a5940dc6f1e58b8bae4a03a

Author: Don Mahurin 
Date:   Fri May  8 10:39:01 2015 -0700

lib/cobalt/arm64: add __LINUX_ARM_ARCH__ form armv8/aarch64

---

 lib/cobalt/arch/arm64/include/asm/xenomai/features.h |4 
 1 file changed, 4 insertions(+)

diff --git a/lib/cobalt/arch/arm64/include/asm/xenomai/features.h 
b/lib/cobalt/arch/arm64/include/asm/xenomai/features.h
index 10bd0c7..0d6702b 100644
--- a/lib/cobalt/arch/arm64/include/asm/xenomai/features.h
+++ b/lib/cobalt/arch/arm64/include/asm/xenomai/features.h
@@ -47,6 +47,10 @@
 #define __LINUX_ARM_ARCH__ 7
 #endif /* armv7 */
 
+#if defined(__aarch64__)
+#define __LINUX_ARM_ARCH__ 8
+#endif /* armv8 */
+
 #ifndef __LINUX_ARM_ARCH__
 #error "Could not find current ARM architecture"
 #endif


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


[Xenomai-git] Philippe Gerum : lib/cobalt: explain -ENOSYS upon binding error

2015-10-17 Thread git repository hosting
Module: xenomai-3
Branch: arm64
Commit: f428008a8afec24abcc001980d255ed0f299a782
URL:
http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=f428008a8afec24abcc001980d255ed0f299a782

Author: Philippe Gerum 
Date:   Fri Oct 16 15:06:40 2015 +0200

lib/cobalt: explain -ENOSYS upon binding error

---

 lib/cobalt/init.c |2 ++
 1 file changed, 2 insertions(+)

diff --git a/lib/cobalt/init.c b/lib/cobalt/init.c
index 3e88d06..ea8609c 100644
--- a/lib/cobalt/init.c
+++ b/lib/cobalt/init.c
@@ -112,6 +112,8 @@ static void low_init(void)
case -ENOEXEC:
early_panic("ABI mismatch: required r%lu, provided r%lu",
XENOMAI_ABI_REV, f->feat_abirev);
+   case -ENOSYS:
+   early_panic("Cobalt core not enabled in kernel");
default:
early_panic("binding failed: %s", strerror(-ret));
}


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


[Xenomai-git] Dmitriy Cherkasov : cobalt/arm64: update register struct usage for arm64

2015-10-17 Thread git repository hosting
Module: xenomai-3
Branch: arm64
Commit: b8764449c551fe5027f793c4bff3a9a82939f6c6
URL:
http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=b8764449c551fe5027f793c4bff3a9a82939f6c6

Author: Dmitriy Cherkasov 
Date:   Thu May  7 13:58:14 2015 -0700

cobalt/arm64: update register struct usage for arm64

---

 .../arch/arm64/include/asm/xenomai/syscall.h   |   22 ++--
 kernel/cobalt/arch/arm64/mayday.c  |   20 +-
 2 files changed, 21 insertions(+), 21 deletions(-)

diff --git a/kernel/cobalt/arch/arm64/include/asm/xenomai/syscall.h 
b/kernel/cobalt/arch/arm64/include/asm/xenomai/syscall.h
index d80df77..f0a1090 100644
--- a/kernel/cobalt/arch/arm64/include/asm/xenomai/syscall.h
+++ b/kernel/cobalt/arch/arm64/include/asm/xenomai/syscall.h
@@ -36,21 +36,21 @@
 #define __xn_reg_sys(__regs)   ((__regs)->ARM_ORIG_r0)
 /* In OABI_COMPAT mode, handle both OABI and EABI userspace syscalls */
 #ifdef CONFIG_OABI_COMPAT
-#define __xn_syscall_p(__regs) (((__regs)->ARM_r7 == __NR_OABI_SYSCALL_BASE + 
XENO_ARM_SYSCALL) || \
-((__regs)->ARM_r7 == __ARM_NR_ipipe))
+#define __xn_syscall_p(__regs) (((__regs)->regs[7] == __NR_OABI_SYSCALL_BASE + 
XENO_ARM_SYSCALL) || \
+((__regs)->regs[7] == __ARM_NR_ipipe))
 #else /* !CONFIG_OABI_COMPAT */
-#define __xn_syscall_p(__regs) ((__regs)->ARM_r7 == __ARM_NR_ipipe)
+#define __xn_syscall_p(__regs) ((__regs)->regs[7] == __ARM_NR_ipipe)
 #endif /* !CONFIG_OABI_COMPAT */
 #define __xn_syscall(__regs)   (__xn_reg_sys(__regs) & ~__COBALT_SYSCALL_BIT)
 
-#define __xn_reg_rval(__regs)  ((__regs)->ARM_r0)
-#define __xn_reg_arg1(__regs)  ((__regs)->ARM_r1)
-#define __xn_reg_arg2(__regs)  ((__regs)->ARM_r2)
-#define __xn_reg_arg3(__regs)  ((__regs)->ARM_r3)
-#define __xn_reg_arg4(__regs)  ((__regs)->ARM_r4)
-#define __xn_reg_arg5(__regs)  ((__regs)->ARM_r5)
-#define __xn_reg_pc(__regs)((__regs)->ARM_ip)
-#define __xn_reg_sp(__regs)((__regs)->ARM_sp)
+#define __xn_reg_rval(__regs)  ((__regs)->regs[0])
+#define __xn_reg_arg1(__regs)  ((__regs)->regs[1])
+#define __xn_reg_arg2(__regs)  ((__regs)->regs[2])
+#define __xn_reg_arg3(__regs)  ((__regs)->regs[3])
+#define __xn_reg_arg4(__regs)  ((__regs)->regs[4])
+#define __xn_reg_arg5(__regs)  ((__regs)->regs[5])
+#define __xn_reg_pc(__regs)((__regs)->ip)
+#define __xn_reg_sp(__regs)((__regs)->sp)
 
 static inline void __xn_error_return(struct pt_regs *regs, int v)
 {
diff --git a/kernel/cobalt/arch/arm64/mayday.c 
b/kernel/cobalt/arch/arm64/mayday.c
index 20e4559..bc51ad6 100644
--- a/kernel/cobalt/arch/arm64/mayday.c
+++ b/kernel/cobalt/arch/arm64/mayday.c
@@ -120,27 +120,27 @@ void *xnarch_get_mayday_page(void)
 void xnarch_handle_mayday(struct xnarchtcb *tcb, struct pt_regs *regs,
  unsigned long tramp)
 {
-   tcb->mayday.pc = regs->ARM_pc;
-   tcb->mayday.r0 = regs->ARM_r0;
+   tcb->mayday.pc = regs->pc;
+   tcb->mayday.r0 = regs->regs[0];
 #ifdef __ARM_EABI__
-   tcb->mayday.r7 = regs->ARM_r7;
+   tcb->mayday.r7 = regs->regs[7];
 #endif
 #ifdef CONFIG_ARM_THUMB
/* The code on the mayday page must be run in ARM mode */
-   tcb->mayday.psr = regs->ARM_cpsr;
-   regs->ARM_cpsr &= ~PSR_T_BIT;
+   tcb->mayday.psr = regs->cpsr;
+   regs->cpsr &= ~PSR_T_BIT;
 #endif
-   regs->ARM_pc = tramp;
+   regs->pc = tramp;
 }
 
 void xnarch_fixup_mayday(struct xnarchtcb *tcb, struct pt_regs *regs)
 {
-   regs->ARM_pc = tcb->mayday.pc;
-   regs->ARM_r0 = tcb->mayday.r0;
+   regs->pc = tcb->mayday.pc;
+   regs->regs[0] = tcb->mayday.r0;
 #ifdef __ARM_EABI__
-   regs->ARM_r7 = tcb->mayday.r7;
+   regs->regs[7] = tcb->mayday.r7;
 #endif
 #ifdef CONFIG_ARM_THUMB
-   regs->ARM_cpsr = tcb->mayday.psr;
+   regs->cpsr = tcb->mayday.psr;
 #endif
 }


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


[Xenomai-git] Philippe Gerum : cobalt/arm64: fix inclusion guards

2015-10-17 Thread git repository hosting
Module: xenomai-3
Branch: arm64
Commit: 89d6f00bab7dd5f93ace2726cc62fb087a2ddee6
URL:
http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=89d6f00bab7dd5f93ace2726cc62fb087a2ddee6

Author: Philippe Gerum 
Date:   Sat Oct 17 14:40:53 2015 +0200

cobalt/arm64: fix inclusion guards

---

 kernel/cobalt/arch/arm64/include/asm/xenomai/features.h  |8 
 kernel/cobalt/arch/arm64/include/asm/xenomai/fptest.h|6 +++---
 kernel/cobalt/arch/arm64/include/asm/xenomai/machine.h   |6 +++---
 kernel/cobalt/arch/arm64/include/asm/xenomai/syscall.h   |6 +++---
 kernel/cobalt/arch/arm64/include/asm/xenomai/syscall32.h |6 +++---
 kernel/cobalt/arch/arm64/include/asm/xenomai/thread.h|7 +++
 kernel/cobalt/arch/arm64/include/asm/xenomai/uapi/arith.h|6 +++---
 kernel/cobalt/arch/arm64/include/asm/xenomai/uapi/features.h |6 +++---
 kernel/cobalt/arch/arm64/include/asm/xenomai/uapi/fptest.h   |6 +++---
 kernel/cobalt/arch/arm64/include/asm/xenomai/uapi/syscall.h  |6 +++---
 kernel/cobalt/arch/arm64/include/asm/xenomai/uapi/tsc.h  |6 +++---
 kernel/cobalt/arch/arm64/include/asm/xenomai/wrappers.h  |6 +++---
 12 files changed, 37 insertions(+), 38 deletions(-)

diff --git a/kernel/cobalt/arch/arm64/include/asm/xenomai/features.h 
b/kernel/cobalt/arch/arm64/include/asm/xenomai/features.h
index d485286..112408f 100644
--- a/kernel/cobalt/arch/arm64/include/asm/xenomai/features.h
+++ b/kernel/cobalt/arch/arm64/include/asm/xenomai/features.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2005 Philippe Gerum .
+ * Copyright (C) 2015 Philippe Gerum .
  *
  * ARM port
  *   Copyright (C) 2005 Stelian Pop
@@ -19,12 +19,12 @@
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
  * 02111-1307, USA.
  */
-#ifndef _COBALT_ARM_ASM_FEATURES_H
-#define _COBALT_ARM_ASM_FEATURES_H
+#ifndef _COBALT_ARM64_ASM_FEATURES_H
+#define _COBALT_ARM64_ASM_FEATURES_H
 
 struct cobalt_featinfo;
 static inline void collect_arch_features(struct cobalt_featinfo *p) { }
 
 #include 
 
-#endif /* !_COBALT_ARM_ASM_FEATURES_H */
+#endif /* !_COBALT_ARM64_ASM_FEATURES_H */
diff --git a/kernel/cobalt/arch/arm64/include/asm/xenomai/fptest.h 
b/kernel/cobalt/arch/arm64/include/asm/xenomai/fptest.h
index 743d758..cfdf0b3 100644
--- a/kernel/cobalt/arch/arm64/include/asm/xenomai/fptest.h
+++ b/kernel/cobalt/arch/arm64/include/asm/xenomai/fptest.h
@@ -16,8 +16,8 @@
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
  * 02111-1307, USA.
  */
-#ifndef _COBALT_ARM_ASM_FPTEST_H
-#define _COBALT_ARM_ASM_FPTEST_H
+#ifndef _COBALT_ARM64_ASM_FPTEST_H
+#define _COBALT_ARM64_ASM_FPTEST_H
 
 #include 
 #include 
@@ -44,4 +44,4 @@ static inline int fp_detect(void)
return have_fp ? __COBALT_HAVE_FPU : 0;
 }
 
-#endif /* _COBALT_ARM_ASM_FPTEST_H */
+#endif /* _COBALT_ARM64_ASM_FPTEST_H */
diff --git a/kernel/cobalt/arch/arm64/include/asm/xenomai/machine.h 
b/kernel/cobalt/arch/arm64/include/asm/xenomai/machine.h
index b8290bf..7444cc8 100644
--- a/kernel/cobalt/arch/arm64/include/asm/xenomai/machine.h
+++ b/kernel/cobalt/arch/arm64/include/asm/xenomai/machine.h
@@ -20,8 +20,8 @@
  *   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
  *   02111-1307, USA.
  */
-#ifndef _COBALT_ARM_ASM_MACHINE_H
-#define _COBALT_ARM_ASM_MACHINE_H
+#ifndef _COBALT_ARM64_ASM_MACHINE_H
+#define _COBALT_ARM64_ASM_MACHINE_H
 
 #include 
 #include 
@@ -58,4 +58,4 @@ static inline __attribute_const__ unsigned long ffnz(unsigned 
long ul)
 
 #include 
 
-#endif /* !_COBALT_ARM_ASM_MACHINE_H */
+#endif /* !_COBALT_ARM64_ASM_MACHINE_H */
diff --git a/kernel/cobalt/arch/arm64/include/asm/xenomai/syscall.h 
b/kernel/cobalt/arch/arm64/include/asm/xenomai/syscall.h
index 77c1716..949f287 100644
--- a/kernel/cobalt/arch/arm64/include/asm/xenomai/syscall.h
+++ b/kernel/cobalt/arch/arm64/include/asm/xenomai/syscall.h
@@ -19,8 +19,8 @@
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
  * 02111-1307, USA.
  */
-#ifndef _COBALT_ARM_ASM_SYSCALL_H
-#define _COBALT_ARM_ASM_SYSCALL_H
+#ifndef _COBALT_ARM64_ASM_SYSCALL_H
+#define _COBALT_ARM64_ASM_SYSCALL_H
 
 #include 
 #include 
@@ -75,4 +75,4 @@ int xnarch_local_syscall(unsigned long a1, unsigned long a2,
 unsigned long a3, unsigned long a4,
 unsigned long a5);
 
-#endif /* !_COBALT_ARM_ASM_SYSCALL_H */
+#endif /* !_COBALT_ARM64_ASM_SYSCALL_H */
diff --git a/kernel/cobalt/arch/arm64/include/asm/xenomai/syscall32.h 
b/kernel/cobalt/arch/arm64/include/asm/xenomai/syscall32.h
index 95c5a11..a66ddd6 100644
--- a/kernel/cobalt/arch/arm64/include/asm/xenomai/syscall32.h
+++ b/kernel/cobalt/arch/arm64/include/asm/xenomai/syscall32.h
@@ -16,9 +16,9 @@
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
  * 02111-1307, USA.
  */
-#ifndef _COBALT_ARM_ASM_SYSCALL32_H
-#define _COBALT_ARM_ASM_SYSCALL32_H
+#ifndef 

[Xenomai-git] Philippe Gerum : cobalt/arm64: drop useless test on target architecture

2015-10-17 Thread git repository hosting
Module: xenomai-3
Branch: arm64
Commit: 268bc2be73e42147ec0712799e4b13907c34c1b8
URL:
http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=268bc2be73e42147ec0712799e4b13907c34c1b8

Author: Philippe Gerum 
Date:   Sat Oct 17 14:43:25 2015 +0200

cobalt/arm64: drop useless test on target architecture

---

 kernel/cobalt/arch/arm64/include/asm/xenomai/uapi/features.h |7 +++
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/kernel/cobalt/arch/arm64/include/asm/xenomai/uapi/features.h 
b/kernel/cobalt/arch/arm64/include/asm/xenomai/uapi/features.h
index 57d0f14..01a12d9 100644
--- a/kernel/cobalt/arch/arm64/include/asm/xenomai/uapi/features.h
+++ b/kernel/cobalt/arch/arm64/include/asm/xenomai/uapi/features.h
@@ -28,10 +28,9 @@
 
 #define XENOMAI_FEAT_MAN (__xn_feat_generic_man_mask)
 
-#ifndef __aarch64__
-#define XNARCH_HAVE_LLMULSHFT1
-#define XNARCH_HAVE_NODIV_LLIMD  1
-#endif
+#undef XNARCH_HAVE_LLMULSHFT
+
+#undef XNARCH_HAVE_NODIV_LLIMD
 
 struct cobalt_featinfo_archdep { /* no arch-specific feature */ };
 


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


[Xenomai-git] Philippe Gerum : cobalt/arm64: use regular context switching code

2015-10-17 Thread git repository hosting
Module: xenomai-3
Branch: arm64
Commit: 44b42fbb03d60630d165954ff6949b3f10dcab96
URL:
http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=44b42fbb03d60630d165954ff6949b3f10dcab96

Author: Philippe Gerum 
Date:   Sat Oct 17 18:07:59 2015 +0200

cobalt/arm64: use regular context switching code

Instead of open coding a copy of the regular context switching code,
use __switch_to() directly, assuming the pipeline properly serializes
switches from all domains.

---

 kernel/cobalt/arch/arm64/thread.c |   66 +++--
 1 file changed, 5 insertions(+), 61 deletions(-)

diff --git a/kernel/cobalt/arch/arm64/thread.c 
b/kernel/cobalt/arch/arm64/thread.c
index 35dbd72..5282b0c 100644
--- a/kernel/cobalt/arch/arm64/thread.c
+++ b/kernel/cobalt/arch/arm64/thread.c
@@ -34,7 +34,7 @@
 #include 
 #include 
 
-#if defined(CONFIG_XENO_ARCH_FPU)
+#ifdef CONFIG_XENO_ARCH_FPU
 
 #define FPSIMD_EN (0x3 << 20)
 
@@ -60,13 +60,6 @@ static void enable_fpsimd(void)
set_cpacr(cpacr);
 }
 
-static void disable_fpsimd(void)
-{
-   unsigned long cpacr = get_cpacr();
-   cpacr &= ~FPSIMD_EN;
-   set_cpacr(cpacr);
-}
-
 int xnarch_fault_fpu_p(struct ipipe_trap_data *d)
 {
return (d->exception == IPIPE_TRAP_FPU_ACC);
@@ -130,55 +123,17 @@ void xnarch_init_shadow_tcb(struct xnthread *thread)
tcb->fpup = &(tcb->core.host_task->thread.fpsimd_state);
xnthread_clear_state(thread, XNFPU);
 }
-#endif /* CONFIG_XENO_ARCH_FPU */
 
-/* Switch support functions */
-static void xnarch_tls_thread_switch(struct task_struct *next)
-{
-   unsigned long tpidr, tpidrro;
-
-   if (!is_compat_task()) {
-   asm("mrs %0, tpidr_el0" : "=r" (tpidr));
-   current->thread.tp_value = tpidr;
-   }
-
-   if (is_compat_thread(task_thread_info(next))) {
-   tpidr = 0;
-   tpidrro = next->thread.tp_value;
-   } else {
-   tpidr = next->thread.tp_value;
-   tpidrro = 0;
-   }
-
-   asm(
-   "   msr tpidr_el0, %0\n"
-   "   msr tpidrro_el0, %1"
-   : : "r" (tpidr), "r" (tpidrro));
-}
-
-#ifdef CONFIG_PID_IN_CONTEXTIDR
-static inline void xnarch_contextidr_thread_switch(struct task_struct *next)
-{
-   asm(
-   "   msr contextidr_el1, %0\n"
-   "   isb"
-   :
-   : "r" (task_pid_nr(next)));
-}
-#else
-static inline void xnarch_contextidr_thread_switch(struct task_struct *next)
-{
-}
-#endif
-/* End switch support functions */
+#endif /* CONFIG_XENO_ARCH_FPU */
 
 void xnarch_switch_to(struct xnthread *out, struct xnthread *in)
 {
struct xnarchtcb *out_tcb = >tcb, *in_tcb = >tcb;
struct mm_struct *prev_mm, *next_mm;
-   struct task_struct *next;
+   struct task_struct *prev, *next;
 
next = in_tcb->core.host_task;
+   prev = out_tcb->core.host_task;
prev_mm = out_tcb->core.active_mm;
 
next_mm = in_tcb->core.mm;
@@ -198,18 +153,7 @@ void xnarch_switch_to(struct xnthread *out, struct 
xnthread *in)
enter_lazy_tlb(prev_mm, next);
}
 
-   xnarch_tls_thread_switch(in_tcb->core.tip->task);
-   xnarch_contextidr_thread_switch(in_tcb->core.tip->task);
-
-   /*
-* Complete any pending TLB or cache maintenance on this CPU in case
-* the thread migrates to a different CPU.
-*/
-   dsb(ish);
-
-   disable_fpsimd();
-
-   cpu_switch_to(out_tcb->core.tip->task, in_tcb->core.tip->task);
+   __switch_to(prev, next);
 }
 
 int xnarch_escalate(void)


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