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 1816BD63928 for ; Wed, 20 Nov 2024 10:54:43 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 9C8F06B0085; Wed, 20 Nov 2024 05:54:42 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 952D36B0088; Wed, 20 Nov 2024 05:54:42 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 7CB616B0089; Wed, 20 Nov 2024 05:54:42 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id 5BC5C6B0085 for ; Wed, 20 Nov 2024 05:54:42 -0500 (EST) Received: from smtpin08.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 17DECAE123 for ; Wed, 20 Nov 2024 10:54:42 +0000 (UTC) X-FDA: 82806162852.08.F100670 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by imf21.hostedemail.com (Postfix) with ESMTP id DD9151C000E for ; Wed, 20 Nov 2024 10:53:02 +0000 (UTC) Authentication-Results: imf21.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=oerig4Qz; dmarc=pass (policy=quarantine) header.from=kernel.org; spf=pass (imf21.hostedemail.com: domain of frederic@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=frederic@kernel.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1732099895; a=rsa-sha256; cv=none; b=KNFAOVs+5BRT+n4XajA9bHR2g2M/3X8KwwhGYk5C/z/EKmZ1WQQnKQP0VA6S41B/GAVgoQ cILlqw6oCJjg6UQ4b96birlrE5M3OCsouJC/+Vd4Np4YIc8c5BoG7ZWbyfxC94ZvevPRLz eJkP9ud0T9cSmNJlUflk7Yja/1dGVpw= ARC-Authentication-Results: i=1; imf21.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=oerig4Qz; dmarc=pass (policy=quarantine) header.from=kernel.org; spf=pass (imf21.hostedemail.com: domain of frederic@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=frederic@kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1732099895; 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=C5ExVZjXPqg0+xZeY6arONXgdSUVCY8thv5xTgenPwM=; b=Mz/o8o6xlJnKN0FTD7o8Md+r6F3Vhy1/H94oR6JBKVvv13pbcvitEptB3PspWL/66RvBU6 Z/wYKvk701NtNjcmQbdIcaFUGet0SSpYK5eigAJeIpvRoI2eucErIhYirVBd1/LIBNEbqu DYnIk1RZX3kcx5NWQ0IplYCBbNNb51E= Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by dfw.source.kernel.org (Postfix) with ESMTP id 2656C5C4B36; Wed, 20 Nov 2024 10:53:55 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 544F2C4CECD; Wed, 20 Nov 2024 10:54:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1732100078; bh=v56PH/TC6VfhJinSkV1dT70LzT5v+DrJrRasoRvKhFI=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=oerig4QzLHxMLkwFcONbh+QH7JccDk0DYE3OO/JNvQbbuExvz1IHXFtkNKc6ws900 Ph+vlJcQywEm83n2EWh8eOD3E6AZfrjvVpMWMXWX3fTt+R3wkNOnwGEEtf5zQCC2uo zm2de2K9vuAY5MO1/HoqnapioBJ0nJglbW9z3CJkqGC66wmic0Hh3Y8wS9bq3PAygE DQRp/srrPst1RiqG1ma/fqzGFR4rh5hRjKE6OJ7Hk2bXvOPwq0Ufil5r28O7veX/F6 Ad1KjhFA/txIArs9lwbKNUhi2TBYUTNnd4c9ugCn654jg7d9lyoYTrVJbr+9dD32Ud iibD+W02/qyJg== Date: Wed, 20 Nov 2024 11:54:36 +0100 From: Frederic Weisbecker To: Valentin Schneider Cc: linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, kvm@vger.kernel.org, linux-mm@kvack.org, bpf@vger.kernel.org, x86@kernel.org, rcu@vger.kernel.org, linux-kselftest@vger.kernel.org, Nicolas Saenz Julienne , Steven Rostedt , Masami Hiramatsu , Jonathan Corbet , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , "H. Peter Anvin" , Paolo Bonzini , Wanpeng Li , Vitaly Kuznetsov , Andy Lutomirski , Peter Zijlstra , "Paul E. McKenney" , Neeraj Upadhyay , Joel Fernandes , Josh Triplett , Boqun Feng , Mathieu Desnoyers , Lai Jiangshan , Zqiang , Andrew Morton , Uladzislau Rezki , Christoph Hellwig , Lorenzo Stoakes , Josh Poimboeuf , Jason Baron , Kees Cook , Sami Tolvanen , Ard Biesheuvel , Nicholas Piggin , Juerg Haefliger , Nicolas Saenz Julienne , "Kirill A. Shutemov" , Nadav Amit , Dan Carpenter , Chuang Wang , Yang Jihong , Petr Mladek , "Jason A. Donenfeld" , Song Liu , Julian Pidancet , Tom Lendacky , Dionna Glaze , Thomas =?iso-8859-1?Q?Wei=DFschuh?= , Juri Lelli , Marcelo Tosatti , Yair Podemsky , Daniel Wagner , Petr Tesarik Subject: Re: [RFC PATCH v3 11/15] context-tracking: Introduce work deferral infrastructure Message-ID: References: <20241119153502.41361-1-vschneid@redhat.com> <20241119153502.41361-12-vschneid@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20241119153502.41361-12-vschneid@redhat.com> X-Stat-Signature: b31xpiewxhmuujbsnbbxceqd7ad6o4cr X-Rspamd-Queue-Id: DD9151C000E X-Rspamd-Server: rspam08 X-Rspam-User: X-HE-Tag: 1732099982-120654 X-HE-Meta: U2FsdGVkX19kzDy1yOKctxHQVmnmA6TnRlfRf2AZ5I9knZVQtLAfCvOOPcI86CyZcuDYE403rQvDXRcZPym5qG0TX2lSHxMyWS5uX19yFSGYXi+MpFgmLS+tnTKbop6K1fOeGTMQOo4oCCNbvyDL8+tMgOo3RGXIfQ4jIGp5Hng41xSr223J61S+Dwn4gD88/kfq6KQ1i4Ver6oDyM9qR+NcBOF9gexmYgCGbKCSfKtuXMbX6PeATrqY/LoY5+kPTx8BuW8pUpBVw+2vYQBjTJO2Zq9e72xSxPqp8qsPpUUXswMLXoJxYph8Go0ClivbquN1XQ56bnBJp80i09yBo4QMP2V/yCzBi1e46Wl6G89bmB5sCZWyqxfq9kHSrQt7LecO3ktR6w6rt+Noc7sdkaIA9h5oxHb9CVHeoV+jAe9gqetwg8ZytOZ0KHHkZR9g1/7vOmA7mtGmAHGkhMyJS/1pp7/0qbfsSkE+sy1oZ1NudztJO6lFVO/BJCxwrPgza4Bct/wTqvpbOHUSx/uMEUj6WQO8P6LecVXRvRAO2uO6J7VCoazEJh83m9C2PQrWPVBWNRW71xTxgL7qp3a3m4wujploo1rUeLDRPmD5KYsrJCdwFtDFzV9jstJG8ZAArQMeMk772feCVDfT4q0tmlGONg82CDN9xCsBQZXgcDAHbbdgsc9JBDA81ynPidoCJzI3iMhJsNiVqSiGSo0mAlX0EzWY7yo6h1TIrwZAzs5YlJjZkNAEZmYyim6il+laxWEdvs39Tq/rV2gjb4oRkuSxH79bByVV7D+LsikDmL4p2W7y2lpXNglMUtMr/oYb7UMU/MLWhzhuoJ5hem7R8dpeUFTn6KyTsWdx+k68zFHbjdE/PFFbjX0LrfZaOTndjxxGMzTzGrREn+Uj2jH+D0D65PEHxf5j3VaU+ahZ3ktBZ0VlVp0zyxqFQaAfQ83GEpd0FGOZEbIuvAwOzRx izw5NH4V i1KSrfieG9PRrbvQ8fWWJZutdmLKWuHwhjJVR4VO+k+IREZ6fBY43E9s9j8KNxE/M8tVi6mhUsz2uLR1a78c8KB755CK7RcfFyl6gHpNw98/aH4YgkJT4Q20P6hrh79PmDOn+6e4s3P/XL/BS/d3muPF9pB6IKJiWPGZnTLMwivrUquxnMmIXWP8+ov0CSVWDSAr6x9ptpXl1vi2t07h+W8onlECUUzA/XkhW3jB6oSSpqtx2nGsuk53ISZ1pRuOKkwHSMCIqd5bl20knyeYvfJcP1j78TFzngUZCQLEXw46zNTfvC6CWOaNayA== 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: List-Subscribe: List-Unsubscribe: Le Tue, Nov 19, 2024 at 04:34:58PM +0100, Valentin Schneider a écrit : > +bool ct_set_cpu_work(unsigned int cpu, unsigned int work) > +{ > + struct context_tracking *ct = per_cpu_ptr(&context_tracking, cpu); > + unsigned int old; > + bool ret = false; > + > + preempt_disable(); > + > + old = atomic_read(&ct->state); > + /* > + * Try setting the work until either > + * - the target CPU has entered kernelspace > + * - the work has been set > + */ > + do { > + ret = atomic_try_cmpxchg(&ct->state, &old, old | (work << CT_WORK_START)); > + } while (!ret && ((old & CT_STATE_MASK) != CT_STATE_KERNEL)); > + > + preempt_enable(); > + return ret; Does it ignore the IPI even if: (ret && (old & CT_STATE_MASK) == CT_STATE_KERNEL)) ? And what about CT_STATE_IDLE? Is the work ignored in those two cases? But would it be cleaner to never set the work if the target is elsewhere than CT_STATE_USER. So you don't need to clear the work on kernel exit but rather on kernel entry. That is: bool ct_set_cpu_work(unsigned int cpu, unsigned int work) { struct context_tracking *ct = per_cpu_ptr(&context_tracking, cpu); unsigned int old; bool ret = false; preempt_disable(); old = atomic_read(&ct->state); /* Start with our best wishes */ old &= ~CT_STATE_MASK; old |= CT_STATE_USER /* * Try setting the work until either * - the target CPU has exited userspace * - the work has been set */ do { ret = atomic_try_cmpxchg(&ct->state, &old, old | (work << CT_WORK_START)); } while (!ret && ((old & CT_STATE_MASK) == CT_STATE_USER)); preempt_enable(); return ret; } Thanks.