From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: [PATCH 14/39] drm/i915: Load balancing across a virtual engine Date: Wed, 13 Mar 2019 14:43:36 +0000 Message-ID: <20190313144401.17735-14-chris@chris-wilson.co.uk> References: <20190313144401.17735-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 489D06E0D3 for ; Wed, 13 Mar 2019 14:45:08 +0000 (UTC) In-Reply-To: <20190313144401.17735-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 Z2VtX2NvbnRleHQuYyAgICB8IDEyOCArKysrLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9z Y2hlZHVsZXIuYyAgICAgIHwgIDE4ICstCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3RpbWVs aW5lX3R5cGVzLmggfCAgIDEgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZW5naW5lX3R5 cGVzLmggIHwgICA4ICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jICAgICAgICAg ICB8IDU3MCArKysrKysrKysrKysrKysrKysrKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2xyYy5oICAgICAgICAgICB8ICAxMSArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMv aW50ZWxfbHJjLmMgfCAxNjUgKysrKysrCiBpbmNsdWRlL3VhcGkvZHJtL2k5MTVfZHJtLmggICAg ICAgICAgICAgICAgfCAgMzAgKysKIDkgZmlsZXMgY2hhbmdlZCwgOTE3IGluc2VydGlvbnMoKyks IDE5IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf Z2VtLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5oCmluZGV4IDc0YTJkZGMxYjUy Zi4uZGJjZWE2ZTI5ZDQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dl bS5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmgKQEAgLTkxLDQgKzkxLDkg QEAgc3RhdGljIGlubGluZSBib29sIF9fdGFza2xldF9pc19lbmFibGVkKGNvbnN0IHN0cnVjdCB0 YXNrbGV0X3N0cnVjdCAqdCkKIAlyZXR1cm4gIWF0b21pY19yZWFkKCZ0LT5jb3VudCk7CiB9CiAK K3N0YXRpYyBpbmxpbmUgYm9vbCBfX3Rhc2tsZXRfaXNfc2NoZWR1bGVkKHN0cnVjdCB0YXNrbGV0 X3N0cnVjdCAqdCkKK3sKKwlyZXR1cm4gdGVzdF9iaXQoVEFTS0xFVF9TVEFURV9TQ0hFRCwgJnQt PnN0YXRlKTsKK30KKwogI2VuZGlmIC8qIF9fSTkxNV9HRU1fSF9fICovCmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9jb250ZXh0LmMgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2dlbV9jb250ZXh0LmMKaW5kZXggN2FlMjg2MjJiNzA5Li45ODc2M2QzZjFiMTIg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2NvbnRleHQuYworKysg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9jb250ZXh0LmMKQEAgLTg2LDYgKzg2LDcg QEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbG9nMi5oPgorI2luY2x1ZGUgPGxpbnV4L25vc3Bl Yy5oPgogCiAjaW5jbHVkZSA8ZHJtL2k5MTVfZHJtLmg+CiAKQEAgLTk0LDYgKzk1LDcgQEAKICNp bmNsdWRlICJpOTE1X3RyYWNlLmgiCiAjaW5jbHVkZSAiaTkxNV91c2VyX2V4dGVuc2lvbnMuaCIK ICNpbmNsdWRlICJpbnRlbF9scmNfcmVnLmgiCisjaW5jbHVkZSAiaW50ZWxfbHJjLmgiCiAjaW5j bHVkZSAiaW50ZWxfd29ya2Fyb3VuZHMuaCIKIAogI2RlZmluZSBBTExfTDNfU0xJQ0VTKGRldikg KDEgPDwgTlVNX0wzX1NMSUNFUyhkZXYpKSAtIDEKQEAgLTI0MSw2ICsyNDMsMjAgQEAgc3RhdGlj IHZvaWQgcmVsZWFzZV9od19pZChzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4KQogCW11dGV4 X3VubG9jaygmaTkxNS0+Y29udGV4dHMubXV0ZXgpOwogfQogCitzdGF0aWMgdm9pZCBmcmVlX2Vu Z2luZXMoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqKmVuZ2luZXMsIGludCBjb3VudCkKK3sKKwlp bnQgaTsKKworCWlmIChaRVJPX09SX05VTExfUFRSKGVuZ2luZXMpKQorCQlyZXR1cm47CisKKwkv KiBXZSBvd24gdGhlIHZlbmcgd2UgY3JlYXRlZDsgcmVndWxhciBlbmdpbmVzIGFyZSBpZ25vcmVk ICovCisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCisJCWludGVsX3ZpcnR1YWxfZW5naW5l X2Rlc3Ryb3koZW5naW5lc1tpXSk7CisKKwlrZnJlZShlbmdpbmVzKTsKK30KKwogc3RhdGljIHZv aWQgaTkxNV9nZW1fY29udGV4dF9mcmVlKHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgpCiB7 CiAJc3RydWN0IGludGVsX2NvbnRleHQgKml0LCAqbjsKQEAgLTI1MSw4ICsyNjcsNyBAQCBzdGF0 aWMgdm9pZCBpOTE1X2dlbV9jb250ZXh0X2ZyZWUoc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0 eCkKIAogCXJlbGVhc2VfaHdfaWQoY3R4KTsKIAlpOTE1X3BwZ3R0X3B1dChjdHgtPnBwZ3R0KTsK LQotCWtmcmVlKGN0eC0+ZW5naW5lcyk7CisJZnJlZV9lbmdpbmVzKGN0eC0+ZW5naW5lcywgY3R4 LT5uZW5naW5lKTsKIAogCXJidHJlZV9wb3N0b3JkZXJfZm9yX2VhY2hfZW50cnlfc2FmZShpdCwg biwgJmN0eC0+aHdfY29udGV4dHMsIG5vZGUpCiAJCWludGVsX2NvbnRleHRfcHV0KGl0KTsKQEAg LTEyMzMsNyArMTI0OCw2IEBAIF9faTkxNV9nZW1fY29udGV4dF9yZWNvbmZpZ3VyZV9zc2V1KHN0 cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgsCiAJaW50IHJldCA9IDA7CiAKIAlHRU1fQlVHX09O KElOVEVMX0dFTihjdHgtPmk5MTUpIDwgOCk7Ci0JR0VNX0JVR19PTihlbmdpbmUtPmlkICE9IFJD UzApOwogCiAJY2UgPSBpbnRlbF9jb250ZXh0X3Bpbl9sb2NrKGN0eCwgZW5naW5lKTsKIAlpZiAo SVNfRVJSKGNlKSkKQEAgLTE0MjcsNyArMTQ0MSw4MCBAQCBzdHJ1Y3Qgc2V0X2VuZ2luZXMgewog CXVuc2lnbmVkIGludCBuZW5naW5lOwogfTsKIAorc3RhdGljIGludAorc2V0X2VuZ2luZXNfX2xv YWRfYmFsYW5jZShzdHJ1Y3QgaTkxNV91c2VyX2V4dGVuc2lvbiBfX3VzZXIgKmJhc2UsIHZvaWQg KmRhdGEpCit7CisJc3RydWN0IGk5MTVfY29udGV4dF9lbmdpbmVzX2xvYWRfYmFsYW5jZSBfX3Vz ZXIgKmV4dCA9CisJCWNvbnRhaW5lcl9vZl91c2VyKGJhc2UsIHR5cGVvZigqZXh0KSwgYmFzZSk7 CisJY29uc3Qgc3RydWN0IHNldF9lbmdpbmVzICpzZXQgPSBkYXRhOworCXN0cnVjdCBpbnRlbF9l bmdpbmVfY3MgKnZlOworCXVuc2lnbmVkIGludCBuOworCXU2NCBtYXNrOworCXUxNiBpZHg7CisJ aW50IGVycjsKKworCWlmICghSEFTX0VYRUNMSVNUUyhzZXQtPmN0eC0+aTkxNSkpCisJCXJldHVy biAtRU5PREVWOworCisJaWYgKFVTRVNfR1VDX1NVQk1JU1NJT04oc2V0LT5jdHgtPmk5MTUpKQor CQlyZXR1cm4gLUVOT0RFVjsgLyogbm90IGltcGxlbWVudCB5ZXQgKi8KKworCWlmIChnZXRfdXNl cihpZHgsICZleHQtPmVuZ2luZV9pbmRleCkpCisJCXJldHVybiAtRUZBVUxUOworCisJaWYgKGlk eCA+PSBzZXQtPm5lbmdpbmUpCisJCXJldHVybiAtRUlOVkFMOworCisJaWR4ID0gYXJyYXlfaW5k ZXhfbm9zcGVjKGlkeCwgc2V0LT5uZW5naW5lKTsKKwlpZiAoc2V0LT5lbmdpbmVzW2lkeF0pCisJ CXJldHVybiAtRUVYSVNUOworCisJZXJyID0gY2hlY2tfdXNlcl9tYnooJmV4dC0+bWJ6MTYpOwor CWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBjaGVja191c2VyX21ieigmZXh0LT5m bGFncyk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWZvciAobiA9IDA7IG4gPCBBUlJB WV9TSVpFKGV4dC0+bWJ6NjQpOyBuKyspIHsKKwkJZXJyID0gY2hlY2tfdXNlcl9tYnooJmV4dC0+ bWJ6NjRbbl0pOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlpZiAoZ2V0X3Vz ZXIobWFzaywgJmV4dC0+ZW5naW5lc19tYXNrKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwltYXNr ICY9IEdFTk1BU0tfVUxMKHNldC0+bmVuZ2luZSAtIDEsIDApICYgfkJJVF9VTEwoaWR4KTsKKwlp ZiAoIW1hc2spCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGlzX3Bvd2VyX29mXzIobWFzaykp IHsKKwkJdmUgPSBzZXQtPmVuZ2luZXNbX19mZnM2NChtYXNrKV07CisJfSBlbHNlIHsKKwkJc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqc3RhY2tbNjRdOworCQlpbnQgYml0OworCisJCW4gPSAwOwor CQlmb3JfZWFjaF9zZXRfYml0KGJpdCwgKHVuc2lnbmVkIGxvbmcgKikmbWFzaywgc2V0LT5uZW5n aW5lKQorCQkJc3RhY2tbbisrXSA9IHNldC0+ZW5naW5lc1tiaXRdOworCisJCXZlID0gaW50ZWxf ZXhlY2xpc3RzX2NyZWF0ZV92aXJ0dWFsKHNldC0+Y3R4LCBzdGFjaywgbik7CisJfQorCWlmIChJ U19FUlIodmUpKQorCQlyZXR1cm4gUFRSX0VSUih2ZSk7CisKKwlpZiAoY21weGNoZygmc2V0LT5l bmdpbmVzW2lkeF0sIE5VTEwsIHZlKSkgeworCQlpbnRlbF92aXJ0dWFsX2VuZ2luZV9kZXN0cm95 KHZlKTsKKwkJcmV0dXJuIC1FRVhJU1Q7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBj b25zdCBpOTE1X3VzZXJfZXh0ZW5zaW9uX2ZuIHNldF9lbmdpbmVzX19leHRlbnNpb25zW10gPSB7 CisJW0k5MTVfQ09OVEVYVF9FTkdJTkVTX0VYVF9MT0FEX0JBTEFOQ0VdID0gc2V0X2VuZ2luZXNf X2xvYWRfYmFsYW5jZSwKIH07CiAKIHN0YXRpYyBpbnQKQEAgLTE0ODksMTMgKzE1NzYsMTMgQEAg c2V0X2VuZ2luZXMoc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCwKIAkJCQkJICAgQVJSQVlf U0laRShzZXRfZW5naW5lc19fZXh0ZW5zaW9ucyksCiAJCQkJCSAgICZzZXQpOwogCWlmIChlcnIp IHsKLQkJa2ZyZWUoc2V0LmVuZ2luZXMpOworCQlmcmVlX2VuZ2luZXMoc2V0LmVuZ2luZXMsIHNl dC5uZW5naW5lKTsKIAkJcmV0dXJuIGVycjsKIAl9CiAKIG91dDoKIAltdXRleF9sb2NrKCZjdHgt Pmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwotCWtmcmVlKGN0eC0+ZW5naW5lcyk7CisJZnJlZV9l bmdpbmVzKGN0eC0+ZW5naW5lcywgY3R4LT5uZW5naW5lKTsKIAljdHgtPmVuZ2luZXMgPSBzZXQu ZW5naW5lczsKIAljdHgtPm5lbmdpbmUgPSBzZXQubmVuZ2luZTsKIAltdXRleF91bmxvY2soJmN0 eC0+aTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7CkBAIC0xNzA4LDkgKzE3OTUsMTAgQEAgc3RhdGlj IGludCBjbG9uZV9lbmdpbmVzKHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpkc3QsCiAJCQkgc3Ry dWN0IGk5MTVfZ2VtX2NvbnRleHQgKnNyYykKIHsKIAlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICoq ZW5naW5lczsKLQl1bnNpZ25lZCBpbnQgbmVuZ2luZTsKKwl1bnNpZ25lZCBpbnQgbmVuZ2luZSwg aTsKIAogCW11dGV4X2xvY2soJnNyYy0+aTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7IC8qIHNlcmlh bGlzZSBzcmMtPmVuZ2luZVtdICovCisKIAluZW5naW5lID0gc3JjLT5uZW5naW5lOwogCWlmICgh WkVST19PUl9OVUxMX1BUUihzcmMtPmVuZ2luZXMpKQogCQllbmdpbmVzID0ga21lbWR1cChzcmMt PmVuZ2luZXMsCkBAIC0xNzE4LDExICsxODA2LDM3IEBAIHN0YXRpYyBpbnQgY2xvbmVfZW5naW5l cyhzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqZHN0LAogCQkJCSAgR0ZQX0tFUk5FTCk7CiAJZWxz ZQogCQllbmdpbmVzID0gc3JjLT5lbmdpbmVzOworCisJLyoKKwkgKiBWaXJ0dWFsIGVuZ2luZXMg YXJlIHNpbmdsZXRvbnM7IHRoZXkgY2FuIG9ubHkgZXhpc3QKKwkgKiBpbnNpZGUgYSBzaW5nbGUg Y29udGV4dCwgYmVjYXVzZSB0aGV5IGVtYmVkIHRoZWlyCisJICogSFcgY29udGV4dC4uLiBBcyBl YWNoIHZpcnR1YWwgY29udGV4dCBpbXBsaWVzIGEgc2luZ2xlCisJICogdGltZWxpbmUgKGVhY2gg ZW5naW5lIGNhbiBvbmx5IGRlcXVldWUgYSBzaW5nbGUgcmVxdWVzdAorCSAqIGF0IGFueSB0aW1l KSwgaXQgd291bGQgYmUgc3VycHJpc2luZyBmb3IgdHdvIGNvbnRleHRzCisJICogdG8gdXNlIHRo ZSBzYW1lIGVuZ2luZS4gU28gbGV0J3MgY3JlYXRlIGEgY29weSBvZgorCSAqIHRoZSB2aXJ0dWFs IGVuZ2luZSBpbnN0ZWFkLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBuZW5naW5lOyBpKyspIHsK KwkJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lID0gZW5naW5lc1tpXTsKKworCQlpZiAo IWludGVsX2VuZ2luZV9pc192aXJ0dWFsKGVuZ2luZSkpCisJCQljb250aW51ZTsKKworCQllbmdp bmUgPSBpbnRlbF9leGVjbGlzdHNfY2xvbmVfdmlydHVhbChkc3QsIGVuZ2luZSk7CisJCWlmIChJ U19FUlIoZW5naW5lKSkgeworCQkJZnJlZV9lbmdpbmVzKGVuZ2luZXMsIGkpOworCQkJbXV0ZXhf dW5sb2NrKCZzcmMtPmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOworCQkJcmV0dXJuIFBUUl9FUlIo ZW5naW5lKTsKKwkJfQorCisJCWVuZ2luZXNbaV0gPSBlbmdpbmU7CisJfQorCiAJbXV0ZXhfdW5s b2NrKCZzcmMtPmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwogCWlmICghZW5naW5lcyAmJiBuZW5n aW5lKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWtmcmVlKGRzdC0+ZW5naW5lcyk7CisJZnJlZV9l bmdpbmVzKGRzdC0+ZW5naW5lcywgZHN0LT5uZW5naW5lKTsKIAlkc3QtPmVuZ2luZXMgPSBlbmdp bmVzOwogCWRzdC0+bmVuZ2luZSA9IG5lbmdpbmU7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3NjaGVkdWxlci5jIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9zY2hlZHVsZXIuYwppbmRleCBlMGY2MDlkMDE1NjQuLjhjZmY0ZjZkNjE1OCAxMDA2 NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zY2hlZHVsZXIuYworKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3NjaGVkdWxlci5jCkBAIC0yNDcsMTcgKzI0NywyNiBAQCBz Y2hlZF9sb2NrX2VuZ2luZShjb25zdCBzdHJ1Y3QgaTkxNV9zY2hlZF9ub2RlICpub2RlLAogCQkg IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmxvY2tlZCwKIAkJICBzdHJ1Y3Qgc2NoZWRfY2FjaGUg KmNhY2hlKQogewotCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSA9IG5vZGVfdG9fcmVx dWVzdChub2RlKS0+ZW5naW5lOworCWNvbnN0IHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxID0gbm9k ZV90b19yZXF1ZXN0KG5vZGUpOworCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKIAog CUdFTV9CVUdfT04oIWxvY2tlZCk7CiAKLQlpZiAoZW5naW5lICE9IGxvY2tlZCkgeworCS8qCisJ ICogVmlydHVhbCBlbmdpbmVzIGNvbXBsaWNhdGUgYWNxdWlyaW5nIHRoZSBlbmdpbmUgdGltZWxp bmUgbG9jaywKKwkgKiBhcyB0aGVpciBycS0+ZW5naW5lIHBvaW50ZXIgaXMgbm90IHN0YWJsZSB1 bnRpbCB1bmRlciB0aGF0CisJICogZW5naW5lIGxvY2suIFRoZSBzaW1wbGUgcGxveSB3ZSB1c2Ug aXMgdG8gdGFrZSB0aGUgbG9jayB0aGVuCisJICogY2hlY2sgdGhhdCB0aGUgcnEgc3RpbGwgYmVs b25ncyB0byB0aGUgbmV3bHkgbG9ja2VkIGVuZ2luZS4KKwkgKi8KKwl3aGlsZSAobG9ja2VkICE9 IChlbmdpbmUgPSBSRUFEX09OQ0UocnEtPmVuZ2luZSkpKSB7CiAJCXNwaW5fdW5sb2NrKCZsb2Nr ZWQtPnRpbWVsaW5lLmxvY2spOwogCQltZW1zZXQoY2FjaGUsIDAsIHNpemVvZigqY2FjaGUpKTsK IAkJc3Bpbl9sb2NrKCZlbmdpbmUtPnRpbWVsaW5lLmxvY2spOworCQlsb2NrZWQgPSBlbmdpbmU7 CiAJfQogCi0JcmV0dXJuIGVuZ2luZTsKKwlHRU1fQlVHX09OKGxvY2tlZCAhPSBlbmdpbmUpOwor CXJldHVybiBsb2NrZWQ7CiB9CiAKIHN0YXRpYyBib29sIGluZmxpZ2h0KGNvbnN0IHN0cnVjdCBp OTE1X3JlcXVlc3QgKnJxLApAQCAtMzcwLDggKzM3OSwxMSBAQCBzdGF0aWMgdm9pZCBfX2k5MTVf c2NoZWR1bGUoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsCiAJCWlmIChwcmlvIDw9IG5vZGUtPmF0 dHIucHJpb3JpdHkgfHwgbm9kZV9zaWduYWxlZChub2RlKSkKIAkJCWNvbnRpbnVlOwogCisJCUdF TV9CVUdfT04obm9kZV90b19yZXF1ZXN0KG5vZGUpLT5lbmdpbmUgIT0gZW5naW5lKTsKKwogCQlu b2RlLT5hdHRyLnByaW9yaXR5ID0gcHJpbzsKIAkJaWYgKCFsaXN0X2VtcHR5KCZub2RlLT5saW5r KSkgeworCQkJR0VNX0JVR19PTihpbnRlbF9lbmdpbmVfaXNfdmlydHVhbChlbmdpbmUpKTsKIAkJ CWlmICghY2FjaGUucHJpb2xpc3QpCiAJCQkJY2FjaGUucHJpb2xpc3QgPQogCQkJCQlpOTE1X3Nj aGVkX2xvb2t1cF9wcmlvbGlzdChlbmdpbmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X3RpbWVsaW5lX3R5cGVzLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3Rp bWVsaW5lX3R5cGVzLmgKaW5kZXggOGZmMTQ2ZGMwNWJhLi41ZTQ0NWYxNDVlYjEgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfdGltZWxpbmVfdHlwZXMuaAorKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3RpbWVsaW5lX3R5cGVzLmgKQEAgLTI1LDYgKzI1LDcgQEAg c3RydWN0IGk5MTVfdGltZWxpbmUgewogCXNwaW5sb2NrX3QgbG9jazsKICNkZWZpbmUgVElNRUxJ TkVfQ0xJRU5UIDAgLyogZGVmYXVsdCBzdWJjbGFzcyAqLwogI2RlZmluZSBUSU1FTElORV9FTkdJ TkUgMQorI2RlZmluZSBUSU1FTElORV9WSVJUVUFMIDIKIAlzdHJ1Y3QgbXV0ZXggbXV0ZXg7IC8q IHByb3RlY3RzIHRoZSBmbG93IG9mIHJlcXVlc3RzICovCiAKIAl1bnNpZ25lZCBpbnQgcGluX2Nv dW50OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZW5naW5lX3R5cGVz LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9lbmdpbmVfdHlwZXMuaAppbmRleCA4OGVk N2JhODg4NmYuLjMyMmZiZGE2NTE5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfZW5naW5lX3R5cGVzLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZW5n aW5lX3R5cGVzLmgKQEAgLTIxOCw2ICsyMTgsNyBAQCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2V4ZWNs aXN0cyB7CiAJICogQHF1ZXVlOiBxdWV1ZSBvZiByZXF1ZXN0cywgaW4gcHJpb3JpdHkgbGlzdHMK IAkgKi8KIAlzdHJ1Y3QgcmJfcm9vdF9jYWNoZWQgcXVldWU7CisJc3RydWN0IHJiX3Jvb3RfY2Fj aGVkIHZpcnR1YWw7CiAKIAkvKioKIAkgKiBAY3NiX3dyaXRlOiBjb250cm9sIHJlZ2lzdGVyIGZv ciBDb250ZXh0IFN3aXRjaCBidWZmZXIKQEAgLTQyMyw2ICs0MjQsNyBAQCBzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzIHsKICNkZWZpbmUgSTkxNV9FTkdJTkVfU1VQUE9SVFNfU1RBVFMgICBCSVQoMSkK ICNkZWZpbmUgSTkxNV9FTkdJTkVfSEFTX1BSRUVNUFRJT04gICBCSVQoMikKICNkZWZpbmUgSTkx NV9FTkdJTkVfSEFTX1NFTUFQSE9SRVMgICBCSVQoMykKKyNkZWZpbmUgSTkxNV9FTkdJTkVfSVNf VklSVFVBTCAgICAgICBCSVQoNCkKIAl1bnNpZ25lZCBpbnQgZmxhZ3M7CiAKIAkvKgpAQCAtNTA2 LDYgKzUwOCwxMiBAQCBpbnRlbF9lbmdpbmVfaGFzX3NlbWFwaG9yZXMoY29uc3Qgc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqZW5naW5lKQogCXJldHVybiBlbmdpbmUtPmZsYWdzICYgSTkxNV9FTkdJ TkVfSEFTX1NFTUFQSE9SRVM7CiB9CiAKK3N0YXRpYyBpbmxpbmUgYm9vbAoraW50ZWxfZW5naW5l X2lzX3ZpcnR1YWwoY29uc3Qgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQoreworCXJl dHVybiBlbmdpbmUtPmZsYWdzICYgSTkxNV9FTkdJTkVfSVNfVklSVFVBTDsKK30KKwogI2RlZmlu ZSBpbnN0ZG9uZV9zbGljZV9tYXNrKGRldl9wcml2X18pIFwKIAkoSVNfR0VOKGRldl9wcml2X18s IDcpID8gXAogCSAxIDogUlVOVElNRV9JTkZPKGRldl9wcml2X18pLT5zc2V1LnNsaWNlX21hc2sp CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuYyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX2xyYy5jCmluZGV4IDZlOWJkNzBmNWU5Mi4uZDU0YjdjYzQzNjMz IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuYworKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuYwpAQCAtMTY2LDYgKzE2Niw0MSBAQAogCiAjZGVm aW5lIEFDVElWRV9QUklPUklUWSAoSTkxNV9QUklPUklUWV9ORVdDTElFTlQgfCBJOTE1X1BSSU9S SVRZX05PU0VNQVBIT1JFKQogCitzdHJ1Y3QgdmlydHVhbF9lbmdpbmUgeworCXN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgYmFzZTsKKwlzdHJ1Y3QgaW50ZWxfY29udGV4dCBjb250ZXh0OworCisJLyoK KwkgKiBXZSBhbGxvdyBvbmx5IGEgc2luZ2xlIHJlcXVlc3QgdGhyb3VnaCB0aGUgdmlydHVhbCBl bmdpbmUgYXQgYSB0aW1lCisJICogKGVhY2ggcmVxdWVzdCBpbiB0aGUgdGltZWxpbmUgd2FpdHMg Zm9yIHRoZSBjb21wbGV0aW9uIGZlbmNlIG9mCisJICogdGhlIHByZXZpb3VzIGJlZm9yZSBiZWlu ZyBzdWJtaXR0ZWQpLiBCeSByZXN0cmljdGluZyBvdXJzZWx2ZXMgdG8KKwkgKiBvbmx5IHN1Ym1p dHRpbmcgYSBzaW5nbGUgcmVxdWVzdCwgZWFjaCByZXF1ZXN0IGlzIHBsYWNlZCBvbiB0byBhCisJ ICogcGh5c2ljYWwgdG8gbWF4aW1pc2UgbG9hZCBzcHJlYWRpbmcgKGJ5IHZpcnR1ZSBvZiB0aGUg bGF0ZSBncmVlZHkKKwkgKiBzY2hlZHVsaW5nIC0tIGVhY2ggcmVhbCBlbmdpbmUgdGFrZXMgdGhl IG5leHQgYXZhaWxhYmxlIHJlcXVlc3QKKwkgKiB1cG9uIGlkbGluZykuCisJICovCisJc3RydWN0 IGk5MTVfcmVxdWVzdCAqcmVxdWVzdDsKKworCS8qCisJICogV2Uga2VlcCBhIHJidHJlZSBvZiBh dmFpbGFibGUgdmlydHVhbCBlbmdpbmVzIGluc2lkZSBlYWNoIHBoeXNpY2FsCisJICogZW5naW5l LCBzb3J0ZWQgYnkgcHJpb3JpdHkuIEhlcmUgd2UgcHJlYWxsb2NhdGUgdGhlIG5vZGVzIHdlIG5l ZWQKKwkgKiBmb3IgdGhlIHZpcnR1YWwgZW5naW5lLCBpbmRleGVkIGJ5IHBoeXNpY2FsX2VuZ2lu ZS0+aWQuCisJICovCisJc3RydWN0IHZlX25vZGUgeworCQlzdHJ1Y3QgcmJfbm9kZSByYjsKKwkJ aW50IHByaW87CisJfSBub2Rlc1tJOTE1X05VTV9FTkdJTkVTXTsKKworCS8qIEFuZCBmaW5hbGx5 LCB3aGljaCBwaHlzaWNhbCBlbmdpbmVzIHRoaXMgdmlydHVhbCBlbmdpbmUgbWFwcyBvbnRvLiAq LworCXVuc2lnbmVkIGludCBjb3VudDsKKwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpzaWJsaW5n c1swXTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgdmlydHVhbF9lbmdpbmUgKnRvX3ZpcnR1YWxfZW5n aW5lKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKK3sKKwlyZXR1cm4gY29udGFpbmVy X29mKGVuZ2luZSwgc3RydWN0IHZpcnR1YWxfZW5naW5lLCBiYXNlKTsKK30KKwogc3RhdGljIGlu dCBleGVjbGlzdHNfY29udGV4dF9kZWZlcnJlZF9hbGxvYyhzdHJ1Y3QgaW50ZWxfY29udGV4dCAq Y2UsCiAJCQkJCSAgICBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpOwogc3RhdGljIHZv aWQgZXhlY2xpc3RzX2luaXRfcmVnX3N0YXRlKHUzMiAqcmVnX3N0YXRlLApAQCAtMjI5LDcgKzI2 NCw4IEBAIHN0YXRpYyBpbnQgcXVldWVfcHJpbyhjb25zdCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2V4 ZWNsaXN0cyAqZXhlY2xpc3RzKQogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgbmVlZF9wcmVlbXB0 KGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKLQkJCQljb25zdCBzdHJ1Y3Qg aTkxNV9yZXF1ZXN0ICpycSkKKwkJCQljb25zdCBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwKKwkJ CQlzdHJ1Y3QgcmJfbm9kZSAqcmIpCiB7CiAJaW50IGxhc3RfcHJpbzsKIApAQCAtMjY0LDYgKzMw MCwyMiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbmVlZF9wcmVlbXB0KGNvbnN0IHN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKmVuZ2luZSwKIAkgICAgcnFfcHJpbyhsaXN0X25leHRfZW50cnkocnEsIGxp bmspKSA+IGxhc3RfcHJpbykKIAkJcmV0dXJuIHRydWU7CiAKKwlpZiAocmIpIHsgLyogWFhYIHZp cnR1YWwgcHJlY2VkZW5jZSAqLworCQlzdHJ1Y3QgdmlydHVhbF9lbmdpbmUgKnZlID0KKwkJCXJi X2VudHJ5KHJiLCB0eXBlb2YoKnZlKSwgbm9kZXNbZW5naW5lLT5pZF0ucmIpOworCQlib29sIHBy ZWVtcHQgPSBmYWxzZTsKKworCQlpZiAoZW5naW5lID09IHZlLT5zaWJsaW5nc1swXSkgeyAvKiBv bmx5IHByZWVtcHQgb25lIHNpYmxpbmcgKi8KKwkJCXNwaW5fbG9jaygmdmUtPmJhc2UudGltZWxp bmUubG9jayk7CisJCQlpZiAodmUtPnJlcXVlc3QpCisJCQkJcHJlZW1wdCA9IHJxX3ByaW8odmUt PnJlcXVlc3QpID4gbGFzdF9wcmlvOworCQkJc3Bpbl91bmxvY2soJnZlLT5iYXNlLnRpbWVsaW5l LmxvY2spOworCQl9CisKKwkJaWYgKHByZWVtcHQpCisJCQlyZXR1cm4gcHJlZW1wdDsKKwl9CisK IAkvKgogCSAqIElmIHRoZSBpbmZsaWdodCBjb250ZXh0IGRpZCBub3QgdHJpZ2dlciB0aGUgcHJl ZW1wdGlvbiwgdGhlbiBtYXliZQogCSAqIGl0IHdhcyB0aGUgc2V0IG9mIHF1ZXVlZCByZXF1ZXN0 cz8gUGljayB0aGUgaGlnaGVzdCBwcmlvcml0eSBpbgpAQCAtMzgyLDYgKzQzNCw4IEBAIF9fdW53 aW5kX2luY29tcGxldGVfcmVxdWVzdHMoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQog CWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZV9yZXZlcnNlKHJxLCBybiwKIAkJCQkJICZlbmdpbmUt PnRpbWVsaW5lLnJlcXVlc3RzLAogCQkJCQkgbGluaykgeworCQlzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICpvd25lcjsKKwogCQlpZiAoaTkxNV9yZXF1ZXN0X2NvbXBsZXRlZChycSkpCiAJCQlicmVh azsKIApAQCAtMzkwLDE0ICs0NDQsMzAgQEAgX191bndpbmRfaW5jb21wbGV0ZV9yZXF1ZXN0cyhz dHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCiAKIAkJR0VNX0JVR19PTihycS0+aHdfY29u dGV4dC0+YWN0aXZlKTsKIAotCQlHRU1fQlVHX09OKHJxX3ByaW8ocnEpID09IEk5MTVfUFJJT1JJ VFlfSU5WQUxJRCk7Ci0JCWlmIChycV9wcmlvKHJxKSAhPSBwcmlvKSB7Ci0JCQlwcmlvID0gcnFf cHJpbyhycSk7Ci0JCQlwbCA9IGk5MTVfc2NoZWRfbG9va3VwX3ByaW9saXN0KGVuZ2luZSwgcHJp byk7Ci0JCX0KLQkJR0VNX0JVR19PTihSQl9FTVBUWV9ST09UKCZlbmdpbmUtPmV4ZWNsaXN0cy5x dWV1ZS5yYl9yb290KSk7CisJCS8qCisJCSAqIFB1c2ggdGhlIHJlcXVlc3QgYmFjayBpbnRvIHRo ZSBxdWV1ZSBmb3IgbGF0ZXIgcmVzdWJtaXNzaW9uLgorCQkgKiBJZiB0aGlzIHJlcXVlc3QgaXMg bm90IG5hdGl2ZSB0byB0aGlzIHBoeXNpY2FsIGVuZ2luZSAoaS5lLgorCQkgKiBpdCBjYW1lIGZy b20gYSB2aXJ0dWFsIHNvdXJjZSksIHB1c2ggaXQgYmFjayBvbnRvIHRoZSB2aXJ0dWFsCisJCSAq IGVuZ2luZSBzbyB0aGF0IGl0IGNhbiBiZSBtb3ZlZCBhY3Jvc3Mgb250byBhbm90aGVyIHBoeXNp Y2FsCisJCSAqIGVuZ2luZSBhcyBsb2FkIGRpY3RhdGVzLgorCQkgKi8KKwkJb3duZXIgPSBycS0+ aHdfY29udGV4dC0+ZW5naW5lOworCQlpZiAobGlrZWx5KG93bmVyID09IGVuZ2luZSkpIHsKKwkJ CUdFTV9CVUdfT04ocnFfcHJpbyhycSkgPT0gSTkxNV9QUklPUklUWV9JTlZBTElEKTsKKwkJCWlm IChycV9wcmlvKHJxKSAhPSBwcmlvKSB7CisJCQkJcHJpbyA9IHJxX3ByaW8ocnEpOworCQkJCXBs ID0gaTkxNV9zY2hlZF9sb29rdXBfcHJpb2xpc3QoZW5naW5lLCBwcmlvKTsKKwkJCX0KKwkJCUdF TV9CVUdfT04oUkJfRU1QVFlfUk9PVCgmZW5naW5lLT5leGVjbGlzdHMucXVldWUucmJfcm9vdCkp OwogCi0JCWxpc3RfYWRkKCZycS0+c2NoZWQubGluaywgcGwpOworCQkJbGlzdF9hZGQoJnJxLT5z Y2hlZC5saW5rLCBwbCk7CisJCX0gZWxzZSB7CisJCQlpZiAoX19pOTE1X3JlcXVlc3RfaGFzX3N0 YXJ0ZWQocnEpKQorCQkJCXJxLT5zY2hlZC5hdHRyLnByaW9yaXR5IHw9IEFDVElWRV9QUklPUklU WTsKKworCQkJcnEtPmVuZ2luZSA9IG93bmVyOworCQkJb3duZXItPnN1Ym1pdF9yZXF1ZXN0KHJx KTsKKwkJfQogCiAJCWFjdGl2ZSA9IHJxOwogCX0KQEAgLTY1OSw2ICs3MjksNTAgQEAgc3RhdGlj IHZvaWQgY29tcGxldGVfcHJlZW1wdF9jb250ZXh0KHN0cnVjdCBpbnRlbF9lbmdpbmVfZXhlY2xp c3RzICpleGVjbGlzdHMpCiAJCQkJCQkgIGV4ZWNsaXN0cykpOwogfQogCitzdGF0aWMgdm9pZCB2 aXJ0dWFsX3VwZGF0ZV9yZWdpc3Rlcl9vZmZzZXRzKHUzMiAqcmVncywKKwkJCQkJICAgIHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKK3sKKwl1MzIgYmFzZSA9IGVuZ2luZS0+bW1pb19i YXNlOworCisJcmVnc1tDVFhfQ09OVEVYVF9DT05UUk9MXSA9CisJCWk5MTVfbW1pb19yZWdfb2Zm c2V0KFJJTkdfQ09OVEVYVF9DT05UUk9MKGVuZ2luZSkpOworCXJlZ3NbQ1RYX1JJTkdfSEVBRF0g PSBpOTE1X21taW9fcmVnX29mZnNldChSSU5HX0hFQUQoYmFzZSkpOworCXJlZ3NbQ1RYX1JJTkdf VEFJTF0gPSBpOTE1X21taW9fcmVnX29mZnNldChSSU5HX1RBSUwoYmFzZSkpOworCXJlZ3NbQ1RY X1JJTkdfQlVGRkVSX1NUQVJUXSA9IGk5MTVfbW1pb19yZWdfb2Zmc2V0KFJJTkdfU1RBUlQoYmFz ZSkpOworCXJlZ3NbQ1RYX1JJTkdfQlVGRkVSX0NPTlRST0xdID0gaTkxNV9tbWlvX3JlZ19vZmZz ZXQoUklOR19DVEwoYmFzZSkpOworCisJcmVnc1tDVFhfQkJfSEVBRF9VXSA9IGk5MTVfbW1pb19y ZWdfb2Zmc2V0KFJJTkdfQkJBRERSX1VEVyhiYXNlKSk7CisJcmVnc1tDVFhfQkJfSEVBRF9MXSA9 IGk5MTVfbW1pb19yZWdfb2Zmc2V0KFJJTkdfQkJBRERSKGJhc2UpKTsKKwlyZWdzW0NUWF9CQl9T VEFURV0gPSBpOTE1X21taW9fcmVnX29mZnNldChSSU5HX0JCU1RBVEUoYmFzZSkpOworCXJlZ3Nb Q1RYX1NFQ09ORF9CQl9IRUFEX1VdID0KKwkJaTkxNV9tbWlvX3JlZ19vZmZzZXQoUklOR19TQkJB RERSX1VEVyhiYXNlKSk7CisJcmVnc1tDVFhfU0VDT05EX0JCX0hFQURfTF0gPSBpOTE1X21taW9f cmVnX29mZnNldChSSU5HX1NCQkFERFIoYmFzZSkpOworCXJlZ3NbQ1RYX1NFQ09ORF9CQl9TVEFU RV0gPSBpOTE1X21taW9fcmVnX29mZnNldChSSU5HX1NCQlNUQVRFKGJhc2UpKTsKKworCXJlZ3Nb Q1RYX0NUWF9USU1FU1RBTVBdID0KKwkJaTkxNV9tbWlvX3JlZ19vZmZzZXQoUklOR19DVFhfVElN RVNUQU1QKGJhc2UpKTsKKwlyZWdzW0NUWF9QRFAzX1VEV10gPSBpOTE1X21taW9fcmVnX29mZnNl dChHRU44X1JJTkdfUERQX1VEVyhlbmdpbmUsIDMpKTsKKwlyZWdzW0NUWF9QRFAzX0xEV10gPSBp OTE1X21taW9fcmVnX29mZnNldChHRU44X1JJTkdfUERQX0xEVyhlbmdpbmUsIDMpKTsKKwlyZWdz W0NUWF9QRFAyX1VEV10gPSBpOTE1X21taW9fcmVnX29mZnNldChHRU44X1JJTkdfUERQX1VEVyhl bmdpbmUsIDIpKTsKKwlyZWdzW0NUWF9QRFAyX0xEV10gPSBpOTE1X21taW9fcmVnX29mZnNldChH RU44X1JJTkdfUERQX0xEVyhlbmdpbmUsIDIpKTsKKwlyZWdzW0NUWF9QRFAxX1VEV10gPSBpOTE1 X21taW9fcmVnX29mZnNldChHRU44X1JJTkdfUERQX1VEVyhlbmdpbmUsIDEpKTsKKwlyZWdzW0NU WF9QRFAxX0xEV10gPSBpOTE1X21taW9fcmVnX29mZnNldChHRU44X1JJTkdfUERQX0xEVyhlbmdp bmUsIDEpKTsKKwlyZWdzW0NUWF9QRFAwX1VEV10gPSBpOTE1X21taW9fcmVnX29mZnNldChHRU44 X1JJTkdfUERQX1VEVyhlbmdpbmUsIDApKTsKKwlyZWdzW0NUWF9QRFAwX0xEV10gPSBpOTE1X21t aW9fcmVnX29mZnNldChHRU44X1JJTkdfUERQX0xEVyhlbmdpbmUsIDApKTsKKworCWlmIChlbmdp bmUtPmNsYXNzID09IFJFTkRFUl9DTEFTUykgeworCQlyZWdzW0NUWF9SQ1NfSU5ESVJFQ1RfQ1RY XSA9CisJCQlpOTE1X21taW9fcmVnX29mZnNldChSSU5HX0lORElSRUNUX0NUWChiYXNlKSk7CisJ CXJlZ3NbQ1RYX1JDU19JTkRJUkVDVF9DVFhfT0ZGU0VUXSA9CisJCQlpOTE1X21taW9fcmVnX29m ZnNldChSSU5HX0lORElSRUNUX0NUWF9PRkZTRVQoYmFzZSkpOworCQlyZWdzW0NUWF9CQl9QRVJf Q1RYX1BUUl0gPQorCQkJaTkxNV9tbWlvX3JlZ19vZmZzZXQoUklOR19CQl9QRVJfQ1RYX1BUUihi YXNlKSk7CisKKwkJcmVnc1tDVFhfUl9QV1JfQ0xLX1NUQVRFXSA9CisJCQlpOTE1X21taW9fcmVn X29mZnNldChHRU44X1JfUFdSX0NMS19TVEFURSk7CisJfQorfQorCiBzdGF0aWMgdm9pZCBleGVj bGlzdHNfZGVxdWV1ZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCiB7CiAJc3RydWN0 IGludGVsX2VuZ2luZV9leGVjbGlzdHMgKiBjb25zdCBleGVjbGlzdHMgPSAmZW5naW5lLT5leGVj bGlzdHM7CkBAIC02OTEsNiArODA1LDM3IEBAIHN0YXRpYyB2b2lkIGV4ZWNsaXN0c19kZXF1ZXVl KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKIAkgKiBhbmQgY29udGV4dCBzd2l0Y2hl cykgc3VibWlzc2lvbi4KIAkgKi8KIAorCWZvciAocmIgPSByYl9maXJzdF9jYWNoZWQoJmV4ZWNs aXN0cy0+dmlydHVhbCk7IHJiOyApIHsKKwkJc3RydWN0IHZpcnR1YWxfZW5naW5lICp2ZSA9CisJ CQlyYl9lbnRyeShyYiwgdHlwZW9mKCp2ZSksIG5vZGVzW2VuZ2luZS0+aWRdLnJiKTsKKwkJc3Ry dWN0IGk5MTVfcmVxdWVzdCAqcnEgPSBSRUFEX09OQ0UodmUtPnJlcXVlc3QpOworCQlzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICphY3RpdmU7CisKKwkJaWYgKCFycSkgeyAvKiBsYXppbHkgY2xlYW51 cCBhZnRlciBhbm90aGVyIGVuZ2luZSBoYW5kbGVkIHJxICovCisJCQlyYl9lcmFzZV9jYWNoZWQo cmIsICZleGVjbGlzdHMtPnZpcnR1YWwpOworCQkJUkJfQ0xFQVJfTk9ERShyYik7CisJCQlyYiA9 IHJiX2ZpcnN0X2NhY2hlZCgmZXhlY2xpc3RzLT52aXJ0dWFsKTsKKwkJCWNvbnRpbnVlOworCQl9 CisKKwkJLyoKKwkJICogV2UgdHJhY2sgd2hlbiB0aGUgSFcgaGFzIGNvbXBsZXRlZCBzYXZpbmcg dGhlIGNvbnRleHQgaW1hZ2UKKwkJICogKGkuZS4gd2hlbiB3ZSBoYXZlIHNlZW4gdGhlIGZpbmFs IENTIGV2ZW50IHN3aXRjaGluZyBvdXQgb2YKKwkJICogdGhlIGNvbnRleHQpIGFuZCBtdXN0IG5v dCBvdmVyd3JpdGUgdGhlIGNvbnRleHQgaW1hZ2UgYmVmb3JlCisJCSAqIHRoZW4uIFRoaXMgcmVz dHJpY3RzIHVzIHRvIG9ubHkgdXNpbmcgdGhlIGFjdGl2ZSBlbmdpbmUKKwkJICogd2hpbGUgdGhl IHByZXZpb3VzIHZpcnR1YWxpemVkIHJlcXVlc3QgaXMgaW5mbGlnaHQgKHNvCisJCSAqIHdlIHJl dXNlIHRoZSByZWdpc3RlciBvZmZzZXRzKS4gVGhpcyBpcyBhIHZlcnkgc21hbGwKKwkJICogaHlz dGVyc2lzIG9uIHRoZSBncmVlZHkgc2VlbGN0aW9uIGFsZ29yaXRobS4KKwkJICovCisJCWFjdGl2 ZSA9IFJFQURfT05DRSh2ZS0+Y29udGV4dC5hY3RpdmUpOworCQlpZiAoYWN0aXZlICYmIGFjdGl2 ZSAhPSBlbmdpbmUpIHsKKwkJCXJiID0gcmJfbmV4dChyYik7CisJCQljb250aW51ZTsKKwkJfQor CisJCWJyZWFrOworCX0KKwogCWlmIChsYXN0KSB7CiAJCS8qCiAJCSAqIERvbid0IHJlc3VibWl0 IG9yIHN3aXRjaCB1bnRpbCBhbGwgb3V0c3RhbmRpbmcKQEAgLTcxMiw3ICs4NTcsNyBAQCBzdGF0 aWMgdm9pZCBleGVjbGlzdHNfZGVxdWV1ZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUp CiAJCWlmICghZXhlY2xpc3RzX2lzX2FjdGl2ZShleGVjbGlzdHMsIEVYRUNMSVNUU19BQ1RJVkVf SFdBQ0spKQogCQkJcmV0dXJuOwogCi0JCWlmIChuZWVkX3ByZWVtcHQoZW5naW5lLCBsYXN0KSkg eworCQlpZiAobmVlZF9wcmVlbXB0KGVuZ2luZSwgbGFzdCwgcmIpKSB7CiAJCQlpbmplY3RfcHJl ZW1wdF9jb250ZXh0KGVuZ2luZSk7CiAJCQlyZXR1cm47CiAJCX0KQEAgLTc1Miw2ICs4OTcsNzIg QEAgc3RhdGljIHZvaWQgZXhlY2xpc3RzX2RlcXVldWUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAq ZW5naW5lKQogCQlsYXN0LT50YWlsID0gbGFzdC0+d2FfdGFpbDsKIAl9CiAKKwl3aGlsZSAocmIp IHsgLyogWFhYIHZpcnR1YWwgaXMgYWx3YXlzIHRha2luZyBwcmVjZWRlbmNlICovCisJCXN0cnVj dCB2aXJ0dWFsX2VuZ2luZSAqdmUgPQorCQkJcmJfZW50cnkocmIsIHR5cGVvZigqdmUpLCBub2Rl c1tlbmdpbmUtPmlkXS5yYik7CisJCXN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxOworCisJCXNwaW5f bG9jaygmdmUtPmJhc2UudGltZWxpbmUubG9jayk7CisKKwkJcnEgPSB2ZS0+cmVxdWVzdDsKKwkJ aWYgKHVubGlrZWx5KCFycSkpIHsgLyogbG9zdCB0aGUgcmFjZSB0byBhIHNpYmxpbmcgKi8KKwkJ CXNwaW5fdW5sb2NrKCZ2ZS0+YmFzZS50aW1lbGluZS5sb2NrKTsKKwkJCXJiX2VyYXNlX2NhY2hl ZChyYiwgJmV4ZWNsaXN0cy0+dmlydHVhbCk7CisJCQlSQl9DTEVBUl9OT0RFKHJiKTsKKwkJCXJi ID0gcmJfZmlyc3RfY2FjaGVkKCZleGVjbGlzdHMtPnZpcnR1YWwpOworCQkJY29udGludWU7CisJ CX0KKworCQlpZiAocnFfcHJpbyhycSkgPj0gcXVldWVfcHJpbyhleGVjbGlzdHMpKSB7CisJCQlp ZiAobGFzdCAmJiAhY2FuX21lcmdlX3JxKGxhc3QsIHJxKSkgeworCQkJCXNwaW5fdW5sb2NrKCZ2 ZS0+YmFzZS50aW1lbGluZS5sb2NrKTsKKwkJCQlyZXR1cm47IC8qIGxlYXZlIHRoaXMgcnEgZm9y IGFub3RoZXIgZW5naW5lICovCisJCQl9CisKKwkJCUdFTV9CVUdfT04ocnEtPmVuZ2luZSAhPSAm dmUtPmJhc2UpOworCQkJdmUtPnJlcXVlc3QgPSBOVUxMOworCQkJdmUtPmJhc2UuZXhlY2xpc3Rz LnF1ZXVlX3ByaW9yaXR5X2hpbnQgPSBJTlRfTUlOOworCQkJcmJfZXJhc2VfY2FjaGVkKHJiLCAm ZXhlY2xpc3RzLT52aXJ0dWFsKTsKKwkJCVJCX0NMRUFSX05PREUocmIpOworCisJCQlHRU1fQlVH X09OKHJxLT5od19jb250ZXh0ICE9ICZ2ZS0+Y29udGV4dCk7CisJCQlycS0+ZW5naW5lID0gZW5n aW5lOworCisJCQlpZiAoZW5naW5lICE9IHZlLT5zaWJsaW5nc1swXSkgeworCQkJCXUzMiAqcmVn cyA9IHZlLT5jb250ZXh0LmxyY19yZWdfc3RhdGU7CisJCQkJdW5zaWduZWQgaW50IG47CisKKwkJ CQlHRU1fQlVHX09OKFJFQURfT05DRSh2ZS0+Y29udGV4dC5hY3RpdmUpKTsKKwkJCQl2aXJ0dWFs X3VwZGF0ZV9yZWdpc3Rlcl9vZmZzZXRzKHJlZ3MsIGVuZ2luZSk7CisKKwkJCQkvKgorCQkJCSAq IE1vdmUgdGhlIGJvdW5kIGVuZ2luZSB0byB0aGUgdG9wIG9mIHRoZSBsaXN0CisJCQkJICogZm9y IGZ1dHVyZSBleGVjdXRpb24uIFdlIHRoZW4ga2ljayB0aGlzCisJCQkJICogdGFza2xldCBmaXJz dCBiZWZvcmUgY2hlY2tpbmcgb3RoZXJzLCBzbyB0aGF0CisJCQkJICogd2UgcHJlZmVyZW50aWFs bHkgcmV1c2UgdGhpcyBzZXQgb2YgYm91bmQKKwkJCQkgKiByZWdpc3RlcnMuCisJCQkJICovCisJ CQkJZm9yIChuID0gMTsgbiA8IHZlLT5jb3VudDsgbisrKSB7CisJCQkJCWlmICh2ZS0+c2libGlu Z3Nbbl0gPT0gZW5naW5lKSB7CisJCQkJCQlzd2FwKHZlLT5zaWJsaW5nc1tuXSwKKwkJCQkJCSAg ICAgdmUtPnNpYmxpbmdzWzBdKTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCisJCQkJ R0VNX0JVR19PTih2ZS0+c2libGluZ3NbMF0gIT0gZW5naW5lKTsKKwkJCX0KKworCQkJX19pOTE1 X3JlcXVlc3Rfc3VibWl0KHJxKTsKKwkJCXRyYWNlX2k5MTVfcmVxdWVzdF9pbihycSwgcG9ydF9p bmRleChwb3J0LCBleGVjbGlzdHMpKTsKKwkJCXN1Ym1pdCA9IHRydWU7CisJCQlsYXN0ID0gcnE7 CisJCX0KKworCQlzcGluX3VubG9jaygmdmUtPmJhc2UudGltZWxpbmUubG9jayk7CisJCWJyZWFr OworCX0KKwogCXdoaWxlICgocmIgPSByYl9maXJzdF9jYWNoZWQoJmV4ZWNsaXN0cy0+cXVldWUp KSkgewogCQlzdHJ1Y3QgaTkxNV9wcmlvbGlzdCAqcCA9IHRvX3ByaW9saXN0KHJiKTsKIAkJc3Ry dWN0IGk5MTVfcmVxdWVzdCAqcnEsICpybjsKQEAgLTk3MSw2ICsxMTgyLDI0IEBAIHN0YXRpYyB2 b2lkIGV4ZWNsaXN0c19jYW5jZWxfcmVxdWVzdHMoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5n aW5lKQogCQlpOTE1X3ByaW9saXN0X2ZyZWUocCk7CiAJfQogCisJLyogQ2FuY2VsIGFsbCBhdHRh Y2hlZCB2aXJ0dWFsIGVuZ2luZXMgKi8KKwl3aGlsZSAoKHJiID0gcmJfZmlyc3RfY2FjaGVkKCZl eGVjbGlzdHMtPnZpcnR1YWwpKSkgeworCQlzdHJ1Y3QgdmlydHVhbF9lbmdpbmUgKnZlID0KKwkJ CXJiX2VudHJ5KHJiLCB0eXBlb2YoKnZlKSwgbm9kZXNbZW5naW5lLT5pZF0ucmIpOworCisJCXJi X2VyYXNlX2NhY2hlZChyYiwgJmV4ZWNsaXN0cy0+dmlydHVhbCk7CisJCVJCX0NMRUFSX05PREUo cmIpOworCisJCXNwaW5fbG9jaygmdmUtPmJhc2UudGltZWxpbmUubG9jayk7CisJCWlmICh2ZS0+ cmVxdWVzdCkgeworCQkJX19pOTE1X3JlcXVlc3Rfc3VibWl0KHZlLT5yZXF1ZXN0KTsKKwkJCWRt YV9mZW5jZV9zZXRfZXJyb3IoJnZlLT5yZXF1ZXN0LT5mZW5jZSwgLUVJTyk7CisJCQlpOTE1X3Jl cXVlc3RfbWFya19jb21wbGV0ZSh2ZS0+cmVxdWVzdCk7CisJCQl2ZS0+cmVxdWVzdCA9IE5VTEw7 CisJCX0KKwkJc3Bpbl91bmxvY2soJnZlLT5iYXNlLnRpbWVsaW5lLmxvY2spOworCX0KKwogCS8q IFJlbWFpbmluZyBfdW5yZWFkeV8gcmVxdWVzdHMgd2lsbCBiZSBub3AnZWQgd2hlbiBzdWJtaXR0 ZWQgKi8KIAogCWV4ZWNsaXN0cy0+cXVldWVfcHJpb3JpdHlfaGludCA9IElOVF9NSU47CkBAIC0y ODk5LDYgKzMxMjgsMzA2IEBAIHZvaWQgaW50ZWxfbHJfY29udGV4dF9yZXN1bWUoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmk5MTUpCiAJfQogfQogCitzdGF0aWMgdm9pZCB2aXJ0dWFsX2NvbnRl eHRfZGVzdHJveShzdHJ1Y3Qga3JlZiAqa3JlZikKK3sKKwlzdHJ1Y3QgdmlydHVhbF9lbmdpbmUg KnZlID0KKwkJY29udGFpbmVyX29mKGtyZWYsIHR5cGVvZigqdmUpLCBjb250ZXh0LnJlZik7CisJ dW5zaWduZWQgaW50IG47CisKKwlHRU1fQlVHX09OKHZlLT5yZXF1ZXN0KTsKKwlHRU1fQlVHX09O KHZlLT5jb250ZXh0LmFjdGl2ZSk7CisKKwlmb3IgKG4gPSAwOyBuIDwgdmUtPmNvdW50OyBuKysp IHsKKwkJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqc2libGluZyA9IHZlLT5zaWJsaW5nc1tuXTsK KwkJc3RydWN0IHJiX25vZGUgKm5vZGUgPSAmdmUtPm5vZGVzW3NpYmxpbmctPmlkXS5yYjsKKwor CQlpZiAoUkJfRU1QVFlfTk9ERShub2RlKSkKKwkJCWNvbnRpbnVlOworCisJCXNwaW5fbG9ja19p cnEoJnNpYmxpbmctPnRpbWVsaW5lLmxvY2spOworCisJCWlmICghUkJfRU1QVFlfTk9ERShub2Rl KSkKKwkJCXJiX2VyYXNlX2NhY2hlZChub2RlLCAmc2libGluZy0+ZXhlY2xpc3RzLnZpcnR1YWwp OworCisJCXNwaW5fdW5sb2NrX2lycSgmc2libGluZy0+dGltZWxpbmUubG9jayk7CisJfQorCUdF TV9CVUdfT04oX190YXNrbGV0X2lzX3NjaGVkdWxlZCgmdmUtPmJhc2UuZXhlY2xpc3RzLnRhc2ts ZXQpKTsKKworCWlmICh2ZS0+Y29udGV4dC5zdGF0ZSkKKwkJX19leGVjbGlzdHNfY29udGV4dF9m aW5pKCZ2ZS0+Y29udGV4dCk7CisKKwlpOTE1X3RpbWVsaW5lX2ZpbmkoJnZlLT5iYXNlLnRpbWVs aW5lKTsKKwlrZnJlZSh2ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHZpcnR1YWxfZW5naW5lX2luaXRp YWxfaGludChzdHJ1Y3QgdmlydHVhbF9lbmdpbmUgKnZlKQoreworCWludCBzd3A7CisKKwkvKgor CSAqIFBpY2sgYSByYW5kb20gc2libGluZyBvbiBzdGFydGluZyB0byBoZWxwIHNwcmVhZCB0aGUg bG9hZCBhcm91bmQuCisJICoKKwkgKiBOZXcgY29udGV4dHMgYXJlIHR5cGljYWxseSBjcmVhdGVk IHdpdGggZXhhY3RseSB0aGUgc2FtZSBvcmRlcgorCSAqIG9mIHNpYmxpbmdzLCBhbmQgb2Z0ZW4g c3RhcnRlZCBpbiBiYXRjaGVzLiBEdWUgdG8gdGhlIHdheSB3ZSBpdGVyYXRlCisJICogdGhlIGFy cmF5IG9mIHNpYmxpbmcgd2hlbiBzdWJtaXR0aW5nIHJlcXVlc3RzLCBzaWJsaW5nWzBdIGlzCisJ ICogcHJpb3JpdGlzZWQgZm9yIGRlcXVldWluZy4gSWYgd2UgbWFrZSBzdXJlIHRoYXQgc2libGlu Z1swXSBpcyBmYWlybHkKKwkgKiByYW5kb21pc2VkIGFjcm9zcyB0aGUgc3lzdGVtLCB3ZSBhbHNv IGhlbHAgc3ByZWFkIHRoZSBsb2FkIGJ5IHRoZQorCSAqIGZpcnN0IGVuZ2luZSB3ZSBpbnNwZWN0 IGJlaW5nIGRpZmZlcmVudCBlYWNoIHRpbWUuCisJICoKKwkgKiBOQiBUaGlzIGRvZXMgbm90IGZv cmNlIHVzIHRvIGV4ZWN1dGUgb24gdGhpcyBlbmdpbmUsIGl0IHdpbGwganVzdAorCSAqIHR5cGlj YWxseSBiZSB0aGUgZmlyc3Qgd2UgaW5zcGVjdCBmb3Igc3VibWlzc2lvbi4KKwkgKi8KKwlzd3Ag PSBwcmFuZG9tX3UzMl9tYXgodmUtPmNvdW50KTsKKwlpZiAoIXN3cCkKKwkJcmV0dXJuOworCisJ c3dhcCh2ZS0+c2libGluZ3Nbc3dwXSwgdmUtPnNpYmxpbmdzWzBdKTsKKwl2aXJ0dWFsX3VwZGF0 ZV9yZWdpc3Rlcl9vZmZzZXRzKHZlLT5jb250ZXh0LmxyY19yZWdfc3RhdGUsCisJCQkJCXZlLT5z aWJsaW5nc1swXSk7Cit9CisKK3N0YXRpYyBpbnQgdmlydHVhbF9jb250ZXh0X3BpbihzdHJ1Y3Qg aW50ZWxfY29udGV4dCAqY2UpCit7CisJc3RydWN0IHZpcnR1YWxfZW5naW5lICp2ZSA9IGNvbnRh aW5lcl9vZihjZSwgdHlwZW9mKCp2ZSksIGNvbnRleHQpOworCWludCBlcnI7CisKKwkvKiBOb3Rl OiB3ZSBtdXN0IHVzZSBhIHJlYWwgZW5naW5lIGNsYXNzIGZvciBzZXR0aW5nIHVwIHJlZyBzdGF0 ZSAqLworCWVyciA9IF9fZXhlY2xpc3RzX2NvbnRleHRfcGluKGNlLCB2ZS0+c2libGluZ3NbMF0p OworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwl2aXJ0dWFsX2VuZ2luZV9pbml0aWFsX2hp bnQodmUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGludGVsX2NvbnRl eHRfb3BzIHZpcnR1YWxfY29udGV4dF9vcHMgPSB7CisJLnBpbiA9IHZpcnR1YWxfY29udGV4dF9w aW4sCisJLnVucGluID0gZXhlY2xpc3RzX2NvbnRleHRfdW5waW4sCisKKwkuZGVzdHJveSA9IHZp cnR1YWxfY29udGV4dF9kZXN0cm95LAorfTsKKworc3RhdGljIHZvaWQgdmlydHVhbF9zdWJtaXNz aW9uX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCB2aXJ0dWFsX2VuZ2lu ZSAqIGNvbnN0IHZlID0gKHN0cnVjdCB2aXJ0dWFsX2VuZ2luZSAqKWRhdGE7CisJdW5zaWduZWQg aW50IG47CisJaW50IHByaW87CisKKwlwcmlvID0gUkVBRF9PTkNFKHZlLT5iYXNlLmV4ZWNsaXN0 cy5xdWV1ZV9wcmlvcml0eV9oaW50KTsKKwlpZiAocHJpbyA9PSBJTlRfTUlOKQorCQlyZXR1cm47 CisKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCWZvciAobiA9IDA7IFJFQURfT05DRSh2ZS0+cmVx dWVzdCkgJiYgbiA8IHZlLT5jb3VudDsgbisrKSB7CisJCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3Mg KnNpYmxpbmcgPSB2ZS0+c2libGluZ3Nbbl07CisJCXN0cnVjdCB2ZV9ub2RlICogY29uc3Qgbm9k ZSA9ICZ2ZS0+bm9kZXNbc2libGluZy0+aWRdOworCQlzdHJ1Y3QgcmJfbm9kZSAqKnBhcmVudCwg KnJiOworCQlib29sIGZpcnN0OworCisJCXNwaW5fbG9jaygmc2libGluZy0+dGltZWxpbmUubG9j ayk7CisKKwkJaWYgKCFSQl9FTVBUWV9OT0RFKCZub2RlLT5yYikpIHsKKwkJCS8qCisJCQkgKiBD aGVhdCBhbmQgYXZvaWQgcmViYWxhbmNpbmcgdGhlIHRyZWUgaWYgd2UgY2FuCisJCQkgKiByZXVz ZSB0aGlzIG5vZGUgaW4gc2l0dS4KKwkJCSAqLworCQkJZmlyc3QgPSByYl9maXJzdF9jYWNoZWQo JnNpYmxpbmctPmV4ZWNsaXN0cy52aXJ0dWFsKSA9PQorCQkJCSZub2RlLT5yYjsKKwkJCWlmIChw cmlvID09IG5vZGUtPnByaW8gfHwgKHByaW8gPiBub2RlLT5wcmlvICYmIGZpcnN0KSkKKwkJCQln b3RvIHN1Ym1pdF9lbmdpbmU7CisKKwkJCXJiX2VyYXNlX2NhY2hlZCgmbm9kZS0+cmIsICZzaWJs aW5nLT5leGVjbGlzdHMudmlydHVhbCk7CisJCX0KKworCQlyYiA9IE5VTEw7CisJCWZpcnN0ID0g dHJ1ZTsKKwkJcGFyZW50ID0gJnNpYmxpbmctPmV4ZWNsaXN0cy52aXJ0dWFsLnJiX3Jvb3QucmJf bm9kZTsKKwkJd2hpbGUgKCpwYXJlbnQpIHsKKwkJCXN0cnVjdCB2ZV9ub2RlICpvdGhlcjsKKwor CQkJcmIgPSAqcGFyZW50OworCQkJb3RoZXIgPSByYl9lbnRyeShyYiwgdHlwZW9mKCpvdGhlciks IHJiKTsKKwkJCWlmIChwcmlvID4gb3RoZXItPnByaW8pIHsKKwkJCQlwYXJlbnQgPSAmcmItPnJi X2xlZnQ7CisJCQl9IGVsc2UgeworCQkJCXBhcmVudCA9ICZyYi0+cmJfcmlnaHQ7CisJCQkJZmly c3QgPSBmYWxzZTsKKwkJCX0KKwkJfQorCisJCXJiX2xpbmtfbm9kZSgmbm9kZS0+cmIsIHJiLCBw YXJlbnQpOworCQlyYl9pbnNlcnRfY29sb3JfY2FjaGVkKCZub2RlLT5yYiwKKwkJCQkgICAgICAg JnNpYmxpbmctPmV4ZWNsaXN0cy52aXJ0dWFsLAorCQkJCSAgICAgICBmaXJzdCk7CisKK3N1Ym1p dF9lbmdpbmU6CisJCUdFTV9CVUdfT04oUkJfRU1QVFlfTk9ERSgmbm9kZS0+cmIpKTsKKwkJbm9k ZS0+cHJpbyA9IHByaW87CisJCWlmIChmaXJzdCAmJiBwcmlvID4gc2libGluZy0+ZXhlY2xpc3Rz LnF1ZXVlX3ByaW9yaXR5X2hpbnQpIHsKKwkJCXNpYmxpbmctPmV4ZWNsaXN0cy5xdWV1ZV9wcmlv cml0eV9oaW50ID0gcHJpbzsKKwkJCXRhc2tsZXRfaGlfc2NoZWR1bGUoJnNpYmxpbmctPmV4ZWNs aXN0cy50YXNrbGV0KTsKKwkJfQorCisJCXNwaW5fdW5sb2NrKCZzaWJsaW5nLT50aW1lbGluZS5s b2NrKTsKKwl9CisJbG9jYWxfaXJxX2VuYWJsZSgpOworfQorCitzdGF0aWMgdm9pZCB2aXJ0dWFs X3N1Ym1pdF9yZXF1ZXN0KHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJlcXVlc3QpCit7CisJc3RydWN0 IHZpcnR1YWxfZW5naW5lICp2ZSA9IHRvX3ZpcnR1YWxfZW5naW5lKHJlcXVlc3QtPmVuZ2luZSk7 CisKKwlHRU1fQlVHX09OKHZlLT5iYXNlLnN1Ym1pdF9yZXF1ZXN0ICE9IHZpcnR1YWxfc3VibWl0 X3JlcXVlc3QpOworCisJR0VNX0JVR19PTih2ZS0+cmVxdWVzdCk7CisJdmUtPmJhc2UuZXhlY2xp c3RzLnF1ZXVlX3ByaW9yaXR5X2hpbnQgPSBycV9wcmlvKHJlcXVlc3QpOworCVdSSVRFX09OQ0Uo dmUtPnJlcXVlc3QsIHJlcXVlc3QpOworCisJdGFza2xldF9zY2hlZHVsZSgmdmUtPmJhc2UuZXhl Y2xpc3RzLnRhc2tsZXQpOworfQorCitzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICoKK2ludGVsX2V4 ZWNsaXN0c19jcmVhdGVfdmlydHVhbChzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4LAorCQkJ ICAgICAgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKipzaWJsaW5ncywKKwkJCSAgICAgICB1bnNp Z25lZCBpbnQgY291bnQpCit7CisJc3RydWN0IHZpcnR1YWxfZW5naW5lICp2ZTsKKwl1bnNpZ25l ZCBpbnQgbjsKKwlpbnQgZXJyOworCisJaWYgKCFjb3VudCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVJ TlZBTCk7CisKKwl2ZSA9IGt6YWxsb2Moc3RydWN0X3NpemUodmUsIHNpYmxpbmdzLCBjb3VudCks IEdGUF9LRVJORUwpOworCWlmICghdmUpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJ dmUtPmJhc2UuaTkxNSA9IGN0eC0+aTkxNTsKKwl2ZS0+YmFzZS5pZCA9IC0xOworCXZlLT5iYXNl LmNsYXNzID0gT1RIRVJfQ0xBU1M7CisJdmUtPmJhc2UudWFiaV9jbGFzcyA9IEk5MTVfRU5HSU5F X0NMQVNTX0lOVkFMSUQ7CisJdmUtPmJhc2UuaW5zdGFuY2UgPSBJOTE1X0VOR0lORV9DTEFTU19J TlZBTElEX1ZJUlRVQUw7CisJdmUtPmJhc2UuZmxhZ3MgPSBJOTE1X0VOR0lORV9JU19WSVJUVUFM OworCisJc25wcmludGYodmUtPmJhc2UubmFtZSwgc2l6ZW9mKHZlLT5iYXNlLm5hbWUpLCAidmly dHVhbCIpOworCisJZXJyID0gaTkxNV90aW1lbGluZV9pbml0KGN0eC0+aTkxNSwKKwkJCQkgJnZl LT5iYXNlLnRpbWVsaW5lLAorCQkJCSB2ZS0+YmFzZS5uYW1lLAorCQkJCSBOVUxMKTsKKwlpZiAo ZXJyKQorCQlnb3RvIGVycl9wdXQ7CisJaTkxNV90aW1lbGluZV9zZXRfc3ViY2xhc3MoJnZlLT5i YXNlLnRpbWVsaW5lLCBUSU1FTElORV9WSVJUVUFMKTsKKworCXZlLT5iYXNlLmNvcHMgPSAmdmly dHVhbF9jb250ZXh0X29wczsKKwl2ZS0+YmFzZS5yZXF1ZXN0X2FsbG9jID0gZXhlY2xpc3RzX3Jl cXVlc3RfYWxsb2M7CisKKwl2ZS0+YmFzZS5zY2hlZHVsZSA9IGk5MTVfc2NoZWR1bGU7CisJdmUt PmJhc2Uuc3VibWl0X3JlcXVlc3QgPSB2aXJ0dWFsX3N1Ym1pdF9yZXF1ZXN0OworCisJdmUtPmJh c2UuZXhlY2xpc3RzLnF1ZXVlX3ByaW9yaXR5X2hpbnQgPSBJTlRfTUlOOworCXRhc2tsZXRfaW5p dCgmdmUtPmJhc2UuZXhlY2xpc3RzLnRhc2tsZXQsCisJCSAgICAgdmlydHVhbF9zdWJtaXNzaW9u X3Rhc2tsZXQsCisJCSAgICAgKHVuc2lnbmVkIGxvbmcpdmUpOworCisJaW50ZWxfY29udGV4dF9p bml0KCZ2ZS0+Y29udGV4dCwgY3R4LCAmdmUtPmJhc2UpOworCisJZm9yIChuID0gMDsgbiA8IGNv dW50OyBuKyspIHsKKwkJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqc2libGluZyA9IHNpYmxpbmdz W25dOworCisJCUdFTV9CVUdfT04oIWlzX3Bvd2VyX29mXzIoc2libGluZy0+bWFzaykpOworCQlp ZiAoc2libGluZy0+bWFzayAmIHZlLT5iYXNlLm1hc2spCisJCQljb250aW51ZTsKKworCQkvKgor CQkgKiBUaGUgdmlydHVhbCBlbmdpbmUgaW1wbGVtZW50YXRpb24gaXMgdGlnaHRseSBjb3VwbGVk IHRvCisJCSAqIHRoZSBleGVjbGlzdHMgYmFja2VuZCAtLSB3ZSBwdXNoIG91dCByZXF1ZXN0IGRp cmVjdGx5CisJCSAqIGludG8gYSB0cmVlIGluc2lkZSBlYWNoIHBoeXNpY2FsIGVuZ2luZS4gV2Ug Y291bGQgc3VwcG9ydAorCQkgKiBsYXllcmluZyBpZiB3ZSBoYW5kbGluZyBjbG9uaW5nIG9mIHRo ZSByZXF1ZXN0cyBhbmQKKwkJICogc3VibWl0dGluZyBhIGNvcHkgaW50byBlYWNoIGJhY2tlbmQu CisJCSAqLworCQlpZiAoc2libGluZy0+ZXhlY2xpc3RzLnRhc2tsZXQuZnVuYyAhPQorCQkgICAg ZXhlY2xpc3RzX3N1Ym1pc3Npb25fdGFza2xldCkgeworCQkJZXJyID0gLUVOT0RFVjsKKwkJCWdv dG8gZXJyX3B1dDsKKwkJfQorCisJCUdFTV9CVUdfT04oUkJfRU1QVFlfTk9ERSgmdmUtPm5vZGVz W3NpYmxpbmctPmlkXS5yYikpOworCQlSQl9DTEVBUl9OT0RFKCZ2ZS0+bm9kZXNbc2libGluZy0+ aWRdLnJiKTsKKworCQl2ZS0+c2libGluZ3NbdmUtPmNvdW50KytdID0gc2libGluZzsKKwkJdmUt PmJhc2UubWFzayB8PSBzaWJsaW5nLT5tYXNrOworCisJCS8qCisJCSAqIEFsbCBwaHlzaWNhbCBl bmdpbmVzIG11c3QgYmUgY29tcGF0aWJsZSBmb3IgdGhlaXIgZW1pc3Npb24KKwkJICogZnVuY3Rp b25zIChhcyB3ZSBidWlsZCB0aGUgaW5zdHJ1Y3Rpb25zIGR1cmluZyByZXF1ZXN0CisJCSAqIGNv bnN0cnVjdGlvbiBhbmQgZG8gbm90IGFsdGVyIHRoZW0gYmVmb3JlIHN1Ym1pc3Npb24KKwkJICog b24gdGhlIHBoeXNpY2FsIGVuZ2luZSkuIFdlIHVzZSB0aGUgZW5naW5lIGNsYXNzIGFzIGEgZ3Vp ZGUKKwkJICogaGVyZSwgYWx0aG91Z2ggdGhhdCBjb3VsZCBiZSByZWZpbmVkLgorCQkgKi8KKwkJ aWYgKHZlLT5iYXNlLmNsYXNzICE9IE9USEVSX0NMQVNTKSB7CisJCQlpZiAodmUtPmJhc2UuY2xh c3MgIT0gc2libGluZy0+Y2xhc3MpIHsKKwkJCQllcnIgPSAtRUlOVkFMOworCQkJCWdvdG8gZXJy X3B1dDsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisKKwkJdmUtPmJhc2UuY2xhc3MgPSBzaWJs aW5nLT5jbGFzczsKKwkJc25wcmludGYodmUtPmJhc2UubmFtZSwgc2l6ZW9mKHZlLT5iYXNlLm5h bWUpLAorCQkJICJ2JWR4JWQiLCB2ZS0+YmFzZS5jbGFzcywgY291bnQpOworCQl2ZS0+YmFzZS5j b250ZXh0X3NpemUgPSBzaWJsaW5nLT5jb250ZXh0X3NpemU7CisKKwkJdmUtPmJhc2UuZW1pdF9i Yl9zdGFydCA9IHNpYmxpbmctPmVtaXRfYmJfc3RhcnQ7CisJCXZlLT5iYXNlLmVtaXRfZmx1c2gg PSBzaWJsaW5nLT5lbWl0X2ZsdXNoOworCQl2ZS0+YmFzZS5lbWl0X2luaXRfYnJlYWRjcnVtYiA9 IHNpYmxpbmctPmVtaXRfaW5pdF9icmVhZGNydW1iOworCQl2ZS0+YmFzZS5lbWl0X2ZpbmlfYnJl YWRjcnVtYiA9IHNpYmxpbmctPmVtaXRfZmluaV9icmVhZGNydW1iOworCQl2ZS0+YmFzZS5lbWl0 X2ZpbmlfYnJlYWRjcnVtYl9kdyA9CisJCQlzaWJsaW5nLT5lbWl0X2ZpbmlfYnJlYWRjcnVtYl9k dzsKKwl9CisKKwkvKiBncmFjZWZ1bGx5IHJlcGxhY2UgYSBkZWdlbmVyYXRlIHZpcnR1YWwgZW5n aW5lICovCisJaWYgKHZlLT5jb3VudCA9PSAxKSB7CisJCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3Mg KmFjdHVhbCA9IHZlLT5zaWJsaW5nc1swXTsKKwkJaW50ZWxfY29udGV4dF9wdXQoJnZlLT5jb250 ZXh0KTsKKwkJcmV0dXJuIGFjdHVhbDsKKwl9CisKKwlfX2ludGVsX2NvbnRleHRfaW5zZXJ0KGN0 eCwgJnZlLT5iYXNlLCAmdmUtPmNvbnRleHQpOworCXJldHVybiAmdmUtPmJhc2U7CisKK2Vycl9w dXQ6CisJaW50ZWxfY29udGV4dF9wdXQoJnZlLT5jb250ZXh0KTsKKwlyZXR1cm4gRVJSX1BUUihl cnIpOworfQorCitzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICoKK2ludGVsX2V4ZWNsaXN0c19jbG9u ZV92aXJ0dWFsKHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgsCisJCQkgICAgICBzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICpzcmMpCit7CisJc3RydWN0IHZpcnR1YWxfZW5naW5lICpzZSA9IHRv X3ZpcnR1YWxfZW5naW5lKHNyYyk7CisJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZHN0OworCisJ ZHN0ID0gaW50ZWxfZXhlY2xpc3RzX2NyZWF0ZV92aXJ0dWFsKGN0eCwKKwkJCQkJICAgICBzZS0+ c2libGluZ3MsCisJCQkJCSAgICAgc2UtPmNvdW50KTsKKwlpZiAoSVNfRVJSKGRzdCkpCisJCXJl dHVybiBkc3Q7CisKKwlyZXR1cm4gZHN0OworfQorCit2b2lkIGludGVsX3ZpcnR1YWxfZW5naW5l X2Rlc3Ryb3koc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQoreworCXN0cnVjdCB2aXJ0 dWFsX2VuZ2luZSAqdmUgPSB0b192aXJ0dWFsX2VuZ2luZShlbmdpbmUpOworCisJaWYgKCFlbmdp bmUgfHwgIWludGVsX2VuZ2luZV9pc192aXJ0dWFsKGVuZ2luZSkpCisJCXJldHVybjsKKworCV9f aW50ZWxfY29udGV4dF9yZW1vdmUoJnZlLT5jb250ZXh0KTsKKwlpbnRlbF9jb250ZXh0X3B1dCgm dmUtPmNvbnRleHQpOworfQorCiB2b2lkIGludGVsX2V4ZWNsaXN0c19zaG93X3JlcXVlc3RzKHN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKIAkJCQkgICBzdHJ1Y3QgZHJtX3ByaW50ZXIg Km0sCiAJCQkJICAgdm9pZCAoKnNob3dfcmVxdWVzdCkoc3RydWN0IGRybV9wcmludGVyICptLApA QCAtMjk1Niw2ICszNDg1LDI5IEBAIHZvaWQgaW50ZWxfZXhlY2xpc3RzX3Nob3dfcmVxdWVzdHMo c3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAogCQlzaG93X3JlcXVlc3QobSwgbGFzdCwg Ilx0XHRRICIpOwogCX0KIAorCWxhc3QgPSBOVUxMOworCWNvdW50ID0gMDsKKwlmb3IgKHJiID0g cmJfZmlyc3RfY2FjaGVkKCZleGVjbGlzdHMtPnZpcnR1YWwpOyByYjsgcmIgPSByYl9uZXh0KHJi KSkgeworCQlzdHJ1Y3QgdmlydHVhbF9lbmdpbmUgKnZlID0KKwkJCXJiX2VudHJ5KHJiLCB0eXBl b2YoKnZlKSwgbm9kZXNbZW5naW5lLT5pZF0ucmIpOworCQlzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpy cSA9IFJFQURfT05DRSh2ZS0+cmVxdWVzdCk7CisKKwkJaWYgKHJxKSB7CisJCQlpZiAoY291bnQr KyA8IG1heCAtIDEpCisJCQkJc2hvd19yZXF1ZXN0KG0sIHJxLCAiXHRcdFYgIik7CisJCQllbHNl CisJCQkJbGFzdCA9IHJxOworCQl9CisJfQorCWlmIChsYXN0KSB7CisJCWlmIChjb3VudCA+IG1h eCkgeworCQkJZHJtX3ByaW50ZihtLAorCQkJCSAgICJcdFx0Li4uc2tpcHBpbmcgJWQgdmlydHVh bCByZXF1ZXN0cy4uLlxuIiwKKwkJCQkgICBjb3VudCAtIG1heCk7CisJCX0KKwkJc2hvd19yZXF1 ZXN0KG0sIGxhc3QsICJcdFx0ViAiKTsKKwl9CisKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZl bmdpbmUtPnRpbWVsaW5lLmxvY2ssIGZsYWdzKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfbHJjLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMu aAppbmRleCBmMWFlYzhhNjk4NmYuLjlkOTBkYzY4ZTAyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfbHJjLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf bHJjLmgKQEAgLTExMiw2ICsxMTIsMTcgQEAgdm9pZCBpbnRlbF9leGVjbGlzdHNfc2hvd19yZXF1 ZXN0cyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCiAJCQkJCQkJY29uc3QgY2hhciAq cHJlZml4KSwKIAkJCQkgICB1bnNpZ25lZCBpbnQgbWF4KTsKIAorc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqCitpbnRlbF9leGVjbGlzdHNfY3JlYXRlX3ZpcnR1YWwoc3RydWN0IGk5MTVfZ2VtX2Nv bnRleHQgKmN0eCwKKwkJCSAgICAgICBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICoqc2libGluZ3Ms CisJCQkgICAgICAgdW5zaWduZWQgaW50IGNvdW50KTsKKworc3RydWN0IGludGVsX2VuZ2luZV9j cyAqCitpbnRlbF9leGVjbGlzdHNfY2xvbmVfdmlydHVhbChzdHJ1Y3QgaTkxNV9nZW1fY29udGV4 dCAqY3R4LAorCQkJICAgICAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqc3JjKTsKKwordm9pZCBp bnRlbF92aXJ0dWFsX2VuZ2luZV9kZXN0cm95KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2lu ZSk7CisKIHUzMiBnZW44X21ha2VfcnBjcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwg c3RydWN0IGludGVsX3NzZXUgKmN0eF9zc2V1KTsKIAogI2VuZGlmIC8qIF9JTlRFTF9MUkNfSF8g Ki8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pbnRlbF9scmMu YyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pbnRlbF9scmMuYwppbmRleCBkNjE1 MjBlYTAzYzEuLjRiOGEzMzk1MjlkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv c2VsZnRlc3RzL2ludGVsX2xyYy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0 cy9pbnRlbF9scmMuYwpAQCAtMTAsNiArMTAsNyBAQAogCiAjaW5jbHVkZSAiLi4vaTkxNV9zZWxm dGVzdC5oIgogI2luY2x1ZGUgImlndF9mbHVzaF90ZXN0LmgiCisjaW5jbHVkZSAiaWd0X2xpdmVf dGVzdC5oIgogI2luY2x1ZGUgImlndF9zcGlubmVyLmgiCiAjaW5jbHVkZSAiaTkxNV9yYW5kb20u aCIKIApAQCAtMTA2MCw2ICsxMDYxLDE2OSBAQCBzdGF0aWMgaW50IGxpdmVfcHJlZW1wdF9zbW9r ZSh2b2lkICphcmcpCiAJcmV0dXJuIGVycjsKIH0KIAorc3RhdGljIGludCBub3BfdmlydHVhbF9l bmdpbmUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsCisJCQkgICAgICBzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICoqc2libGluZ3MsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgbnNpYmxpbmcs CisJCQkgICAgICB1bnNpZ25lZCBpbnQgbmN0eCwKKwkJCSAgICAgIHVuc2lnbmVkIGludCBmbGFn cykKKyNkZWZpbmUgQ0hBSU4gQklUKDApCit7CisJSUdUX1RJTUVPVVQoZW5kX3RpbWUpOworCXN0 cnVjdCBpOTE1X3JlcXVlc3QgKnJlcXVlc3RbMTZdOworCXN0cnVjdCBpOTE1X2dlbV9jb250ZXh0 ICpjdHhbMTZdOworCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnZlWzE2XTsKKwl1bnNpZ25lZCBs b25nIG4sIHByaW1lLCBuYzsKKwlzdHJ1Y3QgaWd0X2xpdmVfdGVzdCB0OworCWt0aW1lX3QgdGlt ZXNbMl0gPSB7fTsKKwlpbnQgZXJyOworCisJR0VNX0JVR19PTighbmN0eCB8fCBuY3R4ID4gQVJS QVlfU0laRShjdHgpKTsKKworCWZvciAobiA9IDA7IG4gPCBuY3R4OyBuKyspIHsKKwkJY3R4W25d ID0ga2VybmVsX2NvbnRleHQoaTkxNSk7CisJCWlmICghY3R4W25dKQorCQkJcmV0dXJuIC1FTk9N RU07CisKKwkJdmVbbl0gPSBpbnRlbF9leGVjbGlzdHNfY3JlYXRlX3ZpcnR1YWwoY3R4W25dLAor CQkJCQkJICAgICAgIHNpYmxpbmdzLCBuc2libGluZyk7CisJCWlmIChJU19FUlIodmVbbl0pKQor CQkJcmV0dXJuIFBUUl9FUlIodmVbbl0pOworCX0KKworCWVyciA9IGlndF9saXZlX3Rlc3RfYmVn aW4oJnQsIGk5MTUsIF9fZnVuY19fLCB2ZVswXS0+bmFtZSk7CisJaWYgKGVycikKKwkJZ290byBv dXQ7CisKKwlmb3JfZWFjaF9wcmltZV9udW1iZXJfZnJvbShwcmltZSwgMSwgODE5MikgeworCQl0 aW1lc1sxXSA9IGt0aW1lX2dldF9yYXcoKTsKKworCQlpZiAoZmxhZ3MgJiBDSEFJTikgeworCQkJ Zm9yIChuYyA9IDA7IG5jIDwgbmN0eDsgbmMrKykgeworCQkJCWZvciAobiA9IDA7IG4gPCBwcmlt ZTsgbisrKSB7CisJCQkJCXJlcXVlc3RbbmNdID0KKwkJCQkJCWk5MTVfcmVxdWVzdF9hbGxvYyh2 ZVtuY10sIGN0eFtuY10pOworCQkJCQlpZiAoSVNfRVJSKHJlcXVlc3RbbmNdKSkgeworCQkJCQkJ ZXJyID0gUFRSX0VSUihyZXF1ZXN0W25jXSk7CisJCQkJCQlnb3RvIG91dDsKKwkJCQkJfQorCisJ CQkJCWk5MTVfcmVxdWVzdF9hZGQocmVxdWVzdFtuY10pOworCQkJCX0KKwkJCX0KKwkJfSBlbHNl IHsKKwkJCWZvciAobiA9IDA7IG4gPCBwcmltZTsgbisrKSB7CisJCQkJZm9yIChuYyA9IDA7IG5j IDwgbmN0eDsgbmMrKykgeworCQkJCQlyZXF1ZXN0W25jXSA9CisJCQkJCQlpOTE1X3JlcXVlc3Rf YWxsb2ModmVbbmNdLCBjdHhbbmNdKTsKKwkJCQkJaWYgKElTX0VSUihyZXF1ZXN0W25jXSkpIHsK KwkJCQkJCWVyciA9IFBUUl9FUlIocmVxdWVzdFtuY10pOworCQkJCQkJZ290byBvdXQ7CisJCQkJ CX0KKworCQkJCQlpOTE1X3JlcXVlc3RfYWRkKHJlcXVlc3RbbmNdKTsKKwkJCQl9CisJCQl9CisJ CX0KKworCQlmb3IgKG5jID0gMDsgbmMgPCBuY3R4OyBuYysrKSB7CisJCQlpZiAoaTkxNV9yZXF1 ZXN0X3dhaXQocmVxdWVzdFtuY10sCisJCQkJCSAgICAgIEk5MTVfV0FJVF9MT0NLRUQsCisJCQkJ CSAgICAgIEhaIC8gMTApIDwgMCkgeworCQkJCXByX2VycigiJXMoJXMpOiB3YWl0IGZvciAlbGx4 OiVsbGQgdGltZWQgb3V0XG4iLAorCQkJCSAgICAgICBfX2Z1bmNfXywgdmVbMF0tPm5hbWUsCisJ CQkJICAgICAgIHJlcXVlc3RbbmNdLT5mZW5jZS5jb250ZXh0LAorCQkJCSAgICAgICByZXF1ZXN0 W25jXS0+ZmVuY2Uuc2Vxbm8pOworCisJCQkJR0VNX1RSQUNFKCIlcyglcykgZmFpbGVkIGF0IHJl cXVlc3QgJWxseDolbGxkXG4iLAorCQkJCQkgIF9fZnVuY19fLCB2ZVswXS0+bmFtZSwKKwkJCQkJ ICByZXF1ZXN0W25jXS0+ZmVuY2UuY29udGV4dCwKKwkJCQkJICByZXF1ZXN0W25jXS0+ZmVuY2Uu c2Vxbm8pOworCQkJCUdFTV9UUkFDRV9EVU1QKCk7CisJCQkJaTkxNV9nZW1fc2V0X3dlZGdlZChp OTE1KTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCXRpbWVzWzFdID0ga3RpbWVfc3ViKGt0 aW1lX2dldF9yYXcoKSwgdGltZXNbMV0pOworCQlpZiAocHJpbWUgPT0gMSkKKwkJCXRpbWVzWzBd ID0gdGltZXNbMV07CisKKwkJaWYgKF9faWd0X3RpbWVvdXQoZW5kX3RpbWUsIE5VTEwpKQorCQkJ YnJlYWs7CisJfQorCisJZXJyID0gaWd0X2xpdmVfdGVzdF9lbmQoJnQpOworCWlmIChlcnIpCisJ CWdvdG8gb3V0OworCisJcHJfaW5mbygiUmVxdWVzdHglZCBsYXRlbmNpZXMgb24gJXM6IDEgPSAl bGx1bnMsICVsdSA9ICVsbHVuc1xuIiwKKwkJbmN0eCwgdmVbMF0tPm5hbWUsIGt0aW1lX3RvX25z KHRpbWVzWzBdKSwKKwkJcHJpbWUsIGRpdjY0X3U2NChrdGltZV90b19ucyh0aW1lc1sxXSksIHBy aW1lKSk7CisKK291dDoKKwlpZiAoaWd0X2ZsdXNoX3Rlc3QoaTkxNSwgSTkxNV9XQUlUX0xPQ0tF RCkpCisJCWVyciA9IC1FSU87CisKKwlmb3IgKG5jID0gMDsgbmMgPCBuY3R4OyBuYysrKSB7CisJ CWludGVsX3ZpcnR1YWxfZW5naW5lX2Rlc3Ryb3kodmVbbmNdKTsKKwkJa2VybmVsX2NvbnRleHRf Y2xvc2UoY3R4W25jXSk7CisJfQorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgbGl2ZV92 aXJ0dWFsX2VuZ2luZSh2b2lkICphcmcpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5 MTUgPSBhcmc7CisJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqc2libGluZ3NbTUFYX0VOR0lORV9J TlNUQU5DRSArIDFdOworCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKKwllbnVtIGlu dGVsX2VuZ2luZV9pZCBpZDsKKwl1bnNpZ25lZCBpbnQgY2xhc3MsIGluc3Q7CisJaW50IGVyciA9 IC1FTk9ERVY7CisKKwlpZiAoVVNFU19HVUNfU1VCTUlTU0lPTihpOTE1KSkKKwkJcmV0dXJuIDA7 CisKKwltdXRleF9sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKKworCWZvcl9lYWNoX2Vu Z2luZShlbmdpbmUsIGk5MTUsIGlkKSB7CisJCWVyciA9IG5vcF92aXJ0dWFsX2VuZ2luZShpOTE1 LCAmZW5naW5lLCAxLCAxLCAwKTsKKwkJaWYgKGVycikgeworCQkJcHJfZXJyKCJGYWlsZWQgdG8g d3JhcCBlbmdpbmUgJXM6IGVycj0lZFxuIiwKKwkJCSAgICAgICBlbmdpbmUtPm5hbWUsIGVycik7 CisJCQlnb3RvIG91dF91bmxvY2s7CisJCX0KKwl9CisKKwlmb3IgKGNsYXNzID0gMDsgY2xhc3Mg PD0gTUFYX0VOR0lORV9DTEFTUzsgY2xhc3MrKykgeworCQlpbnQgbnNpYmxpbmcsIG47CisKKwkJ bnNpYmxpbmcgPSAwOworCQlmb3IgKGluc3QgPSAwOyBpbnN0IDw9IE1BWF9FTkdJTkVfSU5TVEFO Q0U7IGluc3QrKykgeworCQkJaWYgKCFpOTE1LT5lbmdpbmVfY2xhc3NbY2xhc3NdW2luc3RdKQor CQkJCWJyZWFrOworCisJCQlzaWJsaW5nc1tuc2libGluZysrXSA9IGk5MTUtPmVuZ2luZV9jbGFz c1tjbGFzc11baW5zdF07CisJCX0KKwkJaWYgKG5zaWJsaW5nIDwgMikKKwkJCWNvbnRpbnVlOwor CisJCWZvciAobiA9IDE7IG4gPD0gbnNpYmxpbmcgKyAxOyBuKyspIHsKKwkJCWVyciA9IG5vcF92 aXJ0dWFsX2VuZ2luZShpOTE1LCBzaWJsaW5ncywgbnNpYmxpbmcsCisJCQkJCQkgbiwgMCk7CisJ CQlpZiAoZXJyKQorCQkJCWdvdG8gb3V0X3VubG9jazsKKwkJfQorCisJCWVyciA9IG5vcF92aXJ0 dWFsX2VuZ2luZShpOTE1LCBzaWJsaW5ncywgbnNpYmxpbmcsIG4sIENIQUlOKTsKKwkJaWYgKGVy cikKKwkJCWdvdG8gb3V0X3VubG9jazsKKwl9CisKK291dF91bmxvY2s6CisJbXV0ZXhfdW5sb2Nr KCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKKwlyZXR1cm4gZXJyOworfQorCiBpbnQgaW50ZWxf ZXhlY2xpc3RzX2xpdmVfc2VsZnRlc3RzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQog ewogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgaTkxNV9zdWJ0ZXN0IHRlc3RzW10gPSB7CkBAIC0xMDcx LDYgKzEyMzUsNyBAQCBpbnQgaW50ZWxfZXhlY2xpc3RzX2xpdmVfc2VsZnRlc3RzKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICppOTE1KQogCQlTVUJURVNUKGxpdmVfY2hhaW5fcHJlZW1wdCksCiAJ CVNVQlRFU1QobGl2ZV9wcmVlbXB0X2hhbmcpLAogCQlTVUJURVNUKGxpdmVfcHJlZW1wdF9zbW9r ZSksCisJCVNVQlRFU1QobGl2ZV92aXJ0dWFsX2VuZ2luZSksCiAJfTsKIAogCWlmICghSEFTX0VY RUNMSVNUUyhpOTE1KSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9kcm0vaTkxNV9kcm0uaCBi L2luY2x1ZGUvdWFwaS9kcm0vaTkxNV9kcm0uaAppbmRleCBlMTdjNzM3NTI0OGMuLmMwNTc1MzZk ZjVjZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2RybS9pOTE1X2RybS5oCisrKyBiL2luY2x1 ZGUvdWFwaS9kcm0vaTkxNV9kcm0uaApAQCAtMTI3LDYgKzEyNyw3IEBAIGVudW0gZHJtX2k5MTVf Z2VtX2VuZ2luZV9jbGFzcyB7CiB9OwogCiAjZGVmaW5lIEk5MTVfRU5HSU5FX0NMQVNTX0lOVkFM SURfTk9ORSAtMQorI2RlZmluZSBJOTE1X0VOR0lORV9DTEFTU19JTlZBTElEX1ZJUlRVQUwgMAog CiAvKioKICAqIERPQzogcGVyZl9ldmVudHMgZXhwb3NlZCBieSBpOTE1IHRocm91Z2ggL3N5cy9i dXMvZXZlbnRfc291cmNlcy9kcml2ZXJzL2k5MTUKQEAgLTE1OTgsOCArMTU5OSwzNyBAQCBzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX2NvbnRleHRfcGFyYW1fc3NldSB7CiAJX191MzIgcnN2ZDsKIH07CiAK Ky8qCisgKiBpOTE1X2NvbnRleHRfZW5naW5lc19sb2FkX2JhbGFuY2U6CisgKgorICogRW5hYmxl IGxvYWQgYmFsYW5jaW5nIGFjcm9zcyB0aGlzIHNldCBvZiBlbmdpbmVzLgorICoKKyAqIEludG8g dGhlIEk5MTVfRVhFQ19ERUZBVUxUIHNsb3QgWzBdLCBhIHZpcnR1YWwgZW5naW5lIGlzIGNyZWF0 ZWQgdGhhdCB3aGVuCisgKiB1c2VkIHdpbGwgcHJveHkgdGhlIGV4ZWNidWZmZXIgcmVxdWVzdCBv bnRvIG9uZSBvZiB0aGUgc2V0IG9mIGVuZ2luZXMKKyAqIGluIHN1Y2ggYSB3YXkgYXMgdG8gZGlz dHJpYnV0ZSB0aGUgbG9hZCBldmVubHkgYWNyb3NzIHRoZSBzZXQuCisgKgorICogVGhlIHNldCBv ZiBlbmdpbmVzIG11c3QgYmUgY29tcGF0aWJsZSAoZS5nLiB0aGUgc2FtZSBIVyBjbGFzcykgYXMg dGhleQorICogd2lsbCBzaGFyZSB0aGUgc2FtZSBsb2dpY2FsIEdQVSBjb250ZXh0IGFuZCByaW5n LgorICoKKyAqIFRvIGludGVybWl4IHJlbmRlcmluZyB3aXRoIHRoZSB2aXJ0dWFsIGVuZ2luZSBh bmQgZGlyZWN0IHJlbmRlcmluZyBvbnRvCisgKiB0aGUgYmFja2luZyBlbmdpbmVzIChieXBhc3Np bmcgdGhlIGxvYWQgYmFsYW5jaW5nIHByb3h5KSwgdGhlIGNvbnRleHQgbXVzdAorICogYmUgZGVm aW5lZCB0byB1c2UgYSBzaW5nbGUgdGltZWxpbmUgZm9yIGFsbCBlbmdpbmVzLgorICovCitzdHJ1 Y3QgaTkxNV9jb250ZXh0X2VuZ2luZXNfbG9hZF9iYWxhbmNlIHsKKwlzdHJ1Y3QgaTkxNV91c2Vy X2V4dGVuc2lvbiBiYXNlOworCisJX191MTYgZW5naW5lX2luZGV4OworCV9fdTE2IG1iejE2OyAv KiByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZTsgbXVzdCBiZSB6ZXJvICovCisJX191MzIgZmxhZ3M7 IC8qIGFsbCB1bmRlZmluZWQgZmxhZ3MgbXVzdCBiZSB6ZXJvICovCisKKwlfX3U2NCBlbmdpbmVz X21hc2s7IC8qIHNlbGVjdGlvbiBtYXNrIG9mIGVuZ2luZXNbXSAqLworCisJX191NjQgbWJ6NjRb NF07IC8qIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlOyBtdXN0IGJlIHplcm8gKi8KK307CisKIHN0 cnVjdCBpOTE1X2NvbnRleHRfcGFyYW1fZW5naW5lcyB7CiAJX191NjQgZXh0ZW5zaW9uczsgLyog bGlua2VkIGNoYWluIG9mIGV4dGVuc2lvbiBibG9ja3MsIDAgdGVybWluYXRlcyAqLworI2RlZmlu ZSBJOTE1X0NPTlRFWFRfRU5HSU5FU19FWFRfTE9BRF9CQUxBTkNFIDAKIAogCXN0cnVjdCB7CiAJ CV9fdTE2IGVuZ2luZV9jbGFzczsgLyogc2VlIGVudW0gZHJtX2k5MTVfZ2VtX2VuZ2luZV9jbGFz cyAqLwotLSAKMi4yMC4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3Rv cC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRl bC1nZng=