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 3641AC6379F for ; Fri, 17 Feb 2023 13:44:51 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id C3140280002; Fri, 17 Feb 2023 08:44:50 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id BB90E6B007B; Fri, 17 Feb 2023 08:44:50 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id A0BC9280002; Fri, 17 Feb 2023 08:44:50 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 8A1EA6B0078 for ; Fri, 17 Feb 2023 08:44:50 -0500 (EST) Received: from smtpin18.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 6BE9F1203AB for ; Fri, 17 Feb 2023 13:44:50 +0000 (UTC) X-FDA: 80476904340.18.573EF9B Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by imf25.hostedemail.com (Postfix) with ESMTP id 43653A0023 for ; Fri, 17 Feb 2023 13:44:47 +0000 (UTC) Authentication-Results: imf25.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=KdZ5OVRO; spf=pass (imf25.hostedemail.com: domain of dakr@redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=dakr@redhat.com; dmarc=pass (policy=none) header.from=redhat.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1676641488; 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=Hw5y2doCl00T3ibUla5BtLSkevMMipuwdAIlo8ABos8=; b=gu3Sh1pEPMCp5cucw08TTPjxbyNESLZiPCc5b/+IZvayq1m/Ywvco6BSoX4qaaGmjT5h5/ QrGAnnrofYN5Bdu8p8S9xOyWXfp5STD5mIC0tN8N2fK3UeEK2nRdVSsu17PRdSBu2f7t3N LkHJ6otosHG1Un6dVy5GUHFUbUwxNdI= ARC-Authentication-Results: i=1; imf25.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=KdZ5OVRO; spf=pass (imf25.hostedemail.com: domain of dakr@redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=dakr@redhat.com; dmarc=pass (policy=none) header.from=redhat.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1676641488; a=rsa-sha256; cv=none; b=Tszqj1/biRf7680vity670G/BXaNOq7NqCX3EtMG/T+KhE6Ijpbd0C5GkfijWRs+ZZkGCL beW/HgOOg2ksI71zYPuCqoC+BDOthiE5Ha3ZQj6Ye7TJo9AjiGU/YtMcQ86eFHzB+5hIDQ H9vSPxClIn+lGYuRDy1Jtizg4fBG4Bk= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1676641487; 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: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Hw5y2doCl00T3ibUla5BtLSkevMMipuwdAIlo8ABos8=; b=KdZ5OVRO/J0tjc8Ie8acigPl6WxpZ6q7cHfGuFNpOQLF6FcVM44mkBSjU4aFSPFI4hBejL lGDjpDTiarTpcEVeDrs3Jwr2g/pIcjH9HeeDBdHecRb3vGnzHv+swQUO4oxdA7His5CfvV 0nOqRVO3cj0jcgk+AYfSQ8bNjp4cMto= Received: from mail-ed1-f71.google.com (mail-ed1-f71.google.com [209.85.208.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_128_GCM_SHA256) id us-mta-235-ydqZVGD3Nz-TcQkSKNIKag-1; Fri, 17 Feb 2023 08:44:46 -0500 X-MC-Unique: ydqZVGD3Nz-TcQkSKNIKag-1 Received: by mail-ed1-f71.google.com with SMTP id cz5-20020a0564021ca500b004a6c2f6a226so1232976edb.15 for ; Fri, 17 Feb 2023 05:44:46 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Hw5y2doCl00T3ibUla5BtLSkevMMipuwdAIlo8ABos8=; b=vWYwG4RpS486SICNbEoeFjfQC9+vwgAgZMeX/NH+XpS1xl1myAnwGirSb3gsGtnr9Q LmXE02rU+H5k0lOlbPU3kwlhdXvQm8OPdqFLTtutq/DBJdgIpMWOM7DoVqrFieUJEH0e T1J3bdE/QViExnJY7qXUpON7Wo19sylMf0iUy+BROnFebT/u4ZRXnnb1LrVAT88kRNKB vVdfPQVQn4kYs7htxgn4+0eFh0P2OK1v/hYhM4h9B3t8M9RhZQyNoTf3yY5zKKVD6K7N xqIrwtraRhUltZC28Ch+q1fHIDdBuSHbrndqnmGlOUok+XVv0fFMsvktpweqmG7YOIXI eQtw== X-Gm-Message-State: AO0yUKU8vnecM2JrZi9MYWLnPHmfFPSRcXei23Swg1MoyArdXJKYuFHW sroJGG9TzRHxLDf/KDJ++5upbp5yKt6Ew7JecuJoxDMWN6t9NqTMTtgrnQZDZiUDCrK+VD12gNB 2aTY4mCZfF4U= X-Received: by 2002:a17:907:7204:b0:8ab:a378:5f96 with SMTP id dr4-20020a170907720400b008aba3785f96mr6877792ejc.3.1676641485228; Fri, 17 Feb 2023 05:44:45 -0800 (PST) X-Google-Smtp-Source: AK7set/TZG7ec9qZlnOFOe4bPzyNu9aCVszGIuq0bCjLphIoqf/IkkxWSOngWo7N98WoGLtfENjN0g== X-Received: by 2002:a17:907:7204:b0:8ab:a378:5f96 with SMTP id dr4-20020a170907720400b008aba3785f96mr6877771ejc.3.1676641484996; Fri, 17 Feb 2023 05:44:44 -0800 (PST) Received: from cassiopeiae.. ([2a02:810d:4b3f:de78:642:1aff:fe31:a19f]) by smtp.gmail.com with ESMTPSA id t6-20020a1709066bc600b008b159612b2dsm2164061ejs.106.2023.02.17.05.44.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 17 Feb 2023 05:44:44 -0800 (PST) From: Danilo Krummrich To: airlied@gmail.com, daniel@ffwll.ch, tzimmermann@suse.de, mripard@kernel.org, corbet@lwn.net, christian.koenig@amd.com, bskeggs@redhat.com, Liam.Howlett@oracle.com, matthew.brost@intel.com, boris.brezillon@collabora.com, alexdeucher@gmail.com, ogabbay@kernel.org, bagasdotme@gmail.com, willy@infradead.org, jason@jlekstrand.net Cc: dri-devel@lists.freedesktop.org, nouveau@lists.freedesktop.org, linux-doc@vger.kernel.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, Danilo Krummrich Subject: [PATCH drm-next v2 04/16] maple_tree: add flag MT_FLAGS_LOCK_NONE Date: Fri, 17 Feb 2023 14:44:10 +0100 Message-Id: <20230217134422.14116-5-dakr@redhat.com> X-Mailer: git-send-email 2.39.1 In-Reply-To: <20230217134422.14116-1-dakr@redhat.com> References: <20230217134422.14116-1-dakr@redhat.com> MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset="US-ASCII"; x-default=true X-Rspam-User: X-Rspamd-Server: rspam04 X-Rspamd-Queue-Id: 43653A0023 X-Stat-Signature: g1tzhjbhejps58yjqunhq8bykfg6gndr X-HE-Tag: 1676641487-684523 X-HE-Meta: U2FsdGVkX18BSsS6TnuIjPClJ/rhJRrEI/QbXxzd9zSujluoyTKHBPYFb4/ylmUycgkaLJdOa41MkMguPr0WK7KFV63HfDRq3atew0DqHRy3UgExlHiOvI0qCOe5xb6nuOGM+Cln723jXfTJbmu3TqBOGxLZ4h/BV3CDPZk8Q6QD6COHODCGxCwVfrN6D1vT3p+hx74uwS3tnn5r8gGkXzBXNP6lfrrJIdbAUwYHyy7OPlAOUJsq0RAdQGQ6B8NNM8Y09TaKMPVQzS24k6aWqoefoOnXumDccbUOWJxfqa2XvU46DqRuR/HaF0NH/6j+JFsvk+JkKUYwOeKiv1yMnUW43OAeY266LQKUsEuayBshDz/Jfadwrm+FKMWPs1WUhMfCxA20bm9raC9hyPhAZ7gYEuCvZg2LdarNcIvkfnryWva0e2w0118/f86UEF1gxu8JeYQNrYF75J144yJxiKsGVCRfoOwgdCGGZ8w4aMqmCF9hmCvFrPwi+FXijslMzp/bbVjr9YwOuSB59fy36n7MSBNTRf3QU2XO444yh6DTGEfxeBXb6WhCFlp87aH4V/SEioAvLcURpsoIFw4JnNAYucPJeOqNkQSJeNcjRuG+LJaq3D1LVIkKx6dIgyo4ayd9DpHPivZ3KW3cOnOBAVvRoOlemvJOzG6SLMHb7R/70qvDPzcbBhSTAfiuVw0vxvHzxTbG2qiyHzfmG3O1dha/hB5Tjo1SnjZ4pcbZI2Sud5rEJSnNX7pi8Al9I41e2d4K3YBCZbtr5EruaaK/W9ZMKufxriF+VkFBvojU6+ykFd5W5CiLK7Y2Iso+uGcVIa0I4IiVpMEm0QAQEIgGTN+2Nz/19eyf0ND4jovREbn6N2sJ2JM7X8oVkanf1U9IiAN4Iwe3Yr5JN+nqqe5tgW6lKPcBTJoQuffzlfNDE/M3oLqALlrWVqgwXmYT0B6DO56OJy6lMGTuXL6ItuE HKN3+4jr ED34IZLTj8sbVKrk0VF/2+iTpQg5JpQKwi+Bp0yC4Vj2476rbuM1R6XFIo7EIit0g1f1+IJlAMq9xOaF1kyiMy4xjTMQhuBTG3u6B+5cxz7YKfQ157IzdTpQoxM70GZRMpfQfZwAoy67JoooluJ0CgIAuTN1a6G5Nte84kGKFgBrG7NJQMr65xmvDwgShitjQicO4rA/gn4Lpcn5le/i8ztdsc0Rt8sZvVc4R+ItPof/VdEusKCreDGzI8Z/KIqtaCrPgr5H5jsQnzMN9AY5cMRyz8X6RQTIQ9o7rAsiIhUqDS4HftXT1wHonMCjVkguFWplpaLEeEL+SIKynzovoVnirM4smAePL78kn/TAPHhb8zzbYv0Jyj8J1fV0KElxcdOK42XzaLpRgnapX5YNHpK0KFwc9iUjiTMj2RebZ+PotG4sWwRR3MJpswg== 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: Generic components making use of the maple tree (such as the DRM GPUVA Manager) delegate the responsibility of ensuring mutual exclusion to their users. While such components could inherit the concept of an external lock, some users might just serialize the access to the component and hence to the internal maple tree. In order to allow such use cases, add a new flag MT_FLAGS_LOCK_NONE to indicate not to do any internal lockdep checks. Signed-off-by: Danilo Krummrich --- include/linux/maple_tree.h | 20 +++++++++++++++----- lib/maple_tree.c | 7 ++++--- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/include/linux/maple_tree.h b/include/linux/maple_tree.h index ca04c900e51a..f795e5def8d0 100644 --- a/include/linux/maple_tree.h +++ b/include/linux/maple_tree.h @@ -170,10 +170,11 @@ enum maple_type { #define MT_FLAGS_USE_RCU 0x02 #define MT_FLAGS_HEIGHT_OFFSET 0x02 #define MT_FLAGS_HEIGHT_MASK 0x7C -#define MT_FLAGS_LOCK_MASK 0x300 +#define MT_FLAGS_LOCK_MASK 0x700 #define MT_FLAGS_LOCK_IRQ 0x100 #define MT_FLAGS_LOCK_BH 0x200 #define MT_FLAGS_LOCK_EXTERN 0x300 +#define MT_FLAGS_LOCK_NONE 0x400 #define MAPLE_HEIGHT_MAX 31 @@ -559,11 +560,16 @@ static inline void mas_set(struct ma_state *mas, unsigned long index) mas_set_range(mas, index, index); } -static inline bool mt_external_lock(const struct maple_tree *mt) +static inline bool mt_lock_external(const struct maple_tree *mt) { return (mt->ma_flags & MT_FLAGS_LOCK_MASK) == MT_FLAGS_LOCK_EXTERN; } +static inline bool mt_lock_none(const struct maple_tree *mt) +{ + return (mt->ma_flags & MT_FLAGS_LOCK_MASK) == MT_FLAGS_LOCK_NONE; +} + /** * mt_init_flags() - Initialise an empty maple tree with flags. * @mt: Maple Tree @@ -577,7 +583,7 @@ static inline bool mt_external_lock(const struct maple_tree *mt) static inline void mt_init_flags(struct maple_tree *mt, unsigned int flags) { mt->ma_flags = flags; - if (!mt_external_lock(mt)) + if (!mt_lock_external(mt) && !mt_lock_none(mt)) spin_lock_init(&mt->ma_lock); rcu_assign_pointer(mt->ma_root, NULL); } @@ -612,9 +618,11 @@ static inline void mt_clear_in_rcu(struct maple_tree *mt) if (!mt_in_rcu(mt)) return; - if (mt_external_lock(mt)) { + if (mt_lock_external(mt)) { BUG_ON(!mt_lock_is_held(mt)); mt->ma_flags &= ~MT_FLAGS_USE_RCU; + } else if (mt_lock_none(mt)) { + mt->ma_flags &= ~MT_FLAGS_USE_RCU; } else { mtree_lock(mt); mt->ma_flags &= ~MT_FLAGS_USE_RCU; @@ -631,9 +639,11 @@ static inline void mt_set_in_rcu(struct maple_tree *mt) if (mt_in_rcu(mt)) return; - if (mt_external_lock(mt)) { + if (mt_lock_external(mt)) { BUG_ON(!mt_lock_is_held(mt)); mt->ma_flags |= MT_FLAGS_USE_RCU; + } else if (mt_lock_none(mt)) { + mt->ma_flags |= MT_FLAGS_USE_RCU; } else { mtree_lock(mt); mt->ma_flags |= MT_FLAGS_USE_RCU; diff --git a/lib/maple_tree.c b/lib/maple_tree.c index 26e2045d3cda..f51c0fd4eaad 100644 --- a/lib/maple_tree.c +++ b/lib/maple_tree.c @@ -802,8 +802,8 @@ static inline void __rcu **ma_slots(struct maple_node *mn, enum maple_type mt) static inline bool mt_locked(const struct maple_tree *mt) { - return mt_external_lock(mt) ? mt_lock_is_held(mt) : - lockdep_is_held(&mt->ma_lock); + return mt_lock_external(mt) ? mt_lock_is_held(mt) : + mt_lock_none(mt) ? true : lockdep_is_held(&mt->ma_lock); } static inline void *mt_slot(const struct maple_tree *mt, @@ -6120,7 +6120,8 @@ bool mas_nomem(struct ma_state *mas, gfp_t gfp) return false; } - if (gfpflags_allow_blocking(gfp) && !mt_external_lock(mas->tree)) { + if (gfpflags_allow_blocking(gfp) && + !mt_lock_external(mas->tree) && !mt_lock_none(mas->tree)) { mtree_unlock(mas->tree); mas_alloc_nodes(mas, gfp); mtree_lock(mas->tree); -- 2.39.1