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 922ADC001DF for ; Tue, 25 Jul 2023 03:05:29 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 2B9A36B0071; Mon, 24 Jul 2023 23:05:29 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 23FA56B0074; Mon, 24 Jul 2023 23:05:29 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 0BA098E0001; Mon, 24 Jul 2023 23:05:29 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id EA2216B0071 for ; Mon, 24 Jul 2023 23:05:28 -0400 (EDT) Received: from smtpin04.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id E278FB2170 for ; Tue, 25 Jul 2023 03:05:27 +0000 (UTC) X-FDA: 81048643494.04.0AAD7FA Received: from mail-pj1-f51.google.com (mail-pj1-f51.google.com [209.85.216.51]) by imf23.hostedemail.com (Postfix) with ESMTP id F404C14000B for ; Tue, 25 Jul 2023 03:05:25 +0000 (UTC) Authentication-Results: imf23.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=FniJo6cf; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf23.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.216.51 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=1690254326; 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=niSMZqBCvW/Me9jsMaxXz5gtuZ44llk1Ot3soT0LhIs=; b=iq0nUvywLXwvBBtYNt7lmUwCpU1cy6JNKEOMe3M5YBXJW4S4yy7euWq4g2Uz06z4SZsR48 J9cov6JEXMmP9M5euum3E5YAmS26TdrCwzezQaIQw6BzGTT5xzLP1XHjjOrTq77vaUpzi7 CJ95UYEa2G/p24H6mumV8TO11z9czEA= ARC-Authentication-Results: i=1; imf23.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=FniJo6cf; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf23.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.216.51 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1690254326; a=rsa-sha256; cv=none; b=tAL3BbVU/9Do3WanZ2XDzsyguMeIp/xTZsQDRHNCqwUiXnJBpxvbIySayKRvnJ9Z3dcdbg 7Lhb9iRwEtpkjEYUkpSSrOY0JVU77TPN6cXxowtMz6t1gkDi5/rFfOwkBiNCJukc2O60jJ 8OM4Vk9gZtHhoiahSKgh5lA2J1TrrBw= Received: by mail-pj1-f51.google.com with SMTP id 98e67ed59e1d1-268160d99ccso259902a91.1 for ; Mon, 24 Jul 2023 20:05:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1690254325; x=1690859125; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=niSMZqBCvW/Me9jsMaxXz5gtuZ44llk1Ot3soT0LhIs=; b=FniJo6cfZiXO48N3LrJPbrRtsXuGwEsrxL+rPNcNzpIfBU8e0vwfaKRVcngIxQ6/Nq uV6IwXjWItzg/7IWT04hxNl0ft8u0yvH7EyRJ6POcXsP6dFyjR2vvuievKT7V7wXKj9i Hs4OFXg82m4uyRZZDGIHYrUPf7Daiin7owJFDMH9ALFzGhGiMR/jo54iE9PQ2yCszEax GduXKZlfrLf0f1lI69b+SeFKsM1fBAPgAwEi9/QiPJB5pr3rcwSAawR7U6Bt6cbBHX1B l+6jljnScvspLgnoIuyzCCNBX+9PGgFUwcZiZbmROS7agCNCVVXov8LOv0CsZfjvTopq 9j6w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690254325; x=1690859125; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=niSMZqBCvW/Me9jsMaxXz5gtuZ44llk1Ot3soT0LhIs=; b=bcJYS7GYoPR4FsMZVMlWBrF1iA4jRa3VdYXwb7PXQuFd9pn8Cz9GZpM/id2UADnLEA ki5Rg6R+hHWqZcTTig7cKrsz0HQ9tPIU9bLeoI++RmWw/Yhfo2h8l4FTBdzV5CaX24Nz cvp1m6PQ4vOf5wzeFl9ayL1g8ZjG7nvdbeo1sCqY2s6P5u0FPBNPrPSYDn50u1J0EYTw hiTzD6vaViNlSufrH32Px9WxiAPhbUzc7/sBfXVfX0Oi3VcPQppkcGNT8n2hrS2frnAp nWQYTeDGy9rXMTgaaAXtIIkcWmSUPQEQv2DxLd+4cilpqo62cRcq2uFGXmc8LX5SJIwu y+JA== X-Gm-Message-State: ABy/qLYgEh8QE53WmueWzMenfU5ISwyOcGiGDD4utaULYZZCWFJWQme1 24XWakWzrh+TS6GPsORr1nVoiQ== X-Google-Smtp-Source: APBJJlFB/cQTGj3IlIfGF+HAM8hU50IJB+Lr29ujA3cHbbDSAB3N90HdGCOpa8iydTeMw+f8qxyL2Q== X-Received: by 2002:a17:90a:1d46:b0:268:abc:83d5 with SMTP id u6-20020a17090a1d4600b002680abc83d5mr6012554pju.4.1690254324674; Mon, 24 Jul 2023 20:05:24 -0700 (PDT) Received: from ?IPV6:fdbd:ff1:ce00:1c25:884:3ed:e1db:b610? ([2408:8000:b001:1:1f:58ff:f102:103]) by smtp.gmail.com with ESMTPSA id t10-20020a17090aba8a00b002681d44071csm2043968pjr.46.2023.07.24.20.05.08 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 24 Jul 2023 20:05:24 -0700 (PDT) Message-ID: <6049aa99-aa47-5137-f66e-350bc4723914@bytedance.com> Date: Tue, 25 Jul 2023 11:05:04 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Thunderbird/102.12.0 Subject: Re: [PATCH v2 24/47] drm/panfrost: dynamically allocate the drm-panfrost shrinker Content-Language: en-US To: Steven Price Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org, linux-erofs@lists.ozlabs.org, linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com, linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org, rcu@vger.kernel.org, netdev@vger.kernel.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-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, 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, cel@kernel.org, senozhatsky@chromium.org, yujie.liu@intel.com, gregkh@linuxfoundation.org, muchun.song@linux.dev References: <20230724094354.90817-1-zhengqi.arch@bytedance.com> <20230724094354.90817-25-zhengqi.arch@bytedance.com> From: Qi Zheng In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Rspamd-Queue-Id: F404C14000B X-Rspam-User: X-Rspamd-Server: rspam04 X-Stat-Signature: z4nf4qecx86i6nsinghwopnnn8gmytha X-HE-Tag: 1690254325-963685 X-HE-Meta: U2FsdGVkX1/XkEjfHL62BK4JupaSQiSXTmJlxt+9pMBInnb7JBsk3X7U9u+qm4WiylJczdYQKUoEGu289QEhizQvzaf77zziBGgjODslGYxtsdBlfXBW+qLNcc0CfVJJeuhZ2Yt2NXfL+0yAVR4loMVdeXUbrigLkU4SsRkBwWECXjt6dzVLMFbzn0RLqRQm8AUCNJWRKl+3s1wKPpZii3d2JAKMxZuinrWRZ96JMElYUFLdqu63/XdscmNRf9ekMPaZohMfNyefgLhsAa830N0sYa0vnA8XhOgQVat8ZamrOeqIwHG0L1M84yGnlycjV3AymTR4zQbYK6KENuPjXD6v8j9QIKEEP7iuc65K1ZlT1q3YrWfm+naA+J+f1oadmS4I6ymdNh+34Zz7jAEFmz4caGkIxi618k3f0wXJJdUtBGT2UajqahlB6QxBHpp+ZW9LurhHruvYkjPEGYNhN0yETzIbo5IElHMECQEnGDfx8+vTz50suUQypV3I88vvtZFVVnJRSGipIaXIvTgq1T2QCif1Dt/GbeQ+XZyjcSUBWHNt7ygCcKXNfhZzZUr+oliIIoAcF23iarCumIWqxnRzkcOW//PCJOgj80TW0JAQP1TH3fTQprHrKV9U8ZYAnzDUuO25jl6dok++hjXz0bWSd+UiSbpgdYWc8kDHdYd2cfuPnOSlTt8TccPlLM6DioyMHHw/31vuK4XgXfUVbd2iGyNyciaiPpK8VwJTFU0MKZb6Oq38TGN4+p5VuwRdi0NYymIULTCN7+eIoK5g6j5ugUft1boSME3C1WLW9SY4NI8dwp2JpZlpeVA4W2VeeYw6Y+++jn4Pjd9Rgpb1GghHcxAf9vx7h4WEDdbXYz06bfsPH94psD1U1vqWnr+/jnMx8OB8UEre67OUD4Q4Sycz0Dr11mN8tGJ1/LmB3BalqA8BZg4TSJEjBG8N9jsJs74ELTBJtmIxTm9WgFn QNlQc9R0 YzE9GlbomAfDZhzC/bjvGXqoVVC4EoND57zbNy0rxQei/QDnq9sXFCvkVbEkC2XoMJNB7x7bhEfWrSj22ayKAbvLHeQrYTCoIC3lVd4mv96YUm2nD8zL9DbH6lcHVDtimHbZYuKoGwXHF9rM7+MGNfkXJYr1W/kVRC7z0ZCSXNiQ3JRHqPe8lqTNBj7qmAcU9dCXz2Yt/U2jUwIs2K3qFzFjS+J2wOpxZORBbs2W5EcFVR8g+5kpXVH34WbRI/gkLmOw59vVPXRdnGSv5jsKzkGp5Qy/ob1ZpGr/fwvQNmaN97s8bhrkGLsgcdnur1vf1LC7MOp4HZl7w8eQGux9VofXfc9XM0rWerDhSEgNRdNQsvF1pXof4GehmRD7Q2qmTXwO5rFlRAxPAWnuTZEcRmLSIhulg0NoLOZd0B+atQ2xmJ6FEZIcr5zAvRiyuMs05L1GmLWWjh9Mq82tCz9NwrTmrYxOvoL5lNBVJYamelOmAkoMpXS6e5Xl6Ww== 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: Hi Steven, On 2023/7/24 19:17, Steven Price wrote: > On 24/07/2023 10:43, Qi Zheng wrote: >> In preparation for implementing lockless slab shrink, use new APIs to >> dynamically allocate the drm-panfrost 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 panfrost_device. >> >> Signed-off-by: Qi Zheng > > One nit below, but otherwise: > > Reviewed-by: Steven Price > >> --- >> drivers/gpu/drm/panfrost/panfrost_device.h | 2 +- >> drivers/gpu/drm/panfrost/panfrost_drv.c | 6 +++- >> drivers/gpu/drm/panfrost/panfrost_gem.h | 2 +- >> .../gpu/drm/panfrost/panfrost_gem_shrinker.c | 32 ++++++++++++------- >> 4 files changed, 27 insertions(+), 15 deletions(-) >> >> diff --git a/drivers/gpu/drm/panfrost/panfrost_device.h b/drivers/gpu/drm/panfrost/panfrost_device.h >> index b0126b9fbadc..e667e5689353 100644 >> --- a/drivers/gpu/drm/panfrost/panfrost_device.h >> +++ b/drivers/gpu/drm/panfrost/panfrost_device.h >> @@ -118,7 +118,7 @@ struct panfrost_device { >> >> struct mutex shrinker_lock; >> struct list_head shrinker_list; >> - struct shrinker shrinker; >> + struct shrinker *shrinker; >> >> struct panfrost_devfreq pfdevfreq; >> }; >> diff --git a/drivers/gpu/drm/panfrost/panfrost_drv.c b/drivers/gpu/drm/panfrost/panfrost_drv.c >> index bbada731bbbd..f705bbdea360 100644 >> --- a/drivers/gpu/drm/panfrost/panfrost_drv.c >> +++ b/drivers/gpu/drm/panfrost/panfrost_drv.c >> @@ -598,10 +598,14 @@ static int panfrost_probe(struct platform_device *pdev) >> if (err < 0) >> goto err_out1; >> >> - panfrost_gem_shrinker_init(ddev); >> + err = panfrost_gem_shrinker_init(ddev); >> + if (err) >> + goto err_out2; >> >> return 0; >> >> +err_out2: >> + drm_dev_unregister(ddev); >> err_out1: >> pm_runtime_disable(pfdev->dev); >> panfrost_device_fini(pfdev); >> diff --git a/drivers/gpu/drm/panfrost/panfrost_gem.h b/drivers/gpu/drm/panfrost/panfrost_gem.h >> index ad2877eeeccd..863d2ec8d4f0 100644 >> --- a/drivers/gpu/drm/panfrost/panfrost_gem.h >> +++ b/drivers/gpu/drm/panfrost/panfrost_gem.h >> @@ -81,7 +81,7 @@ panfrost_gem_mapping_get(struct panfrost_gem_object *bo, >> void panfrost_gem_mapping_put(struct panfrost_gem_mapping *mapping); >> void panfrost_gem_teardown_mappings_locked(struct panfrost_gem_object *bo); >> >> -void panfrost_gem_shrinker_init(struct drm_device *dev); >> +int panfrost_gem_shrinker_init(struct drm_device *dev); >> void panfrost_gem_shrinker_cleanup(struct drm_device *dev); >> >> #endif /* __PANFROST_GEM_H__ */ >> diff --git a/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c b/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c >> index bf0170782f25..9a90dfb5301f 100644 >> --- a/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c >> +++ b/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c >> @@ -18,8 +18,7 @@ >> static unsigned long >> panfrost_gem_shrinker_count(struct shrinker *shrinker, struct shrink_control *sc) >> { >> - struct panfrost_device *pfdev = >> - container_of(shrinker, struct panfrost_device, shrinker); >> + struct panfrost_device *pfdev = shrinker->private_data; >> struct drm_gem_shmem_object *shmem; >> unsigned long count = 0; >> >> @@ -65,8 +64,7 @@ static bool panfrost_gem_purge(struct drm_gem_object *obj) >> static unsigned long >> panfrost_gem_shrinker_scan(struct shrinker *shrinker, struct shrink_control *sc) >> { >> - struct panfrost_device *pfdev = >> - container_of(shrinker, struct panfrost_device, shrinker); >> + struct panfrost_device *pfdev = shrinker->private_data; >> struct drm_gem_shmem_object *shmem, *tmp; >> unsigned long freed = 0; >> >> @@ -97,13 +95,24 @@ panfrost_gem_shrinker_scan(struct shrinker *shrinker, struct shrink_control *sc) >> * >> * This function registers and sets up the panfrost shrinker. >> */ >> -void panfrost_gem_shrinker_init(struct drm_device *dev) >> +int panfrost_gem_shrinker_init(struct drm_device *dev) >> { >> struct panfrost_device *pfdev = dev->dev_private; >> - pfdev->shrinker.count_objects = panfrost_gem_shrinker_count; >> - pfdev->shrinker.scan_objects = panfrost_gem_shrinker_scan; >> - pfdev->shrinker.seeks = DEFAULT_SEEKS; >> - WARN_ON(register_shrinker(&pfdev->shrinker, "drm-panfrost")); >> + >> + pfdev->shrinker = shrinker_alloc(0, "drm-panfrost"); >> + if (!pfdev->shrinker) { >> + WARN_ON(1); > > I don't think this WARN_ON is particularly useful - if there's a failed > memory allocation we should see output from the kernel anyway. And we're > changing the semantics from "continue just without a shrinker" (which > argueably justifies the warning) to "probe fails, device doesn't work" > which will be obvious to the user so I don't feel we need the additional > warn. Make sense. Will delete this WARN_ON() in the next version. Thanks, Qi > >> + return -ENOMEM; >> + } >> + >> + pfdev->shrinker->count_objects = panfrost_gem_shrinker_count; >> + pfdev->shrinker->scan_objects = panfrost_gem_shrinker_scan; >> + pfdev->shrinker->seeks = DEFAULT_SEEKS; >> + pfdev->shrinker->private_data = pfdev; >> + >> + shrinker_register(pfdev->shrinker); >> + >> + return 0; >> } >> >> /** >> @@ -116,7 +125,6 @@ void panfrost_gem_shrinker_cleanup(struct drm_device *dev) >> { >> struct panfrost_device *pfdev = dev->dev_private; >> >> - if (pfdev->shrinker.nr_deferred) { >> - unregister_shrinker(&pfdev->shrinker); >> - } >> + if (pfdev->shrinker) >> + shrinker_unregister(pfdev->shrinker); >> } >