From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: [PATCH 19/22] drm/i915: Load balancing across a virtual engine Date: Mon, 18 Mar 2019 09:52:01 +0000 Message-ID: <20190318095204.9913-19-chris@chris-wilson.co.uk> References: <20190318095204.9913-1-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from fireflyinternet.com (mail.fireflyinternet.com [109.228.58.192]) by gabe.freedesktop.org (Postfix) with ESMTPS id 4D87E89718 for ; Mon, 18 Mar 2019 10:11:35 +0000 (UTC) In-Reply-To: <20190318095204.9913-1-chris@chris-wilson.co.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org SGF2aW5nIGFsbG93ZWQgdGhlIHVzZXIgdG8gZGVmaW5lIGEgc2V0IG9mIGVuZ2luZXMgdGhhdCB0 aGV5IHdpbGwgd2FudAp0byBvbmx5IHVzZSwgd2UgZ28gb25lIHN0ZXAgZnVydGhlciBhbmQgYWxs b3cgdGhlbSB0byBiaW5kIHRob3NlIGVuZ2luZXMKaW50byBhIHNpbmdsZSB2aXJ0dWFsIGluc3Rh bmNlLiBTdWJtaXR0aW5nIGEgYmF0Y2ggdG8gdGhlIHZpcnR1YWwgZW5naW5lCndpbGwgdGhlbiBm b3J3YXJkIGl0IHRvIGFueSBvbmUgb2YgdGhlIHNldCBpbiBhIG1hbm5lciBhcyBiZXN0IHRvCmRp c3RyaWJ1dGUgbG9hZC4gIFRoZSB2aXJ0dWFsIGVuZ2luZSBoYXMgYSBzaW5nbGUgdGltZWxpbmUg YWNyb3NzIGFsbAplbmdpbmVzIChpdCBvcGVyYXRlcyBhcyBhIHNpbmdsZSBxdWV1ZSksIHNvIGl0 IGlzIG5vdCBhYmxlIHRvIGNvbmN1cnJlbnRseQpydW4gYmF0Y2hlcyBhY3Jvc3MgbXVsdGlwbGUg ZW5naW5lcyBieSBpdHNlbGY7IHRoYXQgaXMgbGVmdCB1cCB0byB0aGUgdXNlcgp0byBzdWJtaXQg bXVsdGlwbGUgY29uY3VycmVudCBiYXRjaGVzIHRvIG11bHRpcGxlIHF1ZXVlcy4gTXVsdGlwbGUg dXNlcnMKd2lsbCBiZSBsb2FkIGJhbGFuY2VkIGFjcm9zcyB0aGUgc3lzdGVtLgoKVGhlIG1lY2hh bmlzbSB1c2VkIGZvciBsb2FkIGJhbGFuY2luZyBpbiB0aGlzIHBhdGNoIGlzIGEgbGF0ZSBncmVl ZHkKYmFsYW5jZXIuIFdoZW4gYSByZXF1ZXN0IGlzIHJlYWR5IGZvciBleGVjdXRpb24sIGl0IGlz IGFkZGVkIHRvIGVhY2gKZW5naW5lJ3MgcXVldWUsIGFuZCB3aGVuIGFuIGVuZ2luZSBpcyByZWFk eSBmb3IgaXRzIG5leHQgcmVxdWVzdCBpdApjbGFpbXMgaXQgZnJvbSB0aGUgdmlydHVhbCBlbmdp bmUuIFRoZSBmaXJzdCBlbmdpbmUgdG8gZG8gc28sIHdpbnMsIGkuZS4KdGhlIHJlcXVlc3QgaXMg ZXhlY3V0ZWQgYXQgdGhlIGVhcmxpZXN0IG9wcG9ydHVuaXR5IChpZGxlIG1vbWVudCkgaW4gdGhl CnN5c3RlbS4KCkFzIG5vdCBhbGwgSFcgaXMgY3JlYXRlZCBlcXVhbCwgdGhlIHVzZXIgaXMgc3Rp bGwgYWJsZSB0byBza2lwIHRoZQp2aXJ0dWFsIGVuZ2luZSBhbmQgZXhlY3V0ZSB0aGUgYmF0Y2gg b24gYSBzcGVjaWZpYyBlbmdpbmUsIGFsbCB3aXRoaW4gdGhlCnNhbWUgcXVldWUuIEl0IHdpbGwg dGhlbiBiZSBleGVjdXRlZCBpbiBvcmRlciBvbiB0aGUgY29ycmVjdCBlbmdpbmUsCndpdGggZXhl Y3V0aW9uIG9uIG90aGVyIHZpcnR1YWwgZW5naW5lcyBiZWluZyBtb3ZlZCBhd2F5IGR1ZSB0byB0 aGUgbG9hZApkZXRlY3Rpb24uCgpBIGNvdXBsZSBvZiBhcmVhcyBmb3IgcG90ZW50aWFsIGltcHJv dmVtZW50IGxlZnQhCgotIFRoZSB2aXJ0dWFsIGVuZ2luZSBhbHdheXMgdGFrZSBwcmlvcml0eSBv dmVyIGVxdWFsLXByaW9yaXR5IHRhc2tzLgpNb3N0bHkgYnJva2VuIHVwIGJ5IGFwcGx5aW5nIEZR X0NPREVMIHJ1bGVzIGZvciBwcmlvcml0aXNpbmcgbmV3IGNsaWVudHMsCmFuZCBob3BlZnVsbHkg dGhlIHZpcnR1YWwgYW5kIHJlYWwgZW5naW5lcyBhcmUgbm90IHRoZW4gY29uZ2VzdGVkIChpLmUu CmFsbCB3b3JrIGlzIHZpYSB2aXJ0dWFsIGVuZ2luZXMsIG9yIGFsbCB3b3JrIGlzIHRvIHRoZSBy ZWFsIGVuZ2luZSkuCgotIFdlIHJlcXVpcmUgdGhlIGJyZWFkY3J1bWIgaXJxIGFyb3VuZCBldmVy eSB2aXJ0dWFsIGVuZ2luZSByZXF1ZXN0LiBGb3IKbm9ybWFsIGVuZ2luZXMsIHdlIGVsaW1pbmF0 ZSB0aGUgbmVlZCBmb3IgdGhlIHNsb3cgcm91bmQgdHJpcCB2aWEKaW50ZXJydXB0IGJ5IHVzaW5n IHRoZSBzdWJtaXQgZmVuY2UgYW5kIHF1ZXVlaW5nIGluIG9yZGVyLiBGb3IgdmlydHVhbAplbmdp bmVzLCB3ZSBoYXZlIHRvIGFsbG93IGFueSBqb2IgdG8gdHJhbnNmZXIgdG8gYSBuZXcgcmluZywg YW5kIGNhbm5vdApjb2FsZXNjZSB0aGUgc3VibWlzc2lvbnMsIHNvIHJlcXVpcmUgdGhlIGNvbXBs ZXRpb24gZmVuY2UgaW5zdGVhZCwKZm9yY2luZyB0aGUgcGVyc2lzdGVudCB1c2Ugb2YgaW50ZXJy dXB0cy4KCi0gV2Ugb25seSBkcmlwIGZlZWQgc2luZ2xlIHJlcXVlc3RzIHRocm91Z2ggZWFjaCB2 aXJ0dWFsIGVuZ2luZSBhbmQgb250bwp0aGUgcGh5c2ljYWwgZW5naW5lcywgZXZlbiBpZiB0aGVy ZSB3YXMgZW5vdWdoIHdvcmsgdG8gZmlsbCBhbGwgRUxTUCwKbGVhdmluZyBzbWFsbCBzdGFsbHMg d2l0aCBhbiBpZGxlIENTIGV2ZW50IGF0IHRoZSBlbmQgb2YgZXZlcnkgcmVxdWVzdC4KQ291bGQg d2UgYmUgZ3JlZWR5IGFuZCBmaWxsIGJvdGggc2xvdHM/IEJlaW5nIGxhenkgaXMgdmlydHVvdXMg Zm9yIGxvYWQKZGlzdHJpYnV0aW9uIG9uIGxlc3MtdGhhbi1mdWxsIHdvcmtsb2FkcyB0aG91Z2gu CgpPdGhlciBhcmVhcyBvZiBpbXByb3ZlbWVudCBhcmUgbW9yZSBnZW5lcmFsLCBzdWNoIGFzIHJl ZHVjaW5nIGxvY2sKY29udGVudGlvbiwgcmVkdWNpbmcgZGlzcGF0Y2ggb3ZlcmhlYWQsIGxvb2tp bmcgYXQgZGlyZWN0IHN1Ym1pc3Npb24KcmF0aGVyIHRoYW4gYm91bmNpbmcgYXJvdW5kIHRhc2ts ZXRzIGV0Yy4KCnNzZXU6IExpZnQgdGhlIHJlc3RyaWN0aW9uIHRvIGFsbG93IHNzZXUgdG8gYmUg cmVjb25maWd1cmVkIG9uIHZpcnR1YWwKZW5naW5lcyBjb21wb3NlZCBvZiBSRU5ERVJfQ0xBU1Mg KHJjcykuCgp2MjogbWFjcm9pemUgY2hlY2tfdXNlcl9tYnooKQp2MzogQ2FuY2VsIHZpcnR1YWwg ZW5naW5lcyBvbiB3ZWRnaW5nCnY0OiBDb21tZW5jZSBjb21tZW50aW5nCgpTaWduZWQtb2ZmLWJ5 OiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KQ2M6IFR2cnRrbyBVcnN1 bGluIDx0dnJ0a28udXJzdWxpbkBpbnRlbC5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9nZW0uaCAgICAgICAgICAgIHwgICA1ICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf Z2VtX2NvbnRleHQuYyAgICB8IDEyNiArKysrLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9z Y2hlZHVsZXIuYyAgICAgIHwgIDE4ICstCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3RpbWVs aW5lX3R5cGVzLmggfCAgIDEgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZW5naW5lX3R5 cGVzLmggIHwgICA4ICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jICAgICAgICAg ICB8IDU3MCArKysrKysrKysrKysrKysrKysrKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2xyYy5oICAgICAgICAgICB8ICAxMSArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMv aW50ZWxfbHJjLmMgfCAxNjUgKysrKysrCiBpbmNsdWRlL3VhcGkvZHJtL2k5MTVfZHJtLmggICAg ICAgICAgICAgICAgfCAgMzAgKysKIDkgZmlsZXMgY2hhbmdlZCwgOTE1IGluc2VydGlvbnMoKyks IDE5IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf Z2VtLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5oCmluZGV4IDVjMDczZmU3MzY2 NC4uM2NhODU1NTA1NzE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dl bS5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmgKQEAgLTk2LDQgKzk2LDkg QEAgc3RhdGljIGlubGluZSBib29sIF9fdGFza2xldF9lbmFibGUoc3RydWN0IHRhc2tsZXRfc3Ry dWN0ICp0KQogCXJldHVybiBhdG9taWNfZGVjX2FuZF90ZXN0KCZ0LT5jb3VudCk7CiB9CiAKK3N0 YXRpYyBpbmxpbmUgYm9vbCBfX3Rhc2tsZXRfaXNfc2NoZWR1bGVkKHN0cnVjdCB0YXNrbGV0X3N0 cnVjdCAqdCkKK3sKKwlyZXR1cm4gdGVzdF9iaXQoVEFTS0xFVF9TVEFURV9TQ0hFRCwgJnQtPnN0 YXRlKTsKK30KKwogI2VuZGlmIC8qIF9fSTkxNV9HRU1fSF9fICovCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9jb250ZXh0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2dlbV9jb250ZXh0LmMKaW5kZXggMzEzYTE4ZTM3MDcxLi5iMzg3YjcxZTJjYjUgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2NvbnRleHQuYworKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9jb250ZXh0LmMKQEAgLTg2LDYgKzg2LDcgQEAK ICAqLwogCiAjaW5jbHVkZSA8bGludXgvbG9nMi5oPgorI2luY2x1ZGUgPGxpbnV4L25vc3BlYy5o PgogCiAjaW5jbHVkZSA8ZHJtL2k5MTVfZHJtLmg+CiAKQEAgLTk0LDYgKzk1LDcgQEAKICNpbmNs dWRlICJpOTE1X3RyYWNlLmgiCiAjaW5jbHVkZSAiaTkxNV91c2VyX2V4dGVuc2lvbnMuaCIKICNp bmNsdWRlICJpbnRlbF9scmNfcmVnLmgiCisjaW5jbHVkZSAiaW50ZWxfbHJjLmgiCiAjaW5jbHVk ZSAiaW50ZWxfd29ya2Fyb3VuZHMuaCIKIAogI2RlZmluZSBBTExfTDNfU0xJQ0VTKGRldikgKDEg PDwgTlVNX0wzX1NMSUNFUyhkZXYpKSAtIDEKQEAgLTI0MSw2ICsyNDMsMjAgQEAgc3RhdGljIHZv aWQgcmVsZWFzZV9od19pZChzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4KQogCW11dGV4X3Vu bG9jaygmaTkxNS0+Y29udGV4dHMubXV0ZXgpOwogfQogCitzdGF0aWMgdm9pZCBmcmVlX2VuZ2lu ZXMoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqKmVuZ2luZXMsIGludCBjb3VudCkKK3sKKwlpbnQg aTsKKworCWlmIChaRVJPX09SX05VTExfUFRSKGVuZ2luZXMpKQorCQlyZXR1cm47CisKKwkvKiBX ZSBvd24gdGhlIHZlbmcgd2UgY3JlYXRlZDsgcmVndWxhciBlbmdpbmVzIGFyZSBpZ25vcmVkICov CisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCisJCWludGVsX3ZpcnR1YWxfZW5naW5lX2Rl c3Ryb3koZW5naW5lc1tpXSk7CisKKwlrZnJlZShlbmdpbmVzKTsKK30KKwogc3RhdGljIHZvaWQg aTkxNV9nZW1fY29udGV4dF9mcmVlKHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgpCiB7CiAJ c3RydWN0IGludGVsX2NvbnRleHQgKml0LCAqbjsKQEAgLTI1MSw4ICsyNjcsNyBAQCBzdGF0aWMg dm9pZCBpOTE1X2dlbV9jb250ZXh0X2ZyZWUoc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCkK IAogCXJlbGVhc2VfaHdfaWQoY3R4KTsKIAlpOTE1X3BwZ3R0X3B1dChjdHgtPnBwZ3R0KTsKLQot CWtmcmVlKGN0eC0+ZW5naW5lcyk7CisJZnJlZV9lbmdpbmVzKGN0eC0+ZW5naW5lcywgY3R4LT5u dW1fZW5naW5lcyk7CiAKIAlyYnRyZWVfcG9zdG9yZGVyX2Zvcl9lYWNoX2VudHJ5X3NhZmUoaXQs IG4sICZjdHgtPmh3X2NvbnRleHRzLCBub2RlKQogCQlpbnRlbF9jb250ZXh0X3B1dChpdCk7CkBA IC0xMjUyLDcgKzEyNjcsNiBAQCBfX2k5MTVfZ2VtX2NvbnRleHRfcmVjb25maWd1cmVfc3NldShz dHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4LAogCWludCByZXQgPSAwOwogCiAJR0VNX0JVR19P TihJTlRFTF9HRU4oY3R4LT5pOTE1KSA8IDgpOwotCUdFTV9CVUdfT04oZW5naW5lLT5pZCAhPSBS Q1MwKTsKIAogCWNlID0gaW50ZWxfY29udGV4dF9waW5fbG9jayhjdHgsIGVuZ2luZSk7CiAJaWYg KElTX0VSUihjZSkpCkBAIC0xNDQ2LDcgKzE0NjAsODAgQEAgc3RydWN0IHNldF9lbmdpbmVzIHsK IAl1bnNpZ25lZCBpbnQgbnVtX2VuZ2luZXM7CiB9OwogCitzdGF0aWMgaW50CitzZXRfZW5naW5l c19fbG9hZF9iYWxhbmNlKHN0cnVjdCBpOTE1X3VzZXJfZXh0ZW5zaW9uIF9fdXNlciAqYmFzZSwg dm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgaTkxNV9jb250ZXh0X2VuZ2luZXNfbG9hZF9iYWxhbmNl IF9fdXNlciAqZXh0ID0KKwkJY29udGFpbmVyX29mX3VzZXIoYmFzZSwgdHlwZW9mKCpleHQpLCBi YXNlKTsKKwljb25zdCBzdHJ1Y3Qgc2V0X2VuZ2luZXMgKnNldCA9IGRhdGE7CisJc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqdmU7CisJdW5zaWduZWQgaW50IG47CisJdTY0IG1hc2s7CisJdTE2IGlk eDsKKwlpbnQgZXJyOworCisJaWYgKCFIQVNfRVhFQ0xJU1RTKHNldC0+Y3R4LT5pOTE1KSkKKwkJ cmV0dXJuIC1FTk9ERVY7CisKKwlpZiAoVVNFU19HVUNfU1VCTUlTU0lPTihzZXQtPmN0eC0+aTkx NSkpCisJCXJldHVybiAtRU5PREVWOyAvKiBub3QgaW1wbGVtZW50IHlldCAqLworCisJaWYgKGdl dF91c2VyKGlkeCwgJmV4dC0+ZW5naW5lX2luZGV4KSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlp ZiAoaWR4ID49IHNldC0+bnVtX2VuZ2luZXMpCisJCXJldHVybiAtRUlOVkFMOworCisJaWR4ID0g YXJyYXlfaW5kZXhfbm9zcGVjKGlkeCwgc2V0LT5udW1fZW5naW5lcyk7CisJaWYgKHNldC0+ZW5n aW5lc1tpZHhdKQorCQlyZXR1cm4gLUVFWElTVDsKKworCWVyciA9IGNoZWNrX3VzZXJfbWJ6KCZl eHQtPm1iejE2KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gY2hlY2tfdXNl cl9tYnooJmV4dC0+ZmxhZ3MpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlmb3IgKG4g PSAwOyBuIDwgQVJSQVlfU0laRShleHQtPm1iejY0KTsgbisrKSB7CisJCWVyciA9IGNoZWNrX3Vz ZXJfbWJ6KCZleHQtPm1iejY0W25dKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQor CisJaWYgKGdldF91c2VyKG1hc2ssICZleHQtPmVuZ2luZXNfbWFzaykpCisJCXJldHVybiAtRUZB VUxUOworCisJbWFzayAmPSBHRU5NQVNLX1VMTChzZXQtPm51bV9lbmdpbmVzIC0gMSwgMCkgJiB+ QklUX1VMTChpZHgpOworCWlmICghbWFzaykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoaXNf cG93ZXJfb2ZfMihtYXNrKSkgeworCQl2ZSA9IHNldC0+ZW5naW5lc1tfX2ZmczY0KG1hc2spXTsK Kwl9IGVsc2UgeworCQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpzdGFja1s2NF07CisJCWludCBi aXQ7CisKKwkJbiA9IDA7CisJCWZvcl9lYWNoX3NldF9iaXQoYml0LCAodW5zaWduZWQgbG9uZyAq KSZtYXNrLCBzZXQtPm51bV9lbmdpbmVzKQorCQkJc3RhY2tbbisrXSA9IHNldC0+ZW5naW5lc1ti aXRdOworCisJCXZlID0gaW50ZWxfZXhlY2xpc3RzX2NyZWF0ZV92aXJ0dWFsKHNldC0+Y3R4LCBz dGFjaywgbik7CisJfQorCWlmIChJU19FUlIodmUpKQorCQlyZXR1cm4gUFRSX0VSUih2ZSk7CisK KwlpZiAoY21weGNoZygmc2V0LT5lbmdpbmVzW2lkeF0sIE5VTEwsIHZlKSkgeworCQlpbnRlbF92 aXJ0dWFsX2VuZ2luZV9kZXN0cm95KHZlKTsKKwkJcmV0dXJuIC1FRVhJU1Q7CisJfQorCisJcmV0 dXJuIDA7Cit9CisKIHN0YXRpYyBjb25zdCBpOTE1X3VzZXJfZXh0ZW5zaW9uX2ZuIHNldF9lbmdp bmVzX19leHRlbnNpb25zW10gPSB7CisJW0k5MTVfQ09OVEVYVF9FTkdJTkVTX0VYVF9MT0FEX0JB TEFOQ0VdID0gc2V0X2VuZ2luZXNfX2xvYWRfYmFsYW5jZSwKIH07CiAKIHN0YXRpYyBpbnQKQEAg LTE1MTAsMTMgKzE1OTcsMTMgQEAgc2V0X2VuZ2luZXMoc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQg KmN0eCwKIAkJCQkJICAgQVJSQVlfU0laRShzZXRfZW5naW5lc19fZXh0ZW5zaW9ucyksCiAJCQkJ CSAgICZzZXQpOwogCWlmIChlcnIpIHsKLQkJa2ZyZWUoc2V0LmVuZ2luZXMpOworCQlmcmVlX2Vu Z2luZXMoc2V0LmVuZ2luZXMsIHNldC5udW1fZW5naW5lcyk7CiAJCXJldHVybiBlcnI7CiAJfQog CiBvdXQ6CiAJbXV0ZXhfbG9jaygmY3R4LT5pOTE1LT5kcm0uc3RydWN0X211dGV4KTsKLQlrZnJl ZShjdHgtPmVuZ2luZXMpOworCWZyZWVfZW5naW5lcyhjdHgtPmVuZ2luZXMsIGN0eC0+bnVtX2Vu Z2luZXMpOwogCWN0eC0+ZW5naW5lcyA9IHNldC5lbmdpbmVzOwogCWN0eC0+bnVtX2VuZ2luZXMg PSBzZXQubnVtX2VuZ2luZXM7CiAJbXV0ZXhfdW5sb2NrKCZjdHgtPmk5MTUtPmRybS5zdHJ1Y3Rf bXV0ZXgpOwpAQCAtMTcwNSw3ICsxNzkyLDcgQEAgc3RhdGljIGludCBjbG9uZV9lbmdpbmVzKHN0 cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpkc3QsCiAJCQkgc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQg KnNyYykKIHsKIAlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICoqZW5naW5lczsKLQl1bnNpZ25lZCBp bnQgbnVtX2VuZ2luZXM7CisJdW5zaWduZWQgaW50IG51bV9lbmdpbmVzLCBpOwogCiAJbXV0ZXhf bG9jaygmc3JjLT5pOTE1LT5kcm0uc3RydWN0X211dGV4KTsgLyogc2VyaWFsaXNlIHNyYy0+ZW5n aW5lW10gKi8KIApAQCAtMTcyMCwxMSArMTgwNywzNiBAQCBzdGF0aWMgaW50IGNsb25lX2VuZ2lu ZXMoc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmRzdCwKIAkJCW11dGV4X3VubG9jaygmc3JjLT5p OTE1LT5kcm0uc3RydWN0X211dGV4KTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CisKKwkJLyoK KwkJICogVmlydHVhbCBlbmdpbmVzIGFyZSBzaW5nbGV0b25zOyB0aGV5IGNhbiBvbmx5IGV4aXN0 CisJCSAqIGluc2lkZSBhIHNpbmdsZSBjb250ZXh0LCBiZWNhdXNlIHRoZXkgZW1iZWQgdGhlaXIK KwkJICogSFcgY29udGV4dC4uLiBBcyBlYWNoIHZpcnR1YWwgY29udGV4dCBpbXBsaWVzIGEgc2lu Z2xlCisJCSAqIHRpbWVsaW5lIChlYWNoIGVuZ2luZSBjYW4gb25seSBkZXF1ZXVlIGEgc2luZ2xl IHJlcXVlc3QKKwkJICogYXQgYW55IHRpbWUpLCBpdCB3b3VsZCBiZSBzdXJwcmlzaW5nIGZvciB0 d28gY29udGV4dHMKKwkJICogdG8gdXNlIHRoZSBzYW1lIGVuZ2luZS4gU28gbGV0J3MgY3JlYXRl IGEgY29weSBvZgorCQkgKiB0aGUgdmlydHVhbCBlbmdpbmUgaW5zdGVhZC4KKwkJICovCisJCWZv ciAoaSA9IDA7IGkgPCBudW1fZW5naW5lczsgaSsrKSB7CisJCQlzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICplbmdpbmUgPSBlbmdpbmVzW2ldOworCisJCQlpZiAoIWVuZ2luZSB8fCAhaW50ZWxfZW5n aW5lX2lzX3ZpcnR1YWwoZW5naW5lKSkKKwkJCQljb250aW51ZTsKKworCQkJZW5naW5lID0gaW50 ZWxfZXhlY2xpc3RzX2Nsb25lX3ZpcnR1YWwoZHN0LCBlbmdpbmUpOworCQkJaWYgKElTX0VSUihl bmdpbmUpKSB7CisJCQkJZnJlZV9lbmdpbmVzKGVuZ2luZXMsIGkpOworCQkJCW11dGV4X3VubG9j aygmc3JjLT5pOTE1LT5kcm0uc3RydWN0X211dGV4KTsKKwkJCQlyZXR1cm4gUFRSX0VSUihlbmdp bmUpOworCQkJfQorCisJCQllbmdpbmVzW2ldID0gZW5naW5lOworCQl9CiAJfQogCiAJbXV0ZXhf dW5sb2NrKCZzcmMtPmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwogCi0Ja2ZyZWUoZHN0LT5lbmdp bmVzKTsKKwlmcmVlX2VuZ2luZXMoZHN0LT5lbmdpbmVzLCBkc3QtPm51bV9lbmdpbmVzKTsKIAlk c3QtPmVuZ2luZXMgPSBlbmdpbmVzOwogCWRzdC0+bnVtX2VuZ2luZXMgPSBudW1fZW5naW5lczsK IAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc2NoZWR1 bGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3NjaGVkdWxlci5jCmluZGV4IGUwZjYw OWQwMTU2NC4uOGNmZjRmNmQ2MTU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X3NjaGVkdWxlci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc2NoZWR1bGVy LmMKQEAgLTI0NywxNyArMjQ3LDI2IEBAIHNjaGVkX2xvY2tfZW5naW5lKGNvbnN0IHN0cnVjdCBp OTE1X3NjaGVkX25vZGUgKm5vZGUsCiAJCSAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqbG9ja2Vk LAogCQkgIHN0cnVjdCBzY2hlZF9jYWNoZSAqY2FjaGUpCiB7Ci0Jc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqZW5naW5lID0gbm9kZV90b19yZXF1ZXN0KG5vZGUpLT5lbmdpbmU7CisJY29uc3Qgc3Ry dWN0IGk5MTVfcmVxdWVzdCAqcnEgPSBub2RlX3RvX3JlcXVlc3Qobm9kZSk7CisJc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqZW5naW5lOwogCiAJR0VNX0JVR19PTighbG9ja2VkKTsKIAotCWlmIChl bmdpbmUgIT0gbG9ja2VkKSB7CisJLyoKKwkgKiBWaXJ0dWFsIGVuZ2luZXMgY29tcGxpY2F0ZSBh Y3F1aXJpbmcgdGhlIGVuZ2luZSB0aW1lbGluZSBsb2NrLAorCSAqIGFzIHRoZWlyIHJxLT5lbmdp bmUgcG9pbnRlciBpcyBub3Qgc3RhYmxlIHVudGlsIHVuZGVyIHRoYXQKKwkgKiBlbmdpbmUgbG9j ay4gVGhlIHNpbXBsZSBwbG95IHdlIHVzZSBpcyB0byB0YWtlIHRoZSBsb2NrIHRoZW4KKwkgKiBj aGVjayB0aGF0IHRoZSBycSBzdGlsbCBiZWxvbmdzIHRvIHRoZSBuZXdseSBsb2NrZWQgZW5naW5l LgorCSAqLworCXdoaWxlIChsb2NrZWQgIT0gKGVuZ2luZSA9IFJFQURfT05DRShycS0+ZW5naW5l KSkpIHsKIAkJc3Bpbl91bmxvY2soJmxvY2tlZC0+dGltZWxpbmUubG9jayk7CiAJCW1lbXNldChj YWNoZSwgMCwgc2l6ZW9mKCpjYWNoZSkpOwogCQlzcGluX2xvY2soJmVuZ2luZS0+dGltZWxpbmUu bG9jayk7CisJCWxvY2tlZCA9IGVuZ2luZTsKIAl9CiAKLQlyZXR1cm4gZW5naW5lOworCUdFTV9C VUdfT04obG9ja2VkICE9IGVuZ2luZSk7CisJcmV0dXJuIGxvY2tlZDsKIH0KIAogc3RhdGljIGJv b2wgaW5mbGlnaHQoY29uc3Qgc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsCkBAIC0zNzAsOCArMzc5 LDExIEBAIHN0YXRpYyB2b2lkIF9faTkxNV9zY2hlZHVsZShzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpy cSwKIAkJaWYgKHByaW8gPD0gbm9kZS0+YXR0ci5wcmlvcml0eSB8fCBub2RlX3NpZ25hbGVkKG5v ZGUpKQogCQkJY29udGludWU7CiAKKwkJR0VNX0JVR19PTihub2RlX3RvX3JlcXVlc3Qobm9kZSkt PmVuZ2luZSAhPSBlbmdpbmUpOworCiAJCW5vZGUtPmF0dHIucHJpb3JpdHkgPSBwcmlvOwogCQlp ZiAoIWxpc3RfZW1wdHkoJm5vZGUtPmxpbmspKSB7CisJCQlHRU1fQlVHX09OKGludGVsX2VuZ2lu ZV9pc192aXJ0dWFsKGVuZ2luZSkpOwogCQkJaWYgKCFjYWNoZS5wcmlvbGlzdCkKIAkJCQljYWNo ZS5wcmlvbGlzdCA9CiAJCQkJCWk5MTVfc2NoZWRfbG9va3VwX3ByaW9saXN0KGVuZ2luZSwKZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfdGltZWxpbmVfdHlwZXMuaCBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfdGltZWxpbmVfdHlwZXMuaAppbmRleCBkNDIwNTM1NDRk N2MuLjE3YjUzMTRmYjg0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV90 aW1lbGluZV90eXBlcy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfdGltZWxpbmVf dHlwZXMuaApAQCAtMjYsNiArMjYsNyBAQCBzdHJ1Y3QgaTkxNV90aW1lbGluZSB7CiAJc3Bpbmxv Y2tfdCBsb2NrOwogI2RlZmluZSBUSU1FTElORV9DTElFTlQgMCAvKiBkZWZhdWx0IHN1YmNsYXNz ICovCiAjZGVmaW5lIFRJTUVMSU5FX0VOR0lORSAxCisjZGVmaW5lIFRJTUVMSU5FX1ZJUlRVQUwg MgogCXN0cnVjdCBtdXRleCBtdXRleDsgLyogcHJvdGVjdHMgdGhlIGZsb3cgb2YgcmVxdWVzdHMg Ki8KIAogCXVuc2lnbmVkIGludCBwaW5fY291bnQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9lbmdpbmVfdHlwZXMuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2VuZ2luZV90eXBlcy5oCmluZGV4IDU0OWZkZmNhMTdhYS4uNjZhYjFkZWViN2Y1IDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9lbmdpbmVfdHlwZXMuaAorKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9lbmdpbmVfdHlwZXMuaApAQCAtMjI1LDYgKzIyNSw3IEBA IHN0cnVjdCBpbnRlbF9lbmdpbmVfZXhlY2xpc3RzIHsKIAkgKiBAcXVldWU6IHF1ZXVlIG9mIHJl cXVlc3RzLCBpbiBwcmlvcml0eSBsaXN0cwogCSAqLwogCXN0cnVjdCByYl9yb290X2NhY2hlZCBx dWV1ZTsKKwlzdHJ1Y3QgcmJfcm9vdF9jYWNoZWQgdmlydHVhbDsKIAogCS8qKgogCSAqIEBjc2Jf d3JpdGU6IGNvbnRyb2wgcmVnaXN0ZXIgZm9yIENvbnRleHQgU3dpdGNoIGJ1ZmZlcgpAQCAtNDMw LDYgKzQzMSw3IEBAIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgewogI2RlZmluZSBJOTE1X0VOR0lO RV9TVVBQT1JUU19TVEFUUyAgIEJJVCgxKQogI2RlZmluZSBJOTE1X0VOR0lORV9IQVNfUFJFRU1Q VElPTiAgIEJJVCgyKQogI2RlZmluZSBJOTE1X0VOR0lORV9IQVNfU0VNQVBIT1JFUyAgIEJJVCgz KQorI2RlZmluZSBJOTE1X0VOR0lORV9JU19WSVJUVUFMICAgICAgIEJJVCg0KQogCXVuc2lnbmVk IGludCBmbGFnczsKIAogCS8qCkBAIC01MTMsNiArNTE1LDEyIEBAIGludGVsX2VuZ2luZV9oYXNf c2VtYXBob3Jlcyhjb25zdCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCiAJcmV0dXJu IGVuZ2luZS0+ZmxhZ3MgJiBJOTE1X0VOR0lORV9IQVNfU0VNQVBIT1JFUzsKIH0KIAorc3RhdGlj IGlubGluZSBib29sCitpbnRlbF9lbmdpbmVfaXNfdmlydHVhbChjb25zdCBzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICplbmdpbmUpCit7CisJcmV0dXJuIGVuZ2luZS0+ZmxhZ3MgJiBJOTE1X0VOR0lO RV9JU19WSVJUVUFMOworfQorCiAjZGVmaW5lIGluc3Rkb25lX3NsaWNlX21hc2soZGV2X3ByaXZf XykgXAogCShJU19HRU4oZGV2X3ByaXZfXywgNykgPyBcCiAJIDEgOiBSVU5USU1FX0lORk8oZGV2 X3ByaXZfXyktPnNzZXUuc2xpY2VfbWFzaykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2xyYy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMKaW5kZXgg YWU4OTE3NGZkMDhmLi45MjZlZjA3ZjVjMzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2xyYy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jCkBA IC0xNjYsNiArMTY2LDQxIEBACiAKICNkZWZpbmUgQUNUSVZFX1BSSU9SSVRZIChJOTE1X1BSSU9S SVRZX05FV0NMSUVOVCB8IEk5MTVfUFJJT1JJVFlfTk9TRU1BUEhPUkUpCiAKK3N0cnVjdCB2aXJ0 dWFsX2VuZ2luZSB7CisJc3RydWN0IGludGVsX2VuZ2luZV9jcyBiYXNlOworCXN0cnVjdCBpbnRl bF9jb250ZXh0IGNvbnRleHQ7CisKKwkvKgorCSAqIFdlIGFsbG93IG9ubHkgYSBzaW5nbGUgcmVx dWVzdCB0aHJvdWdoIHRoZSB2aXJ0dWFsIGVuZ2luZSBhdCBhIHRpbWUKKwkgKiAoZWFjaCByZXF1 ZXN0IGluIHRoZSB0aW1lbGluZSB3YWl0cyBmb3IgdGhlIGNvbXBsZXRpb24gZmVuY2Ugb2YKKwkg KiB0aGUgcHJldmlvdXMgYmVmb3JlIGJlaW5nIHN1Ym1pdHRlZCkuIEJ5IHJlc3RyaWN0aW5nIG91 cnNlbHZlcyB0bworCSAqIG9ubHkgc3VibWl0dGluZyBhIHNpbmdsZSByZXF1ZXN0LCBlYWNoIHJl cXVlc3QgaXMgcGxhY2VkIG9uIHRvIGEKKwkgKiBwaHlzaWNhbCB0byBtYXhpbWlzZSBsb2FkIHNw cmVhZGluZyAoYnkgdmlydHVlIG9mIHRoZSBsYXRlIGdyZWVkeQorCSAqIHNjaGVkdWxpbmcgLS0g ZWFjaCByZWFsIGVuZ2luZSB0YWtlcyB0aGUgbmV4dCBhdmFpbGFibGUgcmVxdWVzdAorCSAqIHVw b24gaWRsaW5nKS4KKwkgKi8KKwlzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpyZXF1ZXN0OworCisJLyoK KwkgKiBXZSBrZWVwIGEgcmJ0cmVlIG9mIGF2YWlsYWJsZSB2aXJ0dWFsIGVuZ2luZXMgaW5zaWRl IGVhY2ggcGh5c2ljYWwKKwkgKiBlbmdpbmUsIHNvcnRlZCBieSBwcmlvcml0eS4gSGVyZSB3ZSBw cmVhbGxvY2F0ZSB0aGUgbm9kZXMgd2UgbmVlZAorCSAqIGZvciB0aGUgdmlydHVhbCBlbmdpbmUs IGluZGV4ZWQgYnkgcGh5c2ljYWxfZW5naW5lLT5pZC4KKwkgKi8KKwlzdHJ1Y3QgdmVfbm9kZSB7 CisJCXN0cnVjdCByYl9ub2RlIHJiOworCQlpbnQgcHJpbzsKKwl9IG5vZGVzW0k5MTVfTlVNX0VO R0lORVNdOworCisJLyogQW5kIGZpbmFsbHksIHdoaWNoIHBoeXNpY2FsIGVuZ2luZXMgdGhpcyB2 aXJ0dWFsIGVuZ2luZSBtYXBzIG9udG8uICovCisJdW5zaWduZWQgaW50IGNvdW50OworCXN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKnNpYmxpbmdzWzBdOworfTsKKworc3RhdGljIHN0cnVjdCB2aXJ0 dWFsX2VuZ2luZSAqdG9fdmlydHVhbF9lbmdpbmUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5n aW5lKQoreworCXJldHVybiBjb250YWluZXJfb2YoZW5naW5lLCBzdHJ1Y3QgdmlydHVhbF9lbmdp bmUsIGJhc2UpOworfQorCiBzdGF0aWMgaW50IGV4ZWNsaXN0c19jb250ZXh0X2RlZmVycmVkX2Fs bG9jKHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSwKIAkJCQkJICAgIHN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKmVuZ2luZSk7CiBzdGF0aWMgdm9pZCBleGVjbGlzdHNfaW5pdF9yZWdfc3RhdGUodTMy ICpyZWdfc3RhdGUsCkBAIC0yMjksNyArMjY0LDggQEAgc3RhdGljIGludCBxdWV1ZV9wcmlvKGNv bnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfZXhlY2xpc3RzICpleGVjbGlzdHMpCiB9CiAKIHN0YXRp YyBpbmxpbmUgYm9vbCBuZWVkX3ByZWVtcHQoY29uc3Qgc3RydWN0IGludGVsX2VuZ2luZV9jcyAq ZW5naW5lLAotCQkJCWNvbnN0IHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxKQorCQkJCWNvbnN0IHN0 cnVjdCBpOTE1X3JlcXVlc3QgKnJxLAorCQkJCXN0cnVjdCByYl9ub2RlICpyYikKIHsKIAlpbnQg bGFzdF9wcmlvOwogCkBAIC0yNjQsNiArMzAwLDIyIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBuZWVk X3ByZWVtcHQoY29uc3Qgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAogCSAgICBycV9w cmlvKGxpc3RfbmV4dF9lbnRyeShycSwgbGluaykpID4gbGFzdF9wcmlvKQogCQlyZXR1cm4gdHJ1 ZTsKIAorCWlmIChyYikgeyAvKiBYWFggdmlydHVhbCBwcmVjZWRlbmNlICovCisJCXN0cnVjdCB2 aXJ0dWFsX2VuZ2luZSAqdmUgPQorCQkJcmJfZW50cnkocmIsIHR5cGVvZigqdmUpLCBub2Rlc1tl bmdpbmUtPmlkXS5yYik7CisJCWJvb2wgcHJlZW1wdCA9IGZhbHNlOworCisJCWlmIChlbmdpbmUg PT0gdmUtPnNpYmxpbmdzWzBdKSB7IC8qIG9ubHkgcHJlZW1wdCBvbmUgc2libGluZyAqLworCQkJ c3Bpbl9sb2NrKCZ2ZS0+YmFzZS50aW1lbGluZS5sb2NrKTsKKwkJCWlmICh2ZS0+cmVxdWVzdCkK KwkJCQlwcmVlbXB0ID0gcnFfcHJpbyh2ZS0+cmVxdWVzdCkgPiBsYXN0X3ByaW87CisJCQlzcGlu X3VubG9jaygmdmUtPmJhc2UudGltZWxpbmUubG9jayk7CisJCX0KKworCQlpZiAocHJlZW1wdCkK KwkJCXJldHVybiBwcmVlbXB0OworCX0KKwogCS8qCiAJICogSWYgdGhlIGluZmxpZ2h0IGNvbnRl eHQgZGlkIG5vdCB0cmlnZ2VyIHRoZSBwcmVlbXB0aW9uLCB0aGVuIG1heWJlCiAJICogaXQgd2Fz IHRoZSBzZXQgb2YgcXVldWVkIHJlcXVlc3RzPyBQaWNrIHRoZSBoaWdoZXN0IHByaW9yaXR5IGlu CkBAIC0zODIsNiArNDM0LDggQEAgX191bndpbmRfaW5jb21wbGV0ZV9yZXF1ZXN0cyhzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICplbmdpbmUpCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX3JldmVy c2UocnEsIHJuLAogCQkJCQkgJmVuZ2luZS0+dGltZWxpbmUucmVxdWVzdHMsCiAJCQkJCSBsaW5r KSB7CisJCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKm93bmVyOworCiAJCWlmIChpOTE1X3JlcXVl c3RfY29tcGxldGVkKHJxKSkKIAkJCWJyZWFrOwogCkBAIC0zOTAsMTQgKzQ0NCwzMCBAQCBfX3Vu d2luZF9pbmNvbXBsZXRlX3JlcXVlc3RzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkK IAogCQlHRU1fQlVHX09OKHJxLT5od19jb250ZXh0LT5hY3RpdmUpOwogCi0JCUdFTV9CVUdfT04o cnFfcHJpbyhycSkgPT0gSTkxNV9QUklPUklUWV9JTlZBTElEKTsKLQkJaWYgKHJxX3ByaW8ocnEp ICE9IHByaW8pIHsKLQkJCXByaW8gPSBycV9wcmlvKHJxKTsKLQkJCXBsID0gaTkxNV9zY2hlZF9s b29rdXBfcHJpb2xpc3QoZW5naW5lLCBwcmlvKTsKLQkJfQotCQlHRU1fQlVHX09OKFJCX0VNUFRZ X1JPT1QoJmVuZ2luZS0+ZXhlY2xpc3RzLnF1ZXVlLnJiX3Jvb3QpKTsKKwkJLyoKKwkJICogUHVz aCB0aGUgcmVxdWVzdCBiYWNrIGludG8gdGhlIHF1ZXVlIGZvciBsYXRlciByZXN1Ym1pc3Npb24u CisJCSAqIElmIHRoaXMgcmVxdWVzdCBpcyBub3QgbmF0aXZlIHRvIHRoaXMgcGh5c2ljYWwgZW5n aW5lIChpLmUuCisJCSAqIGl0IGNhbWUgZnJvbSBhIHZpcnR1YWwgc291cmNlKSwgcHVzaCBpdCBi YWNrIG9udG8gdGhlIHZpcnR1YWwKKwkJICogZW5naW5lIHNvIHRoYXQgaXQgY2FuIGJlIG1vdmVk IGFjcm9zcyBvbnRvIGFub3RoZXIgcGh5c2ljYWwKKwkJICogZW5naW5lIGFzIGxvYWQgZGljdGF0 ZXMuCisJCSAqLworCQlvd25lciA9IHJxLT5od19jb250ZXh0LT5lbmdpbmU7CisJCWlmIChsaWtl bHkob3duZXIgPT0gZW5naW5lKSkgeworCQkJR0VNX0JVR19PTihycV9wcmlvKHJxKSA9PSBJOTE1 X1BSSU9SSVRZX0lOVkFMSUQpOworCQkJaWYgKHJxX3ByaW8ocnEpICE9IHByaW8pIHsKKwkJCQlw cmlvID0gcnFfcHJpbyhycSk7CisJCQkJcGwgPSBpOTE1X3NjaGVkX2xvb2t1cF9wcmlvbGlzdChl bmdpbmUsIHByaW8pOworCQkJfQorCQkJR0VNX0JVR19PTihSQl9FTVBUWV9ST09UKCZlbmdpbmUt PmV4ZWNsaXN0cy5xdWV1ZS5yYl9yb290KSk7CiAKLQkJbGlzdF9hZGQoJnJxLT5zY2hlZC5saW5r LCBwbCk7CisJCQlsaXN0X2FkZCgmcnEtPnNjaGVkLmxpbmssIHBsKTsKKwkJfSBlbHNlIHsKKwkJ CWlmIChfX2k5MTVfcmVxdWVzdF9oYXNfc3RhcnRlZChycSkpCisJCQkJcnEtPnNjaGVkLmF0dHIu cHJpb3JpdHkgfD0gQUNUSVZFX1BSSU9SSVRZOworCisJCQlycS0+ZW5naW5lID0gb3duZXI7CisJ CQlvd25lci0+c3VibWl0X3JlcXVlc3QocnEpOworCQl9CiAKIAkJYWN0aXZlID0gcnE7CiAJfQpA QCAtNjU5LDYgKzcyOSw1MCBAQCBzdGF0aWMgdm9pZCBjb21wbGV0ZV9wcmVlbXB0X2NvbnRleHQo c3RydWN0IGludGVsX2VuZ2luZV9leGVjbGlzdHMgKmV4ZWNsaXN0cykKIAkJCQkJCSAgZXhlY2xp c3RzKSk7CiB9CiAKK3N0YXRpYyB2b2lkIHZpcnR1YWxfdXBkYXRlX3JlZ2lzdGVyX29mZnNldHMo dTMyICpyZWdzLAorCQkJCQkgICAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQorewor CXUzMiBiYXNlID0gZW5naW5lLT5tbWlvX2Jhc2U7CisKKwlyZWdzW0NUWF9DT05URVhUX0NPTlRS T0xdID0KKwkJaTkxNV9tbWlvX3JlZ19vZmZzZXQoUklOR19DT05URVhUX0NPTlRST0woZW5naW5l KSk7CisJcmVnc1tDVFhfUklOR19IRUFEXSA9IGk5MTVfbW1pb19yZWdfb2Zmc2V0KFJJTkdfSEVB RChiYXNlKSk7CisJcmVnc1tDVFhfUklOR19UQUlMXSA9IGk5MTVfbW1pb19yZWdfb2Zmc2V0KFJJ TkdfVEFJTChiYXNlKSk7CisJcmVnc1tDVFhfUklOR19CVUZGRVJfU1RBUlRdID0gaTkxNV9tbWlv X3JlZ19vZmZzZXQoUklOR19TVEFSVChiYXNlKSk7CisJcmVnc1tDVFhfUklOR19CVUZGRVJfQ09O VFJPTF0gPSBpOTE1X21taW9fcmVnX29mZnNldChSSU5HX0NUTChiYXNlKSk7CisKKwlyZWdzW0NU WF9CQl9IRUFEX1VdID0gaTkxNV9tbWlvX3JlZ19vZmZzZXQoUklOR19CQkFERFJfVURXKGJhc2Up KTsKKwlyZWdzW0NUWF9CQl9IRUFEX0xdID0gaTkxNV9tbWlvX3JlZ19vZmZzZXQoUklOR19CQkFE RFIoYmFzZSkpOworCXJlZ3NbQ1RYX0JCX1NUQVRFXSA9IGk5MTVfbW1pb19yZWdfb2Zmc2V0KFJJ TkdfQkJTVEFURShiYXNlKSk7CisJcmVnc1tDVFhfU0VDT05EX0JCX0hFQURfVV0gPQorCQlpOTE1 X21taW9fcmVnX29mZnNldChSSU5HX1NCQkFERFJfVURXKGJhc2UpKTsKKwlyZWdzW0NUWF9TRUNP TkRfQkJfSEVBRF9MXSA9IGk5MTVfbW1pb19yZWdfb2Zmc2V0KFJJTkdfU0JCQUREUihiYXNlKSk7 CisJcmVnc1tDVFhfU0VDT05EX0JCX1NUQVRFXSA9IGk5MTVfbW1pb19yZWdfb2Zmc2V0KFJJTkdf U0JCU1RBVEUoYmFzZSkpOworCisJcmVnc1tDVFhfQ1RYX1RJTUVTVEFNUF0gPQorCQlpOTE1X21t aW9fcmVnX29mZnNldChSSU5HX0NUWF9USU1FU1RBTVAoYmFzZSkpOworCXJlZ3NbQ1RYX1BEUDNf VURXXSA9IGk5MTVfbW1pb19yZWdfb2Zmc2V0KEdFTjhfUklOR19QRFBfVURXKGVuZ2luZSwgMykp OworCXJlZ3NbQ1RYX1BEUDNfTERXXSA9IGk5MTVfbW1pb19yZWdfb2Zmc2V0KEdFTjhfUklOR19Q RFBfTERXKGVuZ2luZSwgMykpOworCXJlZ3NbQ1RYX1BEUDJfVURXXSA9IGk5MTVfbW1pb19yZWdf b2Zmc2V0KEdFTjhfUklOR19QRFBfVURXKGVuZ2luZSwgMikpOworCXJlZ3NbQ1RYX1BEUDJfTERX XSA9IGk5MTVfbW1pb19yZWdfb2Zmc2V0KEdFTjhfUklOR19QRFBfTERXKGVuZ2luZSwgMikpOwor CXJlZ3NbQ1RYX1BEUDFfVURXXSA9IGk5MTVfbW1pb19yZWdfb2Zmc2V0KEdFTjhfUklOR19QRFBf VURXKGVuZ2luZSwgMSkpOworCXJlZ3NbQ1RYX1BEUDFfTERXXSA9IGk5MTVfbW1pb19yZWdfb2Zm c2V0KEdFTjhfUklOR19QRFBfTERXKGVuZ2luZSwgMSkpOworCXJlZ3NbQ1RYX1BEUDBfVURXXSA9 IGk5MTVfbW1pb19yZWdfb2Zmc2V0KEdFTjhfUklOR19QRFBfVURXKGVuZ2luZSwgMCkpOworCXJl Z3NbQ1RYX1BEUDBfTERXXSA9IGk5MTVfbW1pb19yZWdfb2Zmc2V0KEdFTjhfUklOR19QRFBfTERX KGVuZ2luZSwgMCkpOworCisJaWYgKGVuZ2luZS0+Y2xhc3MgPT0gUkVOREVSX0NMQVNTKSB7CisJ CXJlZ3NbQ1RYX1JDU19JTkRJUkVDVF9DVFhdID0KKwkJCWk5MTVfbW1pb19yZWdfb2Zmc2V0KFJJ TkdfSU5ESVJFQ1RfQ1RYKGJhc2UpKTsKKwkJcmVnc1tDVFhfUkNTX0lORElSRUNUX0NUWF9PRkZT RVRdID0KKwkJCWk5MTVfbW1pb19yZWdfb2Zmc2V0KFJJTkdfSU5ESVJFQ1RfQ1RYX09GRlNFVChi YXNlKSk7CisJCXJlZ3NbQ1RYX0JCX1BFUl9DVFhfUFRSXSA9CisJCQlpOTE1X21taW9fcmVnX29m ZnNldChSSU5HX0JCX1BFUl9DVFhfUFRSKGJhc2UpKTsKKworCQlyZWdzW0NUWF9SX1BXUl9DTEtf U1RBVEVdID0KKwkJCWk5MTVfbW1pb19yZWdfb2Zmc2V0KEdFTjhfUl9QV1JfQ0xLX1NUQVRFKTsK Kwl9Cit9CisKIHN0YXRpYyB2b2lkIGV4ZWNsaXN0c19kZXF1ZXVlKHN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKmVuZ2luZSkKIHsKIAlzdHJ1Y3QgaW50ZWxfZW5naW5lX2V4ZWNsaXN0cyAqIGNvbnN0 IGV4ZWNsaXN0cyA9ICZlbmdpbmUtPmV4ZWNsaXN0czsKQEAgLTY5MSw2ICs4MDUsMzcgQEAgc3Rh dGljIHZvaWQgZXhlY2xpc3RzX2RlcXVldWUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5l KQogCSAqIGFuZCBjb250ZXh0IHN3aXRjaGVzKSBzdWJtaXNzaW9uLgogCSAqLwogCisJZm9yIChy YiA9IHJiX2ZpcnN0X2NhY2hlZCgmZXhlY2xpc3RzLT52aXJ0dWFsKTsgcmI7ICkgeworCQlzdHJ1 Y3QgdmlydHVhbF9lbmdpbmUgKnZlID0KKwkJCXJiX2VudHJ5KHJiLCB0eXBlb2YoKnZlKSwgbm9k ZXNbZW5naW5lLT5pZF0ucmIpOworCQlzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSA9IFJFQURfT05D RSh2ZS0+cmVxdWVzdCk7CisJCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmFjdGl2ZTsKKworCQlp ZiAoIXJxKSB7IC8qIGxhemlseSBjbGVhbnVwIGFmdGVyIGFub3RoZXIgZW5naW5lIGhhbmRsZWQg cnEgKi8KKwkJCXJiX2VyYXNlX2NhY2hlZChyYiwgJmV4ZWNsaXN0cy0+dmlydHVhbCk7CisJCQlS Ql9DTEVBUl9OT0RFKHJiKTsKKwkJCXJiID0gcmJfZmlyc3RfY2FjaGVkKCZleGVjbGlzdHMtPnZp cnR1YWwpOworCQkJY29udGludWU7CisJCX0KKworCQkvKgorCQkgKiBXZSB0cmFjayB3aGVuIHRo ZSBIVyBoYXMgY29tcGxldGVkIHNhdmluZyB0aGUgY29udGV4dCBpbWFnZQorCQkgKiAoaS5lLiB3 aGVuIHdlIGhhdmUgc2VlbiB0aGUgZmluYWwgQ1MgZXZlbnQgc3dpdGNoaW5nIG91dCBvZgorCQkg KiB0aGUgY29udGV4dCkgYW5kIG11c3Qgbm90IG92ZXJ3cml0ZSB0aGUgY29udGV4dCBpbWFnZSBi ZWZvcmUKKwkJICogdGhlbi4gVGhpcyByZXN0cmljdHMgdXMgdG8gb25seSB1c2luZyB0aGUgYWN0 aXZlIGVuZ2luZQorCQkgKiB3aGlsZSB0aGUgcHJldmlvdXMgdmlydHVhbGl6ZWQgcmVxdWVzdCBp cyBpbmZsaWdodCAoc28KKwkJICogd2UgcmV1c2UgdGhlIHJlZ2lzdGVyIG9mZnNldHMpLiBUaGlz IGlzIGEgdmVyeSBzbWFsbAorCQkgKiBoeXN0ZXJzaXMgb24gdGhlIGdyZWVkeSBzZWVsY3Rpb24g YWxnb3JpdGhtLgorCQkgKi8KKwkJYWN0aXZlID0gUkVBRF9PTkNFKHZlLT5jb250ZXh0LmFjdGl2 ZSk7CisJCWlmIChhY3RpdmUgJiYgYWN0aXZlICE9IGVuZ2luZSkgeworCQkJcmIgPSByYl9uZXh0 KHJiKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJYnJlYWs7CisJfQorCiAJaWYgKGxhc3QpIHsK IAkJLyoKIAkJICogRG9uJ3QgcmVzdWJtaXQgb3Igc3dpdGNoIHVudGlsIGFsbCBvdXRzdGFuZGlu ZwpAQCAtNzEyLDcgKzg1Nyw3IEBAIHN0YXRpYyB2b2lkIGV4ZWNsaXN0c19kZXF1ZXVlKHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKIAkJaWYgKCFleGVjbGlzdHNfaXNfYWN0aXZlKGV4 ZWNsaXN0cywgRVhFQ0xJU1RTX0FDVElWRV9IV0FDSykpCiAJCQlyZXR1cm47CiAKLQkJaWYgKG5l ZWRfcHJlZW1wdChlbmdpbmUsIGxhc3QpKSB7CisJCWlmIChuZWVkX3ByZWVtcHQoZW5naW5lLCBs YXN0LCByYikpIHsKIAkJCWluamVjdF9wcmVlbXB0X2NvbnRleHQoZW5naW5lKTsKIAkJCXJldHVy bjsKIAkJfQpAQCAtNzUyLDYgKzg5Nyw3MiBAQCBzdGF0aWMgdm9pZCBleGVjbGlzdHNfZGVxdWV1 ZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCiAJCWxhc3QtPnRhaWwgPSBsYXN0LT53 YV90YWlsOwogCX0KIAorCXdoaWxlIChyYikgeyAvKiBYWFggdmlydHVhbCBpcyBhbHdheXMgdGFr aW5nIHByZWNlZGVuY2UgKi8KKwkJc3RydWN0IHZpcnR1YWxfZW5naW5lICp2ZSA9CisJCQlyYl9l bnRyeShyYiwgdHlwZW9mKCp2ZSksIG5vZGVzW2VuZ2luZS0+aWRdLnJiKTsKKwkJc3RydWN0IGk5 MTVfcmVxdWVzdCAqcnE7CisKKwkJc3Bpbl9sb2NrKCZ2ZS0+YmFzZS50aW1lbGluZS5sb2NrKTsK KworCQlycSA9IHZlLT5yZXF1ZXN0OworCQlpZiAodW5saWtlbHkoIXJxKSkgeyAvKiBsb3N0IHRo ZSByYWNlIHRvIGEgc2libGluZyAqLworCQkJc3Bpbl91bmxvY2soJnZlLT5iYXNlLnRpbWVsaW5l LmxvY2spOworCQkJcmJfZXJhc2VfY2FjaGVkKHJiLCAmZXhlY2xpc3RzLT52aXJ0dWFsKTsKKwkJ CVJCX0NMRUFSX05PREUocmIpOworCQkJcmIgPSByYl9maXJzdF9jYWNoZWQoJmV4ZWNsaXN0cy0+ dmlydHVhbCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChycV9wcmlvKHJxKSA+PSBxdWV1 ZV9wcmlvKGV4ZWNsaXN0cykpIHsKKwkJCWlmIChsYXN0ICYmICFjYW5fbWVyZ2VfcnEobGFzdCwg cnEpKSB7CisJCQkJc3Bpbl91bmxvY2soJnZlLT5iYXNlLnRpbWVsaW5lLmxvY2spOworCQkJCXJl dHVybjsgLyogbGVhdmUgdGhpcyBycSBmb3IgYW5vdGhlciBlbmdpbmUgKi8KKwkJCX0KKworCQkJ R0VNX0JVR19PTihycS0+ZW5naW5lICE9ICZ2ZS0+YmFzZSk7CisJCQl2ZS0+cmVxdWVzdCA9IE5V TEw7CisJCQl2ZS0+YmFzZS5leGVjbGlzdHMucXVldWVfcHJpb3JpdHlfaGludCA9IElOVF9NSU47 CisJCQlyYl9lcmFzZV9jYWNoZWQocmIsICZleGVjbGlzdHMtPnZpcnR1YWwpOworCQkJUkJfQ0xF QVJfTk9ERShyYik7CisKKwkJCUdFTV9CVUdfT04ocnEtPmh3X2NvbnRleHQgIT0gJnZlLT5jb250 ZXh0KTsKKwkJCXJxLT5lbmdpbmUgPSBlbmdpbmU7CisKKwkJCWlmIChlbmdpbmUgIT0gdmUtPnNp YmxpbmdzWzBdKSB7CisJCQkJdTMyICpyZWdzID0gdmUtPmNvbnRleHQubHJjX3JlZ19zdGF0ZTsK KwkJCQl1bnNpZ25lZCBpbnQgbjsKKworCQkJCUdFTV9CVUdfT04oUkVBRF9PTkNFKHZlLT5jb250 ZXh0LmFjdGl2ZSkpOworCQkJCXZpcnR1YWxfdXBkYXRlX3JlZ2lzdGVyX29mZnNldHMocmVncywg ZW5naW5lKTsKKworCQkJCS8qCisJCQkJICogTW92ZSB0aGUgYm91bmQgZW5naW5lIHRvIHRoZSB0 b3Agb2YgdGhlIGxpc3QKKwkJCQkgKiBmb3IgZnV0dXJlIGV4ZWN1dGlvbi4gV2UgdGhlbiBraWNr IHRoaXMKKwkJCQkgKiB0YXNrbGV0IGZpcnN0IGJlZm9yZSBjaGVja2luZyBvdGhlcnMsIHNvIHRo YXQKKwkJCQkgKiB3ZSBwcmVmZXJlbnRpYWxseSByZXVzZSB0aGlzIHNldCBvZiBib3VuZAorCQkJ CSAqIHJlZ2lzdGVycy4KKwkJCQkgKi8KKwkJCQlmb3IgKG4gPSAxOyBuIDwgdmUtPmNvdW50OyBu KyspIHsKKwkJCQkJaWYgKHZlLT5zaWJsaW5nc1tuXSA9PSBlbmdpbmUpIHsKKwkJCQkJCXN3YXAo dmUtPnNpYmxpbmdzW25dLAorCQkJCQkJICAgICB2ZS0+c2libGluZ3NbMF0pOworCQkJCQkJYnJl YWs7CisJCQkJCX0KKwkJCQl9CisKKwkJCQlHRU1fQlVHX09OKHZlLT5zaWJsaW5nc1swXSAhPSBl bmdpbmUpOworCQkJfQorCisJCQlfX2k5MTVfcmVxdWVzdF9zdWJtaXQocnEpOworCQkJdHJhY2Vf aTkxNV9yZXF1ZXN0X2luKHJxLCBwb3J0X2luZGV4KHBvcnQsIGV4ZWNsaXN0cykpOworCQkJc3Vi bWl0ID0gdHJ1ZTsKKwkJCWxhc3QgPSBycTsKKwkJfQorCisJCXNwaW5fdW5sb2NrKCZ2ZS0+YmFz ZS50aW1lbGluZS5sb2NrKTsKKwkJYnJlYWs7CisJfQorCiAJd2hpbGUgKChyYiA9IHJiX2ZpcnN0 X2NhY2hlZCgmZXhlY2xpc3RzLT5xdWV1ZSkpKSB7CiAJCXN0cnVjdCBpOTE1X3ByaW9saXN0ICpw ID0gdG9fcHJpb2xpc3QocmIpOwogCQlzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwgKnJuOwpAQCAt OTcxLDYgKzExODIsMjQgQEAgc3RhdGljIHZvaWQgZXhlY2xpc3RzX2NhbmNlbF9yZXF1ZXN0cyhz dHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCiAJCWk5MTVfcHJpb2xpc3RfZnJlZShwKTsK IAl9CiAKKwkvKiBDYW5jZWwgYWxsIGF0dGFjaGVkIHZpcnR1YWwgZW5naW5lcyAqLworCXdoaWxl ICgocmIgPSByYl9maXJzdF9jYWNoZWQoJmV4ZWNsaXN0cy0+dmlydHVhbCkpKSB7CisJCXN0cnVj dCB2aXJ0dWFsX2VuZ2luZSAqdmUgPQorCQkJcmJfZW50cnkocmIsIHR5cGVvZigqdmUpLCBub2Rl c1tlbmdpbmUtPmlkXS5yYik7CisKKwkJcmJfZXJhc2VfY2FjaGVkKHJiLCAmZXhlY2xpc3RzLT52 aXJ0dWFsKTsKKwkJUkJfQ0xFQVJfTk9ERShyYik7CisKKwkJc3Bpbl9sb2NrKCZ2ZS0+YmFzZS50 aW1lbGluZS5sb2NrKTsKKwkJaWYgKHZlLT5yZXF1ZXN0KSB7CisJCQlfX2k5MTVfcmVxdWVzdF9z dWJtaXQodmUtPnJlcXVlc3QpOworCQkJZG1hX2ZlbmNlX3NldF9lcnJvcigmdmUtPnJlcXVlc3Qt PmZlbmNlLCAtRUlPKTsKKwkJCWk5MTVfcmVxdWVzdF9tYXJrX2NvbXBsZXRlKHZlLT5yZXF1ZXN0 KTsKKwkJCXZlLT5yZXF1ZXN0ID0gTlVMTDsKKwkJfQorCQlzcGluX3VubG9jaygmdmUtPmJhc2Uu dGltZWxpbmUubG9jayk7CisJfQorCiAJLyogUmVtYWluaW5nIF91bnJlYWR5XyByZXF1ZXN0cyB3 aWxsIGJlIG5vcCdlZCB3aGVuIHN1Ym1pdHRlZCAqLwogCiAJZXhlY2xpc3RzLT5xdWV1ZV9wcmlv cml0eV9oaW50ID0gSU5UX01JTjsKQEAgLTI4OTcsNiArMzEyNiwzMDYgQEAgdm9pZCBpbnRlbF9s cl9jb250ZXh0X3Jlc3VtZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKIAl9CiB9CiAK K3N0YXRpYyB2b2lkIHZpcnR1YWxfY29udGV4dF9kZXN0cm95KHN0cnVjdCBrcmVmICprcmVmKQor eworCXN0cnVjdCB2aXJ0dWFsX2VuZ2luZSAqdmUgPQorCQljb250YWluZXJfb2Yoa3JlZiwgdHlw ZW9mKCp2ZSksIGNvbnRleHQucmVmKTsKKwl1bnNpZ25lZCBpbnQgbjsKKworCUdFTV9CVUdfT04o dmUtPnJlcXVlc3QpOworCUdFTV9CVUdfT04odmUtPmNvbnRleHQuYWN0aXZlKTsKKworCWZvciAo biA9IDA7IG4gPCB2ZS0+Y291bnQ7IG4rKykgeworCQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpz aWJsaW5nID0gdmUtPnNpYmxpbmdzW25dOworCQlzdHJ1Y3QgcmJfbm9kZSAqbm9kZSA9ICZ2ZS0+ bm9kZXNbc2libGluZy0+aWRdLnJiOworCisJCWlmIChSQl9FTVBUWV9OT0RFKG5vZGUpKQorCQkJ Y29udGludWU7CisKKwkJc3Bpbl9sb2NrX2lycSgmc2libGluZy0+dGltZWxpbmUubG9jayk7CisK KwkJaWYgKCFSQl9FTVBUWV9OT0RFKG5vZGUpKQorCQkJcmJfZXJhc2VfY2FjaGVkKG5vZGUsICZz aWJsaW5nLT5leGVjbGlzdHMudmlydHVhbCk7CisKKwkJc3Bpbl91bmxvY2tfaXJxKCZzaWJsaW5n LT50aW1lbGluZS5sb2NrKTsKKwl9CisJR0VNX0JVR19PTihfX3Rhc2tsZXRfaXNfc2NoZWR1bGVk KCZ2ZS0+YmFzZS5leGVjbGlzdHMudGFza2xldCkpOworCisJaWYgKHZlLT5jb250ZXh0LnN0YXRl KQorCQlfX2V4ZWNsaXN0c19jb250ZXh0X2ZpbmkoJnZlLT5jb250ZXh0KTsKKworCWk5MTVfdGlt ZWxpbmVfZmluaSgmdmUtPmJhc2UudGltZWxpbmUpOworCWtmcmVlKHZlKTsKK30KKworc3RhdGlj IHZvaWQgdmlydHVhbF9lbmdpbmVfaW5pdGlhbF9oaW50KHN0cnVjdCB2aXJ0dWFsX2VuZ2luZSAq dmUpCit7CisJaW50IHN3cDsKKworCS8qCisJICogUGljayBhIHJhbmRvbSBzaWJsaW5nIG9uIHN0 YXJ0aW5nIHRvIGhlbHAgc3ByZWFkIHRoZSBsb2FkIGFyb3VuZC4KKwkgKgorCSAqIE5ldyBjb250 ZXh0cyBhcmUgdHlwaWNhbGx5IGNyZWF0ZWQgd2l0aCBleGFjdGx5IHRoZSBzYW1lIG9yZGVyCisJ ICogb2Ygc2libGluZ3MsIGFuZCBvZnRlbiBzdGFydGVkIGluIGJhdGNoZXMuIER1ZSB0byB0aGUg d2F5IHdlIGl0ZXJhdGUKKwkgKiB0aGUgYXJyYXkgb2Ygc2libGluZyB3aGVuIHN1Ym1pdHRpbmcg cmVxdWVzdHMsIHNpYmxpbmdbMF0gaXMKKwkgKiBwcmlvcml0aXNlZCBmb3IgZGVxdWV1aW5nLiBJ ZiB3ZSBtYWtlIHN1cmUgdGhhdCBzaWJsaW5nWzBdIGlzIGZhaXJseQorCSAqIHJhbmRvbWlzZWQg YWNyb3NzIHRoZSBzeXN0ZW0sIHdlIGFsc28gaGVscCBzcHJlYWQgdGhlIGxvYWQgYnkgdGhlCisJ ICogZmlyc3QgZW5naW5lIHdlIGluc3BlY3QgYmVpbmcgZGlmZmVyZW50IGVhY2ggdGltZS4KKwkg KgorCSAqIE5CIFRoaXMgZG9lcyBub3QgZm9yY2UgdXMgdG8gZXhlY3V0ZSBvbiB0aGlzIGVuZ2lu ZSwgaXQgd2lsbCBqdXN0CisJICogdHlwaWNhbGx5IGJlIHRoZSBmaXJzdCB3ZSBpbnNwZWN0IGZv ciBzdWJtaXNzaW9uLgorCSAqLworCXN3cCA9IHByYW5kb21fdTMyX21heCh2ZS0+Y291bnQpOwor CWlmICghc3dwKQorCQlyZXR1cm47CisKKwlzd2FwKHZlLT5zaWJsaW5nc1tzd3BdLCB2ZS0+c2li bGluZ3NbMF0pOworCXZpcnR1YWxfdXBkYXRlX3JlZ2lzdGVyX29mZnNldHModmUtPmNvbnRleHQu bHJjX3JlZ19zdGF0ZSwKKwkJCQkJdmUtPnNpYmxpbmdzWzBdKTsKK30KKworc3RhdGljIGludCB2 aXJ0dWFsX2NvbnRleHRfcGluKHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSkKK3sKKwlzdHJ1Y3Qg dmlydHVhbF9lbmdpbmUgKnZlID0gY29udGFpbmVyX29mKGNlLCB0eXBlb2YoKnZlKSwgY29udGV4 dCk7CisJaW50IGVycjsKKworCS8qIE5vdGU6IHdlIG11c3QgdXNlIGEgcmVhbCBlbmdpbmUgY2xh c3MgZm9yIHNldHRpbmcgdXAgcmVnIHN0YXRlICovCisJZXJyID0gX19leGVjbGlzdHNfY29udGV4 dF9waW4oY2UsIHZlLT5zaWJsaW5nc1swXSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwor CXZpcnR1YWxfZW5naW5lX2luaXRpYWxfaGludCh2ZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRp YyBjb25zdCBzdHJ1Y3QgaW50ZWxfY29udGV4dF9vcHMgdmlydHVhbF9jb250ZXh0X29wcyA9IHsK KwkucGluID0gdmlydHVhbF9jb250ZXh0X3BpbiwKKwkudW5waW4gPSBleGVjbGlzdHNfY29udGV4 dF91bnBpbiwKKworCS5kZXN0cm95ID0gdmlydHVhbF9jb250ZXh0X2Rlc3Ryb3ksCit9OworCitz dGF0aWMgdm9pZCB2aXJ0dWFsX3N1Ym1pc3Npb25fdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEp Cit7CisJc3RydWN0IHZpcnR1YWxfZW5naW5lICogY29uc3QgdmUgPSAoc3RydWN0IHZpcnR1YWxf ZW5naW5lICopZGF0YTsKKwl1bnNpZ25lZCBpbnQgbjsKKwlpbnQgcHJpbzsKKworCXByaW8gPSBS RUFEX09OQ0UodmUtPmJhc2UuZXhlY2xpc3RzLnF1ZXVlX3ByaW9yaXR5X2hpbnQpOworCWlmIChw cmlvID09IElOVF9NSU4pCisJCXJldHVybjsKKworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJZm9y IChuID0gMDsgUkVBRF9PTkNFKHZlLT5yZXF1ZXN0KSAmJiBuIDwgdmUtPmNvdW50OyBuKyspIHsK KwkJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqc2libGluZyA9IHZlLT5zaWJsaW5nc1tuXTsKKwkJ c3RydWN0IHZlX25vZGUgKiBjb25zdCBub2RlID0gJnZlLT5ub2Rlc1tzaWJsaW5nLT5pZF07CisJ CXN0cnVjdCByYl9ub2RlICoqcGFyZW50LCAqcmI7CisJCWJvb2wgZmlyc3Q7CisKKwkJc3Bpbl9s b2NrKCZzaWJsaW5nLT50aW1lbGluZS5sb2NrKTsKKworCQlpZiAoIVJCX0VNUFRZX05PREUoJm5v ZGUtPnJiKSkgeworCQkJLyoKKwkJCSAqIENoZWF0IGFuZCBhdm9pZCByZWJhbGFuY2luZyB0aGUg dHJlZSBpZiB3ZSBjYW4KKwkJCSAqIHJldXNlIHRoaXMgbm9kZSBpbiBzaXR1LgorCQkJICovCisJ CQlmaXJzdCA9IHJiX2ZpcnN0X2NhY2hlZCgmc2libGluZy0+ZXhlY2xpc3RzLnZpcnR1YWwpID09 CisJCQkJJm5vZGUtPnJiOworCQkJaWYgKHByaW8gPT0gbm9kZS0+cHJpbyB8fCAocHJpbyA+IG5v ZGUtPnByaW8gJiYgZmlyc3QpKQorCQkJCWdvdG8gc3VibWl0X2VuZ2luZTsKKworCQkJcmJfZXJh c2VfY2FjaGVkKCZub2RlLT5yYiwgJnNpYmxpbmctPmV4ZWNsaXN0cy52aXJ0dWFsKTsKKwkJfQor CisJCXJiID0gTlVMTDsKKwkJZmlyc3QgPSB0cnVlOworCQlwYXJlbnQgPSAmc2libGluZy0+ZXhl Y2xpc3RzLnZpcnR1YWwucmJfcm9vdC5yYl9ub2RlOworCQl3aGlsZSAoKnBhcmVudCkgeworCQkJ c3RydWN0IHZlX25vZGUgKm90aGVyOworCisJCQlyYiA9ICpwYXJlbnQ7CisJCQlvdGhlciA9IHJi X2VudHJ5KHJiLCB0eXBlb2YoKm90aGVyKSwgcmIpOworCQkJaWYgKHByaW8gPiBvdGhlci0+cHJp bykgeworCQkJCXBhcmVudCA9ICZyYi0+cmJfbGVmdDsKKwkJCX0gZWxzZSB7CisJCQkJcGFyZW50 ID0gJnJiLT5yYl9yaWdodDsKKwkJCQlmaXJzdCA9IGZhbHNlOworCQkJfQorCQl9CisKKwkJcmJf bGlua19ub2RlKCZub2RlLT5yYiwgcmIsIHBhcmVudCk7CisJCXJiX2luc2VydF9jb2xvcl9jYWNo ZWQoJm5vZGUtPnJiLAorCQkJCSAgICAgICAmc2libGluZy0+ZXhlY2xpc3RzLnZpcnR1YWwsCisJ CQkJICAgICAgIGZpcnN0KTsKKworc3VibWl0X2VuZ2luZToKKwkJR0VNX0JVR19PTihSQl9FTVBU WV9OT0RFKCZub2RlLT5yYikpOworCQlub2RlLT5wcmlvID0gcHJpbzsKKwkJaWYgKGZpcnN0ICYm IHByaW8gPiBzaWJsaW5nLT5leGVjbGlzdHMucXVldWVfcHJpb3JpdHlfaGludCkgeworCQkJc2li bGluZy0+ZXhlY2xpc3RzLnF1ZXVlX3ByaW9yaXR5X2hpbnQgPSBwcmlvOworCQkJdGFza2xldF9o aV9zY2hlZHVsZSgmc2libGluZy0+ZXhlY2xpc3RzLnRhc2tsZXQpOworCQl9CisKKwkJc3Bpbl91 bmxvY2soJnNpYmxpbmctPnRpbWVsaW5lLmxvY2spOworCX0KKwlsb2NhbF9pcnFfZW5hYmxlKCk7 Cit9CisKK3N0YXRpYyB2b2lkIHZpcnR1YWxfc3VibWl0X3JlcXVlc3Qoc3RydWN0IGk5MTVfcmVx dWVzdCAqcmVxdWVzdCkKK3sKKwlzdHJ1Y3QgdmlydHVhbF9lbmdpbmUgKnZlID0gdG9fdmlydHVh bF9lbmdpbmUocmVxdWVzdC0+ZW5naW5lKTsKKworCUdFTV9CVUdfT04odmUtPmJhc2Uuc3VibWl0 X3JlcXVlc3QgIT0gdmlydHVhbF9zdWJtaXRfcmVxdWVzdCk7CisKKwlHRU1fQlVHX09OKHZlLT5y ZXF1ZXN0KTsKKwl2ZS0+YmFzZS5leGVjbGlzdHMucXVldWVfcHJpb3JpdHlfaGludCA9IHJxX3By aW8ocmVxdWVzdCk7CisJV1JJVEVfT05DRSh2ZS0+cmVxdWVzdCwgcmVxdWVzdCk7CisKKwl0YXNr bGV0X3NjaGVkdWxlKCZ2ZS0+YmFzZS5leGVjbGlzdHMudGFza2xldCk7Cit9CisKK3N0cnVjdCBp bnRlbF9lbmdpbmVfY3MgKgoraW50ZWxfZXhlY2xpc3RzX2NyZWF0ZV92aXJ0dWFsKHN0cnVjdCBp OTE1X2dlbV9jb250ZXh0ICpjdHgsCisJCQkgICAgICAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAq KnNpYmxpbmdzLAorCQkJICAgICAgIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKwlzdHJ1Y3Qgdmly dHVhbF9lbmdpbmUgKnZlOworCXVuc2lnbmVkIGludCBuOworCWludCBlcnI7CisKKwlpZiAoIWNv dW50KQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCXZlID0ga3phbGxvYyhzdHJ1Y3Rf c2l6ZSh2ZSwgc2libGluZ3MsIGNvdW50KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF2ZSkKKwkJcmV0 dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwl2ZS0+YmFzZS5pOTE1ID0gY3R4LT5pOTE1OworCXZl LT5iYXNlLmlkID0gLTE7CisJdmUtPmJhc2UuY2xhc3MgPSBPVEhFUl9DTEFTUzsKKwl2ZS0+YmFz ZS51YWJpX2NsYXNzID0gSTkxNV9FTkdJTkVfQ0xBU1NfSU5WQUxJRDsKKwl2ZS0+YmFzZS5pbnN0 YW5jZSA9IEk5MTVfRU5HSU5FX0NMQVNTX0lOVkFMSURfVklSVFVBTDsKKwl2ZS0+YmFzZS5mbGFn cyA9IEk5MTVfRU5HSU5FX0lTX1ZJUlRVQUw7CisKKwlzbnByaW50Zih2ZS0+YmFzZS5uYW1lLCBz aXplb2YodmUtPmJhc2UubmFtZSksICJ2aXJ0dWFsIik7CisKKwllcnIgPSBpOTE1X3RpbWVsaW5l X2luaXQoY3R4LT5pOTE1LAorCQkJCSAmdmUtPmJhc2UudGltZWxpbmUsCisJCQkJIHZlLT5iYXNl Lm5hbWUsCisJCQkJIE5VTEwpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX3B1dDsKKwlpOTE1X3Rp bWVsaW5lX3NldF9zdWJjbGFzcygmdmUtPmJhc2UudGltZWxpbmUsIFRJTUVMSU5FX1ZJUlRVQUwp OworCisJdmUtPmJhc2UuY29wcyA9ICZ2aXJ0dWFsX2NvbnRleHRfb3BzOworCXZlLT5iYXNlLnJl cXVlc3RfYWxsb2MgPSBleGVjbGlzdHNfcmVxdWVzdF9hbGxvYzsKKworCXZlLT5iYXNlLnNjaGVk dWxlID0gaTkxNV9zY2hlZHVsZTsKKwl2ZS0+YmFzZS5zdWJtaXRfcmVxdWVzdCA9IHZpcnR1YWxf c3VibWl0X3JlcXVlc3Q7CisKKwl2ZS0+YmFzZS5leGVjbGlzdHMucXVldWVfcHJpb3JpdHlfaGlu dCA9IElOVF9NSU47CisJdGFza2xldF9pbml0KCZ2ZS0+YmFzZS5leGVjbGlzdHMudGFza2xldCwK KwkJICAgICB2aXJ0dWFsX3N1Ym1pc3Npb25fdGFza2xldCwKKwkJICAgICAodW5zaWduZWQgbG9u Zyl2ZSk7CisKKwlpbnRlbF9jb250ZXh0X2luaXQoJnZlLT5jb250ZXh0LCBjdHgsICZ2ZS0+YmFz ZSk7CisKKwlmb3IgKG4gPSAwOyBuIDwgY291bnQ7IG4rKykgeworCQlzdHJ1Y3QgaW50ZWxfZW5n aW5lX2NzICpzaWJsaW5nID0gc2libGluZ3Nbbl07CisKKwkJR0VNX0JVR19PTighaXNfcG93ZXJf b2ZfMihzaWJsaW5nLT5tYXNrKSk7CisJCWlmIChzaWJsaW5nLT5tYXNrICYgdmUtPmJhc2UubWFz aykKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIFRoZSB2aXJ0dWFsIGVuZ2luZSBpbXBsZW1l bnRhdGlvbiBpcyB0aWdodGx5IGNvdXBsZWQgdG8KKwkJICogdGhlIGV4ZWNsaXN0cyBiYWNrZW5k IC0tIHdlIHB1c2ggb3V0IHJlcXVlc3QgZGlyZWN0bHkKKwkJICogaW50byBhIHRyZWUgaW5zaWRl IGVhY2ggcGh5c2ljYWwgZW5naW5lLiBXZSBjb3VsZCBzdXBwb3J0CisJCSAqIGxheWVyaW5nIGlm IHdlIGhhbmRsaW5nIGNsb25pbmcgb2YgdGhlIHJlcXVlc3RzIGFuZAorCQkgKiBzdWJtaXR0aW5n IGEgY29weSBpbnRvIGVhY2ggYmFja2VuZC4KKwkJICovCisJCWlmIChzaWJsaW5nLT5leGVjbGlz dHMudGFza2xldC5mdW5jICE9CisJCSAgICBleGVjbGlzdHNfc3VibWlzc2lvbl90YXNrbGV0KSB7 CisJCQllcnIgPSAtRU5PREVWOworCQkJZ290byBlcnJfcHV0OworCQl9CisKKwkJR0VNX0JVR19P TihSQl9FTVBUWV9OT0RFKCZ2ZS0+bm9kZXNbc2libGluZy0+aWRdLnJiKSk7CisJCVJCX0NMRUFS X05PREUoJnZlLT5ub2Rlc1tzaWJsaW5nLT5pZF0ucmIpOworCisJCXZlLT5zaWJsaW5nc1t2ZS0+ Y291bnQrK10gPSBzaWJsaW5nOworCQl2ZS0+YmFzZS5tYXNrIHw9IHNpYmxpbmctPm1hc2s7CisK KwkJLyoKKwkJICogQWxsIHBoeXNpY2FsIGVuZ2luZXMgbXVzdCBiZSBjb21wYXRpYmxlIGZvciB0 aGVpciBlbWlzc2lvbgorCQkgKiBmdW5jdGlvbnMgKGFzIHdlIGJ1aWxkIHRoZSBpbnN0cnVjdGlv bnMgZHVyaW5nIHJlcXVlc3QKKwkJICogY29uc3RydWN0aW9uIGFuZCBkbyBub3QgYWx0ZXIgdGhl bSBiZWZvcmUgc3VibWlzc2lvbgorCQkgKiBvbiB0aGUgcGh5c2ljYWwgZW5naW5lKS4gV2UgdXNl IHRoZSBlbmdpbmUgY2xhc3MgYXMgYSBndWlkZQorCQkgKiBoZXJlLCBhbHRob3VnaCB0aGF0IGNv dWxkIGJlIHJlZmluZWQuCisJCSAqLworCQlpZiAodmUtPmJhc2UuY2xhc3MgIT0gT1RIRVJfQ0xB U1MpIHsKKwkJCWlmICh2ZS0+YmFzZS5jbGFzcyAhPSBzaWJsaW5nLT5jbGFzcykgeworCQkJCWVy ciA9IC1FSU5WQUw7CisJCQkJZ290byBlcnJfcHV0OworCQkJfQorCQkJY29udGludWU7CisJCX0K KworCQl2ZS0+YmFzZS5jbGFzcyA9IHNpYmxpbmctPmNsYXNzOworCQlzbnByaW50Zih2ZS0+YmFz ZS5uYW1lLCBzaXplb2YodmUtPmJhc2UubmFtZSksCisJCQkgInYlZHglZCIsIHZlLT5iYXNlLmNs YXNzLCBjb3VudCk7CisJCXZlLT5iYXNlLmNvbnRleHRfc2l6ZSA9IHNpYmxpbmctPmNvbnRleHRf c2l6ZTsKKworCQl2ZS0+YmFzZS5lbWl0X2JiX3N0YXJ0ID0gc2libGluZy0+ZW1pdF9iYl9zdGFy dDsKKwkJdmUtPmJhc2UuZW1pdF9mbHVzaCA9IHNpYmxpbmctPmVtaXRfZmx1c2g7CisJCXZlLT5i YXNlLmVtaXRfaW5pdF9icmVhZGNydW1iID0gc2libGluZy0+ZW1pdF9pbml0X2JyZWFkY3J1bWI7 CisJCXZlLT5iYXNlLmVtaXRfZmluaV9icmVhZGNydW1iID0gc2libGluZy0+ZW1pdF9maW5pX2Jy ZWFkY3J1bWI7CisJCXZlLT5iYXNlLmVtaXRfZmluaV9icmVhZGNydW1iX2R3ID0KKwkJCXNpYmxp bmctPmVtaXRfZmluaV9icmVhZGNydW1iX2R3OworCX0KKworCS8qIGdyYWNlZnVsbHkgcmVwbGFj ZSBhIGRlZ2VuZXJhdGUgdmlydHVhbCBlbmdpbmUgKi8KKwlpZiAodmUtPmNvdW50ID09IDEpIHsK KwkJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqYWN0dWFsID0gdmUtPnNpYmxpbmdzWzBdOworCQlp bnRlbF9jb250ZXh0X3B1dCgmdmUtPmNvbnRleHQpOworCQlyZXR1cm4gYWN0dWFsOworCX0KKwor CV9faW50ZWxfY29udGV4dF9pbnNlcnQoY3R4LCAmdmUtPmJhc2UsICZ2ZS0+Y29udGV4dCk7CisJ cmV0dXJuICZ2ZS0+YmFzZTsKKworZXJyX3B1dDoKKwlpbnRlbF9jb250ZXh0X3B1dCgmdmUtPmNv bnRleHQpOworCXJldHVybiBFUlJfUFRSKGVycik7Cit9CisKK3N0cnVjdCBpbnRlbF9lbmdpbmVf Y3MgKgoraW50ZWxfZXhlY2xpc3RzX2Nsb25lX3ZpcnR1YWwoc3RydWN0IGk5MTVfZ2VtX2NvbnRl eHQgKmN0eCwKKwkJCSAgICAgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnNyYykKK3sKKwlzdHJ1 Y3QgdmlydHVhbF9lbmdpbmUgKnNlID0gdG9fdmlydHVhbF9lbmdpbmUoc3JjKTsKKwlzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICpkc3Q7CisKKwlkc3QgPSBpbnRlbF9leGVjbGlzdHNfY3JlYXRlX3Zp cnR1YWwoY3R4LAorCQkJCQkgICAgIHNlLT5zaWJsaW5ncywKKwkJCQkJICAgICBzZS0+Y291bnQp OworCWlmIChJU19FUlIoZHN0KSkKKwkJcmV0dXJuIGRzdDsKKworCXJldHVybiBkc3Q7Cit9CisK K3ZvaWQgaW50ZWxfdmlydHVhbF9lbmdpbmVfZGVzdHJveShzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICplbmdpbmUpCit7CisJc3RydWN0IHZpcnR1YWxfZW5naW5lICp2ZSA9IHRvX3ZpcnR1YWxfZW5n aW5lKGVuZ2luZSk7CisKKwlpZiAoIWVuZ2luZSB8fCAhaW50ZWxfZW5naW5lX2lzX3ZpcnR1YWwo ZW5naW5lKSkKKwkJcmV0dXJuOworCisJX19pbnRlbF9jb250ZXh0X3JlbW92ZSgmdmUtPmNvbnRl eHQpOworCWludGVsX2NvbnRleHRfcHV0KCZ2ZS0+Y29udGV4dCk7Cit9CisKIHZvaWQgaW50ZWxf ZXhlY2xpc3RzX3Nob3dfcmVxdWVzdHMoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAog CQkJCSAgIHN0cnVjdCBkcm1fcHJpbnRlciAqbSwKIAkJCQkgICB2b2lkICgqc2hvd19yZXF1ZXN0 KShzdHJ1Y3QgZHJtX3ByaW50ZXIgKm0sCkBAIC0yOTU0LDYgKzM0ODMsMjkgQEAgdm9pZCBpbnRl bF9leGVjbGlzdHNfc2hvd19yZXF1ZXN0cyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUs CiAJCXNob3dfcmVxdWVzdChtLCBsYXN0LCAiXHRcdFEgIik7CiAJfQogCisJbGFzdCA9IE5VTEw7 CisJY291bnQgPSAwOworCWZvciAocmIgPSByYl9maXJzdF9jYWNoZWQoJmV4ZWNsaXN0cy0+dmly dHVhbCk7IHJiOyByYiA9IHJiX25leHQocmIpKSB7CisJCXN0cnVjdCB2aXJ0dWFsX2VuZ2luZSAq dmUgPQorCQkJcmJfZW50cnkocmIsIHR5cGVvZigqdmUpLCBub2Rlc1tlbmdpbmUtPmlkXS5yYik7 CisJCXN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxID0gUkVBRF9PTkNFKHZlLT5yZXF1ZXN0KTsKKwor CQlpZiAocnEpIHsKKwkJCWlmIChjb3VudCsrIDwgbWF4IC0gMSkKKwkJCQlzaG93X3JlcXVlc3Qo bSwgcnEsICJcdFx0ViAiKTsKKwkJCWVsc2UKKwkJCQlsYXN0ID0gcnE7CisJCX0KKwl9CisJaWYg KGxhc3QpIHsKKwkJaWYgKGNvdW50ID4gbWF4KSB7CisJCQlkcm1fcHJpbnRmKG0sCisJCQkJICAg Ilx0XHQuLi5za2lwcGluZyAlZCB2aXJ0dWFsIHJlcXVlc3RzLi4uXG4iLAorCQkJCSAgIGNvdW50 IC0gbWF4KTsKKwkJfQorCQlzaG93X3JlcXVlc3QobSwgbGFzdCwgIlx0XHRWICIpOworCX0KKwog CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVuZ2luZS0+dGltZWxpbmUubG9jaywgZmxhZ3MpOwog fQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuaCBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5oCmluZGV4IGYxYWVjOGE2OTg2Zi4uOWQ5MGRjNjhl MDJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuaAorKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuaApAQCAtMTEyLDYgKzExMiwxNyBAQCB2b2lk IGludGVsX2V4ZWNsaXN0c19zaG93X3JlcXVlc3RzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVu Z2luZSwKIAkJCQkJCQljb25zdCBjaGFyICpwcmVmaXgpLAogCQkJCSAgIHVuc2lnbmVkIGludCBt YXgpOwogCitzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICoKK2ludGVsX2V4ZWNsaXN0c19jcmVhdGVf dmlydHVhbChzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4LAorCQkJICAgICAgIHN0cnVjdCBp bnRlbF9lbmdpbmVfY3MgKipzaWJsaW5ncywKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgY291bnQp OworCitzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICoKK2ludGVsX2V4ZWNsaXN0c19jbG9uZV92aXJ0 dWFsKHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgsCisJCQkgICAgICBzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICpzcmMpOworCit2b2lkIGludGVsX3ZpcnR1YWxfZW5naW5lX2Rlc3Ryb3koc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKTsKKwogdTMyIGdlbjhfbWFrZV9ycGNzKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICppOTE1LCBzdHJ1Y3QgaW50ZWxfc3NldSAqY3R4X3NzZXUpOwog CiAjZW5kaWYgLyogX0lOVEVMX0xSQ19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvc2VsZnRlc3RzL2ludGVsX2xyYy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRl c3RzL2ludGVsX2xyYy5jCmluZGV4IDllODcxZWIwYmZiMS4uNmRmMDMzOTYwMzUwIDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaW50ZWxfbHJjLmMKKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2ludGVsX2xyYy5jCkBAIC0xMCw2ICsxMCw3IEBA CiAKICNpbmNsdWRlICIuLi9pOTE1X3NlbGZ0ZXN0LmgiCiAjaW5jbHVkZSAiaWd0X2ZsdXNoX3Rl c3QuaCIKKyNpbmNsdWRlICJpZ3RfbGl2ZV90ZXN0LmgiCiAjaW5jbHVkZSAiaWd0X3NwaW5uZXIu aCIKICNpbmNsdWRlICJpOTE1X3JhbmRvbS5oIgogCkBAIC0xMDU3LDYgKzEwNTgsMTY5IEBAIHN0 YXRpYyBpbnQgbGl2ZV9wcmVlbXB0X3Ntb2tlKHZvaWQgKmFyZykKIAlyZXR1cm4gZXJyOwogfQog CitzdGF0aWMgaW50IG5vcF92aXJ0dWFsX2VuZ2luZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq aTkxNSwKKwkJCSAgICAgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKipzaWJsaW5ncywKKwkJCSAg ICAgIHVuc2lnbmVkIGludCBuc2libGluZywKKwkJCSAgICAgIHVuc2lnbmVkIGludCBuY3R4LAor CQkJICAgICAgdW5zaWduZWQgaW50IGZsYWdzKQorI2RlZmluZSBDSEFJTiBCSVQoMCkKK3sKKwlJ R1RfVElNRU9VVChlbmRfdGltZSk7CisJc3RydWN0IGk5MTVfcmVxdWVzdCAqcmVxdWVzdFsxNl07 CisJc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eFsxNl07CisJc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqdmVbMTZdOworCXVuc2lnbmVkIGxvbmcgbiwgcHJpbWUsIG5jOworCXN0cnVjdCBpZ3Rf bGl2ZV90ZXN0IHQ7CisJa3RpbWVfdCB0aW1lc1syXSA9IHt9OworCWludCBlcnI7CisKKwlHRU1f QlVHX09OKCFuY3R4IHx8IG5jdHggPiBBUlJBWV9TSVpFKGN0eCkpOworCisJZm9yIChuID0gMDsg biA8IG5jdHg7IG4rKykgeworCQljdHhbbl0gPSBrZXJuZWxfY29udGV4dChpOTE1KTsKKwkJaWYg KCFjdHhbbl0pCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQl2ZVtuXSA9IGludGVsX2V4ZWNsaXN0 c19jcmVhdGVfdmlydHVhbChjdHhbbl0sCisJCQkJCQkgICAgICAgc2libGluZ3MsIG5zaWJsaW5n KTsKKwkJaWYgKElTX0VSUih2ZVtuXSkpCisJCQlyZXR1cm4gUFRSX0VSUih2ZVtuXSk7CisJfQor CisJZXJyID0gaWd0X2xpdmVfdGVzdF9iZWdpbigmdCwgaTkxNSwgX19mdW5jX18sIHZlWzBdLT5u YW1lKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCWZvcl9lYWNoX3ByaW1lX251bWJlcl9m cm9tKHByaW1lLCAxLCA4MTkyKSB7CisJCXRpbWVzWzFdID0ga3RpbWVfZ2V0X3JhdygpOworCisJ CWlmIChmbGFncyAmIENIQUlOKSB7CisJCQlmb3IgKG5jID0gMDsgbmMgPCBuY3R4OyBuYysrKSB7 CisJCQkJZm9yIChuID0gMDsgbiA8IHByaW1lOyBuKyspIHsKKwkJCQkJcmVxdWVzdFtuY10gPQor CQkJCQkJaTkxNV9yZXF1ZXN0X2FsbG9jKHZlW25jXSwgY3R4W25jXSk7CisJCQkJCWlmIChJU19F UlIocmVxdWVzdFtuY10pKSB7CisJCQkJCQllcnIgPSBQVFJfRVJSKHJlcXVlc3RbbmNdKTsKKwkJ CQkJCWdvdG8gb3V0OworCQkJCQl9CisKKwkJCQkJaTkxNV9yZXF1ZXN0X2FkZChyZXF1ZXN0W25j XSk7CisJCQkJfQorCQkJfQorCQl9IGVsc2UgeworCQkJZm9yIChuID0gMDsgbiA8IHByaW1lOyBu KyspIHsKKwkJCQlmb3IgKG5jID0gMDsgbmMgPCBuY3R4OyBuYysrKSB7CisJCQkJCXJlcXVlc3Rb bmNdID0KKwkJCQkJCWk5MTVfcmVxdWVzdF9hbGxvYyh2ZVtuY10sIGN0eFtuY10pOworCQkJCQlp ZiAoSVNfRVJSKHJlcXVlc3RbbmNdKSkgeworCQkJCQkJZXJyID0gUFRSX0VSUihyZXF1ZXN0W25j XSk7CisJCQkJCQlnb3RvIG91dDsKKwkJCQkJfQorCisJCQkJCWk5MTVfcmVxdWVzdF9hZGQocmVx dWVzdFtuY10pOworCQkJCX0KKwkJCX0KKwkJfQorCisJCWZvciAobmMgPSAwOyBuYyA8IG5jdHg7 IG5jKyspIHsKKwkJCWlmIChpOTE1X3JlcXVlc3Rfd2FpdChyZXF1ZXN0W25jXSwKKwkJCQkJICAg ICAgSTkxNV9XQUlUX0xPQ0tFRCwKKwkJCQkJICAgICAgSFogLyAxMCkgPCAwKSB7CisJCQkJcHJf ZXJyKCIlcyglcyk6IHdhaXQgZm9yICVsbHg6JWxsZCB0aW1lZCBvdXRcbiIsCisJCQkJICAgICAg IF9fZnVuY19fLCB2ZVswXS0+bmFtZSwKKwkJCQkgICAgICAgcmVxdWVzdFtuY10tPmZlbmNlLmNv bnRleHQsCisJCQkJICAgICAgIHJlcXVlc3RbbmNdLT5mZW5jZS5zZXFubyk7CisKKwkJCQlHRU1f VFJBQ0UoIiVzKCVzKSBmYWlsZWQgYXQgcmVxdWVzdCAlbGx4OiVsbGRcbiIsCisJCQkJCSAgX19m dW5jX18sIHZlWzBdLT5uYW1lLAorCQkJCQkgIHJlcXVlc3RbbmNdLT5mZW5jZS5jb250ZXh0LAor CQkJCQkgIHJlcXVlc3RbbmNdLT5mZW5jZS5zZXFubyk7CisJCQkJR0VNX1RSQUNFX0RVTVAoKTsK KwkJCQlpOTE1X2dlbV9zZXRfd2VkZ2VkKGk5MTUpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisK KwkJdGltZXNbMV0gPSBrdGltZV9zdWIoa3RpbWVfZ2V0X3JhdygpLCB0aW1lc1sxXSk7CisJCWlm IChwcmltZSA9PSAxKQorCQkJdGltZXNbMF0gPSB0aW1lc1sxXTsKKworCQlpZiAoX19pZ3RfdGlt ZW91dChlbmRfdGltZSwgTlVMTCkpCisJCQlicmVhazsKKwl9CisKKwllcnIgPSBpZ3RfbGl2ZV90 ZXN0X2VuZCgmdCk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwlwcl9pbmZvKCJSZXF1ZXN0 eCVkIGxhdGVuY2llcyBvbiAlczogMSA9ICVsbHVucywgJWx1ID0gJWxsdW5zXG4iLAorCQluY3R4 LCB2ZVswXS0+bmFtZSwga3RpbWVfdG9fbnModGltZXNbMF0pLAorCQlwcmltZSwgZGl2NjRfdTY0 KGt0aW1lX3RvX25zKHRpbWVzWzFdKSwgcHJpbWUpKTsKKworb3V0OgorCWlmIChpZ3RfZmx1c2hf dGVzdChpOTE1LCBJOTE1X1dBSVRfTE9DS0VEKSkKKwkJZXJyID0gLUVJTzsKKworCWZvciAobmMg PSAwOyBuYyA8IG5jdHg7IG5jKyspIHsKKwkJaW50ZWxfdmlydHVhbF9lbmdpbmVfZGVzdHJveSh2 ZVtuY10pOworCQlrZXJuZWxfY29udGV4dF9jbG9zZShjdHhbbmNdKTsKKwl9CisJcmV0dXJuIGVy cjsKK30KKworc3RhdGljIGludCBsaXZlX3ZpcnR1YWxfZW5naW5lKHZvaWQgKmFyZykKK3sKKwlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IGFyZzsKKwlzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICpzaWJsaW5nc1tNQVhfRU5HSU5FX0lOU1RBTkNFICsgMV07CisJc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqZW5naW5lOworCWVudW0gaW50ZWxfZW5naW5lX2lkIGlkOworCXVuc2lnbmVkIGlu dCBjbGFzcywgaW5zdDsKKwlpbnQgZXJyID0gLUVOT0RFVjsKKworCWlmIChVU0VTX0dVQ19TVUJN SVNTSU9OKGk5MTUpKQorCQlyZXR1cm4gMDsKKworCW11dGV4X2xvY2soJmk5MTUtPmRybS5zdHJ1 Y3RfbXV0ZXgpOworCisJZm9yX2VhY2hfZW5naW5lKGVuZ2luZSwgaTkxNSwgaWQpIHsKKwkJZXJy ID0gbm9wX3ZpcnR1YWxfZW5naW5lKGk5MTUsICZlbmdpbmUsIDEsIDEsIDApOworCQlpZiAoZXJy KSB7CisJCQlwcl9lcnIoIkZhaWxlZCB0byB3cmFwIGVuZ2luZSAlczogZXJyPSVkXG4iLAorCQkJ ICAgICAgIGVuZ2luZS0+bmFtZSwgZXJyKTsKKwkJCWdvdG8gb3V0X3VubG9jazsKKwkJfQorCX0K KworCWZvciAoY2xhc3MgPSAwOyBjbGFzcyA8PSBNQVhfRU5HSU5FX0NMQVNTOyBjbGFzcysrKSB7 CisJCWludCBuc2libGluZywgbjsKKworCQluc2libGluZyA9IDA7CisJCWZvciAoaW5zdCA9IDA7 IGluc3QgPD0gTUFYX0VOR0lORV9JTlNUQU5DRTsgaW5zdCsrKSB7CisJCQlpZiAoIWk5MTUtPmVu Z2luZV9jbGFzc1tjbGFzc11baW5zdF0pCisJCQkJYnJlYWs7CisKKwkJCXNpYmxpbmdzW25zaWJs aW5nKytdID0gaTkxNS0+ZW5naW5lX2NsYXNzW2NsYXNzXVtpbnN0XTsKKwkJfQorCQlpZiAobnNp YmxpbmcgPCAyKQorCQkJY29udGludWU7CisKKwkJZm9yIChuID0gMTsgbiA8PSBuc2libGluZyAr IDE7IG4rKykgeworCQkJZXJyID0gbm9wX3ZpcnR1YWxfZW5naW5lKGk5MTUsIHNpYmxpbmdzLCBu c2libGluZywKKwkJCQkJCSBuLCAwKTsKKwkJCWlmIChlcnIpCisJCQkJZ290byBvdXRfdW5sb2Nr OworCQl9CisKKwkJZXJyID0gbm9wX3ZpcnR1YWxfZW5naW5lKGk5MTUsIHNpYmxpbmdzLCBuc2li bGluZywgbiwgQ0hBSU4pOworCQlpZiAoZXJyKQorCQkJZ290byBvdXRfdW5sb2NrOworCX0KKwor b3V0X3VubG9jazoKKwltdXRleF91bmxvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOworCXJl dHVybiBlcnI7Cit9CisKIGludCBpbnRlbF9leGVjbGlzdHNfbGl2ZV9zZWxmdGVzdHMoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBpOTE1X3N1 YnRlc3QgdGVzdHNbXSA9IHsKQEAgLTEwNjgsNiArMTIzMiw3IEBAIGludCBpbnRlbF9leGVjbGlz dHNfbGl2ZV9zZWxmdGVzdHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCiAJCVNVQlRF U1QobGl2ZV9jaGFpbl9wcmVlbXB0KSwKIAkJU1VCVEVTVChsaXZlX3ByZWVtcHRfaGFuZyksCiAJ CVNVQlRFU1QobGl2ZV9wcmVlbXB0X3Ntb2tlKSwKKwkJU1VCVEVTVChsaXZlX3ZpcnR1YWxfZW5n aW5lKSwKIAl9OwogCiAJaWYgKCFIQVNfRVhFQ0xJU1RTKGk5MTUpKQpkaWZmIC0tZ2l0IGEvaW5j bHVkZS91YXBpL2RybS9pOTE1X2RybS5oIGIvaW5jbHVkZS91YXBpL2RybS9pOTE1X2RybS5oCmlu ZGV4IDhlZjZkNjA5MjljNi4uOWM5NGMwMzdkMTNiIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkv ZHJtL2k5MTVfZHJtLmgKKysrIGIvaW5jbHVkZS91YXBpL2RybS9pOTE1X2RybS5oCkBAIC0xMjcs NiArMTI3LDcgQEAgZW51bSBkcm1faTkxNV9nZW1fZW5naW5lX2NsYXNzIHsKIH07CiAKICNkZWZp bmUgSTkxNV9FTkdJTkVfQ0xBU1NfSU5WQUxJRF9OT05FIC0xCisjZGVmaW5lIEk5MTVfRU5HSU5F X0NMQVNTX0lOVkFMSURfVklSVFVBTCAwCiAKIC8qKgogICogRE9DOiBwZXJmX2V2ZW50cyBleHBv c2VkIGJ5IGk5MTUgdGhyb3VnaCAvc3lzL2J1cy9ldmVudF9zb3VyY2VzL2RyaXZlcnMvaTkxNQpA QCAtMTU5OCw4ICsxNTk5LDM3IEBAIHN0cnVjdCBkcm1faTkxNV9nZW1fY29udGV4dF9wYXJhbV9z c2V1IHsKIAlfX3UzMiByc3ZkOwogfTsKIAorLyoKKyAqIGk5MTVfY29udGV4dF9lbmdpbmVzX2xv YWRfYmFsYW5jZToKKyAqCisgKiBFbmFibGUgbG9hZCBiYWxhbmNpbmcgYWNyb3NzIHRoaXMgc2V0 IG9mIGVuZ2luZXMuCisgKgorICogSW50byB0aGUgSTkxNV9FWEVDX0RFRkFVTFQgc2xvdCBbMF0s IGEgdmlydHVhbCBlbmdpbmUgaXMgY3JlYXRlZCB0aGF0IHdoZW4KKyAqIHVzZWQgd2lsbCBwcm94 eSB0aGUgZXhlY2J1ZmZlciByZXF1ZXN0IG9udG8gb25lIG9mIHRoZSBzZXQgb2YgZW5naW5lcwor ICogaW4gc3VjaCBhIHdheSBhcyB0byBkaXN0cmlidXRlIHRoZSBsb2FkIGV2ZW5seSBhY3Jvc3Mg dGhlIHNldC4KKyAqCisgKiBUaGUgc2V0IG9mIGVuZ2luZXMgbXVzdCBiZSBjb21wYXRpYmxlIChl LmcuIHRoZSBzYW1lIEhXIGNsYXNzKSBhcyB0aGV5CisgKiB3aWxsIHNoYXJlIHRoZSBzYW1lIGxv Z2ljYWwgR1BVIGNvbnRleHQgYW5kIHJpbmcuCisgKgorICogVG8gaW50ZXJtaXggcmVuZGVyaW5n IHdpdGggdGhlIHZpcnR1YWwgZW5naW5lIGFuZCBkaXJlY3QgcmVuZGVyaW5nIG9udG8KKyAqIHRo ZSBiYWNraW5nIGVuZ2luZXMgKGJ5cGFzc2luZyB0aGUgbG9hZCBiYWxhbmNpbmcgcHJveHkpLCB0 aGUgY29udGV4dCBtdXN0CisgKiBiZSBkZWZpbmVkIHRvIHVzZSBhIHNpbmdsZSB0aW1lbGluZSBm b3IgYWxsIGVuZ2luZXMuCisgKi8KK3N0cnVjdCBpOTE1X2NvbnRleHRfZW5naW5lc19sb2FkX2Jh bGFuY2UgeworCXN0cnVjdCBpOTE1X3VzZXJfZXh0ZW5zaW9uIGJhc2U7CisKKwlfX3UxNiBlbmdp bmVfaW5kZXg7CisJX191MTYgbWJ6MTY7IC8qIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlOyBtdXN0 IGJlIHplcm8gKi8KKwlfX3UzMiBmbGFnczsgLyogYWxsIHVuZGVmaW5lZCBmbGFncyBtdXN0IGJl IHplcm8gKi8KKworCV9fdTY0IGVuZ2luZXNfbWFzazsgLyogc2VsZWN0aW9uIG1hc2sgb2YgZW5n aW5lc1tdICovCisKKwlfX3U2NCBtYno2NFs0XTsgLyogcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2U7 IG11c3QgYmUgemVybyAqLworfTsKKwogc3RydWN0IGk5MTVfY29udGV4dF9wYXJhbV9lbmdpbmVz IHsKIAlfX3U2NCBleHRlbnNpb25zOyAvKiBsaW5rZWQgY2hhaW4gb2YgZXh0ZW5zaW9uIGJsb2Nr cywgMCB0ZXJtaW5hdGVzICovCisjZGVmaW5lIEk5MTVfQ09OVEVYVF9FTkdJTkVTX0VYVF9MT0FE X0JBTEFOQ0UgMAogCiAJc3RydWN0IHsKIAkJX191MTYgZW5naW5lX2NsYXNzOyAvKiBzZWUgZW51 bSBkcm1faTkxNV9nZW1fZW5naW5lX2NsYXNzICovCi0tIAoyLjIwLjEKCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QK SW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9w Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeA==