From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755706AbbESJjh (ORCPT ); Tue, 19 May 2015 05:39:37 -0400 Received: from mailout2.samsung.com ([203.254.224.25]:51601 "EHLO mailout2.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754209AbbESJje (ORCPT ); Tue, 19 May 2015 05:39:34 -0400 X-AuditID: cbfee690-f796f6d000005054-89-555b04d45fb2 Date: Tue, 19 May 2015 09:39:32 +0000 (GMT) From: Sarbojit Ganguly Subject: [RFC] arm: Add for atomic half word exchange To: tglx@linutronix.de, mingo@redhat.com, hpa@zytor.com, peterz@infradead.org, Waiman.Long@hp.com Cc: torvalds@linux-foundation.org, raghavendra.kt@linux.vnet.ibm.com, oleg@redhat.com, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, SHARAN ALLUR Reply-to: ganguly.s@samsung.com MIME-version: 1.0 X-MTR: 20150519090644867@ganguly.s Msgkey: 20150519090644867@ganguly.s X-EPLocale: en_US.utf-8 X-Priority: 3 X-EPWebmail-Msg-Type: personal X-EPWebmail-Reply-Demand: 0 X-EPApproval-Locale: X-EPHeader: ML X-MLAttribute: X-RootMTR: 20150519090644867@ganguly.s X-ParentMTR: X-ArchiveUser: X-CPGSPASS: Y X-ConfirmMail: N,general Content-type: text/plain; charset=utf-8 MIME-version: 1.0 Message-id: <1122007906.400701432028368414.JavaMail.weblogic@ep2mlwas07a> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrMIsWRmVeSWpSXmKPExsWyRsSkRvcKS3SowZc2LYvLu+awOTB6fN4k F8AYxWWTkpqTWZZapG+XwJXx4uxExoJLQhUP719gbWCcINTFyMEhJKAi0TcpoouRk0NCwETi 0O3fzBC2mMSFe+vZuhi5gEqWMko0Nc1kgynaceIgO0RiDqPEvv4/jCAJFgFViW1TlrOA2GwC +hKn979kAlkgLGAq8fO2Lki9iEATo8TaeacZQRxmgeeMEhv2/mIFaRASkJdof7GdCcTmFRCU ODnzCQtIs4SAksSTLSkQYWWJLe9vQF0nLvG34RE7hM0rMaP9KQuELScx7esaqBppifOzNjDC fLP4+2OoOL/Esds7mCBsAYmpZw5C1ahLvJw6C8rmk1iz8C0LTP2uU8uZYXY1bPwNtVdCYmvL E7DzmQUUJaZ0P2QHOZlZQFNi/S59VJ+A2J4SD49sA4ebhMBcDokPnXeZJzAqzUJSNwvJqFkI o5CVLGBkWcUomlqQXFCclF5kolecmFtcmpeul5yfu4kRmBZO/3s2YQfjvQPWhxgFOBiVeHgj 6qNChVgTy4orcw8xmgJjaSKzlGhyPjD55JXEGxqbGVmYmpgaG5lbmimJ876W+hksJJCeWJKa nZpakFoUX1Sak1p8iJGJg1OqgbFb+EaFJsPUc7kf0w6tyq1Sk1dxWpyxu0LSqTakY+oc3eaL XzMlaqPiEoOaff0N55bNeSeiv/H3uyNab777Ofx9W7Lv/K5/H/j3LDwVuGPeapZDeRJLWDXP lyy9NS91p25ToeLSsDOydXl/mGbvbFR46yoasWtKcgm3gdmSfV8PGFeEnI+t/KrEUpyRaKjF XFScCAADJPv0BgMAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFjrCKsWRmVeSWpSXmKPExsVy+t/tXt0rLNGhBu+uK1lc3jWHzYHR4/Mm uQDGqDSbjNTElNQihdS85PyUzLx0WyXv4HjneFMzA0NdQ0sLcyWFvMTcVFslF58AXbfMHKCh SgpliTmlQKGAxOJiJX07m6L80pJUhYz84hJbpWhDcyM9IwM9UyM9Q9NYK0MDAyNToJqEtIwX ZycyFlwSqnh4/wJrA+MEoS5GDg4hARWJvkkRXYycHBICJhI7Thxkh7DFJC7cW8/WxcgFVDKH UWJf/x9GkASLgKrEtinLWUBsNgF9idP7XzKBzBEWMJX4eVsXpF5EoIlRYu2804wgDrPAc0aJ DXt/sYI0CAnIS7S/2M4EYvMKCEqcnPmEBaRZQkBJ4smWFIiwssSW9zeYIY4Ql/jb8AjqIF6J Ge1PWSBsOYlpX9dA1UhLnJ+1gRHm6MXfH0PF+SWO3d7BBGELSEw9cxCqRl3i5dRZUDafxJqF b1lg6nedWs4Ms6th42+ovRISW1uegJ3PLKAoMaX7ITvIycwCmhLrd+mj+gTE9pR4eGQb+wRG 2VlIUrOQdM9C6EZWsoCRZRWjaGpBckFxUnqFiV5xYm5xaV66XnJ+7iZGcAp6tmQHY8MF60OM AhyMSjy8EfVRoUKsiWXFlbmHGCU4mJVEeCU/A4V4UxIrq1KL8uOLSnNSiw8xmgLjbCKzlGhy PjA95pXEGxqbmJsam1oYGJqbmymJ8/4/lxsiJJCeWJKanZpakFoE08fEwSnVwJjkIyHzrdL3 /wuboJk/Ux6s21nqU+HUkrjhycp3Mh+qapZ2fHK9d37ajwfzSo5NuHS9s1qSU1+YYZNa8jHR SCvPK2Wu/z2Fe2+osLkc1rK84V0zs6t1dd7+OefTJp14muf88v2XCKUJfQYC18qsnzLq57V/ uB4qvl03U5Xr66fKcJWJffs3uiixFGckGmoxFxUnAgBReSUGVwMAAA== DLP-Filter: Pass X-CFilter-Loop: Reflected Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from base64 to 8bit by nfs id t4J9dewG000387 Since 16 bit half word exchange was not there and MCS based qspinlock by Waiman's xchg_tail() requires an atomic exchange on a half word, here is a small modification to __xchg() code. --- /linux.trees.git/tip/arch/arm/include/asm/cmpxchg.h 2015-05-11 23:36:06.942583615 +0530 +++ arch/arm/include/asm/cmpxchg.h 2015-04-08 18:40:43.276255712 +0530 @@ -2,9 +2,12 @@ #define __ASM_ARM_CMPXCHG_H #include #include #if defined(CONFIG_CPU_SA1100) || defined(CONFIG_CPU_SA110) /* * On the StrongARM, "swp" is terminally broken since it bypasses the @@ -36,7 +39,6 @@ #endif smp_mb(); switch (size) { #if __LINUX_ARM_ARCH__ >= 6 @@ -50,6 +52,23 @@ : "r" (x), "r" (ptr) : "memory", "cc"); break; + /* + * halfword exclusive exchange + * This is new implementation as qspinlock + * wants 16 bit atomic CAS. + */ + case 2: + asm volatile("@ __xchg2\n" + "1: ldrexh %0, [%3]\n" + " strexh %1, %2, [%3]\n" + " teq %1, #0\n" + " bne 1b" + : "=&r" (ret), "=&r" (tmp) + : "r" (x), "r" (ptr) + : "memory", "cc"); + break; case 4: asm volatile("@ __xchg4\n" "1: ldrex %0, [%3]\n" @@ -94,6 +113,10 @@ break; #endif default: __bad_xchg(ptr, size), ret = 0; break; } Regards, Sarbojit{.n++%ݶw{.n+{G{ayʇڙ,jfhz_(階ݢj"mG?&~iOzv^m ?I