From patchwork Sun Oct 29 23:01:53 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 159454 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:d641:0:b0:403:3b70:6f57 with SMTP id cy1csp1896912vqb; Sun, 29 Oct 2023 16:26:53 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGRfL7LU5ENewqK8/eOnHV90Fn5xa0EISXtJGjEu/SfSzH+meuVzSkm4pcUqCAJlywai1+6 X-Received: by 2002:a05:6870:9a24:b0:1e9:d25d:3cb0 with SMTP id fo36-20020a0568709a2400b001e9d25d3cb0mr11213691oab.21.1698622013146; Sun, 29 Oct 2023 16:26:53 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1698622013; cv=none; d=google.com; s=arc-20160816; b=Lx6b3psPxT2+OE2e4mOiaOuRmI8QXGyIFGEHivy5FITNqknq3iU/7lEbfwd8JmQeES Ca6LqzVep1vhZFvQ7IVgEPf+2lwqzaEfdSOAGwYR6aYdXROFwNzNp7Gyf0iqx/3VETc9 h3BHNQI5rn8RNNNpAdiqbENH6YWlN2BXjwrPe7zjmKwX95Ew8Z6QRCkXqNxTXO1kY7TB V26NhYEn9ZZ+KDrAYKQD0IZgF5eicjqKnyivWZrjc7KO9qkWqDYbWxymcMhzGMH5DckZ JU/wAhHRSUVSuHu0ZBNSxsnC0mhFkS4vHZjWOyZqrJkE1DcYKtdFiSWrR7kkBQO8QDgC AFFg== 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=JlvkJ/gVt69tH3h66k3lp8OXEEHRxoxamx5azdaEWk4=; fh=5cel2jD5h+yPMXVwxbomyVhwojHUqATy6nFjd4aOh4o=; b=ocstsmhPQmOmT/aYf72CBlS/S/49c9fJXyttIuepzmMG7mO+xat7sghJ+59YNKKeNU /u51enXdqZpxVNl38Tm/YHPz+huRlTo4FKRmd1/lU42hyUTIZdbbRQH48cCXjvDEdeTD aC2L8UipBCvfWPWYUTOtG3XNi2eCXIoRfq41+0sQHHzTpnl537jj9/7Cwk2rKxAZUvKe DrqlBRiuz87BESVAFw65Zp+6blr1iJ1E34uZcqTVmgFA/W3rMpN1Msiwa5FgDJIa36XO 37qTY5DE0lZzbpeB+mkTEeOP+nWktXkbMw+WVYTFdpG9qFRrHC5bh+QRjXGF2CNQituE /atg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@collabora.com header.s=mail header.b=mQKrB9bo; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.32 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 agentk.vger.email (agentk.vger.email. [23.128.96.32]) by mx.google.com with ESMTPS id t15-20020a63dd0f000000b0055e607f1e99si4103694pgg.882.2023.10.29.16.26.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 29 Oct 2023 16:26:53 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.32 as permitted sender) client-ip=23.128.96.32; Authentication-Results: mx.google.com; dkim=pass header.i=@collabora.com header.s=mail header.b=mQKrB9bo; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.32 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 agentk.vger.email (Postfix) with ESMTP id 922C6805ADE9; Sun, 29 Oct 2023 16:26:21 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at agentk.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231929AbjJ2X0J (ORCPT + 31 others); Sun, 29 Oct 2023 19:26:09 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60280 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231818AbjJ2XZw (ORCPT ); Sun, 29 Oct 2023 19:25:52 -0400 Received: from madras.collabora.co.uk (madras.collabora.co.uk [IPv6:2a00:1098:0:82:1000:25:2eeb:e5ab]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E3ADC7D87 for ; Sun, 29 Oct 2023 16:04:13 -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 90B23660739F; Sun, 29 Oct 2023 23:02:46 +0000 (GMT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1698620567; bh=XINqki645Wc8g9EPZb23p5o68bDFjXO7qBHmFhDTndY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=mQKrB9boVoagum6YgnbTzBhRm3ekdhY/16TvUkNv4aHUd0nuWxU+91YM+fD+40llK sPzE3053tFMrnXUlCDYAiRd8abe6WmXp3Am7S+uUwj4xkH4vZr6nQ+6lcDbliYRSxj 1euNzz1JxaaMcCPRv0qrGd2LxrookCAeGvorDptQGuUww/iovif5TJOQ0ud+xZAdXI XcZu3R6gW6CkQZusoUdoHv/+oqd3XW+11GMASCYb5CiSfcMaBpeM2h/koctXCSbbGa JGatgPqYy+csPA6o+7tYbJzLGd74cpvPHclrOJ7zp9b6oyXmsWuM/RHiY1ThBvWgsY OO3kR5vahmowA== 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 v18 14/26] drm/lima: Explicitly get and put drm-shmem pages Date: Mon, 30 Oct 2023 02:01:53 +0300 Message-ID: <20231029230205.93277-15-dmitry.osipenko@collabora.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20231029230205.93277-1-dmitry.osipenko@collabora.com> References: <20231029230205.93277-1-dmitry.osipenko@collabora.com> MIME-Version: 1.0 X-Spam-Status: No, score=-0.8 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 agentk.vger.email 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 (agentk.vger.email [0.0.0.0]); Sun, 29 Oct 2023 16:26:21 -0700 (PDT) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1781134276328526034 X-GMAIL-MSGID: 1781134276328526034 To simplify the drm-shmem refcnt handling, we're moving away from the implicit get_pages() that is used by get_pages_sgt(). From now on drivers will have to pin pages while they use sgt. Lima driver doesn't have shrinker, hence pages are pinned and sgt is valid as long as pages' use-count > 0. Signed-off-by: Dmitry Osipenko --- drivers/gpu/drm/lima/lima_gem.c | 18 ++++++++++++++++-- drivers/gpu/drm/lima/lima_gem.h | 1 + 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/lima/lima_gem.c b/drivers/gpu/drm/lima/lima_gem.c index 988e74f67465..d255f5775dac 100644 --- a/drivers/gpu/drm/lima/lima_gem.c +++ b/drivers/gpu/drm/lima/lima_gem.c @@ -46,6 +46,7 @@ int lima_heap_alloc(struct lima_bo *bo, struct lima_vm *vm) return -ENOMEM; } + bo->put_pages = true; bo->base.pages = pages; refcount_set(&bo->base.pages_use_count, 1); @@ -115,6 +116,7 @@ int lima_gem_create_handle(struct drm_device *dev, struct drm_file *file, return PTR_ERR(shmem); obj = &shmem->base; + bo = to_lima_bo(obj); /* Mali Utgard GPU can only support 32bit address space */ mask = mapping_gfp_mask(obj->filp->f_mapping); @@ -123,13 +125,19 @@ int lima_gem_create_handle(struct drm_device *dev, struct drm_file *file, mapping_set_gfp_mask(obj->filp->f_mapping, mask); if (is_heap) { - bo = to_lima_bo(obj); err = lima_heap_alloc(bo, NULL); if (err) goto out; } else { - struct sg_table *sgt = drm_gem_shmem_get_pages_sgt(shmem); + struct sg_table *sgt; + + err = drm_gem_shmem_get_pages(shmem); + if (err) + goto out; + + bo->put_pages = true; + sgt = drm_gem_shmem_get_pages_sgt(shmem); if (IS_ERR(sgt)) { err = PTR_ERR(sgt); goto out; @@ -139,6 +147,9 @@ int lima_gem_create_handle(struct drm_device *dev, struct drm_file *file, err = drm_gem_handle_create(file, obj, handle); out: + if (err && bo->put_pages) + drm_gem_shmem_put_pages(shmem); + /* drop reference from allocate - handle holds it now */ drm_gem_object_put(obj); @@ -152,6 +163,9 @@ static void lima_gem_free_object(struct drm_gem_object *obj) if (!list_empty(&bo->va)) dev_err(obj->dev->dev, "lima gem free bo still has va\n"); + if (bo->put_pages) + drm_gem_shmem_put_pages(&bo->base); + drm_gem_shmem_free(&bo->base); } diff --git a/drivers/gpu/drm/lima/lima_gem.h b/drivers/gpu/drm/lima/lima_gem.h index ccea06142f4b..dc5a6d465c80 100644 --- a/drivers/gpu/drm/lima/lima_gem.h +++ b/drivers/gpu/drm/lima/lima_gem.h @@ -16,6 +16,7 @@ struct lima_bo { struct list_head va; size_t heap_size; + bool put_pages; }; static inline struct lima_bo *