From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <bjzhuc@cn.ibm.com>
Received: from e39.co.us.ibm.com (e39.co.us.ibm.com [32.97.110.160])
 by dpdk.org (Postfix) with ESMTP id 042D87E2F
 for <dev@dpdk.org>; Fri, 26 Sep 2014 11:30:21 +0200 (CEST)
Received: from /spool/local
 by e39.co.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only!
 Violators will be prosecuted
 for <dev@dpdk.org> from <bjzhuc@cn.ibm.com>;
 Fri, 26 Sep 2014 03:36:42 -0600
Received: from d01dlp03.pok.ibm.com (9.56.250.168)
 by e39.co.us.ibm.com (192.168.1.139) with IBM ESMTP SMTP Gateway: Authorized
 Use Only! Violators will be prosecuted; 
 Fri, 26 Sep 2014 03:36:40 -0600
Received: from b01cxnp22033.gho.pok.ibm.com (b01cxnp22033.gho.pok.ibm.com
 [9.57.198.23])
 by d01dlp03.pok.ibm.com (Postfix) with ESMTP id 38206C9002E
 for <dev@dpdk.org>; Fri, 26 Sep 2014 05:25:24 -0400 (EDT)
Received: from d01av05.pok.ibm.com (d01av05.pok.ibm.com [9.56.224.195])
 by b01cxnp22033.gho.pok.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id
 s8Q9aVxc66060542 for <dev@dpdk.org>; Fri, 26 Sep 2014 09:36:39 GMT
Received: from d01av05.pok.ibm.com (localhost [127.0.0.1])
 by d01av05.pok.ibm.com (8.14.4/8.14.4/NCO v10.0 AVout) with ESMTP id
 s8Q9a7kB002936 for <dev@dpdk.org>; Fri, 26 Sep 2014 05:36:07 -0400
Received: from d01hub02.pok.ibm.com (d01hub02.pok.ibm.com [9.63.10.236])
 by d01av05.pok.ibm.com (8.14.4/8.14.4/NCO v10.0 AVin) with ESMTP id
 s8Q9a7wJ002655 for <dev@dpdk.org>; Fri, 26 Sep 2014 05:36:07 -0400
Received: from localhost.localdomain ([9.186.57.14])
 by rescrl1.research.ibm.com (IBM Domino Release 9.0.1)
 with ESMTP id 2014092617352317-312552 ;
 Fri, 26 Sep 2014 17:35:23 +0800 
From: Chao Zhu <bjzhuc@cn.ibm.com>
To: dev@dpdk.org
Date: Fri, 26 Sep 2014 05:36:20 -0400
Message-Id: <1411724186-8036-7-git-send-email-bjzhuc@cn.ibm.com>
X-Mailer: git-send-email 1.7.1
In-Reply-To: <1411724186-8036-1-git-send-email-bjzhuc@cn.ibm.com>
References: <1411724186-8036-1-git-send-email-bjzhuc@cn.ibm.com>
X-MIMETrack: Itemize by SMTP Server on rescrl1/Research/Affiliated/IBM(Release
 9.0.1|October 14, 2013) at 2014/09/26 17:35:23,
 Serialize by Router on D01HUB02/01/H/IBM(Release 8.5.3FP2 ZX853FP2HF5|February,
 2013) at 09/26/2014 05:36:06,
 Serialize complete at 09/26/2014 05:36:06
X-TM-AS-MML: disable
X-Content-Scanned: Fidelis XPS MAILER
x-cbid: 14092609-9332-0000-0000-000002250F94
Subject: [dpdk-dev] [PATCH 06/12] Add spinlock operation for IBM Power
	architecture
X-BeenThere: dev@dpdk.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: patches and discussions about DPDK <dev.dpdk.org>
List-Unsubscribe: <http://dpdk.org/ml/options/dev>,
 <mailto:dev-request@dpdk.org?subject=unsubscribe>
List-Archive: <http://dpdk.org/ml/archives/dev/>
List-Post: <mailto:dev@dpdk.org>
List-Help: <mailto:dev-request@dpdk.org?subject=help>
List-Subscribe: <http://dpdk.org/ml/listinfo/dev>,
 <mailto:dev-request@dpdk.org?subject=subscribe>
X-List-Received-Date: Fri, 26 Sep 2014 09:30:24 -0000

The spinlock operations implemented with assembly code in DPDK only
support x86. This patch add spinlock operations for IBM Power
architecture.

Signed-off-by: Chao Zhu <bjzhuc@cn.ibm.com>
---
 .../include/powerpc/arch/rte_spinlock_arch.h       |   88 ++++++++++++++++++++
 1 files changed, 88 insertions(+), 0 deletions(-)
 create mode 100644 lib/librte_eal/common/include/powerpc/arch/rte_spinlock_arch.h

diff --git a/lib/librte_eal/common/include/powerpc/arch/rte_spinlock_arch.h b/lib/librte_eal/common/include/powerpc/arch/rte_spinlock_arch.h
new file mode 100644
index 0000000..3e4c0ea
--- /dev/null
+++ b/lib/librte_eal/common/include/powerpc/arch/rte_spinlock_arch.h
@@ -0,0 +1,88 @@
+/*
+ *   BSD LICENSE
+ *
+ *   Copyright (C) IBM Corporation 2014.
+ *
+ *   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 IBM Corporation 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.
+*/
+
+#ifndef _RTE_SPINLOCK_ARCH_H_
+#define _RTE_SPINLOCK_ARCH_H_
+
+#include <rte_lcore.h>
+#include <rte_common.h>
+
+/* Fixme: Use intrinsics to implement the spinlock on Power architecture */
+
+/**
+ * The rte_spinlock_t type.
+ */
+typedef struct {
+	volatile int locked; /**< lock status 0 = unlocked, 1 = locked */
+} rte_spinlock_t;
+
+/**
+ * Take the spinlock.
+ *
+ * @param sl
+ *   A pointer to the spinlock.
+ */
+static inline void
+rte_arch_spinlock_lock(rte_spinlock_t *sl)
+{
+	while (__sync_lock_test_and_set(&sl->locked, 1))
+		while(sl->locked)
+			rte_pause();
+}
+
+/**
+ * Release the spinlock.
+ *
+ * @param sl
+ *   A pointer to the spinlock.
+ */
+static inline void
+rte_arch_spinlock_unlock (rte_spinlock_t *sl)
+{
+	__sync_lock_release(&sl->locked);
+}
+
+/**
+ * Try to take the lock.
+ *
+ * @param sl
+ *   A pointer to the spinlock.
+ * @return
+ *   1 if the lock is successfully taken; 0 otherwise.
+ */
+static inline int
+rte_arch_spinlock_trylock (rte_spinlock_t *sl)
+{
+	return (__sync_lock_test_and_set(&sl->locked,1) == 0);
+}
+
+#endif /* _RTE_SPINLOCK_ARCH_H_ */
\ No newline at end of file
-- 
1.7.1