From patchwork Sat Nov 7 10:52:24 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Noam Camus X-Patchwork-Id: 541251 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2001:1868:205::9]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 8428D140311 for ; Sat, 7 Nov 2015 21:56:44 +1100 (AEDT) Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1Zv1Ao-0006GJ-S9; Sat, 07 Nov 2015 10:56:42 +0000 Received: from mail-am1on0070.outbound.protection.outlook.com ([157.56.112.70] helo=emea01-am1-obe.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1Zv1Am-0005nG-Ii for linux-snps-arc@lists.infradead.org; Sat, 07 Nov 2015 10:56:41 +0000 Received: from AM2PR02CA0036.eurprd02.prod.outlook.com (10.160.28.174) by AM3PR02MB177.eurprd02.prod.outlook.com (10.242.248.144) with Microsoft SMTP Server (TLS) id 15.1.318.15; Sat, 7 Nov 2015 10:56:17 +0000 Received: from AM1FFO11OLC003.protection.gbl (2a01:111:f400:7e00::189) by AM2PR02CA0036.outlook.office365.com (2a01:111:e400:8400::46) with Microsoft SMTP Server (TLS) id 15.1.318.15 via Frontend Transport; Sat, 7 Nov 2015 10:56:17 +0000 Authentication-Results: spf=fail (sender IP is 212.179.42.66) smtp.mailfrom=ezchip.com; infradead.org; dkim=none (message not signed) header.d=none; infradead.org; dmarc=none action=none header.from=ezchip.com; Received-SPF: Fail (protection.outlook.com: domain of ezchip.com does not designate 212.179.42.66 as permitted sender) receiver=protection.outlook.com; client-ip=212.179.42.66; helo=ezex10.ezchip.com; Received: from ezex10.ezchip.com (212.179.42.66) by AM1FFO11OLC003.mail.protection.outlook.com (10.174.65.78) with Microsoft SMTP Server (TLS) id 15.1.325.5 via Frontend Transport; Sat, 7 Nov 2015 10:56:16 +0000 Received: from localhost.localdomain (10.1.3.132) by ezex10.ezchip.com (10.1.1.4) with Microsoft SMTP Server (TLS) id 14.3.224.2; Sat, 7 Nov 2015 12:55:52 +0200 From: Noam Camus To: Subject: [PATCH v2 06/19] ARC: rwlock: disable interrupts in !LLSC variant Date: Sat, 7 Nov 2015 12:52:24 +0200 Message-ID: <1446893557-29748-7-git-send-email-noamc@ezchip.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1446297327-16298-1-git-send-email-noamc@ezchip.com> References: <1446297327-16298-1-git-send-email-noamc@ezchip.com> MIME-Version: 1.0 X-TM-AS-Product-Ver: SMEX-11.0.0.1191-8.000.1202-21926.006 X-TM-AS-Result: No-1.316400-8.000000-31 X-TM-AS-User-Approved-Sender: No X-TM-AS-User-Blocked-Sender: No X-EOPAttributedMessage: 0 X-Microsoft-Exchange-Diagnostics: 1; AM1FFO11OLC003; 1:Iw5uJC33lgG1Lzhlou5vadppC4vyKFjegV2PzOyt4oRUOnJ30js+XTKWu0ktTF6uXrkba3UzIOxZZ9vQgFHO1AuIcNdBtI47NOKxm0L7CuJX0t3ikA0LCVu4YdBMtWN23Ws3bbXFUja/lqxgIOvO6rqS/iitz3Mt0VX+6MpixiiLrcDjnmmqxIfRXf2VtMDopJPbrBM1Ib7gny+AotuG+ub0XKeEWwH1YB+gQk5lP8xsRhspwqyLPVKIyfXzC4kvmtv2WKMb4JguJT1ZD7rkMEFKDu0j0P/iCcvpJEQf7qZZEKO5+zylQ/jEdyxxMVnQ0ZmApAE7KRcaAnOypPn5TZcU+AnjoKLDKEfBWo9t2cYvAyk7WFTh/VyNERGYmcPfm0Yl0dwvbBlXpigTTgqpCA== X-Forefront-Antispam-Report: CIP:212.179.42.66; CTRY:IL; IPV:NLI; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(2980300002)(1110001)(1109001)(339900001)(199003)(189002)(377424004)(229853001)(106466001)(2351001)(11100500001)(86362001)(189998001)(104016004)(6806005)(5003940100001)(47776003)(50226001)(5008740100001)(105606002)(85426001)(5007970100001)(49486002)(110136002)(76176999)(92566002)(50986999)(87936001)(5001920100001)(19580395003)(19580405001)(5001970100001)(48376002)(77096005)(33646002)(50466002)(36756003)(2950100001); DIR:OUT; SFP:1101; SCL:1; SRVR:AM3PR02MB177; H:ezex10.ezchip.com; FPR:; SPF:Fail; PTR:ezmail.ezchip.com; A:1; MX:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; AM3PR02MB177; 2:2k7+5H3jBuggSDMHfrXWrt9DvLQZveSo8h+05WFBr7EIucIW+x2J68L3/c/NDCy3t8BjMfqtfn+15SW5ThrDW4AO4ZgDsr2ujDod8SWPxGAsjATNcQ6qDLeIFEZqoUZy4boyLWareCrHz5XZM5yi5VUfpzzTddkdLe3//cufwpg=; 3:9EqVuZAONBrCsLNX3JbnzgHA7uNkjTKNlbB+ZAM6hf5e0/xdXsMOz44ttpRSc+CVDymakvLmaENOX+PJMxd70vmBGdx38petKcyZfLDr/FoOZ5FlnpIcpBcgm50G6hjJS++GtUKIepeChRkKfn/ockRO4h1JP1p9Lmn/z5a7+E2rky8HosbOjkB1Gbe0uKTioW3Hnyqso0fI+3qn7aTYah00v3fEIXCg/9IVjtV9Zk4=; 25:QozgGUBZdDkUuFa4N4PEvRBkp8NWxaXaiwLNkyRNWvgpzMDp+2QwbLg/Am/OUbom7d4MM3n+xnxNoGHbc6MeXeE5fWwo6mdoTenYhNih2Df04MjsNTqP7lr2cGhpQQA1CZRoXLOakVQ3Hm7KQj9jChfFyQBl/yZs+iD2gaQSrDxOU6qAQp/pNkVkn5Hu0KEZZgXSnIv1HLjZHd9OfKVtka9cqHUlE2HcnOMo2EXO5I7TZJqMPULP8q292XI8XQqlPOhOS5WrprDTWyQHz8KLUQ==; 20:JB6mZbeavr/4F77ROdSu3IwO/833YiLfdWz/3vYJ6zzy5Kso30YyNGGC4EzlfWjyDFtK6fz4357Eup9hkMcIFCIT6CdhbKx9+DhY04Mylt5Im17TN8pjWwH6mUv0zXb6eK/dSSzPC2WbKukETynnapeIBslEeS3YDvC18xTgQPk= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:AM3PR02MB177; X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(121898900299872); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(601004)(2401047)(5005006)(520078)(8121501046)(10201501046)(3002001); SRVR:AM3PR02MB177; BCL:0; PCL:0; RULEID:; SRVR:AM3PR02MB177; X-Microsoft-Exchange-Diagnostics: 1; AM3PR02MB177; 4:aaS9VvnLdcEsht7DK9jfZNRLwwny1s+qx2uNwQcHUqh5wp3Q+7iuotjmhDuo3TZOm3o8IM3Dqi5+CRrfFlJDXeHB26KiDjiiPcnGP/XJX34VhorS5LE5vvyuO8Zi+y044BLL2OwMSJ1zxRT1HsbV1lHs6VNka83HgUhX9iLNQZH0iBsDGG2PJnYjLlhQv62+96TLAxnOdKGCY8YYchwZShSTQR4w3yAR1zJzIqSm9Da4Coll4isMYdjeK9QL7UFJMJgl6V9iI+f5dc8BK8zZmayjXSe8CRy9eLJBe8akiz7rv1b0uemLsFVbZIOjV7TxttTmsr2PGoIMwUlwk+BSJLCzwPExd2w4Wxb49e/RxWbDfst/C/s6+a277Z5i8Pg8 X-Forefront-PRVS: 0753EA505A X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; AM3PR02MB177; 23:nI+S4okms+zrL196mRJfxjLNJHALzLIhpad7ZimHeh?= =?us-ascii?Q?tNqdpkEppfWtTctOmxQFBGXcIo2Exa87q8PEdcke7FleMV60LIQgkiyw6ONX?= =?us-ascii?Q?YMA28XHzfyDZx76yOfTTTn5FkNe5Z8UeLx1kJeLE65R40sD6hVEjnKOJ4MYG?= =?us-ascii?Q?tLOSIK/I1uXLTuPCDaHhccpROx3dfBr9UXGmDtbOEmRhi/dzOO11odFVP3Sl?= =?us-ascii?Q?LkGsMEh4+E0e6Bg27tEY2UtLk5nxxPFLlHftEOyF16URRWFceM/Q8kfa3zY8?= =?us-ascii?Q?QHj5SgBitd/bTxVu6/uTfZotkPlb+Axyx1toqs2ZisWWRqlbToAxRSD25X8d?= =?us-ascii?Q?wHtXnEGVBI+woabPEv4FkFHOPZ830RXj/gTNOOiRWVK9yAfpvqm+g1cG77nS?= =?us-ascii?Q?dDxpZdX+s8fiwkl+Tjnhjl6LdeKHGEIjwuk6C2Kbr69b4+JUOtj9j8Ln5lyh?= =?us-ascii?Q?03vVDIxxUDayuLYGP1g0EqZixw2rS03XFyl+l9OXvMhmjdnaN7WWW2642J+j?= =?us-ascii?Q?4I4/FnzUAma32Bfa/3fDx6uh94yLy9E+gCf+jvYi67eKBSK2j5if1x5ec605?= =?us-ascii?Q?tx/IbNZVmOVsN61sXBdB9DyqlwSI1m3AUsmJUkWXy+ev4hOMKK0mgt+5kkw4?= =?us-ascii?Q?WtOTr9NebEjsuEzxeszv2wcSTIV+Y/NpNmc0X+7zHWqsXoIphCAqBCsL8nQg?= =?us-ascii?Q?3nXRKqndI6fhEnkv7CttkFyXfywKqPfuofjC1qXt1f5jGPEPqMePqxVa9WdN?= =?us-ascii?Q?aFh62n8mJZbqEcvllDHgcEEylGjE1FEfiv8dzHttuENctG6L/pdtl9oD0IG0?= =?us-ascii?Q?/7mpFIY/wX4XCuq/TM6468sABhRaUoa82ICHEXBHoVYMwWMmR3bVjzlydoVK?= =?us-ascii?Q?/gClQS528MEP7QGZ/8HQzaDbPwi6gqg1R1MWjiWbRLMCUsWddA5NfRwJFO8a?= =?us-ascii?Q?8MGWqZx25NLB8O1jTofHC+Cr58LrDUzSsaquVkT/DJiF66R5UBT3bU4tLVwc?= =?us-ascii?Q?EYN2pCQRhVe8lPfnTvB4vu8qYxF9RWrRwNuKpy1h68GHMAM19qCIecfsNPWM?= =?us-ascii?Q?ZmErXWD/VHrEa5cY/NDV72r798?= X-Microsoft-Exchange-Diagnostics: 1; AM3PR02MB177; 5:UP813w51eVqYZK5ol/ObNM69DYIYumd18KzE5UOK4WvZIL7d37OSRp3Afo2BYJ+pdPrfudS1MVGC6ojamaxBQlyc3+25jAVzjR4u3AiSqKKEpinSm1VfHIM1g1QAxTopV64hC8218bp7JDa4HJ9x2w==; 24:W0iAcshFV3NWZZH+V1qj72jZMwj/Dnol3PQd2L37ai1q01eC9TCAK5w8UipHt/NK6vBFQqsd1xLhzRkiAhd77py0HrKXuG2+jYS6aHV3HDs=; 20:Qi7Hml4/uuAt5Cn1o5Z3D2i4S/yqaMSYevETab3NHyQ803nkPnjTPp2MYZ9UNaviS3WkYcM37StAsQkJsRRIxA== SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: ezchip.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Nov 2015 10:56:16.1839 (UTC) X-MS-Exchange-CrossTenant-Id: 0fc16e0a-3cd3-4092-8b2f-0a42cff122c3 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=0fc16e0a-3cd3-4092-8b2f-0a42cff122c3; Ip=[212.179.42.66]; Helo=[ezex10.ezchip.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM3PR02MB177 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20151107_025641_182382_A9C93CBB X-CRM114-Status: UNSURE ( 7.21 ) X-CRM114-Notice: Please train this message. X-Spam-Score: -1.9 (-) X-Spam-Report: SpamAssassin version 3.4.0 on bombadil.infradead.org summary: Content analysis details: (-1.9 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at http://www.dnswl.org/, no trust [157.56.112.70 listed in list.dnswl.org] -0.0 RCVD_IN_MSPIKE_H2 RBL: Average reputation (+2) [157.56.112.70 listed in wl.mailspike.net] -0.0 SPF_PASS SPF: sender matches SPF record -0.0 SPF_HELO_PASS SPF: HELO matches SPF record -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] X-BeenThere: linux-snps-arc@lists.infradead.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: Linux on Synopsys ARC Processors List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: gilf@ezchip.com, Peter Zijlstra , talz@ezchip.com, linux-kernel@vger.kernel.org, cmetcalf@ezchip.com, Noam Camus Sender: "linux-snps-arc" Errors-To: linux-snps-arc-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org From: Noam Camus If we hold rwlock and interrupt occures we may end up spinning on it for ever during softirq. Note that this lock is an internal lock and since the lock is free to be used from any context, the lock needs to be IRQ-safe. Below you may see an example for interrupt we get while nl_table_lock is holding its rw->lock_mutex and we spinned on it for ever. The concept for the fix was taken from SPARC. [2015-05-12 19:16:12] Stack Trace: [2015-05-12 19:16:12] arc_unwind_core+0xb8/0x11c [2015-05-12 19:16:12] dump_stack+0x68/0xac [2015-05-12 19:16:12] _raw_read_lock+0xa8/0xac [2015-05-12 19:16:12] netlink_broadcast_filtered+0x56/0x35c [2015-05-12 19:16:12] nlmsg_notify+0x42/0xa4 [2015-05-12 19:16:13] neigh_update+0x1fe/0x44c [2015-05-12 19:16:13] neigh_event_ns+0x40/0xa4 [2015-05-12 19:16:13] arp_process+0x46e/0x5a8 [2015-05-12 19:16:13] __netif_receive_skb_core+0x358/0x500 [2015-05-12 19:16:13] process_backlog+0x92/0x154 [2015-05-12 19:16:13] net_rx_action+0xb8/0x188 [2015-05-12 19:16:13] __do_softirq+0xda/0x1d8 [2015-05-12 19:16:14] irq_exit+0x8a/0x8c [2015-05-12 19:16:14] arch_do_IRQ+0x6c/0xa8 [2015-05-12 19:16:14] handle_interrupt_level1+0xe4/0xf0 Signed-off-by: Noam Camus Cc: Peter Zijlstra --- arch/arc/include/asm/spinlock.h | 14 ++++++++++++++ 1 files changed, 14 insertions(+), 0 deletions(-) diff --git a/arch/arc/include/asm/spinlock.h b/arch/arc/include/asm/spinlock.h index db8c59d..800e7c4 100644 --- a/arch/arc/include/asm/spinlock.h +++ b/arch/arc/include/asm/spinlock.h @@ -610,7 +610,9 @@ static inline void arch_spin_unlock(arch_spinlock_t *lock) static inline int arch_read_trylock(arch_rwlock_t *rw) { int ret = 0; + unsigned long flags; + local_irq_save(flags); arch_spin_lock(&(rw->lock_mutex)); /* @@ -623,6 +625,7 @@ static inline int arch_read_trylock(arch_rwlock_t *rw) } arch_spin_unlock(&(rw->lock_mutex)); + local_irq_restore(flags); smp_mb(); return ret; @@ -632,7 +635,9 @@ static inline int arch_read_trylock(arch_rwlock_t *rw) static inline int arch_write_trylock(arch_rwlock_t *rw) { int ret = 0; + unsigned long flags; + local_irq_save(flags); arch_spin_lock(&(rw->lock_mutex)); /* @@ -646,6 +651,7 @@ static inline int arch_write_trylock(arch_rwlock_t *rw) ret = 1; } arch_spin_unlock(&(rw->lock_mutex)); + local_irq_restore(flags); return ret; } @@ -664,16 +670,24 @@ static inline void arch_write_lock(arch_rwlock_t *rw) static inline void arch_read_unlock(arch_rwlock_t *rw) { + unsigned long flags; + + local_irq_save(flags); arch_spin_lock(&(rw->lock_mutex)); rw->counter++; arch_spin_unlock(&(rw->lock_mutex)); + local_irq_restore(flags); } static inline void arch_write_unlock(arch_rwlock_t *rw) { + unsigned long flags; + + local_irq_save(flags); arch_spin_lock(&(rw->lock_mutex)); rw->counter = __ARCH_RW_LOCK_UNLOCKED__; arch_spin_unlock(&(rw->lock_mutex)); + local_irq_restore(flags); } #endif