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,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 7A285C4743C for ; Wed, 23 Jun 2021 11:26: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 4A3D261076 for ; Wed, 23 Jun 2021 11:26:59 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 4A3D261076 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=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 A05556E8B9; Wed, 23 Jun 2021 11:26:58 +0000 (UTC) Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by gabe.freedesktop.org (Postfix) with ESMTPS id 46A966E8B1; Wed, 23 Jun 2021 11:26:55 +0000 (UTC) IronPort-SDR: fQXT/aIWUD1OHOLFNhOXhx8Q5yDqvWFJtdmzLm+OYMCabKlvigruMTOsnuNxJzybUKohKhe8cl 7k0O5HFzVBgQ== X-IronPort-AV: E=McAfee;i="6200,9189,10023"; a="271086588" X-IronPort-AV: E=Sophos;i="5.83,293,1616482800"; d="scan'208";a="271086588" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 23 Jun 2021 04:26:54 -0700 IronPort-SDR: 72oVXtcVzcdFUMyXvJCYrUu4HPz01ZTyXQg3lUe7nVVCqfL9ybbWK+YLnjVBlY2RTYjbRAHcz6 BV2UNtgSLe7g== X-IronPort-AV: E=Sophos;i="5.83,293,1616482800"; d="scan'208";a="454619209" Received: from dconnon-mobl.ger.corp.intel.com (HELO mwauld-desk1.intel.com) ([10.252.14.111]) by fmsmga008-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 23 Jun 2021 04:26:53 -0700 From: Matthew Auld To: intel-gfx@lists.freedesktop.org Date: Wed, 23 Jun 2021 12:26:36 +0100 Message-Id: <20210623112637.266855-2-matthew.auld@intel.com> X-Mailer: git-send-email 2.26.3 In-Reply-To: <20210623112637.266855-1-matthew.auld@intel.com> References: <20210623112637.266855-1-matthew.auld@intel.com> MIME-Version: 1.0 Subject: [Intel-gfx] [PATCH 2/3] drm/i915: support forcing the page size with lmem 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?= , dri-devel@lists.freedesktop.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" Rm9yIHNvbWUgc3BlY2lhbGlzZWQgb2JqZWN0cyB3ZSBtaWdodCBuZWVkIHNvbWV0aGluZyBsYXJn ZXIgdGhhbiB0aGUKcmVnaW9ucyBtaW5fcGFnZV9zaXplIGR1ZSB0byBzb21lIGh3IHJlc3RyaWN0 aW9uLCBhbmQgc2xpZ2h0bHkgbW9yZQpoYWlyeSBpcyBuZWVkaW5nIHNvbWV0aGluZyBzbWFsbGVy IHdpdGggdGhlIGd1YXJhbnRlZSB0aGF0IHN1Y2ggb2JqZWN0cwp3aWxsIG5ldmVyIGJlIGluc2Vy dGVkIGludG8gYW55IEdUVCwgd2hpY2ggaXMgdGhlIGNhc2UgZm9yIHRoZSBwYWdpbmcKc3RydWN0 dXJlcy4KClNpZ25lZC1vZmYtYnk6IE1hdHRoZXcgQXVsZCA8bWF0dGhldy5hdWxkQGludGVsLmNv bT4KQ2M6IFRob21hcyBIZWxsc3Ryw7ZtIDx0aG9tYXMuaGVsbHN0cm9tQGxpbnV4LmludGVsLmNv bT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fY3JlYXRlLmMgICAgfCAg MiArLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2xtZW0uYyAgICAgIHwgMzMg KysrKysrKysrLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2xtZW0uaCAgICAg IHwgIDUgKysKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9yZWdpb24uYyAgICB8 IDEwICsrLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3JlZ2lvbi5oICAgIHwg IDEgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3NobWVtLmMgICAgIHwgIDMg Ky0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9zdG9sZW4uYyAgICB8ICAzICst CiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fdHRtLmMgICAgICAgfCAxNCArKyst LQogZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3R0bS5oICAgICAgIHwgIDEgKwog Li4uL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2h1Z2VfcGFnZXMuYyAgIHwgIDMgKy0KIC4u Li9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2k5MTVfZ2VtX21tYW4uYyAgICB8ICA4ICstLQogZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbWVtb3J5X3JlZ2lvbi5oICAgIHwgIDEgKwogLi4uL2Ry bS9pOTE1L3NlbGZ0ZXN0cy9pbnRlbF9tZW1vcnlfcmVnaW9uLmMgIHwgNjMgKysrKysrKysrKysr KysrKysrLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL21vY2tfcmVnaW9uLmMgIHwg IDEgKwogMTQgZmlsZXMgY2hhbmdlZCwgMTMwIGluc2VydGlvbnMoKyksIDE4IGRlbGV0aW9ucygt KQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9jcmVhdGUu YyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9jcmVhdGUuYwppbmRleCA5M2Jm NjNiYmFmZjEuLjUxZjkyZTRiMWE2OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv Z2VtL2k5MTVfZ2VtX2NyZWF0ZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1 X2dlbV9jcmVhdGUuYwpAQCAtOTAsNyArOTAsNyBAQCBpOTE1X2dlbV9zZXR1cChzdHJ1Y3QgZHJt X2k5MTVfZ2VtX29iamVjdCAqb2JqLCB1NjQgc2l6ZSkKIAkgKi8KIAlmbGFncyA9IEk5MTVfQk9f QUxMT0NfVVNFUjsKIAotCXJldCA9IG1yLT5vcHMtPmluaXRfb2JqZWN0KG1yLCBvYmosIHNpemUs IGZsYWdzKTsKKwlyZXQgPSBtci0+b3BzLT5pbml0X29iamVjdChtciwgb2JqLCBzaXplLCAwLCBm bGFncyk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2xtZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dl bS9pOTE1X2dlbV9sbWVtLmMKaW5kZXggZDUzOWRmZmExNTU0Li4xNzRhOWUzNGFkOTMgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9sbWVtLmMKKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2xtZW0uYwpAQCAtNzEsMTEgKzcxLDQyIEBA IGJvb2wgaTkxNV9nZW1fb2JqZWN0X2lzX2xtZW0oc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Qg Km9iaikKIAkJICAgICAgbXItPnR5cGUgPT0gSU5URUxfTUVNT1JZX1NUT0xFTl9MT0NBTCk7CiB9 CiAKKy8qKgorICogX19pOTE1X2dlbV9vYmplY3RfY3JlYXRlX2xtZW1fd2l0aF9wcyAtIENyZWF0 ZSBsbWVtIG9iamVjdCBhbmQgZm9yY2UgdGhlCisgKiBtaW5pbXVtIHBhZ2Ugc2l6ZSBmb3IgdGhl IGJhY2tpbmcgcGFnZXMuCisgKiBAaTkxNTogVGhlIGk5MTUgaW5zdGFuY2UuCisgKiBAc2l6ZTog VGhlIHNpemUgaW4gYnl0ZXMgZm9yIHRoZSBvYmplY3QuIE5vdGUgdGhhdCB3ZSBuZWVkIHRvIHJv dW5kIHRoZSBzaXplCisgKiB1cCBkZXBlbmRpbmcgb24gdGhlIEBwYWdlX3NpemUuIFRoZSBmaW5h bCBvYmplY3Qgc2l6ZSBjYW4gYmUgZmlzaGVkIG91dCBmcm9tCisgKiB0aGUgZHJtIEdFTSBvYmpl Y3QuCisgKiBAcGFnZV9zaXplOiBUaGUgcmVxdWVzdGVkIG1pbmltdW0gcGFnZSBzaXplIGluIGJ5 dGVzIGZvciB0aGlzIG9iamVjdC4gVGhlIGlzCisgKiB1c2VmdWwgaWYgd2UgbmVlZCBzb21ldGhp bmcgYmlnZ2VyIHRoYW4gdGhlIHJlZ2lvbnMgbWluX3BhZ2Vfc2l6ZSBkdWUgdG8gc29tZQorICog aHcgcmVzdHJpY3Rpb24sIG9yIGluIHNvbWUgdmVyeSBzcGVjaWFsaXNlZCBjYXNlcyB3aGVyZSBp dCBuZWVkcyB0byBiZQorICogc21hbGxlciwgd2hlcmUgdGhlIGludGVybmFsIGZyYWdtZW50YXRp b24gY29zdCBpcyB0b28gZ3JlYXQgd2hlbiByb3VuZGluZyB1cAorICogdGhlIG9iamVjdCBzaXpl LgorICogQGZsYWdzOiB0aGUgb3B0aW9uYWwgQk8gYWxsb2NhdGlvbiBmbGFncworICoKKyAqIE5v dGUgdGhhdCB0aGlzIGludGVyZmFjZSBhc3N1bWVzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2lu ZyB3aGVuIGZvcmNpbmcgdGhlCisgKiBwYWdlX3NpemUuIElmIHRoaXMgaXMgc21hbGxlciB0aGFu IHRoZSByZWdpb25zIG1pbl9wYWdlX3NpemUgdGhlbiBpdCBjYW4KKyAqIG5ldmVyIGJlIGluc2Vy dGVkIGludG8gYW55IEdUVCwgb3RoZXJ3aXNlIGl0IG1pZ2h0IGxlYWQgdG8gdW5kZWZpbmVkCisg KiBiZWhhdmlvdXIuCisgKgorICogUmV0dXJuOiBUaGUgb2JqZWN0IHBvaW50ZXIsIHdoaWNoIG1p Z2h0IGJlIGFuIEVSUl9QVFIgaW4gdGhlIGNhc2Ugb2YgZmFpbHVyZS4KKyAqLworc3RydWN0IGRy bV9pOTE1X2dlbV9vYmplY3QgKgorX19pOTE1X2dlbV9vYmplY3RfY3JlYXRlX2xtZW1fd2l0aF9w cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwKKwkJCQkgICAgICByZXNvdXJjZV9zaXpl X3Qgc2l6ZSwKKwkJCQkgICAgICByZXNvdXJjZV9zaXplX3QgcGFnZV9zaXplLAorCQkJCSAgICAg IHVuc2lnbmVkIGludCBmbGFncykKK3sKKwlyZXR1cm4gaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZV9y ZWdpb24oaTkxNS0+bW0ucmVnaW9uc1tJTlRFTF9SRUdJT05fTE1FTV0sCisJCQkJCSAgICAgc2l6 ZSwgcGFnZV9zaXplLCBmbGFncyk7Cit9CisKIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICoK IGk5MTVfZ2VtX29iamVjdF9jcmVhdGVfbG1lbShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkx NSwKIAkJCSAgICByZXNvdXJjZV9zaXplX3Qgc2l6ZSwKIAkJCSAgICB1bnNpZ25lZCBpbnQgZmxh Z3MpCiB7CiAJcmV0dXJuIGk5MTVfZ2VtX29iamVjdF9jcmVhdGVfcmVnaW9uKGk5MTUtPm1tLnJl Z2lvbnNbSU5URUxfUkVHSU9OX0xNRU1dLAotCQkJCQkgICAgIHNpemUsIGZsYWdzKTsKKwkJCQkJ ICAgICBzaXplLCAwLCBmbGFncyk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9nZW0vaTkxNV9nZW1fbG1lbS5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2Vt X2xtZW0uaAppbmRleCBlYTc2ZmQxMWNjYjAuLmU5ODYwOGNlYmJiYyAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2xtZW0uaAorKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9nZW0vaTkxNV9nZW1fbG1lbS5oCkBAIC0yMSw2ICsyMSwxMSBAQCBpOTE1X2dlbV9v YmplY3RfbG1lbV9pb19tYXAoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKIAogYm9v bCBpOTE1X2dlbV9vYmplY3RfaXNfbG1lbShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2Jq KTsKIAorc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKgorX19pOTE1X2dlbV9vYmplY3RfY3Jl YXRlX2xtZW1fd2l0aF9wcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwKKwkJCQkgICAg ICByZXNvdXJjZV9zaXplX3Qgc2l6ZSwKKwkJCQkgICAgICByZXNvdXJjZV9zaXplX3QgcGFnZV9z aXplLAorCQkJCSAgICAgIHVuc2lnbmVkIGludCBmbGFncyk7CiBzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCAqCiBpOTE1X2dlbV9vYmplY3RfY3JlYXRlX2xtZW0oc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmk5MTUsCiAJCQkgICAgcmVzb3VyY2Vfc2l6ZV90IHNpemUsCmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcmVnaW9uLmMgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9nZW0vaTkxNV9nZW1fcmVnaW9uLmMKaW5kZXggZDFmMTg0MDU0MGRkLi5iMTgxODJi NDZlZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9yZWdp b24uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcmVnaW9uLmMKQEAg LTM2LDYgKzM2LDcgQEAgdm9pZCBpOTE1X2dlbV9vYmplY3RfcmVsZWFzZV9tZW1vcnlfcmVnaW9u KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCiBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29i amVjdCAqCiBpOTE1X2dlbV9vYmplY3RfY3JlYXRlX3JlZ2lvbihzdHJ1Y3QgaW50ZWxfbWVtb3J5 X3JlZ2lvbiAqbWVtLAogCQkJICAgICAgcmVzb3VyY2Vfc2l6ZV90IHNpemUsCisJCQkgICAgICBy ZXNvdXJjZV9zaXplX3QgcGFnZV9zaXplLAogCQkJICAgICAgdW5zaWduZWQgaW50IGZsYWdzKQog ewogCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7CkBAIC00OCwxMSArNDksMTYgQEAg aTkxNV9nZW1fb2JqZWN0X2NyZWF0ZV9yZWdpb24oc3RydWN0IGludGVsX21lbW9yeV9yZWdpb24g Km1lbSwKIAkgKi8KIAogCUdFTV9CVUdfT04oZmxhZ3MgJiB+STkxNV9CT19BTExPQ19GTEFHUyk7 CisJR0VNX0JVR19PTighaXNfcG93ZXJfb2ZfMl91NjQocGFnZV9zaXplKSk7CisJR0VNX0JVR19P TihwYWdlX3NpemUgPCBQQUdFX1NJWkUpOwogCiAJaWYgKCFtZW0pCiAJCXJldHVybiBFUlJfUFRS KC1FTk9ERVYpOwogCi0Jc2l6ZSA9IHJvdW5kX3VwKHNpemUsIG1lbS0+bWluX3BhZ2Vfc2l6ZSk7 CisJaWYgKCFwYWdlX3NpemUpCisJCXBhZ2Vfc2l6ZSA9IG1lbS0+bWluX3BhZ2Vfc2l6ZTsKKwor CXNpemUgPSByb3VuZF91cChzaXplLCBwYWdlX3NpemUpOwogCiAJR0VNX0JVR19PTighc2l6ZSk7 CiAJR0VNX0JVR19PTighSVNfQUxJR05FRChzaXplLCBJOTE1X0dUVF9NSU5fQUxJR05NRU5UKSk7 CkBAIC02NCw3ICs3MCw3IEBAIGk5MTVfZ2VtX29iamVjdF9jcmVhdGVfcmVnaW9uKHN0cnVjdCBp bnRlbF9tZW1vcnlfcmVnaW9uICptZW0sCiAJaWYgKCFvYmopCiAJCXJldHVybiBFUlJfUFRSKC1F Tk9NRU0pOwogCi0JZXJyID0gbWVtLT5vcHMtPmluaXRfb2JqZWN0KG1lbSwgb2JqLCBzaXplLCBm bGFncyk7CisJZXJyID0gbWVtLT5vcHMtPmluaXRfb2JqZWN0KG1lbSwgb2JqLCBzaXplLCBwYWdl X3NpemUsIGZsYWdzKTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9vYmplY3RfZnJlZTsKIApkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3JlZ2lvbi5oIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3JlZ2lvbi5oCmluZGV4IDg0ZmNiMzI5NzQw MC4uMTAwOGU1ODBhODlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkx NV9nZW1fcmVnaW9uLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3Jl Z2lvbi5oCkBAIC0xOSw2ICsxOSw3IEBAIHZvaWQgaTkxNV9nZW1fb2JqZWN0X3JlbGVhc2VfbWVt b3J5X3JlZ2lvbihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKTsKIHN0cnVjdCBkcm1f aTkxNV9nZW1fb2JqZWN0ICoKIGk5MTVfZ2VtX29iamVjdF9jcmVhdGVfcmVnaW9uKHN0cnVjdCBp bnRlbF9tZW1vcnlfcmVnaW9uICptZW0sCiAJCQkgICAgICByZXNvdXJjZV9zaXplX3Qgc2l6ZSwK KwkJCSAgICAgIHJlc291cmNlX3NpemVfdCBwYWdlX3NpemUsCiAJCQkgICAgICB1bnNpZ25lZCBp bnQgZmxhZ3MpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dl bS9pOTE1X2dlbV9zaG1lbS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3No bWVtLmMKaW5kZXggNWQxNmM0NDYyZmRhLi5mNTc5MTYxMWI5Y2EgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9zaG1lbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2dlbS9pOTE1X2dlbV9zaG1lbS5jCkBAIC00ODksNiArNDg5LDcgQEAgc3RhdGljIGlu dCBfX2NyZWF0ZV9zaG1lbShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwKIHN0YXRpYyBp bnQgc2htZW1fb2JqZWN0X2luaXQoc3RydWN0IGludGVsX21lbW9yeV9yZWdpb24gKm1lbSwKIAkJ CSAgICAgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKIAkJCSAgICAgcmVzb3VyY2Vf c2l6ZV90IHNpemUsCisJCQkgICAgIHJlc291cmNlX3NpemVfdCBwYWdlX3NpemUsCiAJCQkgICAg IHVuc2lnbmVkIGludCBmbGFncykKIHsKIAlzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IGxv Y2tfY2xhc3M7CkBAIC01NDgsNyArNTQ5LDcgQEAgaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZV9zaG1l bShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwKIAkJCSAgICAgcmVzb3VyY2Vfc2l6ZV90 IHNpemUpCiB7CiAJcmV0dXJuIGk5MTVfZ2VtX29iamVjdF9jcmVhdGVfcmVnaW9uKGk5MTUtPm1t LnJlZ2lvbnNbSU5URUxfUkVHSU9OX1NNRU1dLAotCQkJCQkgICAgIHNpemUsIDApOworCQkJCQkg ICAgIHNpemUsIDAsIDApOwogfQogCiAvKiBBbGxvY2F0ZSBhIG5ldyBHRU0gb2JqZWN0IGFuZCBm aWxsIGl0IHdpdGggdGhlIHN1cHBsaWVkIGRhdGEgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9zdG9sZW4uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dl bS9pOTE1X2dlbV9zdG9sZW4uYwppbmRleCBiMGMzYTdkYzYwZDEuLjkwNzA4ZGUyNzY4NCAxMDA2 NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3N0b2xlbi5jCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9zdG9sZW4uYwpAQCAtNjcwLDYgKzY3 MCw3IEBAIHN0YXRpYyBpbnQgX19pOTE1X2dlbV9vYmplY3RfY3JlYXRlX3N0b2xlbihzdHJ1Y3Qg aW50ZWxfbWVtb3J5X3JlZ2lvbiAqbWVtLAogc3RhdGljIGludCBfaTkxNV9nZW1fb2JqZWN0X3N0 b2xlbl9pbml0KHN0cnVjdCBpbnRlbF9tZW1vcnlfcmVnaW9uICptZW0sCiAJCQkJCXN0cnVjdCBk cm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCiAJCQkJCXJlc291cmNlX3NpemVfdCBzaXplLAorCQkJ CQlyZXNvdXJjZV9zaXplX3QgcGFnZV9zaXplLAogCQkJCQl1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7 CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBtZW0tPmk5MTU7CkBAIC03MDgsNyAr NzA5LDcgQEAgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKgogaTkxNV9nZW1fb2JqZWN0X2Ny ZWF0ZV9zdG9sZW4oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsCiAJCQkgICAgICByZXNv dXJjZV9zaXplX3Qgc2l6ZSkKIHsKLQlyZXR1cm4gaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZV9yZWdp b24oaTkxNS0+bW0uc3RvbGVuX3JlZ2lvbiwgc2l6ZSwgMCk7CisJcmV0dXJuIGk5MTVfZ2VtX29i amVjdF9jcmVhdGVfcmVnaW9uKGk5MTUtPm1tLnN0b2xlbl9yZWdpb24sIHNpemUsIDAsIDApOwog fQogCiBzdGF0aWMgaW50IGluaXRfc3RvbGVuX3NtZW0oc3RydWN0IGludGVsX21lbW9yeV9yZWdp b24gKm1lbSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV90 dG0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV90dG0uYwppbmRleCA1ZDg5 NGJiYTY0MzAuLjIwMjRkZDBjN2MyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv Z2VtL2k5MTVfZ2VtX3R0bS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dl bV90dG0uYwpAQCAtNzU4LDkgKzc1OCw2IEBAIHN0YXRpYyB1NjQgaTkxNV9nZW1fb2JqZWN0X3Bh Z2Vfc2l6ZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQogCXU2NCBwYWdlX3NpemU7 CiAJaW50IGk7CiAKLQlpZiAoIW9iai0+bW0ubl9wbGFjZW1lbnRzKQotCQlyZXR1cm4gb2JqLT5t bS5yZWdpb24tPm1pbl9wYWdlX3NpemU7Ci0KIAlwYWdlX3NpemUgPSAwOwogCWZvciAoaSA9IDA7 IGkgPCBvYmotPm1tLm5fcGxhY2VtZW50czsgaSsrKSB7CiAJCXN0cnVjdCBpbnRlbF9tZW1vcnlf cmVnaW9uICptciA9IG9iai0+bW0ucGxhY2VtZW50c1tpXTsKQEAgLTc4NCw2ICs3ODEsNyBAQCBz dGF0aWMgdTY0IGk5MTVfZ2VtX29iamVjdF9wYWdlX3NpemUoc3RydWN0IGRybV9pOTE1X2dlbV9v YmplY3QgKm9iaikKIGludCBfX2k5MTVfZ2VtX3R0bV9vYmplY3RfaW5pdChzdHJ1Y3QgaW50ZWxf bWVtb3J5X3JlZ2lvbiAqbWVtLAogCQkJICAgICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 ICpvYmosCiAJCQkgICAgICAgcmVzb3VyY2Vfc2l6ZV90IHNpemUsCisJCQkgICAgICAgcmVzb3Vy Y2Vfc2l6ZV90IHBhZ2Vfc2l6ZSwKIAkJCSAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7CiAJ c3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBsb2NrX2NsYXNzOwpAQCAtODAyLDYgKzgwMCwx NCBAQCBpbnQgX19pOTE1X2dlbV90dG1fb2JqZWN0X2luaXQoc3RydWN0IGludGVsX21lbW9yeV9y ZWdpb24gKm1lbSwKIAlib190eXBlID0gKG9iai0+ZmxhZ3MgJiBJOTE1X0JPX0FMTE9DX1VTRVIp ID8gdHRtX2JvX3R5cGVfZGV2aWNlIDoKIAkJdHRtX2JvX3R5cGVfa2VybmVsOwogCisJR0VNX0JV R19PTighcGFnZV9zaXplKTsKKworCWlmIChvYmotPm1tLm5fcGxhY2VtZW50cykgeworCQkvKiBG b3JjaW5nIHRoZSBwYWdlIHNpemUgaXMga2VybmVsIGludGVybmFsIG9ubHkgKi8KKwkJR0VNX0JV R19PTihwYWdlX3NpemUgIT0gbWVtLT5taW5fcGFnZV9zaXplKTsKKwkJcGFnZV9zaXplID0gaTkx NV9nZW1fb2JqZWN0X3BhZ2Vfc2l6ZShvYmopOworCX0KKwogCS8qCiAJICogSWYgdGhpcyBmdW5j dGlvbiBmYWlscywgaXQgd2lsbCBjYWxsIHRoZSBkZXN0cnVjdG9yLCBidXQKIAkgKiBvdXIgY2Fs bGVyIHN0aWxsIG93bnMgdGhlIG9iamVjdC4gU28gbm8gZnJlZWluZyBpbiB0aGUKQEAgLTgxMiw3 ICs4MTgsNyBAQCBpbnQgX19pOTE1X2dlbV90dG1fb2JqZWN0X2luaXQoc3RydWN0IGludGVsX21l bW9yeV9yZWdpb24gKm1lbSwKIAlvYmotPmJhc2Uudm1hX25vZGUuZHJpdmVyX3ByaXZhdGUgPSBp OTE1X2dlbV90b190dG0ob2JqKTsKIAlyZXQgPSB0dG1fYm9faW5pdCgmaTkxNS0+YmRldiwgaTkx NV9nZW1fdG9fdHRtKG9iaiksIHNpemUsCiAJCQkgIGJvX3R5cGUsICZpOTE1X3N5c19wbGFjZW1l bnQsCi0JCQkgIGk5MTVfZ2VtX29iamVjdF9wYWdlX3NpemUob2JqKSA+PiBQQUdFX1NISUZULAor CQkJICBwYWdlX3NpemUgPj4gUEFHRV9TSElGVCwKIAkJCSAgdHJ1ZSwgTlVMTCwgTlVMTCwgaTkx NV90dG1fYm9fZGVzdHJveSk7CiAJaWYgKCFyZXQpCiAJCW9iai0+dHRtLmNyZWF0ZWQgPSB0cnVl OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3R0bS5oIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3R0bS5oCmluZGV4IGI4ZDNkY2JiNTBk Zi4uNDA5MjdmNjdiNmQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkx NV9nZW1fdHRtLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3R0bS5o CkBAIC00NCw1ICs0NCw2IEBAIGk5MTVfdHRtX3RvX2dlbShzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmpl Y3QgKmJvKQogaW50IF9faTkxNV9nZW1fdHRtX29iamVjdF9pbml0KHN0cnVjdCBpbnRlbF9tZW1v cnlfcmVnaW9uICptZW0sCiAJCQkgICAgICAgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9i aiwKIAkJCSAgICAgICByZXNvdXJjZV9zaXplX3Qgc2l6ZSwKKwkJCSAgICAgICByZXNvdXJjZV9z aXplX3QgcGFnZV9zaXplLAogCQkJICAgICAgIHVuc2lnbmVkIGludCBmbGFncyk7CiAjZW5kaWYK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvaHVnZV9wYWdl cy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9odWdlX3BhZ2VzLmMKaW5k ZXggZGFkZDQ4NWJjNTJmLi45ZDE3YmZmOGIzNmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2dlbS9zZWxmdGVzdHMvaHVnZV9wYWdlcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2dlbS9zZWxmdGVzdHMvaHVnZV9wYWdlcy5jCkBAIC00OTcsNyArNDk3LDggQEAgc3RhdGlj IGludCBpZ3RfbW9ja19tZW1vcnlfcmVnaW9uX2h1Z2VfcGFnZXModm9pZCAqYXJnKQogCQlpbnQg aTsKIAogCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShmbGFncyk7ICsraSkgewotCQkJb2Jq ID0gaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZV9yZWdpb24obWVtLCBwYWdlX3NpemUsCisJCQlvYmog PSBpOTE1X2dlbV9vYmplY3RfY3JlYXRlX3JlZ2lvbihtZW0sCisJCQkJCQkJICAgIHBhZ2Vfc2l6 ZSwgcGFnZV9zaXplLAogCQkJCQkJCSAgICBmbGFnc1tpXSk7CiAJCQlpZiAoSVNfRVJSKG9iaikp IHsKIAkJCQllcnIgPSBQVFJfRVJSKG9iaik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9nZW0vc2VsZnRlc3RzL2k5MTVfZ2VtX21tYW4uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2dlbS9zZWxmdGVzdHMvaTkxNV9nZW1fbW1hbi5jCmluZGV4IDQ0YjVkZTA2Y2U2NC4uNzM5OGI1 MDI3MzhhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2k5 MTVfZ2VtX21tYW4uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2k5 MTVfZ2VtX21tYW4uYwpAQCAtOTU1LDcgKzk1NSw3IEBAIHN0YXRpYyBpbnQgaWd0X21tYXAodm9p ZCAqYXJnKQogCQkJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKIAkJCWludCBlcnI7 CiAKLQkJCW9iaiA9IGk5MTVfZ2VtX29iamVjdF9jcmVhdGVfcmVnaW9uKG1yLCBzaXplc1tpXSwg STkxNV9CT19BTExPQ19VU0VSKTsKKwkJCW9iaiA9IGk5MTVfZ2VtX29iamVjdF9jcmVhdGVfcmVn aW9uKG1yLCBzaXplc1tpXSwgMCwgSTkxNV9CT19BTExPQ19VU0VSKTsKIAkJCWlmIChvYmogPT0g RVJSX1BUUigtRU5PREVWKSkKIAkJCQljb250aW51ZTsKIApAQCAtMTA3NSw3ICsxMDc1LDcgQEAg c3RhdGljIGludCBpZ3RfbW1hcF9hY2Nlc3Modm9pZCAqYXJnKQogCQlzdHJ1Y3QgZHJtX2k5MTVf Z2VtX29iamVjdCAqb2JqOwogCQlpbnQgZXJyOwogCi0JCW9iaiA9IGk5MTVfZ2VtX29iamVjdF9j cmVhdGVfcmVnaW9uKG1yLCBQQUdFX1NJWkUsIEk5MTVfQk9fQUxMT0NfVVNFUik7CisJCW9iaiA9 IGk5MTVfZ2VtX29iamVjdF9jcmVhdGVfcmVnaW9uKG1yLCBQQUdFX1NJWkUsIDAsIEk5MTVfQk9f QUxMT0NfVVNFUik7CiAJCWlmIChvYmogPT0gRVJSX1BUUigtRU5PREVWKSkKIAkJCWNvbnRpbnVl OwogCkBAIC0xMjIwLDcgKzEyMjAsNyBAQCBzdGF0aWMgaW50IGlndF9tbWFwX2dwdSh2b2lkICph cmcpCiAJCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7CiAJCWludCBlcnI7CiAKLQkJ b2JqID0gaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZV9yZWdpb24obXIsIFBBR0VfU0laRSwgSTkxNV9C T19BTExPQ19VU0VSKTsKKwkJb2JqID0gaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZV9yZWdpb24obXIs IFBBR0VfU0laRSwgMCwgSTkxNV9CT19BTExPQ19VU0VSKTsKIAkJaWYgKG9iaiA9PSBFUlJfUFRS KC1FTk9ERVYpKQogCQkJY29udGludWU7CiAKQEAgLTEzNzUsNyArMTM3NSw3IEBAIHN0YXRpYyBp bnQgaWd0X21tYXBfcmV2b2tlKHZvaWQgKmFyZykKIAkJc3RydWN0IGRybV9pOTE1X2dlbV9vYmpl Y3QgKm9iajsKIAkJaW50IGVycjsKIAotCQlvYmogPSBpOTE1X2dlbV9vYmplY3RfY3JlYXRlX3Jl Z2lvbihtciwgUEFHRV9TSVpFLCBJOTE1X0JPX0FMTE9DX1VTRVIpOworCQlvYmogPSBpOTE1X2dl bV9vYmplY3RfY3JlYXRlX3JlZ2lvbihtciwgUEFHRV9TSVpFLCAwLCBJOTE1X0JPX0FMTE9DX1VT RVIpOwogCQlpZiAob2JqID09IEVSUl9QVFIoLUVOT0RFVikpCiAJCQljb250aW51ZTsKIApkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbWVtb3J5X3JlZ2lvbi5oIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbWVtb3J5X3JlZ2lvbi5oCmluZGV4IDJiZTg0MzNkMzcz YS4uMzU5Y2Q4NDI0YjlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9t ZW1vcnlfcmVnaW9uLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbWVtb3J5X3Jl Z2lvbi5oCkBAIC01NSw2ICs1NSw3IEBAIHN0cnVjdCBpbnRlbF9tZW1vcnlfcmVnaW9uX29wcyB7 CiAJaW50ICgqaW5pdF9vYmplY3QpKHN0cnVjdCBpbnRlbF9tZW1vcnlfcmVnaW9uICptZW0sCiAJ CQkgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAogCQkJICAgcmVzb3VyY2Vfc2l6 ZV90IHNpemUsCisJCQkgICByZXNvdXJjZV9zaXplX3QgcGFnZV9zaXplLAogCQkJICAgdW5zaWdu ZWQgaW50IGZsYWdzKTsKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3Nl bGZ0ZXN0cy9pbnRlbF9tZW1vcnlfcmVnaW9uLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxm dGVzdHMvaW50ZWxfbWVtb3J5X3JlZ2lvbi5jCmluZGV4IGVjYzNiOWU2YzIyYi4uMWFhY2NiOTg0 MWEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaW50ZWxfbWVt b3J5X3JlZ2lvbi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pbnRlbF9t ZW1vcnlfcmVnaW9uLmMKQEAgLTY4LDcgKzY4LDcgQEAgc3RhdGljIGludCBpZ3RfbW9ja19maWxs KHZvaWQgKmFyZykKIAkJcmVzb3VyY2Vfc2l6ZV90IHNpemUgPSBwYWdlX251bSAqIHBhZ2Vfc2l6 ZTsKIAkJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKIAotCQlvYmogPSBpOTE1X2dl bV9vYmplY3RfY3JlYXRlX3JlZ2lvbihtZW0sIHNpemUsIDApOworCQlvYmogPSBpOTE1X2dlbV9v YmplY3RfY3JlYXRlX3JlZ2lvbihtZW0sIHNpemUsIDAsIDApOwogCQlpZiAoSVNfRVJSKG9iaikp IHsKIAkJCWVyciA9IFBUUl9FUlIob2JqKTsKIAkJCWJyZWFrOwpAQCAtMTEwLDcgKzExMCw3IEBA IGlndF9vYmplY3RfY3JlYXRlKHN0cnVjdCBpbnRlbF9tZW1vcnlfcmVnaW9uICptZW0sCiAJc3Ry dWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKIAlpbnQgZXJyOwogCi0Jb2JqID0gaTkxNV9n ZW1fb2JqZWN0X2NyZWF0ZV9yZWdpb24obWVtLCBzaXplLCBmbGFncyk7CisJb2JqID0gaTkxNV9n ZW1fb2JqZWN0X2NyZWF0ZV9yZWdpb24obWVtLCBzaXplLCAwLCBmbGFncyk7CiAJaWYgKElTX0VS UihvYmopKQogCQlyZXR1cm4gb2JqOwogCkBAIC02NDcsNiArNjQ3LDYyIEBAIHN0YXRpYyBpbnQg aWd0X2xtZW1fY3JlYXRlKHZvaWQgKmFyZykKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgaW50 IGlndF9sbWVtX2NyZWF0ZV93aXRoX3BzKHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqaTkxNSA9IGFyZzsKKwlpbnQgZXJyID0gMDsKKwl1MzIgcHM7CisKKwlmb3IgKHBz ID0gUEFHRV9TSVpFOyBwcyA8PSBTWl8xRzsgcHMgPDw9IDEpIHsKKwkJc3RydWN0IGRybV9pOTE1 X2dlbV9vYmplY3QgKm9iajsKKwkJZG1hX2FkZHJfdCBkYWRkcjsKKworCQlvYmogPSBfX2k5MTVf Z2VtX29iamVjdF9jcmVhdGVfbG1lbV93aXRoX3BzKGk5MTUsIHBzLCBwcywgMCk7CisJCWlmIChJ U19FUlIob2JqKSkgeworCQkJZXJyID0gUFRSX0VSUihvYmopOworCQkJaWYgKGVyciA9PSAtRU5Y SU8gfHwgZXJyID09IC1FMkJJRykgeworCQkJCXByX2luZm8oIiVzIG5vdCBlbm91Z2ggbG1lbSBm b3IgcHMoJXUpIGVycj0lZFxuIiwKKwkJCQkJX19mdW5jX18sIHBzLCBlcnIpOworCQkJCWVyciA9 IDA7CisJCQl9CisKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKG9iai0+YmFzZS5zaXplICE9IHBz KSB7CisJCQlwcl9lcnIoIiVzIHNpemUoJXp1KSAhPSBwcygldSlcbiIsCisJCQkgICAgICAgX19m dW5jX18sIG9iai0+YmFzZS5zaXplLCBwcyk7CisJCQllcnIgPSAtRUlOVkFMOworCQkJZ290byBv dXRfcHV0OworCQl9CisKKwkJaTkxNV9nZW1fb2JqZWN0X2xvY2sob2JqLCBOVUxMKTsKKwkJZXJy ID0gaTkxNV9nZW1fb2JqZWN0X3Bpbl9wYWdlcyhvYmopOworCQlpZiAoZXJyKQorCQkJZ290byBv dXRfcHV0OworCisJCWRhZGRyID0gaTkxNV9nZW1fb2JqZWN0X2dldF9kbWFfYWRkcmVzcyhvYmos IDApOworCQlpZiAoIUlTX0FMSUdORUQoZGFkZHIsIHBzKSkgeworCQkJcHJfZXJyKCIlcyBkYWRk ciglcGEpIG5vdCBhbGlnbmVkIHdpdGggcHMoJXUpXG4iLAorCQkJICAgICAgIF9fZnVuY19fLCAm ZGFkZHIsIHBzKTsKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlnb3RvIG91dF91bnBpbjsKKwkJfQor CitvdXRfdW5waW46CisJCWk5MTVfZ2VtX29iamVjdF91bnBpbl9wYWdlcyhvYmopOworCQlfX2k5 MTVfZ2VtX29iamVjdF9wdXRfcGFnZXMob2JqKTsKK291dF9wdXQ6CisJCWk5MTVfZ2VtX29iamVj dF91bmxvY2sob2JqKTsKKwkJaTkxNV9nZW1fb2JqZWN0X3B1dChvYmopOworCisJCWlmIChlcnIp CisJCQlicmVhazsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCiBzdGF0aWMgaW50IGlndF9sbWVt X2NyZWF0ZV9jbGVhcmVkX2NwdSh2b2lkICphcmcpCiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmk5MTUgPSBhcmc7CkBAIC05MzIsNyArOTg4LDcgQEAgY3JlYXRlX3JlZ2lvbl9mb3JfbWFw cGluZyhzdHJ1Y3QgaW50ZWxfbWVtb3J5X3JlZ2lvbiAqbXIsIHU2NCBzaXplLCB1MzIgdHlwZSwK IAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOwogCXZvaWQgKmFkZHI7CiAKLQlvYmog PSBpOTE1X2dlbV9vYmplY3RfY3JlYXRlX3JlZ2lvbihtciwgc2l6ZSwgMCk7CisJb2JqID0gaTkx NV9nZW1fb2JqZWN0X2NyZWF0ZV9yZWdpb24obXIsIHNpemUsIDAsIDApOwogCWlmIChJU19FUlIo b2JqKSkgewogCQlpZiAoUFRSX0VSUihvYmopID09IC1FTk9TUEMpIC8qIFN0b2xlbiBtZW1vcnkg Ki8KIAkJCXJldHVybiBFUlJfUFRSKC1FTk9ERVYpOwpAQCAtMTE0OSw2ICsxMjA1LDcgQEAgaW50 IGludGVsX21lbW9yeV9yZWdpb25fbGl2ZV9zZWxmdGVzdHMoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmk5MTUpCiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBpOTE1X3N1YnRlc3QgdGVzdHNbXSA9 IHsKIAkJU1VCVEVTVChpZ3RfbG1lbV9jcmVhdGUpLAorCQlTVUJURVNUKGlndF9sbWVtX2NyZWF0 ZV93aXRoX3BzKSwKIAkJU1VCVEVTVChpZ3RfbG1lbV9jcmVhdGVfY2xlYXJlZF9jcHUpLAogCQlT VUJURVNUKGlndF9sbWVtX3dyaXRlX2NwdSksCiAJCVNVQlRFU1QoaWd0X2xtZW1fd3JpdGVfZ3B1 KSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9tb2NrX3JlZ2lv bi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL21vY2tfcmVnaW9uLmMKaW5kZXgg ZmE3ODZkZWRlNjA4Li5lZmE4NmRmZmUzYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L3NlbGZ0ZXN0cy9tb2NrX3JlZ2lvbi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3Nl bGZ0ZXN0cy9tb2NrX3JlZ2lvbi5jCkBAIC02Myw2ICs2Myw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX29iamVjdF9vcHMgbW9ja19yZWdpb25fb2JqX29wcyA9IHsKIHN0YXRp YyBpbnQgbW9ja19vYmplY3RfaW5pdChzdHJ1Y3QgaW50ZWxfbWVtb3J5X3JlZ2lvbiAqbWVtLAog CQkJICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCiAJCQkgICAgcmVzb3VyY2Vf c2l6ZV90IHNpemUsCisJCQkgICAgcmVzb3VyY2Vfc2l6ZV90IHBhZ2Vfc2l6ZSwKIAkJCSAgICB1 bnNpZ25lZCBpbnQgZmxhZ3MpCiB7CiAJc3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBsb2Nr X2NsYXNzOwotLSAKMi4yNi4zCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVz a3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9p bnRlbC1nZngK 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,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 739FDC48BE5 for ; Wed, 23 Jun 2021 11:27:01 +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 2596761076 for ; Wed, 23 Jun 2021 11:27:01 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 2596761076 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=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 266316E8BA; Wed, 23 Jun 2021 11:27:00 +0000 (UTC) Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by gabe.freedesktop.org (Postfix) with ESMTPS id 46A966E8B1; Wed, 23 Jun 2021 11:26:55 +0000 (UTC) IronPort-SDR: fQXT/aIWUD1OHOLFNhOXhx8Q5yDqvWFJtdmzLm+OYMCabKlvigruMTOsnuNxJzybUKohKhe8cl 7k0O5HFzVBgQ== X-IronPort-AV: E=McAfee;i="6200,9189,10023"; a="271086588" X-IronPort-AV: E=Sophos;i="5.83,293,1616482800"; d="scan'208";a="271086588" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 23 Jun 2021 04:26:54 -0700 IronPort-SDR: 72oVXtcVzcdFUMyXvJCYrUu4HPz01ZTyXQg3lUe7nVVCqfL9ybbWK+YLnjVBlY2RTYjbRAHcz6 BV2UNtgSLe7g== X-IronPort-AV: E=Sophos;i="5.83,293,1616482800"; d="scan'208";a="454619209" Received: from dconnon-mobl.ger.corp.intel.com (HELO mwauld-desk1.intel.com) ([10.252.14.111]) by fmsmga008-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 23 Jun 2021 04:26:53 -0700 From: Matthew Auld To: intel-gfx@lists.freedesktop.org Subject: [PATCH 2/3] drm/i915: support forcing the page size with lmem Date: Wed, 23 Jun 2021 12:26:36 +0100 Message-Id: <20210623112637.266855-2-matthew.auld@intel.com> X-Mailer: git-send-email 2.26.3 In-Reply-To: <20210623112637.266855-1-matthew.auld@intel.com> References: <20210623112637.266855-1-matthew.auld@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?= , dri-devel@lists.freedesktop.org Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" For some specialised objects we might need something larger than the regions min_page_size due to some hw restriction, and slightly more hairy is needing something smaller with the guarantee that such objects will never be inserted into any GTT, which is the case for the paging structures. Signed-off-by: Matthew Auld Cc: Thomas Hellström --- drivers/gpu/drm/i915/gem/i915_gem_create.c | 2 +- drivers/gpu/drm/i915/gem/i915_gem_lmem.c | 33 +++++++++- drivers/gpu/drm/i915/gem/i915_gem_lmem.h | 5 ++ drivers/gpu/drm/i915/gem/i915_gem_region.c | 10 ++- drivers/gpu/drm/i915/gem/i915_gem_region.h | 1 + drivers/gpu/drm/i915/gem/i915_gem_shmem.c | 3 +- drivers/gpu/drm/i915/gem/i915_gem_stolen.c | 3 +- drivers/gpu/drm/i915/gem/i915_gem_ttm.c | 14 +++-- drivers/gpu/drm/i915/gem/i915_gem_ttm.h | 1 + .../gpu/drm/i915/gem/selftests/huge_pages.c | 3 +- .../drm/i915/gem/selftests/i915_gem_mman.c | 8 +-- drivers/gpu/drm/i915/intel_memory_region.h | 1 + .../drm/i915/selftests/intel_memory_region.c | 63 ++++++++++++++++++- drivers/gpu/drm/i915/selftests/mock_region.c | 1 + 14 files changed, 130 insertions(+), 18 deletions(-) diff --git a/drivers/gpu/drm/i915/gem/i915_gem_create.c b/drivers/gpu/drm/i915/gem/i915_gem_create.c index 93bf63bbaff1..51f92e4b1a69 100644 --- a/drivers/gpu/drm/i915/gem/i915_gem_create.c +++ b/drivers/gpu/drm/i915/gem/i915_gem_create.c @@ -90,7 +90,7 @@ i915_gem_setup(struct drm_i915_gem_object *obj, u64 size) */ flags = I915_BO_ALLOC_USER; - ret = mr->ops->init_object(mr, obj, size, flags); + ret = mr->ops->init_object(mr, obj, size, 0, flags); if (ret) return ret; diff --git a/drivers/gpu/drm/i915/gem/i915_gem_lmem.c b/drivers/gpu/drm/i915/gem/i915_gem_lmem.c index d539dffa1554..174a9e34ad93 100644 --- a/drivers/gpu/drm/i915/gem/i915_gem_lmem.c +++ b/drivers/gpu/drm/i915/gem/i915_gem_lmem.c @@ -71,11 +71,42 @@ bool i915_gem_object_is_lmem(struct drm_i915_gem_object *obj) mr->type == INTEL_MEMORY_STOLEN_LOCAL); } +/** + * __i915_gem_object_create_lmem_with_ps - Create lmem object and force the + * minimum page size for the backing pages. + * @i915: The i915 instance. + * @size: The size in bytes for the object. Note that we need to round the size + * up depending on the @page_size. The final object size can be fished out from + * the drm GEM object. + * @page_size: The requested minimum page size in bytes for this object. The is + * useful if we need something bigger than the regions min_page_size due to some + * hw restriction, or in some very specialised cases where it needs to be + * smaller, where the internal fragmentation cost is too great when rounding up + * the object size. + * @flags: the optional BO allocation flags + * + * Note that this interface assumes you know what you are doing when forcing the + * page_size. If this is smaller than the regions min_page_size then it can + * never be inserted into any GTT, otherwise it might lead to undefined + * behaviour. + * + * Return: The object pointer, which might be an ERR_PTR in the case of failure. + */ +struct drm_i915_gem_object * +__i915_gem_object_create_lmem_with_ps(struct drm_i915_private *i915, + resource_size_t size, + resource_size_t page_size, + unsigned int flags) +{ + return i915_gem_object_create_region(i915->mm.regions[INTEL_REGION_LMEM], + size, page_size, flags); +} + struct drm_i915_gem_object * i915_gem_object_create_lmem(struct drm_i915_private *i915, resource_size_t size, unsigned int flags) { return i915_gem_object_create_region(i915->mm.regions[INTEL_REGION_LMEM], - size, flags); + size, 0, flags); } diff --git a/drivers/gpu/drm/i915/gem/i915_gem_lmem.h b/drivers/gpu/drm/i915/gem/i915_gem_lmem.h index ea76fd11ccb0..e98608cebbbc 100644 --- a/drivers/gpu/drm/i915/gem/i915_gem_lmem.h +++ b/drivers/gpu/drm/i915/gem/i915_gem_lmem.h @@ -21,6 +21,11 @@ i915_gem_object_lmem_io_map(struct drm_i915_gem_object *obj, bool i915_gem_object_is_lmem(struct drm_i915_gem_object *obj); +struct drm_i915_gem_object * +__i915_gem_object_create_lmem_with_ps(struct drm_i915_private *i915, + resource_size_t size, + resource_size_t page_size, + unsigned int flags); struct drm_i915_gem_object * i915_gem_object_create_lmem(struct drm_i915_private *i915, resource_size_t size, diff --git a/drivers/gpu/drm/i915/gem/i915_gem_region.c b/drivers/gpu/drm/i915/gem/i915_gem_region.c index d1f1840540dd..b18182b46ee9 100644 --- a/drivers/gpu/drm/i915/gem/i915_gem_region.c +++ b/drivers/gpu/drm/i915/gem/i915_gem_region.c @@ -36,6 +36,7 @@ void i915_gem_object_release_memory_region(struct drm_i915_gem_object *obj) struct drm_i915_gem_object * i915_gem_object_create_region(struct intel_memory_region *mem, resource_size_t size, + resource_size_t page_size, unsigned int flags) { struct drm_i915_gem_object *obj; @@ -48,11 +49,16 @@ i915_gem_object_create_region(struct intel_memory_region *mem, */ GEM_BUG_ON(flags & ~I915_BO_ALLOC_FLAGS); + GEM_BUG_ON(!is_power_of_2_u64(page_size)); + GEM_BUG_ON(page_size < PAGE_SIZE); if (!mem) return ERR_PTR(-ENODEV); - size = round_up(size, mem->min_page_size); + if (!page_size) + page_size = mem->min_page_size; + + size = round_up(size, page_size); GEM_BUG_ON(!size); GEM_BUG_ON(!IS_ALIGNED(size, I915_GTT_MIN_ALIGNMENT)); @@ -64,7 +70,7 @@ i915_gem_object_create_region(struct intel_memory_region *mem, if (!obj) return ERR_PTR(-ENOMEM); - err = mem->ops->init_object(mem, obj, size, flags); + err = mem->ops->init_object(mem, obj, size, page_size, flags); if (err) goto err_object_free; diff --git a/drivers/gpu/drm/i915/gem/i915_gem_region.h b/drivers/gpu/drm/i915/gem/i915_gem_region.h index 84fcb3297400..1008e580a89a 100644 --- a/drivers/gpu/drm/i915/gem/i915_gem_region.h +++ b/drivers/gpu/drm/i915/gem/i915_gem_region.h @@ -19,6 +19,7 @@ void i915_gem_object_release_memory_region(struct drm_i915_gem_object *obj); struct drm_i915_gem_object * i915_gem_object_create_region(struct intel_memory_region *mem, resource_size_t size, + resource_size_t page_size, unsigned int flags); #endif diff --git a/drivers/gpu/drm/i915/gem/i915_gem_shmem.c b/drivers/gpu/drm/i915/gem/i915_gem_shmem.c index 5d16c4462fda..f5791611b9ca 100644 --- a/drivers/gpu/drm/i915/gem/i915_gem_shmem.c +++ b/drivers/gpu/drm/i915/gem/i915_gem_shmem.c @@ -489,6 +489,7 @@ static int __create_shmem(struct drm_i915_private *i915, static int shmem_object_init(struct intel_memory_region *mem, struct drm_i915_gem_object *obj, resource_size_t size, + resource_size_t page_size, unsigned int flags) { static struct lock_class_key lock_class; @@ -548,7 +549,7 @@ i915_gem_object_create_shmem(struct drm_i915_private *i915, resource_size_t size) { return i915_gem_object_create_region(i915->mm.regions[INTEL_REGION_SMEM], - size, 0); + size, 0, 0); } /* Allocate a new GEM object and fill it with the supplied data */ diff --git a/drivers/gpu/drm/i915/gem/i915_gem_stolen.c b/drivers/gpu/drm/i915/gem/i915_gem_stolen.c index b0c3a7dc60d1..90708de27684 100644 --- a/drivers/gpu/drm/i915/gem/i915_gem_stolen.c +++ b/drivers/gpu/drm/i915/gem/i915_gem_stolen.c @@ -670,6 +670,7 @@ static int __i915_gem_object_create_stolen(struct intel_memory_region *mem, static int _i915_gem_object_stolen_init(struct intel_memory_region *mem, struct drm_i915_gem_object *obj, resource_size_t size, + resource_size_t page_size, unsigned int flags) { struct drm_i915_private *i915 = mem->i915; @@ -708,7 +709,7 @@ struct drm_i915_gem_object * i915_gem_object_create_stolen(struct drm_i915_private *i915, resource_size_t size) { - return i915_gem_object_create_region(i915->mm.stolen_region, size, 0); + return i915_gem_object_create_region(i915->mm.stolen_region, size, 0, 0); } static int init_stolen_smem(struct intel_memory_region *mem) diff --git a/drivers/gpu/drm/i915/gem/i915_gem_ttm.c b/drivers/gpu/drm/i915/gem/i915_gem_ttm.c index 5d894bba6430..2024dd0c7c22 100644 --- a/drivers/gpu/drm/i915/gem/i915_gem_ttm.c +++ b/drivers/gpu/drm/i915/gem/i915_gem_ttm.c @@ -758,9 +758,6 @@ static u64 i915_gem_object_page_size(struct drm_i915_gem_object *obj) u64 page_size; int i; - if (!obj->mm.n_placements) - return obj->mm.region->min_page_size; - page_size = 0; for (i = 0; i < obj->mm.n_placements; i++) { struct intel_memory_region *mr = obj->mm.placements[i]; @@ -784,6 +781,7 @@ static u64 i915_gem_object_page_size(struct drm_i915_gem_object *obj) int __i915_gem_ttm_object_init(struct intel_memory_region *mem, struct drm_i915_gem_object *obj, resource_size_t size, + resource_size_t page_size, unsigned int flags) { static struct lock_class_key lock_class; @@ -802,6 +800,14 @@ int __i915_gem_ttm_object_init(struct intel_memory_region *mem, bo_type = (obj->flags & I915_BO_ALLOC_USER) ? ttm_bo_type_device : ttm_bo_type_kernel; + GEM_BUG_ON(!page_size); + + if (obj->mm.n_placements) { + /* Forcing the page size is kernel internal only */ + GEM_BUG_ON(page_size != mem->min_page_size); + page_size = i915_gem_object_page_size(obj); + } + /* * If this function fails, it will call the destructor, but * our caller still owns the object. So no freeing in the @@ -812,7 +818,7 @@ int __i915_gem_ttm_object_init(struct intel_memory_region *mem, obj->base.vma_node.driver_private = i915_gem_to_ttm(obj); ret = ttm_bo_init(&i915->bdev, i915_gem_to_ttm(obj), size, bo_type, &i915_sys_placement, - i915_gem_object_page_size(obj) >> PAGE_SHIFT, + page_size >> PAGE_SHIFT, true, NULL, NULL, i915_ttm_bo_destroy); if (!ret) obj->ttm.created = true; diff --git a/drivers/gpu/drm/i915/gem/i915_gem_ttm.h b/drivers/gpu/drm/i915/gem/i915_gem_ttm.h index b8d3dcbb50df..40927f67b6d9 100644 --- a/drivers/gpu/drm/i915/gem/i915_gem_ttm.h +++ b/drivers/gpu/drm/i915/gem/i915_gem_ttm.h @@ -44,5 +44,6 @@ i915_ttm_to_gem(struct ttm_buffer_object *bo) int __i915_gem_ttm_object_init(struct intel_memory_region *mem, struct drm_i915_gem_object *obj, resource_size_t size, + resource_size_t page_size, unsigned int flags); #endif diff --git a/drivers/gpu/drm/i915/gem/selftests/huge_pages.c b/drivers/gpu/drm/i915/gem/selftests/huge_pages.c index dadd485bc52f..9d17bff8b36d 100644 --- a/drivers/gpu/drm/i915/gem/selftests/huge_pages.c +++ b/drivers/gpu/drm/i915/gem/selftests/huge_pages.c @@ -497,7 +497,8 @@ static int igt_mock_memory_region_huge_pages(void *arg) int i; for (i = 0; i < ARRAY_SIZE(flags); ++i) { - obj = i915_gem_object_create_region(mem, page_size, + obj = i915_gem_object_create_region(mem, + page_size, page_size, flags[i]); if (IS_ERR(obj)) { err = PTR_ERR(obj); diff --git a/drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c b/drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c index 44b5de06ce64..7398b502738a 100644 --- a/drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c +++ b/drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c @@ -955,7 +955,7 @@ static int igt_mmap(void *arg) struct drm_i915_gem_object *obj; int err; - obj = i915_gem_object_create_region(mr, sizes[i], I915_BO_ALLOC_USER); + obj = i915_gem_object_create_region(mr, sizes[i], 0, I915_BO_ALLOC_USER); if (obj == ERR_PTR(-ENODEV)) continue; @@ -1075,7 +1075,7 @@ static int igt_mmap_access(void *arg) struct drm_i915_gem_object *obj; int err; - obj = i915_gem_object_create_region(mr, PAGE_SIZE, I915_BO_ALLOC_USER); + obj = i915_gem_object_create_region(mr, PAGE_SIZE, 0, I915_BO_ALLOC_USER); if (obj == ERR_PTR(-ENODEV)) continue; @@ -1220,7 +1220,7 @@ static int igt_mmap_gpu(void *arg) struct drm_i915_gem_object *obj; int err; - obj = i915_gem_object_create_region(mr, PAGE_SIZE, I915_BO_ALLOC_USER); + obj = i915_gem_object_create_region(mr, PAGE_SIZE, 0, I915_BO_ALLOC_USER); if (obj == ERR_PTR(-ENODEV)) continue; @@ -1375,7 +1375,7 @@ static int igt_mmap_revoke(void *arg) struct drm_i915_gem_object *obj; int err; - obj = i915_gem_object_create_region(mr, PAGE_SIZE, I915_BO_ALLOC_USER); + obj = i915_gem_object_create_region(mr, PAGE_SIZE, 0, I915_BO_ALLOC_USER); if (obj == ERR_PTR(-ENODEV)) continue; diff --git a/drivers/gpu/drm/i915/intel_memory_region.h b/drivers/gpu/drm/i915/intel_memory_region.h index 2be8433d373a..359cd8424b9a 100644 --- a/drivers/gpu/drm/i915/intel_memory_region.h +++ b/drivers/gpu/drm/i915/intel_memory_region.h @@ -55,6 +55,7 @@ struct intel_memory_region_ops { int (*init_object)(struct intel_memory_region *mem, struct drm_i915_gem_object *obj, resource_size_t size, + resource_size_t page_size, unsigned int flags); }; diff --git a/drivers/gpu/drm/i915/selftests/intel_memory_region.c b/drivers/gpu/drm/i915/selftests/intel_memory_region.c index ecc3b9e6c22b..1aaccb9841a0 100644 --- a/drivers/gpu/drm/i915/selftests/intel_memory_region.c +++ b/drivers/gpu/drm/i915/selftests/intel_memory_region.c @@ -68,7 +68,7 @@ static int igt_mock_fill(void *arg) resource_size_t size = page_num * page_size; struct drm_i915_gem_object *obj; - obj = i915_gem_object_create_region(mem, size, 0); + obj = i915_gem_object_create_region(mem, size, 0, 0); if (IS_ERR(obj)) { err = PTR_ERR(obj); break; @@ -110,7 +110,7 @@ igt_object_create(struct intel_memory_region *mem, struct drm_i915_gem_object *obj; int err; - obj = i915_gem_object_create_region(mem, size, flags); + obj = i915_gem_object_create_region(mem, size, 0, flags); if (IS_ERR(obj)) return obj; @@ -647,6 +647,62 @@ static int igt_lmem_create(void *arg) return err; } +static int igt_lmem_create_with_ps(void *arg) +{ + struct drm_i915_private *i915 = arg; + int err = 0; + u32 ps; + + for (ps = PAGE_SIZE; ps <= SZ_1G; ps <<= 1) { + struct drm_i915_gem_object *obj; + dma_addr_t daddr; + + obj = __i915_gem_object_create_lmem_with_ps(i915, ps, ps, 0); + if (IS_ERR(obj)) { + err = PTR_ERR(obj); + if (err == -ENXIO || err == -E2BIG) { + pr_info("%s not enough lmem for ps(%u) err=%d\n", + __func__, ps, err); + err = 0; + } + + break; + } + + if (obj->base.size != ps) { + pr_err("%s size(%zu) != ps(%u)\n", + __func__, obj->base.size, ps); + err = -EINVAL; + goto out_put; + } + + i915_gem_object_lock(obj, NULL); + err = i915_gem_object_pin_pages(obj); + if (err) + goto out_put; + + daddr = i915_gem_object_get_dma_address(obj, 0); + if (!IS_ALIGNED(daddr, ps)) { + pr_err("%s daddr(%pa) not aligned with ps(%u)\n", + __func__, &daddr, ps); + err = -EINVAL; + goto out_unpin; + } + +out_unpin: + i915_gem_object_unpin_pages(obj); + __i915_gem_object_put_pages(obj); +out_put: + i915_gem_object_unlock(obj); + i915_gem_object_put(obj); + + if (err) + break; + } + + return err; +} + static int igt_lmem_create_cleared_cpu(void *arg) { struct drm_i915_private *i915 = arg; @@ -932,7 +988,7 @@ create_region_for_mapping(struct intel_memory_region *mr, u64 size, u32 type, struct drm_i915_gem_object *obj; void *addr; - obj = i915_gem_object_create_region(mr, size, 0); + obj = i915_gem_object_create_region(mr, size, 0, 0); if (IS_ERR(obj)) { if (PTR_ERR(obj) == -ENOSPC) /* Stolen memory */ return ERR_PTR(-ENODEV); @@ -1149,6 +1205,7 @@ int intel_memory_region_live_selftests(struct drm_i915_private *i915) { static const struct i915_subtest tests[] = { SUBTEST(igt_lmem_create), + SUBTEST(igt_lmem_create_with_ps), SUBTEST(igt_lmem_create_cleared_cpu), SUBTEST(igt_lmem_write_cpu), SUBTEST(igt_lmem_write_gpu), diff --git a/drivers/gpu/drm/i915/selftests/mock_region.c b/drivers/gpu/drm/i915/selftests/mock_region.c index fa786dede608..efa86dffe3c6 100644 --- a/drivers/gpu/drm/i915/selftests/mock_region.c +++ b/drivers/gpu/drm/i915/selftests/mock_region.c @@ -63,6 +63,7 @@ static const struct drm_i915_gem_object_ops mock_region_obj_ops = { static int mock_object_init(struct intel_memory_region *mem, struct drm_i915_gem_object *obj, resource_size_t size, + resource_size_t page_size, unsigned int flags) { static struct lock_class_key lock_class; -- 2.26.3