Received: by 2002:a25:e7d8:0:0:0:0:0 with SMTP id e207csp1037540ybh; Wed, 18 Mar 2020 13:47:58 -0700 (PDT) X-Google-Smtp-Source: ADFU+vvQ0pJFblzYcRhyti7OK0XNTEG2021FanjFHXd3FRdqEKgdXW3nt52EAZFeuxFKD13CxRtD X-Received: by 2002:a05:6830:19ea:: with SMTP id t10mr5541396ott.200.1584564478698; Wed, 18 Mar 2020 13:47:58 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1584564478; cv=none; d=google.com; s=arc-20160816; b=pZ6Yzod5rzbNPrKuobxoFqIht35l49Gt6775Weh4QX2jkM//noZx2tmEZCf5HSO4EM Tr1IQBOdgFZqKKNT/tXqY2h5psIc+zr0KuRA5MjtMis3KLGCRQ8ULgTj2cgTtmXyKPny 7EY9PKZaZ532lHgcZvlp0KCQjFPuRKuvSngCszawaxImitlbg7YPdMYU7F1dvhAxtRuf DNid2IycyOcyKvVUVl2l3NyiJYkWrmogYRcVO40R8bdOdJ60wEsDKRLk31ito1t6WfVk Tq3YMM35nLdmnkg1oKSJTMipvncyjMacCuMlsQySAywQxsQrIQKGhIQDDMLE1iJfrRCc QRgA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:references:subject:cc:to :from:date:user-agent:message-id; bh=7N/o6lFWzl4IPsDrMWn/QedbN1NH1n8mt4I2LxhK2jo=; b=GycIEghYRnj9vN2CjBqyNmNTbeF214mOMebOjlC/H569DsPa0tBhbfT9RZsBeSJ6mK DjsvnTAxVgY1XvxVUHTYXZe/X9KCtNmzD0RiQF16Sq9u4PZ3hWu8eJZZOeEEZijiaZIF +meJuz6ACOYV0kNXTbv5L1qRjtGvBY0KK3dtYSzLrij69PQME+IgfFjcwwkuTHwwpvGn oBR8no0SNETnJt1JNUx1LZtkhRIZcuVln7lfCnT/afghZAVjA19jjj/aWYiZ5ldVVJaR jwD3JwEMqqHnvXqJ5OMB9KXxCOEi7j4K4Yb4lta96e3wNHFVB+2S5vU0mK1i0Bb2N3T/ +O1Q== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-wireless-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id n26si54268otr.78.2020.03.18.13.47.47; Wed, 18 Mar 2020 13:47:58 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-wireless-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-wireless-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727206AbgCRUr3 (ORCPT + 99 others); Wed, 18 Mar 2020 16:47:29 -0400 Received: from Galois.linutronix.de ([193.142.43.55]:58408 "EHLO Galois.linutronix.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727168AbgCRUr1 (ORCPT ); Wed, 18 Mar 2020 16:47:27 -0400 Received: from p5de0bf0b.dip0.t-ipconnect.de ([93.224.191.11] helo=nanos.tec.linutronix.de) by Galois.linutronix.de with esmtpsa (TLS1.2:DHE_RSA_AES_256_CBC_SHA256:256) (Exim 4.80) (envelope-from ) id 1jEfaO-0006CB-Vy; Wed, 18 Mar 2020 21:46:45 +0100 Received: from nanos.tec.linutronix.de (localhost [IPv6:::1]) by nanos.tec.linutronix.de (Postfix) with ESMTP id 61F721040CC; Wed, 18 Mar 2020 21:46:36 +0100 (CET) Message-Id: <20200318204408.010461877@linutronix.de> User-Agent: quilt/0.65 Date: Wed, 18 Mar 2020 21:43:08 +0100 From: Thomas Gleixner To: LKML Cc: Peter Zijlstra , Linus Torvalds , Ingo Molnar , Will Deacon , "Paul E . McKenney" , Joel Fernandes , Steven Rostedt , Randy Dunlap , Oleg Nesterov , Davidlohr Bueso , Sebastian Andrzej Siewior , Logan Gunthorpe , Kurt Schwemmer , Bjorn Helgaas , linux-pci@vger.kernel.org, Felipe Balbi , Greg Kroah-Hartman , linux-usb@vger.kernel.org, Kalle Valo , "David S. Miller" , linux-wireless@vger.kernel.org, netdev@vger.kernel.org, Michael Ellerman , Arnd Bergmann , linuxppc-dev@lists.ozlabs.org Subject: [patch V2 06/15] rcuwait: Add @state argument to rcuwait_wait_event() References: <20200318204302.693307984@linutronix.de> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 X-Linutronix-Spam-Score: -1.0 X-Linutronix-Spam-Level: - X-Linutronix-Spam-Status: No , -1.0 points, 5.0 required, ALL_TRUSTED=-1,SHORTCIRCUIT=-0.0001 Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org Extend rcuwait_wait_event() with a state variable so that it is not restricted to UNINTERRUPTIBLE waits. Signed-off-by: Peter Zijlstra (Intel) Signed-off-by: Thomas Gleixner Cc: Oleg Nesterov Cc: Davidlohr Bueso --- include/linux/rcuwait.h | 12 ++++++++++-- kernel/locking/percpu-rwsem.c | 2 +- 2 files changed, 11 insertions(+), 3 deletions(-) --- a/include/linux/rcuwait.h +++ b/include/linux/rcuwait.h @@ -3,6 +3,7 @@ #define _LINUX_RCUWAIT_H_ #include +#include /* * rcuwait provides a way of blocking and waking up a single @@ -30,23 +31,30 @@ extern void rcuwait_wake_up(struct rcuwa * The caller is responsible for locking around rcuwait_wait_event(), * such that writes to @task are properly serialized. */ -#define rcuwait_wait_event(w, condition) \ +#define rcuwait_wait_event(w, condition, state) \ ({ \ + int __ret = 0; \ rcu_assign_pointer((w)->task, current); \ for (;;) { \ /* \ * Implicit barrier (A) pairs with (B) in \ * rcuwait_wake_up(). \ */ \ - set_current_state(TASK_UNINTERRUPTIBLE); \ + set_current_state(state); \ if (condition) \ break; \ \ + if (signal_pending_state(state, current)) { \ + __ret = -EINTR; \ + break; \ + } \ + \ schedule(); \ } \ \ WRITE_ONCE((w)->task, NULL); \ __set_current_state(TASK_RUNNING); \ + __ret; \ }) #endif /* _LINUX_RCUWAIT_H_ */ --- a/kernel/locking/percpu-rwsem.c +++ b/kernel/locking/percpu-rwsem.c @@ -162,7 +162,7 @@ void percpu_down_write(struct percpu_rw_ */ /* Wait for all now active readers to complete. */ - rcuwait_wait_event(&sem->writer, readers_active_check(sem)); + rcuwait_wait_event(&sem->writer, readers_active_check(sem), TASK_UNINTERRUPTIBLE); } EXPORT_SYMBOL_GPL(percpu_down_write);