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 74ED389F45 for ; Mon, 15 Mar 2021 16:59:25 +0000 (UTC) From: =?UTF-8?q?Zbigniew=20Kempczy=C5=84ski?= Date: Mon, 15 Mar 2021 17:58:11 +0100 Message-Id: <20210315165842.64488-7-zbigniew.kempczynski@intel.com> In-Reply-To: <20210315165842.64488-1-zbigniew.kempczynski@intel.com> References: <20210315165842.64488-1-zbigniew.kempczynski@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t v23 06/37] lib/intel_allocator_simple: Add simple allocator 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: RnJvbTogRG9taW5payBHcnplZ29yemVrIDxkb21pbmlrLmdyemVnb3J6ZWtAaW50ZWwuY29tPgoK U2ltcGxlIGFsbG9jYXRvciBib3Jyb3dlZCBmcm9tIE1lc2EgYWRvcHRlZCBmb3IgSUdUIHVzZS4K CkZyb20gZGVmYXVsdCB3ZSBwcmVmZXIgYW4gYWxsb2NhdGlvbiBmcm9tIHRoZSB0b3Agb2Ygdm0g YWRkcmVzcyBzcGFjZQood2UgY2FuIGNhdGNoIGFkZHJlc3NpbmcgaXNzdWVzIHByby1hY3RpdmVs eSkuIFdoZW4gZnVuY3Rpb24KaW50ZWxfYWxsb2NhdG9yX3NpbXBsZV9jcmVhdGUoKSBpcyB1c2Vk IHdlIGV4Y2x1ZGUgbGFzdCBwYWdlIGFzIEhXCnRlbmRzIHRvIGhhbmcgb24gdGhlIHJlbmRlciBl bmdpbmUgd2hlbiBmdWxsIDNEIHBpcGVsaW5lIGlzIGV4ZWN1dGVkIGZyb20KdGhlIGxhc3QgcGFn ZS4gRm9yIG1vcmUgY29udHJvbCBvZiB2bSByYW5nZSB1c2VyIGNhbiBzcGVjaWZ5IHJhbmdlIHVz aW5nCmludGVsX2FsbG9jYXRvcl9zaW1wbGVfY3JlYXRlX2Z1bGwoKSAod2l0aCB0aGUgcmVzcGVj dCBvZiB0aGUgZ3R0IHNpemUpLgoKU2lnbmVkLW9mZi1ieTogRG9taW5payBHcnplZ29yemVrIDxk b21pbmlrLmdyemVnb3J6ZWtAaW50ZWwuY29tPgpTaWduZWQtb2ZmLWJ5OiBaYmlnbmlldyBLZW1w Y3p5xYRza2kgPHpiaWduaWV3LmtlbXBjenluc2tpQGludGVsLmNvbT4KQ2M6IENocmlzIFdpbHNv biA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgotLS0KIGxpYi9pbnRlbF9hbGxvY2F0b3Jfc2lt cGxlLmMgfCA3NDQgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDEgZmlsZSBj aGFuZ2VkLCA3NDQgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9pbnRlbF9h bGxvY2F0b3Jfc2ltcGxlLmMKCmRpZmYgLS1naXQgYS9saWIvaW50ZWxfYWxsb2NhdG9yX3NpbXBs ZS5jIGIvbGliL2ludGVsX2FsbG9jYXRvcl9zaW1wbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAuLmNjMjA3YzhlOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9pbnRlbF9h bGxvY2F0b3Jfc2ltcGxlLmMKQEAgLTAsMCArMSw3NDQgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVu dGlmaWVyOiBNSVQKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAyMSBJbnRlbCBDb3Jwb3JhdGlvbgor ICovCisKKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNs dWRlICJpZ3QuaCIKKyNpbmNsdWRlICJpZ3RfeDg2LmgiCisjaW5jbHVkZSAiaW50ZWxfYWxsb2Nh dG9yLmgiCisjaW5jbHVkZSAiaW50ZWxfYnVmb3BzLmgiCisjaW5jbHVkZSAiaWd0X21hcC5oIgor CisvKgorICogV2UgbGltaXQgYWxsb2NhdG9yIHNwYWNlIHRvIGF2b2lkIGhhbmcgd2hlbiBiYXRj aCB3b3VsZCBiZQorICogcGlubmVkIGluIHRoZSBsYXN0IHBhZ2UuCisgKi8KKyNkZWZpbmUgUkVT RVJWRUQgNDA5NgorCisvKiBBdm9pZCBjb21waWxhdGlvbiB3YXJuaW5nICovCitzdHJ1Y3QgaW50 ZWxfYWxsb2NhdG9yICppbnRlbF9hbGxvY2F0b3Jfc2ltcGxlX2NyZWF0ZShpbnQgZmQpOworc3Ry dWN0IGludGVsX2FsbG9jYXRvciAqCitpbnRlbF9hbGxvY2F0b3Jfc2ltcGxlX2NyZWF0ZV9mdWxs KGludCBmZCwgdWludDY0X3Qgc3RhcnQsIHVpbnQ2NF90IGVuZCwKKwkJCQkgICBlbnVtIGFsbG9j YXRvcl9zdHJhdGVneSBzdHJhdGVneSk7CisKK3N0cnVjdCBzaW1wbGVfdm1hX2hlYXAgeworCXN0 cnVjdCBpZ3RfbGlzdF9oZWFkIGhvbGVzOworCisJLyogSWYgdHJ1ZSwgc2ltcGxlX3ZtYV9oZWFw X2FsbG9jIHdpbGwgcHJlZmVyIGhpZ2ggYWRkcmVzc2VzCisJICoKKwkgKiBEZWZhdWx0IGlzIHRy dWUuCisJICovCisJYm9vbCBhbGxvY19oaWdoOworfTsKKworc3RydWN0IHNpbXBsZV92bWFfaG9s ZSB7CisJc3RydWN0IGlndF9saXN0X2hlYWQgbGluazsKKwl1aW50NjRfdCBvZmZzZXQ7CisJdWlu dDY0X3Qgc2l6ZTsKK307CisKK3N0cnVjdCBpbnRlbF9hbGxvY2F0b3Jfc2ltcGxlIHsKKwlzdHJ1 Y3QgaWd0X21hcCBvYmplY3RzOworCXN0cnVjdCBpZ3RfbWFwIHJlc2VydmVkOworCXN0cnVjdCBz aW1wbGVfdm1hX2hlYXAgaGVhcDsKKworCXVpbnQ2NF90IHN0YXJ0OworCXVpbnQ2NF90IGVuZDsK KworCS8qIHN0YXRpc3RpY3MgKi8KKwl1aW50NjRfdCB0b3RhbF9zaXplOworCXVpbnQ2NF90IGFs bG9jYXRlZF9zaXplOworCXVpbnQ2NF90IGFsbG9jYXRlZF9vYmplY3RzOworCXVpbnQ2NF90IHJl c2VydmVkX3NpemU7CisJdWludDY0X3QgcmVzZXJ2ZWRfYXJlYXM7Cit9OworCitzdHJ1Y3QgaW50 ZWxfYWxsb2NhdG9yX3JlY29yZCB7CisJdWludDMyX3QgaGFuZGxlOworCXVpbnQ2NF90IG9mZnNl dDsKKwl1aW50NjRfdCBzaXplOworfTsKKworI2RlZmluZSBzaW1wbGVfdm1hX2ZvcmVhY2hfaG9s ZShfaG9sZSwgX2hlYXApIFwKKwlpZ3RfbGlzdF9mb3JfZWFjaF9lbnRyeShfaG9sZSwgJihfaGVh cCktPmhvbGVzLCBsaW5rKQorCisjZGVmaW5lIHNpbXBsZV92bWFfZm9yZWFjaF9ob2xlX3NhZmUo X2hvbGUsIF9oZWFwLCBfdG1wKSBcCisJaWd0X2xpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShfaG9s ZSwgX3RtcCwgICYoX2hlYXApLT5ob2xlcywgbGluaykKKworI2RlZmluZSBzaW1wbGVfdm1hX2Zv cmVhY2hfaG9sZV9zYWZlX3JldihfaG9sZSwgX2hlYXAsIF90bXApIFwKKwlpZ3RfbGlzdF9mb3Jf ZWFjaF9lbnRyeV9zYWZlX3JldmVyc2UoX2hvbGUsIF90bXAsICAmKF9oZWFwKS0+aG9sZXMsIGxp bmspCisKKyNkZWZpbmUgR0VOOF9HVFRfQUREUkVTU19XSURUSCA0OAorI2RlZmluZSBERUNBTk9O SUNBTChvZmZzZXQpIChvZmZzZXQgJiAoKDF1bGwgPDwgR0VOOF9HVFRfQUREUkVTU19XSURUSCkg LSAxKSkKKworc3RhdGljIHZvaWQgc2ltcGxlX3ZtYV9oZWFwX3ZhbGlkYXRlKHN0cnVjdCBzaW1w bGVfdm1hX2hlYXAgKmhlYXApCit7CisJdWludDY0X3QgcHJldl9vZmZzZXQgPSAwOworCXN0cnVj dCBzaW1wbGVfdm1hX2hvbGUgKmhvbGU7CisKKwlzaW1wbGVfdm1hX2ZvcmVhY2hfaG9sZShob2xl LCBoZWFwKSB7CisJCWlndF9hc3NlcnQoaG9sZS0+c2l6ZSA+IDApOworCisJCWlmICgmaG9sZS0+ bGluayA9PSBoZWFwLT5ob2xlcy5uZXh0KSB7CisJCS8qIFRoaXMgbXVzdCBiZSB0aGUgdG9wLW1v c3QgaG9sZS4gIEFzc2VydCB0aGF0LAorCQkgKiBpZiBpdCBvdmVyZmxvd3MsIGl0IG92ZXJmbG93 cyB0byAwLCBpLmUuIDJeNjQuCisJCSAqLworCQkJaWd0X2Fzc2VydChob2xlLT5zaXplICsgaG9s ZS0+b2Zmc2V0ID09IDAgfHwKKwkJCQkgICBob2xlLT5zaXplICsgaG9sZS0+b2Zmc2V0ID4gaG9s ZS0+b2Zmc2V0KTsKKwkJfSBlbHNlIHsKKwkJLyogVGhpcyBpcyBub3QgdGhlIHRvcC1tb3N0IGhv bGUgc28gaXQgbXVzdCBub3Qgb3ZlcmZsb3cgYW5kLAorCQkgKiBpbiBmYWN0LCBtdXN0IGJlIHN0 cmljdGx5IGxvd2VyIHRoYW4gdGhlIHRvcC1tb3N0IGhvbGUuICBJZgorCQkgKiBob2xlLT5zaXpl ICsgaG9sZS0+b2Zmc2V0ID09IHByZXZfb2Zmc2V0LCB0aGVuIHdlIGZhaWxlZCB0bworCQkgKiBq b2luIGhvbGVzIGR1cmluZyBhIHNpbXBsZV92bWFfaGVhcF9mcmVlLgorCQkgKi8KKwkJCWlndF9h c3NlcnQoaG9sZS0+c2l6ZSArIGhvbGUtPm9mZnNldCA+IGhvbGUtPm9mZnNldCAmJgorCQkJCSAg IGhvbGUtPnNpemUgKyBob2xlLT5vZmZzZXQgPCBwcmV2X29mZnNldCk7CisJCX0KKwkJcHJldl9v ZmZzZXQgPSBob2xlLT5vZmZzZXQ7CisJfQorfQorCisKK3N0YXRpYyB2b2lkIHNpbXBsZV92bWFf aGVhcF9mcmVlKHN0cnVjdCBzaW1wbGVfdm1hX2hlYXAgKmhlYXAsCisJCQkJIHVpbnQ2NF90IG9m ZnNldCwgdWludDY0X3Qgc2l6ZSkKK3sKKwlzdHJ1Y3Qgc2ltcGxlX3ZtYV9ob2xlICpoaWdoX2hv bGUgPSBOVUxMLCAqbG93X2hvbGUgPSBOVUxMLCAqaG9sZTsKKwlib29sIGhpZ2hfYWRqYWNlbnQs IGxvd19hZGphY2VudDsKKworCS8qIEZyZWVpbmcgc29tZXRoaW5nIHdpdGggYSBzaXplIG9mIDAg aXMgbm90IHZhbGlkLiAqLworCWlndF9hc3NlcnQoc2l6ZSA+IDApOworCisJLyogSXQncyBwb3Nz aWJsZSBmb3Igb2Zmc2V0ICsgc2l6ZSB0byB3cmFwIGFyb3VuZCBpZiB3ZSB0b3VjaCB0aGUgdG9w IG9mCisJICogdGhlIDY0LWJpdCBhZGRyZXNzIHNwYWNlLCBidXQgd2UgY2Fubm90IGdvIGFueSBo aWdoZXIgdGhhbiAyXjY0LgorCSAqLworCWlndF9hc3NlcnQob2Zmc2V0ICsgc2l6ZSA9PSAwIHx8 IG9mZnNldCArIHNpemUgPiBvZmZzZXQpOworCisJc2ltcGxlX3ZtYV9oZWFwX3ZhbGlkYXRlKGhl YXApOworCisJLyogRmluZCBpbW1lZGlhdGVseSBoaWdoZXIgYW5kIGxvd2VyIGhvbGVzIGlmIHRo ZXkgZXhpc3QuICovCisJc2ltcGxlX3ZtYV9mb3JlYWNoX2hvbGUoaG9sZSwgaGVhcCkgeworCQlp ZiAoaG9sZS0+b2Zmc2V0IDw9IG9mZnNldCkgeworCQkJbG93X2hvbGUgPSBob2xlOworCQkJYnJl YWs7CisJCX0KKwkJaGlnaF9ob2xlID0gaG9sZTsKKwl9CisKKwlpZiAoaGlnaF9ob2xlKQorCQlp Z3RfYXNzZXJ0KG9mZnNldCArIHNpemUgPD0gaGlnaF9ob2xlLT5vZmZzZXQpOworCWhpZ2hfYWRq YWNlbnQgPSBoaWdoX2hvbGUgJiYgb2Zmc2V0ICsgc2l6ZSA9PSBoaWdoX2hvbGUtPm9mZnNldDsK KworCWlmIChsb3dfaG9sZSkgeworCQlpZ3RfYXNzZXJ0KGxvd19ob2xlLT5vZmZzZXQgKyBsb3df aG9sZS0+c2l6ZSA+IGxvd19ob2xlLT5vZmZzZXQpOworCQlpZ3RfYXNzZXJ0KGxvd19ob2xlLT5v ZmZzZXQgKyBsb3dfaG9sZS0+c2l6ZSA8PSBvZmZzZXQpOworCX0KKwlsb3dfYWRqYWNlbnQgPSBs b3dfaG9sZSAmJiBsb3dfaG9sZS0+b2Zmc2V0ICsgbG93X2hvbGUtPnNpemUgPT0gb2Zmc2V0Owor CisJaWYgKGxvd19hZGphY2VudCAmJiBoaWdoX2FkamFjZW50KSB7CisJCS8qIE1lcmdlIHRoZSB0 d28gaG9sZXMgKi8KKwkJbG93X2hvbGUtPnNpemUgKz0gc2l6ZSArIGhpZ2hfaG9sZS0+c2l6ZTsK KwkJaWd0X2xpc3RfZGVsKCZoaWdoX2hvbGUtPmxpbmspOworCQlmcmVlKGhpZ2hfaG9sZSk7CisJ fSBlbHNlIGlmIChsb3dfYWRqYWNlbnQpIHsKKwkJLyogTWVyZ2UgaW50byB0aGUgbG93IGhvbGUg Ki8KKwkJbG93X2hvbGUtPnNpemUgKz0gc2l6ZTsKKwl9IGVsc2UgaWYgKGhpZ2hfYWRqYWNlbnQp IHsKKwkJLyogTWVyZ2UgaW50byB0aGUgaGlnaCBob2xlICovCisJCWhpZ2hfaG9sZS0+b2Zmc2V0 ID0gb2Zmc2V0OworCQloaWdoX2hvbGUtPnNpemUgKz0gc2l6ZTsKKwl9IGVsc2UgeworCQkvKiBO ZWl0aGVyIGhvbGUgaXMgYWRqYWNlbnQ7IG1ha2UgYSBuZXcgb25lICovCisJCWhvbGUgPSBjYWxs b2MoMSwgc2l6ZW9mKCpob2xlKSk7CisJCWlndF9hc3NlcnQoaG9sZSk7CisKKwkJaG9sZS0+b2Zm c2V0ID0gb2Zmc2V0OworCQlob2xlLT5zaXplID0gc2l6ZTsKKwkJLyogQWRkIGl0IGFmdGVyIHRo ZSBoaWdoIGhvbGUgc28gd2UgbWFpbnRhaW4gaGlnaC10by1sb3cKKwkJICogIG9yZGVyaW5nCisJ CSAqLworCQlpZiAoaGlnaF9ob2xlKQorCQkJaWd0X2xpc3RfYWRkKCZob2xlLT5saW5rLCAmaGln aF9ob2xlLT5saW5rKTsKKwkJZWxzZQorCQkJaWd0X2xpc3RfYWRkKCZob2xlLT5saW5rLCAmaGVh cC0+aG9sZXMpOworCX0KKworCXNpbXBsZV92bWFfaGVhcF92YWxpZGF0ZShoZWFwKTsKK30KKwor c3RhdGljIHZvaWQgc2ltcGxlX3ZtYV9oZWFwX2luaXQoc3RydWN0IHNpbXBsZV92bWFfaGVhcCAq aGVhcCwKKwkJCQkgdWludDY0X3Qgc3RhcnQsIHVpbnQ2NF90IHNpemUsCisJCQkJIGVudW0gYWxs b2NhdG9yX3N0cmF0ZWd5IHN0cmF0ZWd5KQoreworCUlHVF9JTklUX0xJU1RfSEVBRCgmaGVhcC0+ aG9sZXMpOworCXNpbXBsZV92bWFfaGVhcF9mcmVlKGhlYXAsIHN0YXJ0LCBzaXplKTsKKworCXN3 aXRjaCAoc3RyYXRlZ3kpIHsKKwljYXNlIEFMTE9DX1NUUkFURUdZX0xPV19UT19ISUdIOgorCQlo ZWFwLT5hbGxvY19oaWdoID0gZmFsc2U7CisJCWJyZWFrOworCWNhc2UgQUxMT0NfU1RSQVRFR1lf SElHSF9UT19MT1c6CisJZGVmYXVsdDoKKwkJaGVhcC0+YWxsb2NfaGlnaCA9IHRydWU7CisJfQor fQorCitzdGF0aWMgdm9pZCBzaW1wbGVfdm1hX2hlYXBfZmluaXNoKHN0cnVjdCBzaW1wbGVfdm1h X2hlYXAgKmhlYXApCit7CisJc3RydWN0IHNpbXBsZV92bWFfaG9sZSAqaG9sZSwgKnRtcDsKKwor CXNpbXBsZV92bWFfZm9yZWFjaF9ob2xlX3NhZmUoaG9sZSwgaGVhcCwgdG1wKQorCQlmcmVlKGhv bGUpOworfQorCitzdGF0aWMgdm9pZCBzaW1wbGVfdm1hX2hvbGVfYWxsb2Moc3RydWN0IHNpbXBs ZV92bWFfaG9sZSAqaG9sZSwKKwkJCQkgIHVpbnQ2NF90IG9mZnNldCwgdWludDY0X3Qgc2l6ZSkK K3sKKwlzdHJ1Y3Qgc2ltcGxlX3ZtYV9ob2xlICpoaWdoX2hvbGU7CisJdWludDY0X3Qgd2FzdGU7 CisKKwlpZ3RfYXNzZXJ0KGhvbGUtPm9mZnNldCA8PSBvZmZzZXQpOworCWlndF9hc3NlcnQoaG9s ZS0+c2l6ZSA+PSBvZmZzZXQgLSBob2xlLT5vZmZzZXQgKyBzaXplKTsKKworCWlmIChvZmZzZXQg PT0gaG9sZS0+b2Zmc2V0ICYmIHNpemUgPT0gaG9sZS0+c2l6ZSkgeworCQkvKiBKdXN0IGdldCBy aWQgb2YgdGhlIGhvbGUuICovCisJCWlndF9saXN0X2RlbCgmaG9sZS0+bGluayk7CisJCWZyZWUo aG9sZSk7CisJCXJldHVybjsKKwl9CisKKwlpZ3RfYXNzZXJ0KG9mZnNldCAtIGhvbGUtPm9mZnNl dCA8PSBob2xlLT5zaXplIC0gc2l6ZSk7CisJd2FzdGUgPSAoaG9sZS0+c2l6ZSAtIHNpemUpIC0g KG9mZnNldCAtIGhvbGUtPm9mZnNldCk7CisJaWYgKHdhc3RlID09IDApIHsKKwkJLyogV2UgYWxs b2NhdGVkIGF0IHRoZSB0b3AtPiAgU2hyaW5rIHRoZSBob2xlIGRvd24uICovCisJCWhvbGUtPnNp emUgLT0gc2l6ZTsKKwkJcmV0dXJuOworCX0KKworCWlmIChvZmZzZXQgPT0gaG9sZS0+b2Zmc2V0 KSB7CisJCS8qIFdlIGFsbG9jYXRlZCBhdCB0aGUgYm90dG9tLiBTaHJpbmsgdGhlIGhvbGUgdXAt PiAqLworCQlob2xlLT5vZmZzZXQgKz0gc2l6ZTsKKwkJaG9sZS0+c2l6ZSAtPSBzaXplOworCQly ZXR1cm47CisJfQorCisgICAvKiBXZSBhbGxvY2F0ZWQgaW4gdGhlIG1pZGRsZS4gIFdlIG5lZWQg dG8gc3BsaXQgdGhlIG9sZCBob2xlIGludG8gdHdvCisgICAgKiBob2xlcywgb25lIGhpZ2ggYW5k IG9uZSBsb3cuCisgICAgKi8KKwloaWdoX2hvbGUgPSBjYWxsb2MoMSwgc2l6ZW9mKCpob2xlKSk7 CisJaWd0X2Fzc2VydChoaWdoX2hvbGUpOworCisJaGlnaF9ob2xlLT5vZmZzZXQgPSBvZmZzZXQg KyBzaXplOworCWhpZ2hfaG9sZS0+c2l6ZSA9IHdhc3RlOworCisgICAvKiBBZGp1c3QgdGhlIGhv bGUgdG8gYmUgdGhlIGFtb3VudCBvZiBzcGFjZSBsZWZ0IGF0IGhlIGJvdHRvbSBvZiB0aGUKKyAg ICAqIG9yaWdpbmFsIGhvbGUuCisgICAgKi8KKwlob2xlLT5zaXplID0gb2Zmc2V0IC0gaG9sZS0+ b2Zmc2V0OworCisgICAvKiBQbGFjZSB0aGUgbmV3IGhvbGUgYmVmb3JlIHRoZSBvbGQgaG9sZSBz byB0aGF0IHRoZSBsaXN0IGlzIGluIG9yZGVyCisgICAgKiBmcm9tIGhpZ2ggdG8gbG93LgorICAg ICovCisJaWd0X2xpc3RfYWRkX3RhaWwoJmhpZ2hfaG9sZS0+bGluaywgJmhvbGUtPmxpbmspOwor fQorCitzdGF0aWMgYm9vbCBzaW1wbGVfdm1hX2hlYXBfYWxsb2Moc3RydWN0IHNpbXBsZV92bWFf aGVhcCAqaGVhcCwKKwkJCQkgIHVpbnQ2NF90ICpvZmZzZXQsIHVpbnQ2NF90IHNpemUsCisJCQkJ ICB1aW50NjRfdCBhbGlnbm1lbnQpCit7CisJc3RydWN0IHNpbXBsZV92bWFfaG9sZSAqaG9sZSwg KnRtcDsKKwl1aW50NjRfdCBtaXNhbGlnbjsKKworCS8qIFRoZSBjYWxsZXIgaXMgZXhwZWN0ZWQg dG8gcmVqZWN0IHplcm8tc2l6ZSBhbGxvY2F0aW9ucyAqLworCWlndF9hc3NlcnQoc2l6ZSA+IDAp OworCWlndF9hc3NlcnQoYWxpZ25tZW50ID4gMCk7CisKKwlzaW1wbGVfdm1hX2hlYXBfdmFsaWRh dGUoaGVhcCk7CisKKwlpZiAoaGVhcC0+YWxsb2NfaGlnaCkgeworCQlzaW1wbGVfdm1hX2ZvcmVh Y2hfaG9sZV9zYWZlKGhvbGUsIGhlYXAsIHRtcCkgeworCQkJaWYgKHNpemUgPiBob2xlLT5zaXpl KQorCQkJCWNvbnRpbnVlOworCisJLyogQ29tcHV0ZSB0aGUgb2Zmc2V0IGFzIHRoZSBoaWdoZXN0 IGFkZHJlc3Mgd2hlcmUgYSBjaHVuayBvZiB0aGUKKwkgKiBnaXZlbiBzaXplIGNhbiBiZSB3aXRo b3V0IGdvaW5nIG92ZXIgdGhlIHRvcCBvZiB0aGUgaG9sZS4KKwkgKgorCSAqIFRoaXMgY2FsY3Vs YXRpb24gaXMga25vd24gdG8gbm90IG92ZXJmbG93IGJlY2F1c2Ugd2Uga25vdyB0aGF0CisJICog aG9sZS0+c2l6ZSArIGhvbGUtPm9mZnNldCBjYW4gb25seSBvdmVyZmxvdyB0byAwIGFuZCBzaXpl ID4gMC4KKwkgKi8KKwkJCSpvZmZzZXQgPSAoaG9sZS0+c2l6ZSAtIHNpemUpICsgaG9sZS0+b2Zm c2V0OworCisJICAvKiBBbGlnbiB0aGUgb2Zmc2V0LiAgV2UgYWxpZ24gZG93biBhbmQgbm90IHVw IGJlY2F1c2Ugd2UgYXJlCisJICAgKgorCSAgICogYWxsb2NhdGluZyBmcm9tIHRoZSB0b3Agb2Yg dGhlIGhvbGUgYW5kIG5vdCB0aGUgYm90dG9tLgorCSAgICovCisJCQkqb2Zmc2V0ID0gKCpvZmZz ZXQgLyBhbGlnbm1lbnQpICogYWxpZ25tZW50OworCisJCQlpZiAoKm9mZnNldCA8IGhvbGUtPm9m ZnNldCkKKwkJCQljb250aW51ZTsKKworCQkJc2ltcGxlX3ZtYV9ob2xlX2FsbG9jKGhvbGUsICpv ZmZzZXQsIHNpemUpOworCQkJc2ltcGxlX3ZtYV9oZWFwX3ZhbGlkYXRlKGhlYXApOworCQkJcmV0 dXJuIHRydWU7CisJCX0KKwl9IGVsc2UgeworCQlzaW1wbGVfdm1hX2ZvcmVhY2hfaG9sZV9zYWZl X3Jldihob2xlLCBoZWFwLCB0bXApIHsKKwkJCWlmIChzaXplID4gaG9sZS0+c2l6ZSkKKwkJCQlj b250aW51ZTsKKworCQkJKm9mZnNldCA9IGhvbGUtPm9mZnNldDsKKworCQkJLyogQWxpZ24gdGhl IG9mZnNldCAqLworCQkJbWlzYWxpZ24gPSAqb2Zmc2V0ICUgYWxpZ25tZW50OworCQkJaWYgKG1p c2FsaWduKSB7CisJCQkJdWludDY0X3QgcGFkID0gYWxpZ25tZW50IC0gbWlzYWxpZ247CisKKwkJ CQlpZiAocGFkID4gaG9sZS0+c2l6ZSAtIHNpemUpCisJCQkJCWNvbnRpbnVlOworCisJCQkJKm9m ZnNldCArPSBwYWQ7CisJCQl9CisKKwkJCXNpbXBsZV92bWFfaG9sZV9hbGxvYyhob2xlLCAqb2Zm c2V0LCBzaXplKTsKKwkJCXNpbXBsZV92bWFfaGVhcF92YWxpZGF0ZShoZWFwKTsKKwkJCXJldHVy biB0cnVlOworCQl9CisJfQorCisJLyogRmFpbGVkIHRvIGFsbG9jYXRlICovCisJcmV0dXJuIGZh bHNlOworfQorCitzdGF0aWMgdm9pZCBpbnRlbF9hbGxvY2F0b3Jfc2ltcGxlX2dldF9hZGRyZXNz X3JhbmdlKHN0cnVjdCBpbnRlbF9hbGxvY2F0b3IgKmlhbCwKKwkJCQkJCSAgICAgdWludDY0X3Qg KnN0YXJ0cCwKKwkJCQkJCSAgICAgdWludDY0X3QgKmVuZHApCit7CisJc3RydWN0IGludGVsX2Fs bG9jYXRvcl9zaW1wbGUgKmlhbHMgPSBpYWwtPnByaXY7CisKKwlpZiAoc3RhcnRwKQorCQkqc3Rh cnRwID0gaWFscy0+c3RhcnQ7CisKKwlpZiAoZW5kcCkKKwkJKmVuZHAgPSBpYWxzLT5lbmQ7Cit9 CisKK3N0YXRpYyBib29sIHNpbXBsZV92bWFfaGVhcF9hbGxvY19hZGRyKHN0cnVjdCBpbnRlbF9h bGxvY2F0b3Jfc2ltcGxlICppYWxzLAorCQkJCSAgICAgICB1aW50NjRfdCBvZmZzZXQsIHVpbnQ2 NF90IHNpemUpCit7CisJc3RydWN0IHNpbXBsZV92bWFfaGVhcCAqaGVhcCA9ICZpYWxzLT5oZWFw OworCXN0cnVjdCBzaW1wbGVfdm1hX2hvbGUgKmhvbGUsICp0bXA7CisJLyogQWxsb2NhdGluZyBz b21ldGhpbmcgd2l0aCBhIHNpemUgb2YgMCBpcyBub3QgdmFsaWQuICovCisJaWd0X2Fzc2VydChz aXplID4gMCk7CisKKwkvKiBJdCdzIHBvc3NpYmxlIGZvciBvZmZzZXQgKyBzaXplIHRvIHdyYXAg YXJvdW5kIGlmIHdlIHRvdWNoIHRoZSB0b3Agb2YKKwkgKiB0aGUgNjQtYml0IGFkZHJlc3Mgc3Bh Y2UsIGJ1dCB3ZSBjYW5ub3QgZ28gYW55IGhpZ2hlciB0aGFuIDJeNjQuCisJICovCisJaWd0X2Fz c2VydChvZmZzZXQgKyBzaXplID09IDAgfHwgb2Zmc2V0ICsgc2l6ZSA+IG9mZnNldCk7CisKKwkv KiBGaW5kIHRoZSBob2xlIGlmIG9uZSBleGlzdHMuICovCisJc2ltcGxlX3ZtYV9mb3JlYWNoX2hv bGVfc2FmZShob2xlLCBoZWFwLCB0bXApIHsKKwkJaWYgKGhvbGUtPm9mZnNldCA+IG9mZnNldCkK KwkJCWNvbnRpbnVlOworCisJLyogSG9sZXMgYXJlIG9yZGVyZWQgaGlnaC10by1sb3cgc28gdGhl IGZpcnN0IGhvbGUgd2UgZmluZCB3aXRoCisJICogaG9sZS0+b2Zmc2V0IDw9IGlzIG91ciBob2xl LiAgSWYgaXQncyBub3QgYmlnIGVub3VnaCB0byBjb250YWluIHRoZQorCSAqIHJlcXVlc3RlZCBy YW5nZSwgdGhlbiB0aGUgYWxsb2NhdGlvbiBmYWlscy4KKwkgKi8KKwkJaWd0X2Fzc2VydChob2xl LT5vZmZzZXQgPD0gb2Zmc2V0KTsKKwkJaWYgKGhvbGUtPnNpemUgPCBvZmZzZXQgLSBob2xlLT5v ZmZzZXQgKyBzaXplKQorCQkJcmV0dXJuIGZhbHNlOworCisJCXNpbXBsZV92bWFfaG9sZV9hbGxv Yyhob2xlLCBvZmZzZXQsIHNpemUpOworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwkvKiBXZSBkaWRu J3QgZmluZCBhIHN1aXRhYmxlIGhvbGUgKi8KKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyB1 aW50NjRfdCBpbnRlbF9hbGxvY2F0b3Jfc2ltcGxlX2FsbG9jKHN0cnVjdCBpbnRlbF9hbGxvY2F0 b3IgKmlhbCwKKwkJCQkJICAgICB1aW50MzJfdCBoYW5kbGUsIHVpbnQ2NF90IHNpemUsCisJCQkJ CSAgICAgdWludDY0X3QgYWxpZ25tZW50KQoreworCXN0cnVjdCBpbnRlbF9hbGxvY2F0b3JfcmVj b3JkICpyZWM7CisJc3RydWN0IGludGVsX2FsbG9jYXRvcl9zaW1wbGUgKmlhbHM7CisJdWludDY0 X3Qgb2Zmc2V0OworCisJaWd0X2Fzc2VydChpYWwpOworCWlhbHMgPSAoc3RydWN0IGludGVsX2Fs bG9jYXRvcl9zaW1wbGUgKikgaWFsLT5wcml2OworCWlndF9hc3NlcnQoaWFscyk7CisJaWd0X2Fz c2VydChoYW5kbGUpOworCWFsaWdubWVudCA9IGFsaWdubWVudCA+IDAgPyBhbGlnbm1lbnQgOiAx OworCXJlYyA9IGlndF9tYXBfZmluZCgmaWFscy0+b2JqZWN0cywgJmhhbmRsZSk7CisJaWYgKHJl YykgeworCQlvZmZzZXQgPSByZWMtPm9mZnNldDsKKwkJaWd0X2Fzc2VydChyZWMtPnNpemUgPT0g c2l6ZSk7CisJfSBlbHNlIHsKKwkJaWd0X2Fzc2VydChzaW1wbGVfdm1hX2hlYXBfYWxsb2MoJmlh bHMtPmhlYXAsICZvZmZzZXQsCisJCQkJCQkgc2l6ZSwgYWxpZ25tZW50KSk7CisJCXJlYyA9IG1h bGxvYyhzaXplb2YoKnJlYykpOworCQlyZWMtPmhhbmRsZSA9IGhhbmRsZTsKKwkJcmVjLT5vZmZz ZXQgPSBvZmZzZXQ7CisJCXJlYy0+c2l6ZSA9IHNpemU7CisKKwkJaWd0X21hcF9hZGQoJmlhbHMt Pm9iamVjdHMsICZyZWMtPmhhbmRsZSwgcmVjKTsKKwkJaWFscy0+YWxsb2NhdGVkX29iamVjdHMr KzsKKwkJaWFscy0+YWxsb2NhdGVkX3NpemUgKz0gc2l6ZTsKKwl9CisKKwlyZXR1cm4gb2Zmc2V0 OworfQorCitzdGF0aWMgYm9vbCBpbnRlbF9hbGxvY2F0b3Jfc2ltcGxlX2ZyZWUoc3RydWN0IGlu dGVsX2FsbG9jYXRvciAqaWFsLCB1aW50MzJfdCBoYW5kbGUpCit7CisJc3RydWN0IGludGVsX2Fs bG9jYXRvcl9yZWNvcmQgKnJlYyA9IE5VTEw7CisJc3RydWN0IGludGVsX2FsbG9jYXRvcl9zaW1w bGUgKmlhbHM7CisKKwlpZ3RfYXNzZXJ0KGlhbCk7CisJaWFscyA9IChzdHJ1Y3QgaW50ZWxfYWxs b2NhdG9yX3NpbXBsZSAqKSBpYWwtPnByaXY7CisJaWd0X2Fzc2VydChpYWxzKTsKKworCXJlYyA9 IGlndF9tYXBfZGVsKCZpYWxzLT5vYmplY3RzLCAmaGFuZGxlKTsKKwlpZiAocmVjKSB7CisJCXNp bXBsZV92bWFfaGVhcF9mcmVlKCZpYWxzLT5oZWFwLCByZWMtPm9mZnNldCwgcmVjLT5zaXplKTsK KwkJaWFscy0+YWxsb2NhdGVkX29iamVjdHMtLTsKKwkJaWFscy0+YWxsb2NhdGVkX3NpemUgLT0g cmVjLT5zaXplOworCQlmcmVlKHJlYyk7CisKKwkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0dXJu IGZhbHNlOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgX19zYW1lKGNvbnN0IHN0cnVjdCBpbnRl bF9hbGxvY2F0b3JfcmVjb3JkICpyZWMsCisJCQkgIHVpbnQzMl90IGhhbmRsZSwgdWludDY0X3Qg c2l6ZSwgdWludDY0X3Qgb2Zmc2V0KQoreworCXJldHVybiByZWMtPmhhbmRsZSA9PSBoYW5kbGUg JiYgcmVjLT5zaXplID09IHNpemUgJiYKKwkJCURFQ0FOT05JQ0FMKHJlYy0+b2Zmc2V0KSA9PSBE RUNBTk9OSUNBTChvZmZzZXQpOworfQorCitzdGF0aWMgYm9vbCBpbnRlbF9hbGxvY2F0b3Jfc2lt cGxlX2lzX2FsbG9jYXRlZChzdHJ1Y3QgaW50ZWxfYWxsb2NhdG9yICppYWwsCisJCQkJCQl1aW50 MzJfdCBoYW5kbGUsIHVpbnQ2NF90IHNpemUsCisJCQkJCQl1aW50NjRfdCBvZmZzZXQpCit7CisJ c3RydWN0IGludGVsX2FsbG9jYXRvcl9yZWNvcmQgKnJlYzsKKwlzdHJ1Y3QgaW50ZWxfYWxsb2Nh dG9yX3NpbXBsZSAqaWFsczsKKwlib29sIHNhbWUgPSBmYWxzZTsKKworCWlndF9hc3NlcnQoaWFs KTsKKwlpYWxzID0gKHN0cnVjdCBpbnRlbF9hbGxvY2F0b3Jfc2ltcGxlICopIGlhbC0+cHJpdjsK KwlpZ3RfYXNzZXJ0KGlhbHMpOworCWlndF9hc3NlcnQoaGFuZGxlKTsKKworCXJlYyA9IGlndF9t YXBfZmluZCgmaWFscy0+b2JqZWN0cywgJmhhbmRsZSk7CisJaWYgKHJlYyAmJiBfX3NhbWUocmVj LCBoYW5kbGUsIHNpemUsIG9mZnNldCkpCisJCXNhbWUgPSB0cnVlOworCisJcmV0dXJuIHNhbWU7 Cit9CisKK3N0YXRpYyBib29sIGludGVsX2FsbG9jYXRvcl9zaW1wbGVfcmVzZXJ2ZShzdHJ1Y3Qg aW50ZWxfYWxsb2NhdG9yICppYWwsCisJCQkJCSAgIHVpbnQzMl90IGhhbmRsZSwKKwkJCQkJICAg dWludDY0X3Qgc3RhcnQsIHVpbnQ2NF90IGVuZCkKK3sKKwl1aW50NjRfdCBzaXplID0gZW5kIC0g c3RhcnQ7CisJc3RydWN0IGludGVsX2FsbG9jYXRvcl9yZWNvcmQgKnJlYyA9IE5VTEw7CisJc3Ry dWN0IGludGVsX2FsbG9jYXRvcl9zaW1wbGUgKmlhbHM7CisKKwlpZ3RfYXNzZXJ0KGlhbCk7CisJ aWFscyA9IChzdHJ1Y3QgaW50ZWxfYWxsb2NhdG9yX3NpbXBsZSAqKSBpYWwtPnByaXY7CisJaWd0 X2Fzc2VydChpYWxzKTsKKworCS8qIGNsZWFyIFs2Mzo0OF0gYml0cyB0byBnZXQgcmlkIG9mIGNh bm9uaWNhbCBmb3JtICovCisJc3RhcnQgPSBERUNBTk9OSUNBTChzdGFydCk7CisJZW5kID0gREVD QU5PTklDQUwoZW5kKTsKKwlpZ3RfYXNzZXJ0KGVuZCA+IHN0YXJ0IHx8IGVuZCA9PSAwKTsKKwor CWlmIChzaW1wbGVfdm1hX2hlYXBfYWxsb2NfYWRkcihpYWxzLCBzdGFydCwgc2l6ZSkpIHsKKwkJ cmVjID0gbWFsbG9jKHNpemVvZigqcmVjKSk7CisJCXJlYy0+aGFuZGxlID0gaGFuZGxlOworCQly ZWMtPm9mZnNldCA9IHN0YXJ0OworCQlyZWMtPnNpemUgPSBzaXplOworCisJCWlndF9tYXBfYWRk KCZpYWxzLT5yZXNlcnZlZCwgJnJlYy0+b2Zmc2V0LCByZWMpOworCisJCWlhbHMtPnJlc2VydmVk X2FyZWFzKys7CisJCWlhbHMtPnJlc2VydmVkX3NpemUgKz0gcmVjLT5zaXplOworCQlyZXR1cm4g dHJ1ZTsKKwl9CisKKwlpZ3RfZGVidWcoIkZhaWxlZCB0byByZXNlcnZlICVsbHggKyAlbGx4XG4i LCAobG9uZyBsb25nKXN0YXJ0LCAobG9uZyBsb25nKXNpemUpOworCXJldHVybiBmYWxzZTsKK30K Kworc3RhdGljIGJvb2wgaW50ZWxfYWxsb2NhdG9yX3NpbXBsZV91bnJlc2VydmUoc3RydWN0IGlu dGVsX2FsbG9jYXRvciAqaWFsLAorCQkJCQkgICAgIHVpbnQzMl90IGhhbmRsZSwKKwkJCQkJICAg ICB1aW50NjRfdCBzdGFydCwgdWludDY0X3QgZW5kKQoreworCXVpbnQ2NF90IHNpemUgPSBlbmQg LSBzdGFydDsKKwlzdHJ1Y3QgaW50ZWxfYWxsb2NhdG9yX3JlY29yZCAqcmVjID0gTlVMTDsKKwlz dHJ1Y3QgaW50ZWxfYWxsb2NhdG9yX3NpbXBsZSAqaWFsczsKKworCWlndF9hc3NlcnQoaWFsKTsK KwlpYWxzID0gKHN0cnVjdCBpbnRlbF9hbGxvY2F0b3Jfc2ltcGxlICopIGlhbC0+cHJpdjsKKwlp Z3RfYXNzZXJ0KGlhbHMpOworCisJLyogY2xlYXIgWzYzOjQ4XSBiaXRzIHRvIGdldCByaWQgb2Yg Y2Fub25pY2FsIGZvcm0gKi8KKwlzdGFydCA9IERFQ0FOT05JQ0FMKHN0YXJ0KTsKKwllbmQgPSBE RUNBTk9OSUNBTChlbmQpOworCisJaWd0X2Fzc2VydChlbmQgPiBzdGFydCB8fCBlbmQgPT0gMCk7 CisKKwlyZWMgPSBpZ3RfbWFwX2ZpbmQoJmlhbHMtPnJlc2VydmVkLCAmc3RhcnQpOworCisJaWYg KCFyZWMpIHsKKwkJaWd0X2RlYnVnKCJPbmx5IHJlc2VydmVkIGJsb2NrcyBjYW4gYmUgdW5yZXNl cnZlZFxuIik7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlpZiAocmVjLT5zaXplICE9IHNpemUp IHsKKwkJaWd0X2RlYnVnKCJPbmx5IHRoZSB3aG9sZSBibG9jayB1bnJlc2VydmF0aW9uIGFsbG93 ZWRcbiIpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJaWYgKHJlYy0+aGFuZGxlICE9IGhhbmRs ZSkgeworCQlpZ3RfZGVidWcoIkhhbmRsZSAldSBkb2Vzbid0IG1hdGNoIHJlc2VydmF0aW9uIGhh bmRsZTogJXVcbiIsCisJCQkgcmVjLT5oYW5kbGUsIGhhbmRsZSk7CisJCXJldHVybiBmYWxzZTsK Kwl9CisKKwlpZ3RfbWFwX2RlbCgmaWFscy0+cmVzZXJ2ZWQsICZzdGFydCk7CisKKwlpYWxzLT5y ZXNlcnZlZF9hcmVhcy0tOworCWlhbHMtPnJlc2VydmVkX3NpemUgLT0gcmVjLT5zaXplOworCWZy ZWUocmVjKTsKKwlzaW1wbGVfdm1hX2hlYXBfZnJlZSgmaWFscy0+aGVhcCwgc3RhcnQsIHNpemUp OworCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIGludGVsX2FsbG9jYXRvcl9zaW1w bGVfaXNfcmVzZXJ2ZWQoc3RydWN0IGludGVsX2FsbG9jYXRvciAqaWFsLAorCQkJCQkgICAgICAg dWludDY0X3Qgc3RhcnQsIHVpbnQ2NF90IGVuZCkKK3sKKwl1aW50NjRfdCBzaXplID0gZW5kIC0g c3RhcnQ7CisJc3RydWN0IGludGVsX2FsbG9jYXRvcl9yZWNvcmQgKnJlYyA9IE5VTEw7CisJc3Ry dWN0IGludGVsX2FsbG9jYXRvcl9zaW1wbGUgKmlhbHM7CisKKwlpZ3RfYXNzZXJ0KGlhbCk7CisJ aWFscyA9IChzdHJ1Y3QgaW50ZWxfYWxsb2NhdG9yX3NpbXBsZSAqKSBpYWwtPnByaXY7CisJaWd0 X2Fzc2VydChpYWxzKTsKKworCS8qIGNsZWFyIFs2Mzo0OF0gYml0cyB0byBnZXQgcmlkIG9mIGNh bm9uaWNhbCBmb3JtICovCisJc3RhcnQgPSBERUNBTk9OSUNBTChzdGFydCk7CisJZW5kID0gREVD QU5PTklDQUwoZW5kKTsKKworCWlndF9hc3NlcnQoZW5kID4gc3RhcnQgfHwgZW5kID09IDApOwor CisJcmVjID0gaWd0X21hcF9maW5kKCZpYWxzLT5yZXNlcnZlZCwgJnN0YXJ0KTsKKworCWlmICgh cmVjKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAocmVjLT5vZmZzZXQgPT0gc3RhcnQgJiYgcmVj LT5zaXplID09IHNpemUpCisJCXJldHVybiB0cnVlOworCisJcmV0dXJuIGZhbHNlOworfQorCitz dGF0aWMgYm9vbCBlcXVhbF84Ynl0ZXMoY29uc3Qgdm9pZCAqa2V5MSwgY29uc3Qgdm9pZCAqa2V5 MikKK3sKKwljb25zdCB1aW50NjRfdCAqazEgPSBrZXkxLCAqazIgPSBrZXkyOworCXJldHVybiAq azEgPT0gKmsyOworfQorCitzdGF0aWMgdm9pZCBpbnRlbF9hbGxvY2F0b3Jfc2ltcGxlX2Rlc3Ry b3koc3RydWN0IGludGVsX2FsbG9jYXRvciAqaWFsKQoreworCXN0cnVjdCBpbnRlbF9hbGxvY2F0 b3Jfc2ltcGxlICppYWxzOworCXN0cnVjdCBpZ3RfbWFwX2VudHJ5ICpwb3M7CisJc3RydWN0IGln dF9tYXAgKm1hcDsKKwlpbnQgaTsKKworCWlndF9hc3NlcnQoaWFsKTsKKwlpYWxzID0gKHN0cnVj dCBpbnRlbF9hbGxvY2F0b3Jfc2ltcGxlICopIGlhbC0+cHJpdjsKKwlzaW1wbGVfdm1hX2hlYXBf ZmluaXNoKCZpYWxzLT5oZWFwKTsKKworCW1hcCA9ICZpYWxzLT5vYmplY3RzOworCWlndF9tYXBf Zm9yX2VhY2gobWFwLCBpLCBwb3MpCisJCWZyZWUocG9zLT52YWx1ZSk7CisJaWd0X21hcF9mcmVl KCZpYWxzLT5vYmplY3RzKTsKKworCW1hcCA9ICZpYWxzLT5yZXNlcnZlZDsKKwlpZ3RfbWFwX2Zv cl9lYWNoKG1hcCwgaSwgcG9zKQorCQlmcmVlKHBvcy0+dmFsdWUpOworCWlndF9tYXBfZnJlZSgm aWFscy0+cmVzZXJ2ZWQpOworCisJZnJlZShpYWwtPnByaXYpOworCWZyZWUoaWFsKTsKK30KKwor c3RhdGljIGJvb2wgaW50ZWxfYWxsb2NhdG9yX3NpbXBsZV9pc19lbXB0eShzdHJ1Y3QgaW50ZWxf YWxsb2NhdG9yICppYWwpCit7CisJc3RydWN0IGludGVsX2FsbG9jYXRvcl9zaW1wbGUgKmlhbHMg PSBpYWwtPnByaXY7CisKKwlpZ3RfZGVidWcoIjxpYWw6ICVwLCBmZDogJWQ+IG9iamVjdHM6ICUi IFBSSWQ2NAorCQkgICIsIHJlc2VydmVkX2FyZWFzOiAlIiBQUklkNjQgIlxuIiwKKwkJICBpYWws IGlhbC0+ZmQsCisJCSAgaWFscy0+YWxsb2NhdGVkX29iamVjdHMsIGlhbHMtPnJlc2VydmVkX2Fy ZWFzKTsKKworCXJldHVybiAhaWFscy0+YWxsb2NhdGVkX29iamVjdHMgJiYgIWlhbHMtPnJlc2Vy dmVkX2FyZWFzOworfQorCitzdGF0aWMgdm9pZCBpbnRlbF9hbGxvY2F0b3Jfc2ltcGxlX3ByaW50 KHN0cnVjdCBpbnRlbF9hbGxvY2F0b3IgKmlhbCwgYm9vbCBmdWxsKQoreworCXN0cnVjdCBpbnRl bF9hbGxvY2F0b3Jfc2ltcGxlICppYWxzOworCXN0cnVjdCBzaW1wbGVfdm1hX2hvbGUgKmhvbGU7 CisJc3RydWN0IHNpbXBsZV92bWFfaGVhcCAqaGVhcDsKKwlzdHJ1Y3QgaWd0X21hcF9lbnRyeSAq cG9zOworCXN0cnVjdCBpZ3RfbWFwICptYXA7CisJdWludDY0X3QgdG90YWxfZnJlZSA9IDAsIGFs bG9jYXRlZF9zaXplID0gMCwgYWxsb2NhdGVkX29iamVjdHMgPSAwOworCXVpbnQ2NF90IHJlc2Vy dmVkX3NpemUgPSAwLCByZXNlcnZlZF9hcmVhcyA9IDA7CisJaW50IGk7CisKKwlpZ3RfYXNzZXJ0 KGlhbCk7CisJaWFscyA9IChzdHJ1Y3QgaW50ZWxfYWxsb2NhdG9yX3NpbXBsZSAqKSBpYWwtPnBy aXY7CisJaWd0X2Fzc2VydChpYWxzKTsKKwloZWFwID0gJmlhbHMtPmhlYXA7CisKKwlpZ3RfaW5m bygiaW50ZWxfYWxsb2NhdG9yX3NpbXBsZSA8aWFsOiAlcCwgZmQ6ICVkPiBvbiAiCisJCSAiWzB4 JSJQUkl4NjQiIDogMHglIlBSSXg2NCJdOlxuIiwgaWFsLCBpYWwtPmZkLAorCQkgaWFscy0+c3Rh cnQsIGlhbHMtPmVuZCk7CisKKwlpZiAoZnVsbCkgeworCQlpZ3RfaW5mbygiaG9sZXM6XG4iKTsK KwkJc2ltcGxlX3ZtYV9mb3JlYWNoX2hvbGUoaG9sZSwgaGVhcCkgeworCQkJaWd0X2luZm8oIm9m ZnNldCA9ICUiUFJJdTY0IiAoMHglIlBSSXg2NCIsICIKKwkJCQkgInNpemUgPSAlIlBSSXU2NCIg KDB4JSJQUkl4NjQiKVxuIiwKKwkJCQkgaG9sZS0+b2Zmc2V0LCBob2xlLT5vZmZzZXQsIGhvbGUt PnNpemUsCisJCQkJIGhvbGUtPnNpemUpOworCQkJdG90YWxfZnJlZSArPSBob2xlLT5zaXplOwor CQl9CisJCWlndF9hc3NlcnQodG90YWxfZnJlZSA8PSBpYWxzLT50b3RhbF9zaXplKTsKKwkJaWd0 X2luZm8oInRvdGFsX2ZyZWU6ICUiIFBSSXg2NAorCQkJICIsIHRvdGFsX3NpemU6ICUiIFBSSXg2 NAorCQkJICIsIGFsbG9jYXRlZF9zaXplOiAlIiBQUkl4NjQKKwkJCSAiLCByZXNlcnZlZF9zaXpl OiAlIiBQUkl4NjQgIlxuIiwKKwkJCSB0b3RhbF9mcmVlLCBpYWxzLT50b3RhbF9zaXplLCBpYWxz LT5hbGxvY2F0ZWRfc2l6ZSwKKwkJCSBpYWxzLT5yZXNlcnZlZF9zaXplKTsKKwkJaWd0X2Fzc2Vy dCh0b3RhbF9mcmVlID09CisJCQkgICBpYWxzLT50b3RhbF9zaXplIC0gaWFscy0+YWxsb2NhdGVk X3NpemUgLSBpYWxzLT5yZXNlcnZlZF9zaXplKTsKKworCQlpZ3RfaW5mbygib2JqZWN0czpcbiIp OworCQltYXAgPSAmaWFscy0+b2JqZWN0czsKKwkJaWd0X21hcF9mb3JfZWFjaChtYXAsIGksIHBv cykgeworCQkJc3RydWN0IGludGVsX2FsbG9jYXRvcl9yZWNvcmQgKnJlYyA9IHBvcy0+dmFsdWU7 CisKKwkJCWlndF9pbmZvKCJoYW5kbGUgPSAlZCwgb2Zmc2V0ID0gJSJQUkl1NjQiICIKKwkJCQki KDB4JSJQUkl4NjQiLCBzaXplID0gJSJQUkl1NjQiICgweCUiUFJJeDY0IilcbiIsCisJCQkJIHJl Yy0+aGFuZGxlLCByZWMtPm9mZnNldCwgcmVjLT5vZmZzZXQsCisJCQkJIHJlYy0+c2l6ZSwgcmVj LT5zaXplKTsKKwkJCWFsbG9jYXRlZF9vYmplY3RzKys7CisJCQlhbGxvY2F0ZWRfc2l6ZSArPSBy ZWMtPnNpemU7CisJCX0KKwkJaWd0X2Fzc2VydChpYWxzLT5hbGxvY2F0ZWRfc2l6ZSA9PSBhbGxv Y2F0ZWRfc2l6ZSk7CisJCWlndF9hc3NlcnQoaWFscy0+YWxsb2NhdGVkX29iamVjdHMgPT0gYWxs b2NhdGVkX29iamVjdHMpOworCisJCWlndF9pbmZvKCJyZXNlcnZlZCBhcmVhczpcbiIpOworCQlt YXAgPSAmaWFscy0+cmVzZXJ2ZWQ7CisJCWlndF9tYXBfZm9yX2VhY2gobWFwLCBpLCBwb3MpIHsK KwkJCXN0cnVjdCBpbnRlbF9hbGxvY2F0b3JfcmVjb3JkICpyZWMgPSBwb3MtPnZhbHVlOworCisJ CQlpZ3RfaW5mbygib2Zmc2V0ID0gJSJQUkl1NjQiICgweCUiUFJJeDY0IiwgIgorCQkJCSAic2l6 ZSA9ICUiUFJJdTY0IiAoMHglIlBSSXg2NCIpXG4iLAorCQkJCSByZWMtPm9mZnNldCwgcmVjLT5v ZmZzZXQsCisJCQkJIHJlYy0+c2l6ZSwgcmVjLT5zaXplKTsKKwkJCXJlc2VydmVkX2FyZWFzKys7 CisJCQlyZXNlcnZlZF9zaXplICs9IHJlYy0+c2l6ZTsKKwkJfQorCQlpZ3RfYXNzZXJ0KGlhbHMt PnJlc2VydmVkX2FyZWFzID09IHJlc2VydmVkX2FyZWFzKTsKKwkJaWd0X2Fzc2VydChpYWxzLT5y ZXNlcnZlZF9zaXplID09IHJlc2VydmVkX3NpemUpOworCX0gZWxzZSB7CisJCXNpbXBsZV92bWFf Zm9yZWFjaF9ob2xlKGhvbGUsIGhlYXApCisJCQl0b3RhbF9mcmVlICs9IGhvbGUtPnNpemU7CisJ fQorCisJaWd0X2luZm8oImZyZWUgc3BhY2U6ICUiUFJJdTY0IkIgKDB4JSJQUkl4NjQiKSAoJS4y ZiUlIGZ1bGwpXG4iCisJCSAiYWxsb2NhdGVkIG9iamVjdHM6ICUiUFJJdTY0IiwgcmVzZXJ2ZWQg YXJlYXM6ICUiUFJJdTY0IlxuIiwKKwkJIHRvdGFsX2ZyZWUsIHRvdGFsX2ZyZWUsCisJCSAoKGRv dWJsZSkgKGlhbHMtPnRvdGFsX3NpemUgLSB0b3RhbF9mcmVlKSAvCisJCSAgKGRvdWJsZSkgaWFs cy0+dG90YWxfc2l6ZSkgKiAxMDAsCisJCSBpYWxzLT5hbGxvY2F0ZWRfb2JqZWN0cywgaWFscy0+ cmVzZXJ2ZWRfYXJlYXMpOworfQorCitzdGF0aWMgc3RydWN0IGludGVsX2FsbG9jYXRvciAqCitf X2ludGVsX2FsbG9jYXRvcl9zaW1wbGVfY3JlYXRlKGludCBmZCwgdWludDY0X3Qgc3RhcnQsIHVp bnQ2NF90IGVuZCwKKwkJCQllbnVtIGFsbG9jYXRvcl9zdHJhdGVneSBzdHJhdGVneSkKK3sKKwlz dHJ1Y3QgaW50ZWxfYWxsb2NhdG9yICppYWw7CisJc3RydWN0IGludGVsX2FsbG9jYXRvcl9zaW1w bGUgKmlhbHM7CisKKwlpZ3RfZGVidWcoIlVzaW5nIHNpbXBsZSBhbGxvY2F0b3JcbiIpOworCisJ aWFsID0gY2FsbG9jKDEsIHNpemVvZigqaWFsKSk7CisJaWd0X2Fzc2VydChpYWwpOworCisJaWFs LT5mZCA9IGZkOworCWlhbC0+Z2V0X2FkZHJlc3NfcmFuZ2UgPSBpbnRlbF9hbGxvY2F0b3Jfc2lt cGxlX2dldF9hZGRyZXNzX3JhbmdlOworCWlhbC0+YWxsb2MgPSBpbnRlbF9hbGxvY2F0b3Jfc2lt cGxlX2FsbG9jOworCWlhbC0+ZnJlZSA9IGludGVsX2FsbG9jYXRvcl9zaW1wbGVfZnJlZTsKKwlp YWwtPmlzX2FsbG9jYXRlZCA9IGludGVsX2FsbG9jYXRvcl9zaW1wbGVfaXNfYWxsb2NhdGVkOwor CWlhbC0+cmVzZXJ2ZSA9IGludGVsX2FsbG9jYXRvcl9zaW1wbGVfcmVzZXJ2ZTsKKwlpYWwtPnVu cmVzZXJ2ZSA9IGludGVsX2FsbG9jYXRvcl9zaW1wbGVfdW5yZXNlcnZlOworCWlhbC0+aXNfcmVz ZXJ2ZWQgPSBpbnRlbF9hbGxvY2F0b3Jfc2ltcGxlX2lzX3Jlc2VydmVkOworCWlhbC0+ZGVzdHJv eSA9IGludGVsX2FsbG9jYXRvcl9zaW1wbGVfZGVzdHJveTsKKwlpYWwtPmlzX2VtcHR5ID0gaW50 ZWxfYWxsb2NhdG9yX3NpbXBsZV9pc19lbXB0eTsKKwlpYWwtPnByaW50ID0gaW50ZWxfYWxsb2Nh dG9yX3NpbXBsZV9wcmludDsKKwlpYWxzID0gaWFsLT5wcml2ID0gbWFsbG9jKHNpemVvZihzdHJ1 Y3QgaW50ZWxfYWxsb2NhdG9yX3NpbXBsZSkpOworCWlndF9hc3NlcnQoaWFscyk7CisKKwlpZ3Rf bWFwX2luaXQoJmlhbHMtPm9iamVjdHMpOworCS8qIFJlc2VydmVkIGFkZHJlc3NlcyBoYXNodGFi bGUgaXMgaW5kZXhlZCBieSBhbiBvZmZzZXQgKi8KKwlfX2lndF9tYXBfaW5pdCgmaWFscy0+cmVz ZXJ2ZWQsIGVxdWFsXzhieXRlcywgTlVMTCwgMyk7CisKKwlpYWxzLT5zdGFydCA9IHN0YXJ0Owor CWlhbHMtPmVuZCA9IGVuZDsKKwlpYWxzLT50b3RhbF9zaXplID0gZW5kIC0gc3RhcnQ7CisJc2lt cGxlX3ZtYV9oZWFwX2luaXQoJmlhbHMtPmhlYXAsIGlhbHMtPnN0YXJ0LCBpYWxzLT50b3RhbF9z aXplLAorCQkJICAgICBzdHJhdGVneSk7CisKKwlpYWxzLT5hbGxvY2F0ZWRfc2l6ZSA9IDA7CisJ aWFscy0+YWxsb2NhdGVkX29iamVjdHMgPSAwOworCWlhbHMtPnJlc2VydmVkX3NpemUgPSAwOwor CWlhbHMtPnJlc2VydmVkX2FyZWFzID0gMDsKKworCXJldHVybiBpYWw7Cit9CisKK3N0cnVjdCBp bnRlbF9hbGxvY2F0b3IgKgoraW50ZWxfYWxsb2NhdG9yX3NpbXBsZV9jcmVhdGUoaW50IGZkKQor eworCXVpbnQ2NF90IGd0dF9zaXplID0gZ2VtX2FwZXJ0dXJlX3NpemUoZmQpOworCisJaWYgKCFn ZW1fdXNlc19mdWxsX3BwZ3R0KGZkKSkKKwkJZ3R0X3NpemUgLz0gMjsKKwllbHNlCisJCWd0dF9z aXplIC09IFJFU0VSVkVEOworCisJcmV0dXJuIF9faW50ZWxfYWxsb2NhdG9yX3NpbXBsZV9jcmVh dGUoZmQsIDAsIGd0dF9zaXplLAorCQkJCQkgICAgICAgQUxMT0NfU1RSQVRFR1lfSElHSF9UT19M T1cpOworfQorCitzdHJ1Y3QgaW50ZWxfYWxsb2NhdG9yICoKK2ludGVsX2FsbG9jYXRvcl9zaW1w bGVfY3JlYXRlX2Z1bGwoaW50IGZkLCB1aW50NjRfdCBzdGFydCwgdWludDY0X3QgZW5kLAorCQkJ CSAgIGVudW0gYWxsb2NhdG9yX3N0cmF0ZWd5IHN0cmF0ZWd5KQoreworCXVpbnQ2NF90IGd0dF9z aXplID0gZ2VtX2FwZXJ0dXJlX3NpemUoZmQpOworCisJaWd0X2Fzc2VydChlbmQgPD0gZ3R0X3Np emUpOworCWlmICghZ2VtX3VzZXNfZnVsbF9wcGd0dChmZCkpCisJCWd0dF9zaXplIC89IDI7CisJ aWd0X2Fzc2VydChlbmQgLSBzdGFydCA8PSBndHRfc2l6ZSk7CisKKwlyZXR1cm4gX19pbnRlbF9h bGxvY2F0b3Jfc2ltcGxlX2NyZWF0ZShmZCwgc3RhcnQsIGVuZCwgc3RyYXRlZ3kpOworfQotLSAK Mi4yNi4wCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpp Z3QtZGV2IG1haWxpbmcgbGlzdAppZ3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczov L2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lndC1kZXYK