From mboxrd@z Thu Jan 1 00:00:00 1970 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 874EAC001E0 for ; Thu, 10 Aug 2023 12:14:02 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id C1FF16B0071; Thu, 10 Aug 2023 08:14:01 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id BCF216B0074; Thu, 10 Aug 2023 08:14:01 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id A97166B0075; Thu, 10 Aug 2023 08:14:01 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 9705D6B0071 for ; Thu, 10 Aug 2023 08:14:01 -0400 (EDT) Received: from smtpin02.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 6031D40FB4 for ; Thu, 10 Aug 2023 12:14:01 +0000 (UTC) X-FDA: 81108086682.02.18ADCEA Received: from desiato.infradead.org (desiato.infradead.org [90.155.92.199]) by imf18.hostedemail.com (Postfix) with ESMTP id 333791C0009 for ; Thu, 10 Aug 2023 12:13:55 +0000 (UTC) Authentication-Results: imf18.hostedemail.com; dkim=pass header.d=infradead.org header.s=desiato.20200630 header.b=dwo7Y9o3; spf=none (imf18.hostedemail.com: domain of peterz@infradead.org has no SPF policy when checking 90.155.92.199) smtp.mailfrom=peterz@infradead.org; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1691669638; h=from:from:sender: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:dkim-signature; bh=Pa93SQq8YxZvrEKsoU75557vrKrxyHId0AZ4PcwSo4Y=; b=nRKakwOucKTeeARx2NYTRNiKHtIcuA3UrceFmLwT4m5RDNtHmp/j+/yz3Jh5dCWuxAM+LB CPc7dvagUr/yeB+W5Gx2WXayksznsAv3IKATg4PYsXQj8Uv8aPVhIIYRC8LUBR60LxfO57 5EmIjSfXMjRX9CwfhyPvQ/cgr83vew0= ARC-Authentication-Results: i=1; imf18.hostedemail.com; dkim=pass header.d=infradead.org header.s=desiato.20200630 header.b=dwo7Y9o3; spf=none (imf18.hostedemail.com: domain of peterz@infradead.org has no SPF policy when checking 90.155.92.199) smtp.mailfrom=peterz@infradead.org; dmarc=none ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1691669638; a=rsa-sha256; cv=none; b=58YhHu5Wwd7ZGNaq4Vp6GcKMg1sSiixfq3dTCv7WO823kF9W6vZtH2MlRTppLw5kiA0Dly g4uBvEtMO2Jrm7U7bAnnnVUO7NapcsWT+U7n8gLrNL2DrX50PPddldt+q1bkR5N/7Pnuur CUROD4wDVda7Jjrkw1xyaefyYK4qt7k= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=desiato.20200630; h=In-Reply-To:Content-Transfer-Encoding: Content-Type:MIME-Version:References:Message-ID:Subject:Cc:To:From:Date: Sender:Reply-To:Content-ID:Content-Description; bh=Pa93SQq8YxZvrEKsoU75557vrKrxyHId0AZ4PcwSo4Y=; b=dwo7Y9o31EfEU/bYIBl9bXJKLH torAPvffwW+hDI0Lcp8R3NjEiR1GkUBebEqf/qPL4X/6K9LRK9nE1sJKF9bAVzXMsAz1fIGTdHTvs sc+sjSVxeXNaze3hFt/+dmVeGd819Zz7EWhgiIYSzEgotI3Ku+JK/w8gVffaAGz/7R1JmNEsuQI0E NqBf3UdiCPxEh34gd12aMDA/Epr4AwFcIF/SxnDvUmNj8Ry9tzIZe+JZIVhZEHLhTHfijHm2iQqOD +SyvFViybrcsDO7dDzEUuu/0ih8LEqBJE1XZOqrm7pzQ/9VfzAEvm5eW7J7fepkjuxlGOXvfICjpN liX8T4vw==; Received: from j130084.upc-j.chello.nl ([24.132.130.84] helo=noisy.programming.kicks-ass.net) by desiato.infradead.org with esmtpsa (Exim 4.96 #2 (Red Hat Linux)) id 1qU4Xu-006U7N-1l; Thu, 10 Aug 2023 12:13:42 +0000 Received: from hirez.programming.kicks-ass.net (hirez.programming.kicks-ass.net [192.168.1.225]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by noisy.programming.kicks-ass.net (Postfix) with ESMTPS id 7F4BB30003A; Thu, 10 Aug 2023 14:13:41 +0200 (CEST) Received: by hirez.programming.kicks-ass.net (Postfix, from userid 1000) id 46ED420AC8AF1; Thu, 10 Aug 2023 14:13:41 +0200 (CEST) Date: Thu, 10 Aug 2023 14:13:41 +0200 From: Peter Zijlstra To: =?iso-8859-1?Q?Andr=E9?= Almeida Cc: linux-kernel@vger.kernel.org, mingo@redhat.com, dvhart@infradead.org, dave@stgolabs.net, tglx@linutronix.de, axboe@kernel.dk, Andrew Morton , urezki@gmail.com, hch@infradead.org, lstoakes@gmail.com, Arnd Bergmann , linux-api@vger.kernel.org, linux-mm@kvack.org, linux-arch@vger.kernel.org, malteskarupke@web.de, Geert Uytterhoeven Subject: Re: [PATCH v2 05/14] futex: Add sys_futex_wake() Message-ID: <20230810121341.GX212435@hirez.programming.kicks-ass.net> References: <20230807121843.710612856@infradead.org> <20230807123323.090897260@infradead.org> <071c02ae-a74d-46d8-990b-262264b62caf@igalia.com> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <071c02ae-a74d-46d8-990b-262264b62caf@igalia.com> X-Rspamd-Queue-Id: 333791C0009 X-Rspam-User: X-Stat-Signature: kc4f54c7qspsywonr9uqpe883pnrkfn7 X-Rspamd-Server: rspam01 X-HE-Tag: 1691669635-312173 X-HE-Meta: U2FsdGVkX183zlbXkmsNuwtpKCnhHSw3UcRlAGL2VjC4JwLL0rZzXrNKlPk3l680m0lrz1dTZDBFdBKPqmfDlEviqjUv1ItHX2cmiqcbkjEXOSSxNFiUcHh6CmXcsqD6e9o+OnoLzBDGcYIhp+NEFHGYTeOFe1AUTlsbQevC51MoAKiZZZ4IPI7dZGvcIKQ3kSG+aCKKJ0Y2gn31XosspOKk+VyLbmdF3BqMbalmBiLlkTC1p95jDZeHEnTzi7Klz2iXQxWHL4JMADPvSIlwRYb7cm+y1Vh5W3J+rc5tdLZDrsjceBj/CT0m+JEGbYM0FJboZGL3McaPLb37tTPv5ZatI9WYSwbjqh2pSflHzMjCiQ5gyb+7VZxPsOW/grAs1sjIECZvyFazwXr4zBO6fI0M1i90MlsnRzFWYHMvdYk395iO4TkR4qJgDvqXhIhbhjT6GRXOZi2JyNF8bv7FpC8VPMmFpBWTXgWmL96X0Zj+dug6oJxVYvwtT6IS3bcq45KHc4aXJXBvBNb3OSfcTHJ1321ApvbO6AuvD3uRnK7KXINOzk/xmsRumbgWRFdIxIWVCU6kYY0sq7KzJ7D53D6wsNma0MsVw7h/BUmCO/TXxjVDpiuDwvRnwtONG/R1TDf/WNnMeHsuyMKny84LjhfGLS2Gz2grEiDYxLa8UDeMTCG7/CYwZPZjj5FYb83XWpOuqa8pC/rHk/sjaIrdPvqp6tV3coobctWGvTGvll+AWbeOVF7LoGkyB4GCEtkpUO7wtfxH0vRmZ8591Gs5Jft2rrd6M9wC7ZFAOcfk8su1QZkpO60WIkGDpljCmmO8fgiUpVNWfKCdk3DCheGVSe4JUfNvsQetTISY4VPbArOO/QbEy/xV2ZGZZaENoFvw0fuLYpep/+J4ex9L+XbJ10YIt9efXszyGjlRQRejcFhgZWTzQu0paDNrbeUtuINaSA1SLkiuTxrAr+nyvY3 bhF8G9x0 n0iTat9xg6sak0yaVmDd4aKrtNwEbFYBgoSvKEnWB9X0soo2QUlpPClxVFUsPZF/n2Rs3RjeYhf5YKf9bLJzB5snQ0QP7t+3f3Uigxy3t5XSvlKw5ke3wnyB0ckreMa5EnPDpvIgJkKOZ0Bt0qtdlQZzM0qyGrEcalI8A4G8lHVVA1dXlXXPIIsGC87BfzVLX7uNvpVOhGO8OgeqdKq8yxJtNNkRdTvDMtCJNX/EM6H4KzZiWbnwX9AczvPqrxhgiapmfO6bcfmkqjMsZRcUisiaXgjsVFB68gnf43wuhsCpmdidCWblVlO4SoA== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: On Wed, Aug 09, 2023 at 07:25:19PM -0300, André Almeida wrote: > Hi Peter, > > Em 07/08/2023 09:18, Peter Zijlstra escreveu: > > To complement sys_futex_waitv() add sys_futex_wake(). This syscall > > implements what was previously known as FUTEX_WAKE_BITSET except it > > uses 'unsigned long' for the bitmask and takes FUTEX2 flags. > > > > The 'unsigned long' allows FUTEX2_SIZE_U64 on 64bit platforms. > > > > Signed-off-by: Peter Zijlstra (Intel) > > Acked-by: Geert Uytterhoeven > > --- > > [...] > > > +/* > > + * sys_futex_wake - Wake a number of futexes > > + * @uaddr: Address of the futex(es) to wake > > + * @mask: bitmask > > + * @nr: Number of the futexes to wake > > + * @flags: FUTEX2 flags > > + * > > + * Identical to the traditional FUTEX_WAKE_BITSET op, except it is part of the > > + * futex2 family of calls. > > + */ > > + > > +SYSCALL_DEFINE4(futex_wake, > > + void __user *, uaddr, > > + unsigned long, mask, > > + int, nr, > > + unsigned int, flags) > > +{ > > Do you think we could have a > > if (!nr) > return 0; > > here? Otherwise, calling futex_wake(&f, 0, flags) will wake 1 futex (if > available), which is a strange undocumented behavior in my opinion. Oh 'cute' that.. yeah, but how about I put it ... > > + if (flags & ~FUTEX2_VALID_MASK) > > + return -EINVAL; > > + > > + flags = futex2_to_flags(flags); > > + if (!futex_flags_valid(flags)) > > + return -EINVAL; > > + > > + if (!futex_validate_input(flags, mask)) > > + return -EINVAL; here, because otherwise we get: sys_futex_wake(&f, 0xFFFF, 0, FUTEX2_SIZE_U8) to return 0, even though that is 'obviously' nonsensical and should return -EINVAL. Or even garbage flags would be 'accepted'. (because 0xFFFF is larger than U8 can accomodate) > > + > > + return futex_wake(uaddr, flags, nr, mask); > > +}