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 23ADEC3DA70 for ; Tue, 30 Jul 2024 15:18:37 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 8903A6B00AD; Tue, 30 Jul 2024 11:18:36 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 841D66B00AE; Tue, 30 Jul 2024 11:18:36 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 6E2046B00AF; Tue, 30 Jul 2024 11:18:36 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id 4F8716B00AD for ; Tue, 30 Jul 2024 11:18:36 -0400 (EDT) Received: from smtpin15.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id C9718C0367 for ; Tue, 30 Jul 2024 15:18:35 +0000 (UTC) X-FDA: 82396775790.15.A5CAECD Received: from smtp-out2.suse.de (smtp-out2.suse.de [195.135.223.131]) by imf15.hostedemail.com (Postfix) with ESMTP id 69F40A0011 for ; Tue, 30 Jul 2024 15:18:33 +0000 (UTC) Authentication-Results: imf15.hostedemail.com; dkim=pass header.d=suse.cz header.s=susede2_rsa header.b=X8pDdYGR; dkim=pass header.d=suse.cz header.s=susede2_ed25519 header.b=5IhyBajd; dkim=pass header.d=suse.cz header.s=susede2_rsa header.b=OAahq62D; dkim=pass header.d=suse.cz header.s=susede2_ed25519 header.b=+JzXWHb6; dmarc=none; spf=pass (imf15.hostedemail.com: domain of vbabka@suse.cz designates 195.135.223.131 as permitted sender) smtp.mailfrom=vbabka@suse.cz ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1722352673; a=rsa-sha256; cv=none; b=xRFrrhTCaxPY1bIBOhNriGqUq5GLOA7tyPck6MJG6XRa+den7XsE10xvG3pIWEMrLuvumX av4Dd+hyd0S2GKUel73nHaEsVicAGb0k7gm4kXuN3c7aCUHCYGswWJrlulq+ba8rf8X6ag CoS/+WnCs0/RnduZlL51F4vi6Pi7rD4= ARC-Authentication-Results: i=1; imf15.hostedemail.com; dkim=pass header.d=suse.cz header.s=susede2_rsa header.b=X8pDdYGR; dkim=pass header.d=suse.cz header.s=susede2_ed25519 header.b=5IhyBajd; dkim=pass header.d=suse.cz header.s=susede2_rsa header.b=OAahq62D; dkim=pass header.d=suse.cz header.s=susede2_ed25519 header.b=+JzXWHb6; dmarc=none; spf=pass (imf15.hostedemail.com: domain of vbabka@suse.cz designates 195.135.223.131 as permitted sender) smtp.mailfrom=vbabka@suse.cz ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1722352673; 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=NFJe/5/G1p03fX9svK0QGYtK67e42X0x0vZlF3sKQmE=; b=CwpiUyQY6TYjuDIP4xB6ekRmb1hGYGsIk61cVuW91MEjSjTP6hY8bsodMkgU0bpn7rGZcE hYAWw1u9InMpYJT4fqoGiAnN+AxrsxQha4EUrUafMkbn3GXcJIDg4BwutoLWgUS++mKPfs 6dWAp41ael2WOFMK6kvSNOi2jdHULMU= Received: from imap1.dmz-prg2.suse.org (unknown [10.150.64.97]) (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) (No client certificate requested) by smtp-out2.suse.de (Postfix) with ESMTPS id 875331F80F; Tue, 30 Jul 2024 15:18:30 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_rsa; t=1722352711; h=from:from:reply-to: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=NFJe/5/G1p03fX9svK0QGYtK67e42X0x0vZlF3sKQmE=; b=X8pDdYGRZKJJiSnTBMQ2aRjc5h1nKbZXnPDW6l+89Rviffkm2EW9kSIsapRvQCdrxJrdHj sk3Z5kvJfnESn+rDgK+crd4SzAa0XXybxhWT40kQ+H7Y6G6+c9UdZ6xQpGJm6CsQQL//fN U5cXrvvBz/galQRit3rsSgWjBoSeAok= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_ed25519; t=1722352711; h=from:from:reply-to: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=NFJe/5/G1p03fX9svK0QGYtK67e42X0x0vZlF3sKQmE=; b=5IhyBajdg+yj97Z43Gq0+F05kxDRzacE7qcJlTkMiCn68PO1U2rKXYHDY3wOsKuEsUQ8uU mWrcsKC1IhdADqDQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_rsa; t=1722352710; h=from:from:reply-to: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=NFJe/5/G1p03fX9svK0QGYtK67e42X0x0vZlF3sKQmE=; b=OAahq62Dd6dpqibjbseuq9Q9OS4Fzgz2TN4s9OSAyyPALLipJgas85S6MXqg4w+PUTSG3e 99PyuggbEwGoahbGijWdGFZ58SUnYLvmhWbzMx7E9FNBOhy+GAmuzIYTQ9zcJ6V6yhi1tF V2FNrKhKBbSpm1hEIP11SIVvIlNnqeY= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_ed25519; t=1722352710; h=from:from:reply-to: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=NFJe/5/G1p03fX9svK0QGYtK67e42X0x0vZlF3sKQmE=; b=+JzXWHb64Snsq5UIjtYgdRZjFd7lqRAG3jTSlDT+8ZMkcXw8ALW/T00iz6v0bR08ehc2I9 8ccLGiIEhDhDEwCw== Received: from imap1.dmz-prg2.suse.org (localhost [127.0.0.1]) (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) (No client certificate requested) by imap1.dmz-prg2.suse.org (Postfix) with ESMTPS id 7275113983; Tue, 30 Jul 2024 15:18:30 +0000 (UTC) Received: from dovecot-director2.suse.de ([2a07:de40:b281:106:10:150:64:167]) by imap1.dmz-prg2.suse.org with ESMTPSA id g1GqG0YEqWYsfAAAD6G6ig (envelope-from ); Tue, 30 Jul 2024 15:18:30 +0000 Message-ID: Date: Tue, 30 Jul 2024 17:20:12 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [RFC PATCH 11/20] kthread: Make sure kthread hasn't started while binding it To: Frederic Weisbecker , LKML Cc: Andrew Morton , Kees Cook , Peter Zijlstra , Thomas Gleixner , Michal Hocko , linux-mm@kvack.org, "Paul E. McKenney" , Neeraj Upadhyay , Joel Fernandes , Boqun Feng , Zqiang , rcu@vger.kernel.org References: <20240726215701.19459-1-frederic@kernel.org> <20240726215701.19459-12-frederic@kernel.org> Content-Language: en-US From: Vlastimil Babka In-Reply-To: <20240726215701.19459-12-frederic@kernel.org> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Rspamd-Queue-Id: 69F40A0011 X-Rspam-User: X-Rspamd-Server: rspam05 X-Stat-Signature: remewcu46duei99ine4hiyzzk1n45yqx X-HE-Tag: 1722352713-696533 X-HE-Meta: U2FsdGVkX194okCEgZfsZUAvDLGWEV3S1k2Ud9BBkbhR4haQypAtxruzSLXzzFMRfDPoBCFKX+pnNGBSonjT8DSIBT+GkRjQ/PYAswuwNgI4wjV5QQLYFBUgK32NYAvUBBmYcH5MSQ/4Kvtz8Mhj9ww21AncPmMSVndiDxLARoWzWfsJgckP1CzUwZs2aY8xF0yX5fkY4xoy9O60SUBJv79NLyyxVMKgbA4CfF4eW3a/F4CODfB2WMAt9LPzGB1CfI+n4JNE7ou4whI8E0bY4R/ibHnY59wltaM9tusdm/Ssky1U+ubCi8og/LSpo2skTGmLiaAD7rSVL7UtiiNPmqj5ItjYu1QfIEQ5tiqBMuKjM0SrzcTtSq2saPN9V7jBEraHZkLsn5Y3i/a7iDEFS+8bGj/iEYkb2hm5c6EY4Ahn4OvwbNikR+C59ncXWFXgTNaEtGeZ0zuPzIkYpa/yEne6CGb+phTfH3Lj7dh/E++s2SC785nw1j+S3+B7v2L1OoQe1LPT+dFfk5zfGTRkbFfczsy1ihVz1HQsfuZR2sS2gAnEyON9HXlu0O1eXVTlyHN467v5QLccbS64v14MgmPsCMJwzVhVGN5Q4ayw7gPLgofpUeA/9kKiKzbbtp3VxCqrz0uAm3xm3IBCUfua+6CsZzUj8nBS/u/hlPd6YuEe58UJASY22FJCjfAKKbSXdElD51zZjS5i8NEhkrKrZ6y8J0FZgKfQJZNiWWGTGA883S4RYfev49Uw+mGtw9YereJMjSNBVeWxWdhLedoZshFaQCRSODqBKMcx1lA7LNNlWyrkxL2Q66m3mPIMLuUrGrr+KJaRoyNW9a8+NXC3UtvQno5vW0GEAaH3MfrS9d/COO44CBRxxSwyxtDKgQJwEZEvw9ooCxvbmzbBRDVVKUEgsNHrILxTpswOuojit85NbqfFeV1AQw5Q8430tDXA8i0/OqgdXApoFhDleze OaBZLvEs j15Vb4g5IjU0HHR2UKdv3FPAjnf2G20UsqD/oHg5e8CcTvvVjy1LXLv4YoBIgCUrT+pQG2NIN9RkpQ3E7FvWAbxytdMB6yElRw+ltJ2pBj+ATFZnCi5uIDOs7kyhQjECw3WHRvs2j4fuA0oCerGagS2jfCfd3Bob/SUqi3uGJSmsp0AYl6i5oj4gGgnEDh5lm55uuesuz1PUgENof5WtUyrVwEaxQMokuUR1vtZMdlqd9eiQNc+9Ns/7wKxxX5a6v3t85bJL43D+AxHWvc9VJ5Z6JhusSGyvlU2E1x+np8I8lPlE7sFleC3oqkMUOxggFlWIjBwj9wIIRePQTpAjJf7nFf1omRtG4U7uTevg1xIrIBLi0TbwiDJNfoYfBniEQjKPlfnBFA9XpY8I= 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: On 7/26/24 11:56 PM, Frederic Weisbecker wrote: > Make sure the kthread is sleeping in the schedule_preempt_disabled() > call before calling its handler when kthread_bind[_mask]() is called > on it. This provides a sanity check verifying that the task is not > randomly blocked later at some point within its function handler, in > which case it could be just concurrently awaken, leaving the call to > do_set_cpus_allowed() without any effect until the next voluntary sleep. > > Rely on the wake-up ordering to ensure that the newly introduced "started" > field returns the expected value: > > TASK A TASK B > ------ ------ > READ kthread->started > wake_up_process(B) > rq_lock() > ... > rq_unlock() // RELEASE > schedule() > rq_lock() // ACQUIRE > // schedule task B > rq_unlock() > WRITE kthread->started > > Similarly, writing kthread->started before subsequent voluntary sleeps > will be visible after calling wait_task_inactive() in > __kthread_bind_mask(), reporting potential misuse of the API. > > Upcoming patches will make further use of this facility. > > Signed-off-by: Frederic Weisbecker Acked-by: Vlastimil Babka > --- > kernel/kthread.c | 7 +++++++ > 1 file changed, 7 insertions(+) > > diff --git a/kernel/kthread.c b/kernel/kthread.c > index f7be976ff88a..ecb719f54f7a 100644 > --- a/kernel/kthread.c > +++ b/kernel/kthread.c > @@ -53,6 +53,7 @@ struct kthread_create_info > struct kthread { > unsigned long flags; > unsigned int cpu; > + int started; > int result; > int (*threadfn)(void *); > void *data; > @@ -382,6 +383,8 @@ static int kthread(void *_create) > schedule_preempt_disabled(); > preempt_enable(); > > + self->started = 1; > + > ret = -EINTR; > if (!test_bit(KTHREAD_SHOULD_STOP, &self->flags)) { > cgroup_kthread_ready(); > @@ -540,7 +543,9 @@ static void __kthread_bind(struct task_struct *p, unsigned int cpu, unsigned int > > void kthread_bind_mask(struct task_struct *p, const struct cpumask *mask) > { > + struct kthread *kthread = to_kthread(p); > __kthread_bind_mask(p, mask, TASK_UNINTERRUPTIBLE); > + WARN_ON_ONCE(kthread->started); > } > > /** > @@ -554,7 +559,9 @@ void kthread_bind_mask(struct task_struct *p, const struct cpumask *mask) > */ > void kthread_bind(struct task_struct *p, unsigned int cpu) > { > + struct kthread *kthread = to_kthread(p); > __kthread_bind(p, cpu, TASK_UNINTERRUPTIBLE); > + WARN_ON_ONCE(kthread->started); > } > EXPORT_SYMBOL(kthread_bind); >