From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: [PATCH 14/41] drm/i915: Use a radixtree for random access to the object's backing storage Date: Fri, 14 Oct 2016 13:18:06 +0100 Message-ID: <20161014121833.439-15-chris@chris-wilson.co.uk> References: <20161014121833.439-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-x242.google.com (mail-lf0-x242.google.com [IPv6:2a00:1450:4010:c07::242]) by gabe.freedesktop.org (Postfix) with ESMTPS id 7D8C16EC27 for ; Fri, 14 Oct 2016 12:18:56 +0000 (UTC) Received: by mail-lf0-x242.google.com with SMTP id x79so17980724lff.2 for ; Fri, 14 Oct 2016 05:18:56 -0700 (PDT) In-Reply-To: <20161014121833.439-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 eHRyZWUgZm9yIGNsYXJpdHksIGhvcGVmdWxseS4KClNpZ25lZC1vZmYtYnk6IENocmlzIFdpbHNv biA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZHJ2LmggICAgICAgICB8ICA2OSArKysrKy0tLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZ2VtLmMgICAgICAgICB8IDE3OSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0t LQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fc3RvbGVuLmMgIHwgICA0ICstCiBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV91c2VycHRyLmMgfCAgIDQgKy0KIDQgZmlsZXMgY2hh bmdlZCwgMTkzIGluc2VydGlvbnMoKyksIDYzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2Rydi5oCmluZGV4IDM4NDY3ZGRlMWVmZS4uNTNjZjRiMGU1MzU5IDEwMDY0NAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZHJ2LmgKQEAgLTIyNzMsOSArMjI3MywxMiBAQCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVj dCB7CiAKIAlzdHJ1Y3Qgc2dfdGFibGUgKnBhZ2VzOwogCWludCBwYWdlc19waW5fY291bnQ7Ci0J c3RydWN0IGdldF9wYWdlIHsKLQkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKLQkJaW50IGxhc3Q7 CisJc3RydWN0IGk5MTVfZ2VtX29iamVjdF9wYWdlX2l0ZXIgeworCQlzdHJ1Y3Qgc2NhdHRlcmxp c3QgKnNnX3BvczsKKwkJdW5zaWduZWQgbG9uZyBzZ19pZHg7CisKKwkJc3RydWN0IHJhZGl4X3Ry ZWVfcm9vdCByYWRpeDsKKwkJc3BpbmxvY2tfdCBsb2NrOwogCX0gZ2V0X3BhZ2U7CiAJdm9pZCAq bWFwcGluZzsKIApAQCAtMjQ3OCw2ICsyNDgxLDE0IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUg c3RydWN0IHNndF9pdGVyIHsKIAlyZXR1cm4gczsKIH0KIAorc3RhdGljIGlubGluZSBzdHJ1Y3Qg c2NhdHRlcmxpc3QgKl9fX19zZ19uZXh0KHN0cnVjdCBzY2F0dGVybGlzdCAqc2cpCit7CisJKytz ZzsKKwlpZiAodW5saWtlbHkoc2dfaXNfY2hhaW4oc2cpKSkKKwkJc2cgPSBzZ19jaGFpbl9wdHIo c2cpOworCXJldHVybiBzZzsKK30KKwogLyoqCiAgKiBfX3NnX25leHQgLSByZXR1cm4gdGhlIG5l eHQgc2NhdHRlcmxpc3QgZW50cnkgaW4gYSBsaXN0CiAgKiBAc2c6CQlUaGUgY3VycmVudCBzZyBl bnRyeQpAQCAtMjQ5Miw5ICsyNTAzLDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2NhdHRlcmxp c3QgKl9fc2dfbmV4dChzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnKQogI2lmZGVmIENPTkZJR19ERUJV R19TRwogCUJVR19PTihzZy0+c2dfbWFnaWMgIT0gU0dfTUFHSUMpOwogI2VuZGlmCi0JcmV0dXJu IHNnX2lzX2xhc3Qoc2cpID8gTlVMTCA6Ci0JCWxpa2VseSghc2dfaXNfY2hhaW4oKytzZykpID8g c2cgOgotCQlzZ19jaGFpbl9wdHIoc2cpOworCXJldHVybiBzZ19pc19sYXN0KHNnKSA/IE5VTEwg OiBfX19fc2dfbmV4dChzZyk7CiB9CiAKIC8qKgpAQCAtMzE3MCw0NSArMzE3OSwyMSBAQCBzdGF0 aWMgaW5saW5lIGludCBfX3NnX3BhZ2VfY291bnQoc3RydWN0IHNjYXR0ZXJsaXN0ICpzZykKIAly ZXR1cm4gc2ctPmxlbmd0aCA+PiBQQUdFX1NISUZUOwogfQogCi1zdHJ1Y3QgcGFnZSAqCi1pOTE1 X2dlbV9vYmplY3RfZ2V0X2RpcnR5X3BhZ2Uoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9i aiwgaW50IG4pOwotCi1zdGF0aWMgaW5saW5lIGRtYV9hZGRyX3QKLWk5MTVfZ2VtX29iamVjdF9n ZXRfZG1hX2FkZHJlc3Moc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwgaW50IG4pCi17 Ci0JaWYgKG4gPCBvYmotPmdldF9wYWdlLmxhc3QpIHsKLQkJb2JqLT5nZXRfcGFnZS5zZyA9IG9i ai0+cGFnZXMtPnNnbDsKLQkJb2JqLT5nZXRfcGFnZS5sYXN0ID0gMDsKLQl9Ci0KLQl3aGlsZSAo b2JqLT5nZXRfcGFnZS5sYXN0ICsgX19zZ19wYWdlX2NvdW50KG9iai0+Z2V0X3BhZ2Uuc2cpIDw9 IG4pIHsKLQkJb2JqLT5nZXRfcGFnZS5sYXN0ICs9IF9fc2dfcGFnZV9jb3VudChvYmotPmdldF9w YWdlLnNnKyspOwotCQlpZiAodW5saWtlbHkoc2dfaXNfY2hhaW4ob2JqLT5nZXRfcGFnZS5zZykp KQotCQkJb2JqLT5nZXRfcGFnZS5zZyA9IHNnX2NoYWluX3B0cihvYmotPmdldF9wYWdlLnNnKTsK LQl9Ci0KLQlyZXR1cm4gc2dfZG1hX2FkZHJlc3Mob2JqLT5nZXRfcGFnZS5zZykgKyAoKG4gLSBv YmotPmdldF9wYWdlLmxhc3QpIDw8IFBBR0VfU0hJRlQpOwotfQotCi1zdGF0aWMgaW5saW5lIHN0 cnVjdCBwYWdlICoKLWk5MTVfZ2VtX29iamVjdF9nZXRfcGFnZShzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCAqb2JqLCBpbnQgbikKLXsKLQlpZiAoV0FSTl9PTihuID49IG9iai0+YmFzZS5zaXpl ID4+IFBBR0VfU0hJRlQpKQotCQlyZXR1cm4gTlVMTDsKK3N0cnVjdCBzY2F0dGVybGlzdCAqCitp OTE1X2dlbV9vYmplY3RfZ2V0X3NnKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCisJ CSAgICAgICB1bnNpZ25lZCBsb25nIG4sIHVuc2lnbmVkIGludCAqb2Zmc2V0KTsKIAotCWlmIChu IDwgb2JqLT5nZXRfcGFnZS5sYXN0KSB7Ci0JCW9iai0+Z2V0X3BhZ2Uuc2cgPSBvYmotPnBhZ2Vz LT5zZ2w7Ci0JCW9iai0+Z2V0X3BhZ2UubGFzdCA9IDA7Ci0JfQorc3RydWN0IHBhZ2UgKgoraTkx NV9nZW1fb2JqZWN0X2dldF9wYWdlKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCisJ CQkgdW5zaWduZWQgbG9uZyBuKTsKIAotCXdoaWxlIChvYmotPmdldF9wYWdlLmxhc3QgKyBfX3Nn X3BhZ2VfY291bnQob2JqLT5nZXRfcGFnZS5zZykgPD0gbikgewotCQlvYmotPmdldF9wYWdlLmxh c3QgKz0gX19zZ19wYWdlX2NvdW50KG9iai0+Z2V0X3BhZ2Uuc2crKyk7Ci0JCWlmICh1bmxpa2Vs eShzZ19pc19jaGFpbihvYmotPmdldF9wYWdlLnNnKSkpCi0JCQlvYmotPmdldF9wYWdlLnNnID0g c2dfY2hhaW5fcHRyKG9iai0+Z2V0X3BhZ2Uuc2cpOwotCX0KK3N0cnVjdCBwYWdlICoKK2k5MTVf Z2VtX29iamVjdF9nZXRfZGlydHlfcGFnZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2Jq LAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgbik7CiAKLQlyZXR1cm4gbnRoX3BhZ2Uoc2dfcGFn ZShvYmotPmdldF9wYWdlLnNnKSwgbiAtIG9iai0+Z2V0X3BhZ2UubGFzdCk7Ci19CitkbWFfYWRk cl90CitpOTE1X2dlbV9vYmplY3RfZ2V0X2RtYV9hZGRyZXNzKHN0cnVjdCBkcm1faTkxNV9nZW1f b2JqZWN0ICpvYmosCisJCQkJdW5zaWduZWQgbG9uZyBuKTsKIAogc3RhdGljIGlubGluZSB2b2lk IGk5MTVfZ2VtX29iamVjdF9waW5fcGFnZXMoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9i aikKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCmluZGV4IDk1NzgxYzYzZjYwNS4uZDczNmJlYjRk NTdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKQEAgLTIzMzMsNiArMjMzMywxNSBAQCBpOTE1 X2dlbV9vYmplY3RfcHV0X3BhZ2VzX2d0dChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2Jq KQogCWtmcmVlKG9iai0+cGFnZXMpOwogfQogCitzdGF0aWMgdm9pZCBfX2k5MTVfZ2VtX29iamVj dF9yZXNldF9wYWdlX2l0ZXIoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKK3sKKwlz dHJ1Y3QgcmFkaXhfdHJlZV9pdGVyIGl0ZXI7CisJdm9pZCAqKnNsb3Q7CisKKwlyYWRpeF90cmVl X2Zvcl9lYWNoX3Nsb3Qoc2xvdCwgJm9iai0+Z2V0X3BhZ2UucmFkaXgsICZpdGVyLCAwKQorCQly YWRpeF90cmVlX2RlbGV0ZSgmb2JqLT5nZXRfcGFnZS5yYWRpeCwgaXRlci5pbmRleCk7Cit9CisK IGludAogaTkxNV9nZW1fb2JqZWN0X3B1dF9wYWdlcyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVj dCAqb2JqKQogewpAQCAtMjM2NSw2ICsyMzc0LDggQEAgaTkxNV9nZW1fb2JqZWN0X3B1dF9wYWdl cyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQogCQlvYmotPm1hcHBpbmcgPSBOVUxM OwogCX0KIAorCV9faTkxNV9nZW1fb2JqZWN0X3Jlc2V0X3BhZ2VfaXRlcihvYmopOworCiAJb3Bz LT5wdXRfcGFnZXMob2JqKTsKIAlvYmotPnBhZ2VzID0gTlVMTDsKIApAQCAtMjUzNCw4ICsyNTQ1 LDggQEAgaTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlcyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVj dCAqb2JqKQogCiAJbGlzdF9hZGRfdGFpbCgmb2JqLT5nbG9iYWxfbGlzdCwgJmRldl9wcml2LT5t bS51bmJvdW5kX2xpc3QpOwogCi0Jb2JqLT5nZXRfcGFnZS5zZyA9IG9iai0+cGFnZXMtPnNnbDsK LQlvYmotPmdldF9wYWdlLmxhc3QgPSAwOworCW9iai0+Z2V0X3BhZ2Uuc2dfcG9zID0gb2JqLT5w YWdlcy0+c2dsOworCW9iai0+Z2V0X3BhZ2Uuc2dfaWR4ID0gMDsKIAogCXJldHVybiAwOwogfQpA QCAtNDMzOCw2ICs0MzQ5LDggQEAgdm9pZCBpOTE1X2dlbV9vYmplY3RfaW5pdChzdHJ1Y3QgZHJt X2k5MTVfZ2VtX29iamVjdCAqb2JqLAogCiAJb2JqLT5mcm9udGJ1ZmZlcl9nZ3R0X29yaWdpbiA9 IE9SSUdJTl9HVFQ7CiAJb2JqLT5tYWR2ID0gSTkxNV9NQURWX1dJTExORUVEOworCUlOSVRfUkFE SVhfVFJFRSgmb2JqLT5nZXRfcGFnZS5yYWRpeCwgR0ZQX0FUT01JQyB8IF9fR0ZQX05PV0FSTik7 CisJc3Bpbl9sb2NrX2luaXQoJm9iai0+Z2V0X3BhZ2UubG9jayk7CiAKIAlpOTE1X2dlbV9pbmZv X2FkZF9vYmoodG9faTkxNShvYmotPmJhc2UuZGV2KSwgb2JqLT5iYXNlLnNpemUpOwogfQpAQCAt NTAxNiwyMSArNTAyOSw2IEBAIHZvaWQgaTkxNV9nZW1fdHJhY2tfZmIoc3RydWN0IGRybV9pOTE1 X2dlbV9vYmplY3QgKm9sZCwKIAl9CiB9CiAKLS8qIExpa2UgaTkxNV9nZW1fb2JqZWN0X2dldF9w YWdlKCksIGJ1dCBtYXJrIHRoZSByZXR1cm5lZCBwYWdlIGRpcnR5ICovCi1zdHJ1Y3QgcGFnZSAq Ci1pOTE1X2dlbV9vYmplY3RfZ2V0X2RpcnR5X3BhZ2Uoc3RydWN0IGRybV9pOTE1X2dlbV9vYmpl Y3QgKm9iaiwgaW50IG4pCi17Ci0Jc3RydWN0IHBhZ2UgKnBhZ2U7Ci0KLQkvKiBPbmx5IGRlZmF1 bHQgb2JqZWN0cyBoYXZlIHBlci1wYWdlIGRpcnR5IHRyYWNraW5nICovCi0JaWYgKFdBUk5fT04o IWk5MTVfZ2VtX29iamVjdF9oYXNfc3RydWN0X3BhZ2Uob2JqKSkpCi0JCXJldHVybiBOVUxMOwot Ci0JcGFnZSA9IGk5MTVfZ2VtX29iamVjdF9nZXRfcGFnZShvYmosIG4pOwotCXNldF9wYWdlX2Rp cnR5KHBhZ2UpOwotCXJldHVybiBwYWdlOwotfQotCiAvKiBBbGxvY2F0ZSBhIG5ldyBHRU0gb2Jq ZWN0IGFuZCBmaWxsIGl0IHdpdGggdGhlIHN1cHBsaWVkIGRhdGEgKi8KIHN0cnVjdCBkcm1faTkx NV9nZW1fb2JqZWN0ICoKIGk5MTVfZ2VtX29iamVjdF9jcmVhdGVfZnJvbV9kYXRhKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYsCkBAIC01MDcxLDMgKzUwNjksMTUwIEBAIGZhaWw6CiAJaTkxNV9nZW1f b2JqZWN0X3B1dChvYmopOwogCXJldHVybiBFUlJfUFRSKHJldCk7CiB9CisKK3N0cnVjdCBzY2F0 dGVybGlzdCAqCitpOTE1X2dlbV9vYmplY3RfZ2V0X3NnKHN0cnVjdCBkcm1faTkxNV9nZW1fb2Jq ZWN0ICpvYmosCisJCSAgICAgICB1bnNpZ25lZCBsb25nIG4sCisJCSAgICAgICB1bnNpZ25lZCBp bnQgKm9mZnNldCkKK3sKKwlzdHJ1Y3QgaTkxNV9nZW1fb2JqZWN0X3BhZ2VfaXRlciAqaXRlciA9 ICZvYmotPmdldF9wYWdlOworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CisJdW5zaWduZWQgbG9u ZyBpZHgsIGNvdW50OworCisJR0VNX0JVR19PTihuID49IG9iai0+YmFzZS5zaXplID4+IFBBR0Vf U0hJRlQpOworCUdFTV9CVUdfT04ob2JqLT5wYWdlc19waW5fY291bnQgPT0gMCk7CisKKwkvKiBB cyB3ZSBpdGVyYXRlIGZvcndhcmQgdGhyb3VnaCB0aGUgc2csIHdlIHJlY29yZCBlYWNoIGVudHJ5 IGluIGEKKwkgKiByYWRpeHRyZWUgZm9yIHF1aWNrIHJlcGVhdGVkIChiYWNrd2FyZHMpIGxvb2t1 cHMuIElmIHdlIGhhdmUgc2VlbgorCSAqIHRoaXMgaW5kZXggcHJldmlvdXNseSwgd2Ugd2lsbCBo YXZlIGFuIGVudHJ5IGZvciBpdC4KKwkgKgorCSAqIEluaXRpYWwgbG9va3VwIGlzIE8oTiksIGJ1 dCB0aGlzIGlzIGFtb3J0aXplZCB0byBPKDEpIGZvcgorCSAqIHNlcXVlbnRpYWwgcGFnZSBhY2Nl c3MgKHdoZXJlIGVhY2ggbmV3IHJlcXVlc3QgaXMgY29uc2VjdXRpdmUKKwkgKiB0byB0aGUgcHJl dmlvdXMgb25lKS4gUmVwZWF0ZWQgbG9va3VwcyBhcmUgTyhsZyhvYmotPmJhc2Uuc2l6ZSkpLAor CSAqIGkuZS4gTygxKSB3aXRoIGEgbGFyZ2UgY29uc3RhbnQhCisJICovCisJaWYgKG4gPCBSRUFE X09OQ0UoaXRlci0+c2dfaWR4KSkKKwkJZ290byBsb29rdXA7CisKKwlzcGluX2xvY2soJml0ZXIt PmxvY2spOworCisJc2cgPSBpdGVyLT5zZ19wb3M7CisJaWR4ID0gaXRlci0+c2dfaWR4OworCWNv dW50ID0gX19zZ19wYWdlX2NvdW50KHNnKTsKKworCXdoaWxlIChpZHggKyBjb3VudCA8IG4pIHsK KwkJdW5zaWduZWQgbG9uZyBleGNlcHRpb24sIGk7CisJCWludCByZXQ7CisKKwkJLyogSWYgd2Ug Y2Fubm90IGFsbG9jYXRlIGFuZCBpbnNlcnQgdGhpcyBlbnRyeSwgb3IgdGhlCisJCSAqIGluZGl2 aWR1YWwgcGFnZXMgZnJvbSB0aGlzIHJhbmdlLCBjYW5jZWwgdXBkYXRpbmcgdGhlCisJCSAqIHNn X2lkeCBzbyB0aGF0IG9uIHRoaXMgbG9va3VwIHdlIGFyZSBmb3JjZWQgdG8gbGluZWFybHkKKwkJ ICogc2NhbiBvbndhcmRzLCBidXQgb24gZnV0dXJlIGxvb2t1cHMgd2Ugd2lsbCB0cnkgdGhlCisJ CSAqIGluc2VydGlvbiBhZ2FpbiAoaW4gd2hpY2ggY2FzZSB3ZSBuZWVkIHRvIGJlIGNhcmVmdWwg b2YKKwkJICogdGhlIGVycm9yIHJldHVybiByZXBvcnRpbmcgdGhhdCB3ZSBoYXZlIGFscmVhZHkg aW5zZXJ0ZWQKKwkJICogdGhpcyBpbmRleCkuCisJCSAqLworCQlyZXQgPSByYWRpeF90cmVlX2lu c2VydCgmaXRlci0+cmFkaXgsIGlkeCwgc2cpOworCQlpZiAocmV0ICYmIHJldCAhPSAtRUVYSVNU KQorCQkJZ290byBzY2FuOworCisJCWV4Y2VwdGlvbiA9CisJCQlSQURJWF9UUkVFX0VYQ0VQVElP TkFMX0VOVFJZIHwKKwkJCWlkeCA8PCBSQURJWF9UUkVFX0VYQ0VQVElPTkFMX1NISUZUOworCQlm b3IgKGkgPSAxOyBpIDwgY291bnQ7IGkrKykgeworCQkJcmV0ID0gcmFkaXhfdHJlZV9pbnNlcnQo Jml0ZXItPnJhZGl4LCBpZHggKyBpLAorCQkJCQkJKHZvaWQgKilleGNlcHRpb24pOworCQkJaWYg KHJldCAmJiByZXQgIT0gLUVFWElTVCkKKwkJCQlnb3RvIHNjYW47CisJCX0KKworCQlpZHggKz0g Y291bnQ7CisJCXNnID0gX19fX3NnX25leHQoc2cpOworCQljb3VudCA9IF9fc2dfcGFnZV9jb3Vu dChzZyk7CisJfQorCitzY2FuOgorCWl0ZXItPnNnX3BvcyA9IHNnOworCWl0ZXItPnNnX2lkeCA9 IGlkeDsKKworCXNwaW5fdW5sb2NrKCZpdGVyLT5sb2NrKTsKKworCWlmICh1bmxpa2VseShuIDwg aWR4KSkgLyogaW5zZXJ0aW9uIGNvbXBsZXRlZCBieSBhbm90aGVyIHRocmVhZCAqLworCQlnb3Rv IGxvb2t1cDsKKworCS8qIEluIGNhc2Ugd2UgZmFpbGVkIHRvIGluc2VydCB0aGUgZW50cnkgaW50 byB0aGUgcmFkaXh0cmVlLCB3ZSBuZWVkCisJICogdG8gbG9vayBiZXlvbmQgdGhlIGN1cnJlbnQg c2cuCisJICovCisJd2hpbGUgKGlkeCArIGNvdW50IDw9IG4pIHsKKwkJaWR4ICs9IGNvdW50Owor CQlzZyA9IF9fX19zZ19uZXh0KHNnKTsKKwkJY291bnQgPSBfX3NnX3BhZ2VfY291bnQoc2cpOwor CX0KKworCSpvZmZzZXQgPSBuIC0gaWR4OworCXJldHVybiBzZzsKKworbG9va3VwOgorCXJjdV9y ZWFkX2xvY2soKTsKKworCXNnID0gcmFkaXhfdHJlZV9sb29rdXAoJml0ZXItPnJhZGl4LCBuKTsK KwlHRU1fQlVHX09OKCFzZyk7CisKKwkvKiBJZiB0aGlzIGluZGV4IGlzIGluIHRoZSBtaWRkbGUg b2YgbXVsdGktcGFnZSBzZyBlbnRyeSwKKwkgKiB0aGUgcmFkaXh0cmVlIHdpbGwgY29udGFpbiBh biBleGNlcHRpb25hbCBlbnRyeSB0aGF0IHBvaW50cworCSAqIHRvIHRoZSBzdGFydCBvZiB0aGF0 IHJhbmdlLiBXZSB3aWxsIHJldHVybiB0aGUgcG9pbnRlciB0bworCSAqIHRoZSBiYXNlIHBhZ2Ug YW5kIHRoZSBvZmZzZXQgb2YgdGhpcyBwYWdlIHdpdGhpbiB0aGUKKwkgKiBzZyBlbnRyeSdzIHJh bmdlLgorCSAqLworCSpvZmZzZXQgPSAwOworCWlmICh1bmxpa2VseShyYWRpeF90cmVlX2V4Y2Vw dGlvbihzZykpKSB7CisJCXVuc2lnbmVkIGxvbmcgYmFzZSA9CisJCQkodW5zaWduZWQgbG9uZylz ZyA+PiBSQURJWF9UUkVFX0VYQ0VQVElPTkFMX1NISUZUOworCisJCXNnID0gcmFkaXhfdHJlZV9s b29rdXAoJml0ZXItPnJhZGl4LCBiYXNlKTsKKwkJR0VNX0JVR19PTighc2cpOworCisJCSpvZmZz ZXQgPSBuIC0gYmFzZTsKKwl9CisKKwlyY3VfcmVhZF91bmxvY2soKTsKKworCXJldHVybiBzZzsK K30KKworc3RydWN0IHBhZ2UgKgoraTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlKHN0cnVjdCBkcm1f aTkxNV9nZW1fb2JqZWN0ICpvYmosIHVuc2lnbmVkIGxvbmcgbikKK3sKKwlzdHJ1Y3Qgc2NhdHRl cmxpc3QgKnNnOworCXVuc2lnbmVkIGludCBvZmZzZXQ7CisKKwlHRU1fQlVHX09OKCFpOTE1X2dl bV9vYmplY3RfaGFzX3N0cnVjdF9wYWdlKG9iaikpOworCisJc2cgPSBpOTE1X2dlbV9vYmplY3Rf Z2V0X3NnKG9iaiwgbiwgJm9mZnNldCk7CisJcmV0dXJuIG50aF9wYWdlKHNnX3BhZ2Uoc2cpLCBv ZmZzZXQpOworfQorCisvKiBMaWtlIGk5MTVfZ2VtX29iamVjdF9nZXRfcGFnZSgpLCBidXQgbWFy ayB0aGUgcmV0dXJuZWQgcGFnZSBkaXJ0eSAqLworc3RydWN0IHBhZ2UgKgoraTkxNV9nZW1fb2Jq ZWN0X2dldF9kaXJ0eV9wYWdlKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCisJCQkg ICAgICAgdW5zaWduZWQgbG9uZyBuKQoreworCXN0cnVjdCBwYWdlICpwYWdlOworCisJcGFnZSA9 IGk5MTVfZ2VtX29iamVjdF9nZXRfcGFnZShvYmosIG4pOworCWlmICghb2JqLT5kaXJ0eSkKKwkJ c2V0X3BhZ2VfZGlydHkocGFnZSk7CisKKwlyZXR1cm4gcGFnZTsKK30KKworZG1hX2FkZHJfdAor aTkxNV9nZW1fb2JqZWN0X2dldF9kbWFfYWRkcmVzcyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVj dCAqb2JqLAorCQkJCXVuc2lnbmVkIGxvbmcgbikKK3sKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNn OworCXVuc2lnbmVkIGludCBvZmZzZXQ7CisKKwlzZyA9IGk5MTVfZ2VtX29iamVjdF9nZXRfc2co b2JqLCBuLCAmb2Zmc2V0KTsKKwlyZXR1cm4gc2dfZG1hX2FkZHJlc3Moc2cpICsgKG9mZnNldCA8 PCBQQUdFX1NISUZUKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf Z2VtX3N0b2xlbi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fc3RvbGVuLmMKaW5k ZXggZjRmNmQzYTQ4YjA1Li43MGU2MWJjMzVjNjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZ2VtX3N0b2xlbi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf Z2VtX3N0b2xlbi5jCkBAIC01OTUsOCArNTk1LDggQEAgX2k5MTVfZ2VtX29iamVjdF9jcmVhdGVf c3RvbGVuKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJaWYgKG9iai0+cGFnZXMgPT0gTlVMTCkK IAkJZ290byBjbGVhbnVwOwogCi0Jb2JqLT5nZXRfcGFnZS5zZyA9IG9iai0+cGFnZXMtPnNnbDsK LQlvYmotPmdldF9wYWdlLmxhc3QgPSAwOworCW9iai0+Z2V0X3BhZ2Uuc2dfcG9zID0gb2JqLT5w YWdlcy0+c2dsOworCW9iai0+Z2V0X3BhZ2Uuc2dfaWR4ID0gMDsKIAogCWk5MTVfZ2VtX29iamVj dF9waW5fcGFnZXMob2JqKTsKIAlvYmotPnN0b2xlbiA9IHN0b2xlbjsKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3VzZXJwdHIuYyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZ2VtX3VzZXJwdHIuYwppbmRleCAxYzg5MWI5MmFjODAuLmNiOTU3ODlkYTc2ZSAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fdXNlcnB0ci5jCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3VzZXJwdHIuYwpAQCAtNTI2LDggKzUyNiw4 IEBAIF9faTkxNV9nZW1fdXNlcnB0cl9nZXRfcGFnZXNfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVj dCAqX3dvcmspCiAJCQlpZiAocmV0ID09IDApIHsKIAkJCQlsaXN0X2FkZF90YWlsKCZvYmotPmds b2JhbF9saXN0LAogCQkJCQkgICAgICAmdG9faTkxNShkZXYpLT5tbS51bmJvdW5kX2xpc3QpOwot CQkJCW9iai0+Z2V0X3BhZ2Uuc2cgPSBvYmotPnBhZ2VzLT5zZ2w7Ci0JCQkJb2JqLT5nZXRfcGFn ZS5sYXN0ID0gMDsKKwkJCQlvYmotPmdldF9wYWdlLnNnX3BvcyA9IG9iai0+cGFnZXMtPnNnbDsK KwkJCQlvYmotPmdldF9wYWdlLnNnX2lkeCA9IDA7CiAJCQkJcGlubmVkID0gMDsKIAkJCX0KIAkJ fQotLSAKMi45LjMKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9y ZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdm eAo=