From patchwork Sun Dec 27 13:23:26 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Noam Camus X-Patchwork-Id: 561157 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 54780140CDC for ; Mon, 28 Dec 2015 00:28:45 +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 1aDBNL-0000yB-Sl; Sun, 27 Dec 2015 13:28:43 +0000 Received: from mail-am1on0056.outbound.protection.outlook.com ([157.56.112.56] helo=emea01-am1-obe.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1aDBNJ-0000ur-Vf for linux-snps-arc@lists.infradead.org; Sun, 27 Dec 2015 13:28:43 +0000 Received: from VI1PR02MB1456.eurprd02.prod.outlook.com (10.165.232.150) by VI1PR02MB1230.eurprd02.prod.outlook.com (10.163.164.142) with Microsoft SMTP Server (TLS) id 15.1.361.13; Sun, 27 Dec 2015 13:28:19 +0000 Received: from HE1PR02CA0027.eurprd02.prod.outlook.com (10.162.33.37) by VI1PR02MB1456.eurprd02.prod.outlook.com (10.165.232.150) with Microsoft SMTP Server (TLS) id 15.1.361.13; Sun, 27 Dec 2015 13:28:17 +0000 Received: from DB3FFO11FD032.protection.gbl (2a01:111:f400:7e04::136) by HE1PR02CA0027.outlook.office365.com (2a01:111:e400:5149::37) with Microsoft SMTP Server (TLS) id 15.1.361.13 via Frontend Transport; Sun, 27 Dec 2015 13:28:17 +0000 Authentication-Results: spf=fail (sender IP is 212.179.42.66) smtp.mailfrom=ezchip.com; linaro.org; dkim=none (message not signed) header.d=none; linaro.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 DB3FFO11FD032.mail.protection.outlook.com (10.47.217.63) with Microsoft SMTP Server (TLS) id 15.1.355.15 via Frontend Transport; Sun, 27 Dec 2015 13:28: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; Sun, 27 Dec 2015 15:28:02 +0200 From: Noam Camus To: Subject: [PATCH v5 07/20] ARC: rwlock: disable interrupts in !LLSC variant Date: Sun, 27 Dec 2015 15:23:26 +0200 Message-ID: <1451222619-3610-8-git-send-email-noamc@ezchip.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1451222619-3610-1-git-send-email-noamc@ezchip.com> References: <1451222619-3610-1-git-send-email-noamc@ezchip.com> MIME-Version: 1.0 X-TM-AS-Product-Ver: SMEX-11.0.0.1191-8.000.1202-22026.007 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; DB3FFO11FD032; 1:cKYXzwMOgTkp5XFNsQUQU6UI3j3RKFsw07xIVMeM9Jd10Il2N14ZPQmdfPyJG1BeHqJAaSA0uAAuhA67BjSEP0q2zdnf1I2RVu1KY/TBNj422RQCrejYBW9gH5M2MxjdZABwdevSjefImwVzjAlCYKDjzshFHTv81+IXY5P43hEhohCb9VprH1zr5fQFfmZdsJQUcrImOMph2M3apU6WY+6GC3h+mgQyDylcHHuiQj1lcPnca996kvn6IxqIjJVqsTyK3/m8VBop6B5N/l7nhZ2xji0Eb+bn8v3EtWZ2xSaq+laS15Iu/y7TFRCG4hi9uq0+FyynyInGDKuvUGMBBFmYMVV0SPSs9REvmoLHpK+MmZl3VbyaQpspQyS02ExioF3P2g193iK4UoYlQwg1U1BTYqCeSA/j883FjzxTLtI= X-Forefront-Antispam-Report: CIP:212.179.42.66; CTRY:IL; IPV:NLI; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(2980300002)(1109001)(1110001)(339900001)(377424004)(199003)(189002)(87936001)(85426001)(36756003)(11100500001)(19580395003)(49486002)(105606002)(33646002)(106466001)(5003940100001)(76176999)(6806005)(47776003)(4001430100002)(92566002)(77096005)(2950100001)(50226001)(50466002)(1220700001)(110136002)(107886002)(5008740100001)(48376002)(586003)(5001970100001)(1096002)(189998001)(50986999)(2351001)(229853001)(19580405001)(104016004)(86362001); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR02MB1456; H:ezex10.ezchip.com; FPR:; SPF:Fail; PTR:ezmail.ezchip.com; A:1; MX:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; VI1PR02MB1456; 2:efadOkvf/wjSL++Hj5o8Iym2zKrq+2hqW1448hyT3EU895Ag8scoCCi0XhDxDrtdwTEewM7xUxBySU45QL+qW4qdvlX9Y0z1oW9H4Tva1/dcnmnCKDfCqK7pnXT8KZxb3xhPXxs/mIEKOZ4FAfznvg==; 3:OrpQAG8qFt1T3liICT7D37H81D6hYmAHWrfPu9H83w3BGa/jb4h479eAWSk7l8pD+nnMSqcNNg6UQn51kFDfY8vUP1T6B4DliLfK5CJosXTE2+Xo3kQgVdYRlPdrUszptFyfulmnA6fIDsnTIsZect8EptoV1SpdbVrpkf3uiXsDRch8VyA4URtI24EDZmiEN9y+HdAVdj2nMPC//Akyb6Okm3/uTiLNy1EsUwcwHUI=; 25:RaJOjI+VpIIcPjI8lrzPFjVr7uBfRA/WDrwmSi7ZV3nXPAW6hk2kZl0nFzwVz3M5yoE5rbXhw1fc5pejipJo47kNfeu2u3HZZCR2AOOs8cOHdohM2fxRUxeYZ/FTRcMQ0hmGdZLJMkNwdLEo5cxvUwf/cJmMAtbv9ooK7dilQdA9kVkgrmI+WC4ihQ+7i8ZGl33eVv/uBBzf9EwyJ4DwESPuVrT8n82pWHtwUL/nSRzau41sBjb8vrx/8HvNxjU1ciYylpOqPxnlPIenWXY9Sw==; 20:EonmKngsFOjIjI5XVwJhGHWOPNCj3q5lSgbbA7nIThYEuVlV0K0VOvXGf5Snf9XohJ/+VDd8FIaiwqhhEWB8op6uRyMWAB47QJNJ+b2CSVpZW9rDUhBrt0M9rNPgHvccC/iJuklUlVCZ8j9ExWOs+74HydN37J8d9kywjp3m70s= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:VI1PR02MB1456; 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:VI1PR02MB1456; BCL:0; PCL:0; RULEID:; SRVR:VI1PR02MB1456; X-Microsoft-Exchange-Diagnostics: 1; VI1PR02MB1456; 4:WZr6r7oFmTecGPL9m/XKxwo0/4ucUYFaFbLa2gGrkO3awienVKLOmSg+msBXvkUoqmlRMD791eKpzK50h94LnV9sLcSDxWHuQ3Q8f+ylAkn5nG3qKqKsWkWyywCe9K+rLjPtmy6t+OGK3pt3ejCEiu8T4KSsVIiBuCQzH4hMnrI5iB2yB3rJsb5+OBeeYFadBb67Cut4cp2yhWSAz+wVYQrhEjKB4ERi4MYGjf1XkaG7+IpM6Q/9sr0cy0BE21Tra18dA78T7FoMQtTDCmScow5XyZ0BSlodcvsFUWoNrr9EifVjfTA5oCcxmabqifRpg4k+NOgGC8bTYr8RqNV0FTJkMFhlMy8QAtqnL6e/ChOdYzjrmMSmFd5SZRDfcb5ppfQaw6Y6uwxhMhijT8PvlMDdqs48G8PUQzP4+Vm3Gy7MKZzEZKbwVJq4iVA5Tthc X-Forefront-PRVS: 0803A0241F X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; VI1PR02MB1456; 23:NA0EM1tnAr3TtQVTAwf7iEjGqRoUoOwzT07GfnPjg?= =?us-ascii?Q?1nwQIDotqPDN1J8c6XUpZCBOXbazvaLWzVlWMR4qFByLq4EaAm/kzfsdLFXX?= =?us-ascii?Q?w0EHxCgnhqJDAIB3bYCDmwNzULolu6Wl/KFLFLa3H4sJ12l/2bBn6BmGd+uP?= =?us-ascii?Q?G1Fv3H2h1hsMifUEinMRP32KbOgdlu2cOvcKsa4DvNfTksUhQ8FFPV/iPJe5?= =?us-ascii?Q?y3Ehw07O2HD6KAPYIwDu/2cJxW8RWbgPCTc5RNDG0J+8aZxmFnb+QT3TCGJu?= =?us-ascii?Q?tlMl96Ca0bQtb3LNkpCiql7r1KULv8X8F/xNWProp0OT0DykEnzDMfHLPplm?= =?us-ascii?Q?jt1hX20RdyZmKIbP0xR3MSEiDiuN0I9Sqv0ATefuD0HiACohYuZmtD556v8v?= =?us-ascii?Q?/S79mUub/Gig49DDSj/YTIFUSEEGsM+FXDv3nXYJS5dx5afUvi9SJn0sdSy3?= =?us-ascii?Q?kRqOP6JcuEOACd9Q47i4ZWwyMicqJ9GoK4KODlwrqGCalKBnm7oh9EJaJaz/?= =?us-ascii?Q?pgy0mclukoWp6kTOb7eJMl7r3W6DVZIibLGxV8BKLKJIYg0Un8gZCJ1T2M6i?= =?us-ascii?Q?y+cvbUTbq3AUGt6NplEdf2w+wVa8rE27H1QZqDNKh68gWkEAxLUTbGB0+btS?= =?us-ascii?Q?gpX/tw1N2cJ87OBSHIAGlLo+fidbNeSDEZ1g8vC17z+uzFU1GswMDLYbpXJw?= =?us-ascii?Q?cMkSI3neIFDH8SWrppiXJeCfx9MI3Nc37AGRhdM8j0UJA4o0wDBttHfAuiLK?= =?us-ascii?Q?4seSAT3w2MXgNeiv8Je4QUJkBmCongMioSgPep6oPfqR6xydtpZmpXH2QwgA?= =?us-ascii?Q?+2KzsacfjqH2WvW/UbfY+bBdILKadnP/jYHCewpACbV3P/O/ecpZSCHQ6ziT?= =?us-ascii?Q?qBLvicZ2CwqaXkJQyYKKasDAf0rPx1pqQjep1XDnD8iAo5jgagcnCrBIBwn6?= =?us-ascii?Q?FZhf+k9or+h2QwDz1T6KF0ir4rZ/tQCSXbyfY6zoh+XUEYUBK05TVVvJ9J3c?= =?us-ascii?Q?xyzRNVBE6/TRDHDGW+EnyqiQ7bFbRelmBmwR6s+KqtMrKfblXvPBZhyP76ck?= =?us-ascii?Q?WUssHP4o8uoD0EuVRFS8I87VxwDdcnGOfXtgiJwadmUyXHU+oeY69SBWiB8w?= =?us-ascii?Q?H6BPVUSZdw=3D?= X-Microsoft-Exchange-Diagnostics: 1; VI1PR02MB1456; 5:SpoJG3x62SmxZBytZAuV39eQLGcVGs14HUnu14pPs+Xt/dSymJVowQehtyujpD4kbeVOy9noURNhMDjy+KieCzl18I0icaBjBAAFRf+tUQpbcvzcR4J4r9bXlWu9iKXLdLZcqpCCvYvlt09Ih8Wfng==; 24:Hrj4GQU33PWXwJSbdyS/lkxH3DKN0OQFoNnz/MvzfYNg2Ks28AzggS6l4/OsN8wfr1K9IPZ2pbASu01/xjqVEfedLDUUm20aIAFmR+ENsEs= SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Dec 2015 13:28:16.2063 (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: VI1PR02MB1456 X-Microsoft-Exchange-Diagnostics: 1; VI1PR02MB1230; 2:b+xPHzdBZEvEsxhJR1k5+UW0drPyvK88Agbakd0T50rpAa0mZWt70b3Cj4m3Efh94A+leA5tjFxg9ZdnWZL+kx6oda5sK0bFW/g6tcQgW8WB5R3pj3xOx+LxyKYArxIcWAgsP80q0mMDH4xQbJTp9w==; 23:Un53wXRy8Aa47dyxPEvM/IfgrJ3EtTFFI9SnJF9KQDuPTXMl8R6hXsbUIaIWy8ZCJp2Sg3paXp4TscSBqvGyHRz2SKkVHxLrPOI9aMLRympIONrUNuv6TEKbTGbySux4H1WiMAW2rjowbnyC54aEtJ3aJtpHt/izIAHFfQbaXFHV7ChtB1Dhi1JYMVdmWtps X-OriginatorOrg: ezchip.com X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20151227_052842_510838_58DB713F X-CRM114-Status: UNSURE ( 8.19 ) 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.56 listed in list.dnswl.org] -0.0 RCVD_IN_MSPIKE_H2 RBL: Average reputation (+2) [157.56.112.56 listed in wl.mailspike.net] -0.0 SPF_HELO_PASS SPF: HELO matches SPF record -0.0 SPF_PASS SPF: sender 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: marc.zyngier@arm.com, cmetcalf@ezchip.com, daniel.lezcano@linaro.org, Noam Camus , linux-kernel@vger.kernel.org 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 Acked-by: 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