From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTPS id 1A39C6F878 for ; Fri, 23 Oct 2020 12:42:30 +0000 (UTC) From: =?UTF-8?q?Zbigniew=20Kempczy=C5=84ski?= Date: Fri, 23 Oct 2020 14:41:53 +0200 Message-Id: <20201023124212.26428-5-zbigniew.kempczynski@intel.com> In-Reply-To: <20201023124212.26428-1-zbigniew.kempczynski@intel.com> References: <20201023124212.26428-1-zbigniew.kempczynski@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t v3 04/23] 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 Cc: Chris Wilson List-ID: RnJvbTogRG9taW5payBHcnplZ29yemVrIDxkb21pbmlrLmdyemVnb3J6ZWtAaW50ZWwuY29tPgoK U2ltcGxlIGFsbG9jYXRvciBib3Jyb3dlZCBmcm9tIE1lc2EgYWRvcHRlZCBmb3IgSUdUIHVzZS4K ClNpZ25lZC1vZmYtYnk6IERvbWluaWsgR3J6ZWdvcnplayA8ZG9taW5pay5ncnplZ29yemVrQGlu dGVsLmNvbT4KQ2M6IFpiaWduaWV3IEtlbXBjennFhHNraSA8emJpZ25pZXcua2VtcGN6eW5za2lA aW50ZWwuY29tPgpDYzogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+Ci0t LQogbGliL2ludGVsX2FsbG9jYXRvcl9zaW1wbGUuYyB8IDczMCArKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKwogMSBmaWxlIGNoYW5nZWQsIDczMCBpbnNlcnRpb25zKCspCiBjcmVh dGUgbW9kZSAxMDA2NDQgbGliL2ludGVsX2FsbG9jYXRvcl9zaW1wbGUuYwoKZGlmZiAtLWdpdCBh L2xpYi9pbnRlbF9hbGxvY2F0b3Jfc2ltcGxlLmMgYi9saWIvaW50ZWxfYWxsb2NhdG9yX3NpbXBs ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi4xZjUyZGIzZgotLS0gL2Rl di9udWxsCisrKyBiL2xpYi9pbnRlbF9hbGxvY2F0b3Jfc2ltcGxlLmMKQEAgLTAsMCArMSw3MzAg QEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAyMCBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBl cm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29u IG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9j dW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29m dHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgor ICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3Ry aWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJl LCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5p c2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgor ICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ug KGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBh bGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisg KgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkg T0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJ TUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5U IFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9S IEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFO IEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00s IE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1Ig T1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKi8KKworI2luY2x1ZGUg PHN5cy9pb2N0bC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgImlndC5oIgorI2lu Y2x1ZGUgImlndF94ODYuaCIKKyNpbmNsdWRlICJpbnRlbF9hbGxvY2F0b3IuaCIKKyNpbmNsdWRl ICJpbnRlbF9idWZvcHMuaCIKKyNpbmNsdWRlICJpZ3RfbWFwLmgiCisKKy8qIEF2b2lkIGNvbXBp bGF0aW9uIHdhcm5pbmcgKi8KK3N0cnVjdCBpbnRlbF9hbGxvY2F0b3IgKmludGVsX2FsbG9jYXRv cl9zaW1wbGVfY3JlYXRlKGludCBmZCwgdWludDMyX3QgY3R4KTsKKworc3RydWN0IHNpbXBsZV92 bWFfaGVhcCB7CisJc3RydWN0IGlndF9saXN0X2hlYWQgaG9sZXM7CisKKwkvKiBJZiB0cnVlLCBz aW1wbGVfdm1hX2hlYXBfYWxsb2Mgd2lsbCBwcmVmZXIgaGlnaCBhZGRyZXNzZXMKKwkgKgorCSAq IERlZmF1bHQgaXMgdHJ1ZS4KKwkgKi8KKwlib29sIGFsbG9jX2hpZ2g7Cit9OworCitzdHJ1Y3Qg c2ltcGxlX3ZtYV9ob2xlIHsKKwlzdHJ1Y3QgaWd0X2xpc3RfaGVhZCBsaW5rOworCXVpbnQ2NF90 IG9mZnNldDsKKwl1aW50NjRfdCBzaXplOworfTsKKworc3RydWN0IGludGVsX2FsbG9jYXRvcl9z aW1wbGUgeworCXN0cnVjdCBpZ3RfbWFwIG9iamVjdHM7CisJc3RydWN0IGlndF9tYXAgcmVzZXJ2 ZWQ7CisJc3RydWN0IHNpbXBsZV92bWFfaGVhcCBoZWFwOworCisJdWludDY0X3QgZ3R0X3NpemU7 CisJdWludDY0X3QgYmlhczsKKwl1aW50NjRfdCBzdGFydDsKKwl1aW50NjRfdCBlbmQ7CisKKwkv KiBzdGF0aXN0aWNzICovCisJdWludDY0X3QgdG90YWxfc2l6ZTsKKwl1aW50NjRfdCBhbGxvY2F0 ZWRfc2l6ZTsKKwl1aW50NjRfdCBhbGxvY2F0ZWRfb2JqZWN0czsKKwl1aW50NjRfdCByZXNlcnZl ZF9zaXplOworCXVpbnQ2NF90IHJlc2VydmVkX2FyZWFzOworfTsKKworc3RydWN0IGludGVsX2Fs bG9jYXRvcl9yZWNvcmQgeworCXVpbnQzMl90IGhhbmRsZTsKKwl1aW50NjRfdCBvZmZzZXQ7CisJ dWludDY0X3Qgc2l6ZTsKK307CisKKyNkZWZpbmUgc2ltcGxlX3ZtYV9mb3JlYWNoX2hvbGUoX2hv bGUsIF9oZWFwKSBcCisJaWd0X2xpc3RfZm9yX2VhY2hfZW50cnkoX2hvbGUsICYoX2hlYXApLT5o b2xlcywgbGluaykKKworI2RlZmluZSBzaW1wbGVfdm1hX2ZvcmVhY2hfaG9sZV9zYWZlKF9ob2xl LCBfaGVhcCwgX3RtcCkgXAorCWlndF9saXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoX2hvbGUsIF90 bXAsICAmKF9oZWFwKS0+aG9sZXMsIGxpbmspCisKKyNkZWZpbmUgc2ltcGxlX3ZtYV9mb3JlYWNo X2hvbGVfc2FmZV9yZXYoX2hvbGUsIF9oZWFwLCBfdG1wKSBcCisJaWd0X2xpc3RfZm9yX2VhY2hf ZW50cnlfc2FmZV9yZXZlcnNlKF9ob2xlLCBfdG1wLCAgJihfaGVhcCktPmhvbGVzLCBsaW5rKQor CisjZGVmaW5lIERFQ0FOT05JQ0FMKG9mZnNldCkgKG9mZnNldCAmICgoMXVsbCA8PCA0OCkgLSAx KSkKKworc3RhdGljIHVpbnQ2NF90IGdldF9iaWFzKGludCBmZCkKK3sKKwkodm9pZCkgZmQ7CisK KwlyZXR1cm4gMjU2IDw8IDEwOworfQorCitzdGF0aWMgdm9pZCBzaW1wbGVfdm1hX2hlYXBfdmFs aWRhdGUoc3RydWN0IHNpbXBsZV92bWFfaGVhcCAqaGVhcCkKK3sKKwl1aW50NjRfdCBwcmV2X29m ZnNldCA9IDA7CisJc3RydWN0IHNpbXBsZV92bWFfaG9sZSAqaG9sZTsKKworCXNpbXBsZV92bWFf Zm9yZWFjaF9ob2xlKGhvbGUsIGhlYXApIHsKKwkJaWd0X2Fzc2VydChob2xlLT5zaXplID4gMCk7 CisKKwkJaWYgKCZob2xlLT5saW5rID09IGhlYXAtPmhvbGVzLm5leHQpIHsKKwkJLyogVGhpcyBt dXN0IGJlIHRoZSB0b3AtbW9zdCBob2xlLiAgQXNzZXJ0IHRoYXQsCisJCSAqIGlmIGl0IG92ZXJm bG93cywgaXQgb3ZlcmZsb3dzIHRvIDAsIGkuZS4gMl42NC4KKwkJICovCisJCQlpZ3RfYXNzZXJ0 KGhvbGUtPnNpemUgKyBob2xlLT5vZmZzZXQgPT0gMCB8fAorCQkJCSAgIGhvbGUtPnNpemUgKyBo b2xlLT5vZmZzZXQgPiBob2xlLT5vZmZzZXQpOworCQl9IGVsc2UgeworCQkvKiBUaGlzIGlzIG5v dCB0aGUgdG9wLW1vc3QgaG9sZSBzbyBpdCBtdXN0IG5vdCBvdmVyZmxvdyBhbmQsCisJCSAqIGlu IGZhY3QsIG11c3QgYmUgc3RyaWN0bHkgbG93ZXIgdGhhbiB0aGUgdG9wLW1vc3QgaG9sZS4gIElm CisJCSAqIGhvbGUtPnNpemUgKyBob2xlLT5vZmZzZXQgPT0gcHJldl9vZmZzZXQsIHRoZW4gd2Ug ZmFpbGVkIHRvCisJCSAqIGpvaW4gaG9sZXMgZHVyaW5nIGEgc2ltcGxlX3ZtYV9oZWFwX2ZyZWUu CisJCSAqLworCQkJaWd0X2Fzc2VydChob2xlLT5zaXplICsgaG9sZS0+b2Zmc2V0ID4gaG9sZS0+ b2Zmc2V0ICYmCisJCQkJICAgaG9sZS0+c2l6ZSArIGhvbGUtPm9mZnNldCA8IHByZXZfb2Zmc2V0 KTsKKwkJfQorCQlwcmV2X29mZnNldCA9IGhvbGUtPm9mZnNldDsKKwl9Cit9CisKKworc3RhdGlj IHZvaWQgc2ltcGxlX3ZtYV9oZWFwX2ZyZWUoc3RydWN0IHNpbXBsZV92bWFfaGVhcCAqaGVhcCwK KwkJCQl1aW50NjRfdCBvZmZzZXQsIHVpbnQ2NF90IHNpemUpCit7CisJc3RydWN0IHNpbXBsZV92 bWFfaG9sZSAqaGlnaF9ob2xlID0gTlVMTCwgKmxvd19ob2xlID0gTlVMTCwgKmhvbGU7CisJYm9v bCBoaWdoX2FkamFjZW50LCBsb3dfYWRqYWNlbnQ7CisKKwkvKiBGcmVlaW5nIHNvbWV0aGluZyB3 aXRoIGEgc2l6ZSBvZiAwIGlzIG5vdCB2YWxpZC4gKi8KKwlpZ3RfYXNzZXJ0KHNpemUgPiAwKTsK KworCS8qIEl0J3MgcG9zc2libGUgZm9yIG9mZnNldCArIHNpemUgdG8gd3JhcCBhcm91bmQgaWYg d2UgdG91Y2ggdGhlIHRvcCBvZgorCSAqIHRoZSA2NC1iaXQgYWRkcmVzcyBzcGFjZSwgYnV0IHdl IGNhbm5vdCBnbyBhbnkgaGlnaGVyIHRoYW4gMl42NC4KKwkgKi8KKwlpZ3RfYXNzZXJ0KG9mZnNl dCArIHNpemUgPT0gMCB8fCBvZmZzZXQgKyBzaXplID4gb2Zmc2V0KTsKKworCXNpbXBsZV92bWFf aGVhcF92YWxpZGF0ZShoZWFwKTsKKworCS8qIEZpbmQgaW1tZWRpYXRlbHkgaGlnaGVyIGFuZCBs b3dlciBob2xlcyBpZiB0aGV5IGV4aXN0LiAqLworCXNpbXBsZV92bWFfZm9yZWFjaF9ob2xlKGhv bGUsIGhlYXApIHsKKwkJaWYgKGhvbGUtPm9mZnNldCA8PSBvZmZzZXQpIHsKKwkJCWxvd19ob2xl ID0gaG9sZTsKKwkJCWJyZWFrOworCQl9CisJCWhpZ2hfaG9sZSA9IGhvbGU7CisJfQorCisJaWYg KGhpZ2hfaG9sZSkKKwkJaWd0X2Fzc2VydChvZmZzZXQgKyBzaXplIDw9IGhpZ2hfaG9sZS0+b2Zm c2V0KTsKKwloaWdoX2FkamFjZW50ID0gaGlnaF9ob2xlICYmIG9mZnNldCArIHNpemUgPT0gaGln aF9ob2xlLT5vZmZzZXQ7CisKKwlpZiAobG93X2hvbGUpIHsKKwkJaWd0X2Fzc2VydChsb3dfaG9s ZS0+b2Zmc2V0ICsgbG93X2hvbGUtPnNpemUgPiBsb3dfaG9sZS0+b2Zmc2V0KTsKKwkJaWd0X2Fz c2VydChsb3dfaG9sZS0+b2Zmc2V0ICsgbG93X2hvbGUtPnNpemUgPD0gb2Zmc2V0KTsKKwl9CisJ bG93X2FkamFjZW50ID0gbG93X2hvbGUgJiYgbG93X2hvbGUtPm9mZnNldCArIGxvd19ob2xlLT5z aXplID09IG9mZnNldDsKKworCWlmIChsb3dfYWRqYWNlbnQgJiYgaGlnaF9hZGphY2VudCkgewor CQkvKiBNZXJnZSB0aGUgdHdvIGhvbGVzICovCisJCWxvd19ob2xlLT5zaXplICs9IHNpemUgKyBo aWdoX2hvbGUtPnNpemU7CisJCWlndF9saXN0X2RlbCgmaGlnaF9ob2xlLT5saW5rKTsKKwkJZnJl ZShoaWdoX2hvbGUpOworCX0gZWxzZSBpZiAobG93X2FkamFjZW50KSB7CisJCS8qIE1lcmdlIGlu dG8gdGhlIGxvdyBob2xlICovCisJCWxvd19ob2xlLT5zaXplICs9IHNpemU7CisJfSBlbHNlIGlm IChoaWdoX2FkamFjZW50KSB7CisJCS8qIE1lcmdlIGludG8gdGhlIGhpZ2ggaG9sZSAqLworCQlo aWdoX2hvbGUtPm9mZnNldCA9IG9mZnNldDsKKwkJaGlnaF9ob2xlLT5zaXplICs9IHNpemU7CisJ fSBlbHNlIHsKKwkJLyogTmVpdGhlciBob2xlIGlzIGFkamFjZW50OyBtYWtlIGEgbmV3IG9uZSAq LworCQlob2xlID0gY2FsbG9jKDEsIHNpemVvZigqaG9sZSkpOworCQlpZ3RfYXNzZXJ0KGhvbGUp OworCisJCWhvbGUtPm9mZnNldCA9IG9mZnNldDsKKwkJaG9sZS0+c2l6ZSA9IHNpemU7CisJCS8q IEFkZCBpdCBhZnRlciB0aGUgaGlnaCBob2xlIHNvIHdlIG1haW50YWluIGhpZ2gtdG8tbG93CisJ CSAqICBvcmRlcmluZworCQkgKi8KKwkJaWYgKGhpZ2hfaG9sZSkKKwkJCWlndF9saXN0X2FkZCgm aG9sZS0+bGluaywgJmhpZ2hfaG9sZS0+bGluayk7CisJCWVsc2UKKwkJCWlndF9saXN0X2FkZCgm aG9sZS0+bGluaywgJmhlYXAtPmhvbGVzKTsKKwl9CisKKwlzaW1wbGVfdm1hX2hlYXBfdmFsaWRh dGUoaGVhcCk7Cit9CisKK3N0YXRpYyB2b2lkIHNpbXBsZV92bWFfaGVhcF9pbml0KHN0cnVjdCBz aW1wbGVfdm1hX2hlYXAgKmhlYXAsCisJCSAgICAgdWludDY0X3Qgc3RhcnQsIHVpbnQ2NF90IHNp emUpCit7CisJSUdUX0lOSVRfTElTVF9IRUFEKCZoZWFwLT5ob2xlcyk7CisJc2ltcGxlX3ZtYV9o ZWFwX2ZyZWUoaGVhcCwgc3RhcnQsIHNpemUpOworCisJLyogRGVmYXVsdCB0byB1c2luZyBoaWdo IGFkZHJlc3NlcyAqLworCWhlYXAtPmFsbG9jX2hpZ2ggPSB0cnVlOworfQorCitzdGF0aWMgdm9p ZCBzaW1wbGVfdm1hX2hlYXBfZmluaXNoKHN0cnVjdCBzaW1wbGVfdm1hX2hlYXAgKmhlYXApCit7 CisJc3RydWN0IHNpbXBsZV92bWFfaG9sZSAqaG9sZSwgKnRtcDsKKworCXNpbXBsZV92bWFfZm9y ZWFjaF9ob2xlX3NhZmUoaG9sZSwgaGVhcCwgdG1wKQorCQlmcmVlKGhvbGUpOworfQorCitzdGF0 aWMgdm9pZCBzaW1wbGVfdm1hX2hvbGVfYWxsb2Moc3RydWN0IHNpbXBsZV92bWFfaG9sZSAqaG9s ZSwKKwkJCQl1aW50NjRfdCBvZmZzZXQsIHVpbnQ2NF90IHNpemUpCit7CisJc3RydWN0IHNpbXBs ZV92bWFfaG9sZSAqaGlnaF9ob2xlOworCXVpbnQ2NF90IHdhc3RlOworCisJaWd0X2Fzc2VydCho b2xlLT5vZmZzZXQgPD0gb2Zmc2V0KTsKKwlpZ3RfYXNzZXJ0KGhvbGUtPnNpemUgPj0gb2Zmc2V0 IC0gaG9sZS0+b2Zmc2V0ICsgc2l6ZSk7CisKKwlpZiAob2Zmc2V0ID09IGhvbGUtPm9mZnNldCAm JiBzaXplID09IGhvbGUtPnNpemUpIHsKKwkJLyogSnVzdCBnZXQgcmlkIG9mIHRoZSBob2xlLiAq LworCQlpZ3RfbGlzdF9kZWwoJmhvbGUtPmxpbmspOworCQlmcmVlKGhvbGUpOworCQlyZXR1cm47 CisJfQorCisJaWd0X2Fzc2VydChvZmZzZXQgLSBob2xlLT5vZmZzZXQgPD0gaG9sZS0+c2l6ZSAt IHNpemUpOworCXdhc3RlID0gKGhvbGUtPnNpemUgLSBzaXplKSAtIChvZmZzZXQgLSBob2xlLT5v ZmZzZXQpOworCWlmICh3YXN0ZSA9PSAwKSB7CisJCS8qIFdlIGFsbG9jYXRlZCBhdCB0aGUgdG9w LT4gIFNocmluayB0aGUgaG9sZSBkb3duLiAqLworCQlob2xlLT5zaXplIC09IHNpemU7CisJCXJl dHVybjsKKwl9CisKKwlpZiAob2Zmc2V0ID09IGhvbGUtPm9mZnNldCkgeworCQkvKiBXZSBhbGxv Y2F0ZWQgYXQgdGhlIGJvdHRvbS4gU2hyaW5rIHRoZSBob2xlIHVwLT4gKi8KKwkJaG9sZS0+b2Zm c2V0ICs9IHNpemU7CisJCWhvbGUtPnNpemUgLT0gc2l6ZTsKKwkJcmV0dXJuOworCX0KKworICAg LyogV2UgYWxsb2NhdGVkIGluIHRoZSBtaWRkbGUuICBXZSBuZWVkIHRvIHNwbGl0IHRoZSBvbGQg aG9sZSBpbnRvIHR3bworICAgICogaG9sZXMsIG9uZSBoaWdoIGFuZCBvbmUgbG93LgorICAgICov CisJaGlnaF9ob2xlID0gY2FsbG9jKDEsIHNpemVvZigqaG9sZSkpOworCWlndF9hc3NlcnQoaGln aF9ob2xlKTsKKworCWhpZ2hfaG9sZS0+b2Zmc2V0ID0gb2Zmc2V0ICsgc2l6ZTsKKwloaWdoX2hv bGUtPnNpemUgPSB3YXN0ZTsKKworICAgLyogQWRqdXN0IHRoZSBob2xlIHRvIGJlIHRoZSBhbW91 bnQgb2Ygc3BhY2UgbGVmdCBhdCBoZSBib3R0b20gb2YgdGhlCisgICAgKiBvcmlnaW5hbCBob2xl LgorICAgICovCisJaG9sZS0+c2l6ZSA9IG9mZnNldCAtIGhvbGUtPm9mZnNldDsKKworICAgLyog UGxhY2UgdGhlIG5ldyBob2xlIGJlZm9yZSB0aGUgb2xkIGhvbGUgc28gdGhhdCB0aGUgbGlzdCBp cyBpbiBvcmRlcgorICAgICogZnJvbSBoaWdoIHRvIGxvdy4KKyAgICAqLworCWlndF9saXN0X2Fk ZF90YWlsKCZoaWdoX2hvbGUtPmxpbmssICZob2xlLT5saW5rKTsKK30KKworc3RhdGljIGJvb2wg c2ltcGxlX3ZtYV9oZWFwX2FsbG9jKHN0cnVjdCBzaW1wbGVfdm1hX2hlYXAgKmhlYXAsCisJCQkJ ICB1aW50NjRfdCAqb2Zmc2V0LCB1aW50NjRfdCBzaXplLAorCQkJCSAgdWludDY0X3QgYWxpZ25t ZW50KQoreworCXN0cnVjdCBzaW1wbGVfdm1hX2hvbGUgKmhvbGUsICp0bXA7CisJdWludDY0X3Qg bWlzYWxpZ247CisKKwkvKiBUaGUgY2FsbGVyIGlzIGV4cGVjdGVkIHRvIHJlamVjdCB6ZXJvLXNp emUgYWxsb2NhdGlvbnMgKi8KKwlpZ3RfYXNzZXJ0KHNpemUgPiAwKTsKKwlpZ3RfYXNzZXJ0KGFs aWdubWVudCA+IDApOworCisJc2ltcGxlX3ZtYV9oZWFwX3ZhbGlkYXRlKGhlYXApOworCisJaWYg KGhlYXAtPmFsbG9jX2hpZ2gpIHsKKwkJc2ltcGxlX3ZtYV9mb3JlYWNoX2hvbGVfc2FmZShob2xl LCBoZWFwLCB0bXApIHsKKwkJCWlmIChzaXplID4gaG9sZS0+c2l6ZSkKKwkJCQljb250aW51ZTsK KworCS8qIENvbXB1dGUgdGhlIG9mZnNldCBhcyB0aGUgaGlnaGVzdCBhZGRyZXNzIHdoZXJlIGEg Y2h1bmsgb2YgdGhlCisJICogZ2l2ZW4gc2l6ZSBjYW4gYmUgd2l0aG91dCBnb2luZyBvdmVyIHRo ZSB0b3Agb2YgdGhlIGhvbGUuCisJICoKKwkgKiBUaGlzIGNhbGN1bGF0aW9uIGlzIGtub3duIHRv IG5vdCBvdmVyZmxvdyBiZWNhdXNlIHdlIGtub3cgdGhhdAorCSAqIGhvbGUtPnNpemUgKyBob2xl LT5vZmZzZXQgY2FuIG9ubHkgb3ZlcmZsb3cgdG8gMCBhbmQgc2l6ZSA+IDAuCisJICovCisJCQkq b2Zmc2V0ID0gKGhvbGUtPnNpemUgLSBzaXplKSArIGhvbGUtPm9mZnNldDsKKworCSAgLyogQWxp Z24gdGhlIG9mZnNldC4gIFdlIGFsaWduIGRvd24gYW5kIG5vdCB1cCBiZWNhdXNlIHdlIGFyZQor CSAgICoKKwkgICAqIGFsbG9jYXRpbmcgZnJvbSB0aGUgdG9wIG9mIHRoZSBob2xlIGFuZCBub3Qg dGhlIGJvdHRvbS4KKwkgICAqLworCQkJKm9mZnNldCA9ICgqb2Zmc2V0IC8gYWxpZ25tZW50KSAq IGFsaWdubWVudDsKKworCQkJaWYgKCpvZmZzZXQgPCBob2xlLT5vZmZzZXQpCisJCQkJY29udGlu dWU7CisKKwkJCXNpbXBsZV92bWFfaG9sZV9hbGxvYyhob2xlLCAqb2Zmc2V0LCBzaXplKTsKKwkJ CXNpbXBsZV92bWFfaGVhcF92YWxpZGF0ZShoZWFwKTsKKwkJCXJldHVybiB0cnVlOworCQl9CisJ fSBlbHNlIHsKKwkJc2ltcGxlX3ZtYV9mb3JlYWNoX2hvbGVfc2FmZV9yZXYoaG9sZSwgaGVhcCwg dG1wKSB7CisJCQlpZiAoc2l6ZSA+IGhvbGUtPnNpemUpCisJCQkJY29udGludWU7CisKKwkJCSpv ZmZzZXQgPSBob2xlLT5vZmZzZXQ7CisKKwkJCS8qIEFsaWduIHRoZSBvZmZzZXQgKi8KKwkJCW1p c2FsaWduID0gKm9mZnNldCAlIGFsaWdubWVudDsKKwkJCWlmIChtaXNhbGlnbikgeworCQkJCXVp bnQ2NF90IHBhZCA9IGFsaWdubWVudCAtIG1pc2FsaWduOworCisJCQkJaWYgKHBhZCA+IGhvbGUt PnNpemUgLSBzaXplKQorCQkJCQljb250aW51ZTsKKworCQkJCSpvZmZzZXQgKz0gcGFkOworCQkJ fQorCisJCQlzaW1wbGVfdm1hX2hvbGVfYWxsb2MoaG9sZSwgKm9mZnNldCwgc2l6ZSk7CisJCQlz aW1wbGVfdm1hX2hlYXBfdmFsaWRhdGUoaGVhcCk7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCX0K KworCS8qIEZhaWxlZCB0byBhbGxvY2F0ZSAqLworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGlj IHZvaWQgaW50ZWxfYWxsb2NhdG9yX3NpbXBsZV9nZXRfYWRkcmVzc19yYW5nZShzdHJ1Y3QgaW50 ZWxfYWxsb2NhdG9yICppYWwsCisJCQkJCQkgICAgIHVpbnQ2NF90ICpzdGFydHAsCisJCQkJCQkg ICAgIHVpbnQ2NF90ICplbmRwKQoreworCXN0cnVjdCBpbnRlbF9hbGxvY2F0b3Jfc2ltcGxlICpp YWxzID0gaWFsLT5wcml2OworCisJaWYgKHN0YXJ0cCkKKwkJKnN0YXJ0cCA9IGlhbHMtPnN0YXJ0 OworCisJaWYgKGVuZHApCisJCSplbmRwID0gaWFscy0+ZW5kOworfQorCitzdGF0aWMgYm9vbCBz aW1wbGVfdm1hX2hlYXBfYWxsb2NfYWRkcihzdHJ1Y3QgaW50ZWxfYWxsb2NhdG9yX3NpbXBsZSAq aWFscywKKwkJCQkgICAgICAgdWludDY0X3Qgb2Zmc2V0LCB1aW50NjRfdCBzaXplKQoreworCXN0 cnVjdCBzaW1wbGVfdm1hX2hlYXAgKmhlYXAgPSAmaWFscy0+aGVhcDsKKwlzdHJ1Y3Qgc2ltcGxl X3ZtYV9ob2xlICpob2xlLCAqdG1wOworCS8qIEFsbG9jYXRpbmcgc29tZXRoaW5nIHdpdGggYSBz aXplIG9mIDAgaXMgbm90IHZhbGlkLiAqLworCWlndF9hc3NlcnQoc2l6ZSA+IDApOworCisJLyog SXQncyBwb3NzaWJsZSBmb3Igb2Zmc2V0ICsgc2l6ZSB0byB3cmFwIGFyb3VuZCBpZiB3ZSB0b3Vj aCB0aGUgdG9wIG9mCisJICogdGhlIDY0LWJpdCBhZGRyZXNzIHNwYWNlLCBidXQgd2UgY2Fubm90 IGdvIGFueSBoaWdoZXIgdGhhbiAyXjY0LgorCSAqLworCWlndF9hc3NlcnQob2Zmc2V0ICsgc2l6 ZSA9PSAwIHx8IG9mZnNldCArIHNpemUgPiBvZmZzZXQpOworCisJLyogRmluZCB0aGUgaG9sZSBp ZiBvbmUgZXhpc3RzLiAqLworCXNpbXBsZV92bWFfZm9yZWFjaF9ob2xlX3NhZmUoaG9sZSwgaGVh cCwgdG1wKSB7CisJCWlmIChob2xlLT5vZmZzZXQgPiBvZmZzZXQpCisJCQljb250aW51ZTsKKwor CS8qIEhvbGVzIGFyZSBvcmRlcmVkIGhpZ2gtdG8tbG93IHNvIHRoZSBmaXJzdCBob2xlIHdlIGZp bmQgd2l0aAorCSAqIGhvbGUtPm9mZnNldCA8PSBpcyBvdXIgaG9sZS4gIElmIGl0J3Mgbm90IGJp ZyBlbm91Z2ggdG8gY29udGFpbiB0aGUKKwkgKiByZXF1ZXN0ZWQgcmFuZ2UsIHRoZW4gdGhlIGFs bG9jYXRpb24gZmFpbHMuCisJICovCisJCWlndF9hc3NlcnQoaG9sZS0+b2Zmc2V0IDw9IG9mZnNl dCk7CisJCWlmIChob2xlLT5zaXplIDwgb2Zmc2V0IC0gaG9sZS0+b2Zmc2V0ICsgc2l6ZSkKKwkJ CXJldHVybiBmYWxzZTsKKworCQlzaW1wbGVfdm1hX2hvbGVfYWxsb2MoaG9sZSwgb2Zmc2V0LCBz aXplKTsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJLyogV2UgZGlkbid0IGZpbmQgYSBzdWl0YWJs ZSBob2xlICovCisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgdWludDY0X3QgaW50ZWxfYWxs b2NhdG9yX3NpbXBsZV9hbGxvYyhzdHJ1Y3QgaW50ZWxfYWxsb2NhdG9yICppYWwsCisJCQkJCSAg ICAgdWludDMyX3QgaGFuZGxlLCB1aW50NjRfdCBzaXplLAorCQkJCQkgICAgIHVpbnQ2NF90IGFs aWdubWVudCkKK3sKKwlzdHJ1Y3QgaW50ZWxfYWxsb2NhdG9yX3JlY29yZCAqcmVjOworCXN0cnVj dCBpbnRlbF9hbGxvY2F0b3Jfc2ltcGxlICppYWxzOworCXVpbnQ2NF90IG9mZnNldDsKKworCWln dF9hc3NlcnQoaWFsKTsKKwlpYWxzID0gKHN0cnVjdCBpbnRlbF9hbGxvY2F0b3Jfc2ltcGxlICop IGlhbC0+cHJpdjsKKwlpZ3RfYXNzZXJ0KGlhbHMpOworCWlndF9hc3NlcnQoaGFuZGxlKTsKKwlh bGlnbm1lbnQgPSBhbGlnbm1lbnQgPiAwID8gYWxpZ25tZW50IDogMTsKKwlyZWMgPSBpZ3RfbWFw X2ZpbmQoJmlhbHMtPm9iamVjdHMsICZoYW5kbGUpOworCWlmIChyZWMpIHsKKwkJb2Zmc2V0ID0g cmVjLT5vZmZzZXQ7CisJCWlndF9hc3NlcnQocmVjLT5zaXplID09IHNpemUpOworCX0gZWxzZSB7 CisJCWlndF9hc3NlcnQoc2ltcGxlX3ZtYV9oZWFwX2FsbG9jKCZpYWxzLT5oZWFwLCAmb2Zmc2V0 LAorCQkJCQkJIHNpemUsIGFsaWdubWVudCkpOworCQlyZWMgPSBtYWxsb2Moc2l6ZW9mKCpyZWMp KTsKKwkJcmVjLT5oYW5kbGUgPSBoYW5kbGU7CisJCXJlYy0+b2Zmc2V0ID0gb2Zmc2V0OworCQly ZWMtPnNpemUgPSBzaXplOworCisJCWlndF9tYXBfYWRkKCZpYWxzLT5vYmplY3RzLCAmcmVjLT5o YW5kbGUsIHJlYyk7CisJCWlhbHMtPmFsbG9jYXRlZF9vYmplY3RzKys7CisJCWlhbHMtPmFsbG9j YXRlZF9zaXplICs9IHNpemU7CisJfQorCisJcmV0dXJuIG9mZnNldDsKK30KKworc3RhdGljIGJv b2wgaW50ZWxfYWxsb2NhdG9yX3NpbXBsZV9mcmVlKHN0cnVjdCBpbnRlbF9hbGxvY2F0b3IgKmlh bCwgdWludDMyX3QgaGFuZGxlKQoreworCXN0cnVjdCBpbnRlbF9hbGxvY2F0b3JfcmVjb3JkICpy ZWMgPSBOVUxMOworCXN0cnVjdCBpbnRlbF9hbGxvY2F0b3Jfc2ltcGxlICppYWxzOworCisJaWd0 X2Fzc2VydChpYWwpOworCWlhbHMgPSAoc3RydWN0IGludGVsX2FsbG9jYXRvcl9zaW1wbGUgKikg aWFsLT5wcml2OworCWlndF9hc3NlcnQoaWFscyk7CisKKwlyZWMgPSBpZ3RfbWFwX2RlbCgmaWFs cy0+b2JqZWN0cywgJmhhbmRsZSk7CisJaWYgKHJlYykgeworCQlzaW1wbGVfdm1hX2hlYXBfZnJl ZSgmaWFscy0+aGVhcCwgcmVjLT5vZmZzZXQsIHJlYy0+c2l6ZSk7CisJCWlhbHMtPmFsbG9jYXRl ZF9vYmplY3RzLS07CisJCWlhbHMtPmFsbG9jYXRlZF9zaXplIC09IHJlYy0+c2l6ZTsKKwkJZnJl ZShyZWMpOworCisJCXJldHVybiB0cnVlOworCX0KKworCXJldHVybiBmYWxzZTsKK30KKworc3Rh dGljIGlubGluZSBib29sIF9fc2FtZShjb25zdCBzdHJ1Y3QgaW50ZWxfYWxsb2NhdG9yX3JlY29y ZCAqcmVjLAorCQkJICB1aW50MzJfdCBoYW5kbGUsIHVpbnQ2NF90IHNpemUsIHVpbnQ2NF90IG9m ZnNldCkKK3sKKwlyZXR1cm4gcmVjLT5oYW5kbGUgPT0gaGFuZGxlICYmIHJlYy0+c2l6ZSA9PSBz aXplICYmCisJCQlERUNBTk9OSUNBTChyZWMtPm9mZnNldCkgPT0gREVDQU5PTklDQUwob2Zmc2V0 KTsKK30KKworc3RhdGljIGJvb2wgaW50ZWxfYWxsb2NhdG9yX3NpbXBsZV9pc19hbGxvY2F0ZWQo c3RydWN0IGludGVsX2FsbG9jYXRvciAqaWFsLAorCQkJCQkJdWludDMyX3QgaGFuZGxlLCB1aW50 NjRfdCBzaXplLAorCQkJCQkJdWludDY0X3Qgb2Zmc2V0KQoreworCXN0cnVjdCBpbnRlbF9hbGxv Y2F0b3JfcmVjb3JkICpyZWM7CisJc3RydWN0IGludGVsX2FsbG9jYXRvcl9zaW1wbGUgKmlhbHM7 CisJYm9vbCBzYW1lID0gZmFsc2U7CisKKwlpZ3RfYXNzZXJ0KGlhbCk7CisJaWFscyA9IChzdHJ1 Y3QgaW50ZWxfYWxsb2NhdG9yX3NpbXBsZSAqKSBpYWwtPnByaXY7CisJaWd0X2Fzc2VydChpYWxz KTsKKwlpZ3RfYXNzZXJ0KGhhbmRsZSk7CisKKwlyZWMgPSBpZ3RfbWFwX2ZpbmQoJmlhbHMtPm9i amVjdHMsICZoYW5kbGUpOworCWlmIChyZWMgJiYgX19zYW1lKHJlYywgaGFuZGxlLCBzaXplLCBv ZmZzZXQpKQorCQlzYW1lID0gdHJ1ZTsKKworCXJldHVybiBzYW1lOworfQorCitzdGF0aWMgYm9v bCBpbnRlbF9hbGxvY2F0b3Jfc2ltcGxlX3Jlc2VydmUoc3RydWN0IGludGVsX2FsbG9jYXRvciAq aWFsLAorCQkJCQkgICB1aW50MzJfdCBoYW5kbGUsCisJCQkJCSAgIHVpbnQ2NF90IHN0YXJ0LCB1 aW50NjRfdCBlbmQpCit7CisJdWludDY0X3Qgc2l6ZSA9IGVuZCAtIHN0YXJ0OworCXN0cnVjdCBp bnRlbF9hbGxvY2F0b3JfcmVjb3JkICpyZWMgPSBOVUxMOworCXN0cnVjdCBpbnRlbF9hbGxvY2F0 b3Jfc2ltcGxlICppYWxzOworCisJaWd0X2Fzc2VydChpYWwpOworCWlhbHMgPSAoc3RydWN0IGlu dGVsX2FsbG9jYXRvcl9zaW1wbGUgKikgaWFsLT5wcml2OworCWlndF9hc3NlcnQoaWFscyk7CisK KwkvKiBjbGVhciBbNjM6NDhdIGJpdHMgdG8gZ2V0IHJpZCBvZiBjYW5vbmljYWwgZm9ybSAqLwor CXN0YXJ0ID0gREVDQU5PTklDQUwoc3RhcnQpOworCWVuZCA9IERFQ0FOT05JQ0FMKGVuZCk7CisJ aWd0X2Fzc2VydChlbmQgPiBzdGFydCB8fCBlbmQgPT0gMCk7CisKKwlpZiAoc2ltcGxlX3ZtYV9o ZWFwX2FsbG9jX2FkZHIoaWFscywgc3RhcnQsIHNpemUpKSB7CisJCXJlYyA9IG1hbGxvYyhzaXpl b2YoKnJlYykpOworCQlyZWMtPmhhbmRsZSA9IGhhbmRsZTsKKwkJcmVjLT5vZmZzZXQgPSBzdGFy dDsKKwkJcmVjLT5zaXplID0gc2l6ZTsKKworCQlpZ3RfbWFwX2FkZCgmaWFscy0+cmVzZXJ2ZWQs ICZyZWMtPm9mZnNldCwgcmVjKTsKKworCQlpYWxzLT5yZXNlcnZlZF9hcmVhcysrOworCQlpYWxz LT5yZXNlcnZlZF9zaXplICs9IHJlYy0+c2l6ZTsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0 dXJuIGZhbHNlOworfQorCitzdGF0aWMgYm9vbCBpbnRlbF9hbGxvY2F0b3Jfc2ltcGxlX3VucmVz ZXJ2ZShzdHJ1Y3QgaW50ZWxfYWxsb2NhdG9yICppYWwsCisJCQkJCSAgICAgdWludDMyX3QgaGFu ZGxlLAorCQkJCQkgICAgIHVpbnQ2NF90IHN0YXJ0LCB1aW50NjRfdCBlbmQpCit7CisJdWludDY0 X3Qgc2l6ZSA9IGVuZCAtIHN0YXJ0OworCXN0cnVjdCBpbnRlbF9hbGxvY2F0b3JfcmVjb3JkICpy ZWMgPSBOVUxMOworCXN0cnVjdCBpbnRlbF9hbGxvY2F0b3Jfc2ltcGxlICppYWxzOworCisJaWd0 X2Fzc2VydChpYWwpOworCWlhbHMgPSAoc3RydWN0IGludGVsX2FsbG9jYXRvcl9zaW1wbGUgKikg aWFsLT5wcml2OworCWlndF9hc3NlcnQoaWFscyk7CisKKwkvKiBjbGVhciBbNjM6NDhdIGJpdHMg dG8gZ2V0IHJpZCBvZiBjYW5vbmljYWwgZm9ybSAqLworCXN0YXJ0ID0gREVDQU5PTklDQUwoc3Rh cnQpOworCWVuZCA9IERFQ0FOT05JQ0FMKGVuZCk7CisKKwlpZ3RfYXNzZXJ0KGVuZCA+IHN0YXJ0 IHx8IGVuZCA9PSAwKTsKKworCXJlYyA9IGlndF9tYXBfZmluZCgmaWFscy0+cmVzZXJ2ZWQsICZz dGFydCk7CisKKwlpZiAoIXJlYykgeworCQlpZ3Rfd2FybigiT25seSByZXNlcnZlZCBibG9ja3Mg Y2FuIGJlIHVucmVzZXJ2ZWRcbiIpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJaWYgKHJlYy0+ c2l6ZSAhPSBzaXplKSB7CisJCWlndF93YXJuKCJPbmx5IHRoZSB3aG9sZSBibG9jayB1bnJlc2Vy dmF0aW9uIGFsbG93ZWRcbiIpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJaWYgKHJlYy0+aGFu ZGxlICE9IGhhbmRsZSkgeworCQlpZ3Rfd2FybigiSGFuZGxlICV1IGRvZXNuJ3QgbWF0Y2ggcmVz ZXJ2YXRpb24gaGFuZGxlOiAldVxuIiwKKwkJCSByZWMtPmhhbmRsZSwgaGFuZGxlKTsKKwkJcmV0 dXJuIGZhbHNlOworCX0KKworCWlndF9tYXBfZGVsKCZpYWxzLT5yZXNlcnZlZCwgJnN0YXJ0KTsK KworCWlhbHMtPnJlc2VydmVkX2FyZWFzLS07CisJaWFscy0+cmVzZXJ2ZWRfc2l6ZSAtPSByZWMt PnNpemU7CisJZnJlZShyZWMpOworCXNpbXBsZV92bWFfaGVhcF9mcmVlKCZpYWxzLT5oZWFwLCBz dGFydCwgc2l6ZSk7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgaW50ZWxfYWxs b2NhdG9yX3NpbXBsZV9pc19yZXNlcnZlZChzdHJ1Y3QgaW50ZWxfYWxsb2NhdG9yICppYWwsCisJ CQkJCSAgICAgICB1aW50NjRfdCBzdGFydCwgdWludDY0X3QgZW5kKQoreworCXVpbnQ2NF90IHNp emUgPSBlbmQgLSBzdGFydDsKKwlzdHJ1Y3QgaW50ZWxfYWxsb2NhdG9yX3JlY29yZCAqcmVjID0g TlVMTDsKKwlzdHJ1Y3QgaW50ZWxfYWxsb2NhdG9yX3NpbXBsZSAqaWFsczsKKworCWlndF9hc3Nl cnQoaWFsKTsKKwlpYWxzID0gKHN0cnVjdCBpbnRlbF9hbGxvY2F0b3Jfc2ltcGxlICopIGlhbC0+ cHJpdjsKKwlpZ3RfYXNzZXJ0KGlhbHMpOworCisJLyogY2xlYXIgWzYzOjQ4XSBiaXRzIHRvIGdl dCByaWQgb2YgY2Fub25pY2FsIGZvcm0gKi8KKwlzdGFydCA9IERFQ0FOT05JQ0FMKHN0YXJ0KTsK KwllbmQgPSBERUNBTk9OSUNBTChlbmQpOworCisJaWd0X2Fzc2VydChlbmQgPiBzdGFydCB8fCBl bmQgPT0gMCk7CisKKwlyZWMgPSBpZ3RfbWFwX2ZpbmQoJmlhbHMtPnJlc2VydmVkLCAmc3RhcnQp OworCisJaWYgKCFyZWMpCisJCXJldHVybiBmYWxzZTsKKworCWlmIChyZWMtPm9mZnNldCA9PSBz dGFydCAmJiByZWMtPnNpemUgPT0gc2l6ZSkKKwkJcmV0dXJuIHRydWU7CisKKwlyZXR1cm4gZmFs c2U7Cit9CisKK3N0YXRpYyBib29sIGVxdWFsXzhieXRlcyhjb25zdCB2b2lkICprZXkxLCBjb25z dCB2b2lkICprZXkyKQoreworCWNvbnN0IHVpbnQ2NF90ICprMSA9IGtleTEsICprMiA9IGtleTI7 CisJcmV0dXJuICprMSA9PSAqazI7Cit9CisKK3N0YXRpYyB2b2lkIGludGVsX2FsbG9jYXRvcl9z aW1wbGVfZGVzdHJveShzdHJ1Y3QgaW50ZWxfYWxsb2NhdG9yICppYWwpCit7CisJc3RydWN0IGlu dGVsX2FsbG9jYXRvcl9zaW1wbGUgKmlhbHM7CisJc3RydWN0IGlndF9tYXBfZW50cnkgKnBvczsK KwlzdHJ1Y3QgaWd0X21hcCAqbWFwOworCWludCBpOworCisJaWd0X2Fzc2VydChpYWwpOworCWlh bHMgPSAoc3RydWN0IGludGVsX2FsbG9jYXRvcl9zaW1wbGUgKikgaWFsLT5wcml2OworCXNpbXBs ZV92bWFfaGVhcF9maW5pc2goJmlhbHMtPmhlYXApOworCisJbWFwID0gJmlhbHMtPm9iamVjdHM7 CisJaWd0X21hcF9mb3JfZWFjaChtYXAsIGksIHBvcykKKwkJZnJlZShwb3MtPnZhbHVlKTsKKwlp Z3RfbWFwX2ZyZWUoJmlhbHMtPm9iamVjdHMpOworCisJbWFwID0gJmlhbHMtPnJlc2VydmVkOwor CWlndF9tYXBfZm9yX2VhY2gobWFwLCBpLCBwb3MpCisJCWZyZWUocG9zLT52YWx1ZSk7CisJaWd0 X21hcF9mcmVlKCZpYWxzLT5yZXNlcnZlZCk7CisKKwlmcmVlKGlhbC0+cHJpdik7CisJZnJlZShp YWwpOworfQorCisjZGVmaW5lIFJFU0VSVkUgKDEwMjQgKiA2NCkKKworc3RhdGljIGJvb2wgaW50 ZWxfYWxsb2NhdG9yX3NpbXBsZV9pc19lbXB0eShzdHJ1Y3QgaW50ZWxfYWxsb2NhdG9yICppYWwp Cit7CisJc3RydWN0IGludGVsX2FsbG9jYXRvcl9zaW1wbGUgKmlhbHMgPSBpYWwtPnByaXY7CisK KwlpZ3RfZGVidWcoIjxmZDogJWQsIGN0eDogJXU+IG9iamVjdHM6ICUiIFBSSWQ2NCAiLCByZXNl cnZlZF9hcmVhczogJSIgUFJJZDY0ICJcbiIsCisJCSBpYWwtPmZkLCBpYWwtPmN0eCwgaWFscy0+ YWxsb2NhdGVkX29iamVjdHMsIGlhbHMtPnJlc2VydmVkX2FyZWFzKTsKKworCXJldHVybiAhaWFs cy0+YWxsb2NhdGVkX29iamVjdHMgJiYgIWlhbHMtPnJlc2VydmVkX2FyZWFzOworfQorCitzdGF0 aWMgdm9pZCBpbnRlbF9hbGxvY2F0b3Jfc2ltcGxlX3ByaW50KHN0cnVjdCBpbnRlbF9hbGxvY2F0 b3IgKmlhbCwgYm9vbCBmdWxsKQoreworCXN0cnVjdCBpbnRlbF9hbGxvY2F0b3Jfc2ltcGxlICpp YWxzOworCXN0cnVjdCBzaW1wbGVfdm1hX2hvbGUgKmhvbGU7CisJc3RydWN0IHNpbXBsZV92bWFf aGVhcCAqaGVhcDsKKwlzdHJ1Y3QgaWd0X21hcF9lbnRyeSAqcG9zOworCXN0cnVjdCBpZ3RfbWFw ICptYXA7CisJdWludDY0X3QgdG90YWxfZnJlZSA9IDAsIGFsbG9jYXRlZF9zaXplID0gMCwgYWxs b2NhdGVkX29iamVjdHMgPSAwOworCXVpbnQ2NF90IHJlc2VydmVkX3NpemUgPSAwLCByZXNlcnZl ZF9hcmVhcyA9IDA7CisJaW50IGk7CisKKwlpZ3RfYXNzZXJ0KGlhbCk7CisJaWFscyA9IChzdHJ1 Y3QgaW50ZWxfYWxsb2NhdG9yX3NpbXBsZSAqKSBpYWwtPnByaXY7CisJaWd0X2Fzc2VydChpYWxz KTsKKwloZWFwID0gJmlhbHMtPmhlYXA7CisKKwlpZ3RfaW5mbygiaW50ZWxfYWxsb2NhdG9yX3Np bXBsZSA8ZmQ6JWQgY3R4OiVkPiBvbiAiCisJCSAiWzB4JSJQUkl4NjQiIDogMHglIlBSSXg2NCJd OlxuIiwgaWFsLT5mZCwgaWFsLT5jdHgsCisJCSBpYWxzLT5iaWFzLCBpYWxzLT5ndHRfc2l6ZSAt IFJFU0VSVkUpOworCisJaWYgKGZ1bGwpIHsKKwkJaWd0X2luZm8oImhvbGVzOlxuIik7CisJCXNp bXBsZV92bWFfZm9yZWFjaF9ob2xlKGhvbGUsIGhlYXApIHsKKwkJCWlndF9pbmZvKCJvZmZzZXQg PSAlIlBSSXU2NCIgKDB4JSJQUkl4NjQiLCAiCisJCQkJICJzaXplID0gJSJQUkl1NjQiICgweCUi UFJJeDY0IilcbiIsCisJCQkJIGhvbGUtPm9mZnNldCwgaG9sZS0+b2Zmc2V0LCBob2xlLT5zaXpl LAorCQkJCSBob2xlLT5zaXplKTsKKwkJCXRvdGFsX2ZyZWUgKz0gaG9sZS0+c2l6ZTsKKwkJfQor CQlpZ3RfYXNzZXJ0KHRvdGFsX2ZyZWUgPD0gaWFscy0+dG90YWxfc2l6ZSk7CisJCWlndF9pbmZv KCJ0b3RhbF9mcmVlOiAlIiBQUkl4NjQKKwkJCSAiLCB0b3RhbF9zaXplOiAlIiBQUkl4NjQKKwkJ CSAiLCBhbGxvY2F0ZWRfc2l6ZTogJSIgUFJJeDY0CisJCQkgIiwgcmVzZXJ2ZWRfc2l6ZTogJSIg UFJJeDY0ICJcbiIsCisJCQkgdG90YWxfZnJlZSwgaWFscy0+dG90YWxfc2l6ZSwgaWFscy0+YWxs b2NhdGVkX3NpemUsCisJCQkgaWFscy0+cmVzZXJ2ZWRfc2l6ZSk7CisJCWlndF9hc3NlcnQodG90 YWxfZnJlZSA9PQorCQkJICAgaWFscy0+dG90YWxfc2l6ZSAtIGlhbHMtPmFsbG9jYXRlZF9zaXpl IC0gaWFscy0+cmVzZXJ2ZWRfc2l6ZSk7CisKKwkJaWd0X2luZm8oIm9iamVjdHM6XG4iKTsKKwkJ bWFwID0gJmlhbHMtPm9iamVjdHM7CisJCWlndF9tYXBfZm9yX2VhY2gobWFwLCBpLCBwb3MpIHsK KwkJCXN0cnVjdCBpbnRlbF9hbGxvY2F0b3JfcmVjb3JkICpyZWMgPSBwb3MtPnZhbHVlOworCisJ CQlpZ3RfaW5mbygiaGFuZGxlID0gJWQsIG9mZnNldCA9ICUiUFJJdTY0IiAiCisJCQkJIigweCUi UFJJeDY0Iiwgc2l6ZSA9ICUiUFJJdTY0IiAoMHglIlBSSXg2NCIpXG4iLAorCQkJCSByZWMtPmhh bmRsZSwgcmVjLT5vZmZzZXQsIHJlYy0+b2Zmc2V0LAorCQkJCSByZWMtPnNpemUsIHJlYy0+c2l6 ZSk7CisJCQlhbGxvY2F0ZWRfb2JqZWN0cysrOworCQkJYWxsb2NhdGVkX3NpemUgKz0gcmVjLT5z aXplOworCQl9CisJCWlndF9hc3NlcnQoaWFscy0+YWxsb2NhdGVkX3NpemUgPT0gYWxsb2NhdGVk X3NpemUpOworCQlpZ3RfYXNzZXJ0KGlhbHMtPmFsbG9jYXRlZF9vYmplY3RzID09IGFsbG9jYXRl ZF9vYmplY3RzKTsKKworCQlpZ3RfaW5mbygicmVzZXJ2ZWQgYXJlYXM6XG4iKTsKKwkJbWFwID0g JmlhbHMtPnJlc2VydmVkOworCQlpZ3RfbWFwX2Zvcl9lYWNoKG1hcCwgaSwgcG9zKSB7CisJCQlz dHJ1Y3QgaW50ZWxfYWxsb2NhdG9yX3JlY29yZCAqcmVjID0gcG9zLT52YWx1ZTsKKworCQkJaWd0 X2luZm8oIm9mZnNldCA9ICUiUFJJdTY0IiAoMHglIlBSSXg2NCIsICIKKwkJCQkgInNpemUgPSAl IlBSSXU2NCIgKDB4JSJQUkl4NjQiKVxuIiwKKwkJCQkgcmVjLT5vZmZzZXQsIHJlYy0+b2Zmc2V0 LAorCQkJCSByZWMtPnNpemUsIHJlYy0+c2l6ZSk7CisJCQlyZXNlcnZlZF9hcmVhcysrOworCQkJ cmVzZXJ2ZWRfc2l6ZSArPSByZWMtPnNpemU7CisJCX0KKwkJaWd0X2Fzc2VydChpYWxzLT5yZXNl cnZlZF9hcmVhcyA9PSByZXNlcnZlZF9hcmVhcyk7CisJCWlndF9hc3NlcnQoaWFscy0+cmVzZXJ2 ZWRfc2l6ZSA9PSByZXNlcnZlZF9zaXplKTsKKwl9IGVsc2UKKwkJc2ltcGxlX3ZtYV9mb3JlYWNo X2hvbGUoaG9sZSwgaGVhcCkKKwkJCXRvdGFsX2ZyZWUgKz0gaG9sZS0+c2l6ZTsKKworCisJaWd0 X2luZm8oImZyZWUgc3BhY2U6ICUiUFJJdTY0IkIgKDB4JSJQUkl4NjQiKSAoJS4yZiUlIGZ1bGwp XG4iCisJCSAiYWxsb2NhdGVkIG9iamVjdHM6ICUiUFJJdTY0IiwgcmVzZXJ2ZWQgYXJlYXM6ICUi UFJJdTY0IlxuIiwKKwkJIHRvdGFsX2ZyZWUsIHRvdGFsX2ZyZWUsCisJCSAoKGRvdWJsZSkgKGlh bHMtPnRvdGFsX3NpemUgLSB0b3RhbF9mcmVlKSAvCisJCSAgKGRvdWJsZSkgaWFscy0+dG90YWxf c2l6ZSkgKiAxMDAsCisJCSBpYWxzLT5hbGxvY2F0ZWRfb2JqZWN0cywgaWFscy0+cmVzZXJ2ZWRf YXJlYXMpOworfQorCitzdHJ1Y3QgaW50ZWxfYWxsb2NhdG9yICppbnRlbF9hbGxvY2F0b3Jfc2lt cGxlX2NyZWF0ZShpbnQgZmQsIHVpbnQzMl90IGN0eCkKK3sKKwlzdHJ1Y3QgaW50ZWxfYWxsb2Nh dG9yICppYWw7CisJc3RydWN0IGludGVsX2FsbG9jYXRvcl9zaW1wbGUgKmlhbHM7CisKKwlpZ3Rf ZGVidWcoIlVzaW5nIHNpbXBsZSBhbGxvY2F0b3IgPGZkOiAlZCwgY3R4OiAldT5cbiIsIGZkLCBj dHgpOworCisJaWFsID0gY2FsbG9jKDEsIHNpemVvZigqaWFsKSk7CisJaWd0X2Fzc2VydChpYWwp OworCisJaWFsLT5mZCA9IGZkOworCWlhbC0+Y3R4ID0gY3R4OworCWlhbC0+Z2V0X2FkZHJlc3Nf cmFuZ2UgPSBpbnRlbF9hbGxvY2F0b3Jfc2ltcGxlX2dldF9hZGRyZXNzX3JhbmdlOworCWlhbC0+ YWxsb2MgPSBpbnRlbF9hbGxvY2F0b3Jfc2ltcGxlX2FsbG9jOworCWlhbC0+ZnJlZSA9IGludGVs X2FsbG9jYXRvcl9zaW1wbGVfZnJlZTsKKwlpYWwtPmlzX2FsbG9jYXRlZCA9IGludGVsX2FsbG9j YXRvcl9zaW1wbGVfaXNfYWxsb2NhdGVkOworCWlhbC0+cmVzZXJ2ZSA9IGludGVsX2FsbG9jYXRv cl9zaW1wbGVfcmVzZXJ2ZTsKKwlpYWwtPnVucmVzZXJ2ZSA9IGludGVsX2FsbG9jYXRvcl9zaW1w bGVfdW5yZXNlcnZlOworCWlhbC0+aXNfcmVzZXJ2ZWQgPSBpbnRlbF9hbGxvY2F0b3Jfc2ltcGxl X2lzX3Jlc2VydmVkOworCWlhbC0+ZGVzdHJveSA9IGludGVsX2FsbG9jYXRvcl9zaW1wbGVfZGVz dHJveTsKKwlpYWwtPmlzX2VtcHR5ID0gaW50ZWxfYWxsb2NhdG9yX3NpbXBsZV9pc19lbXB0eTsK KwlpYWwtPnByaW50ID0gaW50ZWxfYWxsb2NhdG9yX3NpbXBsZV9wcmludDsKKwlpYWxzID0gaWFs LT5wcml2ID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgaW50ZWxfYWxsb2NhdG9yX3NpbXBsZSkpOwor CWlndF9hc3NlcnQoaWFscyk7CisKKwlpZ3RfbWFwX2luaXQoJmlhbHMtPm9iamVjdHMsIE5VTEws IE5VTEwsIDgpOworCS8qIFJlc2VydmVkIGFkZHJlc3NlcyBoYXNodGFibGUgaXMgaW5kZXhlZCBi eSBhbiBvZmZzZXQgKi8KKwlpZ3RfbWFwX2luaXQoJmlhbHMtPnJlc2VydmVkLCBlcXVhbF84Ynl0 ZXMsIE5VTEwsIDMpOworCisJaWFscy0+Z3R0X3NpemUgPSBnZW1fYXBlcnR1cmVfc2l6ZShmZCk7 CisJaWd0X2RlYnVnKCJHdHQgc2l6ZTogJSIgUFJJZDY0ICJcbiIsIGlhbHMtPmd0dF9zaXplKTsK KwlpZiAoIWdlbV91c2VzX2Z1bGxfcHBndHQoZmQpKQorCQlpYWxzLT5ndHRfc2l6ZSAvPSAyOwor CisJaWFscy0+YmlhcyA9IGdldF9iaWFzKGZkKTsKKwlpYWxzLT50b3RhbF9zaXplID0gaWFscy0+ Z3R0X3NpemUgLSBpYWxzLT5iaWFzIC0gUkVTRVJWRTsKKwlpYWxzLT5zdGFydCA9IGlhbHMtPmJp YXM7CisJaWFscy0+ZW5kID0gaWFscy0+Z3R0X3NpemUgLSBSRVNFUlZFOworCXNpbXBsZV92bWFf aGVhcF9pbml0KCZpYWxzLT5oZWFwLCBpYWxzLT5iaWFzLCBpYWxzLT50b3RhbF9zaXplKTsKKwor CWlhbHMtPmFsbG9jYXRlZF9zaXplID0gMDsKKwlpYWxzLT5hbGxvY2F0ZWRfb2JqZWN0cyA9IDA7 CisJaWFscy0+cmVzZXJ2ZWRfc2l6ZSA9IDA7CisJaWFscy0+cmVzZXJ2ZWRfYXJlYXMgPSAwOwor CisJcmV0dXJuIGlhbDsKK30KLS0gCjIuMjYuMAoKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KaWd0LWRldiBtYWlsaW5nIGxpc3QKaWd0LWRldkBsaXN0cy5m cmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0 aW5mby9pZ3QtZGV2Cg==