Received: by 2002:a05:6a10:c604:0:0:0:0 with SMTP id y4csp2351515pxt; Sun, 8 Aug 2021 20:56:39 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzzpvVnqSEJJ5Ug26940yszGO6+N3EL1z4ONJFFhKgqTULgaeCnAUO7aCmWFKwKqREMvXQd X-Received: by 2002:a50:ff19:: with SMTP id a25mr26505150edu.311.1628481398907; Sun, 08 Aug 2021 20:56:38 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1628481398; cv=none; d=google.com; s=arc-20160816; b=0ZzaOyqMO8262FAa/BqhxYMZrnciCHMiPIdP6FJ7xZRMcd7F65K4RcrEWYTTpvFol/ 5WbqMtDO6rGbL8tDt8D42vWv0Gndo8j7pzdCvO2B4M7PnbkjZppi8BkcmyVDm+6y4/ZA jpHDq14V6hEcdRsKdm8crJmSw/vFHu1Xlzn75GMzTuA/0gy/o5jJKo7VSTW48hLwnxUA RzUUeoa+OoQUY7eG+wN+fc2iVajki5QYoByCXjFue1dhr6kusWIcdGGAlb1mo5SWguJj 1Pin0iGVcJvw6riRp1kYHgic++gYbwg7gL0P2hOWfMkh1EEMqwsExWtHXFcZiDTrNFB+ YzYQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:in-reply-to :mime-version:user-agent:date:message-id:from:references:cc:to :subject; bh=ILNhPBvHNWc4C89DO3aGiqtIyeM/e/GD9Q/nJ6jfVnU=; b=qNa22tdDXHGTXmmxC37P5qc6qn1jhTMS8ysGTqvtfHXnEtYMk+blokY3CyJLWXTbjx RYHgsRO3EzurJYQRyQM32G0lqLzBDmPxRs1JvMDc1di6j3oUhsLlf5y0gxhqjMn4T/fi ZjodwrTjdZEYeqdcMiWwpqMH4pfVkbq40fDMEcijz7/GBpZl4XmnafWd0esYIFY1R9Yd pYlnf3ATfiTgZ+URDVjzjHoy9sIgqYPD96jeZYYPmvryTLjXF6N83Bb8nZR66YieGYPP wy4hcLcRdbBYEYvB2idgtD9VFDD8NQvtvWS5vzoKu/l43VIN9f5WfCXqm+N2IerhLxKT iSqQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=huawei.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id p17si3248264edx.574.2021.08.08.20.56.11; Sun, 08 Aug 2021 20:56:38 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=huawei.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232801AbhHIDvc (ORCPT + 99 others); Sun, 8 Aug 2021 23:51:32 -0400 Received: from szxga08-in.huawei.com ([45.249.212.255]:13251 "EHLO szxga08-in.huawei.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231459AbhHIDvc (ORCPT ); Sun, 8 Aug 2021 23:51:32 -0400 Received: from dggemv711-chm.china.huawei.com (unknown [172.30.72.56]) by szxga08-in.huawei.com (SkyGuard) with ESMTP id 4GjhvQ15l4z1CTqj; Mon, 9 Aug 2021 11:50:58 +0800 (CST) Received: from dggema774-chm.china.huawei.com (10.1.198.216) by dggemv711-chm.china.huawei.com (10.1.198.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256) id 15.1.2176.2; Mon, 9 Aug 2021 11:51:09 +0800 Received: from [10.67.102.197] (10.67.102.197) by dggema774-chm.china.huawei.com (10.1.198.216) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2176.2; Mon, 9 Aug 2021 11:51:09 +0800 Subject: Re: [PATCH] semaphore: Add might_sleep() to down_*() family To: Waiman Long , , , , , CC: , , References: <20210809021215.19991-1-nixiaoming@huawei.com> <48cddad4-0388-ae8b-f98b-1629b9ae590a@redhat.com> From: Xiaoming Ni Message-ID: <1a5b0f50-b071-2d1c-5277-b6d7f652c257@huawei.com> Date: Mon, 9 Aug 2021 11:51:09 +0800 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.0.1 MIME-Version: 1.0 In-Reply-To: <48cddad4-0388-ae8b-f98b-1629b9ae590a@redhat.com> Content-Type: text/plain; charset="utf-8"; format=flowed Content-Transfer-Encoding: 8bit X-Originating-IP: [10.67.102.197] X-ClientProxiedBy: dggems702-chm.china.huawei.com (10.3.19.179) To dggema774-chm.china.huawei.com (10.1.198.216) X-CFilter-Loop: Reflected Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 2021/8/9 11:01, Waiman Long wrote: > On 8/8/21 10:12 PM, Xiaoming Ni wrote: >> Semaphore is sleeping lock. Add might_sleep() to down*() family >> (with exception of down_trylock()) to detect atomic context sleep. >> >> Previously discussed with Peter Zijlstra, see link: >> >> https://lore.kernel.org/lkml/20210806082320.GD22037@worktop.programming.kicks-ass.net >> >> >> Signed-off-by: Xiaoming Ni >> --- >>   kernel/locking/semaphore.c | 4 ++++ >>   1 file changed, 4 insertions(+) >> >> diff --git a/kernel/locking/semaphore.c b/kernel/locking/semaphore.c >> index 9aa855a96c4a..9ee381e4d2a4 100644 >> --- a/kernel/locking/semaphore.c >> +++ b/kernel/locking/semaphore.c >> @@ -54,6 +54,7 @@ void down(struct semaphore *sem) >>   { >>       unsigned long flags; >> +    might_sleep(); >>       raw_spin_lock_irqsave(&sem->lock, flags); >>       if (likely(sem->count > 0)) >>           sem->count--; >> @@ -77,6 +78,7 @@ int down_interruptible(struct semaphore *sem) >>       unsigned long flags; >>       int result = 0; >> +    might_sleep(); >>       raw_spin_lock_irqsave(&sem->lock, flags); >>       if (likely(sem->count > 0)) >>           sem->count--; >> @@ -103,6 +105,7 @@ int down_killable(struct semaphore *sem) >>       unsigned long flags; >>       int result = 0; >> +    might_sleep(); >>       raw_spin_lock_irqsave(&sem->lock, flags); >>       if (likely(sem->count > 0)) >>           sem->count--; >> @@ -157,6 +160,7 @@ int down_timeout(struct semaphore *sem, long timeout) >>       unsigned long flags; >>       int result = 0; >> +    might_sleep(); >>       raw_spin_lock_irqsave(&sem->lock, flags); >>       if (likely(sem->count > 0)) >>           sem->count--; > > I think it is simpler to just put a "might_sleep()" in __down_common() > which is the function where sleep can actually happen. > If the actual atomic context hibernation occurs, the corresponding alarm log is generated in __schedule_bug(). __schedule() --> schedule_debug() --> __schedule_bug() However, "might_sleep()" indicates the possibility of sleep, so that code writers can identify and fix the problem as soon as possible, but does not trigger atomic context sleep. Is it better to put "might_sleep()" in each down API entry than __down_common() to help identify potential code problems? Thanks Xiaoming Ni