[dpdk-dev,v3,2/2] examples/performance-thread: add arm64 support

Message ID 20170518102151.35504-3-ashwin.sekhar@caviumnetworks.com (mailing list archive)
State Superseded, archived
Delegated to: Thomas Monjalon
Headers

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation success Compilation OK

Commit Message

Ashwin Sekhar T K May 18, 2017, 10:21 a.m. UTC
  Updated Makefile to allow compilation for arm64 architecture.

Added necessary arm64 support for lthread.

Fixed minor compilation errors for arm64 compilation.

Tested the apps l3fwd-thread and lthread_pthread_shim on thunderx
and x86_64.

Signed-off-by: Ashwin Sekhar T K <ashwin.sekhar@caviumnetworks.com>
---
 examples/performance-thread/Makefile               |   4 +-
 .../performance-thread/common/arch/arm64/ctx.c     | 117 +++++++++++++++++++++
 .../performance-thread/common/arch/arm64/ctx.h     | 110 +++++++++++++++++++
 .../performance-thread/common/arch/arm64/stack.h   | 111 +++++++++++++++++++
 examples/performance-thread/common/common.mk       |   2 +
 examples/performance-thread/l3fwd-thread/main.c    |   2 +-
 6 files changed, 343 insertions(+), 3 deletions(-)
 create mode 100644 examples/performance-thread/common/arch/arm64/ctx.c
 create mode 100644 examples/performance-thread/common/arch/arm64/ctx.h
 create mode 100644 examples/performance-thread/common/arch/arm64/stack.h
  

Comments

Thomas Monjalon July 3, 2017, 8:57 p.m. UTC | #1
There can be a licensing issue here.
We may need advice from the Governing Board and the Technical Board.

18/05/2017 12:21, Ashwin Sekhar T K:
> +/*
> + * https://github.com/halayli/lthread which carries the following license.
> + *
> + * Copyright (C) 2012, Hasan Alayli <halayli@gmail.com>
> + *
> + * Redistribution and use in source and binary forms, with or without
> + * modification, are permitted provided that the following conditions
> + * are met:
> + * 1. Redistributions of source code must retain the above copyright
> + *    notice, this list of conditions and the following disclaimer.
> + * 2. Redistributions in binary form must reproduce the above copyright
> + *    notice, this list of conditions and the following disclaimer in the
> + *    documentation and/or other materials provided with the distribution.
> + *
> + * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
> + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
> + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
> + * ARE DISCLAIMED.  IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
> + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
> + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
> + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
> + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
> + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
> + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
> + * SUCH DAMAGE.
> + */
  
O'Driscoll, Tim July 3, 2017, 9:21 p.m. UTC | #2
> From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Thomas Monjalon
> 
> There can be a licensing issue here.
> We may need advice from the Governing Board and the Technical Board.

That's correct. This uses a 2-clause BSD license, but the Intellectual Property Policy section in the Project Charter (http://dpdk.org/about/charter#ip) specifies 3-clause BSD. If you really need to use a new license, then you'll need to make a request to the Governing Board as specified in clause 6.c in the charter.

> 
> 18/05/2017 12:21, Ashwin Sekhar T K:
> > +/*
> > + * https://github.com/halayli/lthread which carries the following
> license.
> > + *
> > + * Copyright (C) 2012, Hasan Alayli <halayli@gmail.com>
> > + *
> > + * Redistribution and use in source and binary forms, with or without
> > + * modification, are permitted provided that the following conditions
> > + * are met:
> > + * 1. Redistributions of source code must retain the above copyright
> > + *    notice, this list of conditions and the following disclaimer.
> > + * 2. Redistributions in binary form must reproduce the above
> copyright
> > + *    notice, this list of conditions and the following disclaimer in
> the
> > + *    documentation and/or other materials provided with the
> distribution.
> > + *
> > + * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
> > + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
> THE
> > + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
> PURPOSE
> > + * ARE DISCLAIMED.  IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE
> LIABLE
> > + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
> CONSEQUENTIAL
> > + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
> GOODS
> > + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
> INTERRUPTION)
> > + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
> CONTRACT, STRICT
> > + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
> ANY WAY
> > + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
> POSSIBILITY OF
> > + * SUCH DAMAGE.
> > + */
>
  
Sekhar, Ashwin July 4, 2017, 7:37 a.m. UTC | #3
This license is already there in many files in examples/performance-
thread directory.

There are two cases in my patch.

1.
I moved some code from examples/performance-thread/common/lthread.c to 
examples/performance-thread/common/arch/x86/stack.h. 
lthread.c already has the below kind of license. So I think there is no
issue retaining the same in stack.h also.

2. 
I added the following files.
examples/performance-thread/common/arch/arm64/ctx.c  
examples/performance-thread/common/arch/arm64/ctx.h  
examples/performance-thread/common/arch/arm64/stack.h

These are actually written by me and not taken from the github link.
By mistake I copied the license entirely :)

For these files, I shall remove it and re-post a v3.

Thanks
Ashwin


On Mon, 2017-07-03 at 21:21 +0000, O'Driscoll, Tim wrote:
> > 

> > From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Thomas

> > Monjalon

> > 

> > There can be a licensing issue here.

> > We may need advice from the Governing Board and the Technical

> > Board.

> That's correct. This uses a 2-clause BSD license, but the

> Intellectual Property Policy section in the Project Charter (http://d

> pdk.org/about/charter#ip) specifies 3-clause BSD. If you really need

> to use a new license, then you'll need to make a request to the

> Governing Board as specified in clause 6.c in the charter.

> 

> > 

> > 

> > 18/05/2017 12:21, Ashwin Sekhar T K:

> > > 

> > > +/*

> > > + * https://github.com/halayli/lthread which carries the

> > > following

> > license.

> > > 

> > > + *

> > > + * Copyright (C) 2012, Hasan Alayli <halayli@gmail.com>

> > > + *

> > > + * Redistribution and use in source and binary forms, with or

> > > without

> > > + * modification, are permitted provided that the following

> > > conditions

> > > + * are met:

> > > + * 1. Redistributions of source code must retain the above

> > > copyright

> > > + *    notice, this list of conditions and the following

> > > disclaimer.

> > > + * 2. Redistributions in binary form must reproduce the above

> > copyright

> > > 

> > > + *    notice, this list of conditions and the following

> > > disclaimer in

> > the

> > > 

> > > + *    documentation and/or other materials provided with the

> > distribution.

> > > 

> > > + *

> > > + * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS

> > > IS'' AND

> > > + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED

> > > TO,

> > THE

> > > 

> > > + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A

> > > PARTICULAR

> > PURPOSE

> > > 

> > > + * ARE DISCLAIMED.  IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE

> > LIABLE

> > > 

> > > + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR

> > CONSEQUENTIAL

> > > 

> > > + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF

> > > SUBSTITUTE

> > GOODS

> > > 

> > > + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS

> > INTERRUPTION)

> > > 

> > > + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN

> > CONTRACT, STRICT

> > > 

> > > + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)

> > > ARISING IN

> > ANY WAY

> > > 

> > > + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE

> > POSSIBILITY OF

> > > 

> > > + * SUCH DAMAGE.

> > > + */
  
O'Driscoll, Tim July 4, 2017, 2:02 p.m. UTC | #4
> From: Sekhar, Ashwin [mailto:Ashwin.Sekhar@cavium.com]

> 

> This license is already there in many files in examples/performance-

> thread directory.

> 

> There are two cases in my patch.

> 

> 1.

> I moved some code from examples/performance-thread/common/lthread.c to

> examples/performance-thread/common/arch/x86/stack.h.

> lthread.c already has the below kind of license. So I think there is no

> issue retaining the same in stack.h also.


That sounds reasonable to me. IANAL, but I don't understand the license in the performance-thread example. It uses BSD 3-clause but references some code that was originally released under BSD 2-clause. It doesn't state that it's dual-licensed, and as far as I know, wasn't re-licensed by the original copyright holder. Anyway, that's an existing problem and not something created by your changes. We'll need to look into it and probably update the IP section of the Project Charter to reflect this.

> 

> 2.

> I added the following files.

> examples/performance-thread/common/arch/arm64/ctx.c

> examples/performance-thread/common/arch/arm64/ctx.h

> examples/performance-thread/common/arch/arm64/stack.h

> 

> These are actually written by me and not taken from the github link.

> By mistake I copied the license entirely :)

> 

> For these files, I shall remove it and re-post a v3.

> 

> Thanks

> Ashwin

> 

> 

> On Mon, 2017-07-03 at 21:21 +0000, O'Driscoll, Tim wrote:

> > >

> > > From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Thomas

> > > Monjalon

> > >

> > > There can be a licensing issue here.

> > > We may need advice from the Governing Board and the Technical

> > > Board.

> > That's correct. This uses a 2-clause BSD license, but the

> > Intellectual Property Policy section in the Project Charter (http://d

> > pdk.org/about/charter#ip) specifies 3-clause BSD. If you really need

> > to use a new license, then you'll need to make a request to the

> > Governing Board as specified in clause 6.c in the charter.

> >

> > >

> > >

> > > 18/05/2017 12:21, Ashwin Sekhar T K:

> > > >

> > > > +/*

> > > > + * https://github.com/halayli/lthread which carries the

> > > > following

> > > license.

> > > >

> > > > + *

> > > > + * Copyright (C) 2012, Hasan Alayli <halayli@gmail.com>

> > > > + *

> > > > + * Redistribution and use in source and binary forms, with or

> > > > without

> > > > + * modification, are permitted provided that the following

> > > > conditions

> > > > + * are met:

> > > > + * 1. Redistributions of source code must retain the above

> > > > copyright

> > > > + *    notice, this list of conditions and the following

> > > > disclaimer.

> > > > + * 2. Redistributions in binary form must reproduce the above

> > > copyright

> > > >

> > > > + *    notice, this list of conditions and the following

> > > > disclaimer in

> > > the

> > > >

> > > > + *    documentation and/or other materials provided with the

> > > distribution.

> > > >

> > > > + *

> > > > + * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS

> > > > IS'' AND

> > > > + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED

> > > > TO,

> > > THE

> > > >

> > > > + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A

> > > > PARTICULAR

> > > PURPOSE

> > > >

> > > > + * ARE DISCLAIMED.  IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE

> > > LIABLE

> > > >

> > > > + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR

> > > CONSEQUENTIAL

> > > >

> > > > + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF

> > > > SUBSTITUTE

> > > GOODS

> > > >

> > > > + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS

> > > INTERRUPTION)

> > > >

> > > > + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN

> > > CONTRACT, STRICT

> > > >

> > > > + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)

> > > > ARISING IN

> > > ANY WAY

> > > >

> > > > + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE

> > > POSSIBILITY OF

> > > >

> > > > + * SUCH DAMAGE.

> > > > + */
  

Patch

diff --git a/examples/performance-thread/Makefile b/examples/performance-thread/Makefile
index d19f8489e..0c5edfdb9 100644
--- a/examples/performance-thread/Makefile
+++ b/examples/performance-thread/Makefile
@@ -38,8 +38,8 @@  RTE_TARGET ?= x86_64-native-linuxapp-gcc
 
 include $(RTE_SDK)/mk/rte.vars.mk
 
-ifneq ($(CONFIG_RTE_ARCH),"x86_64")
-$(error This application is only supported for x86_64 targets)
+ifeq ($(filter y,$(CONFIG_RTE_ARCH_X86_64) $(CONFIG_RTE_ARCH_ARM64)),)
+$(error This application is only supported for x86_64 and arm64 targets)
 endif
 
 DIRS-y += l3fwd-thread
diff --git a/examples/performance-thread/common/arch/arm64/ctx.c b/examples/performance-thread/common/arch/arm64/ctx.c
new file mode 100644
index 000000000..95ce16095
--- /dev/null
+++ b/examples/performance-thread/common/arch/arm64/ctx.c
@@ -0,0 +1,117 @@ 
+/*
+ *   BSD LICENSE
+ *
+ *   Copyright (C) Cavium networks Ltd. 2017.
+ *
+ *   Redistribution and use in source and binary forms, with or without
+ *   modification, are permitted provided that the following conditions
+ *   are met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above copyright
+ *       notice, this list of conditions and the following disclaimer in
+ *       the documentation and/or other materials provided with the
+ *       distribution.
+ *     * Neither the name of Cavium networks nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ *   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ *   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ *   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ *   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ *   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ *   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ *   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * https://github.com/halayli/lthread which carries the following license.
+ *
+ * Copyright (C) 2012, Hasan Alayli <halayli@gmail.com>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <rte_common.h>
+#include <ctx.h>
+
+void
+ctx_switch(struct ctx *new_ctx __rte_unused, struct ctx *curr_ctx __rte_unused)
+{
+	/* SAVE CURRENT CONTEXT */
+	asm volatile (
+		/* Save SP */
+		"mov x3, sp\n"
+		"str x3, [x1, #0]\n"
+
+		/* Save FP and LR */
+		"stp x29, x30, [x1, #8]\n"
+
+		/* Save Callee Saved Regs x19 - x28 */
+		"stp x19, x20, [x1, #24]\n"
+		"stp x21, x22, [x1, #40]\n"
+		"stp x23, x24, [x1, #56]\n"
+		"stp x25, x26, [x1, #72]\n"
+		"stp x27, x28, [x1, #88]\n"
+
+		/*
+		 * Save bottom 64-bits of Callee Saved
+		 * SIMD Regs v8 - v15
+		 */
+		"stp d8, d9, [x1, #104]\n"
+		"stp d10, d11, [x1, #120]\n"
+		"stp d12, d13, [x1, #136]\n"
+		"stp d14, d15, [x1, #152]\n"
+	);
+
+	/* RESTORE NEW CONTEXT */
+	asm volatile (
+		/* Restore SP */
+		"ldr x3, [x0, #0]\n"
+		"mov sp, x3\n"
+
+		/* Restore FP and LR */
+		"ldp x29, x30, [x0, #8]\n"
+
+		/* Restore Callee Saved Regs x19 - x28 */
+		"ldp x19, x20, [x0, #24]\n"
+		"ldp x21, x22, [x0, #40]\n"
+		"ldp x23, x24, [x0, #56]\n"
+		"ldp x25, x26, [x0, #72]\n"
+		"ldp x27, x28, [x0, #88]\n"
+
+		/*
+		 * Restore bottom 64-bits of Callee Saved
+		 * SIMD Regs v8 - v15
+		 */
+		"ldp d8, d9, [x0, #104]\n"
+		"ldp d10, d11, [x0, #120]\n"
+		"ldp d12, d13, [x0, #136]\n"
+		"ldp d14, d15, [x0, #152]\n"
+	);
+}
diff --git a/examples/performance-thread/common/arch/arm64/ctx.h b/examples/performance-thread/common/arch/arm64/ctx.h
new file mode 100644
index 000000000..2905990b2
--- /dev/null
+++ b/examples/performance-thread/common/arch/arm64/ctx.h
@@ -0,0 +1,110 @@ 
+/*
+ *   BSD LICENSE
+ *
+ *   Copyright (C) Cavium networks Ltd. 2017.
+ *
+ *   Redistribution and use in source and binary forms, with or without
+ *   modification, are permitted provided that the following conditions
+ *   are met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above copyright
+ *       notice, this list of conditions and the following disclaimer in
+ *       the documentation and/or other materials provided with the
+ *       distribution.
+ *     * Neither the name of Cavium networks nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ *   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ *   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ *   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ *   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ *   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ *   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ *   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * https://github.com/halayli/lthread which carries the following license.
+ *
+ * Copyright (C) 2012, Hasan Alayli <halayli@gmail.com>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef CTX_H
+#define CTX_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * CPU context registers
+ */
+struct ctx {
+	void	*sp;		/* 0  */
+	void	*fp;		/* 8 */
+	void	*lr;		/* 16  */
+
+	/* Callee Saved Generic Registers */
+	void	*r19;		/* 24 */
+	void	*r20;		/* 32 */
+	void	*r21;		/* 40 */
+	void	*r22;		/* 48 */
+	void	*r23;		/* 56 */
+	void	*r24;		/* 64 */
+	void	*r25;		/* 72 */
+	void	*r26;		/* 80 */
+	void	*r27;		/* 88 */
+	void	*r28;		/* 96 */
+
+	/*
+	 * Callee Saved SIMD Registers. Only the bottom 64-bits
+	 * of these registers needs to be saved.
+	 */
+	void	*v8;		/* 104 */
+	void	*v9;		/* 112 */
+	void	*v10;		/* 120 */
+	void	*v11;		/* 128 */
+	void	*v12;		/* 136 */
+	void	*v13;		/* 144 */
+	void	*v14;		/* 152 */
+	void	*v15;		/* 160 */
+};
+
+
+void
+ctx_switch(struct ctx *new_ctx, struct ctx *curr_ctx);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* RTE_CTX_H_ */
diff --git a/examples/performance-thread/common/arch/arm64/stack.h b/examples/performance-thread/common/arch/arm64/stack.h
new file mode 100644
index 000000000..1e7c6444c
--- /dev/null
+++ b/examples/performance-thread/common/arch/arm64/stack.h
@@ -0,0 +1,111 @@ 
+/*
+ *   BSD LICENSE
+ *
+ *   Copyright (C) Cavium networks Ltd. 2017.
+ *
+ *   Redistribution and use in source and binary forms, with or without
+ *   modification, are permitted provided that the following conditions
+ *   are met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above copyright
+ *       notice, this list of conditions and the following disclaimer in
+ *       the documentation and/or other materials provided with the
+ *       distribution.
+ *     * Neither the name of Cavium networks nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ *   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ *   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ *   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ *   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ *   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ *   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ *   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * https://github.com/halayli/lthread which carries the following license.
+ *
+ * Copyright (C) 2012, Hasan Alayli <halayli@gmail.com>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef STACK_H
+#define STACK_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "lthread_int.h"
+
+/*
+ * Sets up the initial stack for the lthread.
+ */
+static inline void
+arch_set_stack(struct lthread *lt, void *func)
+{
+	void **stack_top = (void *)((char *)(lt->stack) + lt->stack_size);
+
+	/*
+	 * Align stack_top to 16 bytes. Arm64 has the constraint that the
+	 * stack pointer must always be quad-word aligned.
+	 */
+	stack_top = (void **)(((unsigned long)(stack_top)) & ~0xfUL);
+
+	/*
+	 * First Stack Frame
+	 */
+	stack_top[0] = NULL;
+	stack_top[-1] = NULL;
+
+	/*
+	 * Initialize the context
+	 */
+	lt->ctx.fp = &stack_top[-1];
+	lt->ctx.sp = &stack_top[-2];
+
+	/*
+	 * Here only the address of _lthread_exec is saved as the link
+	 * register value. The argument to _lthread_exec i.e the address of
+	 * the lthread struct is not saved. This is because the first
+	 * argument to ctx_switch is the address of the new context,
+	 * which also happens to be the address of required lthread struct.
+	 * So while returning from ctx_switch into _thread_exec, parameter
+	 * register x0 will always contain the required value.
+	 */
+	lt->ctx.lr = func;
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* STACK_H_ */
diff --git a/examples/performance-thread/common/common.mk b/examples/performance-thread/common/common.mk
index 532dbf61d..f1f05fdde 100644
--- a/examples/performance-thread/common/common.mk
+++ b/examples/performance-thread/common/common.mk
@@ -39,6 +39,8 @@  MKFILE_PATH=$(abspath $(dir $(lastword $(MAKEFILE_LIST))))
 
 ifeq ($(CONFIG_RTE_ARCH_X86_64),y)
 ARCH_PATH += $(MKFILE_PATH)/arch/x86
+else ifeq ($(CONFIG_RTE_ARCH_ARM64),y)
+ARCH_PATH += $(MKFILE_PATH)/arch/arm64
 endif
 
 VPATH := $(MKFILE_PATH) $(ARCH_PATH)
diff --git a/examples/performance-thread/l3fwd-thread/main.c b/examples/performance-thread/l3fwd-thread/main.c
index 2d98473eb..3d9739e91 100644
--- a/examples/performance-thread/l3fwd-thread/main.c
+++ b/examples/performance-thread/l3fwd-thread/main.c
@@ -225,7 +225,7 @@  static uint16_t nb_txd = RTE_TEST_TX_DESC_DEFAULT;
 static uint64_t dest_eth_addr[RTE_MAX_ETHPORTS];
 static struct ether_addr ports_eth_addr[RTE_MAX_ETHPORTS];
 
-static __m128i val_eth[RTE_MAX_ETHPORTS];
+static xmm_t val_eth[RTE_MAX_ETHPORTS];
 
 /* replace first 12B of the ethernet header. */
 #define	MASK_ETH 0x3f