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

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

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
--- a/kernel/drivers/net/drivers/eepro100.c

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

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

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] Don Mahurin : cobalt/arm64: fix build for mismatched printf type (%lx, u64) on arm64.

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

Author: Don Mahurin 
Date:   Wed Sep  2 13:48:36 2015 -0700

cobalt/arm64: fix build for mismatched printf type (%lx,u64) on arm64.

pc and orig_r0 are u64 on arm64 and 'unsigned long' or arm and other platforms. 
printf referencing these are using %lx. On arm64, long and long long (and u64) 
are 64 bits. Rather than changing printf format, chnage arm64 macros to cast to 
unsigned long.

---

 kernel/cobalt/arch/arm64/include/asm/xenomai/syscall.h |2 +-
 kernel/cobalt/arch/arm64/include/asm/xenomai/thread.h  |2 +-
 kernel/cobalt/posix/syscall.c  |2 +-
 3 files 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 7bf95fb..77c1716 100644
--- a/kernel/cobalt/arch/arm64/include/asm/xenomai/syscall.h
+++ b/kernel/cobalt/arch/arm64/include/asm/xenomai/syscall.h
@@ -45,7 +45,7 @@
 #else /* !CONFIG_OABI_COMPAT */
 #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)
+#define __xn_syscall(__regs)   ((unsigned long)(__xn_reg_sys(__regs) & 
~__COBALT_SYSCALL_BIT))
 
 #define __xn_reg_rval(__regs)  ((__regs)->regs[0])
 #define __xn_reg_arg1(__regs)  ((__regs)->regs[1])
diff --git a/kernel/cobalt/arch/arm64/include/asm/xenomai/thread.h 
b/kernel/cobalt/arch/arm64/include/asm/xenomai/thread.h
index 958f340..a8d7ed4 100644
--- a/kernel/cobalt/arch/arm64/include/asm/xenomai/thread.h
+++ b/kernel/cobalt/arch/arm64/include/asm/xenomai/thread.h
@@ -52,7 +52,7 @@ struct xnarchtcb {
 #define xnarch_fault_regs(d)   ((d)->regs)
 #define xnarch_fault_trap(d)   ((d)->exception)
 #define xnarch_fault_code(d)   (0)
-#define xnarch_fault_pc(d) ((d)->regs->pc - 4) /* XXX ? */
+#define xnarch_fault_pc(d) ((unsigned long)((d)->regs->pc - 4)) /* XXX ? */
 
 #define xnarch_fault_pf_p(d)   ((d)->exception == IPIPE_TRAP_ACCESS)
 #define xnarch_fault_bp_p(d)   ((current->ptrace & PT_PTRACED) &&  \
diff --git a/kernel/cobalt/posix/syscall.c b/kernel/cobalt/posix/syscall.c
index 03cae7d..7f2e1c6 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 <%#llx>\n", __xn_syscall(regs));
+   printk(XENO_WARNING "bad syscall <%#lx>\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] Dmitriy Cherkasov : cobalt/arm64: thread.h & syscall.h: fix register references for arm64

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

Author: Dmitriy Cherkasov 
Date:   Thu May  7 16:41:09 2015 -0700

cobalt/arm64: thread.h & syscall.h: fix register references for arm64

---

 kernel/cobalt/arch/arm64/include/asm/xenomai/syscall.h |8 ++--
 kernel/cobalt/arch/arm64/include/asm/xenomai/thread.h  |2 +-
 2 files changed, 7 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 f0a1090..2fdd890 100644
--- a/kernel/cobalt/arch/arm64/include/asm/xenomai/syscall.h
+++ b/kernel/cobalt/arch/arm64/include/asm/xenomai/syscall.h
@@ -28,12 +28,16 @@
 #include 
 #include 
 
+#ifndef __NR_SYSCALL_BASE
+#define __NR_SYSCALL_BASE 0
+#endif
+
 #ifndef __ARM_NR_ipipe
 /* Legacy pipelines do not define this. */
 #define __ARM_NR_ipipe (__NR_SYSCALL_BASE + XENO_ARM_SYSCALL)
 #endif
 
-#define __xn_reg_sys(__regs)   ((__regs)->ARM_ORIG_r0)
+#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) || \
@@ -49,7 +53,7 @@
 #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_pc(__regs)((__regs)->pc)
 #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/include/asm/xenomai/thread.h 
b/kernel/cobalt/arch/arm64/include/asm/xenomai/thread.h
index 11439a3..958f340 100644
--- a/kernel/cobalt/arch/arm64/include/asm/xenomai/thread.h
+++ b/kernel/cobalt/arch/arm64/include/asm/xenomai/thread.h
@@ -52,7 +52,7 @@ struct xnarchtcb {
 #define xnarch_fault_regs(d)   ((d)->regs)
 #define xnarch_fault_trap(d)   ((d)->exception)
 #define xnarch_fault_code(d)   (0)
-#define xnarch_fault_pc(d) ((d)->regs->ARM_pc - (thumb_mode((d)->regs) ? 2 
: 4)) /* XXX ? */
+#define xnarch_fault_pc(d) ((d)->regs->pc - 4) /* XXX ? */
 
 #define xnarch_fault_pf_p(d)   ((d)->exception == IPIPE_TRAP_ACCESS)
 #define xnarch_fault_bp_p(d)   ((current->ptrace & PT_PTRACED) &&  \


___
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-21 Thread git repository hosting
Module: xenomai-3
Branch: arm64
Commit: 95d673eaf56db69e4a584688f24994b194dea5a5
URL:
http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=95d673eaf56db69e4a584688f24994b194dea5a5

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] Dmitriy Cherkasov : cobalt/arm64: machine.h: Add 64-bit ffnz implementation. This fixes crash when running xddp-echo.

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

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: populate arch/arm64 with a copy of arch/ arm.

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

Author: Dmitriy Cherkasov 
Date:   Wed May  6 15:27:23 2015 -0700

cobalt/arm64: populate arch/arm64 with a copy of arch/arm.

kernel/cobalt/arch/arm -> kernel/cobalt/arch/arm64
lib/cobalt/arch/arm -> lib/cobalt/arch/arm64

---

 configure.ac   |8 +
 kernel/cobalt/arch/arm64/Kconfig   |   40 +++
 kernel/cobalt/arch/arm64/Makefile  |5 +
 .../arch/arm64/include/asm/xenomai/calibration.h   |   59 
 .../arch/arm64/include/asm/xenomai/features.h  |   30 ++
 .../cobalt/arch/arm64/include/asm/xenomai/fptest.h |   52 +++
 .../arch/arm64/include/asm/xenomai/machine.h   |   85 +
 .../arch/arm64/include/asm/xenomai/syscall.h   |   74 
 .../arch/arm64/include/asm/xenomai/syscall32.h |   24 ++
 .../cobalt/arch/arm64/include/asm/xenomai/thread.h |  123 +++
 .../arch/arm64/include/asm/xenomai/uapi/arith.h|  142 
 .../arch/arm64/include/asm/xenomai/uapi/features.h |   43 +++
 .../arch/arm64/include/asm/xenomai/uapi/fptest.h   |   61 
 .../arch/arm64/include/asm/xenomai/uapi/syscall.h  |   34 ++
 .../arch/arm64/include/asm/xenomai/uapi/tsc.h  |   25 ++
 .../arch/arm64/include/asm/xenomai/wrappers.h  |   27 ++
 kernel/cobalt/arch/arm64/machine.c |  119 +++
 kernel/cobalt/arch/arm64/mayday.c  |  146 
 kernel/cobalt/arch/arm64/switch.S  |  167 +
 kernel/cobalt/arch/arm64/syscall.c |   53 +++
 kernel/cobalt/arch/arm64/thread.c  |  355 
 lib/cobalt/arch/Makefile.am|2 +-
 lib/cobalt/arch/arm64/Makefile.am  |   13 +
 lib/cobalt/arch/arm64/features.c   |  102 ++
 lib/cobalt/arch/arm64/include/Makefile.am  |2 +
 lib/cobalt/arch/arm64/include/asm/Makefile.am  |2 +
 .../arch/arm64/include/asm/xenomai/Makefile.am |5 +
 .../arch/arm64/include/asm/xenomai/features.h  |   62 
 .../arch/arm64/include/asm/xenomai/syscall.h   |  138 
 lib/cobalt/arch/arm64/include/asm/xenomai/tsc.h|   48 +++
 30 files changed, 2045 insertions(+), 1 deletion(-)

diff --git a/configure.ac b/configure.ac
index 36d7fb7..c805186 100644
--- a/configure.ac
+++ b/configure.ac
@@ -139,6 +139,10 @@ case "$build_for" in
XENO_TARGET_ARCH=arm
CONFIG_XENO_DEFAULT_PERIOD=100
;;
+ aarch64-*)
+   XENO_TARGET_ARCH=arm64
+   CONFIG_XENO_DEFAULT_PERIOD=100
+   ;;
  x86_64-*|amd64-*)
use_tls=yes
XENO_TARGET_ARCH=x86
@@ -849,6 +853,10 @@ AC_CONFIG_FILES([ \
lib/cobalt/arch/arm/include/Makefile \
lib/cobalt/arch/arm/include/asm/Makefile \
lib/cobalt/arch/arm/include/asm/xenomai/Makefile \
+   lib/cobalt/arch/arm64/Makefile \
+   lib/cobalt/arch/arm64/include/Makefile \
+   lib/cobalt/arch/arm64/include/asm/Makefile \
+   lib/cobalt/arch/arm64/include/asm/xenomai/Makefile \
lib/cobalt/arch/powerpc/Makefile \
lib/cobalt/arch/powerpc/include/Makefile \
lib/cobalt/arch/powerpc/include/asm/Makefile \
diff --git a/kernel/cobalt/arch/arm64/Kconfig b/kernel/cobalt/arch/arm64/Kconfig
new file mode 100644
index 000..dc6485d
--- /dev/null
+++ b/kernel/cobalt/arch/arm64/Kconfig
@@ -0,0 +1,40 @@
+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
+
+config IPIPE_WANT_ACTIVE_MM
+   def_bool y
+
+config XENO_ARCH_WANT_TIP
+   def_bool y
+
+config XENO_ARCH_FPU
+   def_bool VFP
+
+config XENO_ARCH_SYS3264
+def_bool n
+
+config XENO_ARCH_OUTOFLINE_XNLOCK
+   bool
+   default y
diff --git a/kernel/cobalt/arch/arm64/Makefile 
b/kernel/cobalt/arch/arm64/Makefile
new file mode 100644
index 000..f2e4e20
--- /dev/null
+++ b/kernel/cobalt/arch/arm64/Makefile
@@ -0,0 +1,5 @@
+obj-$(CONFIG_XENOMAI) += xenomai.o
+
+xenomai-y := machine.o mayday.o thread.o switch.o syscall.o
+
+ccflags-y := -Iarch/arm/xenomai/include -Iinclude/xenomai
diff --git 

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

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

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 : lib/cobalt/arm64: replace tsc counter

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

Author: Don Mahurin 
Date:   Wed May 13 09:36:25 2015 -0700

lib/cobalt/arm64: replace tsc counter

---

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

diff --git a/lib/cobalt/arch/arm64/include/asm/xenomai/tsc.h 
b/lib/cobalt/arch/arm64/include/asm/xenomai/tsc.h
index 594c4ad..a055427 100644
--- a/lib/cobalt/arch/arm64/include/asm/xenomai/tsc.h
+++ b/lib/cobalt/arch/arm64/include/asm/xenomai/tsc.h
@@ -27,6 +27,8 @@
 
 #include 
 #include 
+#include 
+#include 
 
 /*
  * Putting kuser_tsc_get and kinfo.counter in the same struct results
@@ -39,10 +41,27 @@ struct __xn_full_tscinfo {
 };
 extern struct __xn_full_tscinfo __xn_tscinfo;
 
+static inline uint64_t get_counter(void)
+{
+uint64_t cval;
+
+#ifdef __aarch64__
+   asm volatile("isb; mrs %0, cntvct_el0; isb; " : "=r" (cval) :: 
"memory");
+#else
+   asm volatile("isb; mrrc p15, 1, %Q0, %R0, c14; isb" : "=r" (cval) :: 
"memory");
+#endif
+
+   return cval;
+}
+
 static inline __attribute__((always_inline))
 unsigned long long cobalt_read_tsc(void)
 {
+#ifndef __aarch64__
return __xn_tscinfo.kuser_tsc_get(__xn_tscinfo.kinfo.counter);
+#else
+   return get_counter();
+#endif
 }
 
 #endif /* !_LIB_COBALT_ARM_TSC_H */


___
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-21 Thread git repository hosting
Module: xenomai-3
Branch: arm64
Commit: 7483925da921196d956add45ee11d77f3f831cae
URL:
http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=7483925da921196d956add45ee11d77f3f831cae

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] Dmitriy Cherkasov : cobalt/arm64: prepare-kernel: add arm64 arch

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

Author: Dmitriy Cherkasov 
Date:   Wed May  6 15:27:10 2015 -0700

cobalt/arm64: prepare-kernel: add arm64 arch

---

 scripts/prepare-kernel.sh |3 +++
 1 file changed, 3 insertions(+)

diff --git a/scripts/prepare-kernel.sh b/scripts/prepare-kernel.sh
index 8e960e8..848ec20 100755
--- a/scripts/prepare-kernel.sh
+++ b/scripts/prepare-kernel.sh
@@ -284,6 +284,9 @@ while : ; do
arm)
   linux_arch=arm
   ;;
+   arm64)
+  linux_arch=arm64
+  ;;
sh|sh4)
   linux_arch=sh
   ;;


___
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-21 Thread git repository hosting
Module: xenomai-3
Branch: arm64
Commit: add91aef0fd5d45356ccb3223b3ca4d6230e8068
URL:
http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=add91aef0fd5d45356ccb3223b3ca4d6230e8068

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] Dmitriy Cherkasov : cobalt/arm64: set cache aliasing and disable floating point coprocessor instructions form aarch64 /arm64

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

Author: Dmitriy Cherkasov 
Date:   Thu May  7 16:41:45 2015 -0700

cobalt/arm64: set cache aliasing and disable floating point coprocessor 
instructions form aarch64/arm64

---

 kernel/cobalt/arch/arm64/include/asm/xenomai/machine.h|3 ++-
 .../cobalt/arch/arm64/include/asm/xenomai/uapi/fptest.h   |   13 -
 2 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/kernel/cobalt/arch/arm64/include/asm/xenomai/machine.h 
b/kernel/cobalt/arch/arm64/include/asm/xenomai/machine.h
index cf07a3f..e078564 100644
--- a/kernel/cobalt/arch/arm64/include/asm/xenomai/machine.h
+++ b/kernel/cobalt/arch/arm64/include/asm/xenomai/machine.h
@@ -38,7 +38,8 @@
 #include 
 #include 
 
-#define xnarch_cache_aliasing() cache_is_vivt()
+/* 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)
 {
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 b81d109..65a3e31 100644
--- a/kernel/cobalt/arch/arm64/include/asm/xenomai/uapi/fptest.h
+++ b/kernel/cobalt/arch/arm64/include/asm/xenomai/uapi/fptest.h
@@ -18,10 +18,17 @@
 #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
 
 static inline void fp_regs_set(int features, unsigned int val)
 {
+#if __COBALT_HAVE_VFP != 0
unsigned long long e[16];
unsigned int i;
 
@@ -34,12 +41,15 @@ static inline void fp_regs_set(int features, unsigned int 
val)
__asm__ __volatile__("ldc p11, cr0, [%0],#32*4":
 "=r"(i): "0"([0]): "memory");
}
+#endif
 }
 
 static inline unsigned int fp_regs_check(int features, unsigned int val,
 int (*report)(const char *fmt, ...))
 {
-   unsigned int result = val, i;
+   unsigned int result = val;
+#if __COBALT_HAVE_VFP != 0
+   unsigned int i;
unsigned long long e[16];
 
if (features & __COBALT_HAVE_VFP) {
@@ -54,6 +64,7 @@ static inline unsigned int fp_regs_check(int features, 
unsigned int val,
result = e[i];
}
}
+#endif
 
return result;
 }


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


[Xenomai-git] Don Mahurin : lib/cobalt/arm64: disable kuser tsc get setting for armv8/ aarch64

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

Author: Don Mahurin 
Date:   Fri May  8 10:37:36 2015 -0700

lib/cobalt/arm64: disable kuser tsc get setting for armv8/aarch64

---

 lib/cobalt/arch/arm64/features.c |4 
 1 file changed, 4 insertions(+)

diff --git a/lib/cobalt/arch/arm64/features.c b/lib/cobalt/arch/arm64/features.c
index edabcf2..7c7e76a 100644
--- a/lib/cobalt/arch/arm64/features.c
+++ b/lib/cobalt/arch/arm64/features.c
@@ -59,9 +59,13 @@ void cobalt_check_features(struct cobalt_featinfo *finfo)
 
page_size = sysconf(_SC_PAGESIZE);
 
+#ifndef __aarch64__
__xn_tscinfo.kuser_tsc_get =
(__xn_rdtsc_t *)(0x1004 -
((*(unsigned *)(0x0ffc) + 3) << 5));
+#else
+   __xn_tscinfo.kuser_tsc_get = 0;
+#endif
 
phys_addr = (unsigned long)__xn_tscinfo.kinfo.counter;
 


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


[Xenomai-git] Philippe Gerum : cobalt/arm64: switch to regular system call convention

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

Author: Philippe Gerum 
Date:   Mon Oct 19 15:54:55 2015 +0200

cobalt/arm64: switch to regular system call convention

---

 .../arch/arm64/include/asm/xenomai/syscall.h   |   29 +---
 .../arch/arm64/include/asm/xenomai/uapi/syscall.h  |8 +-
 lib/cobalt/arch/arm64/features.c   |8 -
 .../arch/arm64/include/asm/xenomai/syscall.h   |  180 
 lib/cobalt/arch/arm64/include/asm/xenomai/tsc.h|   19 +--
 5 files changed, 78 insertions(+), 166 deletions(-)

diff --git a/kernel/cobalt/arch/arm64/include/asm/xenomai/syscall.h 
b/kernel/cobalt/arch/arm64/include/asm/xenomai/syscall.h
index 949f287..9fc6522 100644
--- a/kernel/cobalt/arch/arm64/include/asm/xenomai/syscall.h
+++ b/kernel/cobalt/arch/arm64/include/asm/xenomai/syscall.h
@@ -28,31 +28,16 @@
 #include 
 #include 
 
-#ifndef __NR_SYSCALL_BASE
-#define __NR_SYSCALL_BASE 0
-#endif
-
-#ifndef __ARM_NR_ipipe
-/* Legacy pipelines do not define this. */
-#define __ARM_NR_ipipe (__NR_SYSCALL_BASE + XENO_ARM_SYSCALL)
-#endif
-
-#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[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[8] == __ARM_NR_ipipe)
-#endif /* !CONFIG_OABI_COMPAT */
+#define __xn_reg_sys(__regs)   ((unsigned long)(__regs)->syscallno)
+#define __xn_syscall_p(regs)   ((__xn_reg_sys(regs) & __COBALT_SYSCALL_BIT) != 
0)
 #define __xn_syscall(__regs)   ((unsigned long)(__xn_reg_sys(__regs) & 
~__COBALT_SYSCALL_BIT))
 
 #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_arg1(__regs)  ((__regs)->regs[0])
+#define __xn_reg_arg2(__regs)  ((__regs)->regs[1])
+#define __xn_reg_arg3(__regs)  ((__regs)->regs[2])
+#define __xn_reg_arg4(__regs)  ((__regs)->regs[3])
+#define __xn_reg_arg5(__regs)  ((__regs)->regs[4])
 #define __xn_reg_pc(__regs)((__regs)->pc)
 #define __xn_reg_sp(__regs)((__regs)->sp)
 
diff --git a/kernel/cobalt/arch/arm64/include/asm/xenomai/uapi/syscall.h 
b/kernel/cobalt/arch/arm64/include/asm/xenomai/uapi/syscall.h
index 60dabd5..5b319d6 100644
--- a/kernel/cobalt/arch/arm64/include/asm/xenomai/uapi/syscall.h
+++ b/kernel/cobalt/arch/arm64/include/asm/xenomai/uapi/syscall.h
@@ -23,12 +23,6 @@
 
 #define __xn_syscode(__nr) (__COBALT_SYSCALL_BIT | (__nr))
 
-#define XENO_ARM_SYSCALL0x000F0042 /* carefully chosen... */
-
-#define XENOMAI_SYSARCH_ATOMIC_ADD_RETURN  0
-#define XENOMAI_SYSARCH_ATOMIC_SET_MASK1
-#define XENOMAI_SYSARCH_ATOMIC_CLEAR_MASK  2
-#define XENOMAI_SYSARCH_XCHG   3
-#define XENOMAI_SYSARCH_TSCINFO 4
+#define XENOMAI_SYSARCH_TSCINFO0
 
 #endif /* !_COBALT_ARM64_ASM_UAPI_SYSCALL_H */
diff --git a/lib/cobalt/arch/arm64/features.c b/lib/cobalt/arch/arm64/features.c
index f5253a6..254c8ae 100644
--- a/lib/cobalt/arch/arm64/features.c
+++ b/lib/cobalt/arch/arm64/features.c
@@ -59,14 +59,6 @@ void cobalt_check_features(struct cobalt_featinfo *finfo)
 
page_size = sysconf(_SC_PAGESIZE);
 
-#ifndef __aarch64__
-   __xn_tscinfo.kuser_tsc_get =
-   (__xn_rdtsc_t *)(0x1004 -
-   ((*(unsigned *)(0x0ffc) + 3) << 5));
-#else
-   __xn_tscinfo.kuser_tsc_get = 0;
-#endif
-
phys_addr = (unsigned long)__xn_tscinfo.kinfo.counter;
 
addr = __STD(mmap(NULL, page_size, PROT_READ, MAP_SHARED,
diff --git a/lib/cobalt/arch/arm64/include/asm/xenomai/syscall.h 
b/lib/cobalt/arch/arm64/include/asm/xenomai/syscall.h
index 8e7ad61..d2dfda6 100644
--- a/lib/cobalt/arch/arm64/include/asm/xenomai/syscall.h
+++ b/lib/cobalt/arch/arm64/include/asm/xenomai/syscall.h
@@ -1,8 +1,5 @@
 /*
- * Copyright (C) 2001,2002,2003,2004 Philippe Gerum .
- *
- * ARM port
- *   Copyright (C) 2005 Stelian Pop
+ * 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
@@ -25,119 +22,76 @@
 #include 
 #include 
 
-/*
- * Some of the following macros have been adapted from Linux's
- * implementation of the syscall mechanism in :
- */
-
-#define LOADARGS_0(syscode, dummy...)  \
-   __a0 = (unsigned long) (syscode)
-#define 

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

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

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] Don Mahurin : cobalt/arm64: fix warning: expects argument of type ' long unsigned int', but argument has type 'u64'

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

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] Philippe Gerum : cobalt/arm64: drop aarch32 bits from feature set

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

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] Gilles Chanteperdrix : testsuite/smokey: tsc: add tsc test

2015-10-21 Thread git repository hosting
Module: xenomai-3
Branch: arm64
Commit: 0f3f73fdeb08e1e9e71fe4dd359d8722182b6253
URL:
http://git.xenomai.org/?p=xenomai-3.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++)
+   if 

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

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

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] Dmitriy Cherkasov : cobalt/arm64: update register struct usage for arm64

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

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] Dmitriy Cherkasov : cobalt/arm64: thread: use kernel switch_to

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

Author: Dmitriy Cherkasov 
Date:   Fri May 15 23:26:18 2015 -0700

cobalt/arm64: thread: use kernel switch_to

---

 kernel/cobalt/arch/arm64/Makefile |2 +-
 kernel/cobalt/arch/arm64/switch.S |  167 -
 kernel/cobalt/arch/arm64/thread.c |5 +-
 3 files changed, 2 insertions(+), 172 deletions(-)

diff --git a/kernel/cobalt/arch/arm64/Makefile 
b/kernel/cobalt/arch/arm64/Makefile
index a135f99..af0a0e8 100644
--- a/kernel/cobalt/arch/arm64/Makefile
+++ b/kernel/cobalt/arch/arm64/Makefile
@@ -1,5 +1,5 @@
 obj-$(CONFIG_XENOMAI) += xenomai.o
 
-xenomai-y := machine.o mayday.o thread.o switch.o syscall.o
+xenomai-y := machine.o mayday.o thread.o syscall.o
 
 ccflags-y := -Iarch/arm64/xenomai/include -Iinclude/xenomai
diff --git a/kernel/cobalt/arch/arm64/switch.S 
b/kernel/cobalt/arch/arm64/switch.S
deleted file mode 100644
index 505fd5a..000
--- a/kernel/cobalt/arch/arm64/switch.S
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- * Copyright (C) 2005 Stelian Pop.
- *
- * This program 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, Inc., 675 Mass Ave, Cambridge MA 02139,
- * USA; either version 2 of the License, or (at your option) any later
- * version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-#include 
-#include 
-#include 
-#include 
-#include 
-#ifdef CONFIG_VFP
-#include 
-#endif
-
-   .macro fpu_switch tmp
-#ifdef CONFIG_VFP
-#if __LINUX_ARM_ARCH__ <= 6
-#ifdef CONFIG_JUMP_LABEL
-9998:  nop
-   .pushsection __jump_table, "aw"
-   .word   9998b, f, __xeno_vfp_key
-   .popsection
-#else
-   ldr \tmp, =elf_hwcap
-   ldr \tmp, [\tmp]
-   tst \tmp, #HWCAP_VFP
-   beq f
-#endif
-#endif
-   @ Always disable VFP so we can lazily save/restore the old
-   @ state. This occurs in the context of the previous thread.
-   VFPFMRX \tmp, FPEXC
-   bic \tmp, \tmp, #FPEXC_EN
-   VFPFMXR FPEXC, \tmp
-#if __LINUX_ARM_ARCH__ <= 6
-:
-#endif
-#endif
-   .endm
-
-   .text
-
-#if defined(CONFIG_VFP) && defined(CONFIG_XENO_ARCH_FPU)
-/* Copied from vfp_save_state in arch/arm/vfp/vfphw.S
- * r0 = pointer to union vfp_state, r1 = fpexc
- */
-ENTRY(__asm_vfp_save)
-   VFPFSTMIA   r0, r2  @ save the working registers
-   VFPFMRX r2, FPSCR   @ current status
-   tst r1, #FPEXC_EX   @ is there additional state to save?
-   beq 1f
-   VFPFMRX r3, FPINST  @ FPINST (only if FPEXC.EX is set)
-   tst r1, #FPEXC_FP2V @ is there an FPINST2 to read?
-   beq 1f
-   VFPFMRX r12, FPINST2@ FPINST2 if needed (and present)
-1:
-   stmia   r0, {r1, r2, r3, r12}   @ save FPEXC, FPSCR, FPINST, 
FPINST2
-   mov pc, lr
-ENDPROC(__asm_vfp_save)
-
-/* Copied from no_old_VFP_process in arch/arm/vfp/vfphw.S
- * r0 = pointer to union vfp_state
- * r1 = current cpu
- */
-ENTRY(__asm_vfp_load)
-#ifdef CONFIG_SMP
-   str r1, [r0, #VFP_CPU]
-#endif
-   VFPFLDMIA   r0, r2  @ reload the working registers while
-   @ FPEXC is in a safe state
-   ldmia   r0, {r1, r2, r3, r12}   @ load FPEXC, FPSCR, FPINST, 
FPINST2
-   tst r1, #FPEXC_EX   @ is there additional state to restore?
-   beq 1f
-   VFPFMXR FPINST, r3  @ restore FPINST (only if FPEXC.EX is 
set)
-   tst r1, #FPEXC_FP2V @ is there an FPINST2 to write?
-   beq 1f
-   VFPFMXR FPINST2, r12@ FPINST2 if needed (and present)
-1:
-   VFPFMXR FPSCR, r2   @ restore status
-   mov pc, lr
-ENDPROC(__asm_vfp_load)
-#endif
-
-#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 11, 0)
-   .macro load_tls base, tp, tpuser
-   ldr \tp, [\base, #TI_TP_VALUE]
-   .endm
-
-   .macro switch_tls base, tp, tpuser, tmp1, tmp2
-   set_tls \tp, \tmp1, \tmp2
-   .endm
-#else
-   .macro load_tls base, tp, tpuser
-   ldr \tp, [\base, #TI_TP_VALUE]
-   ldr \tpuser, [\base, #TI_TP_VALUE + 4]
-   .endm
-#endif
-
-/*
-/*
- * Switch context routine.
- *
- * Registers 

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

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

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] Gilles Chanteperdrix : cobalt/rtdm: use distinct minor for each protocol device

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

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

cobalt/rtdm: use distinct minor for each protocol device

device_destroy() selects the device to destroy based on major and
minor numbers, we can't use a single fixed null minor for all protocol
devices.

---

 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 : cobalt/arm64: leave mm tracking to the pipeline

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

Author: Philippe Gerum 
Date:   Thu Sep 17 15:08:34 2015 +0200

cobalt/arm64: leave mm tracking to the pipeline

---

 kernel/cobalt/arch/arm64/Kconfig |3 ---
 1 file changed, 3 deletions(-)

diff --git a/kernel/cobalt/arch/arm64/Kconfig b/kernel/cobalt/arch/arm64/Kconfig
index 927c647..dd5a8c6 100644
--- a/kernel/cobalt/arch/arm64/Kconfig
+++ b/kernel/cobalt/arch/arm64/Kconfig
@@ -4,9 +4,6 @@ source "drivers/xenomai/Kconfig"
 config XENO_ARCH_UNLOCKED_SWITCH
def_bool IPIPE_WANT_PREEMPTIBLE_SWITCH
 
-config IPIPE_WANT_ACTIVE_MM
-   def_bool y
-
 config XENO_ARCH_WANT_TIP
def_bool y
 


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


[Xenomai-git] Dmitriy Cherkasov : cobalt/arm64: fix fpu exception names

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

Author: Dmitriy Cherkasov 
Date:   Mon Sep 28 16:13:45 2015 -0700

cobalt/arm64: fix fpu exception names

---

 kernel/cobalt/arch/arm64/machine.c |4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/kernel/cobalt/arch/arm64/machine.c 
b/kernel/cobalt/arch/arm64/machine.c
index f48d4a8..ddf65a8 100644
--- a/kernel/cobalt/arch/arm64/machine.c
+++ b/kernel/cobalt/arch/arm64/machine.c
@@ -99,8 +99,8 @@ static const char *const fault_labels[] = {
[IPIPE_TRAP_DABT] = "Generic data abort",
[IPIPE_TRAP_UNKNOWN] = "Unknown exception",
[IPIPE_TRAP_BREAK] = "Instruction breakpoint",
-   [IPIPE_TRAP_FPU] = "Floating point exception",
-   [IPIPE_TRAP_VFP] = "VFP Floating point exception",
+   [IPIPE_TRAP_FPU_ACC] = "Floating point access",
+   [IPIPE_TRAP_FPU_EXC] = "Floating point exception",
[IPIPE_TRAP_UNDEFINSTR] = "Undefined instruction",
 #ifdef IPIPE_TRAP_ALIGNMENT
[IPIPE_TRAP_ALIGNMENT] = "Unaligned access exception",


___
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-21 Thread git repository hosting
Module: xenomai-3
Branch: arm64
Commit: 36e83ae15c4ac68179a315a089afa3cd5cefc73d
URL:
http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=36e83ae15c4ac68179a315a089afa3cd5cefc73d

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] Philippe Gerum : cobalt/arm64: use regular context switching code

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

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


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

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

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] Dmitriy Cherkasov : cobalt/arm64: FPU code cleanup

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

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] Gilles Chanteperdrix : testsuite/dohell: sync after dd to disk

2015-10-21 Thread git repository hosting
Module: xenomai-3
Branch: arm64
Commit: 1a15ac6113a0fe930582e7225ba4074db2dc386e
URL:
http://git.xenomai.org/?p=xenomai-3.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] Dmitriy Cherkasov : cobalt/arm64: machine.h: Add 64-bit ffnz implementation. This fixes crash when running xddp-echo.

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

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] Don Mahurin : lib/cobalt/arm64: add __LINUX_ARM_ARCH__ form armv8/aarch64

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

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] Don Mahurin : cobalt/arm64: fix warning: expects argument of type ' long unsigned int', but argument has type 'u64'

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

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] Dmitriy Cherkasov : cobalt/arm64: remove code for unrelated arm architecture

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

Author: Dmitriy Cherkasov 
Date:   Thu May  7 13:56:22 2015 -0700

cobalt/arm64: remove code for unrelated arm architecture

---

 .../arch/arm64/include/asm/xenomai/machine.h   |   33 
 .../arch/arm64/include/asm/xenomai/uapi/arith.h|4 +--
 2 files changed, 2 insertions(+), 35 deletions(-)

diff --git a/kernel/cobalt/arch/arm64/include/asm/xenomai/machine.h 
b/kernel/cobalt/arch/arm64/include/asm/xenomai/machine.h
index d6e965f..cf07a3f 100644
--- a/kernel/cobalt/arch/arm64/include/asm/xenomai/machine.h
+++ b/kernel/cobalt/arch/arm64/include/asm/xenomai/machine.h
@@ -32,53 +32,20 @@
 #include 
 #include 
 #include 
-#include 
 #include 
 #include 
 #include 
 #include 
-#include 
 #include 
 
 #define xnarch_cache_aliasing() cache_is_vivt()
 
-#if __LINUX_ARM_ARCH__ < 5
-static inline __attribute_const__ unsigned long ffnz(unsigned long x)
-{
-   int r = 0;
-
-   if (!x)
-   return 0;
-   if (!(x & 0x)) {
-   x >>= 16;
-   r += 16;
-   }
-   if (!(x & 0xff)) {
-   x >>= 8;
-   r += 8;
-   }
-   if (!(x & 0xf)) {
-   x >>= 4;
-   r += 4;
-   }
-   if (!(x & 3)) {
-   x >>= 2;
-   r += 2;
-   }
-   if (!(x & 1)) {
-   x >>= 1;
-   r += 1;
-   }
-   return r;
-}
-#else
 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;
 }
-#endif
 
 #include 
 
diff --git a/kernel/cobalt/arch/arm64/include/asm/xenomai/uapi/arith.h 
b/kernel/cobalt/arch/arm64/include/asm/xenomai/uapi/arith.h
index cf897b4..165cd9d 100644
--- a/kernel/cobalt/arch/arm64/include/asm/xenomai/uapi/arith.h
+++ b/kernel/cobalt/arch/arm64/include/asm/xenomai/uapi/arith.h
@@ -20,7 +20,7 @@
 
 #include 
 
-#if __LINUX_ARM_ARCH__ >= 4 && (!defined(CONFIG_THUMB2_KERNEL) || 
!defined(CONFIG_FTRACE))
+#if !defined(CONFIG_FTRACE)
 static inline __attribute__((__const__)) unsigned long long
 mach_arm_nodiv_ullimd(const unsigned long long op,
   const unsigned long long frac,
@@ -49,7 +49,7 @@ mach_arm_nodiv_llimd(const long long op,
 
 #include 
 
-#if __LINUX_ARM_ARCH__ >= 4 && (!defined(CONFIG_THUMB2_KERNEL) || 
!defined(CONFIG_FTRACE))
+#if !defined(CONFIG_FTRACE)
 #define mach_arm_nodiv_ullimd_str  \
"umull %[tl], %[rl], %[opl], %[fracl]\n\t"  \
"umull %[rm], %[rh], %[oph], %[frach]\n\t"  \


___
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-21 Thread git repository hosting
Module: xenomai-3
Branch: arm64
Commit: 02e4fab4215698e28157c0d4145e524acf1b60d8
URL:
http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=02e4fab4215698e28157c0d4145e524acf1b60d8

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: thread: use kernel switch_to

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

Author: Dmitriy Cherkasov 
Date:   Fri May 15 23:26:18 2015 -0700

cobalt/arm64: thread: use kernel switch_to

---

 kernel/cobalt/arch/arm64/Makefile |2 +-
 kernel/cobalt/arch/arm64/switch.S |  167 -
 kernel/cobalt/arch/arm64/thread.c |5 +-
 3 files changed, 2 insertions(+), 172 deletions(-)

diff --git a/kernel/cobalt/arch/arm64/Makefile 
b/kernel/cobalt/arch/arm64/Makefile
index a135f99..af0a0e8 100644
--- a/kernel/cobalt/arch/arm64/Makefile
+++ b/kernel/cobalt/arch/arm64/Makefile
@@ -1,5 +1,5 @@
 obj-$(CONFIG_XENOMAI) += xenomai.o
 
-xenomai-y := machine.o mayday.o thread.o switch.o syscall.o
+xenomai-y := machine.o mayday.o thread.o syscall.o
 
 ccflags-y := -Iarch/arm64/xenomai/include -Iinclude/xenomai
diff --git a/kernel/cobalt/arch/arm64/switch.S 
b/kernel/cobalt/arch/arm64/switch.S
deleted file mode 100644
index 505fd5a..000
--- a/kernel/cobalt/arch/arm64/switch.S
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- * Copyright (C) 2005 Stelian Pop.
- *
- * This program 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, Inc., 675 Mass Ave, Cambridge MA 02139,
- * USA; either version 2 of the License, or (at your option) any later
- * version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-#include 
-#include 
-#include 
-#include 
-#include 
-#ifdef CONFIG_VFP
-#include 
-#endif
-
-   .macro fpu_switch tmp
-#ifdef CONFIG_VFP
-#if __LINUX_ARM_ARCH__ <= 6
-#ifdef CONFIG_JUMP_LABEL
-9998:  nop
-   .pushsection __jump_table, "aw"
-   .word   9998b, f, __xeno_vfp_key
-   .popsection
-#else
-   ldr \tmp, =elf_hwcap
-   ldr \tmp, [\tmp]
-   tst \tmp, #HWCAP_VFP
-   beq f
-#endif
-#endif
-   @ Always disable VFP so we can lazily save/restore the old
-   @ state. This occurs in the context of the previous thread.
-   VFPFMRX \tmp, FPEXC
-   bic \tmp, \tmp, #FPEXC_EN
-   VFPFMXR FPEXC, \tmp
-#if __LINUX_ARM_ARCH__ <= 6
-:
-#endif
-#endif
-   .endm
-
-   .text
-
-#if defined(CONFIG_VFP) && defined(CONFIG_XENO_ARCH_FPU)
-/* Copied from vfp_save_state in arch/arm/vfp/vfphw.S
- * r0 = pointer to union vfp_state, r1 = fpexc
- */
-ENTRY(__asm_vfp_save)
-   VFPFSTMIA   r0, r2  @ save the working registers
-   VFPFMRX r2, FPSCR   @ current status
-   tst r1, #FPEXC_EX   @ is there additional state to save?
-   beq 1f
-   VFPFMRX r3, FPINST  @ FPINST (only if FPEXC.EX is set)
-   tst r1, #FPEXC_FP2V @ is there an FPINST2 to read?
-   beq 1f
-   VFPFMRX r12, FPINST2@ FPINST2 if needed (and present)
-1:
-   stmia   r0, {r1, r2, r3, r12}   @ save FPEXC, FPSCR, FPINST, 
FPINST2
-   mov pc, lr
-ENDPROC(__asm_vfp_save)
-
-/* Copied from no_old_VFP_process in arch/arm/vfp/vfphw.S
- * r0 = pointer to union vfp_state
- * r1 = current cpu
- */
-ENTRY(__asm_vfp_load)
-#ifdef CONFIG_SMP
-   str r1, [r0, #VFP_CPU]
-#endif
-   VFPFLDMIA   r0, r2  @ reload the working registers while
-   @ FPEXC is in a safe state
-   ldmia   r0, {r1, r2, r3, r12}   @ load FPEXC, FPSCR, FPINST, 
FPINST2
-   tst r1, #FPEXC_EX   @ is there additional state to restore?
-   beq 1f
-   VFPFMXR FPINST, r3  @ restore FPINST (only if FPEXC.EX is 
set)
-   tst r1, #FPEXC_FP2V @ is there an FPINST2 to write?
-   beq 1f
-   VFPFMXR FPINST2, r12@ FPINST2 if needed (and present)
-1:
-   VFPFMXR FPSCR, r2   @ restore status
-   mov pc, lr
-ENDPROC(__asm_vfp_load)
-#endif
-
-#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 11, 0)
-   .macro load_tls base, tp, tpuser
-   ldr \tp, [\base, #TI_TP_VALUE]
-   .endm
-
-   .macro switch_tls base, tp, tpuser, tmp1, tmp2
-   set_tls \tp, \tmp1, \tmp2
-   .endm
-#else
-   .macro load_tls base, tp, tpuser
-   ldr \tp, [\base, #TI_TP_VALUE]
-   ldr \tpuser, [\base, #TI_TP_VALUE + 4]
-   .endm
-#endif
-
-/*
-/*
- * Switch context routine.
- *
- * Registers 

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

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

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] Don Mahurin : cobalt/arm64: fix build for mismatched printf type (%lx, u64) on arm64.

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

Author: Don Mahurin 
Date:   Wed Sep  2 13:48:36 2015 -0700

cobalt/arm64: fix build for mismatched printf type (%lx,u64) on arm64.

pc and orig_r0 are u64 on arm64 and 'unsigned long' or arm and other platforms. 
printf referencing these are using %lx. On arm64, long and long long (and u64) 
are 64 bits. Rather than changing printf format, chnage arm64 macros to cast to 
unsigned long.

---

 kernel/cobalt/arch/arm64/include/asm/xenomai/syscall.h |2 +-
 kernel/cobalt/arch/arm64/include/asm/xenomai/thread.h  |2 +-
 kernel/cobalt/posix/syscall.c  |2 +-
 3 files 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 7bf95fb..77c1716 100644
--- a/kernel/cobalt/arch/arm64/include/asm/xenomai/syscall.h
+++ b/kernel/cobalt/arch/arm64/include/asm/xenomai/syscall.h
@@ -45,7 +45,7 @@
 #else /* !CONFIG_OABI_COMPAT */
 #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)
+#define __xn_syscall(__regs)   ((unsigned long)(__xn_reg_sys(__regs) & 
~__COBALT_SYSCALL_BIT))
 
 #define __xn_reg_rval(__regs)  ((__regs)->regs[0])
 #define __xn_reg_arg1(__regs)  ((__regs)->regs[1])
diff --git a/kernel/cobalt/arch/arm64/include/asm/xenomai/thread.h 
b/kernel/cobalt/arch/arm64/include/asm/xenomai/thread.h
index 958f340..a8d7ed4 100644
--- a/kernel/cobalt/arch/arm64/include/asm/xenomai/thread.h
+++ b/kernel/cobalt/arch/arm64/include/asm/xenomai/thread.h
@@ -52,7 +52,7 @@ struct xnarchtcb {
 #define xnarch_fault_regs(d)   ((d)->regs)
 #define xnarch_fault_trap(d)   ((d)->exception)
 #define xnarch_fault_code(d)   (0)
-#define xnarch_fault_pc(d) ((d)->regs->pc - 4) /* XXX ? */
+#define xnarch_fault_pc(d) ((unsigned long)((d)->regs->pc - 4)) /* XXX ? */
 
 #define xnarch_fault_pf_p(d)   ((d)->exception == IPIPE_TRAP_ACCESS)
 #define xnarch_fault_bp_p(d)   ((current->ptrace & PT_PTRACED) &&  \
diff --git a/kernel/cobalt/posix/syscall.c b/kernel/cobalt/posix/syscall.c
index 03cae7d..7f2e1c6 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 <%#llx>\n", __xn_syscall(regs));
+   printk(XENO_WARNING "bad syscall <%#lx>\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] Philippe Gerum : cobalt/arm64: drop useless test on target architecture

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

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] Don Mahurin : lib/cobalt/arm64: implement syscall for armv8/aarch64

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

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] Philippe Gerum : cobalt/arm64: fix inclusion guards

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

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: switch to regular system call convention

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

Author: Philippe Gerum 
Date:   Mon Oct 19 15:54:55 2015 +0200

cobalt/arm64: switch to regular system call convention

---

 .../arch/arm64/include/asm/xenomai/syscall.h   |   29 +---
 .../arch/arm64/include/asm/xenomai/uapi/syscall.h  |8 +-
 lib/cobalt/arch/arm64/features.c   |8 -
 .../arch/arm64/include/asm/xenomai/syscall.h   |  180 
 lib/cobalt/arch/arm64/include/asm/xenomai/tsc.h|   19 +--
 5 files changed, 78 insertions(+), 166 deletions(-)

diff --git a/kernel/cobalt/arch/arm64/include/asm/xenomai/syscall.h 
b/kernel/cobalt/arch/arm64/include/asm/xenomai/syscall.h
index 949f287..9fc6522 100644
--- a/kernel/cobalt/arch/arm64/include/asm/xenomai/syscall.h
+++ b/kernel/cobalt/arch/arm64/include/asm/xenomai/syscall.h
@@ -28,31 +28,16 @@
 #include 
 #include 
 
-#ifndef __NR_SYSCALL_BASE
-#define __NR_SYSCALL_BASE 0
-#endif
-
-#ifndef __ARM_NR_ipipe
-/* Legacy pipelines do not define this. */
-#define __ARM_NR_ipipe (__NR_SYSCALL_BASE + XENO_ARM_SYSCALL)
-#endif
-
-#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[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[8] == __ARM_NR_ipipe)
-#endif /* !CONFIG_OABI_COMPAT */
+#define __xn_reg_sys(__regs)   ((unsigned long)(__regs)->syscallno)
+#define __xn_syscall_p(regs)   ((__xn_reg_sys(regs) & __COBALT_SYSCALL_BIT) != 
0)
 #define __xn_syscall(__regs)   ((unsigned long)(__xn_reg_sys(__regs) & 
~__COBALT_SYSCALL_BIT))
 
 #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_arg1(__regs)  ((__regs)->regs[0])
+#define __xn_reg_arg2(__regs)  ((__regs)->regs[1])
+#define __xn_reg_arg3(__regs)  ((__regs)->regs[2])
+#define __xn_reg_arg4(__regs)  ((__regs)->regs[3])
+#define __xn_reg_arg5(__regs)  ((__regs)->regs[4])
 #define __xn_reg_pc(__regs)((__regs)->pc)
 #define __xn_reg_sp(__regs)((__regs)->sp)
 
diff --git a/kernel/cobalt/arch/arm64/include/asm/xenomai/uapi/syscall.h 
b/kernel/cobalt/arch/arm64/include/asm/xenomai/uapi/syscall.h
index 60dabd5..5b319d6 100644
--- a/kernel/cobalt/arch/arm64/include/asm/xenomai/uapi/syscall.h
+++ b/kernel/cobalt/arch/arm64/include/asm/xenomai/uapi/syscall.h
@@ -23,12 +23,6 @@
 
 #define __xn_syscode(__nr) (__COBALT_SYSCALL_BIT | (__nr))
 
-#define XENO_ARM_SYSCALL0x000F0042 /* carefully chosen... */
-
-#define XENOMAI_SYSARCH_ATOMIC_ADD_RETURN  0
-#define XENOMAI_SYSARCH_ATOMIC_SET_MASK1
-#define XENOMAI_SYSARCH_ATOMIC_CLEAR_MASK  2
-#define XENOMAI_SYSARCH_XCHG   3
-#define XENOMAI_SYSARCH_TSCINFO 4
+#define XENOMAI_SYSARCH_TSCINFO0
 
 #endif /* !_COBALT_ARM64_ASM_UAPI_SYSCALL_H */
diff --git a/lib/cobalt/arch/arm64/features.c b/lib/cobalt/arch/arm64/features.c
index f5253a6..254c8ae 100644
--- a/lib/cobalt/arch/arm64/features.c
+++ b/lib/cobalt/arch/arm64/features.c
@@ -59,14 +59,6 @@ void cobalt_check_features(struct cobalt_featinfo *finfo)
 
page_size = sysconf(_SC_PAGESIZE);
 
-#ifndef __aarch64__
-   __xn_tscinfo.kuser_tsc_get =
-   (__xn_rdtsc_t *)(0x1004 -
-   ((*(unsigned *)(0x0ffc) + 3) << 5));
-#else
-   __xn_tscinfo.kuser_tsc_get = 0;
-#endif
-
phys_addr = (unsigned long)__xn_tscinfo.kinfo.counter;
 
addr = __STD(mmap(NULL, page_size, PROT_READ, MAP_SHARED,
diff --git a/lib/cobalt/arch/arm64/include/asm/xenomai/syscall.h 
b/lib/cobalt/arch/arm64/include/asm/xenomai/syscall.h
index 8e7ad61..d2dfda6 100644
--- a/lib/cobalt/arch/arm64/include/asm/xenomai/syscall.h
+++ b/lib/cobalt/arch/arm64/include/asm/xenomai/syscall.h
@@ -1,8 +1,5 @@
 /*
- * Copyright (C) 2001,2002,2003,2004 Philippe Gerum .
- *
- * ARM port
- *   Copyright (C) 2005 Stelian Pop
+ * 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
@@ -25,119 +22,76 @@
 #include 
 #include 
 
-/*
- * Some of the following macros have been adapted from Linux's
- * implementation of the syscall mechanism in :
- */
-
-#define LOADARGS_0(syscode, dummy...)  \
-   __a0 = (unsigned long) (syscode)
-#define 

[Xenomai-git] Dmitriy Cherkasov : cobalt/arm64: populate arch/arm64 with a copy of arch/ arm.

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

Author: Dmitriy Cherkasov 
Date:   Wed May  6 15:27:23 2015 -0700

cobalt/arm64: populate arch/arm64 with a copy of arch/arm.

kernel/cobalt/arch/arm -> kernel/cobalt/arch/arm64
lib/cobalt/arch/arm -> lib/cobalt/arch/arm64

---

 configure.ac   |8 +
 kernel/cobalt/arch/arm64/Kconfig   |   40 +++
 kernel/cobalt/arch/arm64/Makefile  |5 +
 .../arch/arm64/include/asm/xenomai/calibration.h   |   59 
 .../arch/arm64/include/asm/xenomai/features.h  |   30 ++
 .../cobalt/arch/arm64/include/asm/xenomai/fptest.h |   52 +++
 .../arch/arm64/include/asm/xenomai/machine.h   |   85 +
 .../arch/arm64/include/asm/xenomai/syscall.h   |   74 
 .../arch/arm64/include/asm/xenomai/syscall32.h |   24 ++
 .../cobalt/arch/arm64/include/asm/xenomai/thread.h |  123 +++
 .../arch/arm64/include/asm/xenomai/uapi/arith.h|  142 
 .../arch/arm64/include/asm/xenomai/uapi/features.h |   43 +++
 .../arch/arm64/include/asm/xenomai/uapi/fptest.h   |   61 
 .../arch/arm64/include/asm/xenomai/uapi/syscall.h  |   34 ++
 .../arch/arm64/include/asm/xenomai/uapi/tsc.h  |   25 ++
 .../arch/arm64/include/asm/xenomai/wrappers.h  |   27 ++
 kernel/cobalt/arch/arm64/machine.c |  119 +++
 kernel/cobalt/arch/arm64/mayday.c  |  146 
 kernel/cobalt/arch/arm64/switch.S  |  167 +
 kernel/cobalt/arch/arm64/syscall.c |   53 +++
 kernel/cobalt/arch/arm64/thread.c  |  355 
 lib/cobalt/arch/Makefile.am|2 +-
 lib/cobalt/arch/arm64/Makefile.am  |   13 +
 lib/cobalt/arch/arm64/features.c   |  102 ++
 lib/cobalt/arch/arm64/include/Makefile.am  |2 +
 lib/cobalt/arch/arm64/include/asm/Makefile.am  |2 +
 .../arch/arm64/include/asm/xenomai/Makefile.am |5 +
 .../arch/arm64/include/asm/xenomai/features.h  |   62 
 .../arch/arm64/include/asm/xenomai/syscall.h   |  138 
 lib/cobalt/arch/arm64/include/asm/xenomai/tsc.h|   48 +++
 30 files changed, 2045 insertions(+), 1 deletion(-)

diff --git a/configure.ac b/configure.ac
index 36d7fb7..c805186 100644
--- a/configure.ac
+++ b/configure.ac
@@ -139,6 +139,10 @@ case "$build_for" in
XENO_TARGET_ARCH=arm
CONFIG_XENO_DEFAULT_PERIOD=100
;;
+ aarch64-*)
+   XENO_TARGET_ARCH=arm64
+   CONFIG_XENO_DEFAULT_PERIOD=100
+   ;;
  x86_64-*|amd64-*)
use_tls=yes
XENO_TARGET_ARCH=x86
@@ -849,6 +853,10 @@ AC_CONFIG_FILES([ \
lib/cobalt/arch/arm/include/Makefile \
lib/cobalt/arch/arm/include/asm/Makefile \
lib/cobalt/arch/arm/include/asm/xenomai/Makefile \
+   lib/cobalt/arch/arm64/Makefile \
+   lib/cobalt/arch/arm64/include/Makefile \
+   lib/cobalt/arch/arm64/include/asm/Makefile \
+   lib/cobalt/arch/arm64/include/asm/xenomai/Makefile \
lib/cobalt/arch/powerpc/Makefile \
lib/cobalt/arch/powerpc/include/Makefile \
lib/cobalt/arch/powerpc/include/asm/Makefile \
diff --git a/kernel/cobalt/arch/arm64/Kconfig b/kernel/cobalt/arch/arm64/Kconfig
new file mode 100644
index 000..dc6485d
--- /dev/null
+++ b/kernel/cobalt/arch/arm64/Kconfig
@@ -0,0 +1,40 @@
+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
+
+config IPIPE_WANT_ACTIVE_MM
+   def_bool y
+
+config XENO_ARCH_WANT_TIP
+   def_bool y
+
+config XENO_ARCH_FPU
+   def_bool VFP
+
+config XENO_ARCH_SYS3264
+def_bool n
+
+config XENO_ARCH_OUTOFLINE_XNLOCK
+   bool
+   default y
diff --git a/kernel/cobalt/arch/arm64/Makefile 
b/kernel/cobalt/arch/arm64/Makefile
new file mode 100644
index 000..f2e4e20
--- /dev/null
+++ b/kernel/cobalt/arch/arm64/Makefile
@@ -0,0 +1,5 @@
+obj-$(CONFIG_XENOMAI) += xenomai.o
+
+xenomai-y := machine.o mayday.o thread.o switch.o syscall.o
+
+ccflags-y := -Iarch/arm/xenomai/include -Iinclude/xenomai
diff --git 

[Xenomai-git] Philippe Gerum : cobalt/arm64: leave mm tracking to the pipeline

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

Author: Philippe Gerum 
Date:   Thu Sep 17 15:08:34 2015 +0200

cobalt/arm64: leave mm tracking to the pipeline

---

 kernel/cobalt/arch/arm64/Kconfig |3 ---
 1 file changed, 3 deletions(-)

diff --git a/kernel/cobalt/arch/arm64/Kconfig b/kernel/cobalt/arch/arm64/Kconfig
index 927c647..dd5a8c6 100644
--- a/kernel/cobalt/arch/arm64/Kconfig
+++ b/kernel/cobalt/arch/arm64/Kconfig
@@ -4,9 +4,6 @@ source "drivers/xenomai/Kconfig"
 config XENO_ARCH_UNLOCKED_SWITCH
def_bool IPIPE_WANT_PREEMPTIBLE_SWITCH
 
-config IPIPE_WANT_ACTIVE_MM
-   def_bool y
-
 config XENO_ARCH_WANT_TIP
def_bool y
 


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


[Xenomai-git] Dmitriy Cherkasov : cobalt/arm64: prepare-kernel: add arm64 arch

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

Author: Dmitriy Cherkasov 
Date:   Wed May  6 15:27:10 2015 -0700

cobalt/arm64: prepare-kernel: add arm64 arch

---

 scripts/prepare-kernel.sh |3 +++
 1 file changed, 3 insertions(+)

diff --git a/scripts/prepare-kernel.sh b/scripts/prepare-kernel.sh
index 8e960e8..848ec20 100755
--- a/scripts/prepare-kernel.sh
+++ b/scripts/prepare-kernel.sh
@@ -284,6 +284,9 @@ while : ; do
arm)
   linux_arch=arm
   ;;
+   arm64)
+  linux_arch=arm64
+  ;;
sh|sh4)
   linux_arch=sh
   ;;


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


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

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

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 01a12d9..9f1d974 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_ARM64_ASM_UAPI_FEATURES_H
 
 /* The ABI revision level we use on this arch. */
-#define XENOMAI_ABI_REV   16UL
+#define XENOMAI_ABI_REV   17UL
 
 #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-21 Thread git repository hosting
Module: xenomai-3
Branch: arm64
Commit: 95aa21a02d52d4d9957a17804129e0da0ca75077
URL:
http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=95aa21a02d52d4d9957a17804129e0da0ca75077

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] Dmitriy Cherkasov : cobalt/arm64: update register struct usage for arm64

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

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: assume TLS is properly supported

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

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] Don Mahurin : lib/cobalt/arm64: replace tsc counter

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

Author: Don Mahurin 
Date:   Wed May 13 09:36:25 2015 -0700

lib/cobalt/arm64: replace tsc counter

---

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

diff --git a/lib/cobalt/arch/arm64/include/asm/xenomai/tsc.h 
b/lib/cobalt/arch/arm64/include/asm/xenomai/tsc.h
index 594c4ad..a055427 100644
--- a/lib/cobalt/arch/arm64/include/asm/xenomai/tsc.h
+++ b/lib/cobalt/arch/arm64/include/asm/xenomai/tsc.h
@@ -27,6 +27,8 @@
 
 #include 
 #include 
+#include 
+#include 
 
 /*
  * Putting kuser_tsc_get and kinfo.counter in the same struct results
@@ -39,10 +41,27 @@ struct __xn_full_tscinfo {
 };
 extern struct __xn_full_tscinfo __xn_tscinfo;
 
+static inline uint64_t get_counter(void)
+{
+uint64_t cval;
+
+#ifdef __aarch64__
+   asm volatile("isb; mrs %0, cntvct_el0; isb; " : "=r" (cval) :: 
"memory");
+#else
+   asm volatile("isb; mrrc p15, 1, %Q0, %R0, c14; isb" : "=r" (cval) :: 
"memory");
+#endif
+
+   return cval;
+}
+
 static inline __attribute__((always_inline))
 unsigned long long cobalt_read_tsc(void)
 {
+#ifndef __aarch64__
return __xn_tscinfo.kuser_tsc_get(__xn_tscinfo.kinfo.counter);
+#else
+   return get_counter();
+#endif
 }
 
 #endif /* !_LIB_COBALT_ARM_TSC_H */


___
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-21 Thread git repository hosting
Module: xenomai-3
Branch: arm64
Commit: 6cf61fcf6ee76cf5be2aaf0042ebb2a124a3d093
URL:
http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=6cf61fcf6ee76cf5be2aaf0042ebb2a124a3d093

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 : cobalt/arm64: sanitize calibration file

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

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 : cobalt/arm64: use lazy fpsimd switch mode

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

Author: Philippe Gerum 
Date:   Mon Oct 19 10:38:21 2015 +0200

cobalt/arm64: use lazy fpsimd switch mode

---

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

diff --git a/kernel/cobalt/arch/arm64/thread.c 
b/kernel/cobalt/arch/arm64/thread.c
index 5282b0c..2238751 100644
--- a/kernel/cobalt/arch/arm64/thread.c
+++ b/kernel/cobalt/arch/arm64/thread.c
@@ -153,7 +153,7 @@ void xnarch_switch_to(struct xnthread *out, struct xnthread 
*in)
enter_lazy_tlb(prev_mm, next);
}
 
-   __switch_to(prev, next);
+   ipipe_switch_to(prev, next);
 }
 
 int xnarch_escalate(void)


___
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-21 Thread git repository hosting
Module: xenomai-3
Branch: arm64
Commit: 987f6e9f95dc9b06b24d90d79d61e87427dcb25e
URL:
http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=987f6e9f95dc9b06b24d90d79d61e87427dcb25e

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/arm64: use regular context switching code

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

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


[Xenomai-git] Philippe Gerum : cobalt/arm64: use lazy fpsimd switch mode

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

Author: Philippe Gerum 
Date:   Mon Oct 19 10:38:21 2015 +0200

cobalt/arm64: use lazy fpsimd switch mode

---

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

diff --git a/kernel/cobalt/arch/arm64/thread.c 
b/kernel/cobalt/arch/arm64/thread.c
index 5282b0c..2238751 100644
--- a/kernel/cobalt/arch/arm64/thread.c
+++ b/kernel/cobalt/arch/arm64/thread.c
@@ -153,7 +153,7 @@ void xnarch_switch_to(struct xnthread *out, struct xnthread 
*in)
enter_lazy_tlb(prev_mm, next);
}
 
-   __switch_to(prev, next);
+   ipipe_switch_to(prev, next);
 }
 
 int xnarch_escalate(void)


___
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-21 Thread git repository hosting
Module: xenomai-3
Branch: arm64
Commit: fa64885a4f640688c24ed80bacd70976cc33f132
URL:
http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=fa64885a4f640688c24ed80bacd70976cc33f132

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] Gilles Chanteperdrix : rtnet/e1000e: use rtdm schedule work

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

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-21 Thread git repository hosting
Module: xenomai-3
Branch: next
Commit: 1a15ac6113a0fe930582e7225ba4074db2dc386e
URL:
http://git.xenomai.org/?p=xenomai-3.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 : testsuite/smokey: tsc: add tsc test

2015-10-21 Thread git repository hosting
Module: xenomai-3
Branch: next
Commit: 0f3f73fdeb08e1e9e71fe4dd359d8722182b6253
URL:
http://git.xenomai.org/?p=xenomai-3.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++)
+   if