From patchwork Thu Sep 14 23:27:12 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 140158 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:612c:172:b0:3f2:4152:657d with SMTP id h50csp837124vqi; Thu, 14 Sep 2023 23:11:55 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGRu8W48kmHA7waM/hj1C+NtVOWJQGWIE2oKlJWFYrf3r7JlJabczm4QsJsCaoSJTzBwdAE X-Received: by 2002:a17:902:f682:b0:1c2:1068:1f4f with SMTP id l2-20020a170902f68200b001c210681f4fmr743867plg.17.1694758314804; Thu, 14 Sep 2023 23:11:54 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1694758314; cv=none; d=google.com; s=arc-20160816; b=GRdhoLZ7wPsR1TVuAnZncK0eA6k+RCwHN7btxXTaNeHoTaMruVcdfjNJ8f9h3nyPd8 WzeWk/0TOPHYDmkOxb9cbscgS0a9tYMQWUEOGL2hfyy+PypgoPM/mXUr29FOFONG/EVl +OjnPZvvhB9tAVOpm82/hVnNMhRB32XNUz2P7+UE7nGrYqcjcDEBI5rCJOFzpJDGewrQ PKaBlLeqOa3xia6fXndyUdYQOJeE9DVEKfFxX0hvmVmli8gcVgtplmzsulvcMwssX66i 14GDz67HIW+x1V8xEbY4xEwSJO98FDAFh2EtLda35MJi0ymzYQKWzzS7YSB6CqW+m3k/ to+A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=EHygFF1htLyiJlSLQ+TwnOaOOPpdm+Gf0dbmLtiIgaE=; fh=5cel2jD5h+yPMXVwxbomyVhwojHUqATy6nFjd4aOh4o=; b=HFh8+5JAkDRCkVAbdALBte5r170HF9w5sBFRZogXrpiDcnpVxEBQwRSULKJCgD3u86 gZV97C99mgKDp17483bvmKShakdI6snZYXPTTe0/wxHQo3yKKT3s9FDerHTeV0l/Wmxa bKI13ztMeeVIQIpqm8xdeDnqUJEk6DHZdX1XNPwDw2y0wSe7Gac19lbwi0V2N7CBZVKc PmndEpUpGUHpxIgfGL/wwM/5wuToWaMs6TJYOpE2+YKuhdjy5POhfTH68Ps4L+Cvy9Kq enTJyP7vGk3Af8zcxBF7yDcTYC69X7LPyoZpGpldebmk6GPJFpsR0T53iLZcX2aEELV4 GirA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@collabora.com header.s=mail header.b=mJDAivmp; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:1 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=collabora.com Received: from morse.vger.email (morse.vger.email. [2620:137:e000::3:1]) by mx.google.com with ESMTPS id a17-20020a170902ecd100b001bc162f3318si3015154plh.640.2023.09.14.23.11.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 14 Sep 2023 23:11:54 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:1 as permitted sender) client-ip=2620:137:e000::3:1; Authentication-Results: mx.google.com; dkim=pass header.i=@collabora.com header.s=mail header.b=mJDAivmp; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:1 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=collabora.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by morse.vger.email (Postfix) with ESMTP id B3BD8826EEA7; Thu, 14 Sep 2023 16:30:30 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at morse.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231217AbjINX3c (ORCPT + 33 others); Thu, 14 Sep 2023 19:29:32 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48458 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230471AbjINX3T (ORCPT ); Thu, 14 Sep 2023 19:29:19 -0400 Received: from madras.collabora.co.uk (madras.collabora.co.uk [46.235.227.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 00E072D47 for ; Thu, 14 Sep 2023 16:29:11 -0700 (PDT) Received: from workpc.. (109-252-153-31.dynamic.spd-mgts.ru [109.252.153.31]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: dmitry.osipenko) by madras.collabora.co.uk (Postfix) with ESMTPSA id 9CC4C6607361; Fri, 15 Sep 2023 00:29:09 +0100 (BST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1694734150; bh=95RvGfyJ8q6zGTTDbjPVGjLvvotKmfU2Ktoc4dGTUKQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=mJDAivmpg/D+DaEAG229AKQ7UmZIT61e/n0KyYcX1e+9ozi6FpRQX9xYrzL3K1U51 5tWAJBHIgbacmJA2z5RORt3iW0NM9tq3miw5EiDAaz9EmmKsfIkGjJfoGBbSn5bOAH zY2HBF/TX9YGBQJwt05dOCEgRojEELEU/V00gPLGBeg8fX3K+JfwgWpDVqREwUS3pY GrjRWVYu+eSUCSkxNQYZmMfkf9V+MfPRSgL+YDVLi2gGI6tN+Hxl4yxPBvFJeo4RCy q4yyaX0YAC/edn8qHd2zm2TtHq7qKFC53VsMqX1rHM438cBtrYnpJC0OHvSg8L0YHI 0VkhUEm2ZAbJw== From: Dmitry Osipenko To: David Airlie , Gerd Hoffmann , Gurchetan Singh , Chia-I Wu , Daniel Vetter , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , =?utf-8?q?Christian_K=C3=B6nig?= , Qiang Yu , Steven Price , Boris Brezillon , Emma Anholt , Melissa Wen Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, kernel@collabora.com, virtualization@lists.linux-foundation.org Subject: [PATCH v17 09/18] drm/shmem-helper: Switch drm_gem_shmem_vmap/vunmap to use pin/unpin Date: Fri, 15 Sep 2023 02:27:12 +0300 Message-ID: <20230914232721.408581-10-dmitry.osipenko@collabora.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230914232721.408581-1-dmitry.osipenko@collabora.com> References: <20230914232721.408581-1-dmitry.osipenko@collabora.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (morse.vger.email [0.0.0.0]); Thu, 14 Sep 2023 16:30:30 -0700 (PDT) X-Spam-Status: No, score=-0.9 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on morse.vger.email X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1777082894544881668 X-GMAIL-MSGID: 1777082894544881668 The vmapped pages shall be pinned in memory and previously get/put_pages() were implicitly hard-pinning/unpinning the pages. This will no longer be the case with addition of memory shrinker because pages_use_count > 0 won't determine anymore whether pages are hard-pinned (they will be soft-pinned), while the new pages_pin_count will do the hard-pinning. Switch the vmap/vunmap() to use pin/unpin() functions in a preparation of addition of the memory shrinker support to drm-shmem. Reviewed-by: Boris Brezillon Signed-off-by: Dmitry Osipenko --- drivers/gpu/drm/drm_gem_shmem_helper.c | 19 ++++++++++++------- include/drm/drm_gem_shmem_helper.h | 2 +- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/drivers/gpu/drm/drm_gem_shmem_helper.c b/drivers/gpu/drm/drm_gem_shmem_helper.c index a5964f347dda..e33810450324 100644 --- a/drivers/gpu/drm/drm_gem_shmem_helper.c +++ b/drivers/gpu/drm/drm_gem_shmem_helper.c @@ -255,6 +255,14 @@ static int drm_gem_shmem_pin_locked(struct drm_gem_shmem_object *shmem) return ret; } +static void drm_gem_shmem_unpin_locked(struct drm_gem_shmem_object *shmem) +{ + dma_resv_assert_held(shmem->base.resv); + + if (refcount_dec_and_test(&shmem->pages_pin_count)) + drm_gem_shmem_put_pages_locked(shmem); +} + /** * drm_gem_shmem_pin - Pin backing pages for a shmem GEM object * @shmem: shmem GEM object @@ -302,10 +310,7 @@ void drm_gem_shmem_unpin(struct drm_gem_shmem_object *shmem) return; dma_resv_lock(shmem->base.resv, NULL); - - if (refcount_dec_and_test(&shmem->pages_pin_count)) - drm_gem_shmem_put_pages_locked(shmem); - + drm_gem_shmem_unpin_locked(shmem); dma_resv_unlock(shmem->base.resv); } EXPORT_SYMBOL_GPL(drm_gem_shmem_unpin); @@ -343,7 +348,7 @@ int drm_gem_shmem_vmap_locked(struct drm_gem_shmem_object *shmem, return 0; } - ret = drm_gem_shmem_get_pages_locked(shmem); + ret = drm_gem_shmem_pin_locked(shmem); if (ret) goto err_zero_use; @@ -366,7 +371,7 @@ int drm_gem_shmem_vmap_locked(struct drm_gem_shmem_object *shmem, err_put_pages: if (!obj->import_attach) - drm_gem_shmem_put_pages_locked(shmem); + drm_gem_shmem_unpin_locked(shmem); err_zero_use: shmem->vmap_use_count = 0; @@ -403,7 +408,7 @@ void drm_gem_shmem_vunmap_locked(struct drm_gem_shmem_object *shmem, return; vunmap(shmem->vaddr); - drm_gem_shmem_put_pages_locked(shmem); + drm_gem_shmem_unpin_locked(shmem); } shmem->vaddr = NULL; diff --git a/include/drm/drm_gem_shmem_helper.h b/include/drm/drm_gem_shmem_helper.h index 3947f5c6bff7..5b1ce7f7a39c 100644 --- a/include/drm/drm_gem_shmem_helper.h +++ b/include/drm/drm_gem_shmem_helper.h @@ -123,7 +123,7 @@ int drm_gem_shmem_madvise_locked(struct drm_gem_shmem_object *shmem, int madv); static inline bool drm_gem_shmem_is_purgeable(struct drm_gem_shmem_object *shmem) { return (shmem->madv > 0) && - !shmem->vmap_use_count && shmem->sgt && + !refcount_read(&shmem->pages_pin_count) && shmem->sgt && !shmem->base.dma_buf && !shmem->base.import_attach; }