From patchwork Sat Mar 26 13:40:59 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hillf Danton X-Patchwork-Id: 12792343 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id D6157C433F5 for ; Sat, 26 Mar 2022 13:41:17 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 4982A6B0071; Sat, 26 Mar 2022 09:41:17 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 446D86B0073; Sat, 26 Mar 2022 09:41:17 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 335E68D0001; Sat, 26 Mar 2022 09:41:17 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (relay.a.hostedemail.com [64.99.140.24]) by kanga.kvack.org (Postfix) with ESMTP id 23AA36B0071 for ; Sat, 26 Mar 2022 09:41:17 -0400 (EDT) Received: from smtpin15.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id 894CD91F for ; Sat, 26 Mar 2022 13:41:16 +0000 (UTC) X-FDA: 79286648952.15.CD38960 Received: from r3-11.sinamail.sina.com.cn (r3-11.sinamail.sina.com.cn [202.108.3.11]) by imf13.hostedemail.com (Postfix) with SMTP id 620D320029 for ; Sat, 26 Mar 2022 13:41:13 +0000 (UTC) Received: from unknown (HELO localhost.localdomain)([114.249.57.134]) by sina.com (172.16.97.27) with ESMTP id 623F17F30002E605; Sat, 26 Mar 2022 21:41:09 +0800 (CST) X-Sender: hdanton@sina.com X-Auth-ID: hdanton@sina.com X-SMAIL-MID: 78017749283464 From: Hillf Danton To: Waiman Long Cc: Hillf Danton , Peter Zijlstra , MM , LKML Subject: [RFC] locking/rwsem: dont wake up wwaiter in case of lock holder Date: Sat, 26 Mar 2022 21:40:59 +0800 Message-Id: <20220326134059.4082-1-hdanton@sina.com> MIME-Version: 1.0 X-Stat-Signature: kgff8icrcxfk33bk6yuauh85tph6p3c7 Authentication-Results: imf13.hostedemail.com; dkim=none; spf=pass (imf13.hostedemail.com: domain of hdanton@sina.com designates 202.108.3.11 as permitted sender) smtp.mailfrom=hdanton@sina.com; dmarc=none X-Rspam-User: X-Rspamd-Server: rspam08 X-Rspamd-Queue-Id: 620D320029 X-HE-Tag: 1648302073-200344 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000546, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: In the slowpath of down for write, we bail out in case of signal received and try to wake up any pending waiter but it makes no sense to wake up a write waiter given any lock holder, either write or read. The RFC is do nothing for wwaiter if any lock holder present - they will fill their duty at lock release time. Only for thoughts now. Hillf --- x/kernel/locking/rwsem.c +++ y/kernel/locking/rwsem.c @@ -418,6 +418,8 @@ static void rwsem_mark_wake(struct rw_se waiter = rwsem_first_waiter(sem); if (waiter->type == RWSEM_WAITING_FOR_WRITE) { + if (RWSEM_LOCK_MASK & atomic_long_read(&sem->count)) + return; if (wake_type == RWSEM_WAKE_ANY) { /* * Mark writer at the front of the queue for wakeup.