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 973F3C11F65 for ; Wed, 30 Jun 2021 13:07:26 +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 55C6A61468 for ; Wed, 30 Jun 2021 13:07:26 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 55C6A61468 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 C1DCB6E147; Wed, 30 Jun 2021 13:07:20 +0000 (UTC) Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by gabe.freedesktop.org (Postfix) with ESMTPS id 4B6FC6E105; Wed, 30 Jun 2021 13:07:19 +0000 (UTC) X-IronPort-AV: E=McAfee;i="6200,9189,10030"; a="195634525" X-IronPort-AV: E=Sophos;i="5.83,312,1616482800"; d="scan'208";a="195634525" Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 30 Jun 2021 06:07:19 -0700 X-IronPort-AV: E=Sophos;i="5.83,312,1616482800"; d="scan'208";a="558290333" Received: from vanderss-mobl.ger.corp.intel.com (HELO thellst-mobl1.intel.com) ([10.249.254.133]) by orsmga004-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 30 Jun 2021 06:07:17 -0700 From: =?UTF-8?q?Thomas=20Hellstr=C3=B6m?= To: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org Date: Wed, 30 Jun 2021 15:07:00 +0200 Message-Id: <20210630130701.349458-2-thomas.hellstrom@linux.intel.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210630130701.349458-1-thomas.hellstrom@linux.intel.com> References: <20210630130701.349458-1-thomas.hellstrom@linux.intel.com> MIME-Version: 1.0 Subject: [Intel-gfx] [PATCH 1/2] drm/i915/gem: Make our dma-buf exporter dynamic 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?= , 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 b3J0ZWQgZG1hLWJ1ZnMgbG9ja2VkIGR1cmluZwpkbWFfYnVmX21hcF9hdHRhY2htZW50KCkuIEJ1 dCB0aGUgZXhwb3J0ZXIgYWxzbyBsb2NrcyB0aGUgc2FtZSByZXNlcnZhdGlvbgpvYmplY3QgaW4g dGhlIG1hcF9kbWFfYnVmKCkgY2FsbGJhY2ssIHdoaWNoIGxlYWRzIHRvIHJlY3Vyc2l2ZSBsb2Nr aW5nLgoKQWRkIGEgbGl2ZSBzZWxmdGVzdCB0byBleGVyY2lzZSBib3RoIGR5bmFtaWMgYW5kIG5v bi1keW5hbWljIGV4cG9ydHMsCmFuZCBhcyBhIHdvcmthcm91bmQgdW50aWwgd2UgZnVsbHkgc3Vw cG9ydCBkeW5hbWljIGltcG9ydCBhbmQgZXhwb3J0LApkZWNsYXJlIHRoZSBleHBvcnRlciBkeW5h bWljIGJ5IHByb3ZpZGluZyBwaW4oKSBhbmQgdW5waW4oKSBpbXBsZW1lbnRhdGlvbnMuCkZvciBk eW5hbWljIGltcG9ydGVycywgbWFrZSBzdXJlIHdlIGtlZXAgdGhlIHBpbm5pbmcgYWxzbyBpbiBt YXBfZG1hX2J1ZigpLAp0byBlbnN1cmUgd2UgbmV2ZXIgbmVlZCB0byBjYWxsIGRtYV9idWZfbW92 ZV9ub3RpZnkoKS4KQ2FsbGluZyBkbWFfYnVmX21vdmVfbm90aWZ5KCkgaXMgYXQgdGhlIGRpc2Ny ZXRpb24gb2YgdGhlIGV4cG9ydGVyLgoKdjI6Ci0gRXh0ZW5kIHRoZSBzZWxmdGVzdCB3aXRoIGEg ZmFrZSBkeW5hbWljIGltcG9ydGVyLgotIFByb3ZpZGUgcmVhbCBwaW4gYW5kIHVucGluIGNhbGxi YWNrcyB0byBub3QgYWJ1c2UgdGhlIGludGVyZmFjZS4KClJlcG9ydGVkLWJ5OiBNaWNoYWVsIEou IFJ1aGwgPG1pY2hhZWwuai5ydWhsQGludGVsLmNvbT4KU2lnbmVkLW9mZi1ieTogVGhvbWFzIEhl bGxzdHLDtm0gPHRob21hcy5oZWxsc3Ryb21AbGludXguaW50ZWwuY29tPgotLS0KIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9kbWFidWYuYyAgICB8ICAzMSArKysrLQogLi4uL2Ry bS9pOTE1L2dlbS9zZWxmdGVzdHMvaTkxNV9nZW1fZG1hYnVmLmMgIHwgMTE2ICsrKysrKysrKysr KysrKysrLQogMiBmaWxlcyBjaGFuZ2VkLCAxNDMgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMo LSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fZG1hYnVm LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fZG1hYnVmLmMKaW5kZXggNjE2 YzNhMmYxYmFmLi45MThjMTlkZjdiNjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2dlbS9pOTE1X2dlbV9kbWFidWYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkx NV9nZW1fZG1hYnVmLmMKQEAgLTEyLDYgKzEyLDggQEAKICNpbmNsdWRlICJpOTE1X2dlbV9vYmpl Y3QuaCIKICNpbmNsdWRlICJpOTE1X3NjYXR0ZXJsaXN0LmgiCiAKK0k5MTVfU0VMRlRFU1RfREVD TEFSRShzdGF0aWMgYm9vbCBmb3JjZV9kaWZmZXJlbnRfZGV2aWNlczspCisKIHN0YXRpYyBzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqZG1hX2J1Zl90b19vYmooc3RydWN0IGRtYV9idWYgKmJ1 ZikKIHsKIAlyZXR1cm4gdG9faW50ZWxfYm8oYnVmLT5wcml2KTsKQEAgLTI1LDcgKzI3LDE0IEBA IHN0YXRpYyBzdHJ1Y3Qgc2dfdGFibGUgKmk5MTVfZ2VtX21hcF9kbWFfYnVmKHN0cnVjdCBkbWFf YnVmX2F0dGFjaG1lbnQgKmF0dGFjaG1lCiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzcmMsICpkc3Q7 CiAJaW50IHJldCwgaTsKIAotCXJldCA9IGk5MTVfZ2VtX29iamVjdF9waW5fcGFnZXNfdW5sb2Nr ZWQob2JqKTsKKwlhc3NlcnRfb2JqZWN0X2hlbGQob2JqKTsKKworCS8qCisJICogTm90ZS4gSW4g dGhlIGR5bmFtaWMgaW1wb3J0ZXIgY2FzZSwgdGhlIG9iamVjdCBpcyBub3QgeWV0IHBpbm5lZC4K KwkgKiBMZXQncyBwaW4gaXQgaGVyZSB0byBhdm9pZCBoYXZpbmcgdG8gY2FsbCB0aGUgbW92ZV9u b3RpZnkKKwkgKiBjYWxsYmFjaywgVGhlIGNhbGwgb2Ygd2hpY2ggaXMgbm90IHlldCBpbXBsZW1l bnRlZC4KKwkgKi8KKwlyZXQgPSBpOTE1X2dlbV9vYmplY3RfcGluX3BhZ2VzKG9iaik7CiAJaWYg KHJldCkKIAkJZ290byBlcnI7CiAKQEAgLTE2OCw2ICsxNzcsMjEgQEAgc3RhdGljIGludCBpOTE1 X2dlbV9lbmRfY3B1X2FjY2VzcyhzdHJ1Y3QgZG1hX2J1ZiAqZG1hX2J1ZiwgZW51bSBkbWFfZGF0 YV9kaXJlY3QKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgaW50IGk5MTVfZ2VtX2RtYWJ1Zl9w aW4oc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKQoreworCXN0cnVjdCBkcm1faTkx NV9nZW1fb2JqZWN0ICpvYmogPSBkbWFfYnVmX3RvX29iaihhdHRhY2gtPmRtYWJ1Zik7CisKKwlh c3NlcnRfb2JqZWN0X2hlbGQob2JqKTsKKwlyZXR1cm4gaTkxNV9nZW1fb2JqZWN0X3Bpbl9wYWdl cyhvYmopOworfQorCitzdGF0aWMgdm9pZCBpOTE1X2dlbV9kbWFidWZfdW5waW4oc3RydWN0IGRt YV9idWZfYXR0YWNobWVudCAqYXR0YWNoKQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 ICpvYmogPSBkbWFfYnVmX3RvX29iaihhdHRhY2gtPmRtYWJ1Zik7CisKKwlpOTE1X2dlbV9vYmpl Y3RfdW5waW5fcGFnZXMob2JqKTsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBkbWFfYnVmX29w cyBpOTE1X2RtYWJ1Zl9vcHMgPSAgewogCS5tYXBfZG1hX2J1ZiA9IGk5MTVfZ2VtX21hcF9kbWFf YnVmLAogCS51bm1hcF9kbWFfYnVmID0gaTkxNV9nZW1fdW5tYXBfZG1hX2J1ZiwKQEAgLTE3Nyw2 ICsyMDEsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRtYV9idWZfb3BzIGk5MTVfZG1hYnVmX29w cyA9ICB7CiAJLnZ1bm1hcCA9IGk5MTVfZ2VtX2RtYWJ1Zl92dW5tYXAsCiAJLmJlZ2luX2NwdV9h Y2Nlc3MgPSBpOTE1X2dlbV9iZWdpbl9jcHVfYWNjZXNzLAogCS5lbmRfY3B1X2FjY2VzcyA9IGk5 MTVfZ2VtX2VuZF9jcHVfYWNjZXNzLAorCS5waW4gPSBpOTE1X2dlbV9kbWFidWZfcGluLAorCS51 bnBpbiA9IGk5MTVfZ2VtX2RtYWJ1Zl91bnBpbiwKIH07CiAKIHN0cnVjdCBkbWFfYnVmICppOTE1 X2dlbV9wcmltZV9leHBvcnQoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW1fb2JqLCBpbnQgZmxh Z3MpCkBAIC0yNDEsNyArMjY3LDggQEAgc3RydWN0IGRybV9nZW1fb2JqZWN0ICppOTE1X2dlbV9w cmltZV9pbXBvcnQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAlpZiAoZG1hX2J1Zi0+b3BzID09 ICZpOTE1X2RtYWJ1Zl9vcHMpIHsKIAkJb2JqID0gZG1hX2J1Zl90b19vYmooZG1hX2J1Zik7CiAJ CS8qIGlzIGl0IGZyb20gb3VyIGRldmljZT8gKi8KLQkJaWYgKG9iai0+YmFzZS5kZXYgPT0gZGV2 KSB7CisJCWlmIChvYmotPmJhc2UuZGV2ID09IGRldiAmJgorCQkgICAgIUk5MTVfU0VMRlRFU1Rf T05MWShmb3JjZV9kaWZmZXJlbnRfZGV2aWNlcykpIHsKIAkJCS8qCiAJCQkgKiBJbXBvcnRpbmcg ZG1hYnVmIGV4cG9ydGVkIGZyb20gb3V0IG93biBnZW0gaW5jcmVhc2VzCiAJCQkgKiByZWZjb3Vu dCBvbiBnZW0gaXRzZWxmIGluc3RlYWQgb2YgZl9jb3VudCBvZiBkbWFidWYuCmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2k5MTVfZ2VtX2RtYWJ1Zi5jIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pOTE1X2dlbV9kbWFidWYuYwppbmRl eCBkZDc0YmMwOWVjODguLjg2OGIzNDY5ZWNiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pOTE1X2dlbV9kbWFidWYuYworKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9nZW0vc2VsZnRlc3RzL2k5MTVfZ2VtX2RtYWJ1Zi5jCkBAIC0zNSw3ICszNSw3IEBA IHN0YXRpYyBpbnQgaWd0X2RtYWJ1Zl9leHBvcnQodm9pZCAqYXJnKQogc3RhdGljIGludCBpZ3Rf ZG1hYnVmX2ltcG9ydF9zZWxmKHZvaWQgKmFyZykKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqaTkxNSA9IGFyZzsKLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOworCXN0cnVj dCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosICppbXBvcnRfb2JqOwogCXN0cnVjdCBkcm1fZ2Vt X29iamVjdCAqaW1wb3J0OwogCXN0cnVjdCBkbWFfYnVmICpkbWFidWY7CiAJaW50IGVycjsKQEAg LTY1LDE0ICs2NSwxMjUgQEAgc3RhdGljIGludCBpZ3RfZG1hYnVmX2ltcG9ydF9zZWxmKHZvaWQg KmFyZykKIAkJZXJyID0gLUVJTlZBTDsKIAkJZ290byBvdXRfaW1wb3J0OwogCX0KKwlpbXBvcnRf b2JqID0gdG9faW50ZWxfYm8oaW1wb3J0KTsKKworCWk5MTVfZ2VtX29iamVjdF9sb2NrKGltcG9y dF9vYmosIE5VTEwpOworCWVyciA9IF9fX19pOTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2VzKGltcG9y dF9vYmopOworCWk5MTVfZ2VtX29iamVjdF91bmxvY2soaW1wb3J0X29iaik7CisJaWYgKGVycikg eworCQlwcl9lcnIoIlNhbWUgb2JqZWN0IGRtYS1idWYgZ2V0X3BhZ2VzIGZhaWxlZCFcbiIpOwor CQlnb3RvIG91dF9pbXBvcnQ7CisJfQogCiAJZXJyID0gMDsKIG91dF9pbXBvcnQ6Ci0JaTkxNV9n ZW1fb2JqZWN0X3B1dCh0b19pbnRlbF9ibyhpbXBvcnQpKTsKKwlpOTE1X2dlbV9vYmplY3RfcHV0 KGltcG9ydF9vYmopOworb3V0X2RtYWJ1ZjoKKwlkbWFfYnVmX3B1dChkbWFidWYpOworb3V0Ogor CWk5MTVfZ2VtX29iamVjdF9wdXQob2JqKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9p ZCBpZ3RfZG1hYnVmX21vdmVfbm90aWZ5KHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFj aCkKK3sKKwlHRU1fV0FSTl9PTigxKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkbWFfYnVm X2F0dGFjaF9vcHMgaWd0X2RtYWJ1Zl9hdHRhY2hfb3BzID0geworCS5tb3ZlX25vdGlmeSA9IGln dF9kbWFidWZfbW92ZV9ub3RpZnksCit9OworCitzdGF0aWMgaW50IGlndF9kbWFidWZfaW1wb3J0 X3NhbWVfZHJpdmVyKHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkx NSA9IGFyZzsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLCAqaW1wb3J0X29iajsK KwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmltcG9ydDsKKwlzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVm OworCXN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmltcG9ydF9hdHRhY2g7CisJc3RydWN0IHNn X3RhYmxlICpzdDsKKwlsb25nIHRpbWVvdXQ7CisJaW50IGVycjsKKworCWZvcmNlX2RpZmZlcmVu dF9kZXZpY2VzID0gdHJ1ZTsKKwlvYmogPSBpOTE1X2dlbV9vYmplY3RfY3JlYXRlX3NobWVtKGk5 MTUsIFBBR0VfU0laRSk7CisJaWYgKElTX0VSUihvYmopKQorCQlnb3RvIG91dF9yZXQ7CisKKwlk bWFidWYgPSBpOTE1X2dlbV9wcmltZV9leHBvcnQoJm9iai0+YmFzZSwgMCk7CisJaWYgKElTX0VS UihkbWFidWYpKSB7CisJCXByX2VycigiaTkxNV9nZW1fcHJpbWVfZXhwb3J0IGZhaWxlZCB3aXRo IGVycj0lZFxuIiwKKwkJICAgICAgIChpbnQpUFRSX0VSUihkbWFidWYpKTsKKwkJZXJyID0gUFRS X0VSUihkbWFidWYpOworCQlnb3RvIG91dDsKKwl9CisKKwlpbXBvcnQgPSBpOTE1X2dlbV9wcmlt ZV9pbXBvcnQoJmk5MTUtPmRybSwgZG1hYnVmKTsKKwlpZiAoSVNfRVJSKGltcG9ydCkpIHsKKwkJ cHJfZXJyKCJpOTE1X2dlbV9wcmltZV9pbXBvcnQgZmFpbGVkIHdpdGggZXJyPSVkXG4iLAorCQkg ICAgICAgKGludClQVFJfRVJSKGltcG9ydCkpOworCQllcnIgPSBQVFJfRVJSKGltcG9ydCk7CisJ CWdvdG8gb3V0X2RtYWJ1ZjsKKwl9CisKKwlpZiAoaW1wb3J0ID09ICZvYmotPmJhc2UpIHsKKwkJ cHJfZXJyKCJpOTE1X2dlbV9wcmltZV9pbXBvcnQgcmV1c2VkIGdlbSBvYmplY3QhXG4iKTsKKwkJ ZXJyID0gLUVJTlZBTDsKKwkJZ290byBvdXRfaW1wb3J0OworCX0KKworCWltcG9ydF9vYmogPSB0 b19pbnRlbF9ibyhpbXBvcnQpOworCisJaTkxNV9nZW1fb2JqZWN0X2xvY2soaW1wb3J0X29iaiwg TlVMTCk7CisJZXJyID0gX19fX2k5MTVfZ2VtX29iamVjdF9nZXRfcGFnZXMoaW1wb3J0X29iaik7 CisJaWYgKGVycikgeworCQlwcl9lcnIoIkRpZmZlcmVudCBvYmplY3RzIGRtYS1idWYgZ2V0X3Bh Z2VzIGZhaWxlZCFcbiIpOworCQlpOTE1X2dlbV9vYmplY3RfdW5sb2NrKGltcG9ydF9vYmopOwor CQlnb3RvIG91dF9pbXBvcnQ7CisJfQorCisJLyoKKwkgKiBJZiB0aGUgZXhwb3J0ZWQgb2JqZWN0 IGlzIG5vdCBpbiBzeXN0ZW0gbWVtb3J5LCBzb21ldGhpbmcKKwkgKiB3ZWlyZCBpcyBnb2luZyBv bi4gVE9ETzogV2hlbiBwMnAgaXMgc3VwcG9ydGVkLCB0aGlzIGlzIG5vCisJICogbG9uZ2VyIGNv bnNpZGVyZWQgd2VpcmQuCisJICovCisJaWYgKG9iai0+bW0ucmVnaW9uICE9IGk5MTUtPm1tLnJl Z2lvbnNbSU5URUxfUkVHSU9OX1NNRU1dKSB7CisJCXByX2VycigiRXhwb3J0ZWQgZG1hLWJ1ZiBp cyBub3QgaW4gc3lzdGVtIG1lbW9yeVxuIik7CisJCWVyciA9IC1FSU5WQUw7CisJfQorCisJaTkx NV9nZW1fb2JqZWN0X3VubG9jayhpbXBvcnRfb2JqKTsKKworCS8qIE5vdyB0cnkgYSBmYWtlIGR5 bmFtaWMgaW1wb3J0ZXIgKi8KKwlpbXBvcnRfYXR0YWNoID0gZG1hX2J1Zl9keW5hbWljX2F0dGFj aChkbWFidWYsIG9iai0+YmFzZS5kZXYtPmRldiwKKwkJCQkJICAgICAgICZpZ3RfZG1hYnVmX2F0 dGFjaF9vcHMsCisJCQkJCSAgICAgICBOVUxMKTsKKwlpZiAoSVNfRVJSKGltcG9ydF9hdHRhY2gp KQorCQlnb3RvIG91dF9pbXBvcnQ7CisKKwlkbWFfcmVzdl9sb2NrKGRtYWJ1Zi0+cmVzdiwgTlVM TCk7CisJc3QgPSBkbWFfYnVmX21hcF9hdHRhY2htZW50KGltcG9ydF9hdHRhY2gsIERNQV9CSURJ UkVDVElPTkFMKTsKKwlkbWFfcmVzdl91bmxvY2soZG1hYnVmLT5yZXN2KTsKKwlpZiAoSVNfRVJS KHN0KSkKKwkJZ290byBvdXRfZGV0YWNoOworCisJdGltZW91dCA9IGRtYV9yZXN2X3dhaXRfdGlt ZW91dChkbWFidWYtPnJlc3YsIGZhbHNlLCB0cnVlLCA1ICogSFopOworCWlmICghdGltZW91dCkg eworCQlwcl9lcnIoImRtYWJ1ZiB3YWl0IGZvciBleGNsdXNpdmUgZmVuY2UgdGltZWQgb3V0Llxu Iik7CisJCXRpbWVvdXQgPSAtRVRJTUU7CisJfQorCWVyciA9IHRpbWVvdXQgPiAwID8gMCA6IHRp bWVvdXQ7CisJZG1hX2J1Zl91bm1hcF9hdHRhY2htZW50KGltcG9ydF9hdHRhY2gsIHN0LCBETUFf QklESVJFQ1RJT05BTCk7CitvdXRfZGV0YWNoOgorCWRtYV9idWZfZGV0YWNoKGRtYWJ1ZiwgaW1w b3J0X2F0dGFjaCk7CitvdXRfaW1wb3J0OgorCWk5MTVfZ2VtX29iamVjdF9wdXQoaW1wb3J0X29i aik7CiBvdXRfZG1hYnVmOgogCWRtYV9idWZfcHV0KGRtYWJ1Zik7CiBvdXQ6CiAJaTkxNV9nZW1f b2JqZWN0X3B1dChvYmopOworb3V0X3JldDoKKwlmb3JjZV9kaWZmZXJlbnRfZGV2aWNlcyA9IGZh bHNlOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTI4Niw2ICszOTcsNyBAQCBpbnQgaTkxNV9nZW1f ZG1hYnVmX2xpdmVfc2VsZnRlc3RzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQogewog CXN0YXRpYyBjb25zdCBzdHJ1Y3QgaTkxNV9zdWJ0ZXN0IHRlc3RzW10gPSB7CiAJCVNVQlRFU1Qo aWd0X2RtYWJ1Zl9leHBvcnQpLAorCQlTVUJURVNUKGlndF9kbWFidWZfaW1wb3J0X3NhbWVfZHJp dmVyKSwKIAl9OwogCiAJcmV0dXJuIGk5MTVfc3VidGVzdHModGVzdHMsIGk5MTUpOwotLSAKMi4z MS4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRl bC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6 Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK 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 13A5FC11F6B for ; Wed, 30 Jun 2021 13:07:31 +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 D540B6146E for ; Wed, 30 Jun 2021 13:07:30 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org D540B6146E 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 C47DD6E9CE; Wed, 30 Jun 2021 13:07:24 +0000 (UTC) Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by gabe.freedesktop.org (Postfix) with ESMTPS id 4B6FC6E105; Wed, 30 Jun 2021 13:07:19 +0000 (UTC) X-IronPort-AV: E=McAfee;i="6200,9189,10030"; a="195634525" X-IronPort-AV: E=Sophos;i="5.83,312,1616482800"; d="scan'208";a="195634525" Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 30 Jun 2021 06:07:19 -0700 X-IronPort-AV: E=Sophos;i="5.83,312,1616482800"; d="scan'208";a="558290333" Received: from vanderss-mobl.ger.corp.intel.com (HELO thellst-mobl1.intel.com) ([10.249.254.133]) by orsmga004-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 30 Jun 2021 06:07:17 -0700 From: =?UTF-8?q?Thomas=20Hellstr=C3=B6m?= To: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org Subject: [PATCH 1/2] drm/i915/gem: Make our dma-buf exporter dynamic Date: Wed, 30 Jun 2021 15:07:00 +0200 Message-Id: <20210630130701.349458-2-thomas.hellstrom@linux.intel.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210630130701.349458-1-thomas.hellstrom@linux.intel.com> References: <20210630130701.349458-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?= , matthew.auld@intel.com, "Michael J . Ruhl" 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 dma_buf_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 exercise both dynamic and non-dynamic exports, and as a workaround until we fully support dynamic import and export, declare the exporter dynamic by providing pin() and unpin() implementations. For dynamic importers, make sure we keep the pinning also in map_dma_buf(), to ensure we never need to call dma_buf_move_notify(). Calling dma_buf_move_notify() is at the discretion of the exporter. v2: - Extend the selftest with a fake dynamic importer. - Provide real pin and unpin callbacks to not abuse the interface. Reported-by: Michael J. Ruhl Signed-off-by: Thomas Hellström --- drivers/gpu/drm/i915/gem/i915_gem_dmabuf.c | 31 ++++- .../drm/i915/gem/selftests/i915_gem_dmabuf.c | 116 +++++++++++++++++- 2 files changed, 143 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..918c19df7b66 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,14 @@ 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); + + /* + * Note. In the dynamic importer case, the object is not yet pinned. + * Let's pin it here to avoid having to call the move_notify + * callback, The call of which is not yet implemented. + */ + ret = i915_gem_object_pin_pages(obj); if (ret) goto err; @@ -168,6 +177,21 @@ static int i915_gem_end_cpu_access(struct dma_buf *dma_buf, enum dma_data_direct return err; } +static int i915_gem_dmabuf_pin(struct dma_buf_attachment *attach) +{ + struct drm_i915_gem_object *obj = dma_buf_to_obj(attach->dmabuf); + + assert_object_held(obj); + return i915_gem_object_pin_pages(obj); +} + +static void i915_gem_dmabuf_unpin(struct dma_buf_attachment *attach) +{ + struct drm_i915_gem_object *obj = dma_buf_to_obj(attach->dmabuf); + + i915_gem_object_unpin_pages(obj); +} + 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..868b3469ecbd 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,125 @@ 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 void igt_dmabuf_move_notify(struct dma_buf_attachment *attach) +{ + GEM_WARN_ON(1); +} + +static const struct dma_buf_attach_ops igt_dmabuf_attach_ops = { + .move_notify = igt_dmabuf_move_notify, +}; + +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; + struct dma_buf_attachment *import_attach; + struct sg_table *st; + long timeout; + 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); + + /* Now try a fake dynamic importer */ + import_attach = dma_buf_dynamic_attach(dmabuf, obj->base.dev->dev, + &igt_dmabuf_attach_ops, + NULL); + if (IS_ERR(import_attach)) + goto out_import; + + dma_resv_lock(dmabuf->resv, NULL); + st = dma_buf_map_attachment(import_attach, DMA_BIDIRECTIONAL); + dma_resv_unlock(dmabuf->resv); + if (IS_ERR(st)) + goto out_detach; + + timeout = dma_resv_wait_timeout(dmabuf->resv, false, true, 5 * HZ); + if (!timeout) { + pr_err("dmabuf wait for exclusive fence timed out.\n"); + timeout = -ETIME; + } + err = timeout > 0 ? 0 : timeout; + dma_buf_unmap_attachment(import_attach, st, DMA_BIDIRECTIONAL); +out_detach: + dma_buf_detach(dmabuf, import_attach); +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 +397,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