Received: by 2002:a05:7412:31a9:b0:e2:908c:2ebd with SMTP id et41csp4289698rdb; Thu, 14 Sep 2023 19:06:46 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHmWNM+Iblkt9j9W56FH8zd6Byv6zIv+Xquk4Aur8hVJ0GM8SOGgpplHcJUEIoXrC/MqbSD X-Received: by 2002:a17:90a:a609:b0:267:fb26:32bd with SMTP id c9-20020a17090aa60900b00267fb2632bdmr269058pjq.7.1694743605692; Thu, 14 Sep 2023 19:06:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1694743605; cv=none; d=google.com; s=arc-20160816; b=CrJG1y79mBbAk604dkdQdP4lEZlYg2YXoNkFeoy6pz+Ok31f2j9+lMYtqgjbv7ZaLm LvhtAdpnM+kEDd3/L+cA/Mq6JZ3lrZR1RtHSO8hliThIqP3v0E+e+02d2K7vQxPAaynR hqS0lRy3+yr/bdRFEIP8/mxEGepKszN5dtsFWiwbYSDs8DQXyerKp2sS49OU3SqdVWkT ZhQDgVl+ipclYGQiUB9vaHdGYwaCSfeDJ9BZxcX6Y8kdmWME9VnfbQEpYdfA7uLkS4ez lf545l4+rKFHfPs1LsGuaOOalWw22LwvdMhWl0nCT1DZj22vx2yOeLNdo0paqS0vzPrq qrmg== 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 23.128.96.31 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=collabora.com Return-Path: Received: from morse.vger.email (morse.vger.email. [23.128.96.31]) by mx.google.com with ESMTPS id f6-20020a17090ab94600b00263a985aba5si4633195pjw.149.2023.09.14.19.06.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 14 Sep 2023 19:06:45 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.31 as permitted sender) client-ip=23.128.96.31; 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 23.128.96.31 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 45DF78363C75; Thu, 14 Sep 2023 16:29:43 -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 S231214AbjINX3c (ORCPT + 99 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=20K=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 Content-Transfer-Encoding: 8bit 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:29:43 -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 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; } -- 2.41.0