From patchwork Thu Jun 22 08:53:10 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13288583 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 DAE5AEB64D8 for ; Thu, 22 Jun 2023 08:54:38 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 80B8F8D0005; Thu, 22 Jun 2023 04:54:38 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 7BAC78D0001; Thu, 22 Jun 2023 04:54:38 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 684C18D0005; Thu, 22 Jun 2023 04:54:38 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 5B2C78D0001 for ; Thu, 22 Jun 2023 04:54:38 -0400 (EDT) Received: from smtpin12.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 250308067C for ; Thu, 22 Jun 2023 08:54:38 +0000 (UTC) X-FDA: 80929773036.12.E4701C8 Received: from mail-pl1-f173.google.com (mail-pl1-f173.google.com [209.85.214.173]) by imf13.hostedemail.com (Postfix) with ESMTP id 1E7A120006 for ; Thu, 22 Jun 2023 08:54:35 +0000 (UTC) Authentication-Results: imf13.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=AF1n71Ib; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf13.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.173 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1687424076; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=ftOXXP2bfTIIt8St3T9822C8Mz+yI5OAEWwVCqdxqi8=; b=kboO1sSzg+ZdZJoqPVtWctbkFwnCmY2MadwUIF9IgQkIhBKUbIC3LQfMoaYQHzlIpyxB9l AvvLY2sY9auvqxkxxxPbPB+1yzKCFtFG+Eb+oVht++Rj+6L4+ozw8zXFwAQv43pSvJs9en WdHdL4w+kmRQVhd4Q5PQDxZSrq3nFJY= ARC-Authentication-Results: i=1; imf13.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=AF1n71Ib; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf13.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.173 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1687424076; a=rsa-sha256; cv=none; b=DetwN51yF6UrW0OPM/c6G4BWchLUqT6LRnNSbyfejTnohWOrquyZbjTiPq5V3GuJMQ7T2G P7yRmIvSf0EyKzR6XcKWdbI1vzkV85Zhewh6DWDy0NED/28RZ6Le5tjGcq0stzgUZ/Xm1G oQj55Un6NrnXBqVQU1OJwn+ahWALvEw= Received: by mail-pl1-f173.google.com with SMTP id d9443c01a7336-1b5466bc5f8so9652655ad.1 for ; Thu, 22 Jun 2023 01:54:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1687424075; x=1690016075; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=ftOXXP2bfTIIt8St3T9822C8Mz+yI5OAEWwVCqdxqi8=; b=AF1n71Ibzw+/eJzW8ZfFCXm2Gb4L6rcgcO3MWUfrJXSOCg2q4/6sdbKki+cciYNMm8 euETZJp/Yv9okGd+5XPvMxEgndnOAmqccUN3sNROxfnHbIeAfCrF3CESQGiUHVaKUyC0 MpSE/83T59YTQuiU5NMvjWSDBOsWVTepqqBeQE1tIy9JZFyOQuULXF0wbqj90XyCa0gR wARDSKvxEvJy+BtXj+ipth/FF0Y38R/9qPz9cOOh0wy/h6cCvspbbaNHGZoc8L1j5F66 eXHRgIUKfoLp9EhNKNNczQL499XVYbOwcbEp2A8mZxNkm++j1bZaQj9vcnyBlktuqhCK 186Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1687424075; x=1690016075; 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=ftOXXP2bfTIIt8St3T9822C8Mz+yI5OAEWwVCqdxqi8=; b=VS5Gy1AHu1mv3xKh5gmJ04BFJAv8P7BLNH5n0DVAHadXBENs55LO1ImBCNqTPnjk3H Dq7PRKJsNOPpXgbYcD1U7hiJzAla3uB19/YNhLbVuGm9B7orIjKM+hVTOMZP4MIi6aqx KXaana79Hnyi8qt3OUfr3jzFitT0SE/xrVR2NOODszlkEjmQXOD1Og+q4n27E0sBEqFB e9xEDulOTgZg+8jghVzIIsFcolRKOCzLAqcx/vS4nw/DRgW39ueQAYEYk14sN51grV0a R/2/Z1hXEdF1fFKVb/J48eYvU+SGFK4Sw8Yq6rZhZlxT7XCLw8lt1WQXxYNkpDMKBl2V xsSQ== X-Gm-Message-State: AC+VfDxeHpNIy1qgNJRhNfekWAsxph0GlgdNvG4fD/lHnRudWGDpq4k1 lTQda10XQJWzVodtidpz/p7ORA== X-Google-Smtp-Source: ACHHUZ5hV1GhQPf78RPEQj8dLuXzVGGtbX4uDKxYqhUuZR/F2WM6CQGQNWMXHDLRseslqPACLVPKJA== X-Received: by 2002:a17:903:1246:b0:1b3:d8ac:8db3 with SMTP id u6-20020a170903124600b001b3d8ac8db3mr21942648plh.6.1687424075082; Thu, 22 Jun 2023 01:54:35 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([139.177.225.254]) by smtp.gmail.com with ESMTPSA id h2-20020a170902f7c200b001b549fce345sm4806971plw.230.2023.06.22.01.54.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 22 Jun 2023 01:54:34 -0700 (PDT) From: Qi Zheng To: akpm@linux-foundation.org, david@fromorbit.com, tkhai@ya.ru, vbabka@suse.cz, roman.gushchin@linux.dev, djwong@kernel.org, brauner@kernel.org, paulmck@kernel.org, tytso@mit.edu Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-nfs@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, Qi Zheng Subject: [PATCH 04/29] drm/msm: dynamically allocate the drm-msm_gem shrinker Date: Thu, 22 Jun 2023 16:53:10 +0800 Message-Id: <20230622085335.77010-5-zhengqi.arch@bytedance.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20230622085335.77010-1-zhengqi.arch@bytedance.com> References: <20230622085335.77010-1-zhengqi.arch@bytedance.com> MIME-Version: 1.0 X-Rspamd-Queue-Id: 1E7A120006 X-Rspam-User: X-Rspamd-Server: rspam02 X-Stat-Signature: 1jbbu4xbqy9au4jmef3kezeou97m94kz X-HE-Tag: 1687424075-411365 X-HE-Meta: U2FsdGVkX1/+b+eWb7dJKfChHL+jrHUstRKPs/Gkb3VIb/6CgG2sEdCgPxmWxZeSzrggrmzHd2WUTzgNjJuDokQpushIvqbMIS4KbL3LGCTZYc8dL7HISmbUOQXTyf9l+U7twokt5owE6JaAiVdqNK9d/3HqdCDUhGd+VwvZqWOfCEim5hqh2aeqm73TdKE8fuRwYBMRazYzPSj+qaZm1M09E4ZlghOdDKgaqXtGeRPUMwMEX+/IImR7iu8RO0SrJzCGbEbSq35sm96d/cJmX3v1DuGDlKClLp/KqplgLpk69NTRHR9GKa0U/BhwsV2Vb+nWp8v2sodwf2759oW6yWqvyHLSnVRClhZqE/HK6I2ldpwrFHfbOvnBqRF4M6uLH4BsapeQX5OO9WB1i4OBwd4MXvkXxdVqFF1czpnBP5/Srho1IyXi4UKBTXdAsX3M+9GL13KgHIqdwqrvVe39z0i3i2xoui0qAuVE3xqgkSqk51bHI9feKY+je3CdsfHb+GV+nkYc8A3/z6Fz3gyiCxVlniM3X00IL8uref0eN0L2K0x6ekdb0T4S1r6VBJE+HHuniu7mFBwCfVOjl80TgHIdnmPVeY8An497C9s8QeTgy75c531McDQgNiZPBQGOHyh3O87jo31WvS7CPcltuNjAovH1yraljfaioUbx2Yub5Ys2qYOqihVkm9qFcLIqm+8kWxfRMsDRqGqRQoWdN3cN+imc4DWsIA+EKXmZnY1ooxfb2pu3dYEGhJ7C5rFFMZrV3dWOyHCF5w8cmCGlmpt1UBls0JRNWw3KBwPX6OWbmPF1zNR6qKcUwZdzmINbzCVTdbxWVzpx36AF0nwA1rFikOAwIxaPk7UDLPAJrPxoATDcT9jD4WFOGLSo4tsEjx5CPNVSWxo8mVfiyWMkZsAQAD/yx5tscy4A8lUrZhkCIzYKcaYxNCu8GlthmjILFruPlLAY76uKR6MZJLq 1oOiABTa s5w57J7/AK5BX/KdKBYMmicKHqUbARRk58mOCCx6n8CDvNpoJRB1SNu7E5LOIoNmNGDpJLxComle2XfAKDA8SHZRUBL33FTElK7WqhM0pqFSWMwUsK0dCukJY9wFZvUwrc3w53isq/vtZd33rOeCyaiYSiB5DT3mMGQDq4z+XUbbRPh30xy9sIVDtKjqSc+txjGXYwwDWNLVNrl3Yn5kVYIaIn/ewbxs01enliWMb2afRVltFgTGowtGDLOIe5V4fKm3vriqwRYSMzpTelhb3Mkv/FP2CNfTehKcWQBAE9ymFxcrehrb746pGnD4G4T5Cn3XaT+SOu4MM/a7OvEsN+RRDsvSayR6UWMiG/3HgSJhVFuQ0zmU0toTIz6L37z30MOO17/tE9YrGKXNRC7Lzpkaec3nrKaVvccv4Wjaf0KogriGtgFNduQX+LVJGi4ZTxq+7LuuTZyHX7zn36Thd/X+A0w== 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: In preparation for implementing lockless slab shrink, we need to dynamically allocate the drm-msm_gem shrinker, so that it can be freed asynchronously using kfree_rcu(). Then it doesn't need to wait for RCU read-side critical section when releasing the struct msm_drm_private. Signed-off-by: Qi Zheng --- drivers/gpu/drm/msm/msm_drv.h | 2 +- drivers/gpu/drm/msm/msm_gem_shrinker.c | 25 ++++++++++++++----------- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/drivers/gpu/drm/msm/msm_drv.h b/drivers/gpu/drm/msm/msm_drv.h index e13a8cbd61c9..4f3ba55058cd 100644 --- a/drivers/gpu/drm/msm/msm_drv.h +++ b/drivers/gpu/drm/msm/msm_drv.h @@ -217,7 +217,7 @@ struct msm_drm_private { } vram; struct notifier_block vmap_notifier; - struct shrinker shrinker; + struct shrinker *shrinker; struct drm_atomic_state *pm_state; diff --git a/drivers/gpu/drm/msm/msm_gem_shrinker.c b/drivers/gpu/drm/msm/msm_gem_shrinker.c index f38296ad8743..db7582ae1f19 100644 --- a/drivers/gpu/drm/msm/msm_gem_shrinker.c +++ b/drivers/gpu/drm/msm/msm_gem_shrinker.c @@ -34,8 +34,7 @@ static bool can_block(struct shrink_control *sc) static unsigned long msm_gem_shrinker_count(struct shrinker *shrinker, struct shrink_control *sc) { - struct msm_drm_private *priv = - container_of(shrinker, struct msm_drm_private, shrinker); + struct msm_drm_private *priv = shrinker->private_data; unsigned count = priv->lru.dontneed.count; if (can_swap()) @@ -100,8 +99,7 @@ active_evict(struct drm_gem_object *obj) static unsigned long msm_gem_shrinker_scan(struct shrinker *shrinker, struct shrink_control *sc) { - struct msm_drm_private *priv = - container_of(shrinker, struct msm_drm_private, shrinker); + struct msm_drm_private *priv = shrinker->private_data; struct { struct drm_gem_lru *lru; bool (*shrink)(struct drm_gem_object *obj); @@ -151,7 +149,7 @@ msm_gem_shrinker_shrink(struct drm_device *dev, unsigned long nr_to_scan) int ret; fs_reclaim_acquire(GFP_KERNEL); - ret = msm_gem_shrinker_scan(&priv->shrinker, &sc); + ret = msm_gem_shrinker_scan(priv->shrinker, &sc); fs_reclaim_release(GFP_KERNEL); return ret; @@ -213,10 +211,15 @@ msm_gem_shrinker_vmap(struct notifier_block *nb, unsigned long event, void *ptr) void msm_gem_shrinker_init(struct drm_device *dev) { struct msm_drm_private *priv = dev->dev_private; - priv->shrinker.count_objects = msm_gem_shrinker_count; - priv->shrinker.scan_objects = msm_gem_shrinker_scan; - priv->shrinker.seeks = DEFAULT_SEEKS; - WARN_ON(register_shrinker(&priv->shrinker, "drm-msm_gem")); + + priv->shrinker = shrinker_alloc_and_init(msm_gem_shrinker_count, + msm_gem_shrinker_scan, 0, + DEFAULT_SEEKS, 0, priv); + if (priv->shrinker && + register_shrinker(priv->shrinker, "drm-msm_gem")) { + shrinker_free(priv->shrinker); + WARN_ON(1); + } priv->vmap_notifier.notifier_call = msm_gem_shrinker_vmap; WARN_ON(register_vmap_purge_notifier(&priv->vmap_notifier)); @@ -232,8 +235,8 @@ void msm_gem_shrinker_cleanup(struct drm_device *dev) { struct msm_drm_private *priv = dev->dev_private; - if (priv->shrinker.nr_deferred) { + if (priv->shrinker->nr_deferred) { WARN_ON(unregister_vmap_purge_notifier(&priv->vmap_notifier)); - unregister_shrinker(&priv->shrinker); + unregister_and_free_shrinker(priv->shrinker); } }