From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: [PATCH 23/43] drm/i915: Load balancing across a virtual engine Date: Wed, 6 Mar 2019 14:24:57 +0000 Message-ID: <20190306142517.22558-24-chris@chris-wilson.co.uk> References: <20190306142517.22558-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 0891C6E0B5 for ; Wed, 6 Mar 2019 14:27:17 +0000 (UTC) In-Reply-To: <20190306142517.22558-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 Cc: matthew.auld@intel.com 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 ZXRzIGV0Yy4KClNpZ25lZC1vZmYtYnk6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29u LmNvLnVrPgpDYzogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KLS0t CiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5oICAgICAgICAgICAgfCAgIDUgKwogZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4dC5jICAgIHwgMTUzICsrKysrLQogZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zY2hlZHVsZXIuYyAgICAgIHwgIDE3ICstCiBkcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X3RpbWVsaW5lX3R5cGVzLmggfCAgIDEgKwogZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfZW5naW5lX3R5cGVzLmggIHwgICA4ICsKIGRyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2xyYy5jICAgICAgICAgICB8IDUyMSArKysrKysrKysrKysrKysrKysrKy0KIGRy aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5oICAgICAgICAgICB8ICAxMSArCiBkcml2ZXJz L2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaW50ZWxfbHJjLmMgfCAxNjUgKysrKysrKwogaW5jbHVk ZS91YXBpL2RybS9pOTE1X2RybS5oICAgICAgICAgICAgICAgIHwgIDMwICsrCiA5IGZpbGVzIGNo YW5nZWQsIDg5NSBpbnNlcnRpb25zKCspLCAxNiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9nZW0uaAppbmRleCBiMGU0Yjk3Njg4MGMuLjk5MDVmY2RkMzNjOCAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2dlbS5oCkBAIC04OSw0ICs4OSw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBfX3Rhc2tsZXRf aXNfZW5hYmxlZChjb25zdCBzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpCiAJcmV0dXJuICFhdG9t aWNfcmVhZCgmdC0+Y291bnQpOwogfQogCitzdGF0aWMgaW5saW5lIGJvb2wgX190YXNrbGV0X2lz X3NjaGVkdWxlZChzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpCit7CisJcmV0dXJuIHRlc3RfYml0 KFRBU0tMRVRfU1RBVEVfU0NIRUQsICZ0LT5zdGF0ZSk7Cit9CisKICNlbmRpZiAvKiBfX0k5MTVf R0VNX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29u dGV4dC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4dC5jCmluZGV4IDM1 NTQxZjk5YjM3ZC4uYWE4MDc2YzA2MDA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2dlbV9jb250ZXh0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1f Y29udGV4dC5jCkBAIC04NiwxMiArODYsMTYgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbG9n Mi5oPgorI2luY2x1ZGUgPGxpbnV4L25vc3BlYy5oPgorCiAjaW5jbHVkZSA8ZHJtL2k5MTVfZHJt Lmg+CisKICNpbmNsdWRlICJpOTE1X2Rydi5oIgogI2luY2x1ZGUgImk5MTVfZ2xvYmFscy5oIgog I2luY2x1ZGUgImk5MTVfdHJhY2UuaCIKICNpbmNsdWRlICJpOTE1X3VzZXJfZXh0ZW5zaW9ucy5o IgogI2luY2x1ZGUgImludGVsX2xyY19yZWcuaCIKKyNpbmNsdWRlICJpbnRlbF9scmMuaCIKICNp bmNsdWRlICJpbnRlbF93b3JrYXJvdW5kcy5oIgogCiAjZGVmaW5lIEFMTF9MM19TTElDRVMoZGV2 KSAoMSA8PCBOVU1fTDNfU0xJQ0VTKGRldikpIC0gMQpAQCAtMjM4LDYgKzI0MiwyMCBAQCBzdGF0 aWMgdm9pZCByZWxlYXNlX2h3X2lkKHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgpCiAJbXV0 ZXhfdW5sb2NrKCZpOTE1LT5jb250ZXh0cy5tdXRleCk7CiB9CiAKK3N0YXRpYyB2b2lkIGZyZWVf ZW5naW5lcyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICoqZW5naW5lcywgaW50IGNvdW50KQorewor CWludCBpOworCisJaWYgKCFlbmdpbmVzKQorCQlyZXR1cm47CisKKwkvKiBXZSBvd24gdGhlIHZl bmcgd2UgY3JlYXRlZDsgcmVndWxhciBlbmdpbmVzIGFyZSBpZ25vcmVkICovCisJZm9yIChpID0g MDsgaSA8IGNvdW50OyBpKyspCisJCWludGVsX3ZpcnR1YWxfZW5naW5lX2Rlc3Ryb3koZW5naW5l c1tpXSk7CisKKwlrZnJlZShlbmdpbmVzKTsKK30KKwogc3RhdGljIHZvaWQgaTkxNV9nZW1fY29u dGV4dF9mcmVlKHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgpCiB7CiAJc3RydWN0IGludGVs X2NvbnRleHQgKml0LCAqbjsKQEAgLTI0OCw4ICsyNjYsNyBAQCBzdGF0aWMgdm9pZCBpOTE1X2dl bV9jb250ZXh0X2ZyZWUoc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCkKIAogCXJlbGVhc2Vf aHdfaWQoY3R4KTsKIAlpOTE1X3BwZ3R0X3B1dChjdHgtPnBwZ3R0KTsKLQotCWtmcmVlKGN0eC0+ ZW5naW5lcyk7CisJZnJlZV9lbmdpbmVzKGN0eC0+ZW5naW5lcywgY3R4LT5uZW5naW5lKTsKIAog CXJidHJlZV9wb3N0b3JkZXJfZm9yX2VhY2hfZW50cnlfc2FmZShpdCwgbiwgJmN0eC0+aHdfY29u dGV4dHMsIG5vZGUpCiAJCWl0LT5vcHMtPmRlc3Ryb3koaXQpOwpAQCAtMTM0MCwxMyArMTM1Nywx MTYgQEAgc3RhdGljIGludCBzZXRfc3NldShzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4LAog CXJldHVybiAwOwogfTsKIAorc3RhdGljIGludCBjaGVja191c2VyX21iejE2KHUxNiBfX3VzZXIg KnVzZXIpCit7CisJdTE2IG1iejsKKworCWlmIChnZXRfdXNlcihtYnosIHVzZXIpKQorCQlyZXR1 cm4gLUVGQVVMVDsKKworCXJldHVybiBtYnogPyAtRUlOVkFMIDogMDsKK30KKworc3RhdGljIGlu dCBjaGVja191c2VyX21iejMyKHUzMiBfX3VzZXIgKnVzZXIpCit7CisJdTMyIG1iejsKKworCWlm IChnZXRfdXNlcihtYnosIHVzZXIpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldHVybiBtYnog PyAtRUlOVkFMIDogMDsKK30KKworc3RhdGljIGludCBjaGVja191c2VyX21iejY0KHU2NCBfX3Vz ZXIgKnVzZXIpCit7CisJdTY0IG1iejsKKworCWlmIChnZXRfdXNlcihtYnosIHVzZXIpKQorCQly ZXR1cm4gLUVGQVVMVDsKKworCXJldHVybiBtYnogPyAtRUlOVkFMIDogMDsKK30KKwogc3RydWN0 IHNldF9lbmdpbmVzIHsKIAlzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4OwogCXN0cnVjdCBp bnRlbF9lbmdpbmVfY3MgKiplbmdpbmVzOwogCXVuc2lnbmVkIGludCBuZW5naW5lOwogfTsKIAor c3RhdGljIGludAorc2V0X2VuZ2luZXNfX2xvYWRfYmFsYW5jZShzdHJ1Y3QgaTkxNV91c2VyX2V4 dGVuc2lvbiBfX3VzZXIgKmJhc2UsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGk5MTVfY29udGV4 dF9lbmdpbmVzX2xvYWRfYmFsYW5jZSBfX3VzZXIgKmV4dCA9CisJCWNvbnRhaW5lcl9vZl91c2Vy KGJhc2UsIHR5cGVvZigqZXh0KSwgYmFzZSk7CisJY29uc3Qgc3RydWN0IHNldF9lbmdpbmVzICpz ZXQgPSBkYXRhOworCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnZlOworCXVuc2lnbmVkIGludCBu OworCXU2NCBtYXNrOworCXUxNiBpZHg7CisJaW50IGVycjsKKworCWlmICghSEFTX0VYRUNMSVNU UyhzZXQtPmN0eC0+aTkxNSkpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKFVTRVNfR1VDX1NV Qk1JU1NJT04oc2V0LT5jdHgtPmk5MTUpKQorCQlyZXR1cm4gLUVOT0RFVjsgLyogbm90IGltcGxl bWVudCB5ZXQgKi8KKworCWlmIChnZXRfdXNlcihpZHgsICZleHQtPmVuZ2luZV9pbmRleCkpCisJ CXJldHVybiAtRUZBVUxUOworCisJaWYgKGlkeCA+PSBzZXQtPm5lbmdpbmUpCisJCXJldHVybiAt RUlOVkFMOworCisJaWR4ID0gYXJyYXlfaW5kZXhfbm9zcGVjKGlkeCwgc2V0LT5uZW5naW5lKTsK KwlpZiAoc2V0LT5lbmdpbmVzW2lkeF0pCisJCXJldHVybiAtRUVYSVNUOworCisJZXJyID0gY2hl Y2tfdXNlcl9tYnoxNigmZXh0LT5tYnoxNik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwor CWVyciA9IGNoZWNrX3VzZXJfbWJ6MzIoJmV4dC0+ZmxhZ3MpOworCWlmIChlcnIpCisJCXJldHVy biBlcnI7CisKKwlmb3IgKG4gPSAwOyBuIDwgQVJSQVlfU0laRShleHQtPm1iejY0KTsgbisrKSB7 CisJCWVyciA9IGNoZWNrX3VzZXJfbWJ6NjQoJmV4dC0+bWJ6NjRbbl0pOworCQlpZiAoZXJyKQor CQkJcmV0dXJuIGVycjsKKwl9CisKKwlpZiAoZ2V0X3VzZXIobWFzaywgJmV4dC0+ZW5naW5lc19t YXNrKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwltYXNrICY9IEdFTk1BU0tfVUxMKHNldC0+bmVu Z2luZSAtIDEsIDApICYgfkJJVF9VTEwoaWR4KTsKKwlpZiAoIW1hc2spCisJCXJldHVybiAtRUlO VkFMOworCisJaWYgKGlzX3Bvd2VyX29mXzIobWFzaykpIHsKKwkJdmUgPSBzZXQtPmVuZ2luZXNb X19mZnM2NChtYXNrKV07CisJfSBlbHNlIHsKKwkJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqc3Rh Y2tbNjRdOworCQlpbnQgYml0OworCisJCW4gPSAwOworCQlmb3JfZWFjaF9zZXRfYml0KGJpdCwg KHVuc2lnbmVkIGxvbmcgKikmbWFzaywgc2V0LT5uZW5naW5lKQorCQkJc3RhY2tbbisrXSA9IHNl dC0+ZW5naW5lc1tiaXRdOworCisJCXZlID0gaW50ZWxfZXhlY2xpc3RzX2NyZWF0ZV92aXJ0dWFs KHNldC0+Y3R4LCBzdGFjaywgbik7CisJfQorCWlmIChJU19FUlIodmUpKQorCQlyZXR1cm4gUFRS X0VSUih2ZSk7CisKKwlpZiAoY21weGNoZygmc2V0LT5lbmdpbmVzW2lkeF0sIE5VTEwsIHZlKSkg eworCQlpbnRlbF92aXJ0dWFsX2VuZ2luZV9kZXN0cm95KHZlKTsKKwkJcmV0dXJuIC1FRVhJU1Q7 CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBjb25zdCBpOTE1X3VzZXJfZXh0ZW5zaW9u X2ZuIHNldF9lbmdpbmVzX19leHRlbnNpb25zW10gPSB7CisJW0k5MTVfQ09OVEVYVF9FTkdJTkVT X0VYVF9MT0FEX0JBTEFOQ0VdID0gc2V0X2VuZ2luZXNfX2xvYWRfYmFsYW5jZSwKIH07CiAKIHN0 YXRpYyBpbnQKQEAgLTE0MDcsMTMgKzE1MjcsMTMgQEAgc2V0X2VuZ2luZXMoc3RydWN0IGk5MTVf Z2VtX2NvbnRleHQgKmN0eCwKIAkJCQkJICAgQVJSQVlfU0laRShzZXRfZW5naW5lc19fZXh0ZW5z aW9ucyksCiAJCQkJCSAgICZzZXQpOwogCWlmIChlcnIpIHsKLQkJa2ZyZWUoc2V0LmVuZ2luZXMp OworCQlmcmVlX2VuZ2luZXMoc2V0LmVuZ2luZXMsIHNldC5uZW5naW5lKTsKIAkJcmV0dXJuIGVy cjsKIAl9CiAKIG91dDoKIAltdXRleF9sb2NrKCZjdHgtPmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgp OwotCWtmcmVlKGN0eC0+ZW5naW5lcyk7CisJZnJlZV9lbmdpbmVzKGN0eC0+ZW5naW5lcywgY3R4 LT5uZW5naW5lKTsKIAljdHgtPmVuZ2luZXMgPSBzZXQuZW5naW5lczsKIAljdHgtPm5lbmdpbmUg PSBzZXQubmVuZ2luZTsKIAltdXRleF91bmxvY2soJmN0eC0+aTkxNS0+ZHJtLnN0cnVjdF9tdXRl eCk7CkBAIC0xNjE4LDYgKzE3MzgsNyBAQCBzdGF0aWMgaW50IGNsb25lX2VuZ2luZXMoc3RydWN0 IGk5MTVfZ2VtX2NvbnRleHQgKmRzdCwKIAkJCSBzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqc3Jj KQogewogCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKiplbmdpbmVzOworCWludCBpOwogCiAJZW5n aW5lcyA9IGttZW1kdXAoc3JjLT5lbmdpbmVzLAogCQkJICBzaXplb2YoKnNyYy0+ZW5naW5lcykg KiBzcmMtPm5lbmdpbmUsCkBAIC0xNjI1LDYgKzE3NDYsMzAgQEAgc3RhdGljIGludCBjbG9uZV9l bmdpbmVzKHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpkc3QsCiAJaWYgKCFlbmdpbmVzKQogCQly ZXR1cm4gLUVOT01FTTsKIAorCS8qCisJICogVmlydHVhbCBlbmdpbmVzIGFyZSBzaW5nbGV0b25z OyB0aGV5IGNhbiBvbmx5IGV4aXN0CisJICogaW5zaWRlIGEgc2luZ2xlIGNvbnRleHQsIGJlY2F1 c2UgdGhleSBlbWJlZCB0aGVpcgorCSAqIEhXIGNvbnRleHQuLi4gQXMgZWFjaCB2aXJ0dWFsIGNv bnRleHQgaW1wbGllcyBhIHNpbmdsZQorCSAqIHRpbWVsaW5lIChlYWNoIGVuZ2luZSBjYW4gb25s eSBkZXF1ZXVlIGEgc2luZ2xlIHJlcXVlc3QKKwkgKiBhdCBhbnkgdGltZSksIGl0IHdvdWxkIGJl IHN1cnByaXNpbmcgZm9yIHR3byBjb250ZXh0cworCSAqIHRvIHVzZSB0aGUgc2FtZSBlbmdpbmUu IFNvIGxldCdzIGNyZWF0ZSBhIGNvcHkgb2YKKwkgKiB0aGUgdmlydHVhbCBlbmdpbmUgaW5zdGVh ZC4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc3JjLT5uZW5naW5lOyBpKyspIHsKKwkJc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqZW5naW5lID0gZW5naW5lc1tpXTsKKworCQlpZiAoIWludGVsX2Vu Z2luZV9pc192aXJ0dWFsKGVuZ2luZSkpCisJCQljb250aW51ZTsKKworCQllbmdpbmUgPSBpbnRl bF9leGVjbGlzdHNfY2xvbmVfdmlydHVhbChkc3QsIGVuZ2luZSk7CisJCWlmIChJU19FUlIoZW5n aW5lKSkgeworCQkJZnJlZV9lbmdpbmVzKGVuZ2luZXMsIGkpOworCQkJcmV0dXJuIFBUUl9FUlIo ZW5naW5lKTsKKwkJfQorCisJCWVuZ2luZXNbaV0gPSBlbmdpbmU7CisJfQorCiAJZHN0LT5lbmdp bmVzID0gZW5naW5lczsKIAlkc3QtPm5lbmdpbmUgPSBzcmMtPm5lbmdpbmU7CiAJcmV0dXJuIDA7 CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3NjaGVkdWxlci5jIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zY2hlZHVsZXIuYwppbmRleCBlMGY2MDlkMDE1NjQuLmJi OTgxOWRiZTMxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zY2hlZHVs ZXIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3NjaGVkdWxlci5jCkBAIC0yNDcs MTcgKzI0NywyNSBAQCBzY2hlZF9sb2NrX2VuZ2luZShjb25zdCBzdHJ1Y3QgaTkxNV9zY2hlZF9u b2RlICpub2RlLAogCQkgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmxvY2tlZCwKIAkJICBzdHJ1 Y3Qgc2NoZWRfY2FjaGUgKmNhY2hlKQogewotCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2lu ZSA9IG5vZGVfdG9fcmVxdWVzdChub2RlKS0+ZW5naW5lOworCWNvbnN0IHN0cnVjdCBpOTE1X3Jl cXVlc3QgKnJxID0gbm9kZV90b19yZXF1ZXN0KG5vZGUpOworCXN0cnVjdCBpbnRlbF9lbmdpbmVf Y3MgKmVuZ2luZTsKIAogCUdFTV9CVUdfT04oIWxvY2tlZCk7CiAKLQlpZiAoZW5naW5lICE9IGxv Y2tlZCkgeworCS8qCisJICogVmlydHVhbCBlbmdpbmVzIGNvbXBsaWNhdGUgYWNxdWlyaW5nIHRo ZSBlbmdpbmUgdGltZWxpbmUgbG9jaywKKwkgKiBhcyB0aGVpciBycS0+ZW5naW5lIHBvaW50ZXIg aXMgbm90IHN0YWJsZSB1bnRpbCB1bmRlciB0aGF0CisJICogZW5naW5lIGxvY2suIFRoZSBzaW1w bGUgcGxveSB3ZSB1c2UgaXMgdG8gdGFrZSB0aGUgbG9jayB0aGVuCisJICogY2hlY2sgdGhhdCB0 aGUgcnEgc3RpbGwgYmVsb25ncyB0byB0aGUgbmV3bHkgbG9ja2VkIGVuZ2luZS4KKwkgKi8KKwl3 aGlsZSAobG9ja2VkICE9IChlbmdpbmUgPSBSRUFEX09OQ0UocnEtPmVuZ2luZSkpKSB7CiAJCXNw aW5fdW5sb2NrKCZsb2NrZWQtPnRpbWVsaW5lLmxvY2spOwogCQltZW1zZXQoY2FjaGUsIDAsIHNp emVvZigqY2FjaGUpKTsKIAkJc3Bpbl9sb2NrKCZlbmdpbmUtPnRpbWVsaW5lLmxvY2spOworCQls b2NrZWQgPSBlbmdpbmU7CiAJfQogCi0JcmV0dXJuIGVuZ2luZTsKKwlyZXR1cm4gbG9ja2VkOwog fQogCiBzdGF0aWMgYm9vbCBpbmZsaWdodChjb25zdCBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwK QEAgLTM3MCw4ICszNzgsMTEgQEAgc3RhdGljIHZvaWQgX19pOTE1X3NjaGVkdWxlKHN0cnVjdCBp OTE1X3JlcXVlc3QgKnJxLAogCQlpZiAocHJpbyA8PSBub2RlLT5hdHRyLnByaW9yaXR5IHx8IG5v ZGVfc2lnbmFsZWQobm9kZSkpCiAJCQljb250aW51ZTsKIAorCQlHRU1fQlVHX09OKG5vZGVfdG9f cmVxdWVzdChub2RlKS0+ZW5naW5lICE9IGVuZ2luZSk7CisKIAkJbm9kZS0+YXR0ci5wcmlvcml0 eSA9IHByaW87CiAJCWlmICghbGlzdF9lbXB0eSgmbm9kZS0+bGluaykpIHsKKwkJCUdFTV9CVUdf T04oaW50ZWxfZW5naW5lX2lzX3ZpcnR1YWwoZW5naW5lKSk7CiAJCQlpZiAoIWNhY2hlLnByaW9s aXN0KQogCQkJCWNhY2hlLnByaW9saXN0ID0KIAkJCQkJaTkxNV9zY2hlZF9sb29rdXBfcHJpb2xp c3QoZW5naW5lLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV90aW1lbGlu ZV90eXBlcy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV90aW1lbGluZV90eXBlcy5oCmlu ZGV4IDhmZjE0NmRjMDViYS4uNWU0NDVmMTQ1ZWIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X3RpbWVsaW5lX3R5cGVzLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV90aW1lbGluZV90eXBlcy5oCkBAIC0yNSw2ICsyNSw3IEBAIHN0cnVjdCBpOTE1X3RpbWVs aW5lIHsKIAlzcGlubG9ja190IGxvY2s7CiAjZGVmaW5lIFRJTUVMSU5FX0NMSUVOVCAwIC8qIGRl ZmF1bHQgc3ViY2xhc3MgKi8KICNkZWZpbmUgVElNRUxJTkVfRU5HSU5FIDEKKyNkZWZpbmUgVElN RUxJTkVfVklSVFVBTCAyCiAJc3RydWN0IG11dGV4IG11dGV4OyAvKiBwcm90ZWN0cyB0aGUgZmxv dyBvZiByZXF1ZXN0cyAqLwogCiAJdW5zaWduZWQgaW50IHBpbl9jb3VudDsKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2VuZ2luZV90eXBlcy5oIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfZW5naW5lX3R5cGVzLmgKaW5kZXggYjBhYTFmMGQ0ZTQ3Li5kNTRkMmEx ODQwY2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2VuZ2luZV90eXBl cy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2VuZ2luZV90eXBlcy5oCkBAIC0y MTYsNiArMjE2LDcgQEAgc3RydWN0IGludGVsX2VuZ2luZV9leGVjbGlzdHMgewogCSAqIEBxdWV1 ZTogcXVldWUgb2YgcmVxdWVzdHMsIGluIHByaW9yaXR5IGxpc3RzCiAJICovCiAJc3RydWN0IHJi X3Jvb3RfY2FjaGVkIHF1ZXVlOworCXN0cnVjdCByYl9yb290X2NhY2hlZCB2aXJ0dWFsOwogCiAJ LyoqCiAJICogQGNzYl93cml0ZTogY29udHJvbCByZWdpc3RlciBmb3IgQ29udGV4dCBTd2l0Y2gg YnVmZmVyCkBAIC00MjEsNiArNDIyLDcgQEAgc3RydWN0IGludGVsX2VuZ2luZV9jcyB7CiAjZGVm aW5lIEk5MTVfRU5HSU5FX1NVUFBPUlRTX1NUQVRTICAgQklUKDEpCiAjZGVmaW5lIEk5MTVfRU5H SU5FX0hBU19QUkVFTVBUSU9OICAgQklUKDIpCiAjZGVmaW5lIEk5MTVfRU5HSU5FX0hBU19TRU1B UEhPUkVTICAgQklUKDMpCisjZGVmaW5lIEk5MTVfRU5HSU5FX0lTX1ZJUlRVQUwgICAgICAgQklU KDQpCiAJdW5zaWduZWQgaW50IGZsYWdzOwogCiAJLyoKQEAgLTUwNCw2ICs1MDYsMTIgQEAgaW50 ZWxfZW5naW5lX2hhc19zZW1hcGhvcmVzKGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVu Z2luZSkKIAlyZXR1cm4gZW5naW5lLT5mbGFncyAmIEk5MTVfRU5HSU5FX0hBU19TRU1BUEhPUkVT OwogfQogCitzdGF0aWMgaW5saW5lIGJvb2wKK2ludGVsX2VuZ2luZV9pc192aXJ0dWFsKGNvbnN0 IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKK3sKKwlyZXR1cm4gZW5naW5lLT5mbGFn cyAmIEk5MTVfRU5HSU5FX0lTX1ZJUlRVQUw7Cit9CisKICNkZWZpbmUgaW5zdGRvbmVfc2xpY2Vf bWFzayhkZXZfcHJpdl9fKSBcCiAJKElTX0dFTihkZXZfcHJpdl9fLCA3KSA/IFwKIAkgMSA6IFJV TlRJTUVfSU5GTyhkZXZfcHJpdl9fKS0+c3NldS5zbGljZV9tYXNrKQpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9scmMuYwppbmRleCA3YjkzOGVhZmY5YzUuLjBjOTdlOGYzMDIyMyAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfbHJjLmMKQEAgLTE2Niw2ICsxNjYsMjggQEAKIAogI2RlZmluZSBBQ1RJVkVfUFJJT1JJ VFkgKEk5MTVfUFJJT1JJVFlfTkVXQ0xJRU5UIHwgSTkxNV9QUklPUklUWV9OT1NFTUFQSE9SRSkK IAorc3RydWN0IHZpcnR1YWxfZW5naW5lIHsKKwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzIGJhc2U7 CisKKwlzdHJ1Y3QgaW50ZWxfY29udGV4dCBjb250ZXh0OworCXN0cnVjdCBrcmVmIGtyZWY7CisJ c3RydWN0IHJjdV9oZWFkIHJjdTsKKworCXN0cnVjdCBpOTE1X3JlcXVlc3QgKnJlcXVlc3Q7CisJ c3RydWN0IHZlX25vZGUgeworCQlzdHJ1Y3QgcmJfbm9kZSByYjsKKwkJaW50IHByaW87CisJfSBu b2Rlc1tJOTE1X05VTV9FTkdJTkVTXTsKKworCXVuc2lnbmVkIGludCBjb3VudDsKKwlzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICpzaWJsaW5nc1swXTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgdmlydHVh bF9lbmdpbmUgKnRvX3ZpcnR1YWxfZW5naW5lKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2lu ZSkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGVuZ2luZSwgc3RydWN0IHZpcnR1YWxfZW5naW5l LCBiYXNlKTsKK30KKwogc3RhdGljIGludCBleGVjbGlzdHNfY29udGV4dF9kZWZlcnJlZF9hbGxv YyhzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UsCiAJCQkJCSAgICBzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICplbmdpbmUpOwogc3RhdGljIHZvaWQgZXhlY2xpc3RzX2luaXRfcmVnX3N0YXRlKHUzMiAq cmVnX3N0YXRlLApAQCAtMjM1LDcgKzI1Nyw4IEBAIHN0YXRpYyBpbnQgcXVldWVfcHJpbyhjb25z dCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2V4ZWNsaXN0cyAqZXhlY2xpc3RzKQogfQogCiBzdGF0aWMg aW5saW5lIGJvb2wgbmVlZF9wcmVlbXB0KGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVu Z2luZSwKLQkJCQljb25zdCBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSkKKwkJCQljb25zdCBzdHJ1 Y3QgaTkxNV9yZXF1ZXN0ICpycSwKKwkJCQlzdHJ1Y3QgcmJfbm9kZSAqcmIpCiB7CiAJaW50IGxh c3RfcHJpbzsKIApAQCAtMjcwLDYgKzI5MywyMiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbmVlZF9w cmVlbXB0KGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKIAkgICAgcnFfcHJp byhsaXN0X25leHRfZW50cnkocnEsIGxpbmspKSA+IGxhc3RfcHJpbykKIAkJcmV0dXJuIHRydWU7 CiAKKwlpZiAocmIpIHsgLyogWFhYIHZpcnR1YWwgcHJlY2VkZW5jZSAqLworCQlzdHJ1Y3Qgdmly dHVhbF9lbmdpbmUgKnZlID0KKwkJCXJiX2VudHJ5KHJiLCB0eXBlb2YoKnZlKSwgbm9kZXNbZW5n aW5lLT5pZF0ucmIpOworCQlib29sIHByZWVtcHQgPSBmYWxzZTsKKworCQlpZiAoZW5naW5lID09 IHZlLT5zaWJsaW5nc1swXSkgeyAvKiBvbmx5IHByZWVtcHQgb25lIHNpYmxpbmcgKi8KKwkJCXNw aW5fbG9jaygmdmUtPmJhc2UudGltZWxpbmUubG9jayk7CisJCQlpZiAodmUtPnJlcXVlc3QpCisJ CQkJcHJlZW1wdCA9IHJxX3ByaW8odmUtPnJlcXVlc3QpID4gbGFzdF9wcmlvOworCQkJc3Bpbl91 bmxvY2soJnZlLT5iYXNlLnRpbWVsaW5lLmxvY2spOworCQl9CisKKwkJaWYgKHByZWVtcHQpCisJ CQlyZXR1cm4gcHJlZW1wdDsKKwl9CisKIAkvKgogCSAqIElmIHRoZSBpbmZsaWdodCBjb250ZXh0 IGRpZCBub3QgdHJpZ2dlciB0aGUgcHJlZW1wdGlvbiwgdGhlbiBtYXliZQogCSAqIGl0IHdhcyB0 aGUgc2V0IG9mIHF1ZXVlZCByZXF1ZXN0cz8gUGljayB0aGUgaGlnaGVzdCBwcmlvcml0eSBpbgpA QCAtMzg4LDYgKzQyNyw4IEBAIF9fdW53aW5kX2luY29tcGxldGVfcmVxdWVzdHMoc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqZW5naW5lKQogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZV9yZXZlcnNl KHJxLCBybiwKIAkJCQkJICZlbmdpbmUtPnRpbWVsaW5lLnJlcXVlc3RzLAogCQkJCQkgbGluaykg eworCQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpvd25lcjsKKwogCQlpZiAoaTkxNV9yZXF1ZXN0 X2NvbXBsZXRlZChycSkpCiAJCQlicmVhazsKIApAQCAtMzk2LDE0ICs0MzcsMjMgQEAgX191bndp bmRfaW5jb21wbGV0ZV9yZXF1ZXN0cyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCiAK IAkJR0VNX0JVR19PTihycS0+aHdfY29udGV4dC0+YWN0aXZlKTsKIAotCQlHRU1fQlVHX09OKHJx X3ByaW8ocnEpID09IEk5MTVfUFJJT1JJVFlfSU5WQUxJRCk7Ci0JCWlmIChycV9wcmlvKHJxKSAh PSBwcmlvKSB7Ci0JCQlwcmlvID0gcnFfcHJpbyhycSk7Ci0JCQlwbCA9IGk5MTVfc2NoZWRfbG9v a3VwX3ByaW9saXN0KGVuZ2luZSwgcHJpbyk7Ci0JCX0KLQkJR0VNX0JVR19PTihSQl9FTVBUWV9S T09UKCZlbmdpbmUtPmV4ZWNsaXN0cy5xdWV1ZS5yYl9yb290KSk7CisJCW93bmVyID0gcnEtPmh3 X2NvbnRleHQtPmVuZ2luZTsKKwkJaWYgKGxpa2VseShvd25lciA9PSBlbmdpbmUpKSB7CisJCQlH RU1fQlVHX09OKHJxX3ByaW8ocnEpID09IEk5MTVfUFJJT1JJVFlfSU5WQUxJRCk7CisJCQlpZiAo cnFfcHJpbyhycSkgIT0gcHJpbykgeworCQkJCXByaW8gPSBycV9wcmlvKHJxKTsKKwkJCQlwbCA9 IGk5MTVfc2NoZWRfbG9va3VwX3ByaW9saXN0KGVuZ2luZSwgcHJpbyk7CisJCQl9CisJCQlHRU1f QlVHX09OKFJCX0VNUFRZX1JPT1QoJmVuZ2luZS0+ZXhlY2xpc3RzLnF1ZXVlLnJiX3Jvb3QpKTsK KworCQkJbGlzdF9hZGQoJnJxLT5zY2hlZC5saW5rLCBwbCk7CisJCX0gZWxzZSB7CisJCQlpZiAo X19pOTE1X3JlcXVlc3RfaGFzX3N0YXJ0ZWQocnEpKQorCQkJCXJxLT5zY2hlZC5hdHRyLnByaW9y aXR5IHw9IEFDVElWRV9QUklPUklUWTsKIAotCQlsaXN0X2FkZCgmcnEtPnNjaGVkLmxpbmssIHBs KTsKKwkJCXJxLT5lbmdpbmUgPSBvd25lcjsKKwkJCW93bmVyLT5zdWJtaXRfcmVxdWVzdChycSk7 CisJCX0KIAogCQlhY3RpdmUgPSBycTsKIAl9CkBAIC02NjUsNiArNzE1LDUwIEBAIHN0YXRpYyB2 b2lkIGNvbXBsZXRlX3ByZWVtcHRfY29udGV4dChzdHJ1Y3QgaW50ZWxfZW5naW5lX2V4ZWNsaXN0 cyAqZXhlY2xpc3RzKQogCQkJCQkJICBleGVjbGlzdHMpKTsKIH0KIAorc3RhdGljIHZvaWQgdmly dHVhbF91cGRhdGVfcmVnaXN0ZXJfb2Zmc2V0cyh1MzIgKnJlZ3MsCisJCQkJCSAgICBzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICplbmdpbmUpCit7CisJdTMyIGJhc2UgPSBlbmdpbmUtPm1taW9fYmFz ZTsKKworCXJlZ3NbQ1RYX0NPTlRFWFRfQ09OVFJPTF0gPQorCQlpOTE1X21taW9fcmVnX29mZnNl dChSSU5HX0NPTlRFWFRfQ09OVFJPTChlbmdpbmUpKTsKKwlyZWdzW0NUWF9SSU5HX0hFQURdID0g aTkxNV9tbWlvX3JlZ19vZmZzZXQoUklOR19IRUFEKGJhc2UpKTsKKwlyZWdzW0NUWF9SSU5HX1RB SUxdID0gaTkxNV9tbWlvX3JlZ19vZmZzZXQoUklOR19UQUlMKGJhc2UpKTsKKwlyZWdzW0NUWF9S SU5HX0JVRkZFUl9TVEFSVF0gPSBpOTE1X21taW9fcmVnX29mZnNldChSSU5HX1NUQVJUKGJhc2Up KTsKKwlyZWdzW0NUWF9SSU5HX0JVRkZFUl9DT05UUk9MXSA9IGk5MTVfbW1pb19yZWdfb2Zmc2V0 KFJJTkdfQ1RMKGJhc2UpKTsKKworCXJlZ3NbQ1RYX0JCX0hFQURfVV0gPSBpOTE1X21taW9fcmVn X29mZnNldChSSU5HX0JCQUREUl9VRFcoYmFzZSkpOworCXJlZ3NbQ1RYX0JCX0hFQURfTF0gPSBp OTE1X21taW9fcmVnX29mZnNldChSSU5HX0JCQUREUihiYXNlKSk7CisJcmVnc1tDVFhfQkJfU1RB VEVdID0gaTkxNV9tbWlvX3JlZ19vZmZzZXQoUklOR19CQlNUQVRFKGJhc2UpKTsKKwlyZWdzW0NU WF9TRUNPTkRfQkJfSEVBRF9VXSA9CisJCWk5MTVfbW1pb19yZWdfb2Zmc2V0KFJJTkdfU0JCQURE Ul9VRFcoYmFzZSkpOworCXJlZ3NbQ1RYX1NFQ09ORF9CQl9IRUFEX0xdID0gaTkxNV9tbWlvX3Jl Z19vZmZzZXQoUklOR19TQkJBRERSKGJhc2UpKTsKKwlyZWdzW0NUWF9TRUNPTkRfQkJfU1RBVEVd ID0gaTkxNV9tbWlvX3JlZ19vZmZzZXQoUklOR19TQkJTVEFURShiYXNlKSk7CisKKwlyZWdzW0NU WF9DVFhfVElNRVNUQU1QXSA9CisJCWk5MTVfbW1pb19yZWdfb2Zmc2V0KFJJTkdfQ1RYX1RJTUVT VEFNUChiYXNlKSk7CisJcmVnc1tDVFhfUERQM19VRFddID0gaTkxNV9tbWlvX3JlZ19vZmZzZXQo R0VOOF9SSU5HX1BEUF9VRFcoZW5naW5lLCAzKSk7CisJcmVnc1tDVFhfUERQM19MRFddID0gaTkx NV9tbWlvX3JlZ19vZmZzZXQoR0VOOF9SSU5HX1BEUF9MRFcoZW5naW5lLCAzKSk7CisJcmVnc1tD VFhfUERQMl9VRFddID0gaTkxNV9tbWlvX3JlZ19vZmZzZXQoR0VOOF9SSU5HX1BEUF9VRFcoZW5n aW5lLCAyKSk7CisJcmVnc1tDVFhfUERQMl9MRFddID0gaTkxNV9tbWlvX3JlZ19vZmZzZXQoR0VO OF9SSU5HX1BEUF9MRFcoZW5naW5lLCAyKSk7CisJcmVnc1tDVFhfUERQMV9VRFddID0gaTkxNV9t bWlvX3JlZ19vZmZzZXQoR0VOOF9SSU5HX1BEUF9VRFcoZW5naW5lLCAxKSk7CisJcmVnc1tDVFhf UERQMV9MRFddID0gaTkxNV9tbWlvX3JlZ19vZmZzZXQoR0VOOF9SSU5HX1BEUF9MRFcoZW5naW5l LCAxKSk7CisJcmVnc1tDVFhfUERQMF9VRFddID0gaTkxNV9tbWlvX3JlZ19vZmZzZXQoR0VOOF9S SU5HX1BEUF9VRFcoZW5naW5lLCAwKSk7CisJcmVnc1tDVFhfUERQMF9MRFddID0gaTkxNV9tbWlv X3JlZ19vZmZzZXQoR0VOOF9SSU5HX1BEUF9MRFcoZW5naW5lLCAwKSk7CisKKwlpZiAoZW5naW5l LT5jbGFzcyA9PSBSRU5ERVJfQ0xBU1MpIHsKKwkJcmVnc1tDVFhfUkNTX0lORElSRUNUX0NUWF0g PQorCQkJaTkxNV9tbWlvX3JlZ19vZmZzZXQoUklOR19JTkRJUkVDVF9DVFgoYmFzZSkpOworCQly ZWdzW0NUWF9SQ1NfSU5ESVJFQ1RfQ1RYX09GRlNFVF0gPQorCQkJaTkxNV9tbWlvX3JlZ19vZmZz ZXQoUklOR19JTkRJUkVDVF9DVFhfT0ZGU0VUKGJhc2UpKTsKKwkJcmVnc1tDVFhfQkJfUEVSX0NU WF9QVFJdID0KKwkJCWk5MTVfbW1pb19yZWdfb2Zmc2V0KFJJTkdfQkJfUEVSX0NUWF9QVFIoYmFz ZSkpOworCisJCXJlZ3NbQ1RYX1JfUFdSX0NMS19TVEFURV0gPQorCQkJaTkxNV9tbWlvX3JlZ19v ZmZzZXQoR0VOOF9SX1BXUl9DTEtfU1RBVEUpOworCX0KK30KKwogc3RhdGljIHZvaWQgZXhlY2xp c3RzX2RlcXVldWUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQogewogCXN0cnVjdCBp bnRlbF9lbmdpbmVfZXhlY2xpc3RzICogY29uc3QgZXhlY2xpc3RzID0gJmVuZ2luZS0+ZXhlY2xp c3RzOwpAQCAtNjk3LDYgKzc5MSwyOCBAQCBzdGF0aWMgdm9pZCBleGVjbGlzdHNfZGVxdWV1ZShz dHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCiAJICogYW5kIGNvbnRleHQgc3dpdGNoZXMp IHN1Ym1pc3Npb24uCiAJICovCiAKKwlmb3IgKHJiID0gcmJfZmlyc3RfY2FjaGVkKCZleGVjbGlz dHMtPnZpcnR1YWwpOyByYjsgKSB7CisJCXN0cnVjdCB2aXJ0dWFsX2VuZ2luZSAqdmUgPQorCQkJ cmJfZW50cnkocmIsIHR5cGVvZigqdmUpLCBub2Rlc1tlbmdpbmUtPmlkXS5yYik7CisJCXN0cnVj dCBpOTE1X3JlcXVlc3QgKnJxID0gUkVBRF9PTkNFKHZlLT5yZXF1ZXN0KTsKKwkJc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqYWN0aXZlOworCisJCWlmICghcnEpIHsKKwkJCXJiX2VyYXNlX2NhY2hl ZChyYiwgJmV4ZWNsaXN0cy0+dmlydHVhbCk7CisJCQlSQl9DTEVBUl9OT0RFKHJiKTsKKwkJCXJi ID0gcmJfZmlyc3RfY2FjaGVkKCZleGVjbGlzdHMtPnZpcnR1YWwpOworCQkJY29udGludWU7CisJ CX0KKworCQlhY3RpdmUgPSBSRUFEX09OQ0UodmUtPmNvbnRleHQuYWN0aXZlKTsKKwkJaWYgKGFj dGl2ZSAmJiBhY3RpdmUgIT0gZW5naW5lKSB7CisJCQlyYiA9IHJiX25leHQocmIpOworCQkJY29u dGludWU7CisJCX0KKworCQlicmVhazsKKwl9CisKIAlpZiAobGFzdCkgewogCQkvKgogCQkgKiBE b24ndCByZXN1Ym1pdCBvciBzd2l0Y2ggdW50aWwgYWxsIG91dHN0YW5kaW5nCkBAIC03MTgsNyAr ODM0LDcgQEAgc3RhdGljIHZvaWQgZXhlY2xpc3RzX2RlcXVldWUoc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqZW5naW5lKQogCQlpZiAoIWV4ZWNsaXN0c19pc19hY3RpdmUoZXhlY2xpc3RzLCBFWEVD TElTVFNfQUNUSVZFX0hXQUNLKSkKIAkJCXJldHVybjsKIAotCQlpZiAobmVlZF9wcmVlbXB0KGVu Z2luZSwgbGFzdCkpIHsKKwkJaWYgKG5lZWRfcHJlZW1wdChlbmdpbmUsIGxhc3QsIHJiKSkgewog CQkJaW5qZWN0X3ByZWVtcHRfY29udGV4dChlbmdpbmUpOwogCQkJcmV0dXJuOwogCQl9CkBAIC03 NTgsNiArODc0LDcyIEBAIHN0YXRpYyB2b2lkIGV4ZWNsaXN0c19kZXF1ZXVlKHN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKmVuZ2luZSkKIAkJbGFzdC0+dGFpbCA9IGxhc3QtPndhX3RhaWw7CiAJfQog CisJd2hpbGUgKHJiKSB7IC8qIFhYWCB2aXJ0dWFsIGlzIGFsd2F5cyB0YWtpbmcgcHJlY2VkZW5j ZSAqLworCQlzdHJ1Y3QgdmlydHVhbF9lbmdpbmUgKnZlID0KKwkJCXJiX2VudHJ5KHJiLCB0eXBl b2YoKnZlKSwgbm9kZXNbZW5naW5lLT5pZF0ucmIpOworCQlzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpy cTsKKworCQlzcGluX2xvY2soJnZlLT5iYXNlLnRpbWVsaW5lLmxvY2spOworCisJCXJxID0gdmUt PnJlcXVlc3Q7CisJCWlmICh1bmxpa2VseSghcnEpKSB7IC8qIGxvc3QgdGhlIHJhY2UgdG8gYSBz aWJsaW5nICovCisJCQlzcGluX3VubG9jaygmdmUtPmJhc2UudGltZWxpbmUubG9jayk7CisJCQly Yl9lcmFzZV9jYWNoZWQocmIsICZleGVjbGlzdHMtPnZpcnR1YWwpOworCQkJUkJfQ0xFQVJfTk9E RShyYik7CisJCQlyYiA9IHJiX2ZpcnN0X2NhY2hlZCgmZXhlY2xpc3RzLT52aXJ0dWFsKTsKKwkJ CWNvbnRpbnVlOworCQl9CisKKwkJaWYgKHJxX3ByaW8ocnEpID49IHF1ZXVlX3ByaW8oZXhlY2xp c3RzKSkgeworCQkJaWYgKGxhc3QgJiYgIWNhbl9tZXJnZV9ycShsYXN0LCBycSkpIHsKKwkJCQlz cGluX3VubG9jaygmdmUtPmJhc2UudGltZWxpbmUubG9jayk7CisJCQkJcmV0dXJuOyAvKiBsZWF2 ZSB0aGlzIHJxIGZvciBhbm90aGVyIGVuZ2luZSAqLworCQkJfQorCisJCQlHRU1fQlVHX09OKHJx LT5lbmdpbmUgIT0gJnZlLT5iYXNlKTsKKwkJCXZlLT5yZXF1ZXN0ID0gTlVMTDsKKwkJCXZlLT5i YXNlLmV4ZWNsaXN0cy5xdWV1ZV9wcmlvcml0eV9oaW50ID0gSU5UX01JTjsKKwkJCXJiX2VyYXNl X2NhY2hlZChyYiwgJmV4ZWNsaXN0cy0+dmlydHVhbCk7CisJCQlSQl9DTEVBUl9OT0RFKHJiKTsK KworCQkJR0VNX0JVR19PTihycS0+aHdfY29udGV4dCAhPSAmdmUtPmNvbnRleHQpOworCQkJcnEt PmVuZ2luZSA9IGVuZ2luZTsKKworCQkJaWYgKGVuZ2luZSAhPSB2ZS0+c2libGluZ3NbMF0pIHsK KwkJCQl1MzIgKnJlZ3MgPSB2ZS0+Y29udGV4dC5scmNfcmVnX3N0YXRlOworCQkJCXVuc2lnbmVk IGludCBuOworCisJCQkJR0VNX0JVR19PTihSRUFEX09OQ0UodmUtPmNvbnRleHQuYWN0aXZlKSk7 CisJCQkJdmlydHVhbF91cGRhdGVfcmVnaXN0ZXJfb2Zmc2V0cyhyZWdzLCBlbmdpbmUpOworCisJ CQkJLyoKKwkJCQkgKiBNb3ZlIHRoZSBib3VuZCBlbmdpbmUgdG8gdGhlIHRvcCBvZiB0aGUgbGlz dAorCQkJCSAqIGZvciBmdXR1cmUgZXhlY3V0aW9uLiBXZSB0aGVuIGtpY2sgdGhpcworCQkJCSAq IHRhc2tsZXQgZmlyc3QgYmVmb3JlIGNoZWNraW5nIG90aGVycywgc28gdGhhdAorCQkJCSAqIHdl IHByZWZlcmVudGlhbGx5IHJldXNlIHRoaXMgc2V0IG9mIGJvdW5kCisJCQkJICogcmVnaXN0ZXJz LgorCQkJCSAqLworCQkJCWZvciAobiA9IDE7IG4gPCB2ZS0+Y291bnQ7IG4rKykgeworCQkJCQlp ZiAodmUtPnNpYmxpbmdzW25dID09IGVuZ2luZSkgeworCQkJCQkJc3dhcCh2ZS0+c2libGluZ3Nb bl0sCisJCQkJCQkgICAgIHZlLT5zaWJsaW5nc1swXSk7CisJCQkJCQlicmVhazsKKwkJCQkJfQor CQkJCX0KKworCQkJCUdFTV9CVUdfT04odmUtPnNpYmxpbmdzWzBdICE9IGVuZ2luZSk7CisJCQl9 CisKKwkJCV9faTkxNV9yZXF1ZXN0X3N1Ym1pdChycSk7CisJCQl0cmFjZV9pOTE1X3JlcXVlc3Rf aW4ocnEsIHBvcnRfaW5kZXgocG9ydCwgZXhlY2xpc3RzKSk7CisJCQlzdWJtaXQgPSB0cnVlOwor CQkJbGFzdCA9IHJxOworCQl9CisKKwkJc3Bpbl91bmxvY2soJnZlLT5iYXNlLnRpbWVsaW5lLmxv Y2spOworCQlicmVhazsKKwl9CisKIAl3aGlsZSAoKHJiID0gcmJfZmlyc3RfY2FjaGVkKCZleGVj bGlzdHMtPnF1ZXVlKSkpIHsKIAkJc3RydWN0IGk5MTVfcHJpb2xpc3QgKnAgPSB0b19wcmlvbGlz dChyYik7CiAJCXN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLCAqcm47CkBAIC0yOTA0LDYgKzMwODYs MzA0IEBAIHZvaWQgaW50ZWxfbHJfY29udGV4dF9yZXN1bWUoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmk5MTUpCiAJfQogfQogCitzdGF0aWMgdm9pZCBfX3ZpcnR1YWxfZW5naW5lX2ZyZWUoc3Ry dWN0IHJjdV9oZWFkICpyY3UpCit7CisJc3RydWN0IHZpcnR1YWxfZW5naW5lICp2ZSA9IGNvbnRh aW5lcl9vZihyY3UsIHR5cGVvZigqdmUpLCByY3UpOworCisJa2ZyZWUodmUpOworfQorCitzdGF0 aWMgdm9pZCB2aXJ0dWFsX2VuZ2luZV9mcmVlKHN0cnVjdCBrcmVmICprcmVmKQoreworCXN0cnVj dCB2aXJ0dWFsX2VuZ2luZSAqdmUgPSBjb250YWluZXJfb2Yoa3JlZiwgdHlwZW9mKCp2ZSksIGty ZWYpOworCXVuc2lnbmVkIGludCBuOworCisJR0VNX0JVR19PTih2ZS0+cmVxdWVzdCk7CisJR0VN X0JVR19PTih2ZS0+Y29udGV4dC5hY3RpdmUpOworCisJZm9yIChuID0gMDsgbiA8IHZlLT5jb3Vu dDsgbisrKSB7CisJCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnNpYmxpbmcgPSB2ZS0+c2libGlu Z3Nbbl07CisJCXN0cnVjdCByYl9ub2RlICpub2RlID0gJnZlLT5ub2Rlc1tzaWJsaW5nLT5pZF0u cmI7CisKKwkJaWYgKFJCX0VNUFRZX05PREUobm9kZSkpCisJCQljb250aW51ZTsKKworCQlzcGlu X2xvY2tfaXJxKCZzaWJsaW5nLT50aW1lbGluZS5sb2NrKTsKKworCQlpZiAoIVJCX0VNUFRZX05P REUobm9kZSkpCisJCQlyYl9lcmFzZV9jYWNoZWQobm9kZSwgJnNpYmxpbmctPmV4ZWNsaXN0cy52 aXJ0dWFsKTsKKworCQlzcGluX3VubG9ja19pcnEoJnNpYmxpbmctPnRpbWVsaW5lLmxvY2spOwor CX0KKwlHRU1fQlVHX09OKF9fdGFza2xldF9pc19zY2hlZHVsZWQoJnZlLT5iYXNlLmV4ZWNsaXN0 cy50YXNrbGV0KSk7CisKKwlpZiAodmUtPmNvbnRleHQuc3RhdGUpCisJCV9fZXhlY2xpc3RzX2Nv bnRleHRfZmluaSgmdmUtPmNvbnRleHQpOworCisJaTkxNV90aW1lbGluZV9maW5pKCZ2ZS0+YmFz ZS50aW1lbGluZSk7CisJY2FsbF9yY3UoJnZlLT5yY3UsIF9fdmlydHVhbF9lbmdpbmVfZnJlZSk7 Cit9CisKK3N0YXRpYyB2b2lkIHZpcnR1YWxfY29udGV4dF91bnBpbihzdHJ1Y3QgaW50ZWxfY29u dGV4dCAqY2UpCit7CisJc3RydWN0IHZpcnR1YWxfZW5naW5lICp2ZSA9IGNvbnRhaW5lcl9vZihj ZSwgdHlwZW9mKCp2ZSksIGNvbnRleHQpOworCisJZXhlY2xpc3RzX2NvbnRleHRfdW5waW4oY2Up OworCisJa3JlZl9wdXQoJnZlLT5rcmVmLCB2aXJ0dWFsX2VuZ2luZV9mcmVlKTsKK30KKworc3Rh dGljIHZvaWQgdmlydHVhbF9lbmdpbmVfaW5pdGlhbF9oaW50KHN0cnVjdCB2aXJ0dWFsX2VuZ2lu ZSAqdmUpCit7CisJaW50IHN3cDsKKworCS8qCisJICogUGljayBhIHJhbmRvbSBzaWJsaW5nIG9u IHN0YXJ0aW5nIHRvIGhlbHAgc3ByZWFkIHRoZSBsb2FkIGFyb3VuZC4KKwkgKgorCSAqIE5ldyBj b250ZXh0cyBhcmUgdHlwaWNhbGx5IGNyZWF0ZWQgd2l0aCBleGFjdGx5IHRoZSBzYW1lIG9yZGVy CisJICogb2Ygc2libGluZ3MsIGFuZCBvZnRlbiBzdGFydGVkIGluIGJhdGNoZXMuIER1ZSB0byB0 aGUgd2F5IHdlIGl0ZXJhdGUKKwkgKiB0aGUgYXJyYXkgb2Ygc2libGluZyB3aGVuIHN1Ym1pdHRp bmcgcmVxdWVzdHMsIHNpYmxpbmdbMF0gaXMKKwkgKiBwcmlvcml0aXNlZCBmb3IgZGVxdWV1aW5n LiBJZiB3ZSBtYWtlIHN1cmUgdGhhdCBzaWJsaW5nWzBdIGlzIGZhaXJseQorCSAqIHJhbmRvbWlz ZWQgYWNyb3NzIHRoZSBzeXN0ZW0sIHdlIGFsc28gaGVscCBzcHJlYWQgdGhlIGxvYWQgYnkgdGhl CisJICogZmlyc3QgZW5naW5lIHdlIGluc3BlY3QgYmVpbmcgZGlmZmVyZW50IGVhY2ggdGltZS4K KwkgKgorCSAqIE5CIFRoaXMgZG9lcyBub3QgZm9yY2UgdXMgdG8gZXhlY3V0ZSBvbiB0aGlzIGVu Z2luZSwgaXQgd2lsbCBqdXN0CisJICogdHlwaWNhbGx5IGJlIHRoZSBmaXJzdCB3ZSBpbnNwZWN0 IGZvciBzdWJtaXNzaW9uLgorCSAqLworCXN3cCA9IHByYW5kb21fdTMyX21heCh2ZS0+Y291bnQp OworCWlmICghc3dwKQorCQlyZXR1cm47CisKKwlzd2FwKHZlLT5zaWJsaW5nc1tzd3BdLCB2ZS0+ c2libGluZ3NbMF0pOworCXZpcnR1YWxfdXBkYXRlX3JlZ2lzdGVyX29mZnNldHModmUtPmNvbnRl eHQubHJjX3JlZ19zdGF0ZSwKKwkJCQkJdmUtPnNpYmxpbmdzWzBdKTsKK30KKworc3RhdGljIGlu dCB2aXJ0dWFsX2NvbnRleHRfcGluKHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSkKK3sKKwlzdHJ1 Y3QgdmlydHVhbF9lbmdpbmUgKnZlID0gY29udGFpbmVyX29mKGNlLCB0eXBlb2YoKnZlKSwgY29u dGV4dCk7CisJaW50IGVycjsKKworCS8qIE5vdGU6IHdlIG11c3QgdXNlIGEgcmVhbCBlbmdpbmUg Y2xhc3MgZm9yIHNldHRpbmcgdXAgcmVnIHN0YXRlICovCisJZXJyID0gX19leGVjbGlzdHNfY29u dGV4dF9waW4oY2UsIHZlLT5zaWJsaW5nc1swXSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsK KworCXZpcnR1YWxfZW5naW5lX2luaXRpYWxfaGludCh2ZSk7CisKKwlrcmVmX2dldCgmdmUtPmty ZWYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGludGVsX2NvbnRleHRf b3BzIHZpcnR1YWxfY29udGV4dF9vcHMgPSB7CisJLnBpbiA9IHZpcnR1YWxfY29udGV4dF9waW4s CisJLnVucGluID0gdmlydHVhbF9jb250ZXh0X3VucGluLAorfTsKKworc3RhdGljIHZvaWQgdmly dHVhbF9zdWJtaXNzaW9uX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCB2 aXJ0dWFsX2VuZ2luZSAqIGNvbnN0IHZlID0gKHN0cnVjdCB2aXJ0dWFsX2VuZ2luZSAqKWRhdGE7 CisJdW5zaWduZWQgaW50IG47CisJaW50IHByaW87CisKKwlwcmlvID0gUkVBRF9PTkNFKHZlLT5i YXNlLmV4ZWNsaXN0cy5xdWV1ZV9wcmlvcml0eV9oaW50KTsKKwlpZiAocHJpbyA9PSBJTlRfTUlO KQorCQlyZXR1cm47CisKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCWZvciAobiA9IDA7IFJFQURf T05DRSh2ZS0+cmVxdWVzdCkgJiYgbiA8IHZlLT5jb3VudDsgbisrKSB7CisJCXN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKnNpYmxpbmcgPSB2ZS0+c2libGluZ3Nbbl07CisJCXN0cnVjdCB2ZV9ub2Rl ICogY29uc3Qgbm9kZSA9ICZ2ZS0+bm9kZXNbc2libGluZy0+aWRdOworCQlzdHJ1Y3QgcmJfbm9k ZSAqKnBhcmVudCwgKnJiOworCQlib29sIGZpcnN0OworCisJCXNwaW5fbG9jaygmc2libGluZy0+ dGltZWxpbmUubG9jayk7CisKKwkJaWYgKCFSQl9FTVBUWV9OT0RFKCZub2RlLT5yYikpIHsKKwkJ CWZpcnN0ID0gcmJfZmlyc3RfY2FjaGVkKCZzaWJsaW5nLT5leGVjbGlzdHMudmlydHVhbCkgPT0g Jm5vZGUtPnJiOworCQkJaWYgKHByaW8gPT0gbm9kZS0+cHJpbyB8fCAocHJpbyA+IG5vZGUtPnBy aW8gJiYgZmlyc3QpKQorCQkJCWdvdG8gc3VibWl0X2VuZ2luZTsKKworCQkJcmJfZXJhc2VfY2Fj aGVkKCZub2RlLT5yYiwgJnNpYmxpbmctPmV4ZWNsaXN0cy52aXJ0dWFsKTsKKwkJfQorCisJCXJi ID0gTlVMTDsKKwkJZmlyc3QgPSB0cnVlOworCQlwYXJlbnQgPSAmc2libGluZy0+ZXhlY2xpc3Rz LnZpcnR1YWwucmJfcm9vdC5yYl9ub2RlOworCQl3aGlsZSAoKnBhcmVudCkgeworCQkJc3RydWN0 IHZlX25vZGUgKm90aGVyOworCisJCQlyYiA9ICpwYXJlbnQ7CisJCQlvdGhlciA9IHJiX2VudHJ5 KHJiLCB0eXBlb2YoKm90aGVyKSwgcmIpOworCQkJaWYgKHByaW8gPiBvdGhlci0+cHJpbykgewor CQkJCXBhcmVudCA9ICZyYi0+cmJfbGVmdDsKKwkJCX0gZWxzZSB7CisJCQkJcGFyZW50ID0gJnJi LT5yYl9yaWdodDsKKwkJCQlmaXJzdCA9IGZhbHNlOworCQkJfQorCQl9CisKKwkJcmJfbGlua19u b2RlKCZub2RlLT5yYiwgcmIsIHBhcmVudCk7CisJCXJiX2luc2VydF9jb2xvcl9jYWNoZWQoJm5v ZGUtPnJiLAorCQkJCSAgICAgICAmc2libGluZy0+ZXhlY2xpc3RzLnZpcnR1YWwsCisJCQkJICAg ICAgIGZpcnN0KTsKKworc3VibWl0X2VuZ2luZToKKwkJR0VNX0JVR19PTihSQl9FTVBUWV9OT0RF KCZub2RlLT5yYikpOworCQlub2RlLT5wcmlvID0gcHJpbzsKKwkJaWYgKGZpcnN0ICYmIHByaW8g PiBzaWJsaW5nLT5leGVjbGlzdHMucXVldWVfcHJpb3JpdHlfaGludCkgeworCQkJc2libGluZy0+ ZXhlY2xpc3RzLnF1ZXVlX3ByaW9yaXR5X2hpbnQgPSBwcmlvOworCQkJdGFza2xldF9oaV9zY2hl ZHVsZSgmc2libGluZy0+ZXhlY2xpc3RzLnRhc2tsZXQpOworCQl9CisKKwkJc3Bpbl91bmxvY2so JnNpYmxpbmctPnRpbWVsaW5lLmxvY2spOworCX0KKwlsb2NhbF9pcnFfZW5hYmxlKCk7Cit9CisK K3N0YXRpYyB2b2lkIHZpcnR1YWxfc3VibWl0X3JlcXVlc3Qoc3RydWN0IGk5MTVfcmVxdWVzdCAq cmVxdWVzdCkKK3sKKwlzdHJ1Y3QgdmlydHVhbF9lbmdpbmUgKnZlID0gdG9fdmlydHVhbF9lbmdp bmUocmVxdWVzdC0+ZW5naW5lKTsKKworCUdFTV9CVUdfT04odmUtPmJhc2Uuc3VibWl0X3JlcXVl c3QgIT0gdmlydHVhbF9zdWJtaXRfcmVxdWVzdCk7CisKKwlHRU1fQlVHX09OKHZlLT5yZXF1ZXN0 KTsKKwl2ZS0+YmFzZS5leGVjbGlzdHMucXVldWVfcHJpb3JpdHlfaGludCA9IHJxX3ByaW8ocmVx dWVzdCk7CisJV1JJVEVfT05DRSh2ZS0+cmVxdWVzdCwgcmVxdWVzdCk7CisKKwl0YXNrbGV0X3Nj aGVkdWxlKCZ2ZS0+YmFzZS5leGVjbGlzdHMudGFza2xldCk7Cit9CisKK3N0cnVjdCBpbnRlbF9l bmdpbmVfY3MgKgoraW50ZWxfZXhlY2xpc3RzX2NyZWF0ZV92aXJ0dWFsKHN0cnVjdCBpOTE1X2dl bV9jb250ZXh0ICpjdHgsCisJCQkgICAgICAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqKnNpYmxp bmdzLAorCQkJICAgICAgIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKwlzdHJ1Y3QgdmlydHVhbF9l bmdpbmUgKnZlOworCXVuc2lnbmVkIGludCBuOworCWludCBlcnI7CisKKwlpZiAoIWNvdW50KQor CQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCXZlID0ga3phbGxvYyhzdHJ1Y3Rfc2l6ZSh2 ZSwgc2libGluZ3MsIGNvdW50KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF2ZSkKKwkJcmV0dXJuIEVS Ul9QVFIoLUVOT01FTSk7CisKKwlrcmVmX2luaXQoJnZlLT5rcmVmKTsKKwlyY3VfaGVhZF9pbml0 KCZ2ZS0+cmN1KTsKKwl2ZS0+YmFzZS5pOTE1ID0gY3R4LT5pOTE1OworCXZlLT5iYXNlLmlkID0g LTE7CisJdmUtPmJhc2UuY2xhc3MgPSBPVEhFUl9DTEFTUzsKKwl2ZS0+YmFzZS51YWJpX2NsYXNz ID0gSTkxNV9FTkdJTkVfQ0xBU1NfSU5WQUxJRDsKKwl2ZS0+YmFzZS5pbnN0YW5jZSA9IEk5MTVf RU5HSU5FX0NMQVNTX0lOVkFMSURfVklSVFVBTDsKKwl2ZS0+YmFzZS5mbGFncyA9IEk5MTVfRU5H SU5FX0lTX1ZJUlRVQUw7CisKKwlzbnByaW50Zih2ZS0+YmFzZS5uYW1lLCBzaXplb2YodmUtPmJh c2UubmFtZSksICJ2aXJ0dWFsIik7CisKKwllcnIgPSBpOTE1X3RpbWVsaW5lX2luaXQoY3R4LT5p OTE1LAorCQkJCSAmdmUtPmJhc2UudGltZWxpbmUsCisJCQkJIHZlLT5iYXNlLm5hbWUsCisJCQkJ IE5VTEwpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX3B1dDsKKwlpOTE1X3RpbWVsaW5lX3NldF9z dWJjbGFzcygmdmUtPmJhc2UudGltZWxpbmUsIFRJTUVMSU5FX1ZJUlRVQUwpOworCisJdmUtPmJh c2UuY29wcyA9ICZ2aXJ0dWFsX2NvbnRleHRfb3BzOworCXZlLT5iYXNlLnJlcXVlc3RfYWxsb2Mg PSBleGVjbGlzdHNfcmVxdWVzdF9hbGxvYzsKKworCXZlLT5iYXNlLnNjaGVkdWxlID0gaTkxNV9z Y2hlZHVsZTsKKwl2ZS0+YmFzZS5zdWJtaXRfcmVxdWVzdCA9IHZpcnR1YWxfc3VibWl0X3JlcXVl c3Q7CisKKwl2ZS0+YmFzZS5leGVjbGlzdHMucXVldWVfcHJpb3JpdHlfaGludCA9IElOVF9NSU47 CisJdGFza2xldF9pbml0KCZ2ZS0+YmFzZS5leGVjbGlzdHMudGFza2xldCwKKwkJICAgICB2aXJ0 dWFsX3N1Ym1pc3Npb25fdGFza2xldCwKKwkJICAgICAodW5zaWduZWQgbG9uZyl2ZSk7CisKKwlp bnRlbF9jb250ZXh0X2luaXQoJnZlLT5jb250ZXh0LCBjdHgsICZ2ZS0+YmFzZSk7CisKKwlmb3Ig KG4gPSAwOyBuIDwgY291bnQ7IG4rKykgeworCQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpzaWJs aW5nID0gc2libGluZ3Nbbl07CisKKwkJR0VNX0JVR19PTighaXNfcG93ZXJfb2ZfMihzaWJsaW5n LT5tYXNrKSk7CisJCWlmIChzaWJsaW5nLT5tYXNrICYgdmUtPmJhc2UubWFzaykKKwkJCWNvbnRp bnVlOworCisJCWlmIChzaWJsaW5nLT5leGVjbGlzdHMudGFza2xldC5mdW5jICE9IGV4ZWNsaXN0 c19zdWJtaXNzaW9uX3Rhc2tsZXQpIHsKKwkJCWVyciA9IC1FTk9ERVY7CisJCQlnb3RvIGVycl9w dXQ7CisJCX0KKworCQlHRU1fQlVHX09OKFJCX0VNUFRZX05PREUoJnZlLT5ub2Rlc1tzaWJsaW5n LT5pZF0ucmIpKTsKKwkJUkJfQ0xFQVJfTk9ERSgmdmUtPm5vZGVzW3NpYmxpbmctPmlkXS5yYik7 CisKKwkJdmUtPnNpYmxpbmdzW3ZlLT5jb3VudCsrXSA9IHNpYmxpbmc7CisJCXZlLT5iYXNlLm1h c2sgfD0gc2libGluZy0+bWFzazsKKworCQlpZiAodmUtPmJhc2UuY2xhc3MgIT0gT1RIRVJfQ0xB U1MpIHsKKwkJCWlmICh2ZS0+YmFzZS5jbGFzcyAhPSBzaWJsaW5nLT5jbGFzcykgeworCQkJCWVy ciA9IC1FSU5WQUw7CisJCQkJZ290byBlcnJfcHV0OworCQkJfQorCQkJY29udGludWU7CisJCX0K KworCQl2ZS0+YmFzZS5jbGFzcyA9IHNpYmxpbmctPmNsYXNzOworCQlzbnByaW50Zih2ZS0+YmFz ZS5uYW1lLCBzaXplb2YodmUtPmJhc2UubmFtZSksCisJCQkgInYlZHglZCIsIHZlLT5iYXNlLmNs YXNzLCBjb3VudCk7CisJCXZlLT5iYXNlLmNvbnRleHRfc2l6ZSA9IHNpYmxpbmctPmNvbnRleHRf c2l6ZTsKKworCQl2ZS0+YmFzZS5lbWl0X2JiX3N0YXJ0ID0gc2libGluZy0+ZW1pdF9iYl9zdGFy dDsKKwkJdmUtPmJhc2UuZW1pdF9mbHVzaCA9IHNpYmxpbmctPmVtaXRfZmx1c2g7CisJCXZlLT5i YXNlLmVtaXRfaW5pdF9icmVhZGNydW1iID0gc2libGluZy0+ZW1pdF9pbml0X2JyZWFkY3J1bWI7 CisJCXZlLT5iYXNlLmVtaXRfZmluaV9icmVhZGNydW1iID0gc2libGluZy0+ZW1pdF9maW5pX2Jy ZWFkY3J1bWI7CisJCXZlLT5iYXNlLmVtaXRfZmluaV9icmVhZGNydW1iX2R3ID0KKwkJCXNpYmxp bmctPmVtaXRfZmluaV9icmVhZGNydW1iX2R3OworCX0KKworCS8qIGdyYWNlZnVsbHkgcmVwbGFj ZSBhIGRlZ2VuZXJhdGUgdmlydHVhbCBlbmdpbmUgKi8KKwlpZiAoaXNfcG93ZXJfb2ZfMih2ZS0+ YmFzZS5tYXNrKSkgeworCQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICphY3R1YWwgPSB2ZS0+c2li bGluZ3NbMF07CisJCXZpcnR1YWxfZW5naW5lX2ZyZWUoJnZlLT5rcmVmKTsKKwkJcmV0dXJuIGFj dHVhbDsKKwl9CisKKwlfX2ludGVsX2NvbnRleHRfaW5zZXJ0KGN0eCwgJnZlLT5iYXNlLCAmdmUt PmNvbnRleHQpOworCXJldHVybiAmdmUtPmJhc2U7CisKK2Vycl9wdXQ6CisJdmlydHVhbF9lbmdp bmVfZnJlZSgmdmUtPmtyZWYpOworCXJldHVybiBFUlJfUFRSKGVycik7Cit9CisKK3N0cnVjdCBp bnRlbF9lbmdpbmVfY3MgKgoraW50ZWxfZXhlY2xpc3RzX2Nsb25lX3ZpcnR1YWwoc3RydWN0IGk5 MTVfZ2VtX2NvbnRleHQgKmN0eCwKKwkJCSAgICAgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnNy YykKK3sKKwlzdHJ1Y3QgdmlydHVhbF9lbmdpbmUgKnNlID0gdG9fdmlydHVhbF9lbmdpbmUoc3Jj KTsKKwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpkc3Q7CisKKwlkc3QgPSBpbnRlbF9leGVjbGlz dHNfY3JlYXRlX3ZpcnR1YWwoY3R4LAorCQkJCQkgICAgIHNlLT5zaWJsaW5ncywKKwkJCQkJICAg ICBzZS0+Y291bnQpOworCWlmIChJU19FUlIoZHN0KSkKKwkJcmV0dXJuIGRzdDsKKworCXJldHVy biBkc3Q7Cit9CisKK3ZvaWQgaW50ZWxfdmlydHVhbF9lbmdpbmVfZGVzdHJveShzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICplbmdpbmUpCit7CisJc3RydWN0IHZpcnR1YWxfZW5naW5lICp2ZSA9IHRv X3ZpcnR1YWxfZW5naW5lKGVuZ2luZSk7CisKKwlpZiAoIWVuZ2luZSB8fCAhaW50ZWxfZW5naW5l X2lzX3ZpcnR1YWwoZW5naW5lKSkKKwkJcmV0dXJuOworCisJX19pbnRlbF9jb250ZXh0X3JlbW92 ZSgmdmUtPmNvbnRleHQpOworCisJa3JlZl9wdXQoJnZlLT5rcmVmLCB2aXJ0dWFsX2VuZ2luZV9m cmVlKTsKK30KKwogdm9pZCBpbnRlbF9leGVjbGlzdHNfc2hvd19yZXF1ZXN0cyhzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICplbmdpbmUsCiAJCQkJICAgc3RydWN0IGRybV9wcmludGVyICptLAogCQkJ CSAgIHZvaWQgKCpzaG93X3JlcXVlc3QpKHN0cnVjdCBkcm1fcHJpbnRlciAqbSwKQEAgLTI5NjEs NiArMzQ0MSwyOSBAQCB2b2lkIGludGVsX2V4ZWNsaXN0c19zaG93X3JlcXVlc3RzKHN0cnVjdCBp bnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKIAkJc2hvd19yZXF1ZXN0KG0sIGxhc3QsICJcdFx0USAi KTsKIAl9CiAKKwlsYXN0ID0gTlVMTDsKKwljb3VudCA9IDA7CisJZm9yIChyYiA9IHJiX2ZpcnN0 X2NhY2hlZCgmZXhlY2xpc3RzLT52aXJ0dWFsKTsgcmI7IHJiID0gcmJfbmV4dChyYikpIHsKKwkJ c3RydWN0IHZpcnR1YWxfZW5naW5lICp2ZSA9CisJCQlyYl9lbnRyeShyYiwgdHlwZW9mKCp2ZSks IG5vZGVzW2VuZ2luZS0+aWRdLnJiKTsKKwkJc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEgPSBSRUFE X09OQ0UodmUtPnJlcXVlc3QpOworCisJCWlmIChycSkgeworCQkJaWYgKGNvdW50KysgPCBtYXgg LSAxKQorCQkJCXNob3dfcmVxdWVzdChtLCBycSwgIlx0XHRWICIpOworCQkJZWxzZQorCQkJCWxh c3QgPSBycTsKKwkJfQorCX0KKwlpZiAobGFzdCkgeworCQlpZiAoY291bnQgPiBtYXgpIHsKKwkJ CWRybV9wcmludGYobSwKKwkJCQkgICAiXHRcdC4uLnNraXBwaW5nICVkIHZpcnR1YWwgcmVxdWVz dHMuLi5cbiIsCisJCQkJICAgY291bnQgLSBtYXgpOworCQl9CisJCXNob3dfcmVxdWVzdChtLCBs YXN0LCAiXHRcdFYgIik7CisJfQorCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZW5naW5lLT50 aW1lbGluZS5sb2NrLCBmbGFncyk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2xyYy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmgKaW5kZXgg ZjFhZWM4YTY5ODZmLi45ZDkwZGM2OGUwMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2xyYy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5oCkBA IC0xMTIsNiArMTEyLDE3IEBAIHZvaWQgaW50ZWxfZXhlY2xpc3RzX3Nob3dfcmVxdWVzdHMoc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAogCQkJCQkJCWNvbnN0IGNoYXIgKnByZWZpeCks CiAJCQkJICAgdW5zaWduZWQgaW50IG1heCk7CiAKK3N0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKgor aW50ZWxfZXhlY2xpc3RzX2NyZWF0ZV92aXJ0dWFsKHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpj dHgsCisJCQkgICAgICAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqKnNpYmxpbmdzLAorCQkJICAg ICAgIHVuc2lnbmVkIGludCBjb3VudCk7CisKK3N0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKgoraW50 ZWxfZXhlY2xpc3RzX2Nsb25lX3ZpcnR1YWwoc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCwK KwkJCSAgICAgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnNyYyk7CisKK3ZvaWQgaW50ZWxfdmly dHVhbF9lbmdpbmVfZGVzdHJveShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpOworCiB1 MzIgZ2VuOF9tYWtlX3JwY3Moc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsIHN0cnVjdCBp bnRlbF9zc2V1ICpjdHhfc3NldSk7CiAKICNlbmRpZiAvKiBfSU5URUxfTFJDX0hfICovCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaW50ZWxfbHJjLmMgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaW50ZWxfbHJjLmMKaW5kZXggNTY1ZTk0OWE0NzIy Li43YzBlOTU1MjdiY2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0 cy9pbnRlbF9scmMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaW50ZWxf bHJjLmMKQEAgLTEwLDYgKzEwLDcgQEAKIAogI2luY2x1ZGUgIi4uL2k5MTVfc2VsZnRlc3QuaCIK ICNpbmNsdWRlICJpZ3RfZmx1c2hfdGVzdC5oIgorI2luY2x1ZGUgImlndF9saXZlX3Rlc3QuaCIK ICNpbmNsdWRlICJpZ3Rfc3Bpbm5lci5oIgogI2luY2x1ZGUgImk5MTVfcmFuZG9tLmgiCiAKQEAg LTEwNDIsNiArMTA0MywxNjkgQEAgc3RhdGljIGludCBsaXZlX3ByZWVtcHRfc21va2Uodm9pZCAq YXJnKQogCXJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyBpbnQgbm9wX3ZpcnR1YWxfZW5naW5lKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LAorCQkJICAgICAgc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqKnNpYmxpbmdzLAorCQkJICAgICAgdW5zaWduZWQgaW50IG5zaWJsaW5nLAorCQkJICAg ICAgdW5zaWduZWQgaW50IG5jdHgsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpCisjZGVm aW5lIENIQUlOIEJJVCgwKQoreworCUlHVF9USU1FT1VUKGVuZF90aW1lKTsKKwlzdHJ1Y3QgaTkx NV9yZXF1ZXN0ICpyZXF1ZXN0WzE2XTsKKwlzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4WzE2 XTsKKwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICp2ZVsxNl07CisJdW5zaWduZWQgbG9uZyBuLCBw cmltZSwgbmM7CisJc3RydWN0IGlndF9saXZlX3Rlc3QgdDsKKwlrdGltZV90IHRpbWVzWzJdID0g e307CisJaW50IGVycjsKKworCUdFTV9CVUdfT04oIW5jdHggfHwgbmN0eCA+IEFSUkFZX1NJWkUo Y3R4KSk7CisKKwlmb3IgKG4gPSAwOyBuIDwgbmN0eDsgbisrKSB7CisJCWN0eFtuXSA9IGtlcm5l bF9jb250ZXh0KGk5MTUpOworCQlpZiAoIWN0eFtuXSkKKwkJCXJldHVybiAtRU5PTUVNOworCisJ CXZlW25dID0gaW50ZWxfZXhlY2xpc3RzX2NyZWF0ZV92aXJ0dWFsKGN0eFtuXSwKKwkJCQkJCSAg ICAgICBzaWJsaW5ncywgbnNpYmxpbmcpOworCQlpZiAoSVNfRVJSKHZlW25dKSkKKwkJCXJldHVy biBQVFJfRVJSKHZlW25dKTsKKwl9CisKKwllcnIgPSBpZ3RfbGl2ZV90ZXN0X2JlZ2luKCZ0LCBp OTE1LCBfX2Z1bmNfXywgdmVbMF0tPm5hbWUpOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCisJ Zm9yX2VhY2hfcHJpbWVfbnVtYmVyX2Zyb20ocHJpbWUsIDEsIDgxOTIpIHsKKwkJdGltZXNbMV0g PSBrdGltZV9nZXRfcmF3KCk7CisKKwkJaWYgKGZsYWdzICYgQ0hBSU4pIHsKKwkJCWZvciAobmMg PSAwOyBuYyA8IG5jdHg7IG5jKyspIHsKKwkJCQlmb3IgKG4gPSAwOyBuIDwgcHJpbWU7IG4rKykg eworCQkJCQlyZXF1ZXN0W25jXSA9CisJCQkJCQlpOTE1X3JlcXVlc3RfYWxsb2ModmVbbmNdLCBj dHhbbmNdKTsKKwkJCQkJaWYgKElTX0VSUihyZXF1ZXN0W25jXSkpIHsKKwkJCQkJCWVyciA9IFBU Ul9FUlIocmVxdWVzdFtuY10pOworCQkJCQkJZ290byBvdXQ7CisJCQkJCX0KKworCQkJCQlpOTE1 X3JlcXVlc3RfYWRkKHJlcXVlc3RbbmNdKTsKKwkJCQl9CisJCQl9CisJCX0gZWxzZSB7CisJCQlm b3IgKG4gPSAwOyBuIDwgcHJpbWU7IG4rKykgeworCQkJCWZvciAobmMgPSAwOyBuYyA8IG5jdHg7 IG5jKyspIHsKKwkJCQkJcmVxdWVzdFtuY10gPQorCQkJCQkJaTkxNV9yZXF1ZXN0X2FsbG9jKHZl W25jXSwgY3R4W25jXSk7CisJCQkJCWlmIChJU19FUlIocmVxdWVzdFtuY10pKSB7CisJCQkJCQll cnIgPSBQVFJfRVJSKHJlcXVlc3RbbmNdKTsKKwkJCQkJCWdvdG8gb3V0OworCQkJCQl9CisKKwkJ CQkJaTkxNV9yZXF1ZXN0X2FkZChyZXF1ZXN0W25jXSk7CisJCQkJfQorCQkJfQorCQl9CisKKwkJ Zm9yIChuYyA9IDA7IG5jIDwgbmN0eDsgbmMrKykgeworCQkJaWYgKGk5MTVfcmVxdWVzdF93YWl0 KHJlcXVlc3RbbmNdLAorCQkJCQkgICAgICBJOTE1X1dBSVRfTE9DS0VELAorCQkJCQkgICAgICBI WiAvIDEwKSA8IDApIHsKKwkJCQlwcl9lcnIoIiVzKCVzKTogd2FpdCBmb3IgJWxseDolbGxkIHRp bWVkIG91dFxuIiwKKwkJCQkgICAgICAgX19mdW5jX18sIHZlWzBdLT5uYW1lLAorCQkJCSAgICAg ICByZXF1ZXN0W25jXS0+ZmVuY2UuY29udGV4dCwKKwkJCQkgICAgICAgcmVxdWVzdFtuY10tPmZl bmNlLnNlcW5vKTsKKworCQkJCUdFTV9UUkFDRSgiJXMoJXMpIGZhaWxlZCBhdCByZXF1ZXN0ICVs bHg6JWxsZFxuIiwKKwkJCQkJICBfX2Z1bmNfXywgdmVbMF0tPm5hbWUsCisJCQkJCSAgcmVxdWVz dFtuY10tPmZlbmNlLmNvbnRleHQsCisJCQkJCSAgcmVxdWVzdFtuY10tPmZlbmNlLnNlcW5vKTsK KwkJCQlHRU1fVFJBQ0VfRFVNUCgpOworCQkJCWk5MTVfZ2VtX3NldF93ZWRnZWQoaTkxNSk7CisJ CQkJYnJlYWs7CisJCQl9CisJCX0KKworCQl0aW1lc1sxXSA9IGt0aW1lX3N1YihrdGltZV9nZXRf cmF3KCksIHRpbWVzWzFdKTsKKwkJaWYgKHByaW1lID09IDEpCisJCQl0aW1lc1swXSA9IHRpbWVz WzFdOworCisJCWlmIChfX2lndF90aW1lb3V0KGVuZF90aW1lLCBOVUxMKSkKKwkJCWJyZWFrOwor CX0KKworCWVyciA9IGlndF9saXZlX3Rlc3RfZW5kKCZ0KTsKKwlpZiAoZXJyKQorCQlnb3RvIG91 dDsKKworCXByX2luZm8oIlJlcXVlc3R4JWQgbGF0ZW5jaWVzIG9uICVzOiAxID0gJWxsdW5zLCAl bHUgPSAlbGx1bnNcbiIsCisJCW5jdHgsIHZlWzBdLT5uYW1lLCBrdGltZV90b19ucyh0aW1lc1sw XSksCisJCXByaW1lLCBkaXY2NF91NjQoa3RpbWVfdG9fbnModGltZXNbMV0pLCBwcmltZSkpOwor CitvdXQ6CisJaWYgKGlndF9mbHVzaF90ZXN0KGk5MTUsIEk5MTVfV0FJVF9MT0NLRUQpKQorCQll cnIgPSAtRUlPOworCisJZm9yIChuYyA9IDA7IG5jIDwgbmN0eDsgbmMrKykgeworCQlpbnRlbF92 aXJ0dWFsX2VuZ2luZV9kZXN0cm95KHZlW25jXSk7CisJCWtlcm5lbF9jb250ZXh0X2Nsb3NlKGN0 eFtuY10pOworCX0KKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGxpdmVfdmlydHVhbF9l bmdpbmUodm9pZCAqYXJnKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gYXJn OworCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnNpYmxpbmdzW01BWF9FTkdJTkVfSU5TVEFOQ0Ug KyAxXTsKKwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7CisJZW51bSBpbnRlbF9lbmdp bmVfaWQgaWQ7CisJdW5zaWduZWQgaW50IGNsYXNzLCBpbnN0OworCWludCBlcnIgPSAtRU5PREVW OworCisJaWYgKFVTRVNfR1VDX1NVQk1JU1NJT04oaTkxNSkpCisJCXJldHVybiAwOworCisJbXV0 ZXhfbG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7CisKKwlmb3JfZWFjaF9lbmdpbmUoZW5n aW5lLCBpOTE1LCBpZCkgeworCQllcnIgPSBub3BfdmlydHVhbF9lbmdpbmUoaTkxNSwgJmVuZ2lu ZSwgMSwgMSwgMCk7CisJCWlmIChlcnIpIHsKKwkJCXByX2VycigiRmFpbGVkIHRvIHdyYXAgZW5n aW5lICVzOiBlcnI9JWRcbiIsCisJCQkgICAgICAgZW5naW5lLT5uYW1lLCBlcnIpOworCQkJZ290 byBvdXRfdW5sb2NrOworCQl9CisJfQorCisJZm9yIChjbGFzcyA9IDA7IGNsYXNzIDw9IE1BWF9F TkdJTkVfQ0xBU1M7IGNsYXNzKyspIHsKKwkJaW50IG5zaWJsaW5nLCBuOworCisJCW5zaWJsaW5n ID0gMDsKKwkJZm9yIChpbnN0ID0gMDsgaW5zdCA8PSBNQVhfRU5HSU5FX0lOU1RBTkNFOyBpbnN0 KyspIHsKKwkJCWlmICghaTkxNS0+ZW5naW5lX2NsYXNzW2NsYXNzXVtpbnN0XSkKKwkJCQlicmVh azsKKworCQkJc2libGluZ3NbbnNpYmxpbmcrK10gPSBpOTE1LT5lbmdpbmVfY2xhc3NbY2xhc3Nd W2luc3RdOworCQl9CisJCWlmIChuc2libGluZyA8IDIpCisJCQljb250aW51ZTsKKworCQlmb3Ig KG4gPSAxOyBuIDw9IG5zaWJsaW5nICsgMTsgbisrKSB7CisJCQllcnIgPSBub3BfdmlydHVhbF9l bmdpbmUoaTkxNSwgc2libGluZ3MsIG5zaWJsaW5nLAorCQkJCQkJIG4sIDApOworCQkJaWYgKGVy cikKKwkJCQlnb3RvIG91dF91bmxvY2s7CisJCX0KKworCQllcnIgPSBub3BfdmlydHVhbF9lbmdp bmUoaTkxNSwgc2libGluZ3MsIG5zaWJsaW5nLCBuLCBDSEFJTik7CisJCWlmIChlcnIpCisJCQln b3RvIG91dF91bmxvY2s7CisJfQorCitvdXRfdW5sb2NrOgorCW11dGV4X3VubG9jaygmaTkxNS0+ ZHJtLnN0cnVjdF9tdXRleCk7CisJcmV0dXJuIGVycjsKK30KKwogaW50IGludGVsX2V4ZWNsaXN0 c19saXZlX3NlbGZ0ZXN0cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKIHsKIAlzdGF0 aWMgY29uc3Qgc3RydWN0IGk5MTVfc3VidGVzdCB0ZXN0c1tdID0gewpAQCAtMTA1Myw2ICsxMjE3 LDcgQEAgaW50IGludGVsX2V4ZWNsaXN0c19saXZlX3NlbGZ0ZXN0cyhzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqaTkxNSkKIAkJU1VCVEVTVChsaXZlX2NoYWluX3ByZWVtcHQpLAogCQlTVUJURVNU KGxpdmVfcHJlZW1wdF9oYW5nKSwKIAkJU1VCVEVTVChsaXZlX3ByZWVtcHRfc21va2UpLAorCQlT VUJURVNUKGxpdmVfdmlydHVhbF9lbmdpbmUpLAogCX07CiAKIAlpZiAoIUhBU19FWEVDTElTVFMo aTkxNSkpCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvZHJtL2k5MTVfZHJtLmggYi9pbmNsdWRl L3VhcGkvZHJtL2k5MTVfZHJtLmgKaW5kZXggYjY4ZTFhZDEyYzBmLi4xMDJhMmY5ZGU0NDMgMTAw NjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9kcm0vaTkxNV9kcm0uaAorKysgYi9pbmNsdWRlL3VhcGkv ZHJtL2k5MTVfZHJtLmgKQEAgLTEyNSw2ICsxMjUsNyBAQCBlbnVtIGRybV9pOTE1X2dlbV9lbmdp bmVfY2xhc3MgewogfTsKIAogI2RlZmluZSBJOTE1X0VOR0lORV9DTEFTU19JTlZBTElEX05PTkUg LTEKKyNkZWZpbmUgSTkxNV9FTkdJTkVfQ0xBU1NfSU5WQUxJRF9WSVJUVUFMIDAKIAogLyoqCiAg KiBET0M6IHBlcmZfZXZlbnRzIGV4cG9zZWQgYnkgaTkxNSB0aHJvdWdoIC9zeXMvYnVzL2V2ZW50 X3NvdXJjZXMvZHJpdmVycy9pOTE1CkBAIC0xNTk2LDggKzE1OTcsMzcgQEAgc3RydWN0IGRybV9p OTE1X2dlbV9jb250ZXh0X3BhcmFtX3NzZXUgewogCV9fdTMyIHJzdmQ7CiB9OwogCisvKgorICog aTkxNV9jb250ZXh0X2VuZ2luZXNfbG9hZF9iYWxhbmNlOgorICoKKyAqIEVuYWJsZSBsb2FkIGJh bGFuY2luZyBhY3Jvc3MgdGhpcyBzZXQgb2YgZW5naW5lcy4KKyAqCisgKiBJbnRvIHRoZSBJOTE1 X0VYRUNfREVGQVVMVCBzbG90IFswXSwgYSB2aXJ0dWFsIGVuZ2luZSBpcyBjcmVhdGVkIHRoYXQg d2hlbgorICogdXNlZCB3aWxsIHByb3h5IHRoZSBleGVjYnVmZmVyIHJlcXVlc3Qgb250byBvbmUg b2YgdGhlIHNldCBvZiBlbmdpbmVzCisgKiBpbiBzdWNoIGEgd2F5IGFzIHRvIGRpc3RyaWJ1dGUg dGhlIGxvYWQgZXZlbmx5IGFjcm9zcyB0aGUgc2V0LgorICoKKyAqIFRoZSBzZXQgb2YgZW5naW5l cyBtdXN0IGJlIGNvbXBhdGlibGUgKGUuZy4gdGhlIHNhbWUgSFcgY2xhc3MpIGFzIHRoZXkKKyAq IHdpbGwgc2hhcmUgdGhlIHNhbWUgbG9naWNhbCBHUFUgY29udGV4dCBhbmQgcmluZy4KKyAqCisg KiBUbyBpbnRlcm1peCByZW5kZXJpbmcgd2l0aCB0aGUgdmlydHVhbCBlbmdpbmUgYW5kIGRpcmVj dCByZW5kZXJpbmcgb250bworICogdGhlIGJhY2tpbmcgZW5naW5lcyAoYnlwYXNzaW5nIHRoZSBs b2FkIGJhbGFuY2luZyBwcm94eSksIHRoZSBjb250ZXh0IG11c3QKKyAqIGJlIGRlZmluZWQgdG8g dXNlIGEgc2luZ2xlIHRpbWVsaW5lIGZvciBhbGwgZW5naW5lcy4KKyAqLworc3RydWN0IGk5MTVf Y29udGV4dF9lbmdpbmVzX2xvYWRfYmFsYW5jZSB7CisJc3RydWN0IGk5MTVfdXNlcl9leHRlbnNp b24gYmFzZTsKKworCV9fdTE2IGVuZ2luZV9pbmRleDsKKwlfX3UxNiBtYnoxNjsgLyogcmVzZXJ2 ZWQgZm9yIGZ1dHVyZSB1c2U7IG11c3QgYmUgemVybyAqLworCV9fdTMyIGZsYWdzOyAvKiBhbGwg dW5kZWZpbmVkIGZsYWdzIG11c3QgYmUgemVybyAqLworCisJX191NjQgZW5naW5lc19tYXNrOyAv KiBzZWxlY3Rpb24gbWFzayBvZiBlbmdpbmVzW10gKi8KKworCV9fdTY0IG1iejY0WzRdOyAvKiBy ZXNlcnZlZCBmb3IgZnV0dXJlIHVzZTsgbXVzdCBiZSB6ZXJvICovCit9OworCiBzdHJ1Y3QgaTkx NV9jb250ZXh0X3BhcmFtX2VuZ2luZXMgewogCV9fdTY0IGV4dGVuc2lvbnM7IC8qIGxpbmtlZCBj aGFpbiBvZiBleHRlbnNpb24gYmxvY2tzLCAwIHRlcm1pbmF0ZXMgKi8KKyNkZWZpbmUgSTkxNV9D T05URVhUX0VOR0lORVNfRVhUX0xPQURfQkFMQU5DRSAwCiAKIAlzdHJ1Y3QgewogCQlfX3UxNiBl bmdpbmVfY2xhc3M7IC8qIHNlZSBlbnVtIGRybV9pOTE1X2dlbV9lbmdpbmVfY2xhc3MgKi8KLS0g CjIuMjAuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K SW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0 dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4