Received: by 2002:a05:6a10:f347:0:0:0:0 with SMTP id d7csp21793pxu; Thu, 3 Dec 2020 18:04:54 -0800 (PST) X-Google-Smtp-Source: ABdhPJzU1TtrIpduxQsBtKiU3YS8O/1c1tBGCwllMAMHeNPL5X/ZddEXL1zJ4SYeSpwNal6LNYF7 X-Received: by 2002:a17:906:a114:: with SMTP id t20mr4951432ejy.257.1607047494119; Thu, 03 Dec 2020 18:04:54 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1607047494; cv=none; d=google.com; s=arc-20160816; b=R4ApgfN7zetUcwIDuuIYyyUbmzEJJAPXmXiEvwf9d37fyURZHueaV3ALHbnIW/tDd+ bLidhkPqyXMKcAvrAEt+Le8u29qpN4p3nkpQ3ii6ZGquR5QLFXDacYSt5hl8IWdDsqUu pbzz3UT5aBjs1wVaR9q+xYeXjdIyJgd825Ufm1R+u35EQgAi3beF9YFMdU5/U7UYBfZi MKMUCPSYovuhUyhxt0Pz+3+o4P3JDDRJpwVInN2kKnIDW+X03q1+uclurCFlKqE2viJK ZDRR0IPcUyV3K9GgcJWzPlN2rBhvCMM7R7qFuMaHM0MXOGNZftHL9iP2tsYyYmIZBapZ kz4Q== 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:organization :from:references:cc:to:subject:dkim-signature; bh=AO9KskpXVmAduaic0zCXBgWNAte8nJh9/1a58DWq0Gw=; b=qfckjgPZO9nMMsdAzq+hP3AbPiEu42n7aovHrFmX57SSzdoJ18+eCT8NCPEgShteFf GnNKGy97fu8hpcVWeR2UneVIJfYJ8tvfSZR5KySLsFLP3wSDVHkqutGXIY8zouE8BBHR l+904JyKygEWZOumsTWkt3Dm5ZvbFZHQSRbXq+dy6LPvigL15Pl5iIXER7QTQoHaoB5c LMBov9GFIwrE/zIyA2kBSI+h5qZPkWsvIPUP7dctIu1E6b3wS0w3TnttrJnpMnbTzp05 +PPdxCBMW/c8GZd8NCBmCTfPya26sr72khns7849S2dPnUcRW2wq/YWVYd9OPVkhF3R6 Zh+w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b="Tnz/EzaC"; 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 p15si2058845edx.69.2020.12.03.18.04.30; Thu, 03 Dec 2020 18:04:54 -0800 (PST) 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="Tnz/EzaC"; 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 S1726337AbgLDCAw (ORCPT + 99 others); Thu, 3 Dec 2020 21:00:52 -0500 Received: from us-smtp-delivery-124.mimecast.com ([63.128.21.124]:22515 "EHLO us-smtp-delivery-124.mimecast.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725960AbgLDCAv (ORCPT ); Thu, 3 Dec 2020 21:00:51 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1607047165; 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=AO9KskpXVmAduaic0zCXBgWNAte8nJh9/1a58DWq0Gw=; b=Tnz/EzaCTvjOVaIZWSQWsCKff+UzSA+d7jpCOcht3DHtw8vgzbVb4oaIIb0x2deyEJW9hN oaEZ7TjExqdXvtCmy+kHy+L9bvXGgRCrV5qiuiDnfxIGRHN91hbwyhbBuUb4xYJ7xP7HX8 bsV7E5nRoAxL4hnpOLH8RDuEWI4uN8s= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-170-ESXzDMVUOfKMufvWxj-Q8g-1; Thu, 03 Dec 2020 20:59:21 -0500 X-MC-Unique: ESXzDMVUOfKMufvWxj-Q8g-1 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id DD4391005513; Fri, 4 Dec 2020 01:59:18 +0000 (UTC) Received: from llong.remote.csb (ovpn-117-98.rdu2.redhat.com [10.10.117.98]) by smtp.corp.redhat.com (Postfix) with ESMTP id 319671001901; Fri, 4 Dec 2020 01:59:14 +0000 (UTC) Subject: Re: [PATCH 2/3] rwsem: Implement down_read_interruptible To: "Eric W. Biederman" , linux-kernel@vger.kernel.org Cc: Linus Torvalds , Peter Zijlstra , Ingo Molnar , Will Deacon , Jann Horn , Vasiliy Kulikov , Al Viro , Bernd Edlinger , Oleg Nesterov , Christopher Yeoh , Cyrill Gorcunov , Sargun Dhillon , Christian Brauner , Arnd Bergmann , Arnaldo Carvalho de Melo References: <87tut2bqik.fsf@x220.int.ebiederm.org> <87k0tybqfy.fsf@x220.int.ebiederm.org> From: Waiman Long Organization: Red Hat Message-ID: <620f0908-c70a-9e54-e1b5-71d086b20756@redhat.com> Date: Thu, 3 Dec 2020 20:59:13 -0500 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.12.0 MIME-Version: 1.0 In-Reply-To: <87k0tybqfy.fsf@x220.int.ebiederm.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Content-Language: en-US X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 12/3/20 3:11 PM, Eric W. Biederman wrote: > In preparation for converting exec_update_mutex to a rwsem so that > multiple readers can execute in parallel and not deadlock, add > down_read_interruptible. This is needed for perf_event_open to be > converted (with no semantic changes) from working on a mutex to > wroking on a rwsem. > > Cc: Peter Zijlstra > Cc: Ingo Molnar > Cc: Will Deacon > Signed-off-by: Eric W. Biederman > --- > include/linux/rwsem.h | 1 + > kernel/locking/rwsem.c | 26 ++++++++++++++++++++++++++ > 2 files changed, 27 insertions(+) > > diff --git a/include/linux/rwsem.h b/include/linux/rwsem.h > index 13021b08b2ed..4c715be48717 100644 > --- a/include/linux/rwsem.h > +++ b/include/linux/rwsem.h > @@ -123,6 +123,7 @@ static inline int rwsem_is_contended(struct rw_semaphore *sem) > * lock for reading > */ > extern void down_read(struct rw_semaphore *sem); > +extern int __must_check down_read_interruptible(struct rw_semaphore *sem); > extern int __must_check down_read_killable(struct rw_semaphore *sem); > > /* > diff --git a/kernel/locking/rwsem.c b/kernel/locking/rwsem.c > index 54d11cb97551..a163542d178e 100644 > --- a/kernel/locking/rwsem.c > +++ b/kernel/locking/rwsem.c > @@ -1345,6 +1345,18 @@ static inline void __down_read(struct rw_semaphore *sem) > } > } > > +static inline int __down_read_interruptible(struct rw_semaphore *sem) > +{ > + if (!rwsem_read_trylock(sem)) { > + if (IS_ERR(rwsem_down_read_slowpath(sem, TASK_INTERRUPTIBLE))) > + return -EINTR; > + DEBUG_RWSEMS_WARN_ON(!is_rwsem_reader_owned(sem), sem); > + } else { > + rwsem_set_reader_owned(sem); > + } > + return 0; > +} > + > static inline int __down_read_killable(struct rw_semaphore *sem) > { > if (!rwsem_read_trylock(sem)) { > @@ -1495,6 +1507,20 @@ void __sched down_read(struct rw_semaphore *sem) > } > EXPORT_SYMBOL(down_read); > > +int __sched down_read_interruptible(struct rw_semaphore *sem) > +{ > + might_sleep(); > + rwsem_acquire_read(&sem->dep_map, 0, 0, _RET_IP_); > + > + if (LOCK_CONTENDED_RETURN(sem, __down_read_trylock, __down_read_interruptible)) { > + rwsem_release(&sem->dep_map, _RET_IP_); > + return -EINTR; > + } > + > + return 0; > +} > +EXPORT_SYMBOL(down_read_interruptible); > + > int __sched down_read_killable(struct rw_semaphore *sem) > { > might_sleep(); Acked-by: Waiman Long -Longman