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=-16.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT 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 5941DC49EA3 for ; Mon, 28 Jun 2021 14:46:59 +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 25B986192F for ; Mon, 28 Jun 2021 14:46:59 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 25B986192F Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linux.intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id CE1286E47E; Mon, 28 Jun 2021 14:46:50 +0000 (UTC) Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by gabe.freedesktop.org (Postfix) with ESMTPS id 464356E47B; Mon, 28 Jun 2021 14:46:47 +0000 (UTC) X-IronPort-AV: E=McAfee;i="6200,9189,10029"; a="271825237" X-IronPort-AV: E=Sophos;i="5.83,306,1616482800"; d="scan'208";a="271825237" Received: from orsmga003.jf.intel.com ([10.7.209.27]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 Jun 2021 07:46:47 -0700 X-IronPort-AV: E=Sophos;i="5.83,306,1616482800"; d="scan'208";a="408091051" Received: from danielmi-mobl2.ger.corp.intel.com (HELO thellst-mobl1.intel.com) ([10.249.254.242]) by orsmga003-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 Jun 2021 07:46:45 -0700 From: =?UTF-8?q?Thomas=20Hellstr=C3=B6m?= To: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org Date: Mon, 28 Jun 2021 16:46:25 +0200 Message-Id: <20210628144626.76126-5-thomas.hellstrom@linux.intel.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210628144626.76126-1-thomas.hellstrom@linux.intel.com> References: <20210628144626.76126-1-thomas.hellstrom@linux.intel.com> MIME-Version: 1.0 Subject: [Intel-gfx] [PATCH v3 4/5] drm/i915/gem: Fix same-driver-another-instance dma-buf export X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?q?Thomas=20Hellstr=C3=B6m?= , Ruhl@freedesktop.org, matthew.auld@intel.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" SWYgb3VyIGV4cG9ydGVkIGRtYS1idWZzIGFyZSBpbXBvcnRlZCBieSBhbm90aGVyIGluc3RhbmNl IG9mIG91ciBkcml2ZXIsCnRoYXQgaW5zdGFuY2Ugd2lsbCB0eXBpY2FsbHkgaGF2ZSB0aGUgaW1w b3J0ZWQgZG1hLWJ1ZnMgbG9ja2VkIGR1cmluZwptYXBfYXR0YWNobWVudCgpLiBCdXQgdGhlIGV4 cG9ydGVyIGFsc28gbG9ja3MgdGhlIHNhbWUgcmVzZXJ2YXRpb24Kb2JqZWN0IGluIHRoZSBtYXBf ZG1hX2J1ZigpIGNhbGxiYWNrLCB3aGljaCBsZWFkcyB0byByZWN1cnNpdmUgbG9ja2luZy4KCkFk ZCBhIGxpdmUgc2VsZnRlc3QgdG8gY2F0Y2ggdGhpcyBjYXNlLCBhbmQgYXMgYSB3b3JrYXJvdW5k IHVudGlsCndlIGZ1bGx5IHN1cHBvcnQgZHluYW1pYyBpbXBvcnQgYW5kIGV4cG9ydCwgZGVjbGFy ZSB0aGUgZXhwb3J0ZXIgZHluYW1pYwpieSBwcm92aWRpbmcgTk9QIHBpbigpIGFuZCB1bnBpbigp IGZ1bmN0aW9ucy4gVGhpcyBtZWFucyBvdXIgbWFwX2RtYV9idWYoKQpjYWxsYmFjayB3aWxsICph bHdheXMqIGdldCBjYWxsZWQgbG9ja2VkLCBhbmQgYnkgcGlubmluZyB1bmNvbmRpdGlvbmFsbHkK aW4gaTkxNV9nZW1fbWFwX2RtYV9idWYoKSB3ZSBtYWtlIHN1cmUgd2UgZG9uJ3QgbmVlZCB0byB1 c2UgdGhlCm1vdmVfbm90aWZ5KCkgZnVuY3Rpb25hbGl0eSB3aGljaCBpcyBub3QgeWV0IGltcGxl bWVudGVkLgoKUmVwb3J0ZWQtYnk6IFJ1aGwsIE1pY2hhZWwgSiA8bWljaGFlbC5qLnJ1aGxAaW50 ZWwuY29tPgpDYzogUnVobCwgTWljaGFlbCBKIDxtaWNoYWVsLmoucnVobEBpbnRlbC5jb20+ClNp Z25lZC1vZmYtYnk6IFRob21hcyBIZWxsc3Ryw7ZtIDx0aG9tYXMuaGVsbHN0cm9tQGxpbnV4Lmlu dGVsLmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fZG1hYnVmLmMg ICAgfCAzMSArKysrKystCiAuLi4vZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pOTE1X2dlbV9kbWFi dWYuYyAgfCA4MSArKysrKysrKysrKysrKysrKystCiAyIGZpbGVzIGNoYW5nZWQsIDEwOCBpbnNl cnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2dlbS9pOTE1X2dlbV9kbWFidWYuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1 X2dlbV9kbWFidWYuYwppbmRleCA2MTZjM2EyZjFiYWYuLjFkMWVlYjE2N2QyOCAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2RtYWJ1Zi5jCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9kbWFidWYuYwpAQCAtMTIsNiArMTIsOCBAQAog I2luY2x1ZGUgImk5MTVfZ2VtX29iamVjdC5oIgogI2luY2x1ZGUgImk5MTVfc2NhdHRlcmxpc3Qu aCIKIAorSTkxNV9TRUxGVEVTVF9ERUNMQVJFKHN0YXRpYyBib29sIGZvcmNlX2RpZmZlcmVudF9k ZXZpY2VzOykKKwogc3RhdGljIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpkbWFfYnVmX3Rv X29iaihzdHJ1Y3QgZG1hX2J1ZiAqYnVmKQogewogCXJldHVybiB0b19pbnRlbF9ibyhidWYtPnBy aXYpOwpAQCAtMjUsNyArMjcsOSBAQCBzdGF0aWMgc3RydWN0IHNnX3RhYmxlICppOTE1X2dlbV9t YXBfZG1hX2J1ZihzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2htZQogCXN0cnVjdCBz Y2F0dGVybGlzdCAqc3JjLCAqZHN0OwogCWludCByZXQsIGk7CiAKLQlyZXQgPSBpOTE1X2dlbV9v YmplY3RfcGluX3BhZ2VzX3VubG9ja2VkKG9iaik7CisJYXNzZXJ0X29iamVjdF9oZWxkKG9iaik7 CisKKwlyZXQgPSBpOTE1X2dlbV9vYmplY3RfcGluX3BhZ2VzKG9iaik7CiAJaWYgKHJldCkKIAkJ Z290byBlcnI7CiAKQEAgLTE2OCw2ICsxNzIsMjYgQEAgc3RhdGljIGludCBpOTE1X2dlbV9lbmRf Y3B1X2FjY2VzcyhzdHJ1Y3QgZG1hX2J1ZiAqZG1hX2J1ZiwgZW51bSBkbWFfZGF0YV9kaXJlY3QK IAlyZXR1cm4gZXJyOwogfQogCisvKgorICogQXMgYSB3b3JrYXJvdW5kIHVudGlsIHdlIGZ1bGx5 IHN1cHBvcnQgZHluYW1pYyBpbXBvcnQgYW5kIGV4cG9ydCwKKyAqIGRlY2xhcmUgdGhlIGV4cG9y dGVyIGR5bmFtaWMgYnkgcHJvdmlkaW5nIE5PUCBwaW4oKSBhbmQgdW5waW4oKSBmdW5jdGlvbnMu CisgKiBUaGlzIG1lYW5zIG91ciBpOTE1X2dlbV9tYXBfZG1hX2J1ZigpIGNhbGxiYWNrIHdpbGwg KmFsd2F5cyogZ2V0IGNhbGxlZAorICogbG9ja2VkLCBhbmQgYnkgcGlubmluZyB1bmNvbmRpdGlv bmFsbHkgaW4gaTkxNV9nZW1fbWFwX2RtYV9idWYoKSB3ZSBtYWtlCisgKiBzdXJlIHdlIGRvbid0 IG5lZWQgdG8gdXNlIHRoZSBtb3ZlX25vdGlmeSgpIGZ1bmN0aW9uYWxpdHkgd2hpY2ggaXMKKyAq IG5vdCB5ZXQgaW1wbGVtZW50ZWQuIFR5cGljYWxseSBmb3IgdGhlIHNhbWUtZHJpdmVyLWFub3Ro ZXItaW5zdGFuY2UgY2FzZSwKKyAqIGk5MTVfZ2VtX21hcF9kbWFfYnVmKCkgd2lsbCBiZSBjYWxs ZWQgYXQgaW1wb3J0ZXIgYXR0YWNoIHRpbWUgYW5kIHRoZQorICogbWFwcGVkIHNnX2xpc3Qgd2ls bCBiZSBjYWNoZWQgYnkgdGhlIGRtYS1idWYgY29yZSBmb3IgdGhlCisgKiBkdXJhdGlvbiBvZiB0 aGUgYXR0YWNobWVudC4KKyAqLworc3RhdGljIGludCBpOTE1X2dlbV9kbWFidWZfcGluKHN0cnVj dCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IHZvaWQgaTkxNV9nZW1fZG1hYnVmX3VucGluKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0 dGFjaCkKK3sKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBkbWFfYnVmX29wcyBpOTE1X2RtYWJ1 Zl9vcHMgPSAgewogCS5tYXBfZG1hX2J1ZiA9IGk5MTVfZ2VtX21hcF9kbWFfYnVmLAogCS51bm1h cF9kbWFfYnVmID0gaTkxNV9nZW1fdW5tYXBfZG1hX2J1ZiwKQEAgLTE3Nyw2ICsyMDEsOCBAQCBz dGF0aWMgY29uc3Qgc3RydWN0IGRtYV9idWZfb3BzIGk5MTVfZG1hYnVmX29wcyA9ICB7CiAJLnZ1 bm1hcCA9IGk5MTVfZ2VtX2RtYWJ1Zl92dW5tYXAsCiAJLmJlZ2luX2NwdV9hY2Nlc3MgPSBpOTE1 X2dlbV9iZWdpbl9jcHVfYWNjZXNzLAogCS5lbmRfY3B1X2FjY2VzcyA9IGk5MTVfZ2VtX2VuZF9j cHVfYWNjZXNzLAorCS5waW4gPSBpOTE1X2dlbV9kbWFidWZfcGluLAorCS51bnBpbiA9IGk5MTVf Z2VtX2RtYWJ1Zl91bnBpbiwKIH07CiAKIHN0cnVjdCBkbWFfYnVmICppOTE1X2dlbV9wcmltZV9l eHBvcnQoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW1fb2JqLCBpbnQgZmxhZ3MpCkBAIC0yNDEs NyArMjY3LDggQEAgc3RydWN0IGRybV9nZW1fb2JqZWN0ICppOTE1X2dlbV9wcmltZV9pbXBvcnQo c3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAlpZiAoZG1hX2J1Zi0+b3BzID09ICZpOTE1X2RtYWJ1 Zl9vcHMpIHsKIAkJb2JqID0gZG1hX2J1Zl90b19vYmooZG1hX2J1Zik7CiAJCS8qIGlzIGl0IGZy b20gb3VyIGRldmljZT8gKi8KLQkJaWYgKG9iai0+YmFzZS5kZXYgPT0gZGV2KSB7CisJCWlmIChv YmotPmJhc2UuZGV2ID09IGRldiAmJgorCQkgICAgIUk5MTVfU0VMRlRFU1RfT05MWShmb3JjZV9k aWZmZXJlbnRfZGV2aWNlcykpIHsKIAkJCS8qCiAJCQkgKiBJbXBvcnRpbmcgZG1hYnVmIGV4cG9y dGVkIGZyb20gb3V0IG93biBnZW0gaW5jcmVhc2VzCiAJCQkgKiByZWZjb3VudCBvbiBnZW0gaXRz ZWxmIGluc3RlYWQgb2YgZl9jb3VudCBvZiBkbWFidWYuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2k5MTVfZ2VtX2RtYWJ1Zi5jIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pOTE1X2dlbV9kbWFidWYuYwppbmRleCBkZDc0YmMwOWVj ODguLjI0NzM1ZDZjMTJhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3Nl bGZ0ZXN0cy9pOTE1X2dlbV9kbWFidWYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0v c2VsZnRlc3RzL2k5MTVfZ2VtX2RtYWJ1Zi5jCkBAIC0zNSw3ICszNSw3IEBAIHN0YXRpYyBpbnQg aWd0X2RtYWJ1Zl9leHBvcnQodm9pZCAqYXJnKQogc3RhdGljIGludCBpZ3RfZG1hYnVmX2ltcG9y dF9zZWxmKHZvaWQgKmFyZykKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IGFy ZzsKLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOworCXN0cnVjdCBkcm1faTkxNV9n ZW1fb2JqZWN0ICpvYmosICppbXBvcnRfb2JqOwogCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqaW1w b3J0OwogCXN0cnVjdCBkbWFfYnVmICpkbWFidWY7CiAJaW50IGVycjsKQEAgLTY1LDE0ICs2NSw5 MCBAQCBzdGF0aWMgaW50IGlndF9kbWFidWZfaW1wb3J0X3NlbGYodm9pZCAqYXJnKQogCQllcnIg PSAtRUlOVkFMOwogCQlnb3RvIG91dF9pbXBvcnQ7CiAJfQorCWltcG9ydF9vYmogPSB0b19pbnRl bF9ibyhpbXBvcnQpOworCisJaTkxNV9nZW1fb2JqZWN0X2xvY2soaW1wb3J0X29iaiwgTlVMTCk7 CisJZXJyID0gX19fX2k5MTVfZ2VtX29iamVjdF9nZXRfcGFnZXMoaW1wb3J0X29iaik7CisJaTkx NV9nZW1fb2JqZWN0X3VubG9jayhpbXBvcnRfb2JqKTsKKwlpZiAoZXJyKSB7CisJCXByX2Vycigi U2FtZSBvYmplY3QgZG1hLWJ1ZiBnZXRfcGFnZXMgZmFpbGVkIVxuIik7CisJCWdvdG8gb3V0X2lt cG9ydDsKKwl9CiAKIAllcnIgPSAwOwogb3V0X2ltcG9ydDoKLQlpOTE1X2dlbV9vYmplY3RfcHV0 KHRvX2ludGVsX2JvKGltcG9ydCkpOworCWk5MTVfZ2VtX29iamVjdF9wdXQoaW1wb3J0X29iaik7 CitvdXRfZG1hYnVmOgorCWRtYV9idWZfcHV0KGRtYWJ1Zik7CitvdXQ6CisJaTkxNV9nZW1fb2Jq ZWN0X3B1dChvYmopOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgaWd0X2RtYWJ1Zl9p bXBvcnRfc2FtZV9kcml2ZXIodm9pZCAqYXJnKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICppOTE1ID0gYXJnOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosICppbXBvcnRf b2JqOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqaW1wb3J0OworCXN0cnVjdCBkbWFfYnVmICpk bWFidWY7CisJaW50IGVycjsKKworCWZvcmNlX2RpZmZlcmVudF9kZXZpY2VzID0gdHJ1ZTsKKwlv YmogPSBpOTE1X2dlbV9vYmplY3RfY3JlYXRlX3NobWVtKGk5MTUsIFBBR0VfU0laRSk7CisJaWYg KElTX0VSUihvYmopKQorCQlnb3RvIG91dF9yZXQ7CisKKwlkbWFidWYgPSBpOTE1X2dlbV9wcmlt ZV9leHBvcnQoJm9iai0+YmFzZSwgMCk7CisJaWYgKElTX0VSUihkbWFidWYpKSB7CisJCXByX2Vy cigiaTkxNV9nZW1fcHJpbWVfZXhwb3J0IGZhaWxlZCB3aXRoIGVycj0lZFxuIiwKKwkJICAgICAg IChpbnQpUFRSX0VSUihkbWFidWYpKTsKKwkJZXJyID0gUFRSX0VSUihkbWFidWYpOworCQlnb3Rv IG91dDsKKwl9CisKKwlpbXBvcnQgPSBpOTE1X2dlbV9wcmltZV9pbXBvcnQoJmk5MTUtPmRybSwg ZG1hYnVmKTsKKwlpZiAoSVNfRVJSKGltcG9ydCkpIHsKKwkJcHJfZXJyKCJpOTE1X2dlbV9wcmlt ZV9pbXBvcnQgZmFpbGVkIHdpdGggZXJyPSVkXG4iLAorCQkgICAgICAgKGludClQVFJfRVJSKGlt cG9ydCkpOworCQllcnIgPSBQVFJfRVJSKGltcG9ydCk7CisJCWdvdG8gb3V0X2RtYWJ1ZjsKKwl9 CisKKwlpZiAoaW1wb3J0ID09ICZvYmotPmJhc2UpIHsKKwkJcHJfZXJyKCJpOTE1X2dlbV9wcmlt ZV9pbXBvcnQgcmV1c2VkIGdlbSBvYmplY3QhXG4iKTsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290 byBvdXRfaW1wb3J0OworCX0KKworCWltcG9ydF9vYmogPSB0b19pbnRlbF9ibyhpbXBvcnQpOwor CisJaTkxNV9nZW1fb2JqZWN0X2xvY2soaW1wb3J0X29iaiwgTlVMTCk7CisJZXJyID0gX19fX2k5 MTVfZ2VtX29iamVjdF9nZXRfcGFnZXMoaW1wb3J0X29iaik7CisJaWYgKGVycikgeworCQlwcl9l cnIoIkRpZmZlcmVudCBvYmplY3RzIGRtYS1idWYgZ2V0X3BhZ2VzIGZhaWxlZCFcbiIpOworCQlp OTE1X2dlbV9vYmplY3RfdW5sb2NrKGltcG9ydF9vYmopOworCQlnb3RvIG91dF9pbXBvcnQ7CisJ fQorCisJLyoKKwkgKiBJZiB0aGUgZXhwb3J0ZWQgb2JqZWN0IGlzIG5vdCBpbiBzeXN0ZW0gbWVt b3J5LCBzb21ldGhpbmcKKwkgKiB3ZWlyZCBpcyBnb2luZyBvbi4gVE9ETzogV2hlbiBwMnAgaXMg c3VwcG9ydGVkLCB0aGlzIGlzIG5vCisJICogbG9uZ2VyIGNvbnNpZGVyZWQgd2VpcmQuCisJICov CisJaWYgKG9iai0+bW0ucmVnaW9uICE9IGk5MTUtPm1tLnJlZ2lvbnNbSU5URUxfUkVHSU9OX1NN RU1dKSB7CisJCXByX2VycigiRXhwb3J0ZWQgZG1hLWJ1ZiBpcyBub3QgaW4gc3lzdGVtIG1lbW9y eVxuIik7CisJCWVyciA9IC1FSU5WQUw7CisJfQorCWk5MTVfZ2VtX29iamVjdF91bmxvY2soaW1w b3J0X29iaik7CisKK291dF9pbXBvcnQ6CisJaTkxNV9nZW1fb2JqZWN0X3B1dChpbXBvcnRfb2Jq KTsKIG91dF9kbWFidWY6CiAJZG1hX2J1Zl9wdXQoZG1hYnVmKTsKIG91dDoKIAlpOTE1X2dlbV9v YmplY3RfcHV0KG9iaik7CitvdXRfcmV0OgorCWZvcmNlX2RpZmZlcmVudF9kZXZpY2VzID0gZmFs c2U7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMjg2LDYgKzM2Miw3IEBAIGludCBpOTE1X2dlbV9k bWFidWZfbGl2ZV9zZWxmdGVzdHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCiB7CiAJ c3RhdGljIGNvbnN0IHN0cnVjdCBpOTE1X3N1YnRlc3QgdGVzdHNbXSA9IHsKIAkJU1VCVEVTVChp Z3RfZG1hYnVmX2V4cG9ydCksCisJCVNVQlRFU1QoaWd0X2RtYWJ1Zl9pbXBvcnRfc2FtZV9kcml2 ZXIpLAogCX07CiAKIAlyZXR1cm4gaTkxNV9zdWJ0ZXN0cyh0ZXN0cywgaTkxNSk7Ci0tIAoyLjMx LjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVs LWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczov L2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo= 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=-16.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT 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 090E7C2B9F4 for ; Mon, 28 Jun 2021 14:46:57 +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 CD98661C84 for ; Mon, 28 Jun 2021 14:46:56 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org CD98661C84 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linux.intel.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 1C4CD6E479; Mon, 28 Jun 2021 14:46:48 +0000 (UTC) Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by gabe.freedesktop.org (Postfix) with ESMTPS id 464356E47B; Mon, 28 Jun 2021 14:46:47 +0000 (UTC) X-IronPort-AV: E=McAfee;i="6200,9189,10029"; a="271825237" X-IronPort-AV: E=Sophos;i="5.83,306,1616482800"; d="scan'208";a="271825237" Received: from orsmga003.jf.intel.com ([10.7.209.27]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 Jun 2021 07:46:47 -0700 X-IronPort-AV: E=Sophos;i="5.83,306,1616482800"; d="scan'208";a="408091051" Received: from danielmi-mobl2.ger.corp.intel.com (HELO thellst-mobl1.intel.com) ([10.249.254.242]) by orsmga003-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 Jun 2021 07:46:45 -0700 From: =?UTF-8?q?Thomas=20Hellstr=C3=B6m?= To: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org Subject: [PATCH v3 4/5] drm/i915/gem: Fix same-driver-another-instance dma-buf export Date: Mon, 28 Jun 2021 16:46:25 +0200 Message-Id: <20210628144626.76126-5-thomas.hellstrom@linux.intel.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210628144626.76126-1-thomas.hellstrom@linux.intel.com> References: <20210628144626.76126-1-thomas.hellstrom@linux.intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?q?Thomas=20Hellstr=C3=B6m?= , Ruhl@freedesktop.org, matthew.auld@intel.com, Michael J Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" If our exported dma-bufs are imported by another instance of our driver, that instance will typically have the imported dma-bufs locked during map_attachment(). But the exporter also locks the same reservation object in the map_dma_buf() callback, which leads to recursive locking. Add a live selftest to catch this case, and as a workaround until we fully support dynamic import and export, declare the exporter dynamic by providing NOP pin() and unpin() functions. This means our map_dma_buf() callback will *always* get called locked, and by pinning unconditionally in i915_gem_map_dma_buf() we make sure we don't need to use the move_notify() functionality which is not yet implemented. Reported-by: Ruhl, Michael J Cc: Ruhl, Michael J Signed-off-by: Thomas Hellström --- drivers/gpu/drm/i915/gem/i915_gem_dmabuf.c | 31 ++++++- .../drm/i915/gem/selftests/i915_gem_dmabuf.c | 81 ++++++++++++++++++- 2 files changed, 108 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/i915/gem/i915_gem_dmabuf.c b/drivers/gpu/drm/i915/gem/i915_gem_dmabuf.c index 616c3a2f1baf..1d1eeb167d28 100644 --- a/drivers/gpu/drm/i915/gem/i915_gem_dmabuf.c +++ b/drivers/gpu/drm/i915/gem/i915_gem_dmabuf.c @@ -12,6 +12,8 @@ #include "i915_gem_object.h" #include "i915_scatterlist.h" +I915_SELFTEST_DECLARE(static bool force_different_devices;) + static struct drm_i915_gem_object *dma_buf_to_obj(struct dma_buf *buf) { return to_intel_bo(buf->priv); @@ -25,7 +27,9 @@ static struct sg_table *i915_gem_map_dma_buf(struct dma_buf_attachment *attachme struct scatterlist *src, *dst; int ret, i; - ret = i915_gem_object_pin_pages_unlocked(obj); + assert_object_held(obj); + + ret = i915_gem_object_pin_pages(obj); if (ret) goto err; @@ -168,6 +172,26 @@ static int i915_gem_end_cpu_access(struct dma_buf *dma_buf, enum dma_data_direct return err; } +/* + * As a workaround until we fully support dynamic import and export, + * declare the exporter dynamic by providing NOP pin() and unpin() functions. + * This means our i915_gem_map_dma_buf() callback will *always* get called + * locked, and by pinning unconditionally in i915_gem_map_dma_buf() we make + * sure we don't need to use the move_notify() functionality which is + * not yet implemented. Typically for the same-driver-another-instance case, + * i915_gem_map_dma_buf() will be called at importer attach time and the + * mapped sg_list will be cached by the dma-buf core for the + * duration of the attachment. + */ +static int i915_gem_dmabuf_pin(struct dma_buf_attachment *attach) +{ + return 0; +} + +static void i915_gem_dmabuf_unpin(struct dma_buf_attachment *attach) +{ +} + static const struct dma_buf_ops i915_dmabuf_ops = { .map_dma_buf = i915_gem_map_dma_buf, .unmap_dma_buf = i915_gem_unmap_dma_buf, @@ -177,6 +201,8 @@ static const struct dma_buf_ops i915_dmabuf_ops = { .vunmap = i915_gem_dmabuf_vunmap, .begin_cpu_access = i915_gem_begin_cpu_access, .end_cpu_access = i915_gem_end_cpu_access, + .pin = i915_gem_dmabuf_pin, + .unpin = i915_gem_dmabuf_unpin, }; struct dma_buf *i915_gem_prime_export(struct drm_gem_object *gem_obj, int flags) @@ -241,7 +267,8 @@ struct drm_gem_object *i915_gem_prime_import(struct drm_device *dev, if (dma_buf->ops == &i915_dmabuf_ops) { obj = dma_buf_to_obj(dma_buf); /* is it from our device? */ - if (obj->base.dev == dev) { + if (obj->base.dev == dev && + !I915_SELFTEST_ONLY(force_different_devices)) { /* * Importing dmabuf exported from out own gem increases * refcount on gem itself instead of f_count of dmabuf. diff --git a/drivers/gpu/drm/i915/gem/selftests/i915_gem_dmabuf.c b/drivers/gpu/drm/i915/gem/selftests/i915_gem_dmabuf.c index dd74bc09ec88..24735d6c12a2 100644 --- a/drivers/gpu/drm/i915/gem/selftests/i915_gem_dmabuf.c +++ b/drivers/gpu/drm/i915/gem/selftests/i915_gem_dmabuf.c @@ -35,7 +35,7 @@ static int igt_dmabuf_export(void *arg) static int igt_dmabuf_import_self(void *arg) { struct drm_i915_private *i915 = arg; - struct drm_i915_gem_object *obj; + struct drm_i915_gem_object *obj, *import_obj; struct drm_gem_object *import; struct dma_buf *dmabuf; int err; @@ -65,14 +65,90 @@ static int igt_dmabuf_import_self(void *arg) err = -EINVAL; goto out_import; } + import_obj = to_intel_bo(import); + + i915_gem_object_lock(import_obj, NULL); + err = ____i915_gem_object_get_pages(import_obj); + i915_gem_object_unlock(import_obj); + if (err) { + pr_err("Same object dma-buf get_pages failed!\n"); + goto out_import; + } err = 0; out_import: - i915_gem_object_put(to_intel_bo(import)); + i915_gem_object_put(import_obj); +out_dmabuf: + dma_buf_put(dmabuf); +out: + i915_gem_object_put(obj); + return err; +} + +static int igt_dmabuf_import_same_driver(void *arg) +{ + struct drm_i915_private *i915 = arg; + struct drm_i915_gem_object *obj, *import_obj; + struct drm_gem_object *import; + struct dma_buf *dmabuf; + int err; + + force_different_devices = true; + obj = i915_gem_object_create_shmem(i915, PAGE_SIZE); + if (IS_ERR(obj)) + goto out_ret; + + dmabuf = i915_gem_prime_export(&obj->base, 0); + if (IS_ERR(dmabuf)) { + pr_err("i915_gem_prime_export failed with err=%d\n", + (int)PTR_ERR(dmabuf)); + err = PTR_ERR(dmabuf); + goto out; + } + + import = i915_gem_prime_import(&i915->drm, dmabuf); + if (IS_ERR(import)) { + pr_err("i915_gem_prime_import failed with err=%d\n", + (int)PTR_ERR(import)); + err = PTR_ERR(import); + goto out_dmabuf; + } + + if (import == &obj->base) { + pr_err("i915_gem_prime_import reused gem object!\n"); + err = -EINVAL; + goto out_import; + } + + import_obj = to_intel_bo(import); + + i915_gem_object_lock(import_obj, NULL); + err = ____i915_gem_object_get_pages(import_obj); + if (err) { + pr_err("Different objects dma-buf get_pages failed!\n"); + i915_gem_object_unlock(import_obj); + goto out_import; + } + + /* + * If the exported object is not in system memory, something + * weird is going on. TODO: When p2p is supported, this is no + * longer considered weird. + */ + if (obj->mm.region != i915->mm.regions[INTEL_REGION_SMEM]) { + pr_err("Exported dma-buf is not in system memory\n"); + err = -EINVAL; + } + i915_gem_object_unlock(import_obj); + +out_import: + i915_gem_object_put(import_obj); out_dmabuf: dma_buf_put(dmabuf); out: i915_gem_object_put(obj); +out_ret: + force_different_devices = false; return err; } @@ -286,6 +362,7 @@ int i915_gem_dmabuf_live_selftests(struct drm_i915_private *i915) { static const struct i915_subtest tests[] = { SUBTEST(igt_dmabuf_export), + SUBTEST(igt_dmabuf_import_same_driver), }; return i915_subtests(tests, i915); -- 2.31.1