From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: [CI 06/20] drm/i915: Slaughter the thundering i915_wait_request herd Date: Thu, 19 May 2016 12:32:42 +0100 Message-ID: <1463657576-32063-6-git-send-email-chris@chris-wilson.co.uk> References: <1463657576-32063-1-git-send-email-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-x243.google.com (mail-wm0-x243.google.com [IPv6:2a00:1450:400c:c09::243]) by gabe.freedesktop.org (Postfix) with ESMTPS id AC3046E970 for ; Thu, 19 May 2016 11:33:10 +0000 (UTC) Received: by mail-wm0-x243.google.com with SMTP id s63so5647914wme.2 for ; Thu, 19 May 2016 04:33:10 -0700 (PDT) Received: from haswell.alporthouse.com ([78.156.65.138]) by smtp.gmail.com with ESMTPSA id q76sm9429419wmd.6.2016.05.19.04.33.07 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 19 May 2016 04:33:07 -0700 (PDT) In-Reply-To: <1463657576-32063-1-git-send-email-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 T25lIHBhcnRpY3VsYXJseSBzdHJlc3NmdWwgc2NlbmFyaW8gY29uc2lzdHMgb2YgbWFueSBpbmRl cGVuZGVudCB0YXNrcwphbGwgY29tcGV0aW5nIGZvciBHUFUgdGltZSBhbmQgd2FpdGluZyB1cG9u IHRoZSByZXN1bHRzIChlLmcuIHJlYWx0aW1lCnRyYW5zY29kaW5nIG9mIG1hbnksIG1hbnkgc3Ry ZWFtcykuIE9uZSBib3R0bGVuZWNrIGluIHBhcnRpY3VsYXIgaXMgdGhhdAplYWNoIGNsaWVudCB3 YWl0cyBvbiBpdHMgb3duIHJlc3VsdHMsIGJ1dCBldmVyeSBjbGllbnQgaXMgd29rZW4gdXAgYWZ0 ZXIKZXZlcnkgYmF0Y2hidWZmZXIgLSBoZW5jZSB0aGUgdGh1bmRlciBvZiBob292ZXMgYXMgdGhl biBldmVyeSBjbGllbnQgbXVzdApkbyBpdHMgaGVhdnl3ZWlnaHQgZGFuY2UgdG8gcmVhZCBhIGNv aGVyZW50IHNlcW5vIHRvIHNlZSBpZiBpdCBpcyB0aGUKbHVja3kgb25lLgoKSWRlYWxseSwgd2Ug b25seSB3YW50IG9uZSBjbGllbnQgdG8gd2FrZSB1cCBhZnRlciB0aGUgaW50ZXJydXB0IGFuZApj aGVjayBpdHMgcmVxdWVzdCBmb3IgY29tcGxldGlvbi4gU2luY2UgdGhlIHJlcXVlc3RzIG11c3Qg cmV0aXJlIGluCm9yZGVyLCB3ZSBjYW4gc2VsZWN0IHRoZSBmaXJzdCBjbGllbnQgb24gdGhlIG9s ZGVzdCByZXF1ZXN0IHRvIGJlIHdva2VuLgpPbmNlIHRoYXQgY2xpZW50IGhhcyBjb21wbGV0ZWQg aGlzIHdhaXQsIHdlIGNhbiB0aGVuIHdha2UgdXAgdGhlCm5leHQgY2xpZW50IGFuZCBzbyBvbi4g SG93ZXZlciwgYWxsIGNsaWVudHMgdGhlbiBpbmN1ciBsYXRlbmN5IGFzIGV2ZXJ5CnByb2Nlc3Mg aW4gdGhlIGNoYWluIG1heSBiZSBkZWxheWVkIGZvciBzY2hlZHVsaW5nIC0gdGhpcyBtYXkgYWxz byB0aGVuCmNhdXNlIHNvbWUgcHJpb3JpdHkgaW52ZXJzaW9uLiBUbyByZWR1Y2UgdGhlIGxhdGVu Y3ksIHdoZW4gYSBjbGllbnQKaXMgYWRkZWQgb3IgcmVtb3ZlZCBmcm9tIHRoZSBsaXN0LCB3ZSBz Y2FuIHRoZSB0cmVlIGZvciBjb21wbGV0ZWQKc2Vxbm8gYW5kIHdha2UgdXAgYWxsIHRoZSBjb21w bGV0ZWQgd2FpdGVycyBpbiBwYXJhbGxlbC4KClVzaW5nIGlndC9iZW5jaG1hcmtzL2dlbV9sYXRl bmN5LCB3ZSBjYW4gZGVtb25zdHJhdGUgdGhpcyBlZmZlY3QuIFRoZQpiZW5jaG1hcmsgbWVhc3Vy ZXMgdGhlIG51bWJlciBvZiBHUFUgY3ljbGVzIGJldHdlZW4gY29tcGxldGlvbiBvZiBhCmJhdGNo IGFuZCB0aGUgY2xpZW50IHdha2luZyB1cCBmcm9tIGEgY2FsbCB0byB3YWl0LWlvY3RsLiBXaXRo IG1hbnkKY29uY3VycmVudCB3YWl0ZXJzLCB3aXRoIGVhY2ggb24gYSBkaWZmZXJlbnQgcmVxdWVz dCwgd2Ugb2JzZXJ2ZSB0aGF0CnRoZSB3YWtldXAgbGF0ZW5jeSBiZWZvcmUgdGhlIHBhdGNoIHNj YWxlcyBuZWFybHkgbGluZWFybHkgd2l0aCB0aGUKbnVtYmVyIG9mIHdhaXRlcnMgKGJlZm9yZSBl eHRlcm5hbCBmYWN0b3JzIGtpY2sgaW4gbWFraW5nIHRoZSBzY2FsaW5nIG11Y2gKd29yc2UpLiBB ZnRlciBhcHBseWluZyB0aGUgcGF0Y2gsIHdlIGNhbiBzZWUgdGhhdCBvbmx5IHRoZSBzaW5nbGUg d2FpdGVyCmZvciB0aGUgcmVxdWVzdCBpcyBiZWluZyB3b2tlbiB1cCwgcHJvdmlkaW5nIGEgY29u c3RhbnQgd2FrZXVwIGxhdGVuY3kKZm9yIGV2ZXJ5IG9wZXJhdGlvbi4gSG93ZXZlciwgdGhlIHNp dHVhdGlvbiBpcyBub3QgcXVpdGUgYXMgcm9zeSBmb3IKbWFueSB3YWl0ZXJzIG9uIHRoZSBzYW1l IHJlcXVlc3QsIHRob3VnaCB0byB0aGUgYmVzdCBvZiBteSBrbm93bGVkZ2UgdGhpcwppcyBtdWNo IGxlc3MgbGlrZWx5IGluIHByYWN0aWNlLiBIZXJlLCB3ZSBjYW4gb2JzZXJ2ZSB0aGF0IHRoZQpj b25jdXJyZW50IHdhaXRlcnMgaW5jdXIgZXh0cmEgbGF0ZW5jeSBmcm9tIGJlaW5nIHdva2VuIHVw IGJ5IHRoZQpzb2xpdGFyeSBib3R0b20taGFsZiwgcmF0aGVyIHRoYW4gZGlyZWN0bHkgYnkgdGhl IGludGVycnVwdC4gVGhpcwphcHBlYXJzIHRvIGJlIHNjaGVkdWxlciBpbmR1Y2VkIChoYXZpbmcg ZGlzY291bnRlZCBhZHZlcnNlIGVmZmVjdHMgZnJvbQpoYXZpbmcgYSByYnRyZWUgd2Fsay9lcmFz ZSBpbiB0aGUgd2FrZXVwIHBhdGgpLCBlYWNoIGFkZGl0aW9uYWwKd2FrZV91cF9wcm9jZXNzKCkg Y29zdHMgYXBwcm94aW1hdGVseSAxdXMgb24gYmlnIGNvcmUuIEFub3RoZXIgZWZmZWN0IG9mCnBl cmZvcm1pbmcgdGhlIHNlY29uZGFyeSB3YWtldXBzIGZyb20gdGhlIGZpcnN0IGJvdHRvbS1oYWxm IGlzIHRoZQppbmN1cnJlZCBkZWxheSB0aGlzIGltcG9zZXMgb24gaGlnaCBwcmlvcml0eSB0aHJl YWRzIC0gcmF0aGVyIHRoYW4KaW1tZWRpYXRlbHkgcmV0dXJuaW5nIHRvIHVzZXJzcGFjZSBhbmQg bGVhdmluZyB0aGUgaW50ZXJydXB0IGhhbmRsZXIgdG8Kd2FrZSB0aGUgb3RoZXJzLgoKVG8gb2Zm c2V0IHRoZSBkZWxheSBpbmN1cnJlZCB3aXRoIGFkZGl0aW9uYWwgd2FpdGVycyBvbiBhIHJlcXVl c3QsIHdlCmNvdWxkIHVzZSBhIGh5YnJpZCBzY2hlbWUgdGhhdCBkaWQgYSBxdWljayByZWFkIGlu IHRoZSBpbnRlcnJ1cHQgaGFuZGxlcgphbmQgZGVxdWV1ZWQgYWxsIHRoZSBjb21wbGV0ZWQgd2Fp dGVycyAoaW5jdXJyaW5nIHRoZSBvdmVyaGVhZCBpbiB0aGUKaW50ZXJydXB0IGhhbmRsZXIsIG5v dCB0aGUgYmVzdCBwbGFuIGVpdGhlciBhcyB3ZSB0aGVuIGluY3VyIEdQVQpzdWJtaXNzaW9uIGxh dGVuY3kpIGJ1dCB3ZSB3b3VsZCBzdGlsbCBoYXZlIHRvIHdha2UgdXAgdGhlIGJvdHRvbS1oYWxm CmV2ZXJ5IHRpbWUgdG8gZG8gdGhlIGhlYXZ5d2VpZ2h0IHNsb3cgcmVhZC4gT3Igd2UgY291bGQg b25seSBraWNrIHRoZQp3YWl0ZXJzIG9uIHRoZSBzZXFubyB3aXRoIHRoZSBzYW1lIHByaW9yaXR5 IGFzIHRoZSBjdXJyZW50IHRhc2sgKGkuZS4gaW4KdGhlIHJlYWx0aW1lIHdhaXRlciBzY2VuYXJp bywgb25seSBpdCBpcyB3b2tlbiB1cCBpbW1lZGlhdGVseSBieSB0aGUKaW50ZXJydXB0IGFuZCBz aW1wbHkgcXVldWVzIHRoZSBuZXh0IHdhaXRlciBiZWZvcmUgcmV0dXJuaW5nIHRvIHVzZXJzcGFj ZSwKbWluaW1pc2luZyBpdHMgZGVsYXkgYXQgdGhlIGV4cGVuc2Ugb2YgdGhlIGNoYWluLCBhbmQg YWxzbyByZWR1Y2luZwpjb250ZW50aW9uIG9uIGl0cyBzY2hlZHVsZXIgcnVucXVldWUpLiBUaGlz IGlzIGVmZmVjdGl2ZSBhdCBhdm9pZCBsb25nCnBhdXNlcyBpbiB0aGUgaW50ZXJydXB0IGhhbmRs ZXIgYW5kIGF0IGF2b2lkaW5nIHRoZSBleHRyYSBsYXRlbmN5IGluCnJlYWx0aW1lL2hpZ2gtcHJp b3JpdHkgd2FpdGVycy4KCnYyOiBDb252ZXJ0IGZyb20gYSBrd29ya2VyIHBlciBlbmdpbmUgaW50 byBhIGRlZGljYXRlZCBrdGhyZWFkIGZvciB0aGUKYm90dG9tLWhhbGYuCnYzOiBSZW5hbWUgcmVx dWVzdCBtZW1iZXJzIGFuZCB0d2VhayBjb21tZW50cy4KdjQ6IFVzZSBhIHBlci1lbmdpbmUgc3Bp bmxvY2sgaW4gdGhlIGJyZWFkY3J1bWJzIGJvdHRvbS1oYWxmLgp2NTogRml4IHJhY2UgaW4gbG9j a2xlc3NseSBjaGVja2luZyB3YWl0ZXIgc3RhdHVzIGFuZCBraWNraW5nIHRoZSB0YXNrIG9uCmFk ZGluZyBhIG5ldyB3YWl0ZXIuCnY2OiBGaXggZGVjaWRpbmcgd2hlbiB0byBmb3JjZSB0aGUgdGlt ZXIgdG8gaGlkZSBtaXNzaW5nIGludGVycnVwdHMuCnY3OiBNb3ZlIHRoZSBib3R0b20taGFsZiBm cm9tIHRoZSBrdGhyZWFkIHRvIHRoZSBmaXJzdCBjbGllbnQgcHJvY2Vzcy4Kdjg6IFJld29yZCBh IGZldyBjb21tZW50cwp2OTogQnJlYWsgdGhlIGJ1c3kgbG9vcCB3aGVuIHRoZSBpbnRlcnJ1cHQg aXMgdW5tYXNrZWQgb3IgaGFzIGZpcmVkLgp2MTA6IENvbW1lbnRzLCB1bm5lY2Vzc2FyeSBjaHVy biwgYmV0dGVyIGRlYnVnZ2luZyBmcm9tIFR2cnRrbwp2MTE6IFdha2UgYWxsIGNvbXBsZXRlZCB3 YWl0ZXJzIG9uIHJlbW92aW5nIHRoZSBjdXJyZW50IGJvdHRvbS1oYWxmIHRvCnJlZHVjZSB0aGUg bGF0ZW5jeSBvZiB3YWtpbmcgdXAgYSBoZXJkIG9mIGNsaWVudHMgYWxsIHdhaXRpbmcgb24gdGhl CnNhbWUgcmVxdWVzdC4KdjEyOiBSZWFycmFuZ2UgbWlzc2VkLWludGVycnVwdCBmYXVsdCBpbmpl Y3Rpb24gc28gdGhhdCBpdCB3b3JrcyB3aXRoCmlndC9kcnZfbWlzc2VkX2lycV9oYW5nCnYxMzog UmVuYW1lIGludGVsX2JyZWFkY3J1bWIgYW5kIGZyaWVuZHMgdG8gaW50ZWxfd2FpdCBpbiBwcmVw YXJhdGlvbgpmb3Igc2lnbmFsIGhhbmRsaW5nLgp2MTQ6IFJDVSBjb21tZW50YXJ5LCBhc3NlcnRf c3Bpbl9sb2NrZWQKdjE1OiBIaWRlIEJVR19PTiBiZWhpbmQgdGhlIGNvbXBpbGVyOyByZXBvcnQg b24gZ2VtX2xhdGVuY3kgZmluZGluZ3MuCnYxNjogU29ydCBzZXFuby1ncm91cHMgYnkgcHJpb3Jp dHkgc28gdGhhdCBmaXJzdC13YWl0ZXIgaGFzIHRoZSBoaWdoZXN0CnRhc2sgcHJpb3JpdHkgKGFu ZCBzbyBhdm9pZCBwcmlvcml0eSBpbnZlcnNpb24pLgp2MTc6IEFkZCB3YWl0ZXJzIHRvIHBvc3Qt bW9ydGVtIEdQVSBoYW5nIHN0YXRlLgoKVGVzdGNhc2U6IGlndC9nZW1fY29uY3VycmVudF9ibGl0 ClRlc3RjYXNlOiBpZ3QvYmVuY2htYXJrcy9nZW1fbGF0ZW5jeQpTaWduZWQtb2ZmLWJ5OiBDaHJp cyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KQ2M6ICJSb2dvemhraW4sIERtaXRy eSBWIiA8ZG1pdHJ5LnYucm9nb3poa2luQGludGVsLmNvbT4KQ2M6ICJHb25nLCBaaGlwZW5nIiA8 emhpcGVuZy5nb25nQGludGVsLmNvbT4KQ2M6IFR2cnRrbyBVcnN1bGluIDx0dnJ0a28udXJzdWxp bkBsaW51eC5pbnRlbC5jb20+CkNjOiBEYXZlIEdvcmRvbiA8ZGF2aWQucy5nb3Jkb25AaW50ZWwu Y29tPgpDYzogIkdvZWwsIEFrYXNoIiA8YWthc2guZ29lbEBpbnRlbC5jb20+Ci0tLQogZHJpdmVy cy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgICAgICAgICAgICB8ICAgMSArCiBkcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2RlYnVnZnMuYyAgICAgIHwgIDE1ICstCiBkcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2Rydi5oICAgICAgICAgIHwgIDM5ICsrKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZ2VtLmMgICAgICAgICAgfCAxMzAgKysrKy0tLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2dwdV9lcnJvci5jICAgIHwgIDU5ICsrKysrLQogZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9pcnEuYyAgICAgICAgICB8ICAyNyArLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2JyZWFkY3J1bWJzLmMgfCAzMzMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMgICAgICAgICB8ICAgNCArLQogZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5jICB8ICAgMyArLQogZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oICB8ICA2NyArKysrKystCiAxMCBmaWxlcyBjaGFuZ2Vk LCA1NjcgaW5zZXJ0aW9ucygrKSwgMTExIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2JyZWFkY3J1bWJzLmMKCmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2Vm aWxlCmluZGV4IDdlMjk0NDQwNmI4Zi4uNGM0ZTE5YjNmNGQ3IDEwMDY0NAotLS0gYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmls ZQpAQCAtMzcsNiArMzcsNyBAQCBpOTE1LXkgKz0gaTkxNV9jbWRfcGFyc2VyLm8gXAogCSAgaTkx NV9nZW1fdXNlcnB0ci5vIFwKIAkgIGk5MTVfZ3B1X2Vycm9yLm8gXAogCSAgaTkxNV90cmFjZV9w b2ludHMubyBcCisJICBpbnRlbF9icmVhZGNydW1icy5vIFwKIAkgIGludGVsX2xyYy5vIFwKIAkg IGludGVsX21vY3MubyBcCiAJICBpbnRlbF9yaW5nYnVmZmVyLm8gXApkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2RlYnVnZnMuYwppbmRleCAyNGY0MTA1YjkxMGYuLjAyYTkyM2ZlZWI3ZCAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMKKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMKQEAgLTc2MSwxMCArNzYxLDIxIEBAIHN0YXRpYyBpbnQg aTkxNV9nZW1fcmVxdWVzdF9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkKIHN0 YXRpYyB2b2lkIGk5MTVfcmluZ19zZXFub19pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwKIAkJCQkg c3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQogeworCXN0cnVjdCBpbnRlbF9icmVhZGNy dW1icyAqYiA9ICZlbmdpbmUtPmJyZWFkY3J1bWJzOworCXN0cnVjdCByYl9ub2RlICpyYjsKKwog CXNlcV9wcmludGYobSwgIkN1cnJlbnQgc2VxdWVuY2UgKCVzKTogJXhcbiIsCiAJCSAgIGVuZ2lu ZS0+bmFtZSwgZW5naW5lLT5nZXRfc2Vxbm8oZW5naW5lKSk7CiAJc2VxX3ByaW50ZihtLCAiQ3Vy cmVudCB1c2VyIGludGVycnVwdHMgKCVzKTogJXhcbiIsCiAJCSAgIGVuZ2luZS0+bmFtZSwgUkVB RF9PTkNFKGVuZ2luZS0+dXNlcl9pbnRlcnJ1cHRzKSk7CisKKwlzcGluX2xvY2soJmItPmxvY2sp OworCWZvciAocmIgPSByYl9maXJzdCgmYi0+d2FpdGVycyk7IHJiICE9IE5VTEw7IHJiID0gcmJf bmV4dChyYikpIHsKKwkJc3RydWN0IGludGVsX3dhaXQgKncgPSBjb250YWluZXJfb2YocmIsIHR5 cGVvZigqdyksIG5vZGUpOworCQlzZXFfcHJpbnRmKG0sICJXYWl0aW5nICglcyk6ICVzIFslZF0g b24gJXhcbiIsCisJCQkgICBlbmdpbmUtPm5hbWUsIHctPnRhc2stPmNvbW0sIHctPnRhc2stPnBp ZCwgdy0+c2Vxbm8pOworCX0KKwlzcGluX3VubG9jaygmYi0+bG9jayk7CiB9CiAKIHN0YXRpYyBp bnQgaTkxNV9nZW1fc2Vxbm9faW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpCkBA IC0xNDAwLDYgKzE0MTEsOCBAQCBzdGF0aWMgaW50IGk5MTVfaGFuZ2NoZWNrX2luZm8oc3RydWN0 IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQpCiAJCQkgICBlbmdpbmUtPmhhbmdjaGVjay5zZXFu bywKIAkJCSAgIHNlcW5vW2lkXSwKIAkJCSAgIGVuZ2luZS0+bGFzdF9zdWJtaXR0ZWRfc2Vxbm8p OworCQlzZXFfcHJpbnRmKG0sICJcdHdhaXRlcnM/ICVkXG4iLAorCQkJICAgaW50ZWxfZW5naW5l X2hhc193YWl0ZXIoZW5naW5lKSk7CiAJCXNlcV9wcmludGYobSwgIlx0dXNlciBpbnRlcnJ1cHRz ID0gJXggW2N1cnJlbnQgJXhdXG4iLAogCQkJICAgZW5naW5lLT5oYW5nY2hlY2sudXNlcl9pbnRl cnJ1cHRzLAogCQkJICAgUkVBRF9PTkNFKGVuZ2luZS0+dXNlcl9pbnRlcnJ1cHRzKSk7CkBAIC0y Mzg0LDcgKzIzOTcsNyBAQCBzdGF0aWMgaW50IGNvdW50X2lycV93YWl0ZXJzKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICppOTE1KQogCWludCBjb3VudCA9IDA7CiAKIAlmb3JfZWFjaF9lbmdpbmUo ZW5naW5lLCBpOTE1KQotCQljb3VudCArPSBlbmdpbmUtPmlycV9yZWZjb3VudDsKKwkJY291bnQg Kz0gaW50ZWxfZW5naW5lX2hhc193YWl0ZXIoZW5naW5lKTsKIAogCXJldHVybiBjb3VudDsKIH0K ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2Rydi5oCmluZGV4IDMzNTUzZWE5OWEwMy4uN2IzMjk0NjRlOGViIDEw MDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKQEAgLTUwMyw2ICs1MDMsNyBAQCBzdHJ1Y3QgZHJtX2k5 MTVfZXJyb3Jfc3RhdGUgewogCQlib29sIHZhbGlkOwogCQkvKiBTb2Z0d2FyZSB0cmFja2VkIHN0 YXRlICovCiAJCWJvb2wgd2FpdGluZzsKKwkJaW50IG51bV93YWl0ZXJzOwogCQlpbnQgaGFuZ2No ZWNrX3Njb3JlOwogCQllbnVtIGludGVsX3JpbmdfaGFuZ2NoZWNrX2FjdGlvbiBoYW5nY2hlY2tf YWN0aW9uOwogCQlpbnQgbnVtX3JlcXVlc3RzOwpAQCAtNTQ4LDYgKzU0OSwxMiBAQCBzdHJ1Y3Qg ZHJtX2k5MTVfZXJyb3Jfc3RhdGUgewogCQkJdTMyIHRhaWw7CiAJCX0gKnJlcXVlc3RzOwogCisJ CXN0cnVjdCBkcm1faTkxNV9lcnJvcl93YWl0ZXIgeworCQkJY2hhciBjb21tW1RBU0tfQ09NTV9M RU5dOworCQkJcGlkX3QgcGlkOworCQkJdTMyIHNlcW5vOworCQl9ICp3YWl0ZXJzOworCiAJCXN0 cnVjdCB7CiAJCQl1MzIgZ2Z4X21vZGU7CiAJCQl1bmlvbiB7CkBAIC0xNDE1LDcgKzE0MjIsNyBA QCBzdHJ1Y3QgaTkxNV9ncHVfZXJyb3IgewogI2RlZmluZSBJOTE1X1NUT1BfUklOR19BTExPV19X QVJOICAgICAgKDEgPDwgMzApCiAKIAkvKiBGb3IgbWlzc2VkIGlycS9zZXFubyBzaW11bGF0aW9u LiAqLwotCXVuc2lnbmVkIGludCB0ZXN0X2lycV9yaW5nczsKKwl1bnNpZ25lZCBsb25nIHRlc3Rf aXJxX3JpbmdzOwogfTsKIAogZW51bSBtb2Rlc2V0X3Jlc3RvcmUgewpAQCAtMjk0MSw3ICsyOTQ4 LDYgQEAgaWJ4X2Rpc2FibGVfZGlzcGxheV9pbnRlcnJ1cHQoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2LCB1aW50MzJfdCBiaXRzKQogCWlieF9kaXNwbGF5X2ludGVycnVwdF91cGRh dGUoZGV2X3ByaXYsIGJpdHMsIDApOwogfQogCi0KIC8qIGk5MTVfZ2VtLmMgKi8KIGludCBpOTE1 X2dlbV9jcmVhdGVfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAkJ CSAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwpAQCAtMzgxNSw0ICszODIxLDMzIEBAIHN0 YXRpYyBpbmxpbmUgdm9pZCBpOTE1X3RyYWNlX2lycV9nZXQoc3RydWN0IGludGVsX2VuZ2luZV9j cyAqZW5naW5lLAogCQlpOTE1X2dlbV9yZXF1ZXN0X2Fzc2lnbigmZW5naW5lLT50cmFjZV9pcnFf cmVxLCByZXEpOwogfQogCitzdGF0aWMgaW5saW5lIGJvb2wgX19pOTE1X3JlcXVlc3RfaXJxX2Nv bXBsZXRlKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxKQoreworCS8qIEVuc3VyZSBv dXIgcmVhZCBvZiB0aGUgc2Vxbm8gaXMgY29oZXJlbnQgc28gdGhhdCB3ZQorCSAqIGRvIG5vdCAi bWlzcyBhbiBpbnRlcnJ1cHQiIChpLmUuIGlmIHRoaXMgaXMgdGhlIGxhc3QKKwkgKiByZXF1ZXN0 IGFuZCB0aGUgc2Vxbm8gd3JpdGUgZnJvbSB0aGUgR1BVIGlzIG5vdCB2aXNpYmxlCisJICogYnkg dGhlIHRpbWUgdGhlIGludGVycnVwdCBmaXJlcywgd2Ugd2lsbCBzZWUgdGhhdCB0aGUKKwkgKiBy ZXF1ZXN0IGlzIGluY29tcGxldGUgYW5kIGdvIGJhY2sgdG8gc2xlZXAgYXdhaXRpbmcKKwkgKiBh bm90aGVyIGludGVycnVwdCB0aGF0IHdpbGwgbmV2ZXIgY29tZS4pCisJICoKKwkgKiBTdHJpY3Rs eSwgd2Ugb25seSBuZWVkIHRvIGRvIHRoaXMgb25jZSBhZnRlciBhbiBpbnRlcnJ1cHQsCisJICog YnV0IGl0IGlzIGVhc2llciBhbmQgc2FmZXIgdG8gZG8gaXQgZXZlcnkgdGltZSB0aGUgd2FpdGVy CisJICogaXMgd29rZW4uCisJICovCisJaWYgKGk5MTVfZ2VtX3JlcXVlc3RfY29tcGxldGVkKHJl cSwgZmFsc2UpKQorCQlyZXR1cm4gdHJ1ZTsKKworCS8qIFdlIG5lZWQgdG8gY2hlY2sgd2hldGhl ciBhbnkgZ3B1IHJlc2V0IGhhcHBlbmVkIGluIGJldHdlZW4KKwkgKiB0aGUgcmVxdWVzdCBiZWlu ZyBzdWJtaXR0ZWQgYW5kIG5vdy4gSWYgYSByZXNldCBoYXMgb2NjdXJyZWQsCisJICogdGhlIHJl cXVlc3QgaXMgZWZmZWN0aXZlbHkgY29tcGxldGUgKHdlIGVpdGhlciBhcmUgaW4gdGhlCisJICog cHJvY2VzcyBvZiBvciBoYXZlIGRpc2NhcmRlZCB0aGUgcmVuZGVyaW5nIGFuZCBjb21wbGV0ZWx5 CisJICogcmVzZXQgdGhlIEdQVS4gVGhlIHJlc3VsdHMgb2YgdGhlIHJlcXVlc3QgYXJlIGxvc3Qg YW5kIHdlCisJICogYXJlIGZyZWUgdG8gY29udGludWUgb24gd2l0aCB0aGUgb3JpZ2luYWwgb3Bl cmF0aW9uLgorCSAqLworCWlmIChyZXEtPnJlc2V0X2NvdW50ZXIgIT0gaTkxNV9yZXNldF9jb3Vu dGVyKCZyZXEtPmk5MTUtPmdwdV9lcnJvcikpCisJCXJldHVybiB0cnVlOworCisJcmV0dXJuIGZh bHNlOworfQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf Z2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCmluZGV4IDA2MDEzYjlmYmM2 YS4uOTM0OGI1ZDdkZTBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dl bS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKQEAgLTExMjMsMTcgKzEx MjMsNiBAQCBpOTE1X2dlbV9jaGVja193ZWRnZSh1bnNpZ25lZCByZXNldF9jb3VudGVyLCBib29s IGludGVycnVwdGlibGUpCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGZha2VfaXJxKHVu c2lnbmVkIGxvbmcgZGF0YSkKLXsKLQl3YWtlX3VwX3Byb2Nlc3MoKHN0cnVjdCB0YXNrX3N0cnVj dCAqKWRhdGEpOwotfQotCi1zdGF0aWMgYm9vbCBtaXNzZWRfaXJxKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiwKLQkJICAgICAgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2lu ZSkKLXsKLQlyZXR1cm4gdGVzdF9iaXQoZW5naW5lLT5pZCwgJmRldl9wcml2LT5ncHVfZXJyb3Iu bWlzc2VkX2lycV9yaW5ncyk7Ci19Ci0KIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvY2FsX2Nsb2Nr X3VzKHVuc2lnbmVkICpjcHUpCiB7CiAJdW5zaWduZWQgbG9uZyB0OwpAQCAtMTE2Niw3ICsxMTU1 LDcgQEAgc3RhdGljIGJvb2wgYnVzeXdhaXRfc3RvcCh1bnNpZ25lZCBsb25nIHRpbWVvdXQsIHVu c2lnbmVkIGNwdSkKIAlyZXR1cm4gdGhpc19jcHUgIT0gY3B1OwogfQogCi1zdGF0aWMgaW50IF9f aTkxNV9zcGluX3JlcXVlc3Qoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEsIGludCBz dGF0ZSkKK3N0YXRpYyBib29sIF9faTkxNV9zcGluX3JlcXVlc3Qoc3RydWN0IGRybV9pOTE1X2dl bV9yZXF1ZXN0ICpyZXEsIGludCBzdGF0ZSkKIHsKIAl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CiAJ dW5zaWduZWQgY3B1OwpAQCAtMTE4MSwxNyArMTE3MCwxNCBAQCBzdGF0aWMgaW50IF9faTkxNV9z cGluX3JlcXVlc3Qoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEsIGludCBzdGF0ZSkK IAkgKiB0YWtlcyB0byBzbGVlcCBvbiBhIHJlcXVlc3QsIG9uIHRoZSBvcmRlciBvZiBhIG1pY3Jv c2Vjb25kLgogCSAqLwogCi0JaWYgKHJlcS0+ZW5naW5lLT5pcnFfcmVmY291bnQpCi0JCXJldHVy biAtRUJVU1k7Ci0KIAkvKiBPbmx5IHNwaW4gaWYgd2Uga25vdyB0aGUgR1BVIGlzIHByb2Nlc3Np bmcgdGhpcyByZXF1ZXN0ICovCiAJaWYgKCFpOTE1X2dlbV9yZXF1ZXN0X3N0YXJ0ZWQocmVxLCB0 cnVlKSkKLQkJcmV0dXJuIC1FQUdBSU47CisJCXJldHVybiBmYWxzZTsKIAogCXRpbWVvdXQgPSBs b2NhbF9jbG9ja191cygmY3B1KSArIDU7Ci0Jd2hpbGUgKCFuZWVkX3Jlc2NoZWQoKSkgeworCWRv IHsKIAkJaWYgKGk5MTVfZ2VtX3JlcXVlc3RfY29tcGxldGVkKHJlcSwgdHJ1ZSkpCi0JCQlyZXR1 cm4gMDsKKwkJCXJldHVybiB0cnVlOwogCiAJCWlmIChzaWduYWxfcGVuZGluZ19zdGF0ZShzdGF0 ZSwgY3VycmVudCkpCiAJCQlicmVhazsKQEAgLTEyMDAsMTIgKzExODYsOSBAQCBzdGF0aWMgaW50 IF9faTkxNV9zcGluX3JlcXVlc3Qoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEsIGlu dCBzdGF0ZSkKIAkJCWJyZWFrOwogCiAJCWNwdV9yZWxheF9sb3dsYXRlbmN5KCk7Ci0JfQotCi0J aWYgKGk5MTVfZ2VtX3JlcXVlc3RfY29tcGxldGVkKHJlcSwgZmFsc2UpKQotCQlyZXR1cm4gMDsK Kwl9IHdoaWxlICghbmVlZF9yZXNjaGVkKCkpOwogCi0JcmV0dXJuIC1FQUdBSU47CisJcmV0dXJu IGZhbHNlOwogfQogCiAvKioKQEAgLTEyMjksMTcgKzEyMTIsMTMgQEAgaW50IF9faTkxNV93YWl0 X3JlcXVlc3Qoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEsCiAJCQlzNjQgKnRpbWVv dXQsCiAJCQlzdHJ1Y3QgaW50ZWxfcnBzX2NsaWVudCAqcnBzKQogewotCXN0cnVjdCBpbnRlbF9l bmdpbmVfY3MgKmVuZ2luZSA9IGk5MTVfZ2VtX3JlcXVlc3RfZ2V0X2VuZ2luZShyZXEpOwotCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHJlcS0+aTkxNTsKLQljb25zdCBib29s IGlycV90ZXN0X2luX3Byb2dyZXNzID0KLQkJQUNDRVNTX09OQ0UoZGV2X3ByaXYtPmdwdV9lcnJv ci50ZXN0X2lycV9yaW5ncykgJiBpbnRlbF9lbmdpbmVfZmxhZyhlbmdpbmUpOwogCWludCBzdGF0 ZSA9IGludGVycnVwdGlibGUgPyBUQVNLX0lOVEVSUlVQVElCTEUgOiBUQVNLX1VOSU5URVJSVVBU SUJMRTsKLQlERUZJTkVfV0FJVCh3YWl0KTsKLQl1bnNpZ25lZCBsb25nIHRpbWVvdXRfZXhwaXJl OworCXN0cnVjdCBpbnRlbF93YWl0IHdhaXQ7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0X3JlbWFp bjsKIAlzNjQgYmVmb3JlID0gMDsgLyogT25seSB0byBzaWxlbmNlIGEgY29tcGlsZXIgd2Fybmlu Zy4gKi8KLQlpbnQgcmV0OworCWludCByZXQgPSAwOwogCi0JV0FSTighaW50ZWxfaXJxc19lbmFi bGVkKGRldl9wcml2KSwgIklSUXMgZGlzYWJsZWQiKTsKKwltaWdodF9zbGVlcCgpOwogCiAJaWYg KGxpc3RfZW1wdHkoJnJlcS0+bGlzdCkpCiAJCXJldHVybiAwOwpAQCAtMTI0Nyw3ICsxMjI2LDcg QEAgaW50IF9faTkxNV93YWl0X3JlcXVlc3Qoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpy ZXEsCiAJaWYgKGk5MTVfZ2VtX3JlcXVlc3RfY29tcGxldGVkKHJlcSwgdHJ1ZSkpCiAJCXJldHVy biAwOwogCi0JdGltZW91dF9leHBpcmUgPSAwOworCXRpbWVvdXRfcmVtYWluID0gTUFYX1NDSEVE VUxFX1RJTUVPVVQ7CiAJaWYgKHRpbWVvdXQpIHsKIAkJaWYgKFdBUk5fT04oKnRpbWVvdXQgPCAw KSkKIAkJCXJldHVybiAtRUlOVkFMOwpAQCAtMTI1NSw3ICsxMjM0LDcgQEAgaW50IF9faTkxNV93 YWl0X3JlcXVlc3Qoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEsCiAJCWlmICgqdGlt ZW91dCA9PSAwKQogCQkJcmV0dXJuIC1FVElNRTsKIAotCQl0aW1lb3V0X2V4cGlyZSA9IGppZmZp ZXMgKyBuc2Vjc190b19qaWZmaWVzX3RpbWVvdXQoKnRpbWVvdXQpOworCQl0aW1lb3V0X3JlbWFp biA9IG5zZWNzX3RvX2ppZmZpZXNfdGltZW91dCgqdGltZW91dCk7CiAKIAkJLyoKIAkJICogUmVj b3JkIGN1cnJlbnQgdGltZSBpbiBjYXNlIGludGVycnVwdGVkIGJ5IHNpZ25hbCwgb3Igd2VkZ2Vk LgpAQCAtMTI2Myw3OCArMTI0Miw1NyBAQCBpbnQgX19pOTE1X3dhaXRfcmVxdWVzdChzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSwKIAkJYmVmb3JlID0ga3RpbWVfZ2V0X3Jhd19ucygp OwogCX0KIAotCWlmIChJTlRFTF9JTkZPKGRldl9wcml2KS0+Z2VuID49IDYpCi0JCWdlbjZfcnBz X2Jvb3N0KGRldl9wcml2LCBycHMsIHJlcS0+ZW1pdHRlZF9qaWZmaWVzKTsKLQogCXRyYWNlX2k5 MTVfZ2VtX3JlcXVlc3Rfd2FpdF9iZWdpbihyZXEpOwogCi0JLyogT3B0aW1pc3RpYyBzcGluIGZv ciB0aGUgbmV4dCBqaWZmaWUgYmVmb3JlIHRvdWNoaW5nIElSUXMgKi8KLQlyZXQgPSBfX2k5MTVf c3Bpbl9yZXF1ZXN0KHJlcSwgc3RhdGUpOwotCWlmIChyZXQgPT0gMCkKLQkJZ290byBvdXQ7CisJ aWYgKElOVEVMX0lORk8ocmVxLT5pOTE1KS0+Z2VuID49IDYpCisJCWdlbjZfcnBzX2Jvb3N0KHJl cS0+aTkxNSwgcnBzLCByZXEtPmVtaXR0ZWRfamlmZmllcyk7CiAKLQlpZiAoIWlycV90ZXN0X2lu X3Byb2dyZXNzICYmIFdBUk5fT04oIWVuZ2luZS0+aXJxX2dldChlbmdpbmUpKSkgewotCQlyZXQg PSAtRU5PREVWOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlmb3IgKDs7KSB7Ci0JCXN0cnVjdCB0aW1l cl9saXN0IHRpbWVyOworCS8qIE9wdGltaXN0aWMgc3BpbiBmb3IgdGhlIG5leHQgfmppZmZpZSBi ZWZvcmUgdG91Y2hpbmcgSVJRcyAqLworCWlmIChfX2k5MTVfc3Bpbl9yZXF1ZXN0KHJlcSwgc3Rh dGUpKQorCQlnb3RvIGNvbXBsZXRlOwogCi0JCXByZXBhcmVfdG9fd2FpdCgmZW5naW5lLT5pcnFf cXVldWUsICZ3YWl0LCBzdGF0ZSk7Ci0KLQkJLyogV2UgbmVlZCB0byBjaGVjayB3aGV0aGVyIGFu eSBncHUgcmVzZXQgaGFwcGVuZWQgaW4gYmV0d2VlbgotCQkgKiB0aGUgcmVxdWVzdCBiZWluZyBz dWJtaXR0ZWQgYW5kIG5vdy4gSWYgYSByZXNldCBoYXMgb2NjdXJyZWQsCi0JCSAqIHRoZSByZXF1 ZXN0IGlzIGVmZmVjdGl2ZWx5IGNvbXBsZXRlICh3ZSBlaXRoZXIgYXJlIGluIHRoZQotCQkgKiBw cm9jZXNzIG9mIG9yIGhhdmUgZGlzY2FyZGVkIHRoZSByZW5kZXJpbmcgYW5kIGNvbXBsZXRlbHkK LQkJICogcmVzZXQgdGhlIEdQVS4gVGhlIHJlc3VsdHMgb2YgdGhlIHJlcXVlc3QgYXJlIGxvc3Qg YW5kIHdlCi0JCSAqIGFyZSBmcmVlIHRvIGNvbnRpbnVlIG9uIHdpdGggdGhlIG9yaWdpbmFsIG9w ZXJhdGlvbi4KKwlpbnRlbF93YWl0X2luaXQoJndhaXQsIHJlcS0+c2Vxbm8pOworCXNldF9jdXJy ZW50X3N0YXRlKHN0YXRlKTsKKwlpZiAoaW50ZWxfZW5naW5lX2FkZF93YWl0KHJlcS0+ZW5naW5l LCAmd2FpdCkpCisJCS8qIEluIG9yZGVyIHRvIGNoZWNrIHRoYXQgd2UgaGF2ZW4ndCBtaXNzZWQg dGhlIGludGVycnVwdAorCQkgKiBhcyB3ZSBlbmFibGVkIGl0LCB3ZSBuZWVkIHRvIGtpY2sgb3Vy c2VsdmVzIHRvIGRvIGEKKwkJICogY29oZXJlbnQgY2hlY2sgb24gdGhlIHNlcW5vIGJlZm9yZSB3 ZSBzbGVlcC4KIAkJICovCi0JCWlmIChyZXEtPnJlc2V0X2NvdW50ZXIgIT0gaTkxNV9yZXNldF9j b3VudGVyKCZkZXZfcHJpdi0+Z3B1X2Vycm9yKSkgewotCQkJcmV0ID0gMDsKLQkJCWJyZWFrOwot CQl9Ci0KLQkJaWYgKGk5MTVfZ2VtX3JlcXVlc3RfY29tcGxldGVkKHJlcSwgZmFsc2UpKSB7Ci0J CQlyZXQgPSAwOwotCQkJYnJlYWs7Ci0JCX0KKwkJZ290byB3YWtldXA7CiAKKwlmb3IgKDs7KSB7 CiAJCWlmIChzaWduYWxfcGVuZGluZ19zdGF0ZShzdGF0ZSwgY3VycmVudCkpIHsKIAkJCXJldCA9 IC1FUkVTVEFSVFNZUzsKIAkJCWJyZWFrOwogCQl9CiAKLQkJaWYgKHRpbWVvdXQgJiYgdGltZV9h ZnRlcl9lcShqaWZmaWVzLCB0aW1lb3V0X2V4cGlyZSkpIHsKKwkJLyogRW5zdXJlIHRoYXQgZXZl biBpZiB0aGUgR1BVIGhhbmdzLCB3ZSBnZXQgd29rZW4gdXAuICovCisJCWk5MTVfcXVldWVfaGFu Z2NoZWNrKHJlcS0+aTkxNSk7CisKKwkJdGltZW91dF9yZW1haW4gPSBpb19zY2hlZHVsZV90aW1l b3V0KHRpbWVvdXRfcmVtYWluKTsKKwkJaWYgKHRpbWVvdXRfcmVtYWluID09IDApIHsKIAkJCXJl dCA9IC1FVElNRTsKIAkJCWJyZWFrOwogCQl9CiAKLQkJLyogRW5zdXJlIHRoYXQgZXZlbiBpZiB0 aGUgR1BVIGhhbmdzLCB3ZSBnZXQgd29rZW4gdXAuICovCi0JCWk5MTVfcXVldWVfaGFuZ2NoZWNr KGRldl9wcml2KTsKLQotCQl0aW1lci5mdW5jdGlvbiA9IE5VTEw7Ci0JCWlmICh0aW1lb3V0IHx8 IG1pc3NlZF9pcnEoZGV2X3ByaXYsIGVuZ2luZSkpIHsKLQkJCXVuc2lnbmVkIGxvbmcgZXhwaXJl OwotCi0JCQlzZXR1cF90aW1lcl9vbl9zdGFjaygmdGltZXIsIGZha2VfaXJxLCAodW5zaWduZWQg bG9uZyljdXJyZW50KTsKLQkJCWV4cGlyZSA9IG1pc3NlZF9pcnEoZGV2X3ByaXYsIGVuZ2luZSkg PyBqaWZmaWVzICsgMSA6IHRpbWVvdXRfZXhwaXJlOwotCQkJbW9kX3RpbWVyKCZ0aW1lciwgZXhw aXJlKTsKLQkJfQorCQlpZiAoaW50ZWxfd2FpdF9jb21wbGV0ZSgmd2FpdCkpCisJCQlicmVhazsK IAotCQlpb19zY2hlZHVsZSgpOword2FrZXVwOgorCQlzZXRfY3VycmVudF9zdGF0ZShzdGF0ZSk7 CiAKLQkJaWYgKHRpbWVyLmZ1bmN0aW9uKSB7Ci0JCQlkZWxfc2luZ2xlc2hvdF90aW1lcl9zeW5j KCZ0aW1lcik7Ci0JCQlkZXN0cm95X3RpbWVyX29uX3N0YWNrKCZ0aW1lcik7Ci0JCX0KKwkJLyog Q2FyZWZ1bGx5IGNoZWNrIGlmIHRoZSByZXF1ZXN0IGlzIGNvbXBsZXRlLCBnaXZpbmcgdGltZQor CQkgKiBmb3IgdGhlIHNlcW5vIHRvIGJlIHZpc2libGUgZm9sbG93aW5nIHRoZSBpbnRlcnJ1cHQu CisJCSAqIFdlIGFsc28gaGF2ZSB0byBjaGVjayBpbiBjYXNlIHdlIGFyZSBraWNrZWQgYnkgdGhl IEdQVQorCQkgKiByZXNldCBpbiBvcmRlciB0byBkcm9wIHRoZSBzdHJ1Y3RfbXV0ZXguCisJCSAq LworCQlpZiAoX19pOTE1X3JlcXVlc3RfaXJxX2NvbXBsZXRlKHJlcSkpCisJCQlicmVhazsKIAl9 Ci0JaWYgKCFpcnFfdGVzdF9pbl9wcm9ncmVzcykKLQkJZW5naW5lLT5pcnFfcHV0KGVuZ2luZSk7 CiAKLQlmaW5pc2hfd2FpdCgmZW5naW5lLT5pcnFfcXVldWUsICZ3YWl0KTsKLQotb3V0OgorCWlu dGVsX2VuZ2luZV9yZW1vdmVfd2FpdChyZXEtPmVuZ2luZSwgJndhaXQpOworCV9fc2V0X2N1cnJl bnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKK2NvbXBsZXRlOgogCXRyYWNlX2k5MTVfZ2VtX3JlcXVl c3Rfd2FpdF9lbmQocmVxKTsKIAogCWlmICh0aW1lb3V0KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2dwdV9lcnJvci5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9ncHVfZXJyb3IuYwppbmRleCAzNGZmMjQ1OWNlZWEuLjg5MjQxZmZjYzY3NiAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ncHVfZXJyb3IuYworKysgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2dwdV9lcnJvci5jCkBAIC00NjMsNiArNDYzLDE4IEBAIGludCBpOTE1 X2Vycm9yX3N0YXRlX3RvX3N0cihzdHJ1Y3QgZHJtX2k5MTVfZXJyb3Jfc3RhdGVfYnVmICptLAog CQkJfQogCQl9CiAKKwkJaWYgKGVycm9yLT5yaW5nW2ldLm51bV93YWl0ZXJzKSB7CisJCQllcnJf cHJpbnRmKG0sICIlcyAtLS0gJWQgd2FpdGVyc1xuIiwKKwkJCQkgICBkZXZfcHJpdi0+ZW5naW5l W2ldLm5hbWUsCisJCQkJICAgZXJyb3ItPnJpbmdbaV0ubnVtX3dhaXRlcnMpOworCQkJZm9yIChq ID0gMDsgaiA8IGVycm9yLT5yaW5nW2ldLm51bV93YWl0ZXJzOyBqKyspIHsKKwkJCQllcnJfcHJp bnRmKG0sICIgc2Vxbm8gMHglMDh4IGZvciAlcyBbJWRdXG4iLAorCQkJCQkgICBlcnJvci0+cmlu Z1tpXS53YWl0ZXJzW2pdLnNlcW5vLAorCQkJCQkgICBlcnJvci0+cmluZ1tpXS53YWl0ZXJzW2pd LmNvbW0sCisJCQkJCSAgIGVycm9yLT5yaW5nW2ldLndhaXRlcnNbal0ucGlkKTsKKwkJCX0KKwkJ fQorCiAJCWlmICgob2JqID0gZXJyb3ItPnJpbmdbaV0ucmluZ2J1ZmZlcikpIHsKIAkJCWVycl9w cmludGYobSwgIiVzIC0tLSByaW5nYnVmZmVyID0gMHglMDh4XG4iLAogCQkJCSAgIGRldl9wcml2 LT5lbmdpbmVbaV0ubmFtZSwKQEAgLTYwNSw4ICs2MTcsOSBAQCBzdGF0aWMgdm9pZCBpOTE1X2Vy cm9yX3N0YXRlX2ZyZWUoc3RydWN0IGtyZWYgKmVycm9yX3JlZikKIAkJaTkxNV9lcnJvcl9vYmpl Y3RfZnJlZShlcnJvci0+cmluZ1tpXS5yaW5nYnVmZmVyKTsKIAkJaTkxNV9lcnJvcl9vYmplY3Rf ZnJlZShlcnJvci0+cmluZ1tpXS5od3NfcGFnZSk7CiAJCWk5MTVfZXJyb3Jfb2JqZWN0X2ZyZWUo ZXJyb3ItPnJpbmdbaV0uY3R4KTsKLQkJa2ZyZWUoZXJyb3ItPnJpbmdbaV0ucmVxdWVzdHMpOwog CQlpOTE1X2Vycm9yX29iamVjdF9mcmVlKGVycm9yLT5yaW5nW2ldLndhX2N0eCk7CisJCWtmcmVl KGVycm9yLT5yaW5nW2ldLnJlcXVlc3RzKTsKKwkJa2ZyZWUoZXJyb3ItPnJpbmdbaV0ud2FpdGVy cyk7CiAJfQogCiAJaTkxNV9lcnJvcl9vYmplY3RfZnJlZShlcnJvci0+c2VtYXBob3JlX29iaik7 CkBAIC04OTIsNiArOTA1LDQ3IEBAIHN0YXRpYyB2b2lkIGdlbjZfcmVjb3JkX3NlbWFwaG9yZV9z dGF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJfQogfQogCitzdGF0aWMg dm9pZCBlbmdpbmVfcmVjb3JkX3dhaXRlcnMoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5l LAorCQkJCSAgc3RydWN0IGRybV9pOTE1X2Vycm9yX3JpbmcgKmVyaW5nKQoreworCXN0cnVjdCBp bnRlbF9icmVhZGNydW1icyAqYiA9ICZlbmdpbmUtPmJyZWFkY3J1bWJzOworCXN0cnVjdCBkcm1f aTkxNV9lcnJvcl93YWl0ZXIgKndhaXRlcjsKKwlzdHJ1Y3QgcmJfbm9kZSAqcmI7CisJaW50IGNv dW50OworCisJZXJpbmctPm51bV93YWl0ZXJzID0gMDsKKwllcmluZy0+d2FpdGVycyA9IE5VTEw7 CisKKwlzcGluX2xvY2soJmItPmxvY2spOworCWNvdW50ID0gMDsKKwlmb3IgKHJiID0gcmJfZmly c3QoJmItPndhaXRlcnMpOyByYiAhPSBOVUxMOyByYiA9IHJiX25leHQocmIpKQorCQljb3VudCsr OworCXNwaW5fdW5sb2NrKCZiLT5sb2NrKTsKKworCXdhaXRlciA9IE5VTEw7CisJaWYgKGNvdW50 KQorCQl3YWl0ZXIgPSBrbWFsbG9jKGNvdW50KnNpemVvZihzdHJ1Y3QgZHJtX2k5MTVfZXJyb3Jf d2FpdGVyKSwKKwkJCQkgR0ZQX0FUT01JQyk7CisJaWYgKCF3YWl0ZXIpCisJCXJldHVybjsKKwor CWVyaW5nLT53YWl0ZXJzID0gd2FpdGVyOworCisJc3Bpbl9sb2NrKCZiLT5sb2NrKTsKKwlmb3Ig KHJiID0gcmJfZmlyc3QoJmItPndhaXRlcnMpOyByYiAhPSBOVUxMOyByYiA9IHJiX25leHQocmIp KSB7CisJCXN0cnVjdCBpbnRlbF93YWl0ICp3ID0gY29udGFpbmVyX29mKHJiLCB0eXBlb2YoKncp LCBub2RlKTsKKworCQlzdHJjcHkod2FpdGVyLT5jb21tLCB3LT50YXNrLT5jb21tKTsKKwkJd2Fp dGVyLT5waWQgPSB3LT50YXNrLT5waWQ7CisJCXdhaXRlci0+c2Vxbm8gPSB3LT5zZXFubzsKKwkJ d2FpdGVyKys7CisKKwkJaWYgKCsrZXJpbmctPm51bV93YWl0ZXJzID09IGNvdW50KQorCQkJYnJl YWs7CisJfQorCXNwaW5fdW5sb2NrKCZiLT5sb2NrKTsKK30KKwogc3RhdGljIHZvaWQgaTkxNV9y ZWNvcmRfcmluZ19zdGF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJCQkJ ICAgc3RydWN0IGRybV9pOTE1X2Vycm9yX3N0YXRlICplcnJvciwKIAkJCQkgICBzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICplbmdpbmUsCkBAIC05MjYsNyArOTgwLDcgQEAgc3RhdGljIHZvaWQgaTkx NV9yZWNvcmRfcmluZ19zdGF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJ CWVyaW5nLT5pbnN0ZG9uZSA9IEk5MTVfUkVBRChHRU4yX0lOU1RET05FKTsKIAl9CiAKLQllcmlu Zy0+d2FpdGluZyA9IHdhaXRxdWV1ZV9hY3RpdmUoJmVuZ2luZS0+aXJxX3F1ZXVlKTsKKwllcmlu Zy0+d2FpdGluZyA9IGludGVsX2VuZ2luZV9oYXNfd2FpdGVyKGVuZ2luZSk7CiAJZXJpbmctPmlu c3RwbSA9IEk5MTVfUkVBRChSSU5HX0lOU1RQTShlbmdpbmUtPm1taW9fYmFzZSkpOwogCWVyaW5n LT5hY3RoZCA9IGludGVsX3JpbmdfZ2V0X2FjdGl2ZV9oZWFkKGVuZ2luZSk7CiAJZXJpbmctPnNl cW5vID0gZW5naW5lLT5nZXRfc2Vxbm8oZW5naW5lKTsKQEAgLTEwMzIsNiArMTA4Niw3IEBAIHN0 YXRpYyB2b2lkIGk5MTVfZ2VtX3JlY29yZF9yaW5ncyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYsCiAJCWVycm9yLT5yaW5nW2ldLnZhbGlkID0gdHJ1ZTsKIAogCQlpOTE1X3JlY29y ZF9yaW5nX3N0YXRlKGRldl9wcml2LCBlcnJvciwgZW5naW5lLCAmZXJyb3ItPnJpbmdbaV0pOwor CQllbmdpbmVfcmVjb3JkX3dhaXRlcnMoZW5naW5lLCAmZXJyb3ItPnJpbmdbaV0pOwogCiAJCXJl cXVlc3QgPSBpOTE1X2dlbV9maW5kX2FjdGl2ZV9yZXF1ZXN0KGVuZ2luZSk7CiAJCWlmIChyZXF1 ZXN0KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYwppbmRleCAyN2RkNDVhNzI5MWMuLmM0OWI4MzU2 YTgwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYworKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCkBAIC05ODgsMTMgKzk4OCwxMCBAQCBzdGF0 aWMgdm9pZCBpcm9ubGFrZV9ycHNfY2hhbmdlX2lycV9oYW5kbGVyKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdikKIAogc3RhdGljIHZvaWQgbm90aWZ5X3Jpbmcoc3RydWN0IGludGVs X2VuZ2luZV9jcyAqZW5naW5lKQogewotCWlmICghaW50ZWxfZW5naW5lX2luaXRpYWxpemVkKGVu Z2luZSkpCi0JCXJldHVybjsKLQotCXRyYWNlX2k5MTVfZ2VtX3JlcXVlc3Rfbm90aWZ5KGVuZ2lu ZSk7Ci0JZW5naW5lLT51c2VyX2ludGVycnVwdHMrKzsKLQotCXdha2VfdXBfYWxsKCZlbmdpbmUt PmlycV9xdWV1ZSk7CisJaWYgKGludGVsX2VuZ2luZV93YWtldXAoZW5naW5lKSkgeworCQl0cmFj ZV9pOTE1X2dlbV9yZXF1ZXN0X25vdGlmeShlbmdpbmUpOworCQllbmdpbmUtPnVzZXJfaW50ZXJy dXB0cysrOworCX0KIH0KIAogc3RhdGljIHZvaWQgdmx2X2MwX3JlYWQoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2LApAQCAtMTA3NSw3ICsxMDcyLDcgQEAgc3RhdGljIGJvb2wgYW55 X3dhaXRlcnMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogCXN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKmVuZ2luZTsKIAogCWZvcl9lYWNoX2VuZ2luZShlbmdpbmUsIGRldl9wcml2 KQotCQlpZiAoZW5naW5lLT5pcnFfcmVmY291bnQpCisJCWlmIChpbnRlbF9lbmdpbmVfaGFzX3dh aXRlcihlbmdpbmUpKQogCQkJcmV0dXJuIHRydWU7CiAKIAlyZXR1cm4gZmFsc2U7CkBAIC0yNTA1 LDggKzI1MDIsNiBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgZ2VuOF9pcnFfaGFuZGxlcihpbnQgaXJx LCB2b2lkICphcmcpCiBzdGF0aWMgdm9pZCBpOTE1X2Vycm9yX3dha2VfdXAoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2LAogCQkJICAgICAgIGJvb2wgcmVzZXRfY29tcGxldGVkKQog ewotCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKLQogCS8qCiAJICogTm90aWZ5IGFs bCB3YWl0ZXJzIGZvciBHUFUgY29tcGxldGlvbiBldmVudHMgdGhhdCByZXNldCBzdGF0ZSBoYXMK IAkgKiBiZWVuIGNoYW5nZWQsIGFuZCB0aGF0IHRoZXkgbmVlZCB0byByZXN0YXJ0IHRoZWlyIHdh aXQgYWZ0ZXIKQEAgLTI1MTQsOSArMjUwOSw4IEBAIHN0YXRpYyB2b2lkIGk5MTVfZXJyb3Jfd2Fr ZV91cChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJICogYSBncHUgcmVzZXQg cGVuZGluZyBzbyB0aGF0IGk5MTVfZXJyb3Jfd29ya19mdW5jIGNhbiBhY3F1aXJlIHRoZW0pLgog CSAqLwogCi0JLyogV2FrZSB1cCBfX3dhaXRfc2Vxbm8sIHBvdGVudGlhbGx5IGhvbGRpbmcgZGV2 LT5zdHJ1Y3RfbXV0ZXguICovCi0JZm9yX2VhY2hfZW5naW5lKGVuZ2luZSwgZGV2X3ByaXYpCi0J CXdha2VfdXBfYWxsKCZlbmdpbmUtPmlycV9xdWV1ZSk7CisJLyogV2FrZSB1cCBpOTE1X3dhaXRf cmVxdWVzdCwgcG90ZW50aWFsbHkgaG9sZGluZyBkZXYtPnN0cnVjdF9tdXRleC4gKi8KKwlpbnRl bF9raWNrX3dhaXRlcnMoZGV2X3ByaXYpOwogCiAJLyogV2FrZSB1cCBpbnRlbF9jcnRjX3dhaXRf Zm9yX3BlbmRpbmdfZmxpcHMsIGhvbGRpbmcgY3J0Yy0+bXV0ZXguICovCiAJd2FrZV91cF9hbGwo JmRldl9wcml2LT5wZW5kaW5nX2ZsaXBfcXVldWUpOwpAQCAtMzA5OCwxMyArMzA5MiwxNCBAQCBz dGF0aWMgdW5zaWduZWQga2lja193YWl0ZXJzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2lu ZSkKIAogCWlmIChlbmdpbmUtPmhhbmdjaGVjay51c2VyX2ludGVycnVwdHMgPT0gdXNlcl9pbnRl cnJ1cHRzICYmCiAJICAgICF0ZXN0X2FuZF9zZXRfYml0KGVuZ2luZS0+aWQsICZpOTE1LT5ncHVf ZXJyb3IubWlzc2VkX2lycV9yaW5ncykpIHsKLQkJaWYgKCEoaTkxNS0+Z3B1X2Vycm9yLnRlc3Rf aXJxX3JpbmdzICYgaW50ZWxfZW5naW5lX2ZsYWcoZW5naW5lKSkpCisJCWlmICghdGVzdF9iaXQo ZW5naW5lLT5pZCwgJmk5MTUtPmdwdV9lcnJvci50ZXN0X2lycV9yaW5ncykpCiAJCQlEUk1fRVJS T1IoIkhhbmdjaGVjayB0aW1lciBlbGFwc2VkLi4uICVzIGlkbGVcbiIsCiAJCQkJICBlbmdpbmUt Pm5hbWUpOwogCQllbHNlCiAJCQlEUk1fSU5GTygiRmFrZSBtaXNzZWQgaXJxIG9uICVzXG4iLAog CQkJCSBlbmdpbmUtPm5hbWUpOwotCQl3YWtlX3VwX2FsbCgmZW5naW5lLT5pcnFfcXVldWUpOwor CisJCWludGVsX2VuZ2luZV9lbmFibGVfZmFrZV9pcnEoZW5naW5lKTsKIAl9CiAKIAlyZXR1cm4g dXNlcl9pbnRlcnJ1cHRzOwpAQCAtMzE0OCw3ICszMTQzLDcgQEAgc3RhdGljIHZvaWQgaTkxNV9o YW5nY2hlY2tfZWxhcHNlZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAJaW50ZWxfdW5jb3Jl X2FybV91bmNsYWltZWRfbW1pb19kZXRlY3Rpb24oZGV2X3ByaXYpOwogCiAJZm9yX2VhY2hfZW5n aW5lX2lkKGVuZ2luZSwgZGV2X3ByaXYsIGlkKSB7Ci0JCWJvb2wgYnVzeSA9IHdhaXRxdWV1ZV9h Y3RpdmUoJmVuZ2luZS0+aXJxX3F1ZXVlKTsKKwkJYm9vbCBidXN5ID0gaW50ZWxfZW5naW5lX2hh c193YWl0ZXIoZW5naW5lKTsKIAkJdTY0IGFjdGhkOwogCQl1MzIgc2Vxbm87CiAJCXVuc2lnbmVk IHVzZXJfaW50ZXJydXB0czsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2JyZWFkY3J1bWJzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9icmVhZGNydW1icy5j Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYzgyZWNiZjc0NzBhCi0t LSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYnJlYWRjcnVtYnMu YwpAQCAtMCwwICsxLDMzMyBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDE1IEludGVsIENvcnBv cmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFy Z2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBh bmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0 byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0 aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJn ZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGll cyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICog U29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBw ZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxs IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhl CisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwg V0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5D TFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ VFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VN RU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xE RVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJ VFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwg QVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdB UkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICoK KyAqLworCisjaW5jbHVkZSAiaTkxNV9kcnYuaCIKKworc3RhdGljIHZvaWQgaW50ZWxfYnJlYWRj cnVtYnNfZmFrZV9pcnEodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKmVuZ2luZSA9IChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICopZGF0YTsKKworCS8qCisJ ICogVGhlIHRpbWVyIHBlcnNpc3RzIGluIGNhc2Ugd2UgY2Fubm90IGVuYWJsZSBpbnRlcnJ1cHRz LAorCSAqIG9yIGlmIHdlIGhhdmUgcHJldmlvdXNseSBzZWVuIHNlcW5vL2ludGVycnVwdCBpbmNv aGVyZW5jeQorCSAqICgibWlzc2VkIGludGVycnVwdCIgc3luZHJvbWUpLiBIZXJlIHRoZSB3b3Jr ZXIgd2lsbCB3YWtlIHVwCisJICogZXZlcnkgamlmZmllIGluIG9yZGVyIHRvIGtpY2sgdGhlIG9s ZGVzdCB3YWl0ZXIgdG8gZG8gdGhlCisJICogY29oZXJlbnQgc2Vxbm8gY2hlY2suCisJICovCisJ cmN1X3JlYWRfbG9jaygpOworCWlmIChpbnRlbF9lbmdpbmVfd2FrZXVwKGVuZ2luZSkpCisJCW1v ZF90aW1lcigmZW5naW5lLT5icmVhZGNydW1icy5mYWtlX2lycSwgamlmZmllcyArIDEpOworCXJj dV9yZWFkX3VubG9jaygpOworfQorCitzdGF0aWMgdm9pZCBpcnFfZW5hYmxlKHN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKmVuZ2luZSkKK3sKKwlXQVJOX09OKCFlbmdpbmUtPmlycV9nZXQoZW5naW5l KSk7Cit9CisKK3N0YXRpYyB2b2lkIGlycV9kaXNhYmxlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3Mg KmVuZ2luZSkKK3sKKwllbmdpbmUtPmlycV9wdXQoZW5naW5lKTsKK30KKworc3RhdGljIGJvb2wg X19pbnRlbF9icmVhZGNydW1ic19lbmFibGVfaXJxKHN0cnVjdCBpbnRlbF9icmVhZGNydW1icyAq YikKK3sKKwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUgPQorCQljb250YWluZXJfb2Yo Yiwgc3RydWN0IGludGVsX2VuZ2luZV9jcywgYnJlYWRjcnVtYnMpOworCXN0cnVjdCBkcm1faTkx NV9wcml2YXRlICppOTE1ID0gZW5naW5lLT5pOTE1OworCWJvb2wgaXJxX3Bvc3RlZCA9IGZhbHNl OworCisJYXNzZXJ0X3NwaW5fbG9ja2VkKCZiLT5sb2NrKTsKKwlpZiAoYi0+cnBtX3dha2Vsb2Nr KQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKiBTaW5jZSB3ZSBhcmUgd2FpdGluZyBvbiBhIHJlcXVl c3QsIHRoZSBHUFUgc2hvdWxkIGJlIGJ1c3kKKwkgKiBhbmQgc2hvdWxkIGhhdmUgaXRzIG93biBy cG0gcmVmZXJlbmNlLiBGb3IgY29tcGxldGVuZXNzLAorCSAqIHJlY29yZCBhbiBycG0gcmVmZXJl bmNlIGZvciBvdXJzZWx2ZXMgdG8gY292ZXIgdGhlCisJICogaW50ZXJydXB0IHdlIHVubWFzay4K KwkgKi8KKwlpbnRlbF9ydW50aW1lX3BtX2dldF9ub3Jlc3VtZShpOTE1KTsKKwliLT5ycG1fd2Fr ZWxvY2sgPSB0cnVlOworCisJLyogTm8gaW50ZXJydXB0cz8gS2ljayB0aGUgd2FpdGVyIGV2ZXJ5 IGppZmZpZSEgKi8KKwlpZiAoaW50ZWxfaXJxc19lbmFibGVkKGk5MTUpKSB7CisJCWlmICghdGVz dF9iaXQoZW5naW5lLT5pZCwgJmk5MTUtPmdwdV9lcnJvci50ZXN0X2lycV9yaW5ncykpIHsKKwkJ CWlycV9lbmFibGUoZW5naW5lKTsKKwkJCWlycV9wb3N0ZWQgPSB0cnVlOworCQl9CisJCWItPmly cV9lbmFibGVkID0gdHJ1ZTsKKwl9CisKKwlpZiAoIWItPmlycV9lbmFibGVkIHx8CisJICAgIHRl c3RfYml0KGVuZ2luZS0+aWQsICZpOTE1LT5ncHVfZXJyb3IubWlzc2VkX2lycV9yaW5ncykpCisJ CW1vZF90aW1lcigmYi0+ZmFrZV9pcnEsIGppZmZpZXMgKyAxKTsKKworCXJldHVybiBpcnFfcG9z dGVkOworfQorCitzdGF0aWMgdm9pZCBfX2ludGVsX2JyZWFkY3J1bWJzX2Rpc2FibGVfaXJxKHN0 cnVjdCBpbnRlbF9icmVhZGNydW1icyAqYikKK3sKKwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpl bmdpbmUgPQorCQljb250YWluZXJfb2YoYiwgc3RydWN0IGludGVsX2VuZ2luZV9jcywgYnJlYWRj cnVtYnMpOworCisJYXNzZXJ0X3NwaW5fbG9ja2VkKCZiLT5sb2NrKTsKKwlpZiAoIWItPnJwbV93 YWtlbG9jaykKKwkJcmV0dXJuOworCisJaWYgKGItPmlycV9lbmFibGVkKSB7CisJCWlycV9kaXNh YmxlKGVuZ2luZSk7CisJCWItPmlycV9lbmFibGVkID0gZmFsc2U7CisJfQorCisJaW50ZWxfcnVu dGltZV9wbV9wdXQoZW5naW5lLT5pOTE1KTsKKwliLT5ycG1fd2FrZWxvY2sgPSBmYWxzZTsKK30K Kworc3RhdGljIGlubGluZSBzdHJ1Y3QgaW50ZWxfd2FpdCAqdG9fd2FpdChzdHJ1Y3QgcmJfbm9k ZSAqbm9kZSkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCBpbnRlbF93YWl0 LCBub2RlKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9faW50ZWxfYnJlYWRjcnVtYnNfZmlu aXNoKHN0cnVjdCBpbnRlbF9icmVhZGNydW1icyAqYiwKKwkJCQkJICAgICAgc3RydWN0IGludGVs X3dhaXQgKndhaXQpCit7CisJYXNzZXJ0X3NwaW5fbG9ja2VkKCZiLT5sb2NrKTsKKworCS8qIFRo aXMgcmVxdWVzdCBpcyBjb21wbGV0ZWQsIHNvIHJlbW92ZSBpdCBmcm9tIHRoZSB0cmVlLCBtYXJr IGl0IGFzCisJICogY29tcGxldGUsIGFuZCAqdGhlbiogd2FrZSB1cCB0aGUgYXNzb2NpYXRlZCB0 YXNrLgorCSAqLworCXJiX2VyYXNlKCZ3YWl0LT5ub2RlLCAmYi0+d2FpdGVycyk7CisJUkJfQ0xF QVJfTk9ERSgmd2FpdC0+bm9kZSk7CisKKwl3YWtlX3VwX3Byb2Nlc3Mod2FpdC0+dGFzayk7IC8q IGltcGxpY2l0IHNtcF93bWIoKSAqLworfQorCitib29sIGludGVsX2VuZ2luZV9hZGRfd2FpdChz dHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCisJCQkgICBzdHJ1Y3QgaW50ZWxfd2FpdCAq d2FpdCkKK3sKKwlzdHJ1Y3QgaW50ZWxfYnJlYWRjcnVtYnMgKmIgPSAmZW5naW5lLT5icmVhZGNy dW1iczsKKwlzdHJ1Y3QgcmJfbm9kZSAqKnAsICpwYXJlbnQsICpjb21wbGV0ZWQ7CisJYm9vbCBm aXJzdDsKKwl1MzIgc2Vxbm87CisKKwlzcGluX2xvY2soJmItPmxvY2spOworCisJLyogSW5zZXJ0 IHRoZSByZXF1ZXN0IGludG8gdGhlIHJldGlyZW1lbnQgb3JkZXJlZCBsaXN0CisJICogb2Ygd2Fp dGVycyBieSB3YWxraW5nIHRoZSByYnRyZWUuIElmIHdlIGFyZSB0aGUgb2xkZXN0CisJICogc2Vx bm8gaW4gdGhlIHRyZWUgKHRoZSBmaXJzdCB0byBiZSByZXRpcmVkKSwgdGhlbgorCSAqIHNldCBv dXJzZWx2ZXMgYXMgdGhlIGJvdHRvbS1oYWxmLgorCSAqCisJICogQXMgd2UgZGVzY2VuZCB0aGUg dHJlZSwgcHJ1bmUgY29tcGxldGVkIGJyYW5jaGVzIHNpbmNlIHdlIGhvbGQgdGhlCisJICogc3Bp bmxvY2sgd2Uga25vdyB0aGF0IHRoZSBmaXJzdF93YWl0ZXIgbXVzdCBiZSBkZWxheWVkIGFuZCBj YW4KKwkgKiByZWR1Y2Ugc29tZSBvZiB0aGUgc2VxdWVudGlhbCB3YWtlIHVwIGxhdGVuY3kgaWYg d2UgdGFrZSBhY3Rpb24KKwkgKiBvdXJzZWx2ZXMgYW5kIHdha2UgdXAgdGhlIGNvbXBsZXRlZCB0 YXNrcyBpbiBwYXJhbGxlbC4gQWxzbywgYnkKKwkgKiByZW1vdmluZyBzdGFsZSBlbGVtZW50cyBp biB0aGUgdHJlZSwgd2UgbWF5IGJlIGFibGUgdG8gcmVkdWNlIHRoZQorCSAqIHBpbmctcG9uZyBi ZXR3ZWVuIHRoZSBvbGQgYm90dG9tLWhhbGYgYW5kIG91cnNlbHZlcyBhcyBmaXJzdC13YWl0ZXIu CisJICovCisJZmlyc3QgPSB0cnVlOworCXBhcmVudCA9IE5VTEw7CisJY29tcGxldGVkID0gTlVM TDsKKwlzZXFubyA9IGVuZ2luZS0+Z2V0X3NlcW5vKGVuZ2luZSk7CisKKwlwID0gJmItPndhaXRl cnMucmJfbm9kZTsKKwl3aGlsZSAoKnApIHsKKwkJcGFyZW50ID0gKnA7CisJCWlmICh3YWl0LT5z ZXFubyA9PSB0b193YWl0KHBhcmVudCktPnNlcW5vKSB7CisJCQkvKiBXZSBoYXZlIG11bHRpcGxl IHdhaXRlcnMgb24gdGhlIHNhbWUgc2Vxbm8sIHNlbGVjdAorCQkJICogdGhlIGhpZ2hlc3QgcHJp b3JpdHkgdGFzayAodGhhdCB3aXRoIHRoZSBzbWFsbGVzdAorCQkJICogdGFzay0+cHJpbykgdG8g c2VydmUgYXMgdGhlIGJvdHRvbS1oYWxmIGZvciB0aGlzCisJCQkgKiBncm91cC4KKwkJCSAqLwor CQkJaWYgKHdhaXQtPnRhc2stPnByaW8gPiB0b193YWl0KHBhcmVudCktPnRhc2stPnByaW8pIHsK KwkJCQlwID0gJnBhcmVudC0+cmJfcmlnaHQ7CisJCQkJZmlyc3QgPSBmYWxzZTsKKwkJCX0gZWxz ZQorCQkJCXAgPSAmcGFyZW50LT5yYl9sZWZ0OworCQl9IGVsc2UgaWYgKGk5MTVfc2Vxbm9fcGFz c2VkKHdhaXQtPnNlcW5vLAorCQkJCQkgICAgIHRvX3dhaXQocGFyZW50KS0+c2Vxbm8pKSB7CisJ CQlwID0gJnBhcmVudC0+cmJfcmlnaHQ7CisJCQlpZiAoaTkxNV9zZXFub19wYXNzZWQoc2Vxbm8s IHRvX3dhaXQocGFyZW50KS0+c2Vxbm8pKQorCQkJCWNvbXBsZXRlZCA9IHBhcmVudDsKKwkJCWVs c2UKKwkJCQlmaXJzdCA9IGZhbHNlOworCQl9IGVsc2UKKwkJCXAgPSAmcGFyZW50LT5yYl9sZWZ0 OworCX0KKwlyYl9saW5rX25vZGUoJndhaXQtPm5vZGUsIHBhcmVudCwgcCk7CisJcmJfaW5zZXJ0 X2NvbG9yKCZ3YWl0LT5ub2RlLCAmYi0+d2FpdGVycyk7CisKKwlpZiAoY29tcGxldGVkICE9IE5V TEwpIHsKKwkJc3RydWN0IHJiX25vZGUgKm5leHQgPSByYl9uZXh0KGNvbXBsZXRlZCk7CisKKwkJ aWYgKG5leHQgJiYgbmV4dCAhPSAmd2FpdC0+bm9kZSkgeworCQkJR0VNX0JVR19PTihmaXJzdCk7 CisJCQlzbXBfc3RvcmVfbWIoYi0+Zmlyc3Rfd2FpdGVyLCB0b193YWl0KG5leHQpLT50YXNrKTsK KwkJCS8qIEFzIHRoZXJlIGlzIGEgZGVsYXkgYmV0d2VlbiByZWFkaW5nIHRoZSBjdXJyZW50CisJ CQkgKiBzZXFubywgcHJvY2Vzc2luZyB0aGUgY29tcGxldGVkIHRhc2tzIGFuZCBzZWxlY3RpbmcK KwkJCSAqIHRoZSBuZXh0IHdhaXRlciwgd2UgbWF5IGhhdmUgbWlzc2VkIHRoZSBpbnRlcnJ1cHQK KwkJCSAqIGFuZCBzbyBuZWVkIGZvciB0aGUgbmV4dCBib3R0b20taGFsZiB0byB3YWtldXAuCisJ CQkgKgorCQkJICogQWxzbyBhcyB3ZSBlbmFibGUgdGhlIElSUSwgd2UgbWF5IG1pc3MgdGhlCisJ CQkgKiBpbnRlcnJ1cHQgZm9yIHRoYXQgc2Vxbm8sIHNvIHdlIGhhdmUgdG8gd2FrZSB1cAorCQkJ ICogdGhlIG5leHQgYm90dG9tLWhhbGYgaW4gb3JkZXIgdG8gZG8gYSBjb2hlcmVudCBjaGVjawor CQkJICogaW4gY2FzZSB0aGUgc2Vxbm8gcGFzc2VkLgorCQkJICovCisJCQlfX2ludGVsX2JyZWFk Y3J1bWJzX2VuYWJsZV9pcnEoYik7CisJCQl3YWtlX3VwX3Byb2Nlc3ModG9fd2FpdChuZXh0KS0+ dGFzayk7CisJCX0KKworCQlkbyB7CisJCQlzdHJ1Y3QgaW50ZWxfd2FpdCAqY3J1bWIgPSB0b193 YWl0KGNvbXBsZXRlZCk7CisJCQljb21wbGV0ZWQgPSByYl9wcmV2KGNvbXBsZXRlZCk7CisJCQlf X2ludGVsX2JyZWFkY3J1bWJzX2ZpbmlzaChiLCBjcnVtYik7CisJCX0gd2hpbGUgKGNvbXBsZXRl ZCAhPSBOVUxMKTsKKwl9CisKKwlpZiAoZmlyc3QpIHsKKwkJc21wX3N0b3JlX21iKGItPmZpcnN0 X3dhaXRlciwgd2FpdC0+dGFzayk7CisJCWZpcnN0ID1fX2ludGVsX2JyZWFkY3J1bWJzX2VuYWJs ZV9pcnEoYik7CisJfQorCUdFTV9CVUdfT04oYi0+Zmlyc3Rfd2FpdGVyID09IE5VTEwpOworCisJ c3Bpbl91bmxvY2soJmItPmxvY2spOworCisJcmV0dXJuIGZpcnN0OworfQorCit2b2lkIGludGVs X2VuZ2luZV9lbmFibGVfZmFrZV9pcnEoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQor eworCW1vZF90aW1lcigmZW5naW5lLT5icmVhZGNydW1icy5mYWtlX2lycSwgamlmZmllcyArIDEp OworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgY2hhaW5fd2FrZXVwKHN0cnVjdCByYl9ub2RlICpy YiwgaW50IHByaW9yaXR5KQoreworCXJldHVybiByYiAmJiB0b193YWl0KHJiKS0+dGFzay0+cHJp byA8PSBwcmlvcml0eTsKK30KKwordm9pZCBpbnRlbF9lbmdpbmVfcmVtb3ZlX3dhaXQoc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAorCQkJICAgICAgc3RydWN0IGludGVsX3dhaXQgKndh aXQpCit7CisJc3RydWN0IGludGVsX2JyZWFkY3J1bWJzICpiID0gJmVuZ2luZS0+YnJlYWRjcnVt YnM7CisKKwkvKiBRdWljayBjaGVjayB0byBzZWUgaWYgdGhpcyB3YWl0ZXIgd2FzIGFscmVhZHkg ZGVjb3VwbGVkIGZyb20KKwkgKiB0aGUgdHJlZSBieSB0aGUgYm90dG9tLWhhbGYgdG8gYXZvaWQg Y29udGVudGlvbiBvbiB0aGUgc3BpbmxvY2sKKwkgKiBieSB0aGUgaGVyZC4KKwkgKi8KKwlpZiAo UkJfRU1QVFlfTk9ERSgmd2FpdC0+bm9kZSkpCisJCXJldHVybjsKKworCXNwaW5fbG9jaygmYi0+ bG9jayk7CisKKwlpZiAoYi0+Zmlyc3Rfd2FpdGVyID09IHdhaXQtPnRhc2spIHsKKwkJc3RydWN0 IHJiX25vZGUgKm5leHQ7CisJCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKKwkJY29uc3QgaW50 IHByaW9yaXR5ID0gd2FpdC0+dGFzay0+cHJpbzsKKworCQkvKiBXZSBhcmUgdGhlIGN1cnJlbnQg Ym90dG9tLWhhbGYuIEZpbmQgdGhlIG5leHQgY2FuZGlkYXRlLAorCQkgKiB0aGUgZmlyc3Qgd2Fp dGVyIGluIHRoZSBxdWV1ZSBvbiB0aGUgcmVtYWluaW5nIG9sZGVzdAorCQkgKiByZXF1ZXN0LiBB cyBtdWx0aXBsZSBzZXFub3MgbWF5IGNvbXBsZXRlIGluIHRoZSB0aW1lIGl0CisJCSAqIHRha2Vz IHVzIHRvIHdha2UgdXAgYW5kIGZpbmQgdGhlIG5leHQgd2FpdGVyLCB3ZSBoYXZlIHRvCisJCSAq IHdha2UgdXAgdGhhdCB3YWl0ZXIgZm9yIGl0IHRvIHBlcmZvcm0gaXRzIG93biBjb2hlcmVudAor CQkgKiBjb21wbGV0aW9uIGNoZWNrLgorCQkgKi8KKwkJbmV4dCA9IHJiX25leHQoJndhaXQtPm5v ZGUpOworCQlpZiAoY2hhaW5fd2FrZXVwKG5leHQsIHByaW9yaXR5KSkgeworCQkJLyogSWYgdGhl IG5leHQgd2FpdGVyIGlzIGFscmVhZHkgY29tcGxldGUsCisJCQkgKiB3YWtlIGl0IHVwIGFuZCBj b250aW51ZSBvbnRvIHRoZSBuZXh0IHdhaXRlci4gU28KKwkJCSAqIGlmIGhhdmUgYSBzbWFsbCBo ZXJkLCB0aGV5IHdpbGwgd2FrZSB1cCBpbiBwYXJhbGxlbAorCQkJICogcmF0aGVyIHRoYW4gc2Vx dWVudGlhbGx5LCB3aGljaCBzaG91bGQgcmVkdWNlCisJCQkgKiB0aGUgb3ZlcmFsbCBsYXRlbmN5 IGluIHdha2luZyBhbGwgdGhlIGNvbXBsZXRlZAorCQkJICogY2xpZW50cy4KKwkJCSAqCisJCQkg KiBIb3dldmVyLCB3YWtpbmcgdXAgYSBjaGFpbiBhZGRzIGV4dHJhIGxhdGVuY3kgdG8KKwkJCSAq IHRoZSBmaXJzdF93YWl0ZXIuIFRoaXMgaXMgdW5kZXNpcmFibGUgaWYgdGhhdAorCQkJICogd2Fp dGVyIGlzIGEgaGlnaCBwcmlvcml0eSB0YXNrLgorCQkJICovCisJCQl1MzIgc2Vxbm8gPSBlbmdp bmUtPmdldF9zZXFubyhlbmdpbmUpOworCQkJd2hpbGUgKGk5MTVfc2Vxbm9fcGFzc2VkKHNlcW5v LCB0b193YWl0KG5leHQpLT5zZXFubykpIHsKKwkJCQlzdHJ1Y3QgcmJfbm9kZSAqbiA9IHJiX25l eHQobmV4dCk7CisJCQkJX19pbnRlbF9icmVhZGNydW1ic19maW5pc2goYiwgdG9fd2FpdChuZXh0 KSk7CisJCQkJbmV4dCA9IG47CisJCQkJaWYgKCFjaGFpbl93YWtldXAobmV4dCwgcHJpb3JpdHkp KQorCQkJCQlicmVhazsKKwkJCX0KKwkJfQorCQl0YXNrID0gbmV4dCA/IHRvX3dhaXQobmV4dCkt PnRhc2sgOiBOVUxMOworCisJCXNtcF9zdG9yZV9tYihiLT5maXJzdF93YWl0ZXIsIHRhc2spOwor CQlpZiAodGFzaykgeworCQkJLyogSW4gb3VyIGhhc3RlLCB3ZSBtYXkgaGF2ZSBjb21wbGV0ZWQg dGhlIGZpcnN0IHdhaXRlcgorCQkJICogYmVmb3JlIHdlIGVuYWJsZWQgdGhlIGludGVycnVwdC4g RG8gc28gbm93IGFzIHdlCisJCQkgKiBoYXZlIGEgc2Vjb25kIHdhaXRlciBmb3IgYSBmdXR1cmUg c2Vxbm8uIEFmdGVyd2FyZHMsCisJCQkgKiB3ZSBoYXZlIHRvIHdha2UgdXAgdGhhdCB3YWl0ZXIg aW4gY2FzZSB3ZSBtaXNzZWQKKwkJCSAqIHRoZSBpbnRlcnJ1cHQsIG9yIGlmIHdlIGhhdmUgdG8g aGFuZGxlIGFuCisJCQkgKiBleGNlcHRpb24gcmF0aGVyIHRoYW4gYSBzZXFubyBjb21wbGV0aW9u LgorCQkJICovCisJCQlpZiAodG9fd2FpdChuZXh0KS0+c2Vxbm8gIT0gd2FpdC0+c2Vxbm8pCisJ CQkJX19pbnRlbF9icmVhZGNydW1ic19lbmFibGVfaXJxKGIpOworCQkJd2FrZV91cF9wcm9jZXNz KHRhc2spOworCQl9IGVsc2UKKwkJCV9faW50ZWxfYnJlYWRjcnVtYnNfZGlzYWJsZV9pcnEoYik7 CisJfQorCisJaWYgKCFSQl9FTVBUWV9OT0RFKCZ3YWl0LT5ub2RlKSkKKwkJcmJfZXJhc2UoJndh aXQtPm5vZGUsICZiLT53YWl0ZXJzKTsKKwlzcGluX3VubG9jaygmYi0+bG9jayk7Cit9CisKK3Zv aWQgaW50ZWxfZW5naW5lX2luaXRfYnJlYWRjcnVtYnMoc3RydWN0IGludGVsX2VuZ2luZV9jcyAq ZW5naW5lKQoreworCXN0cnVjdCBpbnRlbF9icmVhZGNydW1icyAqYiA9ICZlbmdpbmUtPmJyZWFk Y3J1bWJzOworCisJc3Bpbl9sb2NrX2luaXQoJmItPmxvY2spOworCXNldHVwX3RpbWVyKCZiLT5m YWtlX2lycSwKKwkJICAgIGludGVsX2JyZWFkY3J1bWJzX2Zha2VfaXJxLAorCQkgICAgKHVuc2ln bmVkIGxvbmcpZW5naW5lKTsKK30KKwordm9pZCBpbnRlbF9lbmdpbmVfZmluaV9icmVhZGNydW1i cyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCit7CisJc3RydWN0IGludGVsX2JyZWFk Y3J1bWJzICpiID0gJmVuZ2luZS0+YnJlYWRjcnVtYnM7CisKKwlkZWxfdGltZXJfc3luYygmYi0+ ZmFrZV9pcnEpOworfQorCit1bnNpZ25lZCBpbnRlbF9raWNrX3dhaXRlcnMoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmk5MTUpCit7CisJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOwor CXVuc2lnbmVkIG1hc2sgPSAwOworCisJLyogVG8gYXZvaWQgdGhlIHRhc2tfc3RydWN0IGRpc2Fw cGVhcmluZyBiZW5lYXRoIHVzIGFzIHdlIHdha2UgdXAKKwkgKiB0aGUgcHJvY2Vzcywgd2UgbXVz dCBmaXJzdCBpbnNwZWN0IHRoZSB0YXNrX3N0cnVjdC0+c3RhdGUgdW5kZXIgdGhlCisJICogUkNV IGxvY2ssIGkuZS4gYXMgd2UgY2FsbCB3YWtlX3VwX3Byb2Nlc3MoKSB3ZSBtdXN0IGJlIGhvbGRp bmcgdGhlCisJICogcmN1X3JlYWRfbG9jaygpLgorCSAqLworCXJjdV9yZWFkX2xvY2soKTsKKwlm b3JfZWFjaF9lbmdpbmUoZW5naW5lLCBpOTE1KQorCQlpZiAodW5saWtlbHkoaW50ZWxfZW5naW5l X3dha2V1cChlbmdpbmUpKSkKKwkJCW1hc2sgfD0gaW50ZWxfZW5naW5lX2ZsYWcoZW5naW5lKTsK KwlyY3VfcmVhZF91bmxvY2soKTsKKworCXJldHVybiBtYXNrOworfQpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9scmMuYwppbmRleCBkYjEwYzk2MWUwZjQuLjM0YzZjM2ZkNjI5NiAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfbHJjLmMKQEAgLTE4OTQsNiArMTg5NCw4IEBAIHZvaWQgaW50ZWxfbG9naWNhbF9yaW5n X2NsZWFudXAoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQogCWk5MTVfY21kX3BhcnNl cl9maW5pX3JpbmcoZW5naW5lKTsKIAlpOTE1X2dlbV9iYXRjaF9wb29sX2ZpbmkoJmVuZ2luZS0+ YmF0Y2hfcG9vbCk7CiAKKwlpbnRlbF9lbmdpbmVfZmluaV9icmVhZGNydW1icyhlbmdpbmUpOwor CiAJaWYgKGVuZ2luZS0+c3RhdHVzX3BhZ2Uub2JqKSB7CiAJCWk5MTVfZ2VtX29iamVjdF91bnBp bl9tYXAoZW5naW5lLT5zdGF0dXNfcGFnZS5vYmopOwogCQllbmdpbmUtPnN0YXR1c19wYWdlLm9i aiA9IE5VTEw7CkBAIC0xOTMxLDcgKzE5MzMsNyBAQCBsb2dpY2FsX3JpbmdfZGVmYXVsdF9pcnFz KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwgdW5zaWduZWQgc2hpZnQpCiB7CiAJZW5n aW5lLT5pcnFfZW5hYmxlX21hc2sgPSBHVF9SRU5ERVJfVVNFUl9JTlRFUlJVUFQgPDwgc2hpZnQ7 CiAJZW5naW5lLT5pcnFfa2VlcF9tYXNrID0gR1RfQ09OVEVYVF9TV0lUQ0hfSU5URVJSVVBUIDw8 IHNoaWZ0OwotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmVuZ2luZS0+aXJxX3F1ZXVlKTsKKwlpbnRl bF9lbmdpbmVfaW5pdF9icmVhZGNydW1icyhlbmdpbmUpOwogfQogCiBzdGF0aWMgaW50CmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmMgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmMKaW5kZXggOGQzNWEzOTc4ZjliLi45YmQz ZGQ3NTZkM2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZm ZXIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmMKQEAgLTIy NTgsNyArMjI1OCw3IEBAIHN0YXRpYyBpbnQgaW50ZWxfaW5pdF9yaW5nX2J1ZmZlcihzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2LAogCW1lbXNldChlbmdpbmUtPnNlbWFwaG9yZS5zeW5jX3NlcW5vLCAw LAogCSAgICAgICBzaXplb2YoZW5naW5lLT5zZW1hcGhvcmUuc3luY19zZXFubykpOwogCi0JaW5p dF93YWl0cXVldWVfaGVhZCgmZW5naW5lLT5pcnFfcXVldWUpOworCWludGVsX2VuZ2luZV9pbml0 X2JyZWFkY3J1bWJzKGVuZ2luZSk7CiAKIAlyaW5nYnVmID0gaW50ZWxfZW5naW5lX2NyZWF0ZV9y aW5nYnVmZmVyKGVuZ2luZSwgMzIgKiBQQUdFX1NJWkUpOwogCWlmIChJU19FUlIocmluZ2J1Zikp IHsKQEAgLTIzMjcsNiArMjMyNyw3IEBAIHZvaWQgaW50ZWxfY2xlYW51cF9lbmdpbmUoc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQogCiAJaTkxNV9jbWRfcGFyc2VyX2ZpbmlfcmluZyhl bmdpbmUpOwogCWk5MTVfZ2VtX2JhdGNoX3Bvb2xfZmluaSgmZW5naW5lLT5iYXRjaF9wb29sKTsK KwlpbnRlbF9lbmdpbmVfZmluaV9icmVhZGNydW1icyhlbmdpbmUpOwogCWVuZ2luZS0+aTkxNSA9 IE5VTEw7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Jpbmdi dWZmZXIuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuaAppbmRleCA5 MjllN2I0YWYyYTQuLjI4NTk3ZWE4ZmJmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfcmluZ2J1ZmZlci5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Jp bmdidWZmZXIuaApAQCAtMTYwLDYgKzE2MCwzMSBAQCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzIHsK IAlzdHJ1Y3QgaW50ZWxfcmluZ2J1ZmZlciAqYnVmZmVyOwogCXN0cnVjdCBsaXN0X2hlYWQgYnVm ZmVyczsKIAorCS8qIFJhdGhlciB0aGFuIGhhdmUgZXZlcnkgY2xpZW50IHdhaXQgdXBvbiBhbGwg dXNlciBpbnRlcnJ1cHRzLAorCSAqIHdpdGggdGhlIGhlcmQgd2FraW5nIGFmdGVyIGV2ZXJ5IGlu dGVycnVwdCBhbmQgZWFjaCBkb2luZyB0aGUKKwkgKiBoZWF2eXdlaWdodCBzZXFubyBkYW5jZSwg d2UgZGVsZWdhdGUgdGhlIHRhc2sgKG9mIGJlaW5nIHRoZQorCSAqIGJvdHRvbS1oYWxmIG9mIHRo ZSB1c2VyIGludGVycnVwdCkgdG8gdGhlIGZpcnN0IGNsaWVudC4gQWZ0ZXIKKwkgKiBldmVyeSBp bnRlcnJ1cHQsIHdlIHdha2UgdXAgb25lIGNsaWVudCwgd2hvIGRvZXMgdGhlIGhlYXZ5d2VpZ2h0 CisJICogY29oZXJlbnQgc2Vxbm8gcmVhZCBhbmQgZWl0aGVyIGdvZXMgYmFjayB0byBzbGVlcCAo aWYgaW5jb21wbGV0ZSksCisJICogb3Igd2FrZXMgdXAgYWxsIHRoZSBjb21wbGV0ZWQgY2xpZW50 cyBpbiBwYXJhbGxlbCwgYmVmb3JlIHRoZW4KKwkgKiB0cmFuc2ZlcnJpbmcgdGhlIGJvdHRvbS1o YWxmIHN0YXR1cyB0byB0aGUgbmV4dCBjbGllbnQgaW4gdGhlIHF1ZXVlLgorCSAqCisJICogQ29t cGFyZWQgdG8gd2Fsa2luZyB0aGUgZW50aXJlIGxpc3Qgb2Ygd2FpdGVycyBpbiBhIHNpbmdsZSBk ZWRpY2F0ZWQKKwkgKiBib3R0b20taGFsZiwgd2UgcmVkdWNlIHRoZSBsYXRlbmN5IG9mIHRoZSBm aXJzdCB3YWl0ZXIgYnkgYXZvaWRpbmcKKwkgKiBhIGNvbnRleHQgc3dpdGNoLCBidXQgaW5jdXIg YWRkaXRpb25hbCBjb2hlcmVudCBzZXFubyByZWFkcyB3aGVuCisJICogZm9sbG93aW5nIHRoZSBj aGFpbiBvZiByZXF1ZXN0IGJyZWFkY3J1bWJzLiBTaW5jZSBpdCBpcyBtb3N0IGxpa2VseQorCSAq IHRoYXQgd2UgaGF2ZSBhIHNpbmdsZSBjbGllbnQgd2FpdGluZyBvbiBlYWNoIHNlcW5vLCB0aGVu IHJlZHVjaW5nCisJICogdGhlIG92ZXJoZWFkIG9mIHdha2luZyB0aGF0IGNsaWVudCBpcyBtdWNo IHByZWZlcnJlZC4KKwkgKi8KKwlzdHJ1Y3QgaW50ZWxfYnJlYWRjcnVtYnMgeworCQlzcGlubG9j a190IGxvY2s7IC8qIHByb3RlY3RzIHRoZSBsaXN0cyBvZiByZXF1ZXN0cyAqLworCQlzdHJ1Y3Qg cmJfcm9vdCB3YWl0ZXJzOyAvKiBzb3J0ZWQgYnkgcmV0aXJlbWVudCwgcHJpb3JpdHkgKi8KKwkJ c3RydWN0IHRhc2tfc3RydWN0ICpmaXJzdF93YWl0ZXI7IC8qIGJoIGZvciB1c2VyIGludGVycnVw dHMgKi8KKwkJc3RydWN0IHRpbWVyX2xpc3QgZmFrZV9pcnE7IC8qIHVzZWQgYWZ0ZXIgYSBtaXNz ZWQgaW50ZXJydXB0ICovCisJCWJvb2wgaXJxX2VuYWJsZWQ7CisJCWJvb2wgcnBtX3dha2Vsb2Nr OworCX0gYnJlYWRjcnVtYnM7CisKIAkvKgogCSAqIEEgcG9vbCBvZiBvYmplY3RzIHRvIHVzZSBh cyBzaGFkb3cgY29waWVzIG9mIGNsaWVudCBiYXRjaCBidWZmZXJzCiAJICogd2hlbiB0aGUgY29t bWFuZCBwYXJzZXIgaXMgZW5hYmxlZC4gUHJldmVudHMgdGhlIGNsaWVudCBmcm9tCkBAIC0zMDgs OCArMzMzLDYgQEAgc3RydWN0IGludGVsX2VuZ2luZV9jcyB7CiAKIAlib29sIGdwdV9jYWNoZXNf ZGlydHk7CiAKLQl3YWl0X3F1ZXVlX2hlYWRfdCBpcnFfcXVldWU7Ci0KIAlzdHJ1Y3QgaW50ZWxf Y29udGV4dCAqbGFzdF9jb250ZXh0OwogCiAJc3RydWN0IGludGVsX3JpbmdfaGFuZ2NoZWNrIGhh bmdjaGVjazsKQEAgLTQ5NSw0ICs1MTgsNDQgQEAgc3RhdGljIGlubGluZSB1MzIgaW50ZWxfaHdz X3NlcW5vX2FkZHJlc3Moc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQogCXJldHVybiBl bmdpbmUtPnN0YXR1c19wYWdlLmdmeF9hZGRyICsgSTkxNV9HRU1fSFdTX0lOREVYX0FERFI7CiB9 CiAKKy8qIGludGVsX2JyZWFkY3J1bWJzLmMgLS0gdXNlciBpbnRlcnJ1cHQgYm90dG9tLWhhbGYg Zm9yIHdhaXRlcnMgKi8KK3N0cnVjdCBpbnRlbF93YWl0IHsKKwlzdHJ1Y3QgcmJfbm9kZSBub2Rl OworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKKwl1MzIgc2Vxbm87Cit9Owordm9pZCBpbnRl bF9lbmdpbmVfaW5pdF9icmVhZGNydW1icyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUp Oworc3RhdGljIGlubGluZSB2b2lkIGludGVsX3dhaXRfaW5pdChzdHJ1Y3QgaW50ZWxfd2FpdCAq d2FpdCwgdTMyIHNlcW5vKQoreworCXdhaXQtPnRhc2sgPSBjdXJyZW50OworCXdhaXQtPnNlcW5v ID0gc2Vxbm87Cit9CitzdGF0aWMgaW5saW5lIGJvb2wgaW50ZWxfd2FpdF9jb21wbGV0ZShjb25z dCBzdHJ1Y3QgaW50ZWxfd2FpdCAqd2FpdCkKK3sKKwlyZXR1cm4gUkJfRU1QVFlfTk9ERSgmd2Fp dC0+bm9kZSk7Cit9Citib29sIGludGVsX2VuZ2luZV9hZGRfd2FpdChzdHJ1Y3QgaW50ZWxfZW5n aW5lX2NzICplbmdpbmUsCisJCQkgICBzdHJ1Y3QgaW50ZWxfd2FpdCAqd2FpdCk7Cit2b2lkIGlu dGVsX2VuZ2luZV9yZW1vdmVfd2FpdChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCisJ CQkgICAgICBzdHJ1Y3QgaW50ZWxfd2FpdCAqd2FpdCk7CitzdGF0aWMgaW5saW5lIGJvb2wgaW50 ZWxfZW5naW5lX2hhc193YWl0ZXIoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQorewor CXJldHVybiBSRUFEX09OQ0UoZW5naW5lLT5icmVhZGNydW1icy5maXJzdF93YWl0ZXIpOworfQor c3RhdGljIGlubGluZSBib29sIGludGVsX2VuZ2luZV93YWtldXAoc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqZW5naW5lKQoreworCWJvb2wgd2FrZXVwID0gZmFsc2U7CisJc3RydWN0IHRhc2tfc3Ry dWN0ICp0YXNrID0gUkVBRF9PTkNFKGVuZ2luZS0+YnJlYWRjcnVtYnMuZmlyc3Rfd2FpdGVyKTsK KwkvKiBOb3RlIHRoYXQgZm9yIHRoaXMgbm90IHRvIGRhbmdlcm91c2x5IGNoYXNlIGEgZGFuZ2xp bmcgcG9pbnRlciwKKwkgKiB0aGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBlbnN1cmUgdGhh dCB0aGUgdGFzayByZW1haW4gdmFsaWQgZm9yCisJICogd2FrZV91cF9wcm9jZXNzKCkgaS5lLiB0 aGF0IHRoZSBSQ1UgZ3JhY2UgcGVyaW9kIGNhbm5vdCBleHBpcmUuCisJICovCisJaWYgKHRhc2sp CisJCXdha2V1cCA9IHdha2VfdXBfcHJvY2Vzcyh0YXNrKTsKKwlyZXR1cm4gd2FrZXVwOworfQor dm9pZCBpbnRlbF9lbmdpbmVfZW5hYmxlX2Zha2VfaXJxKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3Mg KmVuZ2luZSk7Cit2b2lkIGludGVsX2VuZ2luZV9maW5pX2JyZWFkY3J1bWJzKHN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKmVuZ2luZSk7Cit1bnNpZ25lZCBpbnRlbF9raWNrX3dhaXRlcnMoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpOworCiAjZW5kaWYgLyogX0lOVEVMX1JJTkdCVUZGRVJf SF8gKi8KLS0gCjIuOC4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3Rv cC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRl bC1nZngK