From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by gabe.freedesktop.org (Postfix) with ESMTPS id ED9EA6E1A5 for ; Wed, 28 Jul 2021 15:12:56 +0000 (UTC) From: Andrzej Turko Date: Wed, 28 Jul 2021 17:12:05 +0200 Message-Id: <20210728151207.5322-4-andrzej.turko@linux.intel.com> In-Reply-To: <20210728151207.5322-1-andrzej.turko@linux.intel.com> References: <20210728151207.5322-1-andrzej.turko@linux.intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t 3/5] 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 aGUgQlNUIGFsbG9jYXRvciBmb2xsb3dzIGJlc3QtZml0IHN0cmF0ZWd5LgpVc2FnZSBvZiBhIGJp bmFyeSBzZWFyY2ggdHJlZSBzcGVlZHMgdXAgZmluZGluZyBmcmVlCmJsb2NrcyBvZiBtZW1vcnkg KGNvbXBhcmVkIHRvIGEgbGlzdCkuCgpTaWduZWQtb2ZmLWJ5OiBBbmRyemVqIFR1cmtvIDxhbmRy emVqLnR1cmtvQGxpbnV4LmludGVsLmNvbT4KQ2M6IFpiaWduaWV3IEtlbXBjennFhHNraSA8emJp Z25pZXcua2VtcGN6eW5za2lAaW50ZWwuY29tPgotLS0KIGxpYi9pbnRlbF9hbGxvY2F0b3IuYyAg ICAgfCAgIDcgKwogbGliL2ludGVsX2FsbG9jYXRvci5oICAgICB8ICAgMSArCiBsaWIvaW50ZWxf YWxsb2NhdG9yX2JzdC5jIHwgNjcyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrCiBsaWIvbWVzb24uYnVpbGQgICAgICAgICAgIHwgICAxICsKIDQgZmlsZXMgY2hhbmdlZCwg NjgxIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvaW50ZWxfYWxsb2NhdG9y X2JzdC5jCgpkaWZmIC0tZ2l0IGEvbGliL2ludGVsX2FsbG9jYXRvci5jIGIvbGliL2ludGVsX2Fs bG9jYXRvci5jCmluZGV4IDEzMzE3NmVkNC4uMmVmNDg3YTA1IDEwMDY0NAotLS0gYS9saWIvaW50 ZWxfYWxsb2NhdG9yLmMKKysrIGIvbGliL2ludGVsX2FsbG9jYXRvci5jCkBAIC03MSw2ICs3MSw5 IEBAIGludGVsX2FsbG9jYXRvcl9yYW5kb21fY3JlYXRlKGludCBmZCwgdWludDY0X3Qgc3RhcnQs IHVpbnQ2NF90IGVuZCk7CiBzdHJ1Y3QgaW50ZWxfYWxsb2NhdG9yICoKIGludGVsX2FsbG9jYXRv cl9zaW1wbGVfY3JlYXRlKGludCBmZCwgdWludDY0X3Qgc3RhcnQsIHVpbnQ2NF90IGVuZCwKIAkJ CSAgICAgIGVudW0gYWxsb2NhdG9yX3N0cmF0ZWd5IHN0cmF0ZWd5KTsKK3N0cnVjdCBpbnRlbF9h bGxvY2F0b3IgKgoraW50ZWxfYWxsb2NhdG9yX2JzdF9jcmVhdGUoaW50IGZkLCB1aW50NjRfdCBz dGFydCwgdWludDY0X3QgZW5kLAorCQkJICAgZW51bSBhbGxvY2F0b3Jfc3RyYXRlZ3kgc3RyYXRl Z3kpOwogCiAvKgogICogSW5zdGVhZCBvZiB0cnlpbmcgdG8gZmluZCBmaXJzdCBlbXB0eSBoYW5k bGUganVzdCBnZXQgbmV3IG9uZS4gQXNzdW1pbmcKQEAgLTMxMSw2ICszMTQsMTAgQEAgc3RhdGlj IHN0cnVjdCBpbnRlbF9hbGxvY2F0b3IgKmludGVsX2FsbG9jYXRvcl9jcmVhdGUoaW50IGZkLAog CQlpYWwgPSBpbnRlbF9hbGxvY2F0b3Jfc2ltcGxlX2NyZWF0ZShmZCwgc3RhcnQsIGVuZCwKIAkJ CQkJCSAgICBhbGxvY2F0b3Jfc3RyYXRlZ3kpOwogCQlicmVhazsKKwljYXNlIElOVEVMX0FMTE9D QVRPUl9CU1Q6CisJCWlhbCA9IGludGVsX2FsbG9jYXRvcl9ic3RfY3JlYXRlKGZkLCBzdGFydCwg ZW5kLAorCQkJCQkJIGFsbG9jYXRvcl9zdHJhdGVneSk7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJ CWlndF9hc3NlcnRfZihpYWwsICJBbGxvY2F0b3IgdHlwZSAlZCBub3QgaW1wbGVtZW50ZWRcbiIs CiAJCQkgICAgIGFsbG9jYXRvcl90eXBlKTsKZGlmZiAtLWdpdCBhL2xpYi9pbnRlbF9hbGxvY2F0 b3IuaCBiL2xpYi9pbnRlbF9hbGxvY2F0b3IuaAppbmRleCA3ZDlkMDExMjMuLjkzZWNiYzNlNCAx MDA2NDQKLS0tIGEvbGliL2ludGVsX2FsbG9jYXRvci5oCisrKyBiL2xpYi9pbnRlbF9hbGxvY2F0 b3IuaApAQCAtMjExLDYgKzIxMSw3IEBAIHZvaWQgaW50ZWxfYWxsb2NhdG9yX3ByaW50KHVpbnQ2 NF90IGFsbG9jYXRvcl9oYW5kbGUpOwogI2RlZmluZSBJTlRFTF9BTExPQ0FUT1JfUkVMT0MgIDEK ICNkZWZpbmUgSU5URUxfQUxMT0NBVE9SX1JBTkRPTSAyCiAjZGVmaW5lIElOVEVMX0FMTE9DQVRP Ul9TSU1QTEUgMworI2RlZmluZSBJTlRFTF9BTExPQ0FUT1JfQlNUICAgIDQKIAogI2RlZmluZSBH RU44X0dUVF9BRERSRVNTX1dJRFRIIDQ4CiAKZGlmZiAtLWdpdCBhL2xpYi9pbnRlbF9hbGxvY2F0 b3JfYnN0LmMgYi9saWIvaW50ZWxfYWxsb2NhdG9yX2JzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMC4uNGFmZmE0OTI3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2ludGVs X2FsbG9jYXRvcl9ic3QuYwpAQCAtMCwwICsxLDY3MiBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IE1JVAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDIxIEludGVsIENvcnBvcmF0aW9uCisg Ki8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgImlndC5oIgorI2luY2x1ZGUgImln dF9tYXAuaCIKKyNpbmNsdWRlICJpZ3RfYnN0LmgiCisjaW5jbHVkZSAiaW50ZWxfYWxsb2NhdG9y LmgiCisKKy8qIFRoZSBhZGRyZXNzZXMgb2YgYWxsb2NhdGVkIG9iamVjdHMgd2lsbCBiZQorICog c3RyaWN0bHkgc21hbGxlciB0aGFuIHRoaXMgdmFsdWUgKHRoZSB1cHBlcgorICogZW5kIG9mIHRo ZSBhZGRyZXNzIHJhbmdlIGNhbm5vdCBleGNlZWQgaXQpLgorICogVGhpcyBpcyB0byBlbmFibGUg dGhlIHVzZSBvZiBjYW5vbmljYWwKKyAqIGFkZHJlc3Nlcy4KKyAqLworI2RlZmluZSBJQUxCX01B WF9BRERSICgxdWxsPDw0OCkKKworI2RlZmluZSBSRVNFUlZFRCA0MDk2CisKKy8qIEF2b2lkIGNv bXBpbGF0aW9uIHdhcm5pbmcgKi8KK3N0cnVjdCBpbnRlbF9hbGxvY2F0b3IgKgoraW50ZWxfYWxs b2NhdG9yX2JzdF9jcmVhdGUoaW50IGZkLCB1aW50NjRfdCBzdGFydCwgdWludDY0X3QgZW5kLAor CQkJICAgZW51bSBhbGxvY2F0b3Jfc3RyYXRlZ3kgc3RyYXRlZ3kpOworCitzdHJ1Y3QgaW50ZWxf YWxsb2NhdG9yX2JzdCB7CisJc3RydWN0IGlndF9tYXAgKm9iamVjdHM7CisJc3RydWN0IGlndF9t YXAgKnJlc2VydmVkOworCXN0cnVjdCBpZ3RfYnN0ICpieV9zaXplOworCXN0cnVjdCBpZ3RfYnN0 ICpieV9vZmZzZXQ7CisKKwl1aW50NjRfdCBzdGFydDsKKwl1aW50NjRfdCBlbmQ7CisKKwkvKiBz dGF0aXN0aWNzICovCisJdWludDY0X3QgdG90YWxfc2l6ZTsKKwl1aW50NjRfdCBhbGxvY2F0ZWRf c2l6ZTsKKwl1aW50NjRfdCBhbGxvY2F0ZWRfb2JqZWN0czsKKwl1aW50NjRfdCByZXNlcnZlZF9z aXplOworCXVpbnQ2NF90IHJlc2VydmVkX2FyZWFzOworfTsKKworc3RydWN0IGludGVsX2FsbG9j YXRvcl9ic3Rfdm1hX2hvbGUgeworCisJLyogcG9pbnRlciB0byB0aGUgbm9kZSBpbiB0aGUgYnlf c2l6ZSBic3QgKi8KKwl2b2lkICpzaXplX3B0cjsKKworCS8qIHBvaW50ZXIgdG8gdGhlIG5vZGUg aW4gdGhlIGJ5X29mZnNldCBic3QgKi8KKwl2b2lkICpvZmZzZXRfcHRyOworCisJdWludDY0X3Qg c2l6ZTsKKwl1aW50NjRfdCBvZmZzZXQ7Cit9OworCitzdHJ1Y3QgaW50ZWxfYWxsb2NhdG9yX3Jl Y29yZCB7CisJdWludDMyX3QgaGFuZGxlOworCXVpbnQ2NF90IG9mZnNldDsKKwl1aW50NjRfdCBz aXplOworfTsKKworLyogMl4zMSArIDJeMjkgLSAyXjI1ICsgMl4yMiAtIDJeMTkgLSAyXjE2ICsg MSAqLworI2RlZmluZSBHT0xERU5fUkFUSU9fUFJJTUVfMzIgMHg5ZTM3MDAwMVVMCisKKy8qICAy XjYzICsgMl42MSAtIDJeNTcgKyAyXjU0IC0gMl41MSAtIDJeMTggKyAxICovCisjZGVmaW5lIEdP TERFTl9SQVRJT19QUklNRV82NCAweDllMzdmZmZmZmZmYzAwMDFVTEwKKworc3RhdGljIGlubGlu ZSB1aW50MzJfdCBoYXNoX2hhbmRsZXMoY29uc3Qgdm9pZCAqdmFsKQoreworCXVpbnQzMl90IGhh c2ggPSAqKHVpbnQzMl90ICopIHZhbDsKKworCWhhc2ggPSBoYXNoICogR09MREVOX1JBVElPX1BS SU1FXzMyOworCXJldHVybiBoYXNoOworfQorCitzdGF0aWMgaW50IGVxdWFsX2hhbmRsZXMoY29u c3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKK3sKKwl1aW50MzJfdCAqa2V5MSA9ICh1aW50MzJf dCAqKSBhLCAqa2V5MiA9ICh1aW50MzJfdCAqKSBiOworCisJcmV0dXJuICprZXkxID09ICprZXky OworfQorCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IGhhc2hfb2Zmc2V0cyhjb25zdCB2b2lkICp2 YWwpCit7CisJdWludDY0X3QgaGFzaCA9ICoodWludDY0X3QgKikgdmFsOworCisJaGFzaCA9IGhh c2ggKiBHT0xERU5fUkFUSU9fUFJJTUVfNjQ7CisJLyogSGlnaCBiaXRzIGFyZSBtb3JlIHJhbmRv bSwgc28gdXNlIHRoZW0uICovCisJcmV0dXJuIGhhc2ggPj4gMzI7Cit9CisKK3N0YXRpYyBpbnQg ZXF1YWxfb2Zmc2V0cyhjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQoreworCXVpbnQ2NF90 ICprZXkxID0gKHVpbnQ2NF90ICopIGEsICprZXkyID0gKHVpbnQ2NF90ICopIGI7CisKKwlyZXR1 cm4gKmtleTEgPT0gKmtleTI7Cit9CisKK3N0YXRpYyB2b2lkIG1hcF9lbnRyeV9mcmVlX2Z1bmMo c3RydWN0IGlndF9tYXBfZW50cnkgKmVudHJ5KQoreworCWZyZWUoZW50cnktPmRhdGEpOworfQor CitzdGF0aWMgdm9pZCBob2xlc19ic3RfdmFsaWRhdGUoc3RydWN0IGludGVsX2FsbG9jYXRvcl9i c3QgKmlhbGIpCit7CisJc3RydWN0IGlndF9ic3QgKm9mZnNldF9ic3QsICpzaXplX2JzdDsKKwlz dHJ1Y3QgaW50ZWxfYWxsb2NhdG9yX2JzdF92bWFfaG9sZSAqaG9sZTsKKwl2b2lkICpub2RlcHRy OworCWludCBieV9vZmZzZXRfc2l6ZSwgYnlfc2l6ZV9zaXplOworCXVpbnQ2NF90IHByZXZfb2Zm c2V0OworCisJb2Zmc2V0X2JzdCA9IGlhbGItPmJ5X29mZnNldDsKKwlzaXplX2JzdCA9IGlhbGIt PmJ5X3NpemU7CisJYnlfb2Zmc2V0X3NpemUgPSBvZmZzZXRfYnN0LT52YWxpZGF0ZShvZmZzZXRf YnN0KTsKKwlieV9zaXplX3NpemUgPSBzaXplX2JzdC0+dmFsaWRhdGUoc2l6ZV9ic3QpOworCWln dF9hc3NlcnQoYnlfb2Zmc2V0X3NpemUgPT0gYnlfc2l6ZV9zaXplKTsKKworCXByZXZfb2Zmc2V0 ID0gSUFMQl9NQVhfQUREUjsKKwlpZ3RfYnN0X2Zvcl9lYWNoX25vZGVfcmV2KG9mZnNldF9ic3Qs IG5vZGVwdHIpIHsKKwkJaG9sZSA9IGlndF9ic3RfZ2V0X3ZhbHVlKG9mZnNldF9ic3QsIG5vZGVw dHIpOworCQlpZ3RfYXNzZXJ0KGhvbGUpOworCQkvKiBNYWtlIHN1cmUgdGhlIGhvbGUgaXMgc3Rv cmVkIHVuZGVyIGNvcnJlY3Qga2V5cyBpbgorCQkgKiB0aGUgYmFsYW5jZWQgc2VhcmNoIHRyZWVz LgorCQkgKi8KKwkJaWd0X2Fzc2VydChob2xlLT5vZmZzZXQgPT0gaWd0X2JzdF9nZXRfa2V5KG9m ZnNldF9ic3QsIGhvbGUtPm9mZnNldF9wdHIpKTsKKwkJaWd0X2Fzc2VydChob2xlLT5zaXplID09 IGlndF9ic3RfZ2V0X2tleShzaXplX2JzdCwgaG9sZS0+c2l6ZV9wdHIpKTsKKworCQlpZ3RfYXNz ZXJ0KGhvbGUtPm9mZnNldCArIGhvbGUtPnNpemUgPiBob2xlLT5vZmZzZXQpOworCQkvKiBNYWtl IHN1cmUgbm8gcGFpciBvZiBob2xlcyBpcyBhZGphY2VudC4gKi8KKwkJaWd0X2Fzc2VydChwcmV2 X29mZnNldCA+IGhvbGUtPm9mZnNldCArIGhvbGUtPnNpemUpOworCisJCXByZXZfb2Zmc2V0ID0g aG9sZS0+b2Zmc2V0OworCX0KK30KKworc3RhdGljIHZvaWQgX19pbnRlbF9hbGxvY2F0b3JfYnN0 X2FsbG9jKHN0cnVjdCBpbnRlbF9hbGxvY2F0b3JfYnN0ICppYWxiLAorCQkJCQlzdHJ1Y3QgaW50 ZWxfYWxsb2NhdG9yX2JzdF92bWFfaG9sZSAqaG9sZSwKKwkJCQkJdWludDY0X3Qgb2Zmc2V0LCB1 aW50NjRfdCBzaXplKQoreworCXN0cnVjdCBpZ3RfYnN0ICpvZmZzZXRfYnN0LCAqc2l6ZV9ic3Q7 CisJc3RydWN0IGludGVsX2FsbG9jYXRvcl9ic3Rfdm1hX2hvbGUgKm5ld2hvbGU7CisJdWludDY0 X3QgbG93ZXIsIGhpZ2hlcjsKKworCWlndF9hc3NlcnQoaG9sZS0+b2Zmc2V0IDw9IG9mZnNldCk7 CisJaWd0X2Fzc2VydChob2xlLT5vZmZzZXQgKyBob2xlLT5zaXplID49IG9mZnNldCArIHNpemUp OworCisJb2Zmc2V0X2JzdCA9IGlhbGItPmJ5X29mZnNldDsKKwlzaXplX2JzdCA9IGlhbGItPmJ5 X3NpemU7CisKKwlsb3dlciA9IG9mZnNldCAtIGhvbGUtPm9mZnNldDsKKwloaWdoZXIgPSBob2xl LT5zaXplIC0gc2l6ZSAtIGxvd2VyOworCisJaWYgKGxvd2VyID4gMCAmJiBoaWdoZXIgPiAwKSB7 CisJCS8qIFRoZXJlIGFyZSBsZWZ0b3ZlcnMgb24gYm90aCBsb3dlciBhbmQgaGlnaGVyIGFkZHJl c3Nlcy4KKwkJICogQ3JlYXRlIGEgaG9sZSBmb3IgaGlnaGVyIGFkZHJlc3NlcyBmcm9tIHNjcmF0 Y2ggYW5kCisJCSAqIG9uZSBmb3IgbG93ZXIgYWRkcmVzc2VzIGJ5IG1vZGlmeWluZyB0aGUgZXhp c3RpbmcgaG9sZS4KKwkJICovCisKKwkJbmV3aG9sZSA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IGlu dGVsX2FsbG9jYXRvcl9ic3Rfdm1hX2hvbGUpKTsKKwkJaWd0X2Fzc2VydChuZXdob2xlKTsKKwor CQluZXdob2xlLT5vZmZzZXQgPSBvZmZzZXQgKyBzaXplOworCQluZXdob2xlLT5zaXplID0gaGln aGVyOworCisJCW5ld2hvbGUtPm9mZnNldF9wdHIgPSBpZ3RfYnN0X2luc2VydChvZmZzZXRfYnN0 LCBuZXdob2xlLCBuZXdob2xlLT5vZmZzZXQpOworCQluZXdob2xlLT5zaXplX3B0ciA9IGlndF9i c3RfaW5zZXJ0KHNpemVfYnN0LCBuZXdob2xlLCBuZXdob2xlLT5zaXplKTsKKworCQlob2xlLT5z aXplID0gbG93ZXI7CisJCWlndF9ic3RfZXJhc2Uoc2l6ZV9ic3QsIGhvbGUtPnNpemVfcHRyKTsK KwkJaG9sZS0+c2l6ZV9wdHIgPSBpZ3RfYnN0X2luc2VydChzaXplX2JzdCwgaG9sZSwgaG9sZS0+ c2l6ZSk7CisKKwl9IGVsc2UgaWYgKGhpZ2hlciA+IDApIHsKKwkJLyogVGhlcmUgaXMgbm8gZnJl ZSBhZGRyZXNzIHNwYWNlIGluIHRoaXMgaG9sZSBsZWZ0CisJCSAqIGJlbG93IHRoZSBhbGxvY2F0 ZWQgb2JqZWN0LiBPbmx5IGEgcG9ydGlvbiBvZgorCQkgKiBoaWdoZXIgYWRkcmVzc2VzIGlzIHN0 aWxsIGZyZWUsIHNvIGp1c3QgYWRqdXN0IHRoZQorCQkgKiBleGlzdGluZyBob2xlIGFjY29yZGlu Z2x5IChjaGFuZ2Ugb2Zmc2V0IGFuZCBzaXplKS4KKwkJICovCisKKwkJaG9sZS0+b2Zmc2V0ID0g b2Zmc2V0ICsgc2l6ZTsKKwkJaG9sZS0+c2l6ZSA9IGhpZ2hlcjsKKworCQlpZ3RfYnN0X2VyYXNl KG9mZnNldF9ic3QsIGhvbGUtPm9mZnNldF9wdHIpOworCQlpZ3RfYnN0X2VyYXNlKHNpemVfYnN0 LCBob2xlLT5zaXplX3B0cik7CisKKwkJaG9sZS0+b2Zmc2V0X3B0ciA9IGlndF9ic3RfaW5zZXJ0 KG9mZnNldF9ic3QsIGhvbGUsIGhvbGUtPm9mZnNldCk7CisJCWhvbGUtPnNpemVfcHRyID0gaWd0 X2JzdF9pbnNlcnQoc2l6ZV9ic3QsIGhvbGUsIGhvbGUtPnNpemUpOworCisJfSBlbHNlIGlmIChs b3dlciA+IDApIHsKKwkJLyogVGhlIGFsbG9jYXRlZCBibG9jayBpcyBhbGlnbmVkIHRvIHRoZSBl bmQgb2YgdGhlCisJCSAqIGhvbGUgYW5kIHRoZSBsb3dlciBhZGRyZXNzZXMgYXJlIHN0aWxsIGZy ZWUsCisJCSAqIHNvIHNocmluayB0aGUgZXhpc3RpbmcgaG9sZSAoY2hhbmdlIHNpemUsCisJCSAq IGJ1dCBub3QgdGhlIG9mZnNldCkuCisJCSAqLworCisJCWhvbGUtPnNpemUgPSBsb3dlcjsKKwkJ aWd0X2JzdF9lcmFzZShzaXplX2JzdCwgaG9sZS0+c2l6ZV9wdHIpOworCQlob2xlLT5zaXplX3B0 ciA9IGlndF9ic3RfaW5zZXJ0KHNpemVfYnN0LCBob2xlLCBob2xlLT5zaXplKTsKKworCX0gZWxz ZSB7CisJCS8qIFRoZXJlIGFyZSBubyBsZWZ0b3ZlcnMsIGp1c3QgZXJhc2UgdGhlIGhvbGUuICov CisKKwkJaWd0X2JzdF9lcmFzZShvZmZzZXRfYnN0LCBob2xlLT5vZmZzZXRfcHRyKTsKKwkJaWd0 X2JzdF9lcmFzZShzaXplX2JzdCwgaG9sZS0+c2l6ZV9wdHIpOworCQlmcmVlKGhvbGUpOworCX0K K30KKworc3RhdGljIHZvaWQgX19pbnRlbF9hbGxvY2F0b3JfYnN0X2FkZF9ob2xlKHN0cnVjdCBp bnRlbF9hbGxvY2F0b3JfYnN0ICppYWxiLAorCQkJCQkgICB1aW50NjRfdCBvZmZzZXQsIHVpbnQ2 NF90IHNpemUpCit7CisJc3RydWN0IGlndF9ic3QgKm9mZnNldF9ic3QsICpzaXplX2JzdDsKKwlz dHJ1Y3QgaW50ZWxfYWxsb2NhdG9yX2JzdF92bWFfaG9sZSAqaG9sZSwgKm54dCwgKnBydjsKKwor CW9mZnNldF9ic3QgPSBpYWxiLT5ieV9vZmZzZXQ7CisJc2l6ZV9ic3QgPSBpYWxiLT5ieV9zaXpl OworCisJcHJ2ID0gaWd0X2JzdF9xdWVyeV9wcmVkZWNlc3NvcihvZmZzZXRfYnN0LCBvZmZzZXQp OworCWlmIChwcnYgJiYgcHJ2LT5vZmZzZXQgKyBwcnYtPnNpemUgPCBvZmZzZXQpCisJCXBydiA9 IE5VTEw7CisKKwlueHQgPSBpZ3RfYnN0X3F1ZXJ5X3N1Y2Nlc3NvcihvZmZzZXRfYnN0LCBvZmZz ZXQpOworCWlmIChueHQgJiYgbnh0LT5vZmZzZXQgPiBvZmZzZXQgKyBzaXplKQorCQlueHQgPSBO VUxMOworCisJaWYgKG54dCAmJiBwcnYpIHsKKwkJLyogVGhlcmUgYXJlIGhvbGVzIGFkamFjZW50 IHRvIHRoZSBuZXcgb25lCisJCSAqIGJvdGggYmVsb3cgYW5kIGFib3ZlIGl0IGluIHRoZSBhZGRy ZXNzIHNwYWNlLgorCQkgKiBNZXJnZSB0aGVtIGFsbCBpbnRvIGEgc2luZ2xlIGhvbGU6CisJCSAq IGVyYXNlIHRoZSB1cHBlciBhbmQgaW5jcmVhc2Ugc2l6ZSBvZiB0aGUKKwkJICogbG93ZXIgb25l LgorCQkgKi8KKwkJcHJ2LT5zaXplICs9IHNpemUgKyBueHQtPnNpemU7CisKKwkJaWd0X2JzdF9l cmFzZShvZmZzZXRfYnN0LCBueHQtPm9mZnNldF9wdHIpOworCQlpZ3RfYnN0X2VyYXNlKHNpemVf YnN0LCBueHQtPnNpemVfcHRyKTsKKwkJZnJlZShueHQpOworCisJCWlndF9ic3RfZXJhc2Uoc2l6 ZV9ic3QsIHBydi0+c2l6ZV9wdHIpOworCQlwcnYtPnNpemVfcHRyID0gaWd0X2JzdF9pbnNlcnQo c2l6ZV9ic3QsIHBydiwgcHJ2LT5zaXplKTsKKworCX0gZWxzZSBpZiAobnh0KSB7CisJCS8qIFRo ZSBvbmx5IGFkamFjZW50IGhvbGUgaXMgYWJvdmUgdGhlIG5ldyBvbmUsCisJCSAqIHNvIGluY3Jl YXNlIGl0cyBzaXplIGFuZCB1cGRhdGUgaXRzIG9mZnNldC4KKwkJICovCisJCW54dC0+c2l6ZSAr PSBzaXplOworCQlueHQtPm9mZnNldCA9IG9mZnNldDsKKworCQlpZ3RfYnN0X2VyYXNlKG9mZnNl dF9ic3QsIG54dC0+b2Zmc2V0X3B0cik7CisJCWlndF9ic3RfZXJhc2Uoc2l6ZV9ic3QsIG54dC0+ c2l6ZV9wdHIpOworCisJCW54dC0+b2Zmc2V0X3B0ciA9IGlndF9ic3RfaW5zZXJ0KG9mZnNldF9i c3QsIG54dCwgbnh0LT5vZmZzZXQpOworCQlueHQtPnNpemVfcHRyID0gaWd0X2JzdF9pbnNlcnQo c2l6ZV9ic3QsIG54dCwgbnh0LT5zaXplKTsKKworCX0gZWxzZSBpZiAocHJ2KSB7CisJCS8qIFRo ZSBvbmx5IGFkamFjZW50IGhvbGUgaXMgYmVsb3cgdGhlIG5ldyBvbmUsCisJCSAqIGp1c3QgaW5j cmVhc2UgaXRzIHNpemUuCisJCSAqLworCQlwcnYtPnNpemUgKz0gc2l6ZTsKKwkJaWd0X2JzdF9l cmFzZShzaXplX2JzdCwgcHJ2LT5zaXplX3B0cik7CisJCXBydi0+c2l6ZV9wdHIgPSBpZ3RfYnN0 X2luc2VydChzaXplX2JzdCwgcHJ2LCBwcnYtPnNpemUpOworCisJfSBlbHNlIHsKKwkJLyogVGhl cmUgYXJlIG5vIGhvbGVzIG5laWdoYm91cmluZyB0aGUgbmV3IG9uZSwKKwkJICogc28ganVzdCBj cmVhdGUgYSBuZXcgaG9sZS4KKwkJICovCisJCWhvbGUgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBp bnRlbF9hbGxvY2F0b3JfYnN0X3ZtYV9ob2xlKSk7CisJCWlndF9hc3NlcnQoaG9sZSk7CisKKwkJ aG9sZS0+b2Zmc2V0ID0gb2Zmc2V0OworCQlob2xlLT5zaXplID0gc2l6ZTsKKwkJaG9sZS0+b2Zm c2V0X3B0ciA9IGlndF9ic3RfaW5zZXJ0KG9mZnNldF9ic3QsIGhvbGUsIG9mZnNldCk7CisJCWhv bGUtPnNpemVfcHRyID0gaWd0X2JzdF9pbnNlcnQoc2l6ZV9ic3QsIGhvbGUsIHNpemUpOworCisJ fQorfQorCisKK3N0YXRpYyB2b2lkIGludGVsX2FsbG9jYXRvcl9ic3RfZ2V0X2FkZHJlc3NfcmFu Z2Uoc3RydWN0IGludGVsX2FsbG9jYXRvciAqaWFsLAorCQkJCSAgICAgIHVpbnQ2NF90ICpzdGFy dHAsIHVpbnQ2NF90ICplbmRwKQoreworCXN0cnVjdCBpbnRlbF9hbGxvY2F0b3JfYnN0ICppYWxi ID0gaWFsLT5wcml2OworCisJaWYgKHN0YXJ0cCkKKwkJKnN0YXJ0cCA9IGlhbGItPnN0YXJ0Owor CisJaWYgKGVuZHApCisJCSplbmRwID0gaWFsYi0+ZW5kOworfQorCitzdGF0aWMgdWludDY0X3Qg aW50ZWxfYWxsb2NhdG9yX2JzdF9hbGxvYyhzdHJ1Y3QgaW50ZWxfYWxsb2NhdG9yICppYWwsIHVp bnQzMl90IGhhbmRsZSwKKwkJCQkJICB1aW50NjRfdCBzaXplLCB1aW50NjRfdCBhbGlnbm1lbnQs CisJCQkJCSAgZW51bSBhbGxvY2F0b3Jfc3RyYXRlZ3kgc3RyYXRlZ3kpCit7CisJc3RydWN0IGlu dGVsX2FsbG9jYXRvcl9ic3QgKmlhbGIgPSBpYWwtPnByaXY7CisJc3RydWN0IGludGVsX2FsbG9j YXRvcl9yZWNvcmQgKnJlY29yZDsKKwlzdHJ1Y3QgaW50ZWxfYWxsb2NhdG9yX2JzdF92bWFfaG9s ZSAqaG9sZTsKKwl1aW50NjRfdCBtaXNhbGlnbm1lbnQsIG9mZnNldDsKKworCWlndF9hc3NlcnQo c2l6ZSA+IDApOworCWFsaWdubWVudCA9IChhbGlnbm1lbnQgPiAwID8gYWxpZ25tZW50IDogMSk7 CisKKwlyZWNvcmQgPSBpZ3RfbWFwX3NlYXJjaChpYWxiLT5vYmplY3RzLCAmaGFuZGxlKTsKKwor CWlmIChyZWNvcmQpIHsKKwkJLyogVGhpcyBibG9jayBoYXMgYWxyZWFkeSBiZWVuIGFsbG9jYXRl ZCwKKwkJICogY2hlY2sgdGhhdCBpdCBzYXRpZmllcyB0aGUgcmVxdWlyZW1lbnRzLgorCQkgKi8K KworCQlpZ3RfYXNzZXJ0KHNpemUgPT0gcmVjb3JkLT5zaXplKTsKKwkJaWd0X2Fzc2VydChyZWNv cmQtPm9mZnNldCAlIGFsaWdubWVudCA9PSAwKTsKKworCQlyZXR1cm4gcmVjb3JkLT5vZmZzZXQ7 CisJfQorCisJLyogTG9vayBmb3IgYSBzbGlnaHRseSBiaWdnZXIgaG9sZSB0byBtYWtlIHN1cmUK KwkgKiB0aGUgYmxvY2sgY2FuIGJlIGFsaWduZWQgcHJvcGVybHkuCisJICovCisJaG9sZSA9IGln dF9ic3RfcXVlcnlfc3VjY2Vzc29yKGlhbGItPmJ5X3NpemUsCisJCQkJICAgICAgIHNpemUgKyBh bGlnbm1lbnQgLSAxKTsKKworCS8qIExvb2sgZm9yIGEgc21hbGxlciBob2xlLCBtYXliZSBwcm9w ZXIgYWxpZ25tZW50CisJICogd2lsbCBzdGlsbCBiZSBwb3NzaWJsZS4KKwkgKi8KKwlpZiAoIWhv bGUpCisJCWhvbGUgPSBpZ3RfYnN0X3F1ZXJ5X3N1Y2Nlc3NvcihpYWxiLT5ieV9zaXplLCBzaXpl KTsKKworCWlmICghaG9sZSkKKwkJcmV0dXJuIEFMTE9DX0lOVkFMSURfQUREUkVTUzsKKworCWlm IChzdHJhdGVneSA9PSBBTExPQ19TVFJBVEVHWV9OT05FKQorCQlzdHJhdGVneSA9IGlhbC0+c3Ry YXRlZ3k7CisKKwlzd2l0Y2ggKHN0cmF0ZWd5KSB7CisJY2FzZSBBTExPQ19TVFJBVEVHWV9MT1df VE9fSElHSDoKKwkJbWlzYWxpZ25tZW50ID0gYWxpZ25tZW50IC0gKGhvbGUtPm9mZnNldCAlIGFs aWdubWVudCk7CisJCW1pc2FsaWdubWVudCA9IG1pc2FsaWdubWVudCA9PSBhbGlnbm1lbnQgPyAw IDogbWlzYWxpZ25tZW50OworCQlvZmZzZXQgPSBob2xlLT5vZmZzZXQgKyBtaXNhbGlnbm1lbnQ7 CisKKwkJaWYgKG1pc2FsaWdubWVudCArIHNpemUgPiBob2xlLT5zaXplKQorCQkJcmV0dXJuIEFM TE9DX0lOVkFMSURfQUREUkVTUzsKKworCQlicmVhazsKKwljYXNlIEFMTE9DX1NUUkFURUdZX0hJ R0hfVE9fTE9XOgorCQlvZmZzZXQgPSBob2xlLT5vZmZzZXQgKyBob2xlLT5zaXplIC0gc2l6ZTsK KwkJb2Zmc2V0ID0gb2Zmc2V0IC0gb2Zmc2V0ICUgYWxpZ25tZW50OworCisJCWlmIChvZmZzZXQg PCBob2xlLT5vZmZzZXQpCisJCQlyZXR1cm4gQUxMT0NfSU5WQUxJRF9BRERSRVNTOworCisJCWJy ZWFrOworCWRlZmF1bHQ6CisJCWlndF9hc3NlcnRfZigwLCAiVW5zdXBwb3J0ZWQgc3RyYXRlZ3ku Iik7CisJfQorCisJX19pbnRlbF9hbGxvY2F0b3JfYnN0X2FsbG9jKGlhbGIsIGhvbGUsIG9mZnNl dCwgc2l6ZSk7CisKKwlyZWNvcmQgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBpbnRlbF9hbGxvY2F0 b3JfcmVjb3JkKSk7CisJaWd0X2Fzc2VydChyZWNvcmQpOworCXJlY29yZC0+aGFuZGxlID0gaGFu ZGxlOworCXJlY29yZC0+b2Zmc2V0ID0gb2Zmc2V0OworCXJlY29yZC0+c2l6ZSA9IHNpemU7CisK KwlpZ3RfbWFwX2luc2VydChpYWxiLT5vYmplY3RzLCAmcmVjb3JkLT5oYW5kbGUsIHJlY29yZCk7 CisJaWFsYi0+YWxsb2NhdGVkX29iamVjdHMrKzsKKwlpYWxiLT5hbGxvY2F0ZWRfc2l6ZSArPSBz aXplOworCisJcmV0dXJuIG9mZnNldDsKK30KKworc3RhdGljIGJvb2wgaW50ZWxfYWxsb2NhdG9y X2JzdF9pc19hbGxvY2F0ZWQoc3RydWN0IGludGVsX2FsbG9jYXRvciAqaWFsLCB1aW50MzJfdCBo YW5kbGUsCisJCQkJCSAgICAgdWludDY0X3Qgc2l6ZSwgdWludDY0X3Qgb2Zmc2V0KQoreworCXN0 cnVjdCBpbnRlbF9hbGxvY2F0b3JfYnN0ICppYWxiID0gaWFsLT5wcml2OworCXN0cnVjdCBpbnRl bF9hbGxvY2F0b3JfcmVjb3JkICpyZWNvcmQ7CisJYm9vbCBzYW1lOworCisJb2Zmc2V0ID0gREVD QU5PTklDQUwob2Zmc2V0KTsKKwlyZWNvcmQgPSBpZ3RfbWFwX3NlYXJjaChpYWxiLT5vYmplY3Rz LCAmaGFuZGxlKTsKKwlpZiAocmVjb3JkKSB7CisJCXNhbWUgPSAocmVjb3JkLT5oYW5kbGUgPT0g aGFuZGxlICYmIHJlY29yZC0+c2l6ZSA9PSBzaXplICYmCisJCQlyZWNvcmQtPm9mZnNldCA9PSBv ZmZzZXQpOworCX0gZWxzZSB7CisJCXNhbWUgPSBmYWxzZTsKKwl9CisKKwlyZXR1cm4gc2FtZTsK K30KKworc3RhdGljIGJvb2wgaW50ZWxfYWxsb2NhdG9yX2JzdF9mcmVlKHN0cnVjdCBpbnRlbF9h bGxvY2F0b3IgKmlhbCwgdWludDMyX3QgaGFuZGxlKQoreworCXN0cnVjdCBpbnRlbF9hbGxvY2F0 b3JfYnN0ICppYWxiID0gaWFsLT5wcml2OworCXN0cnVjdCBpbnRlbF9hbGxvY2F0b3JfcmVjb3Jk ICpyZWNvcmQ7CisKKwlyZWNvcmQgPSBpZ3RfbWFwX3NlYXJjaChpYWxiLT5vYmplY3RzLCAmaGFu ZGxlKTsKKworCWlmICghcmVjb3JkKQorCQlyZXR1cm4gZmFsc2U7CisKKwlfX2ludGVsX2FsbG9j YXRvcl9ic3RfYWRkX2hvbGUoaWFsYiwgcmVjb3JkLT5vZmZzZXQsIHJlY29yZC0+c2l6ZSk7CisJ aWFsYi0+YWxsb2NhdGVkX29iamVjdHMtLTsKKwlpYWxiLT5hbGxvY2F0ZWRfc2l6ZSAtPSByZWNv cmQtPnNpemU7CisJaWd0X21hcF9yZW1vdmUoaWFsYi0+b2JqZWN0cywgJmhhbmRsZSwgbWFwX2Vu dHJ5X2ZyZWVfZnVuYyk7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgaW50ZWxf YWxsb2NhdG9yX2JzdF9yZXNlcnZlKHN0cnVjdCBpbnRlbF9hbGxvY2F0b3IgKmlhbCwgdWludDMy X3QgaGFuZGxlLAorCQkJCQl1aW50NjRfdCBzdGFydCwgdWludDY0X3QgZW5kKQoreworCXN0cnVj dCBpbnRlbF9hbGxvY2F0b3JfYnN0ICppYWxiID0gaWFsLT5wcml2OworCXN0cnVjdCBpbnRlbF9h bGxvY2F0b3JfYnN0X3ZtYV9ob2xlICpob2xlOworCXN0cnVjdCBpbnRlbF9hbGxvY2F0b3JfcmVj b3JkICpyZWNvcmQ7CisKKwlzdGFydCA9IERFQ0FOT05JQ0FMKHN0YXJ0KTsKKwlpZiAoZW5kICE9 ICgxdWxsIDw8IEdFTjhfR1RUX0FERFJFU1NfV0lEVEgpKQorCQllbmQgPSBERUNBTk9OSUNBTChl bmQpOworCisJaWd0X2Fzc2VydChzdGFydCA8IGVuZCk7CisJaWd0X2Fzc2VydChzdGFydCA+PSBp YWxiLT5zdGFydCk7CisJaWd0X2Fzc2VydChlbmQgPD0gaWFsYi0+ZW5kKTsKKworCWhvbGUgPSBp Z3RfYnN0X3F1ZXJ5X3ByZWRlY2Vzc29yKGlhbGItPmJ5X29mZnNldCwgc3RhcnQpOworCWlmICgh aG9sZSkKKwkJcmV0dXJuIGZhbHNlOworCisJaWd0X2Fzc2VydChob2xlLT5vZmZzZXQgPD0gc3Rh cnQpOworCisJaWYgKGhvbGUtPm9mZnNldCArIGhvbGUtPnNpemUgPCBlbmQpCisJCXJldHVybiBm YWxzZTsKKworCV9faW50ZWxfYWxsb2NhdG9yX2JzdF9hbGxvYyhpYWxiLCBob2xlLCBzdGFydCwg ZW5kIC0gc3RhcnQpOworCisJcmVjb3JkID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgaW50ZWxfYWxs b2NhdG9yX2JzdF92bWFfaG9sZSkpOworCWlndF9hc3NlcnQocmVjb3JkKTsKKwlyZWNvcmQtPm9m ZnNldCA9IHN0YXJ0OworCXJlY29yZC0+c2l6ZSA9IGVuZCAtIHN0YXJ0OworCXJlY29yZC0+aGFu ZGxlID0gaGFuZGxlOworCWlndF9tYXBfaW5zZXJ0KGlhbGItPnJlc2VydmVkLCAmcmVjb3JkLT5v ZmZzZXQsIHJlY29yZCk7CisJaWFsYi0+cmVzZXJ2ZWRfYXJlYXMrKzsKKwlpYWxiLT5yZXNlcnZl ZF9zaXplICs9IGVuZCAtIHN0YXJ0OworCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29s IGludGVsX2FsbG9jYXRvcl9ic3RfdW5yZXNlcnZlKHN0cnVjdCBpbnRlbF9hbGxvY2F0b3IgKmlh bCwgdWludDMyX3QgaGFuZGxlLAorCQkJCQkgIHVpbnQ2NF90IHN0YXJ0LCB1aW50NjRfdCBlbmQp Cit7CisJc3RydWN0IGludGVsX2FsbG9jYXRvcl9ic3QgKmlhbGIgPSBpYWwtPnByaXY7CisJc3Ry dWN0IGludGVsX2FsbG9jYXRvcl9yZWNvcmQgKnJlY29yZDsKKworCXN0YXJ0ID0gREVDQU5PTklD QUwoc3RhcnQpOworCWlmIChlbmQgIT0gKDF1bGwgPDwgR0VOOF9HVFRfQUREUkVTU19XSURUSCkp CisJCWVuZCA9IERFQ0FOT05JQ0FMKGVuZCk7CisKKwlyZWNvcmQgPSBpZ3RfbWFwX3NlYXJjaChp YWxiLT5yZXNlcnZlZCwgJnN0YXJ0KTsKKworCWlmICghcmVjb3JkKSB7CisJCWlndF93YXJuKCJP bmx5IGEgcmVzZXJ2ZWQgYmxvY2sgY2FuIGJlIHVucmVzZXJ2ZWQuXG4iKTsKKwkJcmV0dXJuIGZh bHNlOworCX0KKworCWlmIChyZWNvcmQtPnNpemUgIT0gZW5kIC0gc3RhcnQpIHsKKwkJaWd0X3dh cm4oIlNpemUgb2YgdGhlIGJsb2NrIGRvZXMgbm90IG1hdGNoIHRoZSBwYXNzZWQgdmFsdWUuXG4i KTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCWlmIChyZWNvcmQtPm9mZnNldCAhPSBzdGFydCkg eworCQlpZ3Rfd2FybigiT2Zmc2V0IG9mIHRoZSBibG9jayBkb2VzIG5vdCBtYXRjaCB0aGUgcGFz c2VkIHZhbHVlLlxuIik7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlpZiAocmVjb3JkLT5oYW5k bGUgIT0gaGFuZGxlKSB7CisJCWlndF93YXJuKCJIYW5kbGUgJXUgZG9lcyBub3QgbWF0Y2ggdGhl IHBhc3NlZCBoYW5kbGUgJXUuXG4iLAorCQkJIHJlY29yZC0+aGFuZGxlLCBoYW5kbGUpOworCQly ZXR1cm4gZmFsc2U7CisJfQorCisJX19pbnRlbF9hbGxvY2F0b3JfYnN0X2FkZF9ob2xlKGlhbGIs IHN0YXJ0LCBlbmQgLSBzdGFydCk7CisJaWFsYi0+cmVzZXJ2ZWRfYXJlYXMtLTsKKwlpYWxiLT5y ZXNlcnZlZF9zaXplIC09IHJlY29yZC0+c2l6ZTsKKwlpZ3RfbWFwX3JlbW92ZShpYWxiLT5yZXNl cnZlZCwgJnN0YXJ0LCBtYXBfZW50cnlfZnJlZV9mdW5jKTsKKworCXJldHVybiB0cnVlOworfQor CitzdGF0aWMgYm9vbCBpbnRlbF9hbGxvY2F0b3JfYnN0X2lzX3Jlc2VydmVkKHN0cnVjdCBpbnRl bF9hbGxvY2F0b3IgKmlhbCwKKwkJCQkJICAgIHVpbnQ2NF90IHN0YXJ0LCB1aW50NjRfdCBlbmQp Cit7CisJc3RydWN0IGludGVsX2FsbG9jYXRvcl9ic3QgKmlhbGIgPSBpYWwtPnByaXY7CisJc3Ry dWN0IGludGVsX2FsbG9jYXRvcl9yZWNvcmQgKnJlY29yZDsKKworCXN0YXJ0ID0gREVDQU5PTklD QUwoc3RhcnQpOworCWlmIChlbmQgIT0gKDF1bGwgPDwgR0VOOF9HVFRfQUREUkVTU19XSURUSCkp CisJCWVuZCA9IERFQ0FOT05JQ0FMKGVuZCk7CisKKwlyZWNvcmQgPSBpZ3RfbWFwX3NlYXJjaChp YWxiLT5yZXNlcnZlZCwgJnN0YXJ0KTsKKworCWlmICghcmVjb3JkKQorCQlyZXR1cm4gZmFsc2U7 CisKKwlpZiAocmVjb3JkLT5vZmZzZXQgPT0gc3RhcnQgJiYgcmVjb3JkLT5zaXplID09IGVuZCAt IHN0YXJ0KQorCQlyZXR1cm4gdHJ1ZTsKKworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIHZv aWQgaW50ZWxfYWxsb2NhdG9yX2JzdF9kZXN0cm95KHN0cnVjdCBpbnRlbF9hbGxvY2F0b3IgKmlh bCkKK3sKKwlzdHJ1Y3QgaW50ZWxfYWxsb2NhdG9yX2JzdCAqaWFsYiA9IGlhbC0+cHJpdjsKKwlz dHJ1Y3QgaWd0X2JzdCAqc2l6ZV9ic3QsICpvZmZzZXRfYnN0OworCXZvaWQgKm5vZGVwdHI7CisK KwlzaXplX2JzdCA9IGlhbGItPmJ5X3NpemU7CisJb2Zmc2V0X2JzdCA9IGlhbGItPmJ5X29mZnNl dDsKKworCWlndF9ic3RfZm9yX2VhY2hfbm9kZShvZmZzZXRfYnN0LCBub2RlcHRyKQorCQlmcmVl KG9mZnNldF9ic3QtPmdldF92YWx1ZShub2RlcHRyKSk7CisKKwlpZ3RfYnN0X2ZyZWUoc2l6ZV9i c3QpOworCWlndF9ic3RfZnJlZShvZmZzZXRfYnN0KTsKKwlmcmVlKG9mZnNldF9ic3QpOworCWZy ZWUoc2l6ZV9ic3QpOworCisJaWd0X21hcF9kZXN0cm95KGlhbGItPm9iamVjdHMsIG1hcF9lbnRy eV9mcmVlX2Z1bmMpOworCWlndF9tYXBfZGVzdHJveShpYWxiLT5yZXNlcnZlZCwgbWFwX2VudHJ5 X2ZyZWVfZnVuYyk7CisKKwlmcmVlKGlhbGIpOworCWZyZWUoaWFsKTsKK30KKworc3RhdGljIGJv b2wgaW50ZWxfYWxsb2NhdG9yX2JzdF9pc19lbXB0eShzdHJ1Y3QgaW50ZWxfYWxsb2NhdG9yICpp YWwpCit7CisJc3RydWN0IGludGVsX2FsbG9jYXRvcl9ic3QgKmlhbGIgPSBpYWwtPnByaXY7CisK KwlyZXR1cm4gaWFsYi0+YWxsb2NhdGVkX29iamVjdHMgPT0gMCAmJiBpYWxiLT5yZXNlcnZlZF9h cmVhcyA9PSAwOworfQorCitzdGF0aWMgdm9pZCBpbnRlbF9hbGxvY2F0b3JfYnN0X3ByaW50KHN0 cnVjdCBpbnRlbF9hbGxvY2F0b3IgKmlhbCwgYm9vbCBmdWxsKQoreworCXN0cnVjdCBpbnRlbF9h bGxvY2F0b3JfYnN0ICppYWxiID0gaWFsLT5wcml2OworCXN0cnVjdCBpbnRlbF9hbGxvY2F0b3Jf cmVjb3JkICpyZWNvcmQ7CisJc3RydWN0IGludGVsX2FsbG9jYXRvcl9ic3Rfdm1hX2hvbGUgKmhv bGU7CisJc3RydWN0IGlndF9ic3QgKm9mZnNldF9ic3QsICpzaXplX2JzdDsKKwlzdHJ1Y3QgaWd0 X21hcF9lbnRyeSAqZW50cnk7CisJdm9pZCAqbm9kZXB0cjsKKwl1aW50NjRfdCB0b3RhbF9mcmVl OworCisJaWd0X2luZm8oImludGVsX2FsbG9jYXRvcl9ic3QgPGlhbDogJXAsIGZkOiAlZD4gb24g IgorCQkgIlsweCUiUFJJWDY0IiA6IDB4JSJQUkl4NjQiXVxuIiwgaWFsLAorCQkgaWFsLT5mZCwg aWFsYi0+c3RhcnQsIGlhbGItPmVuZCk7CisKKwl0b3RhbF9mcmVlID0gMDsKKwlpZiAoZnVsbCkg eworCQlvZmZzZXRfYnN0ID0gaWFsYi0+Ynlfb2Zmc2V0OworCQlzaXplX2JzdCA9IGlhbGItPmJ5 X3NpemU7CisKKwkJaWd0X2luZm8oImhvbGVzIGJ5IG9mZnNldDpcbiIpOworCQlpZ3RfYnN0X2Zv cl9lYWNoX25vZGUob2Zmc2V0X2JzdCwgbm9kZXB0cikgeworCQkJaG9sZSA9IGlndF9ic3RfZ2V0 X3ZhbHVlKG9mZnNldF9ic3QsIG5vZGVwdHIpOworCQkJaWd0X2luZm8oIm9mZnNldCA9ICUiUFJJ dTY0IiAoMHglIlBSSXg2NCIpICIKKwkJCQkgInNpemUgPSAlIlBSSXU2NCIgKDB4JSJQUkl4NjQi KVxuIiwKKwkJCQkgaG9sZS0+b2Zmc2V0LCBob2xlLT5vZmZzZXQsIGhvbGUtPnNpemUsCisJCQkJ IGhvbGUtPnNpemUpOworCQkJdG90YWxfZnJlZSArPSBob2xlLT5zaXplOworCQl9CisKKwkJaWd0 X2luZm8oImhvbGVzIGJ5IHNpemU6XG4iKTsKKwkJaWd0X2JzdF9mb3JfZWFjaF9ub2RlKHNpemVf YnN0LCBub2RlcHRyKSB7CisJCQlob2xlID0gaWd0X2JzdF9nZXRfdmFsdWUoc2l6ZV9ic3QsIG5v ZGVwdHIpOworCQkJaWd0X2luZm8oIm9mZnNldCA9ICUiUFJJdTY0IiAoMHglIlBSSXg2NCIpICIK KwkJCQkgInNpemUgPSAlIlBSSXU2NCIgKDB4JSJQUkl4NjQiKVxuIiwKKwkJCQkgaG9sZS0+b2Zm c2V0LCBob2xlLT5vZmZzZXQsIGhvbGUtPnNpemUsCisJCQkJIGhvbGUtPnNpemUpOworCisJCX0K KworCQlpZ3RfaW5mbygiYWxsb2NhdGVkIG9iamVjdHM6XG4iKTsKKwkJaWd0X21hcF9mb3JlYWNo KGlhbGItPm9iamVjdHMsIGVudHJ5KSB7CisJCQlyZWNvcmQgPSBlbnRyeS0+ZGF0YTsKKwkJCWln dF9pbmZvKCJoYW5kbGUgPSAlZCwgb2Zmc2V0ID0gJSJQUkl1NjQiICIKKwkJCQkiKDB4JSJQUkl4 NjQiLCBzaXplID0gJSJQUkl1NjQiICgweCUiUFJJeDY0IilcbiIsCisJCQkJIHJlY29yZC0+aGFu ZGxlLCByZWNvcmQtPm9mZnNldCwgcmVjb3JkLT5vZmZzZXQsCisJCQkJIHJlY29yZC0+c2l6ZSwg cmVjb3JkLT5zaXplKTsKKworCQl9CisKKwkJaWd0X2luZm8oInJlc2VydmVkIGFyZWFzOlxuIik7 CisJCWlndF9tYXBfZm9yZWFjaChpYWxiLT5yZXNlcnZlZCwgZW50cnkpIHsKKwkJCXJlY29yZCA9 IGVudHJ5LT5kYXRhOworCQkJaWd0X2luZm8oImhhbmRsZSA9ICVkLCBvZmZzZXQgPSAlIlBSSXU2 NCIgIgorCQkJCSIoMHglIlBSSXg2NCIsIHNpemUgPSAlIlBSSXU2NCIgKDB4JSJQUkl4NjQiKVxu IiwKKwkJCQkgcmVjb3JkLT5oYW5kbGUsIHJlY29yZC0+b2Zmc2V0LCByZWNvcmQtPm9mZnNldCwK KwkJCQkgcmVjb3JkLT5zaXplLCByZWNvcmQtPnNpemUpOworCisJCX0KKworCX0gZWxzZSB7CisJ CW9mZnNldF9ic3QgPSBpYWxiLT5ieV9vZmZzZXQ7CisKKwkJaWd0X2JzdF9mb3JfZWFjaF9ub2Rl KG9mZnNldF9ic3QsIG5vZGVwdHIpIHsKKwkJCWlndF9ic3RfZ2V0X3ZhbHVlKG9mZnNldF9ic3Qs IG5vZGVwdHIpOworCQkJdG90YWxfZnJlZSArPSBob2xlLT5zaXplOworCQl9CisJfQorCisJaWd0 X2luZm8oImZyZWUgc3BhY2U6ICUiUFJJdTY0IkIgKDB4JSJQUkl4NjQiKSAoJS4yZiUlIGZ1bGwp XG4iCisJCSAiYWxsb2NhdGVkIG9iamVjdHM6ICUiUFJJdTY0Iiwgc2l6ZTogJSJQUkl1NjQKKwkJ ICIgKCUiUFJJeDY0IilcbiIKKwkJICJyZXNlcnZlZCBhcmVhczogJSJQUkl1NjQiLCBzaXplOiAl IlBSSXU2NAorCQkgIiAoJSJQUkl4NjQiKVxuIiwgdG90YWxfZnJlZSwgdG90YWxfZnJlZSwKKwkJ ICgoZG91YmxlKSAoaWFsYi0+dG90YWxfc2l6ZSAtIHRvdGFsX2ZyZWUpIC8KKwkJICAoZG91Ymxl KSBpYWxiLT50b3RhbF9zaXplKSAqIDEwMC4wLAorCQkgaWFsYi0+YWxsb2NhdGVkX29iamVjdHMs IGlhbGItPmFsbG9jYXRlZF9zaXplLAorCQkgaWFsYi0+YWxsb2NhdGVkX3NpemUsIGlhbGItPnJl c2VydmVkX2FyZWFzLAorCQkgaWFsYi0+cmVzZXJ2ZWRfYXJlYXMsIGlhbGItPnJlc2VydmVkX3Np emUpOworCisJaG9sZXNfYnN0X3ZhbGlkYXRlKGlhbGIpOworfQorCitzdHJ1Y3QgaW50ZWxfYWxs b2NhdG9yICoKK2ludGVsX2FsbG9jYXRvcl9ic3RfY3JlYXRlKGludCBmZCwgdWludDY0X3Qgc3Rh cnQsIHVpbnQ2NF90IGVuZCwKKwkJCSAgIGVudW0gYWxsb2NhdG9yX3N0cmF0ZWd5IHN0cmF0ZWd5 KQoreworCXN0cnVjdCBpbnRlbF9hbGxvY2F0b3IgKmlhbDsKKwlzdHJ1Y3QgaW50ZWxfYWxsb2Nh dG9yX2JzdCAqaWFsYjsKKworCWlndF9kZWJ1ZygiVXNpbmcgQlNUIGFsbG9jYXRvclxuIik7CisK KwlpYWxiID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgaW50ZWxfYWxsb2NhdG9yX2JzdCkpOworCWln dF9hc3NlcnQoaWFsYik7CisJaWFsID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgaW50ZWxfYWxsb2Nh dG9yKSk7CisJaWd0X2Fzc2VydChpYWwpOworCisJLyogQWxsb2NhdGVkIG9iamVjdCBhcmUgc3Rv cmVkIGJ5IDQtYnl0ZS1sb25nIGhhbmRsZXMuICovCisJaWFsYi0+b2JqZWN0cyA9IGlndF9tYXBf Y3JlYXRlKGhhc2hfaGFuZGxlcywgZXF1YWxfaGFuZGxlcyk7CisJLyogUmVzZXJ2ZWQgb2JqZWN0 IGFyZSBzdG9yZWQgYnkgOC1ieXRlLWxvbmcgb2Zmc2V0cy4gKi8KKwlpYWxiLT5yZXNlcnZlZCA9 IGlndF9tYXBfY3JlYXRlKGhhc2hfb2Zmc2V0cywgZXF1YWxfb2Zmc2V0cyk7CisJaWd0X2Fzc2Vy dChpYWxiLT5vYmplY3RzICYmIGlhbGItPnJlc2VydmVkKTsKKworCWlhbGItPmJ5X29mZnNldCA9 IGlndF9ic3RfYXZsX2NyZWF0ZSgpOworCWlhbGItPmJ5X3NpemUgPSBpZ3RfYnN0X2F2bF9jcmVh dGUoKTsKKworCWlndF9hc3NlcnQoc3RhcnQgPCBlbmQpOworCWlndF9hc3NlcnQoZW5kIDw9IElB TEJfTUFYX0FERFIpOworCWlhbGItPnN0YXJ0ID0gc3RhcnQ7CisJaWFsYi0+ZW5kID0gZW5kOwor CisJaWFsYi0+dG90YWxfc2l6ZSA9IGlhbGItPmVuZCAtIGlhbGItPnN0YXJ0OworCWlhbGItPmFs bG9jYXRlZF9zaXplID0gMDsKKwlpYWxiLT5hbGxvY2F0ZWRfb2JqZWN0cyA9IDA7CisJaWFsYi0+ cmVzZXJ2ZWRfc2l6ZSA9IDA7CisJaWFsYi0+cmVzZXJ2ZWRfYXJlYXMgPSAwOworCV9faW50ZWxf YWxsb2NhdG9yX2JzdF9hZGRfaG9sZShpYWxiLCBpYWxiLT5zdGFydCwgaWFsYi0+dG90YWxfc2l6 ZSk7CisKKwlpYWwtPmZkID0gZmQ7CisJaWFsLT50eXBlID0gSU5URUxfQUxMT0NBVE9SX0JTVDsK KwlpYWwtPnN0cmF0ZWd5ID0gc3RyYXRlZ3k7CisJaWFsLT5yZWZjb3VudCA9IDA7CisJaWFsLT5w cml2ID0gaWFsYjsKKwlpYWwtPmdldF9hZGRyZXNzX3JhbmdlID0gaW50ZWxfYWxsb2NhdG9yX2Jz dF9nZXRfYWRkcmVzc19yYW5nZTsKKwlpYWwtPmFsbG9jID0gaW50ZWxfYWxsb2NhdG9yX2JzdF9h bGxvYzsKKwlpYWwtPmlzX2FsbG9jYXRlZCA9IGludGVsX2FsbG9jYXRvcl9ic3RfaXNfYWxsb2Nh dGVkOworCWlhbC0+ZnJlZSA9IGludGVsX2FsbG9jYXRvcl9ic3RfZnJlZTsKKwlpYWwtPnJlc2Vy dmUgPSBpbnRlbF9hbGxvY2F0b3JfYnN0X3Jlc2VydmU7CisJaWFsLT51bnJlc2VydmUgPSBpbnRl bF9hbGxvY2F0b3JfYnN0X3VucmVzZXJ2ZTsKKwlpYWwtPmlzX3Jlc2VydmVkID0gaW50ZWxfYWxs b2NhdG9yX2JzdF9pc19yZXNlcnZlZDsKKwlpYWwtPmRlc3Ryb3kgPSBpbnRlbF9hbGxvY2F0b3Jf YnN0X2Rlc3Ryb3k7CisJaWFsLT5pc19lbXB0eSA9IGludGVsX2FsbG9jYXRvcl9ic3RfaXNfZW1w dHk7CisJaWFsLT5wcmludCA9IGludGVsX2FsbG9jYXRvcl9ic3RfcHJpbnQ7CisKKwlyZXR1cm4g aWFsOworfQpkaWZmIC0tZ2l0IGEvbGliL21lc29uLmJ1aWxkIGIvbGliL21lc29uLmJ1aWxkCmlu ZGV4IGExYWEwZWUxMi4uNjJjOGRiZjIwIDEwMDY0NAotLS0gYS9saWIvbWVzb24uYnVpbGQKKysr IGIvbGliL21lc29uLmJ1aWxkCkBAIC0zOCw2ICszOCw3IEBAIGxpYl9zb3VyY2VzID0gWwogCSdp Z3RfeDg2LmMnLAogCSdpbnN0ZG9uZS5jJywKIAknaW50ZWxfYWxsb2NhdG9yLmMnLAorCSdpbnRl bF9hbGxvY2F0b3JfYnN0LmMnLAogCSdpbnRlbF9hbGxvY2F0b3JfbXNnY2hhbm5lbC5jJywKIAkn aW50ZWxfYWxsb2NhdG9yX3JhbmRvbS5jJywKIAknaW50ZWxfYWxsb2NhdG9yX3JlbG9jLmMnLAot LSAKMi4yNS4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwppZ3QtZGV2IG1haWxpbmcgbGlzdAppZ3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRw czovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lndC1kZXYK