From mboxrd@z Thu Jan 1 00:00:00 1970 From: Matthew Auld Subject: [PATCH 18/18] drm/i915: support transparent-huge-pages through shmemfs Date: Tue, 4 Apr 2017 23:11:28 +0100 Message-ID: <20170404221128.3943-19-matthew.auld@intel.com> References: <20170404221128.3943-1-matthew.auld@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by gabe.freedesktop.org (Postfix) with ESMTPS id 702306E705 for ; Tue, 4 Apr 2017 22:11:49 +0000 (UTC) In-Reply-To: <20170404221128.3943-1-matthew.auld@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org U2lnbmVkLW9mZi1ieTogTWF0dGhldyBBdWxkIDxtYXR0aGV3LmF1bGRAaW50ZWwuY29tPgotLS0K IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggfCAgIDMgKwogZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9nZW0uYyB8IDE4NyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKyst LS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3ZtYS5jIHwgICA4ICsrCiAzIGZpbGVz IGNoYW5nZWQsIDE2NiBpbnNlcnRpb25zKCspLCAzMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9kcnYuaAppbmRleCA4MzhjZTIyYTBhNDAuLjA3ZGQ0ZDI0YjkzZSAxMDA2NDQKLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2Rydi5oCkBAIC0yNjcyLDYgKzI2NzIsOSBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBz Y2F0dGVybGlzdCAqX19zZ19uZXh0KHN0cnVjdCBzY2F0dGVybGlzdCAqc2cpCiAgKiBAX19wcDoJ cGFnZSBwb2ludGVyIChvdXRwdXQpCiAgKiBAX19pdGVyOgknc3RydWN0IHNndF9pdGVyJyAoaXRl cmF0b3Igc3RhdGUsIGludGVybmFsKQogICogQF9fc2d0OglzZ190YWJsZSB0byBpdGVyYXRlIG92 ZXIgKGlucHV0KQorICoKKyAqIEJlIHdhcm5lZCwgaWYgd2UgdXNpbmcgaHVnZS1wYWdlcyBAX3Bw IGNvdWxkIGJlIGEgcGFydCBvZiBhIGNvbXBvdW5kIHBhZ2UsCisgKiBzbyBjYXJlIG11c3QgYmUg dGFrZW4uIFRvbyB0aG9ybnk/CiAgKi8KICNkZWZpbmUgZm9yX2VhY2hfc2d0X3BhZ2UoX19wcCwg X19pdGVyLCBfX3NndCkJCQkJXAogCWZvciAoKF9faXRlcikgPSBfX3NndF9pdGVyKChfX3NndCkt PnNnbCwgZmFsc2UpOwkJXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9n ZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKaW5kZXggNTM2MmY0ZDE4Njg5 Li4xZGRlMDE2NzZkMzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2Vt LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwpAQCAtMTcxLDcgKzE3MSw3 IEBAIGk5MTVfZ2VtX29iamVjdF9nZXRfcGFnZXNfcGh5cyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29i amVjdCAqb2JqKQogCXN0cnVjdCBzZ190YWJsZSAqc3Q7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpz ZzsKIAljaGFyICp2YWRkcjsKLQlpbnQgaTsKKwlpbnQgaSwgajsKIAogCWlmIChXQVJOX09OKGk5 MTVfZ2VtX29iamVjdF9uZWVkc19iaXQxN19zd2l6emxlKG9iaikpKQogCQlyZXR1cm4gRVJSX1BU UigtRUlOVkFMKTsKQEAgLTE4Nyw3ICsxODcsNyBAQCBpOTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2Vz X3BoeXMoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKIAkJcmV0dXJuIEVSUl9QVFIo LUVOT01FTSk7CiAKIAl2YWRkciA9IHBoeXMtPnZhZGRyOwotCWZvciAoaSA9IDA7IGkgPCBvYmot PmJhc2Uuc2l6ZSAvIFBBR0VfU0laRTsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IG9iai0+YmFz ZS5zaXplIC8gUEFHRV9TSVpFOyApIHsKIAkJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJCWNoYXIgKnNy YzsKIApAQCAtMTk3LDEzICsxOTcsMTUgQEAgaTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlc19waHlz KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCiAJCQlnb3RvIGVycl9waHlzOwogCQl9 CiAKLQkJc3JjID0ga21hcF9hdG9taWMocGFnZSk7Ci0JCW1lbWNweSh2YWRkciwgc3JjLCBQQUdF X1NJWkUpOwotCQlkcm1fY2xmbHVzaF92aXJ0X3JhbmdlKHZhZGRyLCBQQUdFX1NJWkUpOwotCQlr dW5tYXBfYXRvbWljKHNyYyk7CisJCWZvciAoaiA9IDA7IGogPCBocGFnZV9ucl9wYWdlcyhwYWdl KTsgKytqLCArK2kpIHsKKwkJCXNyYyA9IGttYXBfYXRvbWljKHBhZ2UgKyBqKTsKKwkJCW1lbWNw eSh2YWRkciwgc3JjLCBQQUdFX1NJWkUpOworCQkJZHJtX2NsZmx1c2hfdmlydF9yYW5nZSh2YWRk ciwgUEFHRV9TSVpFKTsKKwkJCWt1bm1hcF9hdG9taWMoc3JjKTsKKwkJCXZhZGRyICs9IFBBR0Vf U0laRTsKKwkJfQogCiAJCXB1dF9wYWdlKHBhZ2UpOwotCQl2YWRkciArPSBQQUdFX1NJWkU7CiAJ fQogCiAJaTkxNV9nZW1fY2hpcHNldF9mbHVzaCh0b19pOTE1KG9iai0+YmFzZS5kZXYpKTsKQEAg LTI2Myw5ICsyNjUsOSBAQCBpOTE1X2dlbV9vYmplY3RfcHV0X3BhZ2VzX3BoeXMoc3RydWN0IGRy bV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKIAlpZiAob2JqLT5tbS5kaXJ0eSkgewogCQlzdHJ1Y3Qg YWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IG9iai0+YmFzZS5maWxwLT5mX21hcHBpbmc7CiAJCWNo YXIgKnZhZGRyID0gb2JqLT5waHlzX2hhbmRsZS0+dmFkZHI7Ci0JCWludCBpOworCQlpbnQgaSwg ajsKIAotCQlmb3IgKGkgPSAwOyBpIDwgb2JqLT5iYXNlLnNpemUgLyBQQUdFX1NJWkU7IGkrKykg eworCQlmb3IgKGkgPSAwOyBpIDwgb2JqLT5iYXNlLnNpemUgLyBQQUdFX1NJWkU7ICkgewogCQkJ c3RydWN0IHBhZ2UgKnBhZ2U7CiAJCQljaGFyICpkc3Q7CiAKQEAgLTI3MywxNiArMjc1LDE4IEBA IGk5MTVfZ2VtX29iamVjdF9wdXRfcGFnZXNfcGh5cyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVj dCAqb2JqLAogCQkJaWYgKElTX0VSUihwYWdlKSkKIAkJCQljb250aW51ZTsKIAotCQkJZHN0ID0g a21hcF9hdG9taWMocGFnZSk7Ci0JCQlkcm1fY2xmbHVzaF92aXJ0X3JhbmdlKHZhZGRyLCBQQUdF X1NJWkUpOwotCQkJbWVtY3B5KGRzdCwgdmFkZHIsIFBBR0VfU0laRSk7Ci0JCQlrdW5tYXBfYXRv bWljKGRzdCk7CisJCQlmb3IgKGogPSAwOyBqIDwgaHBhZ2VfbnJfcGFnZXMocGFnZSk7ICsraiwg KytpKSB7CisJCQkJZHN0ID0ga21hcF9hdG9taWMocGFnZSArIGopOworCQkJCWRybV9jbGZsdXNo X3ZpcnRfcmFuZ2UodmFkZHIsIFBBR0VfU0laRSk7CisJCQkJbWVtY3B5KGRzdCwgdmFkZHIsIFBB R0VfU0laRSk7CisJCQkJa3VubWFwX2F0b21pYyhkc3QpOworCQkJCXZhZGRyICs9IFBBR0VfU0la RTsKKwkJCX0KIAogCQkJc2V0X3BhZ2VfZGlydHkocGFnZSk7CiAJCQlpZiAob2JqLT5tbS5tYWR2 ID09IEk5MTVfTUFEVl9XSUxMTkVFRCkKIAkJCQltYXJrX3BhZ2VfYWNjZXNzZWQocGFnZSk7CiAJ CQlwdXRfcGFnZShwYWdlKTsKLQkJCXZhZGRyICs9IFBBR0VfU0laRTsKIAkJfQogCQlvYmotPm1t LmRpcnR5ID0gZmFsc2U7CiAJfQpAQCAtMjE3OSw2ICsyMTgzLDggQEAgaTkxNV9nZW1fb2JqZWN0 X3B1dF9wYWdlc19ndHQoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKIAkJaTkxNV9n ZW1fb2JqZWN0X3NhdmVfYml0XzE3X3N3aXp6bGUob2JqLCBwYWdlcyk7CiAKIAlmb3JfZWFjaF9z Z3RfcGFnZShwYWdlLCBzZ3RfaXRlciwgcGFnZXMpIHsKKwkJaWYgKFBhZ2VUYWlsKHBhZ2UpKQor CQkJY29udGludWU7CiAJCWlmIChvYmotPm1tLmRpcnR5KQogCQkJc2V0X3BhZ2VfZGlydHkocGFn ZSk7CiAKQEAgLTIyNzIsNiArMjI3OCwxNSBAQCBzdGF0aWMgYm9vbCBpOTE1X3NnX3RyaW0oc3Ry dWN0IHNnX3RhYmxlICpvcmlnX3N0KQogCXJldHVybiB0cnVlOwogfQogCitzdGF0aWMgaW5saW5l IHVuc2lnbmVkIGludCBpOTE1X3NobWVtX3BhZ2Vfc2l6ZShzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sK KyNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRV9QQUdFQ0FDSEUKKwlyZXR1cm4gUGFnZVRy YW5zSHVnZShwYWdlKSA/IEhQQUdFX1BNRF9TSVpFIDogUEFHRV9TSVpFOworI2Vsc2UKKwlyZXR1 cm4gUEFHRV9TSVpFOworI2VuZGlmCit9CisKIHN0YXRpYyBzdHJ1Y3Qgc2dfdGFibGUgKgogaTkx NV9nZW1fb2JqZWN0X2dldF9wYWdlc19ndHQoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9i aikKIHsKQEAgLTIyODcsNiArMjMwMiwxNCBAQCBpOTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2VzX2d0 dChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQogCXVuc2lnbmVkIGludCBtYXhfc2Vn bWVudDsKIAlpbnQgcmV0OwogCWdmcF90IGdmcDsKKwljb25zdCB1bnNpZ25lZCBpbnQgZ3R0X3Bh Z2Vfc2l6ZXNbXSA9IHsKKwkJSTkxNV9HVFRfUEFHRV9TSVpFXzFHLAorCQlJOTE1X0dUVF9QQUdF X1NJWkVfMk0sCisJCUk5MTVfR1RUX1BBR0VfU0laRV82NEssCisJCUk5MTVfR1RUX1BBR0VfU0la RV80SywKKwl9OworCXVuc2lnbmVkIGludCBwYWdlX3NpemU7CisJaW50IGo7CiAKIAkvKiBBc3Nl cnQgdGhhdCB0aGUgb2JqZWN0IGlzIG5vdCBjdXJyZW50bHkgaW4gYW55IEdQVSBkb21haW4uIEFz IGl0CiAJICogd2Fzbid0IGluIHRoZSBHVFQsIHRoZXJlIHNob3VsZG4ndCBiZSBhbnkgd2F5IGl0 IGNvdWxkIGhhdmUgYmVlbiBpbgpAQCAtMjI5OSw2ICsyMzIyLDI1IEBAIGk5MTVfZ2VtX29iamVj dF9nZXRfcGFnZXNfZ3R0KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCiAJaWYgKCFt YXhfc2VnbWVudCkKIAkJbWF4X3NlZ21lbnQgPSByb3VuZGRvd24oVUlOVF9NQVgsIFBBR0VfU0la RSk7CiAKKwkvKiBtYXhfc2VnbWVudCBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgY29udGludW91 cyBQQUdFX1NJWkUgcGFnZXMgd2UKKwkgKiBjYW4gaGF2ZSBpbiB0aGUgYm91bmNlIGJ1ZmZlciwg YXNzdW1pbmcgc3dpb3RsYi4gU28gb3B0aW1pc3RpY2FsbHkKKwkgKiBzZWxlY3QgdGhlIGxhcmdl c3Qgc3VwcG9ydGVkIGd0dCBwYWdlIHNpemUgd2hpY2ggY2FuIGZpdCBpbnRvIHRoZQorCSAqIG1h eF9zZWdtZW50LiBBbHNvIHRha2UgY2FyZSB0byBwcm9wZXJseSBhbGlnbiB0aGUgbWF4X3NlZ21l bnQgdG8KKwkgKiBzYWlkIHBhZ2Ugc2l6ZSB0byBhdm9pZCBhbnkgaHVnZSBwYWdlcyBzcGlsbGlu ZyBhY3Jvc3Mgc2cgZW50cmllcy4KKwkgKi8KKwlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShn dHRfcGFnZV9zaXplcyk7ICsraikgeworCQl1bnNpZ25lZCBpbnQgcGFnZV9zaXplID0gZ3R0X3Bh Z2Vfc2l6ZXNbal07CisJCXVuc2lnbmVkIGludCBucl9wYWdlcyA9IHBhZ2Vfc2l6ZSA+PiBQQUdF X1NISUZUOworCisJCWlmIChTVVBQT1JUU19QQUdFX1NJWkUoZGV2X3ByaXYsIHBhZ2Vfc2l6ZSkg JiYKKwkJICAgIHBhZ2Vfc2l6ZSA8PSBvYmotPnBhZ2Vfc2l6ZSAmJgorCQkgICAgbnJfcGFnZXMg PD0gbWF4X3NlZ21lbnQpIHsKKwkJCW1heF9zZWdtZW50ID0gcm91bmRkb3duKG1heF9zZWdtZW50 LCBucl9wYWdlcyk7CisJCQlvYmotPmd0dF9wYWdlX3NpemUgPSBwYWdlX3NpemU7CisJCQlicmVh azsKKwkJfQorCX0KKwogCXN0ID0ga21hbGxvYyhzaXplb2YoKnN0KSwgR0ZQX0tFUk5FTCk7CiAJ aWYgKHN0ID09IE5VTEwpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwpAQCAtMjMwOSw2ICsy MzUxLDkgQEAgaTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlc19ndHQoc3RydWN0IGRybV9pOTE1X2dl bV9vYmplY3QgKm9iaikKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAJfQogCisJR0VNX0JV R19PTighU1VQUE9SVFNfUEFHRV9TSVpFKGRldl9wcml2LCBvYmotPmd0dF9wYWdlX3NpemUpKTsK KwlHRU1fQlVHX09OKCFJU19BTElHTkVEKG1heF9zZWdtZW50IDw8IFBBR0VfU0hJRlQsIG9iai0+ Z3R0X3BhZ2Vfc2l6ZSkpOworCiAJLyogR2V0IHRoZSBsaXN0IG9mIHBhZ2VzIG91dCBvZiBvdXIg c3RydWN0IGZpbGUuICBUaGV5J2xsIGJlIHBpbm5lZAogCSAqIGF0IHRoaXMgcG9pbnQgdW50aWwg d2UgcmVsZWFzZSB0aGVtLgogCSAqCkBAIC0yMzE5LDcgKzIzNjQsNyBAQCBpOTE1X2dlbV9vYmpl Y3RfZ2V0X3BhZ2VzX2d0dChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQogCWdmcCB8 PSBfX0dGUF9OT1JFVFJZIHwgX19HRlBfTk9XQVJOOwogCXNnID0gc3QtPnNnbDsKIAlzdC0+bmVu dHMgPSAwOwotCWZvciAoaSA9IDA7IGkgPCBwYWdlX2NvdW50OyBpKyspIHsKKwlmb3IgKGkgPSAw OyBpIDwgcGFnZV9jb3VudDsgaSArPSBocGFnZV9ucl9wYWdlcyhwYWdlKSkgewogCQlwYWdlID0g c2htZW1fcmVhZF9tYXBwaW5nX3BhZ2VfZ2ZwKG1hcHBpbmcsIGksIGdmcCk7CiAJCWlmICh1bmxp a2VseShJU19FUlIocGFnZSkpKSB7CiAJCQlpOTE1X2dlbV9zaHJpbmsoZGV2X3ByaXYsCkBAIC0y MzQ5LDE3ICsyMzk0LDM2IEBAIGk5MTVfZ2VtX29iamVjdF9nZXRfcGFnZXNfZ3R0KHN0cnVjdCBk cm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCiAJCQkJZ290byBlcnJfc2c7CiAJCQl9CiAJCX0KKwor CQkvKiBJZiB3ZSBkb24ndCBlbm91Z2ggaHVnZSBwYWdlcyBpbiB0aGUgcG9vbCwgZmFsbCBiYWNr IHRvIHRoZQorCQkgKiBtaW5pbXVtIHBhZ2Ugc2l6ZS4gV2UgY2FuIHN0aWxsIGFsbG9jYXRlIGh1 Z2UtcGFnZXMgYnV0IG5vdworCQkgKiBvYmotPnBhZ2Vfc2l6ZSBhbmQgb2JqLT5ndHRfcGFnZV9z aXplIHdpbGwgcmVmbGVjdCB0aGUKKwkJICogbWluaW11bSBwYWdlIHNpemUgaW4gdGhlIG1hcHBp bmcuCisJCSAqLworCQlwYWdlX3NpemUgPSBpOTE1X3NobWVtX3BhZ2Vfc2l6ZShwYWdlKTsKKwkJ aWYgKHBhZ2Vfc2l6ZSA8IG9iai0+cGFnZV9zaXplKSB7CisJCQlvYmotPnBhZ2Vfc2l6ZSA9IFBB R0VfU0laRTsKKwkJCW9iai0+Z3R0X3BhZ2Vfc2l6ZSA9IEk5MTVfR1RUX1BBR0VfU0laRTsKKwkJ fQorCisJCS8qIFRPRE86IGlmIHdlIGRvbid0IHVzZSBodWdlLXBhZ2VzIG9yIHRoZSBvYmplY3Qg aXMgc21hbGwKKwkJICogd2UgY2FuIHByb2JhYmx5IGRvIHNvbWV0aGluZyBjbGV2ZXIgd2l0aCBj b250aW5pb3VzIHBhZ2VzCisJCSAqIGhlcmUsIGlmIHdlIGhhdmUgZW5vdWdoIG9mIHRoZW0gYW5k IHRoZXkgZml0IG5pY2VseSBpbnRvIGEKKwkJICogZ3R0IHBhZ2Ugc2l6ZSBhbmQgbWF4X3NlZ21l bnQuIEltYWdpbmUgYSA2NEsgb2JqZWN0LCBhbmQgd2UKKwkJICogZ2V0IDE2IGNvbnRpbnVvdXMg NEsgcGFnZXMsIHdlIGNvdWxkIGdldCBhd2F5IHdpdGggYSBzaW5nbGUKKwkJICogNjRLIHB0ZS4K KwkJICovCiAJCWlmICghaSB8fAogCQkgICAgc2ctPmxlbmd0aCA+PSBtYXhfc2VnbWVudCB8fAog CQkgICAgcGFnZV90b19wZm4ocGFnZSkgIT0gbGFzdF9wZm4gKyAxKSB7CiAJCQlpZiAoaSkKIAkJ CQlzZyA9IHNnX25leHQoc2cpOwogCQkJc3QtPm5lbnRzKys7Ci0JCQlzZ19zZXRfcGFnZShzZywg cGFnZSwgUEFHRV9TSVpFLCAwKTsKKwkJCXNnX3NldF9wYWdlKHNnLCBwYWdlLCBwYWdlX3NpemUs IDApOwogCQl9IGVsc2UgewotCQkJc2ctPmxlbmd0aCArPSBQQUdFX1NJWkU7CisJCQlzZy0+bGVu Z3RoICs9IHBhZ2Vfc2l6ZTsKIAkJfQotCQlsYXN0X3BmbiA9IHBhZ2VfdG9fcGZuKHBhZ2UpOwor CQlsYXN0X3BmbiA9IHBhZ2VfdG9fcGZuKHBhZ2UpICsgaHBhZ2VfbnJfcGFnZXMocGFnZSkgLSAx OwogCiAJCS8qIENoZWNrIHRoYXQgdGhlIGk5NjVnL2dtIHdvcmthcm91bmQgd29ya3MuICovCiAJ CVdBUk5fT04oKGdmcCAmIF9fR0ZQX0RNQTMyKSAmJiAobGFzdF9wZm4gPj0gMHgwMDEwMDAwMFVM KSk7CkBAIC0yMzcyLDI1ICsyNDM2LDQzIEBAIGk5MTVfZ2VtX29iamVjdF9nZXRfcGFnZXNfZ3R0 KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCiAKIAlyZXQgPSBpOTE1X2dlbV9ndHRf cHJlcGFyZV9wYWdlcyhvYmosIHN0KTsKIAlpZiAocmV0KSB7Ci0JCS8qIERNQSByZW1hcHBpbmcg ZmFpbGVkPyBPbmUgcG9zc2libGUgY2F1c2UgaXMgdGhhdAotCQkgKiBpdCBjb3VsZCBub3QgcmVz ZXJ2ZSBlbm91Z2ggbGFyZ2UgZW50cmllcywgYXNraW5nCi0JCSAqIGZvciBQQUdFX1NJWkUgY2h1 bmtzIGluc3RlYWQgbWF5IGJlIGhlbHBmdWwuCi0JCSAqLwotCQlpZiAobWF4X3NlZ21lbnQgPiBQ QUdFX1NJWkUpIHsKLQkJCWZvcl9lYWNoX3NndF9wYWdlKHBhZ2UsIHNndF9pdGVyLCBzdCkKLQkJ CQlwdXRfcGFnZShwYWdlKTsKLQkJCXNnX2ZyZWVfdGFibGUoc3QpOwotCi0JCQltYXhfc2VnbWVu dCA9IFBBR0VfU0laRTsKLQkJCWdvdG8gcmVidWlsZF9zdDsKLQkJfSBlbHNlIHsKKwkJaWYgKG1h eF9zZWdtZW50ID09IFBBR0VfU0laRSkgewogCQkJZGV2X3dhcm4oJmRldl9wcml2LT5kcm0ucGRl di0+ZGV2LAogCQkJCSAiRmFpbGVkIHRvIERNQSByZW1hcCAlbHUgcGFnZXNcbiIsCiAJCQkJIHBh Z2VfY291bnQpOwogCQkJZ290byBlcnJfcGFnZXM7CiAJCX0KKworCQlmb3JfZWFjaF9zZ3RfcGFn ZShwYWdlLCBzZ3RfaXRlciwgc3QpIHsKKwkJCWlmICghUGFnZVRhaWwocGFnZSkpCisJCQkJcHV0 X3BhZ2UocGFnZSk7CisJCX0KKwkJc2dfZnJlZV90YWJsZShzdCk7CisKKwkJLyogRE1BIHJlbWFw cGluZyBmYWlsZWQ/IE9uZSBwb3NzaWJsZSBjYXVzZSBpcyB0aGF0CisJCSAqIGl0IGNvdWxkIG5v dCByZXNlcnZlIGVub3VnaCBsYXJnZSBlbnRyaWVzLCB0cnlpbmcKKwkJICogc21hbGxlciBwYWdl IHNpemUgY2h1bmtzIGluc3RlYWQgbWF5IGJlIGhlbHBmdWwuCisJCSAqCisJCSAqIFdlIHJlYWxs eSBkb24ndCBrbm93IHdoYXQgdGhlIG1heF9zZWdtZW50IHNob3VsZCBiZSwKKwkJICoganVzdCBn byB3aXRoIHRoZSBzaW1wbGUgcHJlbWlzZSB0aGF0IHRoZSBuZXh0CisJCSAqIHNtYWxsZXN0IHNl Z21lbnQgd2lsbCBiZSBhdCBsZWFzdCBoYWxmIHRoZSBzaXplIG9mCisJCSAqIHRoZSBwcmV2aW91 cy4KKwkJICovCisJCWZvciAoOyBqIDwgQVJSQVlfU0laRShndHRfcGFnZV9zaXplcyk7ICsraikg eworCQkJdW5zaWduZWQgaW50IHBhZ2Vfc2l6ZSA9IGd0dF9wYWdlX3NpemVzW2pdOworCisJCQlp ZiAoU1VQUE9SVFNfUEFHRV9TSVpFKGRldl9wcml2LCBwYWdlX3NpemUpICYmCisJCQkgICAgcGFn ZV9zaXplIDwgbWF4X3NlZ21lbnQpIHsKKwkJCQlvYmotPmd0dF9wYWdlX3NpemUgPSBtYXhfc2Vn bWVudCA9IHBhZ2Vfc2l6ZTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWdvdG8gcmVidWls ZF9zdDsKIAl9CiAKKwlHRU1fQlVHX09OKG9iai0+Z3R0X3BhZ2Vfc2l6ZSA+IG9iai0+cGFnZV9z aXplKTsKKwogCWlmIChpOTE1X2dlbV9vYmplY3RfbmVlZHNfYml0MTdfc3dpenpsZShvYmopKQog CQlpOTE1X2dlbV9vYmplY3RfZG9fYml0XzE3X3N3aXp6bGUob2JqLCBzdCk7CiAKQEAgLTIzOTks OCArMjQ4MSwxMCBAQCBpOTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2VzX2d0dChzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX29iamVjdCAqb2JqKQogZXJyX3NnOgogCXNnX21hcmtfZW5kKHNnKTsKIGVycl9wYWdl czoKLQlmb3JfZWFjaF9zZ3RfcGFnZShwYWdlLCBzZ3RfaXRlciwgc3QpCi0JCXB1dF9wYWdlKHBh Z2UpOworCWZvcl9lYWNoX3NndF9wYWdlKHBhZ2UsIHNndF9pdGVyLCBzdCkgeworCQlpZiAoIVBh Z2VUYWlsKHBhZ2UpKQorCQkJcHV0X3BhZ2UocGFnZSk7CisJfQogCXNnX2ZyZWVfdGFibGUoc3Qp OwogCWtmcmVlKHN0KTsKIApAQCAtNDE5MiwxMCArNDI3NiwzNiBAQCBzdHJ1Y3QgZHJtX2k5MTVf Z2VtX29iamVjdCAqCiBpOTE1X2dlbV9vYmplY3RfY3JlYXRlKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiwgdTY0IHNpemUpCiB7CiAJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Qg Km9iajsKKwl1bnNpZ25lZCBpbnQgcGFnZV9zaXplID0gUEFHRV9TSVpFOwogCXN0cnVjdCBhZGRy ZXNzX3NwYWNlICptYXBwaW5nOwogCWdmcF90IG1hc2s7CiAJaW50IHJldDsKIAorCS8qIElmIGNv bmZpZ3VyZWQgKmF0dGVtcHQqIHRvIHVzZSBUSFAgdGhyb3VnaCBzaG1lbWZzLiBIUEFHRV9QTURf U0laRQorCSAqIHdpbGwgZWl0aGVyIGJlIDJNIG9yIDFHIGRlcGVuZGluZyBvbiB0aGUgZGVmYXVs dCBodWdlcGFnZV9zei4gVGhpcworCSAqIGlzIGJlc3QgZWZmb3J0IGFuZCB3aWxsIG9mIGNvdXJz ZSBkZXBlbmQgb24gaG93IG1hbnkgaHVnZS1wYWdlcyB3ZQorCSAqIGhhdmUgYXZhaWxhYmxlIGlu IHRoZSBwb29sLiBXZSBkZXRlcm1pbmUgdGhlIGd0dCBwYWdlIHNpemUgd2hlbiB3ZQorCSAqIGFj dHVhbGx5IHRyeSBwaW5uaW5nIHRoZSBiYWNraW5nIHN0b3JhZ2UsIHdoZXJlIGd0dF9wYWdlX3Np emUgPD0KKwkgKiBwYWdlX3NpemUuCisJICoKKwkgKiBYWFggU29tZSBtdXNpbmdzOgorCSAqCisJ ICogLSBXZSBkb24ndCBrbm93IGlmIHRoZSBvYmplY3Qgd2lsbCBiZSBpbnNlcnRlZCBpbnRvIHRo ZSBwcGd0dCB3aGVyZQorCSAqICAgaXQgd2lsbCBiZSBtb3N0IGJlbmlmaWNpYWwgdG8gaGF2ZSBo dWdlLXBhZ2VzLCBvciB0aGUgZ2d0dCB3aGVyZQorCSAqICAgdGhlIG9iamVjdCB3aWxsIGFsd2F5 cyBiZSB0cmVhdGVkIGxpa2UgYSA0SyBvYmplY3QuCisJICoKKwkgKiAtIFNpbWlsYXJseSBzaG91 bGQgd2UgY2FyZSBpZiB0aGUgZ3R0IGRvZXNuJ3Qgc3VwcG9ydCBwYWdlcyBzaXplcyA+CisJICog ICA0Sz8gSWYgaXQgZG9lcyB0aGVuIGdyZWF0LCBpZiBpdCBkb2Vzbid0IHRoZW4gd2UgZG8gYXQg bGVhc3Qgc2VlCisJICogICB0aGUgYmVuZWZpdCBvZiByZWR1Y2VkIGZyYWdtZW50YXRpb24sIHNv IGl0J3Mgbm90IGEgY29tcGxldGUKKwkgKiAgIHdhc3RlLi4udGhvdWdodHM/CisJICovCisjaWZk ZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VfUEFHRUNBQ0hFCisJaWYgKGhhc190cmFuc3BhcmVu dF9odWdlcGFnZSgpICYmIHNpemUgPj0gSFBBR0VfUE1EX1NJWkUpIHsKKwkJcGFnZV9zaXplID0g SFBBR0VfUE1EX1NJWkU7CisJCXNpemUgPSByb3VuZF91cChzaXplLCBwYWdlX3NpemUpOworCX0K KyNlbmRpZgorCiAJLyogVGhlcmUgaXMgYSBwcmV2YWxlbmNlIG9mIHRoZSBhc3N1bXB0aW9uIHRo YXQgd2UgZml0IHRoZSBvYmplY3QncwogCSAqIHBhZ2UgY291bnQgaW5zaWRlIGEgMzJiaXQgX3Np Z25lZF8gdmFyaWFibGUuIExldCdzIGRvY3VtZW50IHRoaXMgYW5kCiAJICogY2F0Y2ggaWYgd2Ug ZXZlciBuZWVkIHRvIGZpeCBpdC4gSW4gdGhlIG1lYW50aW1lLCBpZiB5b3UgZG8gc3BvdApAQCAt NDIyNyw2ICs0MzM3LDE5IEBAIGk5MTVfZ2VtX29iamVjdF9jcmVhdGUoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2LCB1NjQgc2l6ZSkKIAogCWk5MTVfZ2VtX29iamVjdF9pbml0KG9i aiwgJmk5MTVfZ2VtX29iamVjdF9vcHMpOwogCisJLyogSW4gYSBmZXcgcGxhY2VzIHdlIGludGVy YWN0IHdpdGggc2htZW1mcyBpbXBsaWNpdGx5IGJ5IHdyaXRpbmcKKwkgKiB0aHJvdWdoIHRoZSBw YWdlX2NhY2hlIHByaW9yIHRvIHBpbm5pbmcgdGhlIGJhY2tpbmcgc3RvcmFnZSwgdGhpcworCSAq IGlzIGZvciBvcHRpbWlzYXRpb24gcmVhc29ucyBhbmQgcHJldmVudHMgc2htZW1mcyBmcm9tIG5l ZWRsZXNzbHkKKwkgKiBjbGVhcmluZyBwYWdlcy4gU28gaW4gb3JkZXIgdG8gY29udHJvbCB0aGUg dXNlIG9mIGh1Z2UtcGFnZXMsIGZyb20KKwkgKiBib3RoIHRoZSBwaW5uaW5nIG9mIHRoZSBiYWNr aW5nIHN0b3JlIGFuZCBhbnkgaW1wbGljaXQgaW50ZXJhY3Rpb24KKwkgKiB3aGljaCBtYXkgZW5k IHVwIGFsbG9jYXRpbmcgcGFnZXMgd2UgcmVxdWlyZSBtb3JlIHRoYW4gdGhlIHByb3ZpZGVkCisJ ICogcmVhZF9tYXBwaW5nIG9yIGdldHBhZ2UgaW50ZXJmYWNlcyBwcm92aWRlZCBieSBzaG1lbS4g VGhpcyBzaG91bGQKKwkgKiBlZmZlY3RpdmVseSBkZWZhdWx0IHRvIGh1Z2UtcGFnZSBhbGxvY2F0 aW9ucyBpbiBzaG1lbSBmb3IgdGhpcworCSAqIG1hcHBpbmcuCisJICovCisJU0hNRU1fSShtYXBw aW5nLT5ob3N0KS0+aHVnZSA9IHBhZ2Vfc2l6ZSA+IFBBR0VfU0laRTsKKwlvYmotPnBhZ2Vfc2l6 ZSA9IHBhZ2Vfc2l6ZTsKKwogCW9iai0+YmFzZS53cml0ZV9kb21haW4gPSBJOTE1X0dFTV9ET01B SU5fQ1BVOwogCW9iai0+YmFzZS5yZWFkX2RvbWFpbnMgPSBJOTE1X0dFTV9ET01BSU5fQ1BVOwog CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3ZtYS5jIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV92bWEuYwppbmRleCA0MDQzMTQ1YjQzMTAuLmFmMjk1YWEzYjQ5YyAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV92bWEuYworKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X3ZtYS5jCkBAIC00NjksNiArNDY5LDE0IEBAIGk5MTVfdm1hX2lu c2VydChzdHJ1Y3QgaTkxNV92bWEgKnZtYSwgdTY0IHNpemUsIHU2NCBhbGlnbm1lbnQsIHU2NCBm bGFncykKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCisJLyogV2UgZG9uJ3Qga25vdyB0aGUg ZmluYWwgZ3R0IHBhZ2Ugc2l6ZSB1bnRpbCAqYWZ0ZXIqIHdlIHBpbiB0aGUKKwkgKiBiYWNraW5n IHN0b3JlLCBvciB0aGF0J3MgYXQgbGVhc3QgdGhlIGNhc2UgZm9yIHRoZSBzaG1lbSBiYWNrZW5k LgorCSAqIFRoZXJlZm9yZSByZS1hZGp1c3QgdGhlIGFsaWdubWVudCBpZiBuZWVkZWQuIFRoaXMg aXMgb25seSByZWxldmFudAorCSAqIGZvciBodWdlLXBhZ2VzIGJlaW5nIGluc2VydGVkIGludG8g dGhlIHBwZ3R0LgorCSAqLworCWlmICghaTkxNV9pc19nZ3R0KHZtYS0+dm0pICYmIGFsaWdubWVu dCA8IG9iai0+Z3R0X3BhZ2Vfc2l6ZSkKKwkJYWxpZ25tZW50ID0gb2JqLT5ndHRfcGFnZV9zaXpl OworCiAJaWYgKGk5MTVfdm1faGFzX2NhY2hlX2NvbG9yaW5nKHZtYS0+dm0pKQogCQljb2xvciA9 IG9iai0+Y2FjaGVfbGV2ZWw7CiAJZWxzZSBpZiAoaTkxNV92bV9oYXNfcGFnZV9jb2xvcmluZyh2 bWEtPnZtKSkKLS0gCjIuOS4zCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVz a3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9p bnRlbC1nZngK