Received: by 2002:a25:683:0:0:0:0:0 with SMTP id 125csp4000881ybg; Sun, 7 Jun 2020 18:03:50 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxQAoa8i0k7PpZ7Ch+9QpEOWMsAs+L3r0C0b6v63o4iUiNznXKQJi0QfC/j/hE3wn62ChH4 X-Received: by 2002:a17:907:7294:: with SMTP id dt20mr18395973ejc.355.1591578230174; Sun, 07 Jun 2020 18:03:50 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1591578230; cv=none; d=google.com; s=arc-20160816; b=IBooqeb/UvFBcqQ3oQWNwuUg5iS6IvEUAeNsmqVyosG4nawB8zoWMmIH6c2ml/s2S4 4avk8JOsbcyxzpbqhBsOzCOHfZnWxV2g0nvYF1R5useEQWE6rzXSsBl8cCjNvs9XinXs NDmfH97s0rCK1aJoCurS1OytERf0bhSTatqG1dfpOIYK/5iY95px4grmNFDLf+D3cw7C YNsnDI7Emc4JwfXtupo7VY+MRkF++menOm8eVR1+hQnfcXUqW1VxU4/V29SIY3gUTmM2 H4LbP8/pjqXhk8IM8AnZU//eQWe0e2p3SjRIq9uP/BKqfWdUVk0Cvvs0VvEt9MUg72Tf ZrSA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=BkpULIGMgLT/SMkNaKHHo0qEQ8l0pWgCv67n1LZh+jQ=; b=vxmSzXvUd+LB3cVfHMgcnramD3vpIexCxOZ52Zbj9lAuL/NdrDusKrItosywiFPwlf uwRd5AJFXj/xYi6Mmk1jut/XsAK9CtFhjq54/jdWSn1IRrfxgGEvVBgit3ywPPwjqkfw YsRnCvYRYZC+qyGO189l06s7fwfTNZ+XLyIUTDBTfCaY0GzQg3IuX5oz/hwaxD9SFN56 rR3megfqMiUMNhV49UbPaSqHVUCc/WZIqcUAljfdbVH52CFt8HbGhV7OV7EMDp4hLaIe pOIUzx62AZdOuIQnl46vkFk6nfs4cdOQ0eLIZQzxExTAZ2uB5yDLXh9lpQw57VT8cbwp wuYA== ARC-Authentication-Results: i=1; mx.google.com; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id g23si8064188eds.168.2020.06.07.18.03.27; Sun, 07 Jun 2020 18:03:50 -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; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729073AbgFHA7D (ORCPT + 99 others); Sun, 7 Jun 2020 20:59:03 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58482 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729042AbgFHA66 (ORCPT ); Sun, 7 Jun 2020 20:58:58 -0400 Received: from Galois.linutronix.de (Galois.linutronix.de [IPv6:2a0a:51c0:0:12e:550::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C826AC08C5C3; Sun, 7 Jun 2020 17:58:57 -0700 (PDT) Received: from [5.158.153.53] (helo=debian-buster-darwi.lab.linutronix.de.) by Galois.linutronix.de with esmtpsa (TLS1.2:DHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.80) (envelope-from ) id 1ji67l-0000zt-5s; Mon, 08 Jun 2020 02:58:49 +0200 From: "Ahmed S. Darwish" To: Peter Zijlstra , Ingo Molnar , Will Deacon Cc: Thomas Gleixner , "Paul E. McKenney" , "Sebastian A. Siewior" , Steven Rostedt , LKML , "Ahmed S. Darwish" , Alexander Viro , linux-fsdevel@vger.kernel.org Subject: [PATCH v2 16/18] userfaultfd: Use sequence counter with associated spinlock Date: Mon, 8 Jun 2020 02:57:27 +0200 Message-Id: <20200608005729.1874024-17-a.darwish@linutronix.de> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200608005729.1874024-1-a.darwish@linutronix.de> References: <20200519214547.352050-1-a.darwish@linutronix.de> <20200608005729.1874024-1-a.darwish@linutronix.de> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit 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-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org A sequence counter write side critical section must be protected by some form of locking to serialize writers. A plain seqcount_t does not contain the information of which lock must be held when entering a write side critical section. Use the new seqcount_spinlock_t data type, which allows to associate a spinlock with the sequence counter. This enables lockdep to verify that the spinlock used for writer serialization is held when the write side critical section is entered. If lockdep is disabled this lock association is compiled out and has neither storage size nor runtime overhead. Signed-off-by: Ahmed S. Darwish --- fs/userfaultfd.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fs/userfaultfd.c b/fs/userfaultfd.c index e39fdec8a0b0..dd3aab31c50f 100644 --- a/fs/userfaultfd.c +++ b/fs/userfaultfd.c @@ -61,7 +61,7 @@ struct userfaultfd_ctx { /* waitqueue head for events */ wait_queue_head_t event_wqh; /* a refile sequence protected by fault_pending_wqh lock */ - struct seqcount refile_seq; + seqcount_spinlock_t refile_seq; /* pseudo fd refcounting */ refcount_t refcount; /* userfaultfd syscall flags */ @@ -1998,7 +1998,7 @@ static void init_once_userfaultfd_ctx(void *mem) init_waitqueue_head(&ctx->fault_wqh); init_waitqueue_head(&ctx->event_wqh); init_waitqueue_head(&ctx->fd_wqh); - seqcount_init(&ctx->refile_seq); + seqcount_spinlock_init(&ctx->refile_seq, &ctx->fault_pending_wqh.lock); } SYSCALL_DEFINE1(userfaultfd, int, flags) -- 2.20.1