From mboxrd@z Thu Jan 1 00:00:00 1970 From: Matthew Auld Subject: [PATCH 04/22] drm/i915/region: support continuous allocations Date: Fri, 27 Sep 2019 18:33:51 +0100 Message-ID: <20190927173409.31175-5-matthew.auld@intel.com> References: <20190927173409.31175-1-matthew.auld@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTPS id 316526E170 for ; Fri, 27 Sep 2019 17:34:18 +0000 (UTC) In-Reply-To: <20190927173409.31175-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 Cc: daniel.vetter@ffwll.ch List-Id: intel-gfx@lists.freedesktop.org U29tZSBrZXJuZWwgaW50ZXJuYWwgb2JqZWN0cyBtYXkgbmVlZCB0byBiZSBhbGxvY2F0ZWQgYXMg YSBjb250aW51b3VzCmJsb2NrLCBhbHNvIHRoaW5raW5nIGFoZWFkIHRoZSB2YXJpb3VzIGtlcm5l bCBpb19tYXBwaW5nIGludGVyZmFjZXMgc2VlbQp0byBleHBlY3QgaXQsIGFsdGhvdWdoIHRoaXMg aXMgcHVyZWx5IGEgbGltaXRhdGlvbiBpbiB0aGUga2VybmVsCkFQSS4uLnNvIHBlcmhhcHMgc29t ZXRoaW5nIHRvIGJlIGltcHJvdmVkLgoKU2lnbmVkLW9mZi1ieTogTWF0dGhldyBBdWxkIDxtYXR0 aGV3LmF1bGRAaW50ZWwuY29tPgpDYzogSm9vbmFzIExhaHRpbmVuIDxqb29uYXMubGFodGluZW5A bGludXguaW50ZWwuY29tPgpDYzogQWJkaWVsIEphbnVsZ3VlIDxhYmRpZWwuamFudWxndWVAbGlu dXguaW50ZWwuY29tPgotLS0KIC4uLi9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdF90 eXBlcy5oICB8ICAgNCArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcmVnaW9u LmMgICAgfCAgMTUgKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9yZWdpb24u aCAgICB8ICAgMyArLQogLi4uL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2h1Z2VfcGFnZXMu YyAgIHwgICAzICstCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9tZW1vcnlfcmVnaW9uLmMg ICAgfCAgMTMgKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX21lbW9yeV9yZWdpb24uaCAg ICB8ICAgMyArLQogLi4uL2RybS9pOTE1L3NlbGZ0ZXN0cy9pbnRlbF9tZW1vcnlfcmVnaW9uLmMg IHwgMTYzICsrKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3Rz L21vY2tfcmVnaW9uLmMgIHwgICAyICstCiA4IGZpbGVzIGNoYW5nZWQsIDE5NyBpbnNlcnRpb25z KCspLCA5IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dl bS9pOTE1X2dlbV9vYmplY3RfdHlwZXMuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1 X2dlbV9vYmplY3RfdHlwZXMuaAppbmRleCBkMzZjODYwYzljNmYuLjdhY2QzODNmMTc0ZiAxMDA2 NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdF90eXBlcy5o CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3RfdHlwZXMuaApA QCAtMTE3LDYgKzExNywxMCBAQCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCB7CiAKIAlJOTE1 X1NFTEZURVNUX0RFQ0xBUkUoc3RydWN0IGxpc3RfaGVhZCBzdF9saW5rKTsKIAorCXVuc2lnbmVk IGxvbmcgZmxhZ3M7CisjZGVmaW5lIEk5MTVfQk9fQUxMT0NfQ09OVElHVU9VUyBCSVQoMCkKKyNk ZWZpbmUgSTkxNV9CT19BTExPQ19GTEFHUyAoSTkxNV9CT19BTExPQ19DT05USUdVT1VTKQorCiAJ LyoKIAkgKiBJcyB0aGUgb2JqZWN0IHRvIGJlIG1hcHBlZCBhcyByZWFkLW9ubHkgdG8gdGhlIEdQ VQogCSAqIE9ubHkgaG9ub3VyZWQgaWYgaGFyZHdhcmUgaGFzIHJlbGV2YW50IHB0ZSBiaXQKZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9yZWdpb24uYyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9yZWdpb24uYwppbmRleCA1YzNiZmMxMjE5 MjEuLmIzMTdhNWM4NDE0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5 MTVfZ2VtX3JlZ2lvbi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9y ZWdpb24uYwpAQCAtMjMsMTAgKzIzLDEwIEBAIGk5MTVfZ2VtX29iamVjdF9nZXRfcGFnZXNfYnVk ZHkoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKIHsKIAlzdHJ1Y3QgaW50ZWxfbWVt b3J5X3JlZ2lvbiAqbWVtID0gb2JqLT5tbS5yZWdpb247CiAJc3RydWN0IGxpc3RfaGVhZCAqYmxv Y2tzID0gJm9iai0+bW0uYmxvY2tzOwotCXVuc2lnbmVkIGludCBmbGFncyA9IEk5MTVfQUxMT0Nf TUlOX1BBR0VfU0laRTsKIAlyZXNvdXJjZV9zaXplX3Qgc2l6ZSA9IG9iai0+YmFzZS5zaXplOwog CXJlc291cmNlX3NpemVfdCBwcmV2X2VuZDsKIAlzdHJ1Y3QgaTkxNV9idWRkeV9ibG9jayAqYmxv Y2s7CisJdW5zaWduZWQgaW50IGZsYWdzOwogCXN0cnVjdCBzZ190YWJsZSAqc3Q7CiAJc3RydWN0 IHNjYXR0ZXJsaXN0ICpzZzsKIAl1bnNpZ25lZCBpbnQgc2dfcGFnZV9zaXplczsKQEAgLTQyLDYg KzQyLDEwIEBAIGk5MTVfZ2VtX29iamVjdF9nZXRfcGFnZXNfYnVkZHkoc3RydWN0IGRybV9pOTE1 X2dlbV9vYmplY3QgKm9iaikKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCisJZmxhZ3MgPSBJOTE1 X0FMTE9DX01JTl9QQUdFX1NJWkU7CisJaWYgKG9iai0+ZmxhZ3MgJiBJOTE1X0JPX0FMTE9DX0NP TlRJR1VPVVMpCisJCWZsYWdzIHw9IEk5MTVfQUxMT0NfQ09OVElHVU9VUzsKKwogCXJldCA9IF9f aW50ZWxfbWVtb3J5X3JlZ2lvbl9nZXRfcGFnZXNfYnVkZHkobWVtLCBzaXplLCBmbGFncywgYmxv Y2tzKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycl9mcmVlX3NnOwpAQCAtNTYsNyArNjAsOCBAQCBp OTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2VzX2J1ZGR5KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 ICpvYmopCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShibG9jaywgYmxvY2tzLCBsaW5rKSB7CiAJCXU2 NCBibG9ja19zaXplLCBvZmZzZXQ7CiAKLQkJYmxvY2tfc2l6ZSA9IGk5MTVfYnVkZHlfYmxvY2tf c2l6ZSgmbWVtLT5tbSwgYmxvY2spOworCQlibG9ja19zaXplID0gbWluX3QodTY0LCBzaXplLAor CQkJCSAgIGk5MTVfYnVkZHlfYmxvY2tfc2l6ZSgmbWVtLT5tbSwgYmxvY2spKTsKIAkJb2Zmc2V0 ID0gaTkxNV9idWRkeV9ibG9ja19vZmZzZXQoYmxvY2spOwogCiAJCUdFTV9CVUdfT04ob3ZlcmZs b3dzX3R5cGUoYmxvY2tfc2l6ZSwgc2ctPmxlbmd0aCkpOwpAQCAtOTgsMTAgKzEwMywxMiBAQCBp OTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2VzX2J1ZGR5KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 ICpvYmopCiB9CiAKIHZvaWQgaTkxNV9nZW1fb2JqZWN0X2luaXRfbWVtb3J5X3JlZ2lvbihzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAotCQkJCQlzdHJ1Y3QgaW50ZWxfbWVtb3J5X3Jl Z2lvbiAqbWVtKQorCQkJCQlzdHJ1Y3QgaW50ZWxfbWVtb3J5X3JlZ2lvbiAqbWVtLAorCQkJCQl1 bnNpZ25lZCBsb25nIGZsYWdzKQogewogCUlOSVRfTElTVF9IRUFEKCZvYmotPm1tLmJsb2Nrcyk7 CiAJb2JqLT5tbS5yZWdpb24gPSBtZW07CisJb2JqLT5mbGFncyA9IGZsYWdzOwogfQogCiB2b2lk IGk5MTVfZ2VtX29iamVjdF9yZWxlYXNlX21lbW9yeV9yZWdpb24oc3RydWN0IGRybV9pOTE1X2dl bV9vYmplY3QgKm9iaikKQEAgLTExNSw2ICsxMjIsOCBAQCBpOTE1X2dlbV9vYmplY3RfY3JlYXRl X3JlZ2lvbihzdHJ1Y3QgaW50ZWxfbWVtb3J5X3JlZ2lvbiAqbWVtLAogewogCXN0cnVjdCBkcm1f aTkxNV9nZW1fb2JqZWN0ICpvYmo7CiAKKwlHRU1fQlVHX09OKGZsYWdzICYgfkk5MTVfQk9fQUxM T0NfRkxBR1MpOworCiAJaWYgKCFtZW0pCiAJCXJldHVybiBFUlJfUFRSKC1FTk9ERVYpOwogCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcmVnaW9uLmggYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcmVnaW9uLmgKaW5kZXggZWJkZGM4NmQ3 OGY3Li5mMmZmNmY4YmZmNzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9p OTE1X2dlbV9yZWdpb24uaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1f cmVnaW9uLmgKQEAgLTE3LDcgKzE3LDggQEAgdm9pZCBpOTE1X2dlbV9vYmplY3RfcHV0X3BhZ2Vz X2J1ZGR5KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCiAJCQkJICAgICBzdHJ1Y3Qg c2dfdGFibGUgKnBhZ2VzKTsKIAogdm9pZCBpOTE1X2dlbV9vYmplY3RfaW5pdF9tZW1vcnlfcmVn aW9uKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCi0JCQkJCXN0cnVjdCBpbnRlbF9t ZW1vcnlfcmVnaW9uICptZW0pOworCQkJCQlzdHJ1Y3QgaW50ZWxfbWVtb3J5X3JlZ2lvbiAqbWVt LAorCQkJCQl1bnNpZ25lZCBsb25nIGZsYWdzKTsKIHZvaWQgaTkxNV9nZW1fb2JqZWN0X3JlbGVh c2VfbWVtb3J5X3JlZ2lvbihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKTsKIAogc3Ry dWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ2VtL3NlbGZ0ZXN0cy9odWdlX3BhZ2VzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0v c2VsZnRlc3RzL2h1Z2VfcGFnZXMuYwppbmRleCA0ZTE4MDVhYWViOTkuLmY5ZmJmMjg2NTc4MiAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9odWdlX3BhZ2Vz LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9odWdlX3BhZ2VzLmMK QEAgLTQ3MSw3ICs0NzEsOCBAQCBzdGF0aWMgaW50IGlndF9tb2NrX21lbW9yeV9yZWdpb25faHVn ZV9wYWdlcyh2b2lkICphcmcpCiAJCXVuc2lnbmVkIGludCBwYWdlX3NpemUgPSBCSVQoYml0KTsK IAkJcmVzb3VyY2Vfc2l6ZV90IHBoeXM7CiAKLQkJb2JqID0gaTkxNV9nZW1fb2JqZWN0X2NyZWF0 ZV9yZWdpb24obWVtLCBwYWdlX3NpemUsIDApOworCQlvYmogPSBpOTE1X2dlbV9vYmplY3RfY3Jl YXRlX3JlZ2lvbihtZW0sIHBhZ2Vfc2l6ZSwKKwkJCQkJCSAgICBJOTE1X0JPX0FMTE9DX0NPTlRJ R1VPVVMpOwogCQlpZiAoSVNfRVJSKG9iaikpIHsKIAkJCWVyciA9IFBUUl9FUlIob2JqKTsKIAkJ CWdvdG8gb3V0X2Rlc3Ryb3lfZGV2aWNlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfbWVtb3J5X3JlZ2lvbi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbWVt b3J5X3JlZ2lvbi5jCmluZGV4IGU0OGQ1YzM3YzRkZi4uN2E2Njg3MmQ5ZWFjIDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9tZW1vcnlfcmVnaW9uLmMKKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfbWVtb3J5X3JlZ2lvbi5jCkBAIC00Nyw4ICs0Nyw4IEBAIF9f aW50ZWxfbWVtb3J5X3JlZ2lvbl9nZXRfcGFnZXNfYnVkZHkoc3RydWN0IGludGVsX21lbW9yeV9y ZWdpb24gKm1lbSwKIAkJCQkgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MsCiAJCQkJICAgICAgc3Ry dWN0IGxpc3RfaGVhZCAqYmxvY2tzKQogewotCXVuc2lnbmVkIGxvbmcgbl9wYWdlcyA9IHNpemUg Pj4gaWxvZzIobWVtLT5tbS5jaHVua19zaXplKTsKIAl1bnNpZ25lZCBpbnQgbWluX29yZGVyID0g MDsKKwl1bnNpZ25lZCBsb25nIG5fcGFnZXM7CiAKIAlHRU1fQlVHX09OKCFJU19BTElHTkVEKHNp emUsIG1lbS0+bW0uY2h1bmtfc2l6ZSkpOwogCUdFTV9CVUdfT04oIWxpc3RfZW1wdHkoYmxvY2tz KSk7CkBAIC01OCw2ICs1OCwxMyBAQCBfX2ludGVsX21lbW9yeV9yZWdpb25fZ2V0X3BhZ2VzX2J1 ZGR5KHN0cnVjdCBpbnRlbF9tZW1vcnlfcmVnaW9uICptZW0sCiAJCQkgICAgaWxvZzIobWVtLT5t bS5jaHVua19zaXplKTsKIAl9CiAKKwlpZiAoZmxhZ3MgJiBJOTE1X0FMTE9DX0NPTlRJR1VPVVMp IHsKKwkJc2l6ZSA9IHJvdW5kdXBfcG93X29mX3R3byhzaXplKTsKKwkJbWluX29yZGVyID0gaWxv ZzIoc2l6ZSkgLSBpbG9nMihtZW0tPm1tLmNodW5rX3NpemUpOworCX0KKworCW5fcGFnZXMgPSBz aXplID4+IGlsb2cyKG1lbS0+bW0uY2h1bmtfc2l6ZSk7CisKIAltdXRleF9sb2NrKCZtZW0tPm1t X2xvY2spOwogCiAJZG8gewpAQCAtMTA0LDcgKzExMSw5IEBAIF9faW50ZWxfbWVtb3J5X3JlZ2lv bl9nZXRfYmxvY2tfYnVkZHkoc3RydWN0IGludGVsX21lbW9yeV9yZWdpb24gKm1lbSwKIAlpbnQg cmV0OwogCiAJSU5JVF9MSVNUX0hFQUQoJmJsb2Nrcyk7Ci0JcmV0ID0gX19pbnRlbF9tZW1vcnlf cmVnaW9uX2dldF9wYWdlc19idWRkeShtZW0sIHNpemUsIDAsICZibG9ja3MpOworCXJldCA9IF9f aW50ZWxfbWVtb3J5X3JlZ2lvbl9nZXRfcGFnZXNfYnVkZHkobWVtLCBzaXplLAorCQkJCQkJICAg IEk5MTVfQUxMT0NfQ09OVElHVU9VUywKKwkJCQkJCSAgICAmYmxvY2tzKTsKIAlpZiAocmV0KQog CQlyZXR1cm4gRVJSX1BUUihyZXQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9tZW1vcnlfcmVnaW9uLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9tZW1v cnlfcmVnaW9uLmgKaW5kZXggYWUxY2UyOThiY2QxLi4xZGFkNTFiMmZjOTYgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX21lbW9yeV9yZWdpb24uaAorKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9tZW1vcnlfcmVnaW9uLmgKQEAgLTE3LDcgKzE3LDggQEAgc3Ry dWN0IGRybV9pOTE1X2dlbV9vYmplY3Q7CiBzdHJ1Y3QgaW50ZWxfbWVtb3J5X3JlZ2lvbjsKIHN0 cnVjdCBzZ190YWJsZTsKIAotI2RlZmluZSBJOTE1X0FMTE9DX01JTl9QQUdFX1NJWkUgICBCSVQo MCkKKyNkZWZpbmUgSTkxNV9BTExPQ19NSU5fUEFHRV9TSVpFICBCSVQoMCkKKyNkZWZpbmUgSTkx NV9BTExPQ19DT05USUdVT1VTICAgICBCSVQoMSkKIAogc3RydWN0IGludGVsX21lbW9yeV9yZWdp b25fb3BzIHsKIAl1bnNpZ25lZCBpbnQgZmxhZ3M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9zZWxmdGVzdHMvaW50ZWxfbWVtb3J5X3JlZ2lvbi5jIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvc2VsZnRlc3RzL2ludGVsX21lbW9yeV9yZWdpb24uYwppbmRleCA1NGY5YTYyNGI0ZTEu LmM0M2QwMGVjMzhlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3Rz L2ludGVsX21lbW9yeV9yZWdpb24uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVz dHMvaW50ZWxfbWVtb3J5X3JlZ2lvbi5jCkBAIC0xMyw2ICsxMyw3IEBACiAKICNpbmNsdWRlICJn ZW0vaTkxNV9nZW1fcmVnaW9uLmgiCiAjaW5jbHVkZSAiZ2VtL3NlbGZ0ZXN0cy9tb2NrX2NvbnRl eHQuaCIKKyNpbmNsdWRlICJzZWxmdGVzdHMvaTkxNV9yYW5kb20uaCIKIAogc3RhdGljIHZvaWQg Y2xvc2Vfb2JqZWN0cyhzdHJ1Y3QgbGlzdF9oZWFkICpvYmplY3RzKQogewpAQCAtODksMTAgKzkw LDE3MiBAQCBzdGF0aWMgaW50IGlndF9tb2NrX2ZpbGwodm9pZCAqYXJnKQogCXJldHVybiBlcnI7 CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqCitpZ3Rfb2JqZWN0X2Ny ZWF0ZShzdHJ1Y3QgaW50ZWxfbWVtb3J5X3JlZ2lvbiAqbWVtLAorCQkgIHN0cnVjdCBsaXN0X2hl YWQgKm9iamVjdHMsCisJCSAgdTY0IHNpemUsCisJCSAgdW5zaWduZWQgaW50IGZsYWdzKQorewor CXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7CisJaW50IGVycjsKKworCW9iaiA9IGk5 MTVfZ2VtX29iamVjdF9jcmVhdGVfcmVnaW9uKG1lbSwgc2l6ZSwgZmxhZ3MpOworCWlmIChJU19F UlIob2JqKSkKKwkJcmV0dXJuIG9iajsKKworCWVyciA9IGk5MTVfZ2VtX29iamVjdF9waW5fcGFn ZXMob2JqKTsKKwlpZiAoZXJyKQorCQlnb3RvIHB1dDsKKworCWxpc3RfYWRkKCZvYmotPnN0X2xp bmssIG9iamVjdHMpOworCXJldHVybiBvYmo7CisKK3B1dDoKKwlpOTE1X2dlbV9vYmplY3RfcHV0 KG9iaik7CisJcmV0dXJuIEVSUl9QVFIoZXJyKTsKK30KKwordm9pZCBpZ3Rfb2JqZWN0X3JlbGVh c2Uoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKK3sKKwlpOTE1X2dlbV9vYmplY3Rf dW5waW5fcGFnZXMob2JqKTsKKwlfX2k5MTVfZ2VtX29iamVjdF9wdXRfcGFnZXMob2JqLCBJOTE1 X01NX05PUk1BTCk7CisJaTkxNV9nZW1fb2JqZWN0X3B1dChvYmopOworCWxpc3RfZGVsKCZvYmot PnN0X2xpbmspOworfQorCitzdGF0aWMgaW50IGlndF9tb2NrX2NvbnRpbnVvdXModm9pZCAqYXJn KQoreworCXN0cnVjdCBpbnRlbF9tZW1vcnlfcmVnaW9uICptZW0gPSBhcmc7CisJc3RydWN0IGRy bV9pOTE1X2dlbV9vYmplY3QgKm9iajsKKwl1bnNpZ25lZCBsb25nIG5fb2JqZWN0czsKKwlMSVNU X0hFQUQob2JqZWN0cyk7CisJTElTVF9IRUFEKGhvbGVzKTsKKwlJOTE1X1JORF9TVEFURShwcm5n KTsKKwlyZXNvdXJjZV9zaXplX3QgdGFyZ2V0OworCXJlc291cmNlX3NpemVfdCB0b3RhbDsKKwly ZXNvdXJjZV9zaXplX3QgbWluOworCWludCBlcnIgPSAwOworCisJdG90YWwgPSByZXNvdXJjZV9z aXplKCZtZW0tPnJlZ2lvbik7CisKKwkvKiBNaW4gc2l6ZSAqLworCW9iaiA9IGlndF9vYmplY3Rf Y3JlYXRlKG1lbSwgJm9iamVjdHMsIG1lbS0+bW0uY2h1bmtfc2l6ZSwKKwkJCQlJOTE1X0JPX0FM TE9DX0NPTlRJR1VPVVMpOworCWlmIChJU19FUlIob2JqKSkKKwkJcmV0dXJuIFBUUl9FUlIob2Jq KTsKKworCWlmIChvYmotPm1tLnBhZ2VzLT5uZW50cyAhPSAxKSB7CisJCXByX2VycigiJXMgbWlu IG9iamVjdCBzcGFucyBtdWx0aXBsZSBzZyBlbnRyaWVzXG4iLCBfX2Z1bmNfXyk7CisJCWVyciA9 IC1FSU5WQUw7CisJCWdvdG8gZXJyX2Nsb3NlX29iamVjdHM7CisJfQorCisJaWd0X29iamVjdF9y ZWxlYXNlKG9iaik7CisKKwkvKiBNYXggc2l6ZSAqLworCW9iaiA9IGlndF9vYmplY3RfY3JlYXRl KG1lbSwgJm9iamVjdHMsIHRvdGFsLCBJOTE1X0JPX0FMTE9DX0NPTlRJR1VPVVMpOworCWlmIChJ U19FUlIob2JqKSkKKwkJcmV0dXJuIFBUUl9FUlIob2JqKTsKKworCWlmIChvYmotPm1tLnBhZ2Vz LT5uZW50cyAhPSAxKSB7CisJCXByX2VycigiJXMgbWF4IG9iamVjdCBzcGFucyBtdWx0aXBsZSBz ZyBlbnRyaWVzXG4iLCBfX2Z1bmNfXyk7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gZXJyX2Ns b3NlX29iamVjdHM7CisJfQorCisJaWd0X29iamVjdF9yZWxlYXNlKG9iaik7CisKKwkvKiBJbnRl cm5hbCBmcmFnbWVudGF0aW9uIHNob3VsZCBub3QgYmxlZWQgaW50byB0aGUgb2JqZWN0IHNpemUg Ki8KKwl0YXJnZXQgPSByb3VuZF91cChwcmFuZG9tX3UzMl9zdGF0ZSgmcHJuZykgJSB0b3RhbCwg UEFHRV9TSVpFKTsKKwl0YXJnZXQgPSBtYXhfdCh1NjQsIFBBR0VfU0laRSwgdGFyZ2V0KTsKKwor CW9iaiA9IGlndF9vYmplY3RfY3JlYXRlKG1lbSwgJm9iamVjdHMsIHRhcmdldCwKKwkJCQlJOTE1 X0JPX0FMTE9DX0NPTlRJR1VPVVMpOworCWlmIChJU19FUlIob2JqKSkKKwkJcmV0dXJuIFBUUl9F UlIob2JqKTsKKworCWlmIChvYmotPmJhc2Uuc2l6ZSAhPSB0YXJnZXQpIHsKKwkJcHJfZXJyKCIl cyBvYmotPmJhc2Uuc2l6ZSglbGx4KSAhPSB0YXJnZXQoJWxseClcbiIsIF9fZnVuY19fLAorCQkg ICAgICAgKHU2NClvYmotPmJhc2Uuc2l6ZSwgKHU2NCl0YXJnZXQpOworCQllcnIgPSAtRUlOVkFM OworCQlnb3RvIGVycl9jbG9zZV9vYmplY3RzOworCX0KKworCWlmIChvYmotPm1tLnBhZ2VzLT5u ZW50cyAhPSAxKSB7CisJCXByX2VycigiJXMgb2JqZWN0IHNwYW5zIG11bHRpcGxlIHNnIGVudHJp ZXNcbiIsIF9fZnVuY19fKTsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBlcnJfY2xvc2Vfb2Jq ZWN0czsKKwl9CisKKwlpZ3Rfb2JqZWN0X3JlbGVhc2Uob2JqKTsKKworCS8qCisJICogVHJ5IHRv IGZyYWdtZW50IHRoZSBhZGRyZXNzIHNwYWNlLCBzdWNoIHRoYXQgaGFsZiBvZiBpdCBpcyBmcmVl LCBidXQKKwkgKiB0aGUgbWF4IGNvbnRpZ3VvdXMgYmxvY2sgc2l6ZSBpcyBTWl82NEsuCisJICov CisKKwl0YXJnZXQgPSBTWl82NEs7CisJbl9vYmplY3RzID0gZGl2NjRfdTY0KHRvdGFsLCB0YXJn ZXQpOworCisJd2hpbGUgKG5fb2JqZWN0cy0tKSB7CisJCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7 CisKKwkJaWYgKG5fb2JqZWN0cyAlIDIpCisJCQlsaXN0ID0gJmhvbGVzOworCQllbHNlCisJCQls aXN0ID0gJm9iamVjdHM7CisKKwkJb2JqID0gaWd0X29iamVjdF9jcmVhdGUobWVtLCBsaXN0LCB0 YXJnZXQsCisJCQkJCUk5MTVfQk9fQUxMT0NfQ09OVElHVU9VUyk7CisJCWlmIChJU19FUlIob2Jq KSkgeworCQkJZXJyID0gUFRSX0VSUihvYmopOworCQkJZ290byBlcnJfY2xvc2Vfb2JqZWN0czsK KwkJfQorCX0KKworCWNsb3NlX29iamVjdHMoJmhvbGVzKTsKKworCW1pbiA9IHRhcmdldDsKKwl0 YXJnZXQgPSB0b3RhbCA+PiAxOworCisJLyogTWFrZSBzdXJlIHdlIGNhbiBzdGlsbCBhbGxvY2F0 ZSBhbGwgdGhlIGZyYWdtZW50ZWQgc3BhY2UgKi8KKwlvYmogPSBpZ3Rfb2JqZWN0X2NyZWF0ZSht ZW0sICZvYmplY3RzLCB0YXJnZXQsIDApOworCWlmIChJU19FUlIob2JqKSkKKwkJcmV0dXJuIFBU Ul9FUlIob2JqKTsKKworCWlndF9vYmplY3RfcmVsZWFzZShvYmopOworCisJLyoKKwkgKiBFdmVu IHRob3VnaCB3ZSBoYXZlIGVub3VnaCBmcmVlIHNwYWNlLCB3ZSBkb24ndCBoYXZlIGEgYmlnIGVu b3VnaAorCSAqIGNvbnRpZ3VvdXMgYmxvY2suIE1ha2Ugc3VyZSB0aGF0IGhvbGRzIHRydWUuCisJ ICovCisKKwlkbyB7CisJCWJvb2wgc2hvdWxkX2ZhaWwgPSB0YXJnZXQgPiBtaW47CisKKwkJb2Jq ID0gaWd0X29iamVjdF9jcmVhdGUobWVtLCAmb2JqZWN0cywgdGFyZ2V0LAorCQkJCQlJOTE1X0JP X0FMTE9DX0NPTlRJR1VPVVMpOworCQlpZiAoc2hvdWxkX2ZhaWwgIT0gSVNfRVJSKG9iaikpIHsK KwkJCXByX2VycigiJXMgdGFyZ2V0IGFsbG9jYXRpb24oJWxseCkgbWlzbWF0Y2hcbiIsCisJCQkg ICAgICAgX19mdW5jX18sICh1NjQpdGFyZ2V0KTsKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlnb3Rv IGVycl9jbG9zZV9vYmplY3RzOworCQl9CisKKwkJdGFyZ2V0ID4+PSAxOworCX0gd2hpbGUgKHRh cmdldCA+PSBtZW0tPm1tLmNodW5rX3NpemUpOworCitlcnJfY2xvc2Vfb2JqZWN0czoKKwlsaXN0 X3NwbGljZV90YWlsKCZob2xlcywgJm9iamVjdHMpOworCWNsb3NlX29iamVjdHMoJm9iamVjdHMp OworCXJldHVybiBlcnI7Cit9CisKIGludCBpbnRlbF9tZW1vcnlfcmVnaW9uX21vY2tfc2VsZnRl c3RzKHZvaWQpCiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBpOTE1X3N1YnRlc3QgdGVzdHNbXSA9 IHsKIAkJU1VCVEVTVChpZ3RfbW9ja19maWxsKSwKKwkJU1VCVEVTVChpZ3RfbW9ja19jb250aW51 b3VzKSwKIAl9OwogCXN0cnVjdCBpbnRlbF9tZW1vcnlfcmVnaW9uICptZW07CiAJc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmk5MTU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9z ZWxmdGVzdHMvbW9ja19yZWdpb24uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9t b2NrX3JlZ2lvbi5jCmluZGV4IDBlOWE1NzVlZGUzYi4uN2IwYzk5ZGRjMmQ1IDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvbW9ja19yZWdpb24uYworKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvbW9ja19yZWdpb24uYwpAQCAtMzYsNyArMzYsNyBA QCBtb2NrX29iamVjdF9jcmVhdGUoc3RydWN0IGludGVsX21lbW9yeV9yZWdpb24gKm1lbSwKIAog CWk5MTVfZ2VtX29iamVjdF9zZXRfY2FjaGVfY29oZXJlbmN5KG9iaiwgSTkxNV9DQUNIRV9OT05F KTsKIAotCWk5MTVfZ2VtX29iamVjdF9pbml0X21lbW9yeV9yZWdpb24ob2JqLCBtZW0pOworCWk5 MTVfZ2VtX29iamVjdF9pbml0X21lbW9yeV9yZWdpb24ob2JqLCBtZW0sIGZsYWdzKTsKIAogCXJl dHVybiBvYmo7CiB9Ci0tIAoyLjIwLjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZy ZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2ludGVsLWdmeA==