Received: by 2002:a05:6a10:a0d1:0:0:0:0 with SMTP id j17csp513827pxa; Tue, 11 Aug 2020 08:26:36 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwRC5wx2YH685Y+ymYT1YdpmfxswhwQLQFubvR+M2YTZmM0kYZWIzU9kW7b0nB7rszDGhXf X-Received: by 2002:a50:d80b:: with SMTP id o11mr5138525edj.148.1597159596280; Tue, 11 Aug 2020 08:26:36 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1597159596; cv=none; d=google.com; s=arc-20160816; b=BbSsjgUq5Zfl1W8ePF9T9/S/FFf4Awf6IIta3jwkT9yMKWsUda10OX4Q4mWnKELmme hZ30OYmRbARUamsshAMQ4eiRGhMyL6LxS1Hrsahis5x2q5EZbjyDvN2fdcaKRxZyGHhK rBYpqJu+iwgbid4ll8U8j5dQy/+Bn/Yfoc2jiyqtReL35yYmokB6hnUARA3C+mJkCNmJ Dkg3dlNvNWIgxH46Igw/GHaPcJqXka6FdbrBJn679KefZ+f6uE0h89Q/KOsTMj+9BPkj NkZKV5KzRKzAesgunZ4h2I5igR1/LFECzoSnN688iT91OeCg0pprGGhjWLi4jwfh3Jcf T7Mw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date:dkim-signature; bh=NYi7K4/zb2gLB1iG4pFvsY+Hj2tcQOzTvNrHRxvcrJM=; b=zKDdj+a+y+V+HdHTl7mVc2jDCgAvmW7oMBhyC8NzGN/FhGEx3e0Xzz6qicbr+qWMjL kItikC6Tm+kmjfz6W5RAT+qKL0ajJK5DXeFa9PPgNpqMiNIpmr7N0aMcIhIajmaL1Eev ypfwW9tMlWbgFseSnMzL2f625oXJzxAN9ZunkqkK4dWPCZuSa4uuPU/qbNNc3RzmTMjO SRqM0DHvR7aUSkH+kk7yf+c3sYc3AQjgzAYHnbJiDbp5Dq54gKfzui83Zhx7upTiknU6 gJxP1xpK+c2Mbkp0Wctxe+GhFs0x8i5I9UW9hW6d81n6hkQfJmJCETBB71EAcXY77eNu VcXA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=abO4V6sy; 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 v19si13310526ejc.260.2020.08.11.08.26.13; Tue, 11 Aug 2020 08:26:36 -0700 (PDT) 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=abO4V6sy; 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 S1728919AbgHKPXS (ORCPT + 99 others); Tue, 11 Aug 2020 11:23:18 -0400 Received: from us-smtp-delivery-124.mimecast.com ([63.128.21.124]:55122 "EHLO us-smtp-delivery-124.mimecast.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728783AbgHKPXS (ORCPT ); Tue, 11 Aug 2020 11:23:18 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1597159396; 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: in-reply-to:in-reply-to:references:references; bh=NYi7K4/zb2gLB1iG4pFvsY+Hj2tcQOzTvNrHRxvcrJM=; b=abO4V6syp4GT5W6L5XDN3a7wRUrkKDFmTmDUWb/oufCul9/GiNdzCd6Uc8FXI+d5KVu5fR obLoeHWdJlVKQ7L/lPsj0+WVrk0MAb1a22OlGJBkHMc+gUsdYLuzTAVUb5GRyA4MomDERC +arbC2OCpsov2jwuNCLnVUmMpYoBjXk= 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-558-YbJ-M1uXOkmw10LoIbDlcw-1; Tue, 11 Aug 2020 11:23:15 -0400 X-MC-Unique: YbJ-M1uXOkmw10LoIbDlcw-1 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id D9E508464BA; Tue, 11 Aug 2020 15:23:13 +0000 (UTC) Received: from dhcp-27-174.brq.redhat.com (unknown [10.40.192.186]) by smtp.corp.redhat.com (Postfix) with SMTP id 509411F5; Tue, 11 Aug 2020 15:23:12 +0000 (UTC) Received: by dhcp-27-174.brq.redhat.com (nbSMTP-1.00) for uid 1000 oleg@redhat.com; Tue, 11 Aug 2020 17:23:13 +0200 (CEST) Date: Tue, 11 Aug 2020 17:23:10 +0200 From: Oleg Nesterov To: Jens Axboe Cc: "linux-kernel@vger.kernel.org" , Peter Zijlstra , Jann Horn Subject: Re: [PATCH] task_work: only grab task signal lock when needed Message-ID: <20200811152310.GF21797@redhat.com> References: <0028d3ea-4d05-405f-b457-75c83d381d89@kernel.dk> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <0028d3ea-4d05-405f-b457-75c83d381d89@kernel.dk> User-Agent: Mutt/1.5.24 (2015-08-30) X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 08/11, Jens Axboe wrote: > > --- a/kernel/task_work.c > +++ b/kernel/task_work.c > @@ -42,7 +42,8 @@ task_work_add(struct task_struct *task, struct callback_head *work, int notify) > set_notify_resume(task); > break; > case TWA_SIGNAL: > - if (lock_task_sighand(task, &flags)) { > + if (!(READ_ONCE(task->jobctl) & JOBCTL_TASK_WORK) && > + lock_task_sighand(task, &flags)) { Aaaaah, sorry Jens, now I think this is racy. So I am glad I didn't add this optimization into the initial version ;) It is possible that JOBCTL_TASK_WORK is set but ->task_works == NULL. Say, task_work_add(TWA_SIGNAL) + task_work_cancel(), or the target task can call task_work_run() before it enters get_signal(). And in this case another task_work_add(tsk, TWA_SIGNAL) can actually race with get_signal() which does current->jobctl &= ~JOBCTL_TASK_WORK; if (unlikely(current->task_works)) { spin_unlock_irq(&sighand->siglock); task_work_run(); nothing guarantees that get_signal() sees ->task_works != NULL. Probably this is what Jann meant. We can probably add a barrier into get_signal() but I didn't sleep today, I'll try to think tomorrow. Oleg.