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 X-Spam-Level: X-Spam-Status: No, score=-8.2 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id C8188C432C0 for ; Fri, 29 Nov 2019 14:45:44 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id A90B821736 for ; Fri, 29 Nov 2019 14:45:44 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726889AbfK2Opo (ORCPT ); Fri, 29 Nov 2019 09:45:44 -0500 Received: from foss.arm.com ([217.140.110.172]:48756 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726808AbfK2Opo (ORCPT ); Fri, 29 Nov 2019 09:45:44 -0500 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 545C51FB; Fri, 29 Nov 2019 06:45:43 -0800 (PST) Received: from [10.1.194.43] (e112269-lin.cambridge.arm.com [10.1.194.43]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 89E0A3F68E; Fri, 29 Nov 2019 06:45:42 -0800 (PST) Subject: Re: [PATCH 6/8] drm/panfrost: Make sure imported/exported BOs are never purged To: Boris Brezillon , Rob Herring , Tomeu Vizoso , Alyssa Rosenzweig Cc: stable@vger.kernel.org, dri-devel@lists.freedesktop.org References: <20191129135908.2439529-1-boris.brezillon@collabora.com> <20191129135908.2439529-7-boris.brezillon@collabora.com> From: Steven Price Message-ID: <4094e136-a6e3-9a0d-9b56-8c196217e4d4@arm.com> Date: Fri, 29 Nov 2019 14:45:41 +0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.2.2 MIME-Version: 1.0 In-Reply-To: <20191129135908.2439529-7-boris.brezillon@collabora.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org On 29/11/2019 13:59, Boris Brezillon wrote: > We don't want imported/exported BOs to be purges, as those are shared s/purges/purged/ > with other processes that might still use them. We should also refuse > to export a BO if it's been marked purgeable or has already been purged. > > Fixes: 013b65101315 ("drm/panfrost: Add madvise and shrinker support") > Cc: > Signed-off-by: Boris Brezillon > --- > drivers/gpu/drm/panfrost/panfrost_drv.c | 19 ++++++++++++++++- > drivers/gpu/drm/panfrost/panfrost_gem.c | 27 +++++++++++++++++++++++++ > 2 files changed, 45 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/panfrost/panfrost_drv.c b/drivers/gpu/drm/panfrost/panfrost_drv.c > index 1c67ac434e10..751df975534f 100644 > --- a/drivers/gpu/drm/panfrost/panfrost_drv.c > +++ b/drivers/gpu/drm/panfrost/panfrost_drv.c > @@ -343,6 +343,7 @@ static int panfrost_ioctl_madvise(struct drm_device *dev, void *data, > struct drm_panfrost_madvise *args = data; > struct panfrost_device *pfdev = dev->dev_private; > struct drm_gem_object *gem_obj; > + int ret; > > gem_obj = drm_gem_object_lookup(file_priv, args->handle); > if (!gem_obj) { > @@ -350,6 +351,19 @@ static int panfrost_ioctl_madvise(struct drm_device *dev, void *data, > return -ENOENT; > } > > + /* > + * We don't want to mark exported/imported BOs as purgeable: we're not > + * the only owner in that case. > + */ > + mutex_lock(&dev->object_name_lock); > + if (gem_obj->dma_buf) > + ret = -EINVAL; > + else > + ret = 0; > + > + if (ret) > + goto out_unlock_object_name; > + This might be better by setting ret = 0 at the beginning of the function. This can then be re-written as the more normal: if (gem_obj->dma_buf) { ret = -EINVAL; goto out_unlock_object_name; ] > mutex_lock(&pfdev->shrinker_lock); > args->retained = drm_gem_shmem_madvise(gem_obj, args->madv); > > @@ -364,8 +378,11 @@ static int panfrost_ioctl_madvise(struct drm_device *dev, void *data, > } > mutex_unlock(&pfdev->shrinker_lock); > > +out_unlock_object_name: > + mutex_unlock(&dev->object_name_lock); > + > drm_gem_object_put_unlocked(gem_obj); > - return 0; > + return ret; > } > > int panfrost_unstable_ioctl_check(void) > diff --git a/drivers/gpu/drm/panfrost/panfrost_gem.c b/drivers/gpu/drm/panfrost/panfrost_gem.c > index 92a95210a899..31d6417dd21c 100644 > --- a/drivers/gpu/drm/panfrost/panfrost_gem.c > +++ b/drivers/gpu/drm/panfrost/panfrost_gem.c > @@ -99,6 +99,32 @@ void panfrost_gem_close(struct drm_gem_object *obj, struct drm_file *file_priv) > spin_unlock(&priv->mm_lock); > } > > +static struct dma_buf * > +panfrost_gem_export(struct drm_gem_object *obj, int flags) > +{ > + struct panfrost_gem_object *bo = to_panfrost_bo(obj); > + int ret; > + > + /* > + * We must make sure the BO has not been marked purgeable/purged before > + * adding the mapping. > + * Note that we don't need to protect this test with a lock because > + * &drm_gem_object_funcs.export() is called with > + * &drm_device.object_lock held, and panfrost_ioctl_madvise() takes > + * this lock before calling drm_gem_shmem_madvise() (the function that > + * modifies bo->base.madv). > + */ > + if (bo->base.madv == PANFROST_MADV_WILLNEED) > + ret = -EINVAL; > + else > + ret = 0; > + > + if (ret) > + return ERR_PTR(ret); No need for ret here: if (bo->base.madv == PANFROST_MADV_WILLNEED) return ERR_PTR(-EINVAL); Steve > + > + return drm_gem_prime_export(obj, flags); > +} > + > static int panfrost_gem_pin(struct drm_gem_object *obj) > { > if (to_panfrost_bo(obj)->is_heap) > @@ -112,6 +138,7 @@ static const struct drm_gem_object_funcs panfrost_gem_funcs = { > .open = panfrost_gem_open, > .close = panfrost_gem_close, > .print_info = drm_gem_shmem_print_info, > + .export = panfrost_gem_export, > .pin = panfrost_gem_pin, > .unpin = drm_gem_shmem_unpin, > .get_sg_table = drm_gem_shmem_get_sg_table, > 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 X-Spam-Level: X-Spam-Status: No, score=-8.2 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id C3470C43215 for ; Fri, 29 Nov 2019 14:45:45 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 9F95A21736 for ; Fri, 29 Nov 2019 14:45:45 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 9F95A21736 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=arm.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id E8C666E926; Fri, 29 Nov 2019 14:45:44 +0000 (UTC) Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by gabe.freedesktop.org (Postfix) with ESMTP id BAA876E926 for ; Fri, 29 Nov 2019 14:45:43 +0000 (UTC) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 545C51FB; Fri, 29 Nov 2019 06:45:43 -0800 (PST) Received: from [10.1.194.43] (e112269-lin.cambridge.arm.com [10.1.194.43]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 89E0A3F68E; Fri, 29 Nov 2019 06:45:42 -0800 (PST) Subject: Re: [PATCH 6/8] drm/panfrost: Make sure imported/exported BOs are never purged To: Boris Brezillon , Rob Herring , Tomeu Vizoso , Alyssa Rosenzweig References: <20191129135908.2439529-1-boris.brezillon@collabora.com> <20191129135908.2439529-7-boris.brezillon@collabora.com> From: Steven Price Message-ID: <4094e136-a6e3-9a0d-9b56-8c196217e4d4@arm.com> Date: Fri, 29 Nov 2019 14:45:41 +0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.2.2 MIME-Version: 1.0 In-Reply-To: <20191129135908.2439529-7-boris.brezillon@collabora.com> Content-Language: en-US X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: dri-devel@lists.freedesktop.org, stable@vger.kernel.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Message-ID: <20191129144541.TmA2Hdl8cZ2FB_4MUXIb_4zFM3a-2JUZLK-9Bi1BvZM@z> T24gMjkvMTEvMjAxOSAxMzo1OSwgQm9yaXMgQnJlemlsbG9uIHdyb3RlOgo+IFdlIGRvbid0IHdh bnQgaW1wb3J0ZWQvZXhwb3J0ZWQgQk9zIHRvIGJlIHB1cmdlcywgYXMgdGhvc2UgYXJlIHNoYXJl ZAoKcy9wdXJnZXMvcHVyZ2VkLwoKPiB3aXRoIG90aGVyIHByb2Nlc3NlcyB0aGF0IG1pZ2h0IHN0 aWxsIHVzZSB0aGVtLiBXZSBzaG91bGQgYWxzbyByZWZ1c2UKPiB0byBleHBvcnQgYSBCTyBpZiBp dCdzIGJlZW4gbWFya2VkIHB1cmdlYWJsZSBvciBoYXMgYWxyZWFkeSBiZWVuIHB1cmdlZC4KPiAK PiBGaXhlczogMDEzYjY1MTAxMzE1ICgiZHJtL3BhbmZyb3N0OiBBZGQgbWFkdmlzZSBhbmQgc2hy aW5rZXIgc3VwcG9ydCIpCj4gQ2M6IDxzdGFibGVAdmdlci5rZXJuZWwub3JnPgo+IFNpZ25lZC1v ZmYtYnk6IEJvcmlzIEJyZXppbGxvbiA8Ym9yaXMuYnJlemlsbG9uQGNvbGxhYm9yYS5jb20+Cj4g LS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9kcnYuYyB8IDE5ICsrKysr KysrKysrKysrKystCj4gIGRyaXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9nZW0uYyB8 IDI3ICsrKysrKysrKysrKysrKysrKysrKysrKysKPiAgMiBmaWxlcyBjaGFuZ2VkLCA0NSBpbnNl cnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9wYW5mcm9zdC9wYW5mcm9zdF9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9wYW5m cm9zdF9kcnYuYwo+IGluZGV4IDFjNjdhYzQzNGUxMC4uNzUxZGY5NzU1MzRmIDEwMDY0NAo+IC0t LSBhL2RyaXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9kcnYuYwo+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9kcnYuYwo+IEBAIC0zNDMsNiArMzQzLDcgQEAg c3RhdGljIGludCBwYW5mcm9zdF9pb2N0bF9tYWR2aXNlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYs IHZvaWQgKmRhdGEsCj4gIAlzdHJ1Y3QgZHJtX3BhbmZyb3N0X21hZHZpc2UgKmFyZ3MgPSBkYXRh Owo+ICAJc3RydWN0IHBhbmZyb3N0X2RldmljZSAqcGZkZXYgPSBkZXYtPmRldl9wcml2YXRlOwo+ ICAJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW1fb2JqOwo+ICsJaW50IHJldDsKPiAgCj4gIAln ZW1fb2JqID0gZHJtX2dlbV9vYmplY3RfbG9va3VwKGZpbGVfcHJpdiwgYXJncy0+aGFuZGxlKTsK PiAgCWlmICghZ2VtX29iaikgewo+IEBAIC0zNTAsNiArMzUxLDE5IEBAIHN0YXRpYyBpbnQgcGFu ZnJvc3RfaW9jdGxfbWFkdmlzZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAo+ ICAJCXJldHVybiAtRU5PRU5UOwo+ICAJfQo+ICAKPiArCS8qCj4gKwkgKiBXZSBkb24ndCB3YW50 IHRvIG1hcmsgZXhwb3J0ZWQvaW1wb3J0ZWQgQk9zIGFzIHB1cmdlYWJsZTogd2UncmUgbm90Cj4g KwkgKiB0aGUgb25seSBvd25lciBpbiB0aGF0IGNhc2UuCj4gKwkgKi8KPiArCW11dGV4X2xvY2so JmRldi0+b2JqZWN0X25hbWVfbG9jayk7Cj4gKwlpZiAoZ2VtX29iai0+ZG1hX2J1ZikKPiArCQly ZXQgPSAtRUlOVkFMOwo+ICsJZWxzZQo+ICsJCXJldCA9IDA7Cj4gKwo+ICsJaWYgKHJldCkKPiAr CQlnb3RvIG91dF91bmxvY2tfb2JqZWN0X25hbWU7Cj4gKwoKVGhpcyBtaWdodCBiZSBiZXR0ZXIg Ynkgc2V0dGluZyByZXQgPSAwIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlCmZ1bmN0aW9uLiBUaGlz IGNhbiB0aGVuIGJlIHJlLXdyaXR0ZW4gYXMgdGhlIG1vcmUgbm9ybWFsOgoKCWlmIChnZW1fb2Jq LT5kbWFfYnVmKSB7CgkJcmV0ID0gLUVJTlZBTDsKCQlnb3RvIG91dF91bmxvY2tfb2JqZWN0X25h bWU7CgldCgo+ICAJbXV0ZXhfbG9jaygmcGZkZXYtPnNocmlua2VyX2xvY2spOwo+ICAJYXJncy0+ cmV0YWluZWQgPSBkcm1fZ2VtX3NobWVtX21hZHZpc2UoZ2VtX29iaiwgYXJncy0+bWFkdik7Cj4g IAo+IEBAIC0zNjQsOCArMzc4LDExIEBAIHN0YXRpYyBpbnQgcGFuZnJvc3RfaW9jdGxfbWFkdmlz ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAo+ICAJfQo+ICAJbXV0ZXhfdW5s b2NrKCZwZmRldi0+c2hyaW5rZXJfbG9jayk7Cj4gIAo+ICtvdXRfdW5sb2NrX29iamVjdF9uYW1l Ogo+ICsJbXV0ZXhfdW5sb2NrKCZkZXYtPm9iamVjdF9uYW1lX2xvY2spOwo+ICsKPiAgCWRybV9n ZW1fb2JqZWN0X3B1dF91bmxvY2tlZChnZW1fb2JqKTsKPiAtCXJldHVybiAwOwo+ICsJcmV0dXJu IHJldDsKPiAgfQo+ICAKPiAgaW50IHBhbmZyb3N0X3Vuc3RhYmxlX2lvY3RsX2NoZWNrKHZvaWQp Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9nZW0uYyBi L2RyaXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9nZW0uYwo+IGluZGV4IDkyYTk1MjEw YTg5OS4uMzFkNjQxN2RkMjFjIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9wYW5mcm9z dC9wYW5mcm9zdF9nZW0uYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9wYW5mcm9z dF9nZW0uYwo+IEBAIC05OSw2ICs5OSwzMiBAQCB2b2lkIHBhbmZyb3N0X2dlbV9jbG9zZShzdHJ1 Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCj4gIAlz cGluX3VubG9jaygmcHJpdi0+bW1fbG9jayk7Cj4gIH0KPiAgCj4gK3N0YXRpYyBzdHJ1Y3QgZG1h X2J1ZiAqCj4gK3BhbmZyb3N0X2dlbV9leHBvcnQoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmos IGludCBmbGFncykKPiArewo+ICsJc3RydWN0IHBhbmZyb3N0X2dlbV9vYmplY3QgKmJvID0gdG9f cGFuZnJvc3RfYm8ob2JqKTsKPiArCWludCByZXQ7Cj4gKwo+ICsJLyoKPiArCSAqIFdlIG11c3Qg bWFrZSBzdXJlIHRoZSBCTyBoYXMgbm90IGJlZW4gbWFya2VkIHB1cmdlYWJsZS9wdXJnZWQgYmVm b3JlCj4gKwkgKiBhZGRpbmcgdGhlIG1hcHBpbmcuCj4gKwkgKiBOb3RlIHRoYXQgd2UgZG9uJ3Qg bmVlZCB0byBwcm90ZWN0IHRoaXMgdGVzdCB3aXRoIGEgbG9jayBiZWNhdXNlCj4gKwkgKiAmZHJt X2dlbV9vYmplY3RfZnVuY3MuZXhwb3J0KCkgaXMgY2FsbGVkIHdpdGgKPiArCSAqICZkcm1fZGV2 aWNlLm9iamVjdF9sb2NrIGhlbGQsIGFuZCBwYW5mcm9zdF9pb2N0bF9tYWR2aXNlKCkgdGFrZXMK PiArCSAqIHRoaXMgbG9jayBiZWZvcmUgY2FsbGluZyBkcm1fZ2VtX3NobWVtX21hZHZpc2UoKSAo dGhlIGZ1bmN0aW9uIHRoYXQKPiArCSAqIG1vZGlmaWVzIGJvLT5iYXNlLm1hZHYpLgo+ICsJICov Cj4gKwlpZiAoYm8tPmJhc2UubWFkdiA9PSBQQU5GUk9TVF9NQURWX1dJTExORUVEKQo+ICsJCXJl dCA9IC1FSU5WQUw7Cj4gKwllbHNlCj4gKwkJcmV0ID0gMDsKPiArCj4gKwlpZiAocmV0KQo+ICsJ CXJldHVybiBFUlJfUFRSKHJldCk7CgpObyBuZWVkIGZvciByZXQgaGVyZToKCglpZiAoYm8tPmJh c2UubWFkdiA9PSBQQU5GUk9TVF9NQURWX1dJTExORUVEKQoJCXJldHVybiBFUlJfUFRSKC1FSU5W QUwpOwoKU3RldmUKCj4gKwo+ICsJcmV0dXJuIGRybV9nZW1fcHJpbWVfZXhwb3J0KG9iaiwgZmxh Z3MpOwo+ICt9Cj4gKwo+ICBzdGF0aWMgaW50IHBhbmZyb3N0X2dlbV9waW4oc3RydWN0IGRybV9n ZW1fb2JqZWN0ICpvYmopCj4gIHsKPiAgCWlmICh0b19wYW5mcm9zdF9ibyhvYmopLT5pc19oZWFw KQo+IEBAIC0xMTIsNiArMTM4LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fZ2VtX29iamVj dF9mdW5jcyBwYW5mcm9zdF9nZW1fZnVuY3MgPSB7Cj4gIAkub3BlbiA9IHBhbmZyb3N0X2dlbV9v cGVuLAo+ICAJLmNsb3NlID0gcGFuZnJvc3RfZ2VtX2Nsb3NlLAo+ICAJLnByaW50X2luZm8gPSBk cm1fZ2VtX3NobWVtX3ByaW50X2luZm8sCj4gKwkuZXhwb3J0ID0gcGFuZnJvc3RfZ2VtX2V4cG9y dCwKPiAgCS5waW4gPSBwYW5mcm9zdF9nZW1fcGluLAo+ICAJLnVucGluID0gZHJtX2dlbV9zaG1l bV91bnBpbiwKPiAgCS5nZXRfc2dfdGFibGUgPSBkcm1fZ2VtX3NobWVtX2dldF9zZ190YWJsZSwK PiAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1k ZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczov L2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbA==