From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: [PATCH 15/41] drm/i915: Use a radixtree for random access to the object's backing storage Date: Thu, 20 Oct 2016 16:03:57 +0100 Message-ID: <20161020150423.4560-16-chris@chris-wilson.co.uk> References: <20161020150423.4560-1-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-lf0-x244.google.com (mail-lf0-x244.google.com [IPv6:2a00:1450:4010:c07::244]) by gabe.freedesktop.org (Postfix) with ESMTPS id 9C0266EB9B for ; Thu, 20 Oct 2016 15:04:48 +0000 (UTC) Received: by mail-lf0-x244.google.com with SMTP id l131so458855lfl.0 for ; Thu, 20 Oct 2016 08:04:48 -0700 (PDT) In-Reply-To: <20161020150423.4560-1-chris@chris-wilson.co.uk> 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 QSB3aGlsZSBhZ28gd2Ugc3dpdGNoZWQgZnJvbSBhIGNvbnRpZ3VvdXMgYXJyYXkgb2YgcGFnZXMg aW50byBhbiBzZ2xpc3QsCmZvciB0aGF0IHdhcyBib3RoIG1vcmUgY29udmVuaWVudCBmb3IgbWFw cGluZyB0byBoYXJkd2FyZSBhbmQgYXZvaWRlZAp0aGUgcmVxdWlyZW1lbnQgZm9yIGEgdm1hbGxv YyBhcnJheSBvZiBwYWdlcyBvbiBldmVyeSBvYmplY3QuIEhvd2V2ZXIsCmNlcnRhaW4gR0VNIEFQ SSBjYWxscyAobGlrZSBwd3JpdGUsIHByZWFkIGFzIHdlbGwgYXMgcGVyZm9ybWluZwpyZWxvY2F0 aW9ucykgZG8gZGVzaXJlIGFjY2VzcyB0byBpbmRpdmlkdWFsIHN0cnVjdCBwYWdlcy4gQSBxdWlj ayBoYWNrCndhcyB0byBpbnRyb2R1Y2UgYSBjYWNoZSBvZiB0aGUgbGFzdCBhY2Nlc3Mgc3VjaCB0 aGF0IGZpbmRpbmcgdGhlCmZvbGxvd2luZyBwYWdlIHdhcyBxdWljayAtIHRoaXMgd29ya3Mgc28g bG9uZyBhcyB0aGUgY2FsbGVyIGRlc2lyZWQKc2VxdWVudGlhbCBhY2Nlc3MuIFdhbGtpbmcgYmFj a3dhcmRzLCBvciBtdWx0aXBsZSBjYWxsZXJzLCBzdGlsbCBoaXRzIGEKc2xvdyBsaW5lYXIgc2Vh cmNoIGZvciBlYWNoIHBhZ2UuIE9uZSBzb2x1dGlvbiBpcyB0byBzdG9yZSBlYWNoCnN1Y2Nlc3Nm dWwgbG9va3VwIGluIGEgcmFkaXggdHJlZS4KCnYyOiBSZXdyaXRlIGJ1aWxkaW5nIHRoZSByYWRp eHRyZWUgZm9yIGNsYXJpdHksIGhvcGVmdWxseS4KCnYzOiBSZWFycmFuZ2UgZXhlY2J1ZiB0byBh dm9pZCBjYWxsaW5nIGk5MTVfZ2VtX29iamVjdF9nZXRfc2coKSBmcm9tCndpdGhpbiBhbiBhdG9t aWMgc2VjdGlvbiBhbmQgc28gcmVsYXggdGhlIGFsbG9jYXRpb24gY29udGV4dCB0byBhIHNpbXBs ZQpHRlBfS0VSTkVMIGFuZCBtdXRleC4KClNpZ25lZC1vZmYtYnk6IENocmlzIFdpbHNvbiA8Y2hy aXNAY2hyaXMtd2lsc29uLmNvLnVrPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2 LmggICAgICAgICB8ICA2OSArKysrKy0tLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf Z2VtLmMgICAgICAgICB8IDE4NSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLQogZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fc3RvbGVuLmMgIHwgICA0ICstCiBkcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2dlbV91c2VycHRyLmMgfCAgIDQgKy0KIDQgZmlsZXMgY2hhbmdlZCwg MTk5IGluc2VydGlvbnMoKyksIDYzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5o CmluZGV4IDA4OTdmNDNlNzc5Ni4uZTJlNDhhZjhkNDFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2 LmgKQEAgLTIyNzMsOSArMjI3MywxMiBAQCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCB7CiAK IAlzdHJ1Y3Qgc2dfdGFibGUgKnBhZ2VzOwogCWludCBwYWdlc19waW5fY291bnQ7Ci0Jc3RydWN0 IGdldF9wYWdlIHsKLQkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKLQkJaW50IGxhc3Q7CisJc3Ry dWN0IGk5MTVfZ2VtX29iamVjdF9wYWdlX2l0ZXIgeworCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNn X3BvczsKKwkJdW5zaWduZWQgaW50IHNnX2lkeDsgLyogaW4gcGFnZXMsIGJ1dCAzMmJpdCBlZWsh ICovCisKKwkJc3RydWN0IHJhZGl4X3RyZWVfcm9vdCByYWRpeDsKKwkJc3RydWN0IG11dGV4IGxv Y2s7IC8qIHByb3RlY3RzIHRoaXMgY2FjaGUgKi8KIAl9IGdldF9wYWdlOwogCXZvaWQgKm1hcHBp bmc7CiAKQEAgLTI0NzgsNiArMjQ4MSwxNCBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHN0cnVj dCBzZ3RfaXRlciB7CiAJcmV0dXJuIHM7CiB9CiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNjYXR0 ZXJsaXN0ICpfX19fc2dfbmV4dChzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnKQoreworCSsrc2c7CisJ aWYgKHVubGlrZWx5KHNnX2lzX2NoYWluKHNnKSkpCisJCXNnID0gc2dfY2hhaW5fcHRyKHNnKTsK KwlyZXR1cm4gc2c7Cit9CisKIC8qKgogICogX19zZ19uZXh0IC0gcmV0dXJuIHRoZSBuZXh0IHNj YXR0ZXJsaXN0IGVudHJ5IGluIGEgbGlzdAogICogQHNnOgkJVGhlIGN1cnJlbnQgc2cgZW50cnkK QEAgLTI0OTIsOSArMjUwMyw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHNjYXR0ZXJsaXN0ICpf X3NnX25leHQoc3RydWN0IHNjYXR0ZXJsaXN0ICpzZykKICNpZmRlZiBDT05GSUdfREVCVUdfU0cK IAlCVUdfT04oc2ctPnNnX21hZ2ljICE9IFNHX01BR0lDKTsKICNlbmRpZgotCXJldHVybiBzZ19p c19sYXN0KHNnKSA/IE5VTEwgOgotCQlsaWtlbHkoIXNnX2lzX2NoYWluKCsrc2cpKSA/IHNnIDoK LQkJc2dfY2hhaW5fcHRyKHNnKTsKKwlyZXR1cm4gc2dfaXNfbGFzdChzZykgPyBOVUxMIDogX19f X3NnX25leHQoc2cpOwogfQogCiAvKioKQEAgLTMxNzIsNDUgKzMxODEsMjEgQEAgc3RhdGljIGlu bGluZSBpbnQgX19zZ19wYWdlX2NvdW50KHN0cnVjdCBzY2F0dGVybGlzdCAqc2cpCiAJcmV0dXJu IHNnLT5sZW5ndGggPj4gUEFHRV9TSElGVDsKIH0KIAotc3RydWN0IHBhZ2UgKgotaTkxNV9nZW1f b2JqZWN0X2dldF9kaXJ0eV9wYWdlKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosIGlu dCBuKTsKLQotc3RhdGljIGlubGluZSBkbWFfYWRkcl90Ci1pOTE1X2dlbV9vYmplY3RfZ2V0X2Rt YV9hZGRyZXNzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosIGludCBuKQotewotCWlm IChuIDwgb2JqLT5nZXRfcGFnZS5sYXN0KSB7Ci0JCW9iai0+Z2V0X3BhZ2Uuc2cgPSBvYmotPnBh Z2VzLT5zZ2w7Ci0JCW9iai0+Z2V0X3BhZ2UubGFzdCA9IDA7Ci0JfQotCi0Jd2hpbGUgKG9iai0+ Z2V0X3BhZ2UubGFzdCArIF9fc2dfcGFnZV9jb3VudChvYmotPmdldF9wYWdlLnNnKSA8PSBuKSB7 Ci0JCW9iai0+Z2V0X3BhZ2UubGFzdCArPSBfX3NnX3BhZ2VfY291bnQob2JqLT5nZXRfcGFnZS5z ZysrKTsKLQkJaWYgKHVubGlrZWx5KHNnX2lzX2NoYWluKG9iai0+Z2V0X3BhZ2Uuc2cpKSkKLQkJ CW9iai0+Z2V0X3BhZ2Uuc2cgPSBzZ19jaGFpbl9wdHIob2JqLT5nZXRfcGFnZS5zZyk7Ci0JfQor c3RydWN0IHNjYXR0ZXJsaXN0ICoKK2k5MTVfZ2VtX29iamVjdF9nZXRfc2coc3RydWN0IGRybV9p OTE1X2dlbV9vYmplY3QgKm9iaiwKKwkJICAgICAgIHVuc2lnbmVkIGludCBuLCB1bnNpZ25lZCBp bnQgKm9mZnNldCk7CiAKLQlyZXR1cm4gc2dfZG1hX2FkZHJlc3Mob2JqLT5nZXRfcGFnZS5zZykg KyAoKG4gLSBvYmotPmdldF9wYWdlLmxhc3QpIDw8IFBBR0VfU0hJRlQpOwotfQotCi1zdGF0aWMg aW5saW5lIHN0cnVjdCBwYWdlICoKLWk5MTVfZ2VtX29iamVjdF9nZXRfcGFnZShzdHJ1Y3QgZHJt X2k5MTVfZ2VtX29iamVjdCAqb2JqLCBpbnQgbikKLXsKLQlpZiAoV0FSTl9PTihuID49IG9iai0+ YmFzZS5zaXplID4+IFBBR0VfU0hJRlQpKQotCQlyZXR1cm4gTlVMTDsKLQotCWlmIChuIDwgb2Jq LT5nZXRfcGFnZS5sYXN0KSB7Ci0JCW9iai0+Z2V0X3BhZ2Uuc2cgPSBvYmotPnBhZ2VzLT5zZ2w7 Ci0JCW9iai0+Z2V0X3BhZ2UubGFzdCA9IDA7Ci0JfQorc3RydWN0IHBhZ2UgKgoraTkxNV9nZW1f b2JqZWN0X2dldF9wYWdlKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCisJCQkgdW5z aWduZWQgaW50IG4pOwogCi0Jd2hpbGUgKG9iai0+Z2V0X3BhZ2UubGFzdCArIF9fc2dfcGFnZV9j b3VudChvYmotPmdldF9wYWdlLnNnKSA8PSBuKSB7Ci0JCW9iai0+Z2V0X3BhZ2UubGFzdCArPSBf X3NnX3BhZ2VfY291bnQob2JqLT5nZXRfcGFnZS5zZysrKTsKLQkJaWYgKHVubGlrZWx5KHNnX2lz X2NoYWluKG9iai0+Z2V0X3BhZ2Uuc2cpKSkKLQkJCW9iai0+Z2V0X3BhZ2Uuc2cgPSBzZ19jaGFp bl9wdHIob2JqLT5nZXRfcGFnZS5zZyk7Ci0JfQorc3RydWN0IHBhZ2UgKgoraTkxNV9nZW1fb2Jq ZWN0X2dldF9kaXJ0eV9wYWdlKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCisJCQkg ICAgICAgdW5zaWduZWQgaW50IG4pOwogCi0JcmV0dXJuIG50aF9wYWdlKHNnX3BhZ2Uob2JqLT5n ZXRfcGFnZS5zZyksIG4gLSBvYmotPmdldF9wYWdlLmxhc3QpOwotfQorZG1hX2FkZHJfdAoraTkx NV9nZW1fb2JqZWN0X2dldF9kbWFfYWRkcmVzcyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAq b2JqLAorCQkJCXVuc2lnbmVkIGxvbmcgbik7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpOTE1X2dl bV9vYmplY3RfcGluX3BhZ2VzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCiB7CmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9nZW0uYwppbmRleCBkNTk2YjFmOWU5NjkuLmE5ZWEyMGQ1M2UyMyAxMDA2 NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYworKysgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2dlbS5jCkBAIC0yMzMzLDYgKzIzMzMsMTUgQEAgaTkxNV9nZW1fb2Jq ZWN0X3B1dF9wYWdlc19ndHQoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKIAlrZnJl ZShvYmotPnBhZ2VzKTsKIH0KIAorc3RhdGljIHZvaWQgX19pOTE1X2dlbV9vYmplY3RfcmVzZXRf cGFnZV9pdGVyKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCit7CisJc3RydWN0IHJh ZGl4X3RyZWVfaXRlciBpdGVyOworCXZvaWQgKipzbG90OworCisJcmFkaXhfdHJlZV9mb3JfZWFj aF9zbG90KHNsb3QsICZvYmotPmdldF9wYWdlLnJhZGl4LCAmaXRlciwgMCkKKwkJcmFkaXhfdHJl ZV9kZWxldGUoJm9iai0+Z2V0X3BhZ2UucmFkaXgsIGl0ZXIuaW5kZXgpOworfQorCiBpbnQKIGk5 MTVfZ2VtX29iamVjdF9wdXRfcGFnZXMoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikK IHsKQEAgLTIzNjUsNiArMjM3NCw4IEBAIGk5MTVfZ2VtX29iamVjdF9wdXRfcGFnZXMoc3RydWN0 IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKIAkJb2JqLT5tYXBwaW5nID0gTlVMTDsKIAl9CiAK KwlfX2k5MTVfZ2VtX29iamVjdF9yZXNldF9wYWdlX2l0ZXIob2JqKTsKKwogCW9wcy0+cHV0X3Bh Z2VzKG9iaik7CiAJb2JqLT5wYWdlcyA9IE5VTEw7CiAKQEAgLTI1MzQsOCArMjU0NSw4IEBAIGk5 MTVfZ2VtX29iamVjdF9nZXRfcGFnZXMoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikK IAogCWxpc3RfYWRkX3RhaWwoJm9iai0+Z2xvYmFsX2xpc3QsICZkZXZfcHJpdi0+bW0udW5ib3Vu ZF9saXN0KTsKIAotCW9iai0+Z2V0X3BhZ2Uuc2cgPSBvYmotPnBhZ2VzLT5zZ2w7Ci0Jb2JqLT5n ZXRfcGFnZS5sYXN0ID0gMDsKKwlvYmotPmdldF9wYWdlLnNnX3BvcyA9IG9iai0+cGFnZXMtPnNn bDsKKwlvYmotPmdldF9wYWdlLnNnX2lkeCA9IDA7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQzMzgs NiArNDM0OSw4IEBAIHZvaWQgaTkxNV9nZW1fb2JqZWN0X2luaXQoc3RydWN0IGRybV9pOTE1X2dl bV9vYmplY3QgKm9iaiwKIAogCW9iai0+ZnJvbnRidWZmZXJfZ2d0dF9vcmlnaW4gPSBPUklHSU5f R1RUOwogCW9iai0+bWFkdiA9IEk5MTVfTUFEVl9XSUxMTkVFRDsKKwlJTklUX1JBRElYX1RSRUUo Jm9iai0+Z2V0X3BhZ2UucmFkaXgsIEdGUF9LRVJORUwgfCBfX0dGUF9OT1dBUk4pOworCW11dGV4 X2luaXQoJm9iai0+Z2V0X3BhZ2UubG9jayk7CiAKIAlpOTE1X2dlbV9pbmZvX2FkZF9vYmoodG9f aTkxNShvYmotPmJhc2UuZGV2KSwgb2JqLT5iYXNlLnNpemUpOwogfQpAQCAtNTAzMSwyMSArNTA0 NCw2IEBAIHZvaWQgaTkxNV9nZW1fdHJhY2tfZmIoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Qg Km9sZCwKIAl9CiB9CiAKLS8qIExpa2UgaTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlKCksIGJ1dCBt YXJrIHRoZSByZXR1cm5lZCBwYWdlIGRpcnR5ICovCi1zdHJ1Y3QgcGFnZSAqCi1pOTE1X2dlbV9v YmplY3RfZ2V0X2RpcnR5X3BhZ2Uoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwgaW50 IG4pCi17Ci0Jc3RydWN0IHBhZ2UgKnBhZ2U7Ci0KLQkvKiBPbmx5IGRlZmF1bHQgb2JqZWN0cyBo YXZlIHBlci1wYWdlIGRpcnR5IHRyYWNraW5nICovCi0JaWYgKFdBUk5fT04oIWk5MTVfZ2VtX29i amVjdF9oYXNfc3RydWN0X3BhZ2Uob2JqKSkpCi0JCXJldHVybiBOVUxMOwotCi0JcGFnZSA9IGk5 MTVfZ2VtX29iamVjdF9nZXRfcGFnZShvYmosIG4pOwotCXNldF9wYWdlX2RpcnR5KHBhZ2UpOwot CXJldHVybiBwYWdlOwotfQotCiAvKiBBbGxvY2F0ZSBhIG5ldyBHRU0gb2JqZWN0IGFuZCBmaWxs IGl0IHdpdGggdGhlIHN1cHBsaWVkIGRhdGEgKi8KIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 ICoKIGk5MTVfZ2VtX29iamVjdF9jcmVhdGVfZnJvbV9kYXRhKHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYsCkBAIC01MDg2LDMgKzUwODQsMTU2IEBAIGk5MTVfZ2VtX29iamVjdF9jcmVhdGVfZnJvbV9k YXRhKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJaTkxNV9nZW1fb2JqZWN0X3B1dChvYmopOwog CXJldHVybiBFUlJfUFRSKHJldCk7CiB9CisKK3N0cnVjdCBzY2F0dGVybGlzdCAqCitpOTE1X2dl bV9vYmplY3RfZ2V0X3NnKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCisJCSAgICAg ICB1bnNpZ25lZCBpbnQgbiwKKwkJICAgICAgIHVuc2lnbmVkIGludCAqb2Zmc2V0KQoreworCXN0 cnVjdCBpOTE1X2dlbV9vYmplY3RfcGFnZV9pdGVyICppdGVyID0gJm9iai0+Z2V0X3BhZ2U7CisJ c3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKwl1bnNpZ25lZCBpbnQgaWR4LCBjb3VudDsKKworCW1p Z2h0X3NsZWVwKCk7CisJR0VNX0JVR19PTihuID49IG9iai0+YmFzZS5zaXplID4+IFBBR0VfU0hJ RlQpOworCUdFTV9CVUdfT04ob2JqLT5wYWdlc19waW5fY291bnQgPT0gMCk7CisKKwkvKiBBcyB3 ZSBpdGVyYXRlIGZvcndhcmQgdGhyb3VnaCB0aGUgc2csIHdlIHJlY29yZCBlYWNoIGVudHJ5IGlu IGEKKwkgKiByYWRpeHRyZWUgZm9yIHF1aWNrIHJlcGVhdGVkIChiYWNrd2FyZHMpIGxvb2t1cHMu IElmIHdlIGhhdmUgc2VlbgorCSAqIHRoaXMgaW5kZXggcHJldmlvdXNseSwgd2Ugd2lsbCBoYXZl IGFuIGVudHJ5IGZvciBpdC4KKwkgKgorCSAqIEluaXRpYWwgbG9va3VwIGlzIE8oTiksIGJ1dCB0 aGlzIGlzIGFtb3J0aXplZCB0byBPKDEpIGZvcgorCSAqIHNlcXVlbnRpYWwgcGFnZSBhY2Nlc3Mg KHdoZXJlIGVhY2ggbmV3IHJlcXVlc3QgaXMgY29uc2VjdXRpdmUKKwkgKiB0byB0aGUgcHJldmlv dXMgb25lKS4gUmVwZWF0ZWQgbG9va3VwcyBhcmUgTyhsZyhvYmotPmJhc2Uuc2l6ZSkpLAorCSAq IGkuZS4gTygxKSB3aXRoIGEgbGFyZ2UgY29uc3RhbnQhCisJICovCisJaWYgKG4gPCBSRUFEX09O Q0UoaXRlci0+c2dfaWR4KSkKKwkJZ290byBsb29rdXA7CisKKwltdXRleF9sb2NrKCZpdGVyLT5s b2NrKTsKKworCS8qIFdlIHByZWZlciB0byByZXVzZSB0aGUgbGFzdCBzZyBzbyB0aGF0IHJlcGVh dGVkIGxvb2t1cCBvZiB0aGlzCisJICogKG9yIHRoZSBzdWJzZXF1ZW50KSBzZyBhcmUgZmFzdCAt IGNvbXBhcmluZyBhZ2FpbnN0IHRoZSBsYXN0CisJICogc2cgaXMgZmFzdGVyIHRoYW4gZ29pbmcg dGhyb3VnaCB0aGUgcmFkaXh0cmVlLgorCSAqLworCisJc2cgPSBpdGVyLT5zZ19wb3M7CisJaWR4 ID0gaXRlci0+c2dfaWR4OworCWNvdW50ID0gX19zZ19wYWdlX2NvdW50KHNnKTsKKworCXdoaWxl IChpZHggKyBjb3VudCA8PSBuKSB7CisJCXVuc2lnbmVkIGxvbmcgZXhjZXB0aW9uLCBpOworCQlp bnQgcmV0OworCisJCS8qIElmIHdlIGNhbm5vdCBhbGxvY2F0ZSBhbmQgaW5zZXJ0IHRoaXMgZW50 cnksIG9yIHRoZQorCQkgKiBpbmRpdmlkdWFsIHBhZ2VzIGZyb20gdGhpcyByYW5nZSwgY2FuY2Vs IHVwZGF0aW5nIHRoZQorCQkgKiBzZ19pZHggc28gdGhhdCBvbiB0aGlzIGxvb2t1cCB3ZSBhcmUg Zm9yY2VkIHRvIGxpbmVhcmx5CisJCSAqIHNjYW4gb253YXJkcywgYnV0IG9uIGZ1dHVyZSBsb29r dXBzIHdlIHdpbGwgdHJ5IHRoZQorCQkgKiBpbnNlcnRpb24gYWdhaW4gKGluIHdoaWNoIGNhc2Ug d2UgbmVlZCB0byBiZSBjYXJlZnVsIG9mCisJCSAqIHRoZSBlcnJvciByZXR1cm4gcmVwb3J0aW5n IHRoYXQgd2UgaGF2ZSBhbHJlYWR5IGluc2VydGVkCisJCSAqIHRoaXMgaW5kZXgpLgorCQkgKi8K KwkJcmV0ID0gcmFkaXhfdHJlZV9pbnNlcnQoJml0ZXItPnJhZGl4LCBpZHgsIHNnKTsKKwkJaWYg KHJldCAmJiByZXQgIT0gLUVFWElTVCkKKwkJCWdvdG8gc2NhbjsKKworCQlleGNlcHRpb24gPQor CQkJUkFESVhfVFJFRV9FWENFUFRJT05BTF9FTlRSWSB8CisJCQlpZHggPDwgUkFESVhfVFJFRV9F WENFUFRJT05BTF9TSElGVDsKKwkJZm9yIChpID0gMTsgaSA8IGNvdW50OyBpKyspIHsKKwkJCXJl dCA9IHJhZGl4X3RyZWVfaW5zZXJ0KCZpdGVyLT5yYWRpeCwgaWR4ICsgaSwKKwkJCQkJCSh2b2lk ICopZXhjZXB0aW9uKTsKKwkJCWlmIChyZXQgJiYgcmV0ICE9IC1FRVhJU1QpCisJCQkJZ290byBz Y2FuOworCQl9CisKKwkJaWR4ICs9IGNvdW50OworCQlzZyA9IF9fX19zZ19uZXh0KHNnKTsKKwkJ Y291bnQgPSBfX3NnX3BhZ2VfY291bnQoc2cpOworCX0KKworc2NhbjoKKwlpdGVyLT5zZ19wb3Mg PSBzZzsKKwlpdGVyLT5zZ19pZHggPSBpZHg7CisKKwltdXRleF91bmxvY2soJml0ZXItPmxvY2sp OworCisJaWYgKHVubGlrZWx5KG4gPCBpZHgpKSAvKiBpbnNlcnRpb24gY29tcGxldGVkIGJ5IGFu b3RoZXIgdGhyZWFkICovCisJCWdvdG8gbG9va3VwOworCisJLyogSW4gY2FzZSB3ZSBmYWlsZWQg dG8gaW5zZXJ0IHRoZSBlbnRyeSBpbnRvIHRoZSByYWRpeHRyZWUsIHdlIG5lZWQKKwkgKiB0byBs b29rIGJleW9uZCB0aGUgY3VycmVudCBzZy4KKwkgKi8KKwl3aGlsZSAoaWR4ICsgY291bnQgPD0g bikgeworCQlpZHggKz0gY291bnQ7CisJCXNnID0gX19fX3NnX25leHQoc2cpOworCQljb3VudCA9 IF9fc2dfcGFnZV9jb3VudChzZyk7CisJfQorCisJKm9mZnNldCA9IG4gLSBpZHg7CisJcmV0dXJu IHNnOworCitsb29rdXA6CisJcmN1X3JlYWRfbG9jaygpOworCisJc2cgPSByYWRpeF90cmVlX2xv b2t1cCgmaXRlci0+cmFkaXgsIG4pOworCUdFTV9CVUdfT04oIXNnKTsKKworCS8qIElmIHRoaXMg aW5kZXggaXMgaW4gdGhlIG1pZGRsZSBvZiBtdWx0aS1wYWdlIHNnIGVudHJ5LAorCSAqIHRoZSBy YWRpeHRyZWUgd2lsbCBjb250YWluIGFuIGV4Y2VwdGlvbmFsIGVudHJ5IHRoYXQgcG9pbnRzCisJ ICogdG8gdGhlIHN0YXJ0IG9mIHRoYXQgcmFuZ2UuIFdlIHdpbGwgcmV0dXJuIHRoZSBwb2ludGVy IHRvCisJICogdGhlIGJhc2UgcGFnZSBhbmQgdGhlIG9mZnNldCBvZiB0aGlzIHBhZ2Ugd2l0aGlu IHRoZQorCSAqIHNnIGVudHJ5J3MgcmFuZ2UuCisJICovCisJKm9mZnNldCA9IDA7CisJaWYgKHVu bGlrZWx5KHJhZGl4X3RyZWVfZXhjZXB0aW9uKHNnKSkpIHsKKwkJdW5zaWduZWQgbG9uZyBiYXNl ID0KKwkJCSh1bnNpZ25lZCBsb25nKXNnID4+IFJBRElYX1RSRUVfRVhDRVBUSU9OQUxfU0hJRlQ7 CisKKwkJc2cgPSByYWRpeF90cmVlX2xvb2t1cCgmaXRlci0+cmFkaXgsIGJhc2UpOworCQlHRU1f QlVHX09OKCFzZyk7CisKKwkJKm9mZnNldCA9IG4gLSBiYXNlOworCX0KKworCXJjdV9yZWFkX3Vu bG9jaygpOworCisJcmV0dXJuIHNnOworfQorCitzdHJ1Y3QgcGFnZSAqCitpOTE1X2dlbV9vYmpl Y3RfZ2V0X3BhZ2Uoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwgdW5zaWduZWQgaW50 IG4pCit7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0Owor CisJR0VNX0JVR19PTighaTkxNV9nZW1fb2JqZWN0X2hhc19zdHJ1Y3RfcGFnZShvYmopKTsKKwor CXNnID0gaTkxNV9nZW1fb2JqZWN0X2dldF9zZyhvYmosIG4sICZvZmZzZXQpOworCXJldHVybiBu dGhfcGFnZShzZ19wYWdlKHNnKSwgb2Zmc2V0KTsKK30KKworLyogTGlrZSBpOTE1X2dlbV9vYmpl Y3RfZ2V0X3BhZ2UoKSwgYnV0IG1hcmsgdGhlIHJldHVybmVkIHBhZ2UgZGlydHkgKi8KK3N0cnVj dCBwYWdlICoKK2k5MTVfZ2VtX29iamVjdF9nZXRfZGlydHlfcGFnZShzdHJ1Y3QgZHJtX2k5MTVf Z2VtX29iamVjdCAqb2JqLAorCQkJICAgICAgIHVuc2lnbmVkIGludCBuKQoreworCXN0cnVjdCBw YWdlICpwYWdlOworCisJcGFnZSA9IGk5MTVfZ2VtX29iamVjdF9nZXRfcGFnZShvYmosIG4pOwor CWlmICghb2JqLT5kaXJ0eSkKKwkJc2V0X3BhZ2VfZGlydHkocGFnZSk7CisKKwlyZXR1cm4gcGFn ZTsKK30KKworZG1hX2FkZHJfdAoraTkxNV9nZW1fb2JqZWN0X2dldF9kbWFfYWRkcmVzcyhzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAorCQkJCXVuc2lnbmVkIGxvbmcgbikKK3sKKwlz dHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOworCXVuc2lnbmVkIGludCBvZmZzZXQ7CisKKwlzZyA9IGk5 MTVfZ2VtX29iamVjdF9nZXRfc2cob2JqLCBuLCAmb2Zmc2V0KTsKKwlyZXR1cm4gc2dfZG1hX2Fk ZHJlc3Moc2cpICsgKG9mZnNldCA8PCBQQUdFX1NISUZUKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3N0b2xlbi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9nZW1fc3RvbGVuLmMKaW5kZXggZjRmNmQzYTQ4YjA1Li43MGU2MWJjMzVjNjAgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3N0b2xlbi5jCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3N0b2xlbi5jCkBAIC01OTUsOCArNTk1LDggQEAgX2k5 MTVfZ2VtX29iamVjdF9jcmVhdGVfc3RvbGVuKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJaWYg KG9iai0+cGFnZXMgPT0gTlVMTCkKIAkJZ290byBjbGVhbnVwOwogCi0Jb2JqLT5nZXRfcGFnZS5z ZyA9IG9iai0+cGFnZXMtPnNnbDsKLQlvYmotPmdldF9wYWdlLmxhc3QgPSAwOworCW9iai0+Z2V0 X3BhZ2Uuc2dfcG9zID0gb2JqLT5wYWdlcy0+c2dsOworCW9iai0+Z2V0X3BhZ2Uuc2dfaWR4ID0g MDsKIAogCWk5MTVfZ2VtX29iamVjdF9waW5fcGFnZXMob2JqKTsKIAlvYmotPnN0b2xlbiA9IHN0 b2xlbjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3VzZXJwdHIu YyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3VzZXJwdHIuYwppbmRleCAxYzg5MWI5 MmFjODAuLmNiOTU3ODlkYTc2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9nZW1fdXNlcnB0ci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3VzZXJw dHIuYwpAQCAtNTI2LDggKzUyNiw4IEBAIF9faTkxNV9nZW1fdXNlcnB0cl9nZXRfcGFnZXNfd29y a2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqX3dvcmspCiAJCQlpZiAocmV0ID09IDApIHsKIAkJCQls aXN0X2FkZF90YWlsKCZvYmotPmdsb2JhbF9saXN0LAogCQkJCQkgICAgICAmdG9faTkxNShkZXYp LT5tbS51bmJvdW5kX2xpc3QpOwotCQkJCW9iai0+Z2V0X3BhZ2Uuc2cgPSBvYmotPnBhZ2VzLT5z Z2w7Ci0JCQkJb2JqLT5nZXRfcGFnZS5sYXN0ID0gMDsKKwkJCQlvYmotPmdldF9wYWdlLnNnX3Bv cyA9IG9iai0+cGFnZXMtPnNnbDsKKwkJCQlvYmotPmdldF9wYWdlLnNnX2lkeCA9IDA7CiAJCQkJ cGlubmVkID0gMDsKIAkJCX0KIAkJfQotLSAKMi45LjMKCl9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4 QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWls bWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=