Received: by 2002:a05:6a10:c604:0:0:0:0 with SMTP id y4csp2333446pxt; Sun, 8 Aug 2021 20:15:41 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwaVMnk35ZQ9G8ug/B8EE11iSj/COp2wAWPOt/K7UJUpm+wVu/JfZ8sTAMQRelJwltpHPdQ X-Received: by 2002:a17:906:549:: with SMTP id k9mr18490592eja.299.1628478940972; Sun, 08 Aug 2021 20:15:40 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1628478940; cv=none; d=google.com; s=arc-20160816; b=vo+doysE2xjOza/KlGgUHBPj7Inl9XuhAzRd9iuckPQPoTw2YedSIRPxHchHiq6D6s Cq0fYoRdmp4Q28IOsQQl94RRyVH6UnhH5MQdagnMnSJ9tUnfL+G9e9+cc9nfdn7o4UEJ 6S6LwotjyMuQz3ao7RNd4W6gTzvbhxCH7LRLzSpx6vLVb3r69rbyTHpittXejWMc+/5v kD/eYEFVOs0FKl2yugbfXM6wGw0nHguMGlMrdjT/8Bwxb7pxCxtsz/K9+1C1G3v2ERKj cR5y6CXaqQ4yeP1OHbjmObh6i0mRe4Cn5vuVTfXbWAXI02i/H+W+LdNxoTsxHmjDOvwu V8dA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-language:content-transfer-encoding :in-reply-to:mime-version:user-agent:date:message-id:references:cc :to:subject:from:dkim-signature; bh=H4dSjgKQoH8rg2Z/W5pbCkJL08kojd3OkQAS8xVSCOU=; b=ufgLAbX9Hm1g+fx+TX9zP3QZ+2LsaR0Q+MqdYAUjr2YC0NaeYFuos9SS+hk2UHajhR aJl2ijNNhnHbySDxTynD2XvDBdGsqFqWnzJ76HF5u8UH35BBPZhDNlSplnK2XTV8BFLe 39Mygy3Q1SqlBP14TNNoxjqXfOadcUIMDBoAtqFA1blS9d5dalm0rZ3iFLrCj1Z3Iw0M 0VwFW6U9jE9uIkkcSoxd34Hq8pZtTsDPWN38WLYs4HwQEiH822HID8gcGLLo/mHi2ndX Ds0AHHwL2ERAVqUnANbzXhFdAsQrw5E7s0Li2b2/wEMgy0iLiu3qIefe54iAEvU6sy0H WHSg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=J4uttgq1; 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=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id e9si14929977eja.746.2021.08.08.20.15.18; Sun, 08 Aug 2021 20:15:40 -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; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=J4uttgq1; 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=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232650AbhHIDBh (ORCPT + 99 others); Sun, 8 Aug 2021 23:01:37 -0400 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:30539 "EHLO us-smtp-delivery-124.mimecast.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231675AbhHIDBb (ORCPT ); Sun, 8 Aug 2021 23:01:31 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1628478070; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=H4dSjgKQoH8rg2Z/W5pbCkJL08kojd3OkQAS8xVSCOU=; b=J4uttgq1fiwPm/Yhe9CE3K4lwRrr5s/EuHAdUe6RzXu1ryFMmAOjRqsfO/toMZ+JXbYQLT eYExN1X0XgjmzBQKclW2q9AjJ7vv61L9KMHEEF1xDQqAo5GtibUSV4DL3v+W5lD+U8j0rN xDNZUHF9RZzwZV7odUNy4N4OJkR/xGw= Received: from mail-qk1-f199.google.com (mail-qk1-f199.google.com [209.85.222.199]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-507-ClZJs3R-Nzybgsds2964xQ-1; Sun, 08 Aug 2021 23:01:09 -0400 X-MC-Unique: ClZJs3R-Nzybgsds2964xQ-1 Received: by mail-qk1-f199.google.com with SMTP id w2-20020a3794020000b02903b54f40b442so11712292qkd.0 for ; Sun, 08 Aug 2021 20:01:09 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:subject:to:cc:references:message-id:date :user-agent:mime-version:in-reply-to:content-transfer-encoding :content-language; bh=H4dSjgKQoH8rg2Z/W5pbCkJL08kojd3OkQAS8xVSCOU=; b=UkmDmRy/Fa1OyWhpSLljdDAXqO4UWJaNzOi2v5LBG2PYNKMPsjIlq4vZVPPxWL2DSm n1P456V7FWgi1w/KKW0b2Puj7iRvq0khEe/xp0xiol5+r/sjjqwNcHjDGn/FlV4pMVvB ynxkwjcHZYju6vzYd933Mn0Vqx/E4KTK1s7GihAvC/oyAt2xxRDai1KDfjE1GbaNxoY2 M0cHXyW/TLHFFQDRuaG8d/vF35PJfpdoNptXE9eNYbIci/ydPgJOHHL5LDrFsd9kTv2q S51NhrwRKiXBbEO2jcSkeD5wtedWaE4CoLVmFH2AHgEoUJFWTJzoU8R3LDeMAlWnZUBN +olg== X-Gm-Message-State: AOAM531srVRD/QthG8p2kOcSBDSuefppxKg6+9Anzw+Aafemm8+xxrud oI8/Dx+26r+kK7eVhEEHsCMvCDZMOoYcXIrTLyiBzc2TK0DLQuRea4IqzPvtzPy6iA9b5zPLtI8 yplnPS9oJEx0DLMZL3WrYcb/d X-Received: by 2002:a05:6214:2025:: with SMTP id 5mr21702146qvf.8.1628478069239; Sun, 08 Aug 2021 20:01:09 -0700 (PDT) X-Received: by 2002:a05:6214:2025:: with SMTP id 5mr21702132qvf.8.1628478069069; Sun, 08 Aug 2021 20:01:09 -0700 (PDT) Received: from llong.remote.csb ([2601:191:8500:76c0::cdbc]) by smtp.gmail.com with ESMTPSA id l4sm8574579qkd.77.2021.08.08.20.01.07 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sun, 08 Aug 2021 20:01:08 -0700 (PDT) From: Waiman Long X-Google-Original-From: Waiman Long Subject: Re: [PATCH] semaphore: Add might_sleep() to down_*() family To: Xiaoming Ni , linux-kernel@vger.kernel.org, peterz@infradead.org, mingo@redhat.com, will@kernel.org, boqun.feng@gmail.com Cc: wangle6@huawei.com, xiaoqian9@huawei.com, shaolexi@huawei.com References: <20210809021215.19991-1-nixiaoming@huawei.com> Message-ID: <48cddad4-0388-ae8b-f98b-1629b9ae590a@redhat.com> Date: Sun, 8 Aug 2021 23:01:07 -0400 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.11.0 MIME-Version: 1.0 In-Reply-To: <20210809021215.19991-1-nixiaoming@huawei.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Content-Language: en-US Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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. Cheers, Longman