From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTPS id 8E0746E3FE for ; Tue, 20 Jul 2021 14:12:50 +0000 (UTC) From: Andrzej Turko Date: Tue, 20 Jul 2021 16:12:31 +0200 Message-Id: <20210720141232.12812-4-andrzej.turko@linux.intel.com> In-Reply-To: <20210720141232.12812-1-andrzej.turko@linux.intel.com> References: <20210720141232.12812-1-andrzej.turko@linux.intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t 3/4] lib/intel_allocator_bst: Implement the allocator with a BST List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: igt-dev@lists.freedesktop.org List-ID: VGhpcyBpbXBsZW1lbnRzIGFuIGFsdGVybmF0aXZlIHRvIHRoZSBzaW1wbGUgYWxsb2NhdG9yLgpU aGUgQlNUIGFsbG9jYXRvciBmb2xsb3dzIGJlc3QtZml0IHN0cmF0ZWd5IGluIG9yZGVyIHRvCnVz ZSB0aGUgYWRkcmVzcyBzcGFjZSBtb3JlIGVmZmVjdGl2ZWx5LgpUaGUgdXNlIG9mIGEgYmluYXJ5 IHNlYXJjaCB0cmVlIHNwZWVkcyB1cCBmaW5kaW5nIGZyZWUKYmxvY2tzIG9mIG1lbW9yeSAoY29t cGFyZWQgdG8gYSBsaXN0KS4KClNpZ25lZC1vZmYtYnk6IEFuZHJ6ZWogVHVya28gPGFuZHJ6ZWou dHVya29AbGludXguaW50ZWwuY29tPgpDYzogWmJpZ25pZXcgS2VtcGN6ecWEc2tpIDx6Ymlnbmll dy5rZW1wY3p5bnNraUBpbnRlbC5jb20+Ci0tLQogbGliL2ludGVsX2FsbG9jYXRvci5jICAgICB8 ICAgNyArCiBsaWIvaW50ZWxfYWxsb2NhdG9yLmggICAgIHwgICAxICsKIGxpYi9pbnRlbF9hbGxv Y2F0b3JfYnN0LmMgfCA2NzIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysK IGxpYi9tZXNvbi5idWlsZCAgICAgICAgICAgfCAgIDEgKwogNCBmaWxlcyBjaGFuZ2VkLCA2ODEg aW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9pbnRlbF9hbGxvY2F0b3JfYnN0 LmMKCmRpZmYgLS1naXQgYS9saWIvaW50ZWxfYWxsb2NhdG9yLmMgYi9saWIvaW50ZWxfYWxsb2Nh dG9yLmMKaW5kZXggMTMzMTc2ZWQ0Li4yZWY0ODdhMDUgMTAwNjQ0Ci0tLSBhL2xpYi9pbnRlbF9h bGxvY2F0b3IuYworKysgYi9saWIvaW50ZWxfYWxsb2NhdG9yLmMKQEAgLTcxLDYgKzcxLDkgQEAg aW50ZWxfYWxsb2NhdG9yX3JhbmRvbV9jcmVhdGUoaW50IGZkLCB1aW50NjRfdCBzdGFydCwgdWlu dDY0X3QgZW5kKTsKIHN0cnVjdCBpbnRlbF9hbGxvY2F0b3IgKgogaW50ZWxfYWxsb2NhdG9yX3Np bXBsZV9jcmVhdGUoaW50IGZkLCB1aW50NjRfdCBzdGFydCwgdWludDY0X3QgZW5kLAogCQkJICAg ICAgZW51bSBhbGxvY2F0b3Jfc3RyYXRlZ3kgc3RyYXRlZ3kpOworc3RydWN0IGludGVsX2FsbG9j YXRvciAqCitpbnRlbF9hbGxvY2F0b3JfYnN0X2NyZWF0ZShpbnQgZmQsIHVpbnQ2NF90IHN0YXJ0 LCB1aW50NjRfdCBlbmQsCisJCQkgICBlbnVtIGFsbG9jYXRvcl9zdHJhdGVneSBzdHJhdGVneSk7 CiAKIC8qCiAgKiBJbnN0ZWFkIG9mIHRyeWluZyB0byBmaW5kIGZpcnN0IGVtcHR5IGhhbmRsZSBq dXN0IGdldCBuZXcgb25lLiBBc3N1bWluZwpAQCAtMzExLDYgKzMxNCwxMCBAQCBzdGF0aWMgc3Ry dWN0IGludGVsX2FsbG9jYXRvciAqaW50ZWxfYWxsb2NhdG9yX2NyZWF0ZShpbnQgZmQsCiAJCWlh bCA9IGludGVsX2FsbG9jYXRvcl9zaW1wbGVfY3JlYXRlKGZkLCBzdGFydCwgZW5kLAogCQkJCQkJ ICAgIGFsbG9jYXRvcl9zdHJhdGVneSk7CiAJCWJyZWFrOworCWNhc2UgSU5URUxfQUxMT0NBVE9S X0JTVDoKKwkJaWFsID0gaW50ZWxfYWxsb2NhdG9yX2JzdF9jcmVhdGUoZmQsIHN0YXJ0LCBlbmQs CisJCQkJCQkgYWxsb2NhdG9yX3N0cmF0ZWd5KTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJaWd0 X2Fzc2VydF9mKGlhbCwgIkFsbG9jYXRvciB0eXBlICVkIG5vdCBpbXBsZW1lbnRlZFxuIiwKIAkJ CSAgICAgYWxsb2NhdG9yX3R5cGUpOwpkaWZmIC0tZ2l0IGEvbGliL2ludGVsX2FsbG9jYXRvci5o IGIvbGliL2ludGVsX2FsbG9jYXRvci5oCmluZGV4IDdkOWQwMTEyMy4uOTNlY2JjM2U0IDEwMDY0 NAotLS0gYS9saWIvaW50ZWxfYWxsb2NhdG9yLmgKKysrIGIvbGliL2ludGVsX2FsbG9jYXRvci5o CkBAIC0yMTEsNiArMjExLDcgQEAgdm9pZCBpbnRlbF9hbGxvY2F0b3JfcHJpbnQodWludDY0X3Qg YWxsb2NhdG9yX2hhbmRsZSk7CiAjZGVmaW5lIElOVEVMX0FMTE9DQVRPUl9SRUxPQyAgMQogI2Rl ZmluZSBJTlRFTF9BTExPQ0FUT1JfUkFORE9NIDIKICNkZWZpbmUgSU5URUxfQUxMT0NBVE9SX1NJ TVBMRSAzCisjZGVmaW5lIElOVEVMX0FMTE9DQVRPUl9CU1QgICAgNAogCiAjZGVmaW5lIEdFTjhf R1RUX0FERFJFU1NfV0lEVEggNDgKIApkaWZmIC0tZ2l0IGEvbGliL2ludGVsX2FsbG9jYXRvcl9i c3QuYyBiL2xpYi9pbnRlbF9hbGxvY2F0b3JfYnN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwLi5jOWM5N2U2NWUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvaW50ZWxfYWxs b2NhdG9yX2JzdC5jCkBAIC0wLDAgKzEsNjcyIEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogTUlUCisvKgorICogQ29weXJpZ2h0IMKpIDIwMjEgSW50ZWwgQ29ycG9yYXRpb24KKyAqLwor CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSAiaWd0LmgiCisjaW5jbHVkZSAiaWd0X21h cC5oIgorI2luY2x1ZGUgImlndF9ic3QuaCIKKyNpbmNsdWRlICJpbnRlbF9hbGxvY2F0b3IuaCIK KworLyogVGhlIGFkZHJlc3NlcyBvZiBhbGxvY2F0ZWQgb2JqZWN0cyB3aWxsIGJlCisgKiBzdHJp Y3RseSBzbWFsbGVyIHRoYW4gdGhpcyB2YWx1ZSAodGhlIHVwcGVyCisgKiBlbmQgb2YgdGhlIGFk ZHJlc3MgcmFuZ2UgY2Fubm90IGV4Y2VlZCBpdCkuCisgKiBUaGlzIGlzIHRvIGVuc3VyZSB0aGVy ZSBhcmUgbm8gb3ZlcmZsb3dzCisgKiBhbmQgcHJldmVudCB0aGUgZXhpc3RlbmNlIG9mIGEgaG9s ZSBvcgorICogYmxvY2sgb2Ygc2l6ZSAyXjY0LgorICoKKyAqIFRoYW5rcyB0byB0aGlzIC0xIGNh biBiZSByZXR1cm5lZCBmcm9tIGFsbG9jCisgKiB0byBpbmRpY2F0ZSB0aGF0IGFsbG9jYXRvciBo YXMgZmFpbGVkIHRvIGZpbmQKKyAqIGVub3VnaCBzcGFjZSBmb3IgdGhlIG9iamVjdC4KKyAqCisg KiBJQUxCX01BWF9BRERSIGNhbiBiZSBzZXQgdG8gYW55IHBvc2l0aXZlCisgKiBpbnRlZ2VyIHNt YWxsZXIgdGhhbiAyXjY0LgorICovCisjZGVmaW5lIElBTEJfTUFYX0FERFIgKDF1bGw8PDYzKQor CisjZGVmaW5lIFJFU0VSVkVEIDQwOTYKKworLyogQXZvaWQgY29tcGlsYXRpb24gd2FybmluZyAq Lworc3RydWN0IGludGVsX2FsbG9jYXRvciAqCitpbnRlbF9hbGxvY2F0b3JfYnN0X2NyZWF0ZShp bnQgZmQsIHVpbnQ2NF90IHN0YXJ0LCB1aW50NjRfdCBlbmQsCisJCQkgICBlbnVtIGFsbG9jYXRv cl9zdHJhdGVneSBzdHJhdGVneSk7CisKK3N0cnVjdCBpbnRlbF9hbGxvY2F0b3JfYnN0IHsKKwlz dHJ1Y3QgaWd0X21hcCAqb2JqZWN0czsKKwlzdHJ1Y3QgaWd0X21hcCAqcmVzZXJ2ZWQ7CisJc3Ry dWN0IGlndF9ic3QgKmJ5X3NpemU7CisJc3RydWN0IGlndF9ic3QgKmJ5X29mZnNldDsKKworCXVp bnQ2NF90IHN0YXJ0OworCXVpbnQ2NF90IGVuZDsKKworCS8qIHN0YXRpc3RpY3MgKi8KKwl1aW50 NjRfdCB0b3RhbF9zaXplOworCXVpbnQ2NF90IGFsbG9jYXRlZF9zaXplOworCXVpbnQ2NF90IGFs bG9jYXRlZF9vYmplY3RzOworCXVpbnQ2NF90IHJlc2VydmVkX3NpemU7CisJdWludDY0X3QgcmVz ZXJ2ZWRfYXJlYXM7Cit9OworCitzdHJ1Y3QgaW50ZWxfYWxsb2NhdG9yX2JzdF92bWFfaG9sZSB7 CisKKwkvKiBwb2ludGVyIHRvIHRoZSBub2RlIGluIHRoZSBieV9zaXplIGJzdCAqLworCXZvaWQg KnNpemVfcHRyOworCisJLyogcG9pbnRlciB0byB0aGUgbm9kZSBpbiB0aGUgYnlfb2Zmc2V0IGJz dCAqLworCXZvaWQgKm9mZnNldF9wdHI7CisKKwl1aW50NjRfdCBzaXplOworCXVpbnQ2NF90IG9m ZnNldDsKK307CisKK3N0cnVjdCBpbnRlbF9hbGxvY2F0b3JfcmVjb3JkIHsKKwl1aW50MzJfdCBo YW5kbGU7CisJdWludDY0X3Qgb2Zmc2V0OworCXVpbnQ2NF90IHNpemU7Cit9OworCisvKiAyXjMx ICsgMl4yOSAtIDJeMjUgKyAyXjIyIC0gMl4xOSAtIDJeMTYgKyAxICovCisjZGVmaW5lIEdPTERF Tl9SQVRJT19QUklNRV8zMiAweDllMzcwMDAxVUwKKworLyogIDJeNjMgKyAyXjYxIC0gMl41NyAr IDJeNTQgLSAyXjUxIC0gMl4xOCArIDEgKi8KKyNkZWZpbmUgR09MREVOX1JBVElPX1BSSU1FXzY0 IDB4OWUzN2ZmZmZmZmZjMDAwMVVMTAorCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IGhhc2hfaGFu ZGxlcyhjb25zdCB2b2lkICp2YWwpCit7CisJdWludDMyX3QgaGFzaCA9ICoodWludDMyX3QgKikg dmFsOworCisJaGFzaCA9IGhhc2ggKiBHT0xERU5fUkFUSU9fUFJJTUVfMzI7CisJcmV0dXJuIGhh c2g7Cit9CisKK3N0YXRpYyBpbnQgZXF1YWxfaGFuZGxlcyhjb25zdCB2b2lkICphLCBjb25zdCB2 b2lkICpiKQoreworCXVpbnQzMl90ICprZXkxID0gKHVpbnQzMl90ICopIGEsICprZXkyID0gKHVp bnQzMl90ICopIGI7CisKKwlyZXR1cm4gKmtleTEgPT0gKmtleTI7Cit9CisKK3N0YXRpYyBpbmxp bmUgdWludDMyX3QgaGFzaF9vZmZzZXRzKGNvbnN0IHZvaWQgKnZhbCkKK3sKKwl1aW50NjRfdCBo YXNoID0gKih1aW50NjRfdCAqKSB2YWw7CisKKwloYXNoID0gaGFzaCAqIEdPTERFTl9SQVRJT19Q UklNRV82NDsKKwkvKiBIaWdoIGJpdHMgYXJlIG1vcmUgcmFuZG9tLCBzbyB1c2UgdGhlbS4gKi8K KwlyZXR1cm4gaGFzaCA+PiAzMjsKK30KKworc3RhdGljIGludCBlcXVhbF9vZmZzZXRzKGNvbnN0 IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCit7CisJdWludDY0X3QgKmtleTEgPSAodWludDY0X3Qg KikgYSwgKmtleTIgPSAodWludDY0X3QgKikgYjsKKworCXJldHVybiAqa2V5MSA9PSAqa2V5MjsK K30KKworc3RhdGljIHZvaWQgbWFwX2VudHJ5X2ZyZWVfZnVuYyhzdHJ1Y3QgaWd0X21hcF9lbnRy eSAqZW50cnkpCit7CisJZnJlZShlbnRyeS0+ZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIGhvbGVz X2JzdF92YWxpZGF0ZShzdHJ1Y3QgaW50ZWxfYWxsb2NhdG9yX2JzdCAqaWFsYikKK3sKKwlzdHJ1 Y3QgaWd0X2JzdCAqb2Zmc2V0X2JzdCwgKnNpemVfYnN0OworCXN0cnVjdCBpbnRlbF9hbGxvY2F0 b3JfYnN0X3ZtYV9ob2xlICpob2xlOworCXZvaWQgKm5vZGVwdHI7CisJaW50IGJ5X29mZnNldF9z aXplLCBieV9zaXplX3NpemU7CisJdWludDY0X3QgcHJldl9vZmZzZXQ7CisKKwlvZmZzZXRfYnN0 ID0gaWFsYi0+Ynlfb2Zmc2V0OworCXNpemVfYnN0ID0gaWFsYi0+Ynlfc2l6ZTsKKwlieV9vZmZz ZXRfc2l6ZSA9IG9mZnNldF9ic3QtPnZhbGlkYXRlKG9mZnNldF9ic3QpOworCWJ5X3NpemVfc2l6 ZSA9IHNpemVfYnN0LT52YWxpZGF0ZShzaXplX2JzdCk7CisJaWd0X2Fzc2VydChieV9vZmZzZXRf c2l6ZSA9PSBieV9zaXplX3NpemUpOworCisJcHJldl9vZmZzZXQgPSBJQUxCX01BWF9BRERSOwor CWlndF9ic3RfZm9yX2VhY2hfbm9kZV9yZXYob2Zmc2V0X2JzdCwgbm9kZXB0cikgeworCQlob2xl ID0gaWd0X2JzdF9nZXRfdmFsdWUob2Zmc2V0X2JzdCwgbm9kZXB0cik7CisJCWlndF9hc3NlcnQo aG9sZSk7CisJCS8qIE1ha2Ugc3VyZSB0aGUgaG9sZSBpcyBzdG9yZWQgdW5kZXIgY29ycmVjdCBr ZXlzIGluCisJCSAqIHRoZSBiYWxhbmNlZCBzZWFyY2ggdHJlZXMuCisJCSAqLworCQlpZ3RfYXNz ZXJ0KGhvbGUtPm9mZnNldCA9PSBpZ3RfYnN0X2dldF9rZXkob2Zmc2V0X2JzdCwgaG9sZS0+b2Zm c2V0X3B0cikpOworCQlpZ3RfYXNzZXJ0KGhvbGUtPnNpemUgPT0gaWd0X2JzdF9nZXRfa2V5KHNp emVfYnN0LCBob2xlLT5zaXplX3B0cikpOworCisJCWlndF9hc3NlcnQoaG9sZS0+b2Zmc2V0ICsg aG9sZS0+c2l6ZSA+IGhvbGUtPm9mZnNldCk7CisJCS8qIE1ha2Ugc3VyZSBubyBwYWlyIG9mIGhv bGVzIGlzIGFkamFjZW50LiAqLworCQlpZ3RfYXNzZXJ0KHByZXZfb2Zmc2V0ID4gaG9sZS0+b2Zm c2V0ICsgaG9sZS0+c2l6ZSk7CisKKwkJcHJldl9vZmZzZXQgPSBob2xlLT5vZmZzZXQ7CisJfQor fQorCitzdGF0aWMgdm9pZCBfX2ludGVsX2FsbG9jYXRvcl9ic3RfYWxsb2Moc3RydWN0IGludGVs X2FsbG9jYXRvcl9ic3QgKmlhbGIsCisJCQkJCXN0cnVjdCBpbnRlbF9hbGxvY2F0b3JfYnN0X3Zt YV9ob2xlICpob2xlLAorCQkJCQl1aW50NjRfdCBvZmZzZXQsIHVpbnQ2NF90IHNpemUpCit7CisJ c3RydWN0IGlndF9ic3QgKm9mZnNldF9ic3QsICpzaXplX2JzdDsKKwlzdHJ1Y3QgaW50ZWxfYWxs b2NhdG9yX2JzdF92bWFfaG9sZSAqbmV3aG9sZTsKKwl1aW50NjRfdCBsb3dlciwgaGlnaGVyOwor CisJaWd0X2Fzc2VydChob2xlLT5vZmZzZXQgPD0gb2Zmc2V0KTsKKwlpZ3RfYXNzZXJ0KGhvbGUt Pm9mZnNldCArIGhvbGUtPnNpemUgPj0gb2Zmc2V0ICsgc2l6ZSk7CisKKwlvZmZzZXRfYnN0ID0g aWFsYi0+Ynlfb2Zmc2V0OworCXNpemVfYnN0ID0gaWFsYi0+Ynlfc2l6ZTsKKworCWxvd2VyID0g b2Zmc2V0IC0gaG9sZS0+b2Zmc2V0OworCWhpZ2hlciA9IGhvbGUtPnNpemUgLSBzaXplIC0gbG93 ZXI7CisKKwlpZiAobG93ZXIgPiAwICYmIGhpZ2hlciA+IDApIHsKKwkJLyogVGhlcmUgYXJlIGxl ZnRvdmVycyBvbiBib3RoIGxvd2VyIGFuZCBoaWdoZXIgYWRkcmVzc2VzLgorCQkgKiBDcmVhdGUg YSBob2xlIGZvciBoaWdoZXIgYWRkcmVzc2VzIGZyb20gc2NyYXRjaCBhbmQKKwkJICogb25lIGZv ciBsb3dlciBhZGRyZXNzZXMgYnkgbW9kaWZ5aW5nIHRoZSBleGlzdGluZyBob2xlLgorCQkgKi8K KworCQluZXdob2xlID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgaW50ZWxfYWxsb2NhdG9yX2JzdF92 bWFfaG9sZSkpOworCQlpZ3RfYXNzZXJ0KG5ld2hvbGUpOworCisJCW5ld2hvbGUtPm9mZnNldCA9 IG9mZnNldCArIHNpemU7CisJCW5ld2hvbGUtPnNpemUgPSBoaWdoZXI7CisKKwkJbmV3aG9sZS0+ b2Zmc2V0X3B0ciA9IGlndF9ic3RfaW5zZXJ0KG9mZnNldF9ic3QsIG5ld2hvbGUsIG5ld2hvbGUt Pm9mZnNldCk7CisJCW5ld2hvbGUtPnNpemVfcHRyID0gaWd0X2JzdF9pbnNlcnQoc2l6ZV9ic3Qs IG5ld2hvbGUsIG5ld2hvbGUtPnNpemUpOworCisJCWhvbGUtPnNpemUgPSBsb3dlcjsKKwkJaWd0 X2JzdF9lcmFzZShzaXplX2JzdCwgaG9sZS0+c2l6ZV9wdHIpOworCQlob2xlLT5zaXplX3B0ciA9 IGlndF9ic3RfaW5zZXJ0KHNpemVfYnN0LCBob2xlLCBob2xlLT5zaXplKTsKKworCX0gZWxzZSBp ZiAoaGlnaGVyID4gMCkgeworCQkvKiBUaGVyZSBpcyBubyBmcmVlIGFkZHJlc3Mgc3BhY2UgaW4g dGhpcyBob2xlIGxlZnQKKwkJICogYmVsb3cgdGhlIGFsbG9jYXRlZCBvYmplY3QuIE9ubHkgYSBw b3J0aW9uIG9mCisJCSAqIGhpZ2hlciBhZGRyZXNzZXMgaXMgc3RpbGwgZnJlZSwgc28ganVzdCBh ZGp1c3QgdGhlCisJCSAqIGV4aXN0aW5nIGhvbGUgYWNjb3JkaW5nbHkgKGNoYW5nZSBvZmZzZXQg YW5kIHNpemUpLgorCQkgKi8KKworCQlob2xlLT5vZmZzZXQgPSBvZmZzZXQgKyBzaXplOworCQlo b2xlLT5zaXplID0gaGlnaGVyOworCisJCWlndF9ic3RfZXJhc2Uob2Zmc2V0X2JzdCwgaG9sZS0+ b2Zmc2V0X3B0cik7CisJCWlndF9ic3RfZXJhc2Uoc2l6ZV9ic3QsIGhvbGUtPnNpemVfcHRyKTsK KworCQlob2xlLT5vZmZzZXRfcHRyID0gaWd0X2JzdF9pbnNlcnQob2Zmc2V0X2JzdCwgaG9sZSwg aG9sZS0+b2Zmc2V0KTsKKwkJaG9sZS0+c2l6ZV9wdHIgPSBpZ3RfYnN0X2luc2VydChzaXplX2Jz dCwgaG9sZSwgaG9sZS0+c2l6ZSk7CisKKwl9IGVsc2UgaWYgKGxvd2VyID4gMCkgeworCQkvKiBU aGUgYWxsb2NhdGVkIGJsb2NrIGlzIGFsaWduZWQgdG8gdGhlIGVuZCBvZiB0aGUKKwkJICogaG9s ZSBhbmQgdGhlIGxvd2VyIGFkZHJlc3NlcyBhcmUgc3RpbGwgZnJlZSwKKwkJICogc28gc2hyaW5r IHRoZSBleGlzdGluZyBob2xlIChjaGFuZ2Ugc2l6ZSwKKwkJICogYnV0IG5vdCB0aGUgb2Zmc2V0 KS4KKwkJICovCisKKwkJaG9sZS0+c2l6ZSA9IGxvd2VyOworCQlpZ3RfYnN0X2VyYXNlKHNpemVf YnN0LCBob2xlLT5zaXplX3B0cik7CisJCWhvbGUtPnNpemVfcHRyID0gaWd0X2JzdF9pbnNlcnQo c2l6ZV9ic3QsIGhvbGUsIGhvbGUtPnNpemUpOworCisJfSBlbHNlIHsKKwkJLyogVGhlcmUgYXJl IG5vIGxlZnRvdmVycywganVzdCBlcmFzZSB0aGUgaG9sZS4gKi8KKworCQlpZ3RfYnN0X2VyYXNl KG9mZnNldF9ic3QsIGhvbGUtPm9mZnNldF9wdHIpOworCQlpZ3RfYnN0X2VyYXNlKHNpemVfYnN0 LCBob2xlLT5zaXplX3B0cik7CisJCWZyZWUoaG9sZSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBf X2ludGVsX2FsbG9jYXRvcl9ic3RfYWRkX2hvbGUoc3RydWN0IGludGVsX2FsbG9jYXRvcl9ic3Qg KmlhbGIsCisJCQkJCSAgIHVpbnQ2NF90IG9mZnNldCwgdWludDY0X3Qgc2l6ZSkKK3sKKwlzdHJ1 Y3QgaWd0X2JzdCAqb2Zmc2V0X2JzdCwgKnNpemVfYnN0OworCXN0cnVjdCBpbnRlbF9hbGxvY2F0 b3JfYnN0X3ZtYV9ob2xlICpob2xlLCAqbnh0LCAqcHJ2OworCisJb2Zmc2V0X2JzdCA9IGlhbGIt PmJ5X29mZnNldDsKKwlzaXplX2JzdCA9IGlhbGItPmJ5X3NpemU7CisKKwlwcnYgPSBpZ3RfYnN0 X3F1ZXJ5X3ByZWRlY2Vzc29yKG9mZnNldF9ic3QsIG9mZnNldCk7CisJaWYgKHBydiAmJiBwcnYt Pm9mZnNldCArIHBydi0+c2l6ZSA8IG9mZnNldCkKKwkJcHJ2ID0gTlVMTDsKKworCW54dCA9IGln dF9ic3RfcXVlcnlfc3VjY2Vzc29yKG9mZnNldF9ic3QsIG9mZnNldCk7CisJaWYgKG54dCAmJiBu eHQtPm9mZnNldCA+IG9mZnNldCArIHNpemUpCisJCW54dCA9IE5VTEw7CisKKwlpZiAobnh0ICYm IHBydikgeworCQkvKiBUaGVyZSBhcmUgaG9sZXMgYWRqYWNlbnQgdG8gdGhlIG5ldyBvbmUKKwkJ ICogYm90aCBiZWxvdyBhbmQgYWJvdmUgaXQgaW4gdGhlIGFkZHJlc3Mgc3BhY2UuCisJCSAqIE1l cmdlIHRoZW0gYWxsIGludG8gYSBzaW5nbGUgaG9sZToKKwkJICogZXJhc2UgdGhlIHVwcGVyIGFu ZCBpbmNyZWFzZSBzaXplIG9mIHRoZQorCQkgKiBsb3dlciBvbmUuCisJCSAqLworCQlwcnYtPnNp emUgKz0gc2l6ZSArIG54dC0+c2l6ZTsKKworCQlpZ3RfYnN0X2VyYXNlKG9mZnNldF9ic3QsIG54 dC0+b2Zmc2V0X3B0cik7CisJCWlndF9ic3RfZXJhc2Uoc2l6ZV9ic3QsIG54dC0+c2l6ZV9wdHIp OworCQlmcmVlKG54dCk7CisKKwkJaWd0X2JzdF9lcmFzZShzaXplX2JzdCwgcHJ2LT5zaXplX3B0 cik7CisJCXBydi0+c2l6ZV9wdHIgPSBpZ3RfYnN0X2luc2VydChzaXplX2JzdCwgcHJ2LCBwcnYt PnNpemUpOworCisJfSBlbHNlIGlmIChueHQpIHsKKwkJLyogVGhlIG9ubHkgYWRqYWNlbnQgaG9s ZSBpcyBhYm92ZSB0aGUgbmV3IG9uZSwKKwkJICogc28gaW5jcmVhc2UgaXRzIHNpemUgYW5kIHVw ZGF0ZSBpdHMgb2Zmc2V0LgorCQkgKi8KKwkJbnh0LT5zaXplICs9IHNpemU7CisJCW54dC0+b2Zm c2V0ID0gb2Zmc2V0OworCisJCWlndF9ic3RfZXJhc2Uob2Zmc2V0X2JzdCwgbnh0LT5vZmZzZXRf cHRyKTsKKwkJaWd0X2JzdF9lcmFzZShzaXplX2JzdCwgbnh0LT5zaXplX3B0cik7CisKKwkJbnh0 LT5vZmZzZXRfcHRyID0gaWd0X2JzdF9pbnNlcnQob2Zmc2V0X2JzdCwgbnh0LCBueHQtPm9mZnNl dCk7CisJCW54dC0+c2l6ZV9wdHIgPSBpZ3RfYnN0X2luc2VydChzaXplX2JzdCwgbnh0LCBueHQt PnNpemUpOworCisJfSBlbHNlIGlmIChwcnYpIHsKKwkJLyogVGhlIG9ubHkgYWRqYWNlbnQgaG9s ZSBpcyBiZWxvdyB0aGUgbmV3IG9uZSwKKwkJICoganVzdCBpbmNyZWFzZSBpdHMgc2l6ZS4KKwkJ ICovCisJCXBydi0+c2l6ZSArPSBzaXplOworCQlpZ3RfYnN0X2VyYXNlKHNpemVfYnN0LCBwcnYt PnNpemVfcHRyKTsKKwkJcHJ2LT5zaXplX3B0ciA9IGlndF9ic3RfaW5zZXJ0KHNpemVfYnN0LCBw cnYsIHBydi0+c2l6ZSk7CisKKwl9IGVsc2UgeworCQkvKiBUaGVyZSBhcmUgbm8gaG9sZXMgbmVp Z2hib3VyaW5nIHRoZSBuZXcgb25lLAorCQkgKiBzbyBqdXN0IGNyZWF0ZSBhIG5ldyBob2xlLgor CQkgKi8KKwkJaG9sZSA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IGludGVsX2FsbG9jYXRvcl9ic3Rf dm1hX2hvbGUpKTsKKwkJaWd0X2Fzc2VydChob2xlKTsKKworCQlob2xlLT5vZmZzZXQgPSBvZmZz ZXQ7CisJCWhvbGUtPnNpemUgPSBzaXplOworCQlob2xlLT5vZmZzZXRfcHRyID0gaWd0X2JzdF9p bnNlcnQob2Zmc2V0X2JzdCwgaG9sZSwgb2Zmc2V0KTsKKwkJaG9sZS0+c2l6ZV9wdHIgPSBpZ3Rf YnN0X2luc2VydChzaXplX2JzdCwgaG9sZSwgc2l6ZSk7CisKKwl9Cit9CisKKworc3RhdGljIHZv aWQgaW50ZWxfYWxsb2NhdG9yX2JzdF9nZXRfYWRkcmVzc19yYW5nZShzdHJ1Y3QgaW50ZWxfYWxs b2NhdG9yICppYWwsCisJCQkJICAgICAgdWludDY0X3QgKnN0YXJ0cCwgdWludDY0X3QgKmVuZHAp Cit7CisJc3RydWN0IGludGVsX2FsbG9jYXRvcl9ic3QgKmlhbGIgPSBpYWwtPnByaXY7CisKKwlp ZiAoc3RhcnRwKQorCQkqc3RhcnRwID0gaWFsYi0+c3RhcnQ7CisKKwlpZiAoZW5kcCkKKwkJKmVu ZHAgPSBpYWxiLT5lbmQ7Cit9CisKK3N0YXRpYyB1aW50NjRfdCBpbnRlbF9hbGxvY2F0b3JfYnN0 X2FsbG9jKHN0cnVjdCBpbnRlbF9hbGxvY2F0b3IgKmlhbCwgdWludDMyX3QgaGFuZGxlLAorCQkJ CQkgIHVpbnQ2NF90IHNpemUsIHVpbnQ2NF90IGFsaWdubWVudCwKKwkJCQkJICBlbnVtIGFsbG9j YXRvcl9zdHJhdGVneSBzdHJhdGVneSkKK3sKKwlzdHJ1Y3QgaW50ZWxfYWxsb2NhdG9yX2JzdCAq aWFsYiA9IGlhbC0+cHJpdjsKKwlzdHJ1Y3QgaW50ZWxfYWxsb2NhdG9yX3JlY29yZCAqcmVjb3Jk OworCXN0cnVjdCBpbnRlbF9hbGxvY2F0b3JfYnN0X3ZtYV9ob2xlICpob2xlOworCXVpbnQ2NF90 IG1pc2FsaWdubWVudCwgb2Zmc2V0OworCisJaWd0X2Fzc2VydChzaXplID4gMCk7CisJYWxpZ25t ZW50ID0gKGFsaWdubWVudCA+IDAgPyBhbGlnbm1lbnQgOiAxKTsKKworCXJlY29yZCA9IGlndF9t YXBfc2VhcmNoKGlhbGItPm9iamVjdHMsICZoYW5kbGUpOworCisJaWYgKHJlY29yZCkgeworCQkv KiBUaGlzIGJsb2NrIGhhcyBhbHJlYWR5IGJlZW4gYWxsb2NhdGVkLAorCQkgKiBjaGVjayB0aGF0 IGl0IHNhdGlmaWVzIHRoZSByZXF1aXJlbWVudHMuCisJCSAqLworCisJCWlndF9hc3NlcnQoc2l6 ZSA9PSByZWNvcmQtPnNpemUpOworCQlpZ3RfYXNzZXJ0KHJlY29yZC0+b2Zmc2V0ICUgYWxpZ25t ZW50ID09IDApOworCisJCXJldHVybiByZWNvcmQtPm9mZnNldDsKKwl9CisKKwkvKiBMb29rIGZv ciBhIHNsaWdodGx5IGJpZ2dlciBob2xlIHRvIG1ha2Ugc3VyZQorCSAqIHRoZSBibG9jayBjYW4g YmUgYWxpZ25lZCBwcm9wZXJseS4KKwkgKi8KKwlob2xlID0gaWd0X2JzdF9xdWVyeV9zdWNjZXNz b3IoaWFsYi0+Ynlfc2l6ZSwKKwkJCQkgICAgICAgc2l6ZSArIGFsaWdubWVudCAtIDEpOworCisJ LyogTG9vayBmb3IgYSBzbWFsbGVyIGhvbGUsIG1heWJlIHByb3BlciBhbGlnbm1lbnQKKwkgKiB3 aWxsIHN0aWxsIGJlIHBvc3NpYmxlLgorCSAqLworCWlmICghaG9sZSkKKwkJaG9sZSA9IGlndF9i c3RfcXVlcnlfc3VjY2Vzc29yKGlhbGItPmJ5X3NpemUsIHNpemUpOworCisJaWYgKCFob2xlKSB7 CisJCWlndF93YXJuKCJGYWlsZWQgdG8gYWxsb2NhdGU6IG5vdCBlbm91Z2ggbWVtb3J5XG4iKTsK KwkJcmV0dXJuIEFMTE9DX0lOVkFMSURfQUREUkVTUzsKKwl9CisKKwlpZiAoc3RyYXRlZ3kgPT0g QUxMT0NfU1RSQVRFR1lfTk9ORSkKKwkJc3RyYXRlZ3kgPSBpYWwtPnN0cmF0ZWd5OworCisJc3dp dGNoIChzdHJhdGVneSkgeworCWNhc2UgQUxMT0NfU1RSQVRFR1lfTE9XX1RPX0hJR0g6CisJCW1p c2FsaWdubWVudCA9IGFsaWdubWVudCAtIChob2xlLT5vZmZzZXQgJSBhbGlnbm1lbnQpOworCQlt aXNhbGlnbm1lbnQgPSBtaXNhbGlnbm1lbnQgPT0gYWxpZ25tZW50ID8gMCA6IG1pc2FsaWdubWVu dDsKKwkJb2Zmc2V0ID0gaG9sZS0+b2Zmc2V0ICsgbWlzYWxpZ25tZW50OworCisJCWlmIChtaXNh bGlnbm1lbnQgKyBzaXplID4gaG9sZS0+c2l6ZSkgeworCQkJaWd0X3dhcm4oIkZhaWxlZCB0byBh bGxvY2F0ZTogbm90IGVub3VnaCBtZW1vcnlcbiIpOworCQkJcmV0dXJuIEFMTE9DX0lOVkFMSURf QUREUkVTUzsKKwkJfQorCQlicmVhazsKKwljYXNlIEFMTE9DX1NUUkFURUdZX0hJR0hfVE9fTE9X OgorCQlvZmZzZXQgPSBob2xlLT5vZmZzZXQgKyBob2xlLT5zaXplIC0gc2l6ZTsKKwkJb2Zmc2V0 ID0gb2Zmc2V0IC0gb2Zmc2V0ICUgYWxpZ25tZW50OworCisJCWlmIChvZmZzZXQgPCBob2xlLT5v ZmZzZXQpIHsKKwkJCWlndF93YXJuKCJGYWlsZWQgdG8gYWxsb2NhdGU6IG5vdCBlbm91Z2ggbWVt b3J5XG4iKTsKKwkJCXJldHVybiBBTExPQ19JTlZBTElEX0FERFJFU1M7CisJCX0KKwkJYnJlYWs7 CisJZGVmYXVsdDoKKwkJaWd0X2Fzc2VydF9mKDAsICJVbnN1cHBvcnRlZCBzdHJhdGVneS4iKTsK Kwl9CisKKwlfX2ludGVsX2FsbG9jYXRvcl9ic3RfYWxsb2MoaWFsYiwgaG9sZSwgb2Zmc2V0LCBz aXplKTsKKworCXJlY29yZCA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IGludGVsX2FsbG9jYXRvcl9y ZWNvcmQpKTsKKwlpZ3RfYXNzZXJ0KHJlY29yZCk7CisJcmVjb3JkLT5oYW5kbGUgPSBoYW5kbGU7 CisJcmVjb3JkLT5vZmZzZXQgPSBvZmZzZXQ7CisJcmVjb3JkLT5zaXplID0gc2l6ZTsKKworCWln dF9tYXBfaW5zZXJ0KGlhbGItPm9iamVjdHMsICZyZWNvcmQtPmhhbmRsZSwgcmVjb3JkKTsKKwlp YWxiLT5hbGxvY2F0ZWRfb2JqZWN0cysrOworCWlhbGItPmFsbG9jYXRlZF9zaXplICs9IHNpemU7 CisKKwlyZXR1cm4gb2Zmc2V0OworfQorCitzdGF0aWMgYm9vbCBpbnRlbF9hbGxvY2F0b3JfYnN0 X2lzX2FsbG9jYXRlZChzdHJ1Y3QgaW50ZWxfYWxsb2NhdG9yICppYWwsIHVpbnQzMl90IGhhbmRs ZSwKKwkJCQkJICAgICB1aW50NjRfdCBzaXplLCB1aW50NjRfdCBvZmZzZXQpCit7CisJc3RydWN0 IGludGVsX2FsbG9jYXRvcl9ic3QgKmlhbGIgPSBpYWwtPnByaXY7CisJc3RydWN0IGludGVsX2Fs bG9jYXRvcl9yZWNvcmQgKnJlY29yZDsKKwlib29sIHNhbWU7CisKKwlyZWNvcmQgPSBpZ3RfbWFw X3NlYXJjaChpYWxiLT5vYmplY3RzLCAmaGFuZGxlKTsKKwlpZiAocmVjb3JkKSB7CisJCXNhbWUg PSAocmVjb3JkLT5oYW5kbGUgPT0gaGFuZGxlICYmIHJlY29yZC0+c2l6ZSA9PSBzaXplICYmCisJ CQlyZWNvcmQtPm9mZnNldCA9PSBvZmZzZXQpOworCX0gZWxzZSB7CisJCXNhbWUgPSBmYWxzZTsK Kwl9CisKKwlyZXR1cm4gc2FtZTsKK30KKworc3RhdGljIGJvb2wgaW50ZWxfYWxsb2NhdG9yX2Jz dF9mcmVlKHN0cnVjdCBpbnRlbF9hbGxvY2F0b3IgKmlhbCwgdWludDMyX3QgaGFuZGxlKQorewor CXN0cnVjdCBpbnRlbF9hbGxvY2F0b3JfYnN0ICppYWxiID0gaWFsLT5wcml2OworCXN0cnVjdCBp bnRlbF9hbGxvY2F0b3JfcmVjb3JkICpyZWNvcmQ7CisKKwlyZWNvcmQgPSBpZ3RfbWFwX3NlYXJj aChpYWxiLT5vYmplY3RzLCAmaGFuZGxlKTsKKworCWlmICghcmVjb3JkKQorCQlyZXR1cm4gZmFs c2U7CisKKwlfX2ludGVsX2FsbG9jYXRvcl9ic3RfYWRkX2hvbGUoaWFsYiwgcmVjb3JkLT5vZmZz ZXQsIHJlY29yZC0+c2l6ZSk7CisJaWFsYi0+YWxsb2NhdGVkX29iamVjdHMtLTsKKwlpYWxiLT5h bGxvY2F0ZWRfc2l6ZSAtPSByZWNvcmQtPnNpemU7CisJaWd0X21hcF9yZW1vdmUoaWFsYi0+b2Jq ZWN0cywgJmhhbmRsZSwgbWFwX2VudHJ5X2ZyZWVfZnVuYyk7CisKKwlyZXR1cm4gdHJ1ZTsKK30K Kworc3RhdGljIGJvb2wgaW50ZWxfYWxsb2NhdG9yX2JzdF9yZXNlcnZlKHN0cnVjdCBpbnRlbF9h bGxvY2F0b3IgKmlhbCwgdWludDMyX3QgaGFuZGxlLAorCQkJCQl1aW50NjRfdCBzdGFydCwgdWlu dDY0X3QgZW5kKQoreworCXN0cnVjdCBpbnRlbF9hbGxvY2F0b3JfYnN0ICppYWxiID0gaWFsLT5w cml2OworCXN0cnVjdCBpbnRlbF9hbGxvY2F0b3JfYnN0X3ZtYV9ob2xlICpob2xlOworCXN0cnVj dCBpbnRlbF9hbGxvY2F0b3JfcmVjb3JkICpyZWNvcmQ7CisKKwlpZ3RfYXNzZXJ0KHN0YXJ0IDwg ZW5kKTsKKwlpZ3RfYXNzZXJ0KHN0YXJ0ID49IGlhbGItPnN0YXJ0KTsKKwlpZ3RfYXNzZXJ0KGVu ZCA8PSBpYWxiLT5lbmQpOworCisJaG9sZSA9IGlndF9ic3RfcXVlcnlfcHJlZGVjZXNzb3IoaWFs Yi0+Ynlfb2Zmc2V0LCBzdGFydCk7CisJaWYgKCFob2xlKQorCQlyZXR1cm4gZmFsc2U7CisKKwlp Z3RfYXNzZXJ0KGhvbGUtPm9mZnNldCA8PSBzdGFydCk7CisKKwlpZiAoaG9sZS0+b2Zmc2V0ICsg aG9sZS0+c2l6ZSA8IGVuZCkKKwkJcmV0dXJuIGZhbHNlOworCisJX19pbnRlbF9hbGxvY2F0b3Jf YnN0X2FsbG9jKGlhbGIsIGhvbGUsIHN0YXJ0LCBlbmQgLSBzdGFydCk7CisKKwlyZWNvcmQgPSBt YWxsb2Moc2l6ZW9mKHN0cnVjdCBpbnRlbF9hbGxvY2F0b3JfYnN0X3ZtYV9ob2xlKSk7CisJaWd0 X2Fzc2VydChyZWNvcmQpOworCXJlY29yZC0+b2Zmc2V0ID0gc3RhcnQ7CisJcmVjb3JkLT5zaXpl ID0gZW5kIC0gc3RhcnQ7CisJcmVjb3JkLT5oYW5kbGUgPSBoYW5kbGU7CisJaWd0X21hcF9pbnNl cnQoaWFsYi0+cmVzZXJ2ZWQsICZyZWNvcmQtPm9mZnNldCwgcmVjb3JkKTsKKwlpYWxiLT5yZXNl cnZlZF9hcmVhcysrOworCWlhbGItPnJlc2VydmVkX3NpemUgKz0gZW5kIC0gc3RhcnQ7CisKKwly ZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgaW50ZWxfYWxsb2NhdG9yX2JzdF91bnJlc2Vy dmUoc3RydWN0IGludGVsX2FsbG9jYXRvciAqaWFsLCB1aW50MzJfdCBoYW5kbGUsCisJCQkJCSAg dWludDY0X3Qgc3RhcnQsIHVpbnQ2NF90IGVuZCkKK3sKKwlzdHJ1Y3QgaW50ZWxfYWxsb2NhdG9y X2JzdCAqaWFsYiA9IGlhbC0+cHJpdjsKKwlzdHJ1Y3QgaW50ZWxfYWxsb2NhdG9yX3JlY29yZCAq cmVjb3JkOworCisJcmVjb3JkID0gaWd0X21hcF9zZWFyY2goaWFsYi0+cmVzZXJ2ZWQsICZzdGFy dCk7CisKKwlpZiAoIXJlY29yZCkgeworCQlpZ3Rfd2FybigiT25seSBhIHJlc2VydmVkIGJsb2Nr IGNhbiBiZSB1bnJlc2VydmVkLlxuIik7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlpZiAocmVj b3JkLT5zaXplICE9IGVuZCAtIHN0YXJ0KSB7CisJCWlndF93YXJuKCJTaXplIG9mIHRoZSBibG9j ayBkb2VzIG5vdCBtYXRjaCB0aGUgcGFzc2VkIHZhbHVlLlxuIik7CisJCXJldHVybiBmYWxzZTsK Kwl9CisKKwlpZiAocmVjb3JkLT5vZmZzZXQgIT0gc3RhcnQpIHsKKwkJaWd0X3dhcm4oIk9mZnNl dCBvZiB0aGUgYmxvY2sgZG9lcyBub3QgbWF0Y2ggdGhlIHBhc3NlZCB2YWx1ZS5cbiIpOworCQly ZXR1cm4gZmFsc2U7CisJfQorCisJaWYgKHJlY29yZC0+aGFuZGxlICE9IGhhbmRsZSkgeworCQlp Z3Rfd2FybigiSGFuZGxlICV1IGRvZXMgbm90IG1hdGNoIHRoZSBwYXNzZWQgaGFuZGxlICV1Llxu IiwKKwkJCSByZWNvcmQtPmhhbmRsZSwgaGFuZGxlKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwor CV9faW50ZWxfYWxsb2NhdG9yX2JzdF9hZGRfaG9sZShpYWxiLCBzdGFydCwgZW5kIC0gc3RhcnQp OworCWlhbGItPnJlc2VydmVkX2FyZWFzLS07CisJaWFsYi0+cmVzZXJ2ZWRfc2l6ZSAtPSByZWNv cmQtPnNpemU7CisJaWd0X21hcF9yZW1vdmUoaWFsYi0+cmVzZXJ2ZWQsICZzdGFydCwgbWFwX2Vu dHJ5X2ZyZWVfZnVuYyk7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgaW50ZWxf YWxsb2NhdG9yX2JzdF9pc19yZXNlcnZlZChzdHJ1Y3QgaW50ZWxfYWxsb2NhdG9yICppYWwsCisJ CQkJCSAgICB1aW50NjRfdCBzdGFydCwgdWludDY0X3QgZW5kKQoreworCXN0cnVjdCBpbnRlbF9h bGxvY2F0b3JfYnN0ICppYWxiID0gaWFsLT5wcml2OworCXN0cnVjdCBpbnRlbF9hbGxvY2F0b3Jf cmVjb3JkICpyZWNvcmQ7CisKKwlpZ3RfYXNzZXJ0KHN0YXJ0IDwgZW5kKTsKKwlyZWNvcmQgPSBp Z3RfbWFwX3NlYXJjaChpYWxiLT5yZXNlcnZlZCwgJnN0YXJ0KTsKKworCWlmICghcmVjb3JkKQor CQlyZXR1cm4gZmFsc2U7CisKKwlpZiAocmVjb3JkLT5vZmZzZXQgPT0gc3RhcnQgJiYgcmVjb3Jk LT5zaXplID09IGVuZCAtIHN0YXJ0KQorCQlyZXR1cm4gdHJ1ZTsKKworCXJldHVybiBmYWxzZTsK K30KKworc3RhdGljIHZvaWQgaW50ZWxfYWxsb2NhdG9yX2JzdF9kZXN0cm95KHN0cnVjdCBpbnRl bF9hbGxvY2F0b3IgKmlhbCkKK3sKKwlzdHJ1Y3QgaW50ZWxfYWxsb2NhdG9yX2JzdCAqaWFsYiA9 IGlhbC0+cHJpdjsKKwlzdHJ1Y3QgaWd0X2JzdCAqc2l6ZV9ic3QsICpvZmZzZXRfYnN0OworCXZv aWQgKm5vZGVwdHI7CisKKwlzaXplX2JzdCA9IGlhbGItPmJ5X3NpemU7CisJb2Zmc2V0X2JzdCA9 IGlhbGItPmJ5X29mZnNldDsKKworCWlndF9ic3RfZm9yX2VhY2hfbm9kZShvZmZzZXRfYnN0LCBu b2RlcHRyKQorCQlmcmVlKG9mZnNldF9ic3QtPmdldF92YWx1ZShub2RlcHRyKSk7CisKKwlpZ3Rf YnN0X2ZyZWUoc2l6ZV9ic3QpOworCWlndF9ic3RfZnJlZShvZmZzZXRfYnN0KTsKKwlmcmVlKG9m ZnNldF9ic3QpOworCWZyZWUoc2l6ZV9ic3QpOworCisJaWd0X21hcF9kZXN0cm95KGlhbGItPm9i amVjdHMsIG1hcF9lbnRyeV9mcmVlX2Z1bmMpOworCWlndF9tYXBfZGVzdHJveShpYWxiLT5yZXNl cnZlZCwgbWFwX2VudHJ5X2ZyZWVfZnVuYyk7CisKKwlmcmVlKGlhbGIpOworCWZyZWUoaWFsKTsK K30KKworc3RhdGljIGJvb2wgaW50ZWxfYWxsb2NhdG9yX2JzdF9pc19lbXB0eShzdHJ1Y3QgaW50 ZWxfYWxsb2NhdG9yICppYWwpCit7CisJc3RydWN0IGludGVsX2FsbG9jYXRvcl9ic3QgKmlhbGIg PSBpYWwtPnByaXY7CisKKwlyZXR1cm4gaWFsYi0+YWxsb2NhdGVkX29iamVjdHMgPT0gMCAmJiBp YWxiLT5yZXNlcnZlZF9hcmVhcyA9PSAwOworfQorCitzdGF0aWMgdm9pZCBpbnRlbF9hbGxvY2F0 b3JfYnN0X3ByaW50KHN0cnVjdCBpbnRlbF9hbGxvY2F0b3IgKmlhbCwgYm9vbCBmdWxsKQorewor CXN0cnVjdCBpbnRlbF9hbGxvY2F0b3JfYnN0ICppYWxiID0gaWFsLT5wcml2OworCXN0cnVjdCBp bnRlbF9hbGxvY2F0b3JfcmVjb3JkICpyZWNvcmQ7CisJc3RydWN0IGludGVsX2FsbG9jYXRvcl9i c3Rfdm1hX2hvbGUgKmhvbGU7CisJc3RydWN0IGlndF9ic3QgKm9mZnNldF9ic3QsICpzaXplX2Jz dDsKKwlzdHJ1Y3QgaWd0X21hcF9lbnRyeSAqZW50cnk7CisJdm9pZCAqbm9kZXB0cjsKKwl1aW50 NjRfdCB0b3RhbF9mcmVlOworCisJaWd0X2luZm8oImludGVsX2FsbG9jYXRvcl9ic3QgPGlhbDog JXAsIGZkOiAlZD4gb24gIgorCQkgIlsweCUiUFJJWDY0IiA6IDB4JSJQUkl4NjQiXVxuIiwgaWFs LAorCQkgaWFsLT5mZCwgaWFsYi0+c3RhcnQsIGlhbGItPmVuZCk7CisKKwl0b3RhbF9mcmVlID0g MDsKKwlpZiAoZnVsbCkgeworCQlvZmZzZXRfYnN0ID0gaWFsYi0+Ynlfb2Zmc2V0OworCQlzaXpl X2JzdCA9IGlhbGItPmJ5X3NpemU7CisKKwkJaWd0X2luZm8oImhvbGVzIGJ5IG9mZnNldDpcbiIp OworCQlpZ3RfYnN0X2Zvcl9lYWNoX25vZGUob2Zmc2V0X2JzdCwgbm9kZXB0cikgeworCQkJaG9s ZSA9IGlndF9ic3RfZ2V0X3ZhbHVlKG9mZnNldF9ic3QsIG5vZGVwdHIpOworCQkJaWd0X2luZm8o Im9mZnNldCA9ICUiUFJJdTY0IiAoMHglIlBSSXg2NCIpICIKKwkJCQkgInNpemUgPSAlIlBSSXU2 NCIgKDB4JSJQUkl4NjQiKVxuIiwKKwkJCQkgaG9sZS0+b2Zmc2V0LCBob2xlLT5vZmZzZXQsIGhv bGUtPnNpemUsCisJCQkJIGhvbGUtPnNpemUpOworCQkJdG90YWxfZnJlZSArPSBob2xlLT5zaXpl OworCQl9CisKKwkJaWd0X2luZm8oImhvbGVzIGJ5IHNpemU6XG4iKTsKKwkJaWd0X2JzdF9mb3Jf ZWFjaF9ub2RlKHNpemVfYnN0LCBub2RlcHRyKSB7CisJCQlob2xlID0gaWd0X2JzdF9nZXRfdmFs dWUoc2l6ZV9ic3QsIG5vZGVwdHIpOworCQkJaWd0X2luZm8oIm9mZnNldCA9ICUiUFJJdTY0IiAo MHglIlBSSXg2NCIpICIKKwkJCQkgInNpemUgPSAlIlBSSXU2NCIgKDB4JSJQUkl4NjQiKVxuIiwK KwkJCQkgaG9sZS0+b2Zmc2V0LCBob2xlLT5vZmZzZXQsIGhvbGUtPnNpemUsCisJCQkJIGhvbGUt PnNpemUpOworCisJCX0KKworCQlpZ3RfaW5mbygiYWxsb2NhdGVkIG9iamVjdHM6XG4iKTsKKwkJ aWd0X21hcF9mb3JlYWNoKGlhbGItPm9iamVjdHMsIGVudHJ5KSB7CisJCQlyZWNvcmQgPSBlbnRy eS0+ZGF0YTsKKwkJCWlndF9pbmZvKCJoYW5kbGUgPSAlZCwgb2Zmc2V0ID0gJSJQUkl1NjQiICIK KwkJCQkiKDB4JSJQUkl4NjQiLCBzaXplID0gJSJQUkl1NjQiICgweCUiUFJJeDY0IilcbiIsCisJ CQkJIHJlY29yZC0+aGFuZGxlLCByZWNvcmQtPm9mZnNldCwgcmVjb3JkLT5vZmZzZXQsCisJCQkJ IHJlY29yZC0+c2l6ZSwgcmVjb3JkLT5zaXplKTsKKworCQl9CisKKwkJaWd0X2luZm8oInJlc2Vy dmVkIGFyZWFzOlxuIik7CisJCWlndF9tYXBfZm9yZWFjaChpYWxiLT5yZXNlcnZlZCwgZW50cnkp IHsKKwkJCXJlY29yZCA9IGVudHJ5LT5kYXRhOworCQkJaWd0X2luZm8oImhhbmRsZSA9ICVkLCBv ZmZzZXQgPSAlIlBSSXU2NCIgIgorCQkJCSIoMHglIlBSSXg2NCIsIHNpemUgPSAlIlBSSXU2NCIg KDB4JSJQUkl4NjQiKVxuIiwKKwkJCQkgcmVjb3JkLT5oYW5kbGUsIHJlY29yZC0+b2Zmc2V0LCBy ZWNvcmQtPm9mZnNldCwKKwkJCQkgcmVjb3JkLT5zaXplLCByZWNvcmQtPnNpemUpOworCisJCX0K KworCX0gZWxzZSB7CisJCW9mZnNldF9ic3QgPSBpYWxiLT5ieV9vZmZzZXQ7CisKKwkJaWd0X2Jz dF9mb3JfZWFjaF9ub2RlKG9mZnNldF9ic3QsIG5vZGVwdHIpIHsKKwkJCWlndF9ic3RfZ2V0X3Zh bHVlKG9mZnNldF9ic3QsIG5vZGVwdHIpOworCQkJdG90YWxfZnJlZSArPSBob2xlLT5zaXplOwor CQl9CisJfQorCisJaWd0X2luZm8oImZyZWUgc3BhY2U6ICUiUFJJdTY0IkIgKDB4JSJQUkl4NjQi KSAoJS4yZiUlIGZ1bGwpXG4iCisJCSAiYWxsb2NhdGVkIG9iamVjdHM6ICUiUFJJdTY0Iiwgc2l6 ZTogJSJQUkl1NjQKKwkJICIgKCUiUFJJeDY0IilcbiIKKwkJICJyZXNlcnZlZCBhcmVhczogJSJQ Ukl1NjQiLCBzaXplOiAlIlBSSXU2NAorCQkgIiAoJSJQUkl4NjQiKVxuIiwgdG90YWxfZnJlZSwg dG90YWxfZnJlZSwKKwkJICgoZG91YmxlKSAoaWFsYi0+dG90YWxfc2l6ZSAtIHRvdGFsX2ZyZWUp IC8KKwkJICAoZG91YmxlKSBpYWxiLT50b3RhbF9zaXplKSAqIDEwMC4wLAorCQkgaWFsYi0+YWxs b2NhdGVkX29iamVjdHMsIGlhbGItPmFsbG9jYXRlZF9zaXplLAorCQkgaWFsYi0+YWxsb2NhdGVk X3NpemUsIGlhbGItPnJlc2VydmVkX2FyZWFzLAorCQkgaWFsYi0+cmVzZXJ2ZWRfYXJlYXMsIGlh bGItPnJlc2VydmVkX3NpemUpOworCisJaG9sZXNfYnN0X3ZhbGlkYXRlKGlhbGIpOworfQorCitz dHJ1Y3QgaW50ZWxfYWxsb2NhdG9yICoKK2ludGVsX2FsbG9jYXRvcl9ic3RfY3JlYXRlKGludCBm ZCwgdWludDY0X3Qgc3RhcnQsIHVpbnQ2NF90IGVuZCwKKwkJCSAgIGVudW0gYWxsb2NhdG9yX3N0 cmF0ZWd5IHN0cmF0ZWd5KQoreworCXN0cnVjdCBpbnRlbF9hbGxvY2F0b3IgKmlhbDsKKwlzdHJ1 Y3QgaW50ZWxfYWxsb2NhdG9yX2JzdCAqaWFsYjsKKworCWlndF9kZWJ1ZygiVXNpbmcgQlNUIGFs bG9jYXRvclxuIik7CisKKwlpYWxiID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgaW50ZWxfYWxsb2Nh dG9yX2JzdCkpOworCWlndF9hc3NlcnQoaWFsYik7CisJaWFsID0gbWFsbG9jKHNpemVvZihzdHJ1 Y3QgaW50ZWxfYWxsb2NhdG9yKSk7CisJaWd0X2Fzc2VydChpYWwpOworCisJLyogQWxsb2NhdGVk IG9iamVjdCBhcmUgc3RvcmVkIGJ5IDQtYnl0ZS1sb25nIGhhbmRsZXMuICovCisJaWFsYi0+b2Jq ZWN0cyA9IGlndF9tYXBfY3JlYXRlKGhhc2hfaGFuZGxlcywgZXF1YWxfaGFuZGxlcyk7CisJLyog UmVzZXJ2ZWQgb2JqZWN0IGFyZSBzdG9yZWQgYnkgOC1ieXRlLWxvbmcgb2Zmc2V0cy4gKi8KKwlp YWxiLT5yZXNlcnZlZCA9IGlndF9tYXBfY3JlYXRlKGhhc2hfb2Zmc2V0cywgZXF1YWxfb2Zmc2V0 cyk7CisJaWd0X2Fzc2VydChpYWxiLT5vYmplY3RzICYmIGlhbGItPnJlc2VydmVkKTsKKworCWlh bGItPmJ5X29mZnNldCA9IGlndF9ic3RfYXZsX2NyZWF0ZSgpOworCWlhbGItPmJ5X3NpemUgPSBp Z3RfYnN0X2F2bF9jcmVhdGUoKTsKKworCWlndF9hc3NlcnQoc3RhcnQgPCBlbmQpOworCWlndF9h c3NlcnQoZW5kIDwgSUFMQl9NQVhfQUREUik7CisJaWFsYi0+c3RhcnQgPSBzdGFydDsKKwlpYWxi LT5lbmQgPSBlbmQ7CisKKwlpYWxiLT50b3RhbF9zaXplID0gaWFsYi0+ZW5kIC0gaWFsYi0+c3Rh cnQ7CisJaWFsYi0+YWxsb2NhdGVkX3NpemUgPSAwOworCWlhbGItPmFsbG9jYXRlZF9vYmplY3Rz ID0gMDsKKwlpYWxiLT5yZXNlcnZlZF9zaXplID0gMDsKKwlpYWxiLT5yZXNlcnZlZF9hcmVhcyA9 IDA7CisJX19pbnRlbF9hbGxvY2F0b3JfYnN0X2FkZF9ob2xlKGlhbGIsIGlhbGItPnN0YXJ0LCBp YWxiLT50b3RhbF9zaXplKTsKKworCWlhbC0+ZmQgPSBmZDsKKwlpYWwtPnR5cGUgPSBJTlRFTF9B TExPQ0FUT1JfQlNUOworCWlhbC0+c3RyYXRlZ3kgPSBzdHJhdGVneTsKKwlpYWwtPnJlZmNvdW50 ID0gMDsKKwlpYWwtPnByaXYgPSBpYWxiOworCWlhbC0+Z2V0X2FkZHJlc3NfcmFuZ2UgPSBpbnRl bF9hbGxvY2F0b3JfYnN0X2dldF9hZGRyZXNzX3JhbmdlOworCWlhbC0+YWxsb2MgPSBpbnRlbF9h bGxvY2F0b3JfYnN0X2FsbG9jOworCWlhbC0+aXNfYWxsb2NhdGVkID0gaW50ZWxfYWxsb2NhdG9y X2JzdF9pc19hbGxvY2F0ZWQ7CisJaWFsLT5mcmVlID0gaW50ZWxfYWxsb2NhdG9yX2JzdF9mcmVl OworCWlhbC0+cmVzZXJ2ZSA9IGludGVsX2FsbG9jYXRvcl9ic3RfcmVzZXJ2ZTsKKwlpYWwtPnVu cmVzZXJ2ZSA9IGludGVsX2FsbG9jYXRvcl9ic3RfdW5yZXNlcnZlOworCWlhbC0+aXNfcmVzZXJ2 ZWQgPSBpbnRlbF9hbGxvY2F0b3JfYnN0X2lzX3Jlc2VydmVkOworCWlhbC0+ZGVzdHJveSA9IGlu dGVsX2FsbG9jYXRvcl9ic3RfZGVzdHJveTsKKwlpYWwtPmlzX2VtcHR5ID0gaW50ZWxfYWxsb2Nh dG9yX2JzdF9pc19lbXB0eTsKKwlpYWwtPnByaW50ID0gaW50ZWxfYWxsb2NhdG9yX2JzdF9wcmlu dDsKKworCXJldHVybiBpYWw7Cit9CmRpZmYgLS1naXQgYS9saWIvbWVzb24uYnVpbGQgYi9saWIv bWVzb24uYnVpbGQKaW5kZXggYTFhYTBlZTEyLi42MmM4ZGJmMjAgMTAwNjQ0Ci0tLSBhL2xpYi9t ZXNvbi5idWlsZAorKysgYi9saWIvbWVzb24uYnVpbGQKQEAgLTM4LDYgKzM4LDcgQEAgbGliX3Nv dXJjZXMgPSBbCiAJJ2lndF94ODYuYycsCiAJJ2luc3Rkb25lLmMnLAogCSdpbnRlbF9hbGxvY2F0 b3IuYycsCisJJ2ludGVsX2FsbG9jYXRvcl9ic3QuYycsCiAJJ2ludGVsX2FsbG9jYXRvcl9tc2dj aGFubmVsLmMnLAogCSdpbnRlbF9hbGxvY2F0b3JfcmFuZG9tLmMnLAogCSdpbnRlbF9hbGxvY2F0 b3JfcmVsb2MuYycsCi0tIAoyLjI1LjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCmlndC1kZXYgbWFpbGluZyBsaXN0CmlndC1kZXZAbGlzdHMuZnJlZWRl c2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8v aWd0LWRldgo=