From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: [PATCH 06/21] drm/i915: Slaughter the thundering i915_wait_request herd Date: Fri, 3 Jun 2016 17:08:38 +0100 Message-ID: <1464970133-29859-7-git-send-email-chris@chris-wilson.co.uk> References: <1464970133-29859-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-x241.google.com (mail-wm0-x241.google.com [IPv6:2a00:1450:400c:c09::241]) by gabe.freedesktop.org (Postfix) with ESMTPS id C9A176EE09 for ; Fri, 3 Jun 2016 16:09:08 +0000 (UTC) Received: by mail-wm0-x241.google.com with SMTP id e3so436607wme.2 for ; Fri, 03 Jun 2016 09:09:08 -0700 (PDT) In-Reply-To: <1464970133-29859-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 Cc: "Goel, Akash" 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 MTVfZ2VtLmMgICAgICAgICAgfCAxNDEgKysrKystLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2dwdV9lcnJvci5jICAgIHwgIDU5ICsrKysrLQogZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9pcnEuYyAgICAgICAgICB8ICAyMCArLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf YnJlYWRjcnVtYnMuYyB8IDM1NCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuYyAgICAgICAgIHwgICA0ICstCiBkcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmMgIHwgICAzICstCiBkcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9yaW5nYnVmZmVyLmggIHwgIDY4ICsrKysrLQogMTAgZmlsZXMgY2hhbmdlZCwg NTk1IGluc2VydGlvbnMoKyksIDEwOSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9icmVhZGNydW1icy5jCgpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmls ZQppbmRleCA3YWVjZDMwOTYwNGMuLmYyMDAwNzQ0MDgyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUK QEAgLTM4LDYgKzM4LDcgQEAgaTkxNS15ICs9IGk5MTVfY21kX3BhcnNlci5vIFwKIAkgIGk5MTVf Z2VtX3VzZXJwdHIubyBcCiAJICBpOTE1X2dwdV9lcnJvci5vIFwKIAkgIGk5MTVfdHJhY2VfcG9p bnRzLm8gXAorCSAgaW50ZWxfYnJlYWRjcnVtYnMubyBcCiAJICBpbnRlbF9scmMubyBcCiAJICBp bnRlbF9tb2NzLm8gXAogCSAgaW50ZWxfcmluZ2J1ZmZlci5vIFwKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9kZWJ1Z2ZzLmMKaW5kZXggM2EwYmFiZTMyNjIxLi40ODY4MzUzOGI0ZTIgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZGVidWdmcy5jCkBAIC03ODgsMTAgKzc4OCwyMSBAQCBzdGF0aWMgaW50IGk5 MTVfZ2VtX3JlcXVlc3RfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpCiBzdGF0 aWMgdm9pZCBpOTE1X3Jpbmdfc2Vxbm9faW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sCiAJCQkJIHN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKIHsKKwlzdHJ1Y3QgaW50ZWxfYnJlYWRjcnVt YnMgKmIgPSAmZW5naW5lLT5icmVhZGNydW1iczsKKwlzdHJ1Y3QgcmJfbm9kZSAqcmI7CisKIAlz ZXFfcHJpbnRmKG0sICJDdXJyZW50IHNlcXVlbmNlICglcyk6ICV4XG4iLAogCQkgICBlbmdpbmUt Pm5hbWUsIGVuZ2luZS0+Z2V0X3NlcW5vKGVuZ2luZSkpOwogCXNlcV9wcmludGYobSwgIkN1cnJl bnQgdXNlciBpbnRlcnJ1cHRzICglcyk6ICV4XG4iLAogCQkgICBlbmdpbmUtPm5hbWUsIFJFQURf T05DRShlbmdpbmUtPnVzZXJfaW50ZXJydXB0cykpOworCisJc3Bpbl9sb2NrKCZiLT5sb2NrKTsK Kwlmb3IgKHJiID0gcmJfZmlyc3QoJmItPndhaXRlcnMpOyByYiAhPSBOVUxMOyByYiA9IHJiX25l eHQocmIpKSB7CisJCXN0cnVjdCBpbnRlbF93YWl0ICp3ID0gY29udGFpbmVyX29mKHJiLCB0eXBl b2YoKncpLCBub2RlKTsKKwkJc2VxX3ByaW50ZihtLCAiV2FpdGluZyAoJXMpOiAlcyBbJWRdIG9u ICV4XG4iLAorCQkJICAgZW5naW5lLT5uYW1lLCB3LT50YXNrLT5jb21tLCB3LT50YXNrLT5waWQs IHctPnNlcW5vKTsKKwl9CisJc3Bpbl91bmxvY2soJmItPmxvY2spOwogfQogCiBzdGF0aWMgaW50 IGk5MTVfZ2VtX3NlcW5vX2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQpAQCAt MTQyNiw2ICsxNDM3LDggQEAgc3RhdGljIGludCBpOTE1X2hhbmdjaGVja19pbmZvKHN0cnVjdCBz ZXFfZmlsZSAqbSwgdm9pZCAqdW51c2VkKQogCQkJICAgZW5naW5lLT5oYW5nY2hlY2suc2Vxbm8s CiAJCQkgICBzZXFub1tpZF0sCiAJCQkgICBlbmdpbmUtPmxhc3Rfc3VibWl0dGVkX3NlcW5vKTsK KwkJc2VxX3ByaW50ZihtLCAiXHR3YWl0ZXJzPyAlZFxuIiwKKwkJCSAgIGludGVsX2VuZ2luZV9o YXNfd2FpdGVyKGVuZ2luZSkpOwogCQlzZXFfcHJpbnRmKG0sICJcdHVzZXIgaW50ZXJydXB0cyA9 ICV4IFtjdXJyZW50ICV4XVxuIiwKIAkJCSAgIGVuZ2luZS0+aGFuZ2NoZWNrLnVzZXJfaW50ZXJy dXB0cywKIAkJCSAgIFJFQURfT05DRShlbmdpbmUtPnVzZXJfaW50ZXJydXB0cykpOwpAQCAtMjQx MSw3ICsyNDI0LDcgQEAgc3RhdGljIGludCBjb3VudF9pcnFfd2FpdGVycyhzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqaTkxNSkKIAlpbnQgY291bnQgPSAwOwogCiAJZm9yX2VhY2hfZW5naW5lKGVu Z2luZSwgaTkxNSkKLQkJY291bnQgKz0gZW5naW5lLT5pcnFfcmVmY291bnQ7CisJCWNvdW50ICs9 IGludGVsX2VuZ2luZV9oYXNfd2FpdGVyKGVuZ2luZSk7CiAKIAlyZXR1cm4gY291bnQ7CiB9CmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9kcnYuaAppbmRleCBlMzk5ZTk3OTY1ZTAuLjY4YjM4M2Q5ODQ1NyAxMDA2 NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAorKysgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2Rydi5oCkBAIC01MDMsNiArNTAzLDcgQEAgc3RydWN0IGRybV9pOTE1 X2Vycm9yX3N0YXRlIHsKIAkJYm9vbCB2YWxpZDsKIAkJLyogU29mdHdhcmUgdHJhY2tlZCBzdGF0 ZSAqLwogCQlib29sIHdhaXRpbmc7CisJCWludCBudW1fd2FpdGVyczsKIAkJaW50IGhhbmdjaGVj a19zY29yZTsKIAkJZW51bSBpbnRlbF9yaW5nX2hhbmdjaGVja19hY3Rpb24gaGFuZ2NoZWNrX2Fj dGlvbjsKIAkJaW50IG51bV9yZXF1ZXN0czsKQEAgLTU0OCw2ICs1NDksMTIgQEAgc3RydWN0IGRy bV9pOTE1X2Vycm9yX3N0YXRlIHsKIAkJCXUzMiB0YWlsOwogCQl9ICpyZXF1ZXN0czsKIAorCQlz dHJ1Y3QgZHJtX2k5MTVfZXJyb3Jfd2FpdGVyIHsKKwkJCWNoYXIgY29tbVtUQVNLX0NPTU1fTEVO XTsKKwkJCXBpZF90IHBpZDsKKwkJCXUzMiBzZXFubzsKKwkJfSAqd2FpdGVyczsKKwogCQlzdHJ1 Y3QgewogCQkJdTMyIGdmeF9tb2RlOwogCQkJdW5pb24gewpAQCAtMTQyMCw3ICsxNDI3LDcgQEAg c3RydWN0IGk5MTVfZ3B1X2Vycm9yIHsKICNkZWZpbmUgSTkxNV9TVE9QX1JJTkdfQUxMT1dfV0FS TiAgICAgICgxIDw8IDMwKQogCiAJLyogRm9yIG1pc3NlZCBpcnEvc2Vxbm8gc2ltdWxhdGlvbi4g Ki8KLQl1bnNpZ25lZCBpbnQgdGVzdF9pcnFfcmluZ3M7CisJdW5zaWduZWQgbG9uZyB0ZXN0X2ly cV9yaW5nczsKIH07CiAKIGVudW0gbW9kZXNldF9yZXN0b3JlIHsKQEAgLTMwMTMsNyArMzAyMCw2 IEBAIGlieF9kaXNhYmxlX2Rpc3BsYXlfaW50ZXJydXB0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiwgdWludDMyX3QgYml0cykKIAlpYnhfZGlzcGxheV9pbnRlcnJ1cHRfdXBkYXRl KGRldl9wcml2LCBiaXRzLCAwKTsKIH0KIAotCiAvKiBpOTE1X2dlbS5jICovCiBpbnQgaTkxNV9n ZW1fY3JlYXRlX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCQkg IHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKQEAgLTM5MDUsNCArMzkxMSwzMyBAQCBzdGF0 aWMgaW5saW5lIHZvaWQgaTkxNV90cmFjZV9pcnFfZ2V0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3Mg KmVuZ2luZSwKIAkJaTkxNV9nZW1fcmVxdWVzdF9hc3NpZ24oJmVuZ2luZS0+dHJhY2VfaXJxX3Jl cSwgcmVxKTsKIH0KIAorc3RhdGljIGlubGluZSBib29sIF9faTkxNV9yZXF1ZXN0X2lycV9jb21w bGV0ZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSkKK3sKKwkvKiBFbnN1cmUgb3Vy IHJlYWQgb2YgdGhlIHNlcW5vIGlzIGNvaGVyZW50IHNvIHRoYXQgd2UKKwkgKiBkbyBub3QgIm1p c3MgYW4gaW50ZXJydXB0IiAoaS5lLiBpZiB0aGlzIGlzIHRoZSBsYXN0CisJICogcmVxdWVzdCBh bmQgdGhlIHNlcW5vIHdyaXRlIGZyb20gdGhlIEdQVSBpcyBub3QgdmlzaWJsZQorCSAqIGJ5IHRo ZSB0aW1lIHRoZSBpbnRlcnJ1cHQgZmlyZXMsIHdlIHdpbGwgc2VlIHRoYXQgdGhlCisJICogcmVx dWVzdCBpcyBpbmNvbXBsZXRlIGFuZCBnbyBiYWNrIHRvIHNsZWVwIGF3YWl0aW5nCisJICogYW5v dGhlciBpbnRlcnJ1cHQgdGhhdCB3aWxsIG5ldmVyIGNvbWUuKQorCSAqCisJICogU3RyaWN0bHks IHdlIG9ubHkgbmVlZCB0byBkbyB0aGlzIG9uY2UgYWZ0ZXIgYW4gaW50ZXJydXB0LAorCSAqIGJ1 dCBpdCBpcyBlYXNpZXIgYW5kIHNhZmVyIHRvIGRvIGl0IGV2ZXJ5IHRpbWUgdGhlIHdhaXRlcgor CSAqIGlzIHdva2VuLgorCSAqLworCWlmIChpOTE1X2dlbV9yZXF1ZXN0X2NvbXBsZXRlZChyZXEs IGZhbHNlKSkKKwkJcmV0dXJuIHRydWU7CisKKwkvKiBXZSBuZWVkIHRvIGNoZWNrIHdoZXRoZXIg YW55IGdwdSByZXNldCBoYXBwZW5lZCBpbiBiZXR3ZWVuCisJICogdGhlIHJlcXVlc3QgYmVpbmcg c3VibWl0dGVkIGFuZCBub3cuIElmIGEgcmVzZXQgaGFzIG9jY3VycmVkLAorCSAqIHRoZSByZXF1 ZXN0IGlzIGVmZmVjdGl2ZWx5IGNvbXBsZXRlICh3ZSBlaXRoZXIgYXJlIGluIHRoZQorCSAqIHBy b2Nlc3Mgb2Ygb3IgaGF2ZSBkaXNjYXJkZWQgdGhlIHJlbmRlcmluZyBhbmQgY29tcGxldGVseQor CSAqIHJlc2V0IHRoZSBHUFUuIFRoZSByZXN1bHRzIG9mIHRoZSByZXF1ZXN0IGFyZSBsb3N0IGFu ZCB3ZQorCSAqIGFyZSBmcmVlIHRvIGNvbnRpbnVlIG9uIHdpdGggdGhlIG9yaWdpbmFsIG9wZXJh dGlvbi4KKwkgKi8KKwlpZiAocmVxLT5yZXNldF9jb3VudGVyICE9IGk5MTVfcmVzZXRfY291bnRl cigmcmVxLT5pOTE1LT5ncHVfZXJyb3IpKQorCQlyZXR1cm4gdHJ1ZTsKKworCXJldHVybiBmYWxz ZTsKK30KKwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dl bS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwppbmRleCBkZTRmYjM5MzEyYTQu LmQwOGVkYjNkMTZmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0u YworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCkBAIC0xMTIzLDE3ICsxMTIz LDYgQEAgaTkxNV9nZW1fY2hlY2tfd2VkZ2UodW5zaWduZWQgcmVzZXRfY291bnRlciwgYm9vbCBp bnRlcnJ1cHRpYmxlKQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBmYWtlX2lycSh1bnNp Z25lZCBsb25nIGRhdGEpCi17Ci0Jd2FrZV91cF9wcm9jZXNzKChzdHJ1Y3QgdGFza19zdHJ1Y3Qg KilkYXRhKTsKLX0KLQotc3RhdGljIGJvb2wgbWlzc2VkX2lycShzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYsCi0JCSAgICAgICBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUp Ci17Ci0JcmV0dXJuIHRlc3RfYml0KGVuZ2luZS0+aWQsICZkZXZfcHJpdi0+Z3B1X2Vycm9yLm1p c3NlZF9pcnFfcmluZ3MpOwotfQotCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb2NhbF9jbG9ja191 cyh1bnNpZ25lZCAqY3B1KQogewogCXVuc2lnbmVkIGxvbmcgdDsKQEAgLTExNjYsNyArMTE1NSw3 IEBAIHN0YXRpYyBib29sIGJ1c3l3YWl0X3N0b3AodW5zaWduZWQgbG9uZyB0aW1lb3V0LCB1bnNp Z25lZCBjcHUpCiAJcmV0dXJuIHRoaXNfY3B1ICE9IGNwdTsKIH0KIAotc3RhdGljIGludCBfX2k5 MTVfc3Bpbl9yZXF1ZXN0KHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxLCBpbnQgc3Rh dGUpCitzdGF0aWMgYm9vbCBfX2k5MTVfc3Bpbl9yZXF1ZXN0KHN0cnVjdCBkcm1faTkxNV9nZW1f cmVxdWVzdCAqcmVxLCBpbnQgc3RhdGUpCiB7CiAJdW5zaWduZWQgbG9uZyB0aW1lb3V0OwogCXVu c2lnbmVkIGNwdTsKQEAgLTExODEsMTcgKzExNzAsMTQgQEAgc3RhdGljIGludCBfX2k5MTVfc3Bp bl9yZXF1ZXN0KHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxLCBpbnQgc3RhdGUpCiAJ ICogdGFrZXMgdG8gc2xlZXAgb24gYSByZXF1ZXN0LCBvbiB0aGUgb3JkZXIgb2YgYSBtaWNyb3Nl Y29uZC4KIAkgKi8KIAotCWlmIChyZXEtPmVuZ2luZS0+aXJxX3JlZmNvdW50KQotCQlyZXR1cm4g LUVCVVNZOwotCiAJLyogT25seSBzcGluIGlmIHdlIGtub3cgdGhlIEdQVSBpcyBwcm9jZXNzaW5n IHRoaXMgcmVxdWVzdCAqLwogCWlmICghaTkxNV9nZW1fcmVxdWVzdF9zdGFydGVkKHJlcSwgdHJ1 ZSkpCi0JCXJldHVybiAtRUFHQUlOOworCQlyZXR1cm4gZmFsc2U7CiAKIAl0aW1lb3V0ID0gbG9j YWxfY2xvY2tfdXMoJmNwdSkgKyA1OwotCXdoaWxlICghbmVlZF9yZXNjaGVkKCkpIHsKKwlkbyB7 CiAJCWlmIChpOTE1X2dlbV9yZXF1ZXN0X2NvbXBsZXRlZChyZXEsIHRydWUpKQotCQkJcmV0dXJu IDA7CisJCQlyZXR1cm4gdHJ1ZTsKIAogCQlpZiAoc2lnbmFsX3BlbmRpbmdfc3RhdGUoc3RhdGUs IGN1cnJlbnQpKQogCQkJYnJlYWs7CkBAIC0xMjAwLDEyICsxMTg2LDkgQEAgc3RhdGljIGludCBf X2k5MTVfc3Bpbl9yZXF1ZXN0KHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxLCBpbnQg c3RhdGUpCiAJCQlicmVhazsKIAogCQljcHVfcmVsYXhfbG93bGF0ZW5jeSgpOwotCX0KLQotCWlm IChpOTE1X2dlbV9yZXF1ZXN0X2NvbXBsZXRlZChyZXEsIGZhbHNlKSkKLQkJcmV0dXJuIDA7CisJ fSB3aGlsZSAoIW5lZWRfcmVzY2hlZCgpKTsKIAotCXJldHVybiAtRUFHQUlOOworCXJldHVybiBm YWxzZTsKIH0KIAogLyoqCkBAIC0xMjI5LDE4ICsxMjEyLDE0IEBAIGludCBfX2k5MTVfd2FpdF9y ZXF1ZXN0KHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxLAogCQkJczY0ICp0aW1lb3V0 LAogCQkJc3RydWN0IGludGVsX3Jwc19jbGllbnQgKnJwcykKIHsKLQlzdHJ1Y3QgaW50ZWxfZW5n aW5lX2NzICplbmdpbmUgPSBpOTE1X2dlbV9yZXF1ZXN0X2dldF9lbmdpbmUocmVxKTsKLQlzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSByZXEtPmk5MTU7Ci0JY29uc3QgYm9vbCBp cnFfdGVzdF9pbl9wcm9ncmVzcyA9Ci0JCUFDQ0VTU19PTkNFKGRldl9wcml2LT5ncHVfZXJyb3Iu dGVzdF9pcnFfcmluZ3MpICYgaW50ZWxfZW5naW5lX2ZsYWcoZW5naW5lKTsKIAlpbnQgc3RhdGUg PSBpbnRlcnJ1cHRpYmxlID8gVEFTS19JTlRFUlJVUFRJQkxFIDogVEFTS19VTklOVEVSUlVQVElC TEU7CiAJREVGSU5FX1dBSVQocmVzZXQpOwotCURFRklORV9XQUlUKHdhaXQpOwotCXVuc2lnbmVk IGxvbmcgdGltZW91dF9leHBpcmU7CisJc3RydWN0IGludGVsX3dhaXQgd2FpdDsKKwl1bnNpZ25l ZCBsb25nIHRpbWVvdXRfcmVtYWluOwogCXM2NCBiZWZvcmUgPSAwOyAvKiBPbmx5IHRvIHNpbGVu Y2UgYSBjb21waWxlciB3YXJuaW5nLiAqLwotCWludCByZXQ7CisJaW50IHJldCA9IDA7CiAKLQlX QVJOKCFpbnRlbF9pcnFzX2VuYWJsZWQoZGV2X3ByaXYpLCAiSVJRcyBkaXNhYmxlZCIpOworCW1p Z2h0X3NsZWVwKCk7CiAKIAlpZiAobGlzdF9lbXB0eSgmcmVxLT5saXN0KSkKIAkJcmV0dXJuIDA7 CkBAIC0xMjQ4LDcgKzEyMjcsNyBAQCBpbnQgX19pOTE1X3dhaXRfcmVxdWVzdChzdHJ1Y3QgZHJt X2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSwKIAlpZiAoaTkxNV9nZW1fcmVxdWVzdF9jb21wbGV0ZWQo cmVxLCB0cnVlKSkKIAkJcmV0dXJuIDA7CiAKLQl0aW1lb3V0X2V4cGlyZSA9IDA7CisJdGltZW91 dF9yZW1haW4gPSBNQVhfU0NIRURVTEVfVElNRU9VVDsKIAlpZiAodGltZW91dCkgewogCQlpZiAo V0FSTl9PTigqdGltZW91dCA8IDApKQogCQkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMjU2LDcgKzEy MzUsNyBAQCBpbnQgX19pOTE1X3dhaXRfcmVxdWVzdChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVl c3QgKnJlcSwKIAkJaWYgKCp0aW1lb3V0ID09IDApCiAJCQlyZXR1cm4gLUVUSU1FOwogCi0JCXRp bWVvdXRfZXhwaXJlID0gamlmZmllcyArIG5zZWNzX3RvX2ppZmZpZXNfdGltZW91dCgqdGltZW91 dCk7CisJCXRpbWVvdXRfcmVtYWluID0gbnNlY3NfdG9famlmZmllc190aW1lb3V0KCp0aW1lb3V0 KTsKIAogCQkvKgogCQkgKiBSZWNvcmQgY3VycmVudCB0aW1lIGluIGNhc2UgaW50ZXJydXB0ZWQg Ynkgc2lnbmFsLCBvciB3ZWRnZWQuCkBAIC0xMjY0LDgxICsxMjQzLDU5IEBAIGludCBfX2k5MTVf d2FpdF9yZXF1ZXN0KHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxLAogCQliZWZvcmUg PSBrdGltZV9nZXRfcmF3X25zKCk7CiAJfQogCi0JaWYgKElOVEVMX0lORk8oZGV2X3ByaXYpLT5n ZW4gPj0gNikKLQkJZ2VuNl9ycHNfYm9vc3QoZGV2X3ByaXYsIHJwcywgcmVxLT5lbWl0dGVkX2pp ZmZpZXMpOwotCiAJdHJhY2VfaTkxNV9nZW1fcmVxdWVzdF93YWl0X2JlZ2luKHJlcSk7CiAKLQkv KiBPcHRpbWlzdGljIHNwaW4gZm9yIHRoZSBuZXh0IGppZmZpZSBiZWZvcmUgdG91Y2hpbmcgSVJR cyAqLwotCXJldCA9IF9faTkxNV9zcGluX3JlcXVlc3QocmVxLCBzdGF0ZSk7Ci0JaWYgKHJldCA9 PSAwKQotCQlnb3RvIG91dDsKLQotCWlmICghaXJxX3Rlc3RfaW5fcHJvZ3Jlc3MgJiYgV0FSTl9P TighZW5naW5lLT5pcnFfZ2V0KGVuZ2luZSkpKSB7Ci0JCXJldCA9IC1FTk9ERVY7Ci0JCWdvdG8g b3V0OwotCX0KLQotCWFkZF93YWl0X3F1ZXVlKCZkZXZfcHJpdi0+Z3B1X2Vycm9yLndhaXRfcXVl dWUsICZyZXNldCk7Ci0JZm9yICg7OykgewotCQlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKKwlp ZiAoSU5URUxfSU5GTyhyZXEtPmk5MTUpLT5nZW4gPj0gNikKKwkJZ2VuNl9ycHNfYm9vc3QocmVx LT5pOTE1LCBycHMsIHJlcS0+ZW1pdHRlZF9qaWZmaWVzKTsKIAotCQlwcmVwYXJlX3RvX3dhaXQo JmVuZ2luZS0+aXJxX3F1ZXVlLCAmd2FpdCwgc3RhdGUpOworCS8qIE9wdGltaXN0aWMgc3BpbiBm b3IgdGhlIG5leHQgfmppZmZpZSBiZWZvcmUgdG91Y2hpbmcgSVJRcyAqLworCWlmIChfX2k5MTVf c3Bpbl9yZXF1ZXN0KHJlcSwgc3RhdGUpKQorCQlnb3RvIGNvbXBsZXRlOwogCi0JCS8qIFdlIG5l ZWQgdG8gY2hlY2sgd2hldGhlciBhbnkgZ3B1IHJlc2V0IGhhcHBlbmVkIGluIGJldHdlZW4KLQkJ ICogdGhlIHJlcXVlc3QgYmVpbmcgc3VibWl0dGVkIGFuZCBub3cuIElmIGEgcmVzZXQgaGFzIG9j Y3VycmVkLAotCQkgKiB0aGUgcmVxdWVzdCBpcyBlZmZlY3RpdmVseSBjb21wbGV0ZSAod2UgZWl0 aGVyIGFyZSBpbiB0aGUKLQkJICogcHJvY2VzcyBvZiBvciBoYXZlIGRpc2NhcmRlZCB0aGUgcmVu ZGVyaW5nIGFuZCBjb21wbGV0ZWx5Ci0JCSAqIHJlc2V0IHRoZSBHUFUuIFRoZSByZXN1bHRzIG9m IHRoZSByZXF1ZXN0IGFyZSBsb3N0IGFuZCB3ZQotCQkgKiBhcmUgZnJlZSB0byBjb250aW51ZSBv biB3aXRoIHRoZSBvcmlnaW5hbCBvcGVyYXRpb24uCisJaW50ZWxfd2FpdF9pbml0KCZ3YWl0LCBy ZXEtPnNlcW5vKTsKKwlzZXRfY3VycmVudF9zdGF0ZShzdGF0ZSk7CisJaWYgKGludGVsX2VuZ2lu ZV9hZGRfd2FpdChyZXEtPmVuZ2luZSwgJndhaXQpKQorCQkvKiBJbiBvcmRlciB0byBjaGVjayB0 aGF0IHdlIGhhdmVuJ3QgbWlzc2VkIHRoZSBpbnRlcnJ1cHQKKwkJICogYXMgd2UgZW5hYmxlZCBp dCwgd2UgbmVlZCB0byBraWNrIG91cnNlbHZlcyB0byBkbyBhCisJCSAqIGNvaGVyZW50IGNoZWNr IG9uIHRoZSBzZXFubyBiZWZvcmUgd2Ugc2xlZXAuCiAJCSAqLwotCQlpZiAocmVxLT5yZXNldF9j b3VudGVyICE9IGk5MTVfcmVzZXRfY291bnRlcigmZGV2X3ByaXYtPmdwdV9lcnJvcikpIHsKLQkJ CXJldCA9IDA7Ci0JCQlicmVhazsKLQkJfQotCi0JCWlmIChpOTE1X2dlbV9yZXF1ZXN0X2NvbXBs ZXRlZChyZXEsIGZhbHNlKSkgewotCQkJcmV0ID0gMDsKLQkJCWJyZWFrOwotCQl9CisJCWdvdG8g d2FrZXVwOwogCisJYWRkX3dhaXRfcXVldWUoJnJlcS0+aTkxNS0+Z3B1X2Vycm9yLndhaXRfcXVl dWUsICZyZXNldCk7CisJZm9yICg7OykgewogCQlpZiAoc2lnbmFsX3BlbmRpbmdfc3RhdGUoc3Rh dGUsIGN1cnJlbnQpKSB7CiAJCQlyZXQgPSAtRVJFU1RBUlRTWVM7CiAJCQlicmVhazsKIAkJfQog Ci0JCWlmICh0aW1lb3V0ICYmIHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgdGltZW91dF9leHBpcmUp KSB7CisJCS8qIEVuc3VyZSB0aGF0IGV2ZW4gaWYgdGhlIEdQVSBoYW5ncywgd2UgZ2V0IHdva2Vu IHVwLiAqLworCQlpOTE1X3F1ZXVlX2hhbmdjaGVjayhyZXEtPmk5MTUpOworCisJCXRpbWVvdXRf cmVtYWluID0gaW9fc2NoZWR1bGVfdGltZW91dCh0aW1lb3V0X3JlbWFpbik7CisJCWlmICh0aW1l b3V0X3JlbWFpbiA9PSAwKSB7CiAJCQlyZXQgPSAtRVRJTUU7CiAJCQlicmVhazsKIAkJfQogCi0J CS8qIEVuc3VyZSB0aGF0IGV2ZW4gaWYgdGhlIEdQVSBoYW5ncywgd2UgZ2V0IHdva2VuIHVwLiAq LwotCQlpOTE1X3F1ZXVlX2hhbmdjaGVjayhkZXZfcHJpdik7Ci0KLQkJdGltZXIuZnVuY3Rpb24g PSBOVUxMOwotCQlpZiAodGltZW91dCB8fCBtaXNzZWRfaXJxKGRldl9wcml2LCBlbmdpbmUpKSB7 Ci0JCQl1bnNpZ25lZCBsb25nIGV4cGlyZTsKLQotCQkJc2V0dXBfdGltZXJfb25fc3RhY2soJnRp bWVyLCBmYWtlX2lycSwgKHVuc2lnbmVkIGxvbmcpY3VycmVudCk7Ci0JCQlleHBpcmUgPSBtaXNz ZWRfaXJxKGRldl9wcml2LCBlbmdpbmUpID8gamlmZmllcyArIDEgOiB0aW1lb3V0X2V4cGlyZTsK LQkJCW1vZF90aW1lcigmdGltZXIsIGV4cGlyZSk7Ci0JCX0KKwkJaWYgKGludGVsX3dhaXRfY29t cGxldGUoJndhaXQpKQorCQkJYnJlYWs7CiAKLQkJaW9fc2NoZWR1bGUoKTsKK3dha2V1cDoKKwkJ c2V0X2N1cnJlbnRfc3RhdGUoc3RhdGUpOwogCi0JCWlmICh0aW1lci5mdW5jdGlvbikgewotCQkJ ZGVsX3NpbmdsZXNob3RfdGltZXJfc3luYygmdGltZXIpOwotCQkJZGVzdHJveV90aW1lcl9vbl9z dGFjaygmdGltZXIpOwotCQl9CisJCS8qIENhcmVmdWxseSBjaGVjayBpZiB0aGUgcmVxdWVzdCBp cyBjb21wbGV0ZSwgZ2l2aW5nIHRpbWUKKwkJICogZm9yIHRoZSBzZXFubyB0byBiZSB2aXNpYmxl IGZvbGxvd2luZyB0aGUgaW50ZXJydXB0LgorCQkgKiBXZSBhbHNvIGhhdmUgdG8gY2hlY2sgaW4g Y2FzZSB3ZSBhcmUga2lja2VkIGJ5IHRoZSBHUFUKKwkJICogcmVzZXQgaW4gb3JkZXIgdG8gZHJv cCB0aGUgc3RydWN0X211dGV4LgorCQkgKi8KKwkJaWYgKF9faTkxNV9yZXF1ZXN0X2lycV9jb21w bGV0ZShyZXEpKQorCQkJYnJlYWs7CiAJfQotCXJlbW92ZV93YWl0X3F1ZXVlKCZkZXZfcHJpdi0+ Z3B1X2Vycm9yLndhaXRfcXVldWUsICZyZXNldCk7CisJcmVtb3ZlX3dhaXRfcXVldWUoJnJlcS0+ aTkxNS0+Z3B1X2Vycm9yLndhaXRfcXVldWUsICZyZXNldCk7CiAKLQlpZiAoIWlycV90ZXN0X2lu X3Byb2dyZXNzKQotCQllbmdpbmUtPmlycV9wdXQoZW5naW5lKTsKLQotCWZpbmlzaF93YWl0KCZl bmdpbmUtPmlycV9xdWV1ZSwgJndhaXQpOwotCi1vdXQ6CisJaW50ZWxfZW5naW5lX3JlbW92ZV93 YWl0KHJlcS0+ZW5naW5lLCAmd2FpdCk7CisJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5J TkcpOworY29tcGxldGU6CiAJdHJhY2VfaTkxNV9nZW1fcmVxdWVzdF93YWl0X2VuZChyZXEpOwog CiAJaWYgKHRpbWVvdXQpIHsKQEAgLTI1NDUsNiArMjUwMiwxMiBAQCBpOTE1X2dlbV9pbml0X3Nl cW5vKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgdTMyIHNlcW5vKQogCX0KIAlp OTE1X2dlbV9yZXRpcmVfcmVxdWVzdHMoZGV2X3ByaXYpOwogCisJLyogSWYgdGhlIHNlcW5vIHdy YXBzIGFyb3VuZCwgd2UgbmVlZCB0byBjbGVhciB0aGUgYnJlYWRjcnVtYiByYnRyZWUgKi8KKwlp ZiAoIWk5MTVfc2Vxbm9fcGFzc2VkKHNlcW5vLCBkZXZfcHJpdi0+bmV4dF9zZXFubykpIHsKKwkJ d2hpbGUgKGludGVsX2tpY2tfd2FpdGVycyhkZXZfcHJpdikpCisJCQl5aWVsZCgpOworCX0KKwog CS8qIEZpbmFsbHkgcmVzZXQgaHcgc3RhdGUgKi8KIAlmb3JfZWFjaF9lbmdpbmUoZW5naW5lLCBk ZXZfcHJpdikKIAkJaW50ZWxfcmluZ19pbml0X3NlcW5vKGVuZ2luZSwgc2Vxbm8pOwpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ncHVfZXJyb3IuYyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZ3B1X2Vycm9yLmMKaW5kZXggMzRmZjI0NTljZWVhLi44OTI0MWZmY2M2 NzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ3B1X2Vycm9yLmMKKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ncHVfZXJyb3IuYwpAQCAtNDYzLDYgKzQ2Mywx OCBAQCBpbnQgaTkxNV9lcnJvcl9zdGF0ZV90b19zdHIoc3RydWN0IGRybV9pOTE1X2Vycm9yX3N0 YXRlX2J1ZiAqbSwKIAkJCX0KIAkJfQogCisJCWlmIChlcnJvci0+cmluZ1tpXS5udW1fd2FpdGVy cykgeworCQkJZXJyX3ByaW50ZihtLCAiJXMgLS0tICVkIHdhaXRlcnNcbiIsCisJCQkJICAgZGV2 X3ByaXYtPmVuZ2luZVtpXS5uYW1lLAorCQkJCSAgIGVycm9yLT5yaW5nW2ldLm51bV93YWl0ZXJz KTsKKwkJCWZvciAoaiA9IDA7IGogPCBlcnJvci0+cmluZ1tpXS5udW1fd2FpdGVyczsgaisrKSB7 CisJCQkJZXJyX3ByaW50ZihtLCAiIHNlcW5vIDB4JTA4eCBmb3IgJXMgWyVkXVxuIiwKKwkJCQkJ ICAgZXJyb3ItPnJpbmdbaV0ud2FpdGVyc1tqXS5zZXFubywKKwkJCQkJICAgZXJyb3ItPnJpbmdb aV0ud2FpdGVyc1tqXS5jb21tLAorCQkJCQkgICBlcnJvci0+cmluZ1tpXS53YWl0ZXJzW2pdLnBp ZCk7CisJCQl9CisJCX0KKwogCQlpZiAoKG9iaiA9IGVycm9yLT5yaW5nW2ldLnJpbmdidWZmZXIp KSB7CiAJCQllcnJfcHJpbnRmKG0sICIlcyAtLS0gcmluZ2J1ZmZlciA9IDB4JTA4eFxuIiwKIAkJ CQkgICBkZXZfcHJpdi0+ZW5naW5lW2ldLm5hbWUsCkBAIC02MDUsOCArNjE3LDkgQEAgc3RhdGlj IHZvaWQgaTkxNV9lcnJvcl9zdGF0ZV9mcmVlKHN0cnVjdCBrcmVmICplcnJvcl9yZWYpCiAJCWk5 MTVfZXJyb3Jfb2JqZWN0X2ZyZWUoZXJyb3ItPnJpbmdbaV0ucmluZ2J1ZmZlcik7CiAJCWk5MTVf ZXJyb3Jfb2JqZWN0X2ZyZWUoZXJyb3ItPnJpbmdbaV0uaHdzX3BhZ2UpOwogCQlpOTE1X2Vycm9y X29iamVjdF9mcmVlKGVycm9yLT5yaW5nW2ldLmN0eCk7Ci0JCWtmcmVlKGVycm9yLT5yaW5nW2ld LnJlcXVlc3RzKTsKIAkJaTkxNV9lcnJvcl9vYmplY3RfZnJlZShlcnJvci0+cmluZ1tpXS53YV9j dHgpOworCQlrZnJlZShlcnJvci0+cmluZ1tpXS5yZXF1ZXN0cyk7CisJCWtmcmVlKGVycm9yLT5y aW5nW2ldLndhaXRlcnMpOwogCX0KIAogCWk5MTVfZXJyb3Jfb2JqZWN0X2ZyZWUoZXJyb3ItPnNl bWFwaG9yZV9vYmopOwpAQCAtODkyLDYgKzkwNSw0NyBAQCBzdGF0aWMgdm9pZCBnZW42X3JlY29y ZF9zZW1hcGhvcmVfc3RhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAogCX0K IH0KIAorc3RhdGljIHZvaWQgZW5naW5lX3JlY29yZF93YWl0ZXJzKHN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKmVuZ2luZSwKKwkJCQkgIHN0cnVjdCBkcm1faTkxNV9lcnJvcl9yaW5nICplcmluZykK K3sKKwlzdHJ1Y3QgaW50ZWxfYnJlYWRjcnVtYnMgKmIgPSAmZW5naW5lLT5icmVhZGNydW1iczsK KwlzdHJ1Y3QgZHJtX2k5MTVfZXJyb3Jfd2FpdGVyICp3YWl0ZXI7CisJc3RydWN0IHJiX25vZGUg KnJiOworCWludCBjb3VudDsKKworCWVyaW5nLT5udW1fd2FpdGVycyA9IDA7CisJZXJpbmctPndh aXRlcnMgPSBOVUxMOworCisJc3Bpbl9sb2NrKCZiLT5sb2NrKTsKKwljb3VudCA9IDA7CisJZm9y IChyYiA9IHJiX2ZpcnN0KCZiLT53YWl0ZXJzKTsgcmIgIT0gTlVMTDsgcmIgPSByYl9uZXh0KHJi KSkKKwkJY291bnQrKzsKKwlzcGluX3VubG9jaygmYi0+bG9jayk7CisKKwl3YWl0ZXIgPSBOVUxM OworCWlmIChjb3VudCkKKwkJd2FpdGVyID0ga21hbGxvYyhjb3VudCpzaXplb2Yoc3RydWN0IGRy bV9pOTE1X2Vycm9yX3dhaXRlciksCisJCQkJIEdGUF9BVE9NSUMpOworCWlmICghd2FpdGVyKQor CQlyZXR1cm47CisKKwllcmluZy0+d2FpdGVycyA9IHdhaXRlcjsKKworCXNwaW5fbG9jaygmYi0+ bG9jayk7CisJZm9yIChyYiA9IHJiX2ZpcnN0KCZiLT53YWl0ZXJzKTsgcmIgIT0gTlVMTDsgcmIg PSByYl9uZXh0KHJiKSkgeworCQlzdHJ1Y3QgaW50ZWxfd2FpdCAqdyA9IGNvbnRhaW5lcl9vZihy YiwgdHlwZW9mKCp3KSwgbm9kZSk7CisKKwkJc3RyY3B5KHdhaXRlci0+Y29tbSwgdy0+dGFzay0+ Y29tbSk7CisJCXdhaXRlci0+cGlkID0gdy0+dGFzay0+cGlkOworCQl3YWl0ZXItPnNlcW5vID0g dy0+c2Vxbm87CisJCXdhaXRlcisrOworCisJCWlmICgrK2VyaW5nLT5udW1fd2FpdGVycyA9PSBj b3VudCkKKwkJCWJyZWFrOworCX0KKwlzcGluX3VubG9jaygmYi0+bG9jayk7Cit9CisKIHN0YXRp YyB2b2lkIGk5MTVfcmVjb3JkX3Jpbmdfc3RhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2LAogCQkJCSAgIHN0cnVjdCBkcm1faTkxNV9lcnJvcl9zdGF0ZSAqZXJyb3IsCiAJCQkJ ICAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLApAQCAtOTI2LDcgKzk4MCw3IEBAIHN0 YXRpYyB2b2lkIGk5MTVfcmVjb3JkX3Jpbmdfc3RhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2LAogCQllcmluZy0+aW5zdGRvbmUgPSBJOTE1X1JFQUQoR0VOMl9JTlNURE9ORSk7 CiAJfQogCi0JZXJpbmctPndhaXRpbmcgPSB3YWl0cXVldWVfYWN0aXZlKCZlbmdpbmUtPmlycV9x dWV1ZSk7CisJZXJpbmctPndhaXRpbmcgPSBpbnRlbF9lbmdpbmVfaGFzX3dhaXRlcihlbmdpbmUp OwogCWVyaW5nLT5pbnN0cG0gPSBJOTE1X1JFQUQoUklOR19JTlNUUE0oZW5naW5lLT5tbWlvX2Jh c2UpKTsKIAllcmluZy0+YWN0aGQgPSBpbnRlbF9yaW5nX2dldF9hY3RpdmVfaGVhZChlbmdpbmUp OwogCWVyaW5nLT5zZXFubyA9IGVuZ2luZS0+Z2V0X3NlcW5vKGVuZ2luZSk7CkBAIC0xMDMyLDYg KzEwODYsNyBAQCBzdGF0aWMgdm9pZCBpOTE1X2dlbV9yZWNvcmRfcmluZ3Moc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2LAogCQllcnJvci0+cmluZ1tpXS52YWxpZCA9IHRydWU7CiAK IAkJaTkxNV9yZWNvcmRfcmluZ19zdGF0ZShkZXZfcHJpdiwgZXJyb3IsIGVuZ2luZSwgJmVycm9y LT5yaW5nW2ldKTsKKwkJZW5naW5lX3JlY29yZF93YWl0ZXJzKGVuZ2luZSwgJmVycm9yLT5yaW5n W2ldKTsKIAogCQlyZXF1ZXN0ID0gaTkxNV9nZW1fZmluZF9hY3RpdmVfcmVxdWVzdChlbmdpbmUp OwogCQlpZiAocmVxdWVzdCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9pcnEuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMKaW5kZXggMzAxMjdiOTRm MjZlLi4yYTczNmY0YTBmZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf aXJxLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYwpAQCAtOTc2LDEzICs5 NzYsMTAgQEAgc3RhdGljIHZvaWQgaXJvbmxha2VfcnBzX2NoYW5nZV9pcnFfaGFuZGxlcihzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiAKIHN0YXRpYyB2b2lkIG5vdGlmeV9yaW5n KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKIHsKLQlpZiAoIWludGVsX2VuZ2luZV9p bml0aWFsaXplZChlbmdpbmUpKQotCQlyZXR1cm47Ci0KLQl0cmFjZV9pOTE1X2dlbV9yZXF1ZXN0 X25vdGlmeShlbmdpbmUpOwotCWVuZ2luZS0+dXNlcl9pbnRlcnJ1cHRzKys7Ci0KLQl3YWtlX3Vw X2FsbCgmZW5naW5lLT5pcnFfcXVldWUpOworCWlmIChpbnRlbF9lbmdpbmVfd2FrZXVwKGVuZ2lu ZSkpIHsKKwkJdHJhY2VfaTkxNV9nZW1fcmVxdWVzdF9ub3RpZnkoZW5naW5lKTsKKwkJZW5naW5l LT51c2VyX2ludGVycnVwdHMrKzsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIHZsdl9jMF9yZWFkKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKQEAgLTEwNjMsNyArMTA2MCw3IEBAIHN0 YXRpYyBib29sIGFueV93YWl0ZXJzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikK IAlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7CiAKIAlmb3JfZWFjaF9lbmdpbmUoZW5n aW5lLCBkZXZfcHJpdikKLQkJaWYgKGVuZ2luZS0+aXJxX3JlZmNvdW50KQorCQlpZiAoaW50ZWxf ZW5naW5lX2hhc193YWl0ZXIoZW5naW5lKSkKIAkJCXJldHVybiB0cnVlOwogCiAJcmV0dXJuIGZh bHNlOwpAQCAtMzA3MywxMyArMzA3MCwxNCBAQCBzdGF0aWMgdW5zaWduZWQga2lja193YWl0ZXJz KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKIAogCWlmIChlbmdpbmUtPmhhbmdjaGVj ay51c2VyX2ludGVycnVwdHMgPT0gdXNlcl9pbnRlcnJ1cHRzICYmCiAJICAgICF0ZXN0X2FuZF9z ZXRfYml0KGVuZ2luZS0+aWQsICZpOTE1LT5ncHVfZXJyb3IubWlzc2VkX2lycV9yaW5ncykpIHsK LQkJaWYgKCEoaTkxNS0+Z3B1X2Vycm9yLnRlc3RfaXJxX3JpbmdzICYgaW50ZWxfZW5naW5lX2Zs YWcoZW5naW5lKSkpCisJCWlmICghdGVzdF9iaXQoZW5naW5lLT5pZCwgJmk5MTUtPmdwdV9lcnJv ci50ZXN0X2lycV9yaW5ncykpCiAJCQlEUk1fRVJST1IoIkhhbmdjaGVjayB0aW1lciBlbGFwc2Vk Li4uICVzIGlkbGVcbiIsCiAJCQkJICBlbmdpbmUtPm5hbWUpOwogCQllbHNlCiAJCQlEUk1fSU5G TygiRmFrZSBtaXNzZWQgaXJxIG9uICVzXG4iLAogCQkJCSBlbmdpbmUtPm5hbWUpOwotCQl3YWtl X3VwX2FsbCgmZW5naW5lLT5pcnFfcXVldWUpOworCisJCWludGVsX2VuZ2luZV9lbmFibGVfZmFr ZV9pcnEoZW5naW5lKTsKIAl9CiAKIAlyZXR1cm4gdXNlcl9pbnRlcnJ1cHRzOwpAQCAtMzEyMyw3 ICszMTIxLDcgQEAgc3RhdGljIHZvaWQgaTkxNV9oYW5nY2hlY2tfZWxhcHNlZChzdHJ1Y3Qgd29y a19zdHJ1Y3QgKndvcmspCiAJaW50ZWxfdW5jb3JlX2FybV91bmNsYWltZWRfbW1pb19kZXRlY3Rp b24oZGV2X3ByaXYpOwogCiAJZm9yX2VhY2hfZW5naW5lX2lkKGVuZ2luZSwgZGV2X3ByaXYsIGlk KSB7Ci0JCWJvb2wgYnVzeSA9IHdhaXRxdWV1ZV9hY3RpdmUoJmVuZ2luZS0+aXJxX3F1ZXVlKTsK KwkJYm9vbCBidXN5ID0gaW50ZWxfZW5naW5lX2hhc193YWl0ZXIoZW5naW5lKTsKIAkJdTY0IGFj dGhkOwogCQl1MzIgc2Vxbm87CiAJCXVuc2lnbmVkIHVzZXJfaW50ZXJydXB0czsKZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2JyZWFkY3J1bWJzLmMgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9icmVhZGNydW1icy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwMC4uZTAxMjFmNzI3OTM4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfYnJlYWRjcnVtYnMuYwpAQCAtMCwwICsxLDM1NCBAQAorLyoKKyAq IENvcHlyaWdodCDCqSAyMDE1IEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBp cyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5n IGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9u IGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRo b3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmln aHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3Vi bGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBw ZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRv IHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJv dmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5n IHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMg b3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUg U09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lO RCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBU SEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAq IFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlN LCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9G IENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9S IElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFM SU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqLworCisjaW5jbHVkZSAiaTkxNV9kcnYu aCIKKworc3RhdGljIHZvaWQgaW50ZWxfYnJlYWRjcnVtYnNfZmFrZV9pcnEodW5zaWduZWQgbG9u ZyBkYXRhKQoreworCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSA9IChzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICopZGF0YTsKKworCS8qCisJICogVGhlIHRpbWVyIHBlcnNpc3RzIGluIGNh c2Ugd2UgY2Fubm90IGVuYWJsZSBpbnRlcnJ1cHRzLAorCSAqIG9yIGlmIHdlIGhhdmUgcHJldmlv dXNseSBzZWVuIHNlcW5vL2ludGVycnVwdCBpbmNvaGVyZW5jeQorCSAqICgibWlzc2VkIGludGVy cnVwdCIgc3luZHJvbWUpLiBIZXJlIHRoZSB3b3JrZXIgd2lsbCB3YWtlIHVwCisJICogZXZlcnkg amlmZmllIGluIG9yZGVyIHRvIGtpY2sgdGhlIG9sZGVzdCB3YWl0ZXIgdG8gZG8gdGhlCisJICog Y29oZXJlbnQgc2Vxbm8gY2hlY2suCisJICovCisJcmN1X3JlYWRfbG9jaygpOworCWlmIChpbnRl bF9lbmdpbmVfd2FrZXVwKGVuZ2luZSkpCisJCW1vZF90aW1lcigmZW5naW5lLT5icmVhZGNydW1i cy5mYWtlX2lycSwgamlmZmllcyArIDEpOworCXJjdV9yZWFkX3VubG9jaygpOworfQorCitzdGF0 aWMgdm9pZCBpcnFfZW5hYmxlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKK3sKKwlX QVJOX09OKCFlbmdpbmUtPmlycV9nZXQoZW5naW5lKSk7Cit9CisKK3N0YXRpYyB2b2lkIGlycV9k aXNhYmxlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKK3sKKwllbmdpbmUtPmlycV9w dXQoZW5naW5lKTsKK30KKworc3RhdGljIGJvb2wgX19pbnRlbF9icmVhZGNydW1ic19lbmFibGVf aXJxKHN0cnVjdCBpbnRlbF9icmVhZGNydW1icyAqYikKK3sKKwlzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICplbmdpbmUgPQorCQljb250YWluZXJfb2YoYiwgc3RydWN0IGludGVsX2VuZ2luZV9jcywg YnJlYWRjcnVtYnMpOworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gZW5naW5lLT5p OTE1OworCWJvb2wgaXJxX3Bvc3RlZCA9IGZhbHNlOworCisJYXNzZXJ0X3NwaW5fbG9ja2VkKCZi LT5sb2NrKTsKKwlpZiAoYi0+cnBtX3dha2Vsb2NrKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKiBT aW5jZSB3ZSBhcmUgd2FpdGluZyBvbiBhIHJlcXVlc3QsIHRoZSBHUFUgc2hvdWxkIGJlIGJ1c3kK KwkgKiBhbmQgc2hvdWxkIGhhdmUgaXRzIG93biBycG0gcmVmZXJlbmNlLiBGb3IgY29tcGxldGVu ZXNzLAorCSAqIHJlY29yZCBhbiBycG0gcmVmZXJlbmNlIGZvciBvdXJzZWx2ZXMgdG8gY292ZXIg dGhlCisJICogaW50ZXJydXB0IHdlIHVubWFzay4KKwkgKi8KKwlpbnRlbF9ydW50aW1lX3BtX2dl dF9ub3Jlc3VtZShpOTE1KTsKKwliLT5ycG1fd2FrZWxvY2sgPSB0cnVlOworCisJLyogTm8gaW50 ZXJydXB0cz8gS2ljayB0aGUgd2FpdGVyIGV2ZXJ5IGppZmZpZSEgKi8KKwlpZiAoaW50ZWxfaXJx c19lbmFibGVkKGk5MTUpKSB7CisJCWlmICghdGVzdF9iaXQoZW5naW5lLT5pZCwgJmk5MTUtPmdw dV9lcnJvci50ZXN0X2lycV9yaW5ncykpIHsKKwkJCWlycV9lbmFibGUoZW5naW5lKTsKKwkJCWly cV9wb3N0ZWQgPSB0cnVlOworCQl9CisJCWItPmlycV9lbmFibGVkID0gdHJ1ZTsKKwl9CisKKwlp ZiAoIWItPmlycV9lbmFibGVkIHx8CisJICAgIHRlc3RfYml0KGVuZ2luZS0+aWQsICZpOTE1LT5n cHVfZXJyb3IubWlzc2VkX2lycV9yaW5ncykpCisJCW1vZF90aW1lcigmYi0+ZmFrZV9pcnEsIGpp ZmZpZXMgKyAxKTsKKworCXJldHVybiBpcnFfcG9zdGVkOworfQorCitzdGF0aWMgdm9pZCBfX2lu dGVsX2JyZWFkY3J1bWJzX2Rpc2FibGVfaXJxKHN0cnVjdCBpbnRlbF9icmVhZGNydW1icyAqYikK K3sKKwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUgPQorCQljb250YWluZXJfb2YoYiwg c3RydWN0IGludGVsX2VuZ2luZV9jcywgYnJlYWRjcnVtYnMpOworCisJYXNzZXJ0X3NwaW5fbG9j a2VkKCZiLT5sb2NrKTsKKwlpZiAoIWItPnJwbV93YWtlbG9jaykKKwkJcmV0dXJuOworCisJaWYg KGItPmlycV9lbmFibGVkKSB7CisJCWlycV9kaXNhYmxlKGVuZ2luZSk7CisJCWItPmlycV9lbmFi bGVkID0gZmFsc2U7CisJfQorCisJaW50ZWxfcnVudGltZV9wbV9wdXQoZW5naW5lLT5pOTE1KTsK KwliLT5ycG1fd2FrZWxvY2sgPSBmYWxzZTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgaW50 ZWxfd2FpdCAqdG9fd2FpdChzdHJ1Y3QgcmJfbm9kZSAqbm9kZSkKK3sKKwlyZXR1cm4gY29udGFp bmVyX29mKG5vZGUsIHN0cnVjdCBpbnRlbF93YWl0LCBub2RlKTsKK30KKworc3RhdGljIGlubGlu ZSB2b2lkIF9faW50ZWxfYnJlYWRjcnVtYnNfZmluaXNoKHN0cnVjdCBpbnRlbF9icmVhZGNydW1i cyAqYiwKKwkJCQkJICAgICAgc3RydWN0IGludGVsX3dhaXQgKndhaXQpCit7CisJYXNzZXJ0X3Nw aW5fbG9ja2VkKCZiLT5sb2NrKTsKKworCS8qIFRoaXMgcmVxdWVzdCBpcyBjb21wbGV0ZWQsIHNv IHJlbW92ZSBpdCBmcm9tIHRoZSB0cmVlLCBtYXJrIGl0IGFzCisJICogY29tcGxldGUsIGFuZCAq dGhlbiogd2FrZSB1cCB0aGUgYXNzb2NpYXRlZCB0YXNrLgorCSAqLworCXJiX2VyYXNlKCZ3YWl0 LT5ub2RlLCAmYi0+d2FpdGVycyk7CisJUkJfQ0xFQVJfTk9ERSgmd2FpdC0+bm9kZSk7CisKKwl3 YWtlX3VwX3Byb2Nlc3Mod2FpdC0+dGFzayk7IC8qIGltcGxpY2l0IHNtcF93bWIoKSAqLworfQor Citib29sIGludGVsX2VuZ2luZV9hZGRfd2FpdChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdp bmUsCisJCQkgICBzdHJ1Y3QgaW50ZWxfd2FpdCAqd2FpdCkKK3sKKwlzdHJ1Y3QgaW50ZWxfYnJl YWRjcnVtYnMgKmIgPSAmZW5naW5lLT5icmVhZGNydW1iczsKKwlzdHJ1Y3QgcmJfbm9kZSAqKnAs ICpwYXJlbnQsICpjb21wbGV0ZWQ7CisJYm9vbCBmaXJzdDsKKwl1MzIgc2Vxbm87CisKKwlzcGlu X2xvY2soJmItPmxvY2spOworCisJLyogSW5zZXJ0IHRoZSByZXF1ZXN0IGludG8gdGhlIHJldGly ZW1lbnQgb3JkZXJlZCBsaXN0CisJICogb2Ygd2FpdGVycyBieSB3YWxraW5nIHRoZSByYnRyZWUu IElmIHdlIGFyZSB0aGUgb2xkZXN0CisJICogc2Vxbm8gaW4gdGhlIHRyZWUgKHRoZSBmaXJzdCB0 byBiZSByZXRpcmVkKSwgdGhlbgorCSAqIHNldCBvdXJzZWx2ZXMgYXMgdGhlIGJvdHRvbS1oYWxm LgorCSAqCisJICogQXMgd2UgZGVzY2VuZCB0aGUgdHJlZSwgcHJ1bmUgY29tcGxldGVkIGJyYW5j aGVzIHNpbmNlIHdlIGhvbGQgdGhlCisJICogc3BpbmxvY2sgd2Uga25vdyB0aGF0IHRoZSBmaXJz dF93YWl0ZXIgbXVzdCBiZSBkZWxheWVkIGFuZCBjYW4KKwkgKiByZWR1Y2Ugc29tZSBvZiB0aGUg c2VxdWVudGlhbCB3YWtlIHVwIGxhdGVuY3kgaWYgd2UgdGFrZSBhY3Rpb24KKwkgKiBvdXJzZWx2 ZXMgYW5kIHdha2UgdXAgdGhlIGNvbXBsZXRlZCB0YXNrcyBpbiBwYXJhbGxlbC4gQWxzbywgYnkK KwkgKiByZW1vdmluZyBzdGFsZSBlbGVtZW50cyBpbiB0aGUgdHJlZSwgd2UgbWF5IGJlIGFibGUg dG8gcmVkdWNlIHRoZQorCSAqIHBpbmctcG9uZyBiZXR3ZWVuIHRoZSBvbGQgYm90dG9tLWhhbGYg YW5kIG91cnNlbHZlcyBhcyBmaXJzdC13YWl0ZXIuCisJICovCisJZmlyc3QgPSB0cnVlOworCXBh cmVudCA9IE5VTEw7CisJY29tcGxldGVkID0gTlVMTDsKKwlzZXFubyA9IGVuZ2luZS0+Z2V0X3Nl cW5vKGVuZ2luZSk7CisKKwlwID0gJmItPndhaXRlcnMucmJfbm9kZTsKKwl3aGlsZSAoKnApIHsK KwkJcGFyZW50ID0gKnA7CisJCWlmICh3YWl0LT5zZXFubyA9PSB0b193YWl0KHBhcmVudCktPnNl cW5vKSB7CisJCQkvKiBXZSBoYXZlIG11bHRpcGxlIHdhaXRlcnMgb24gdGhlIHNhbWUgc2Vxbm8s IHNlbGVjdAorCQkJICogdGhlIGhpZ2hlc3QgcHJpb3JpdHkgdGFzayAodGhhdCB3aXRoIHRoZSBz bWFsbGVzdAorCQkJICogdGFzay0+cHJpbykgdG8gc2VydmUgYXMgdGhlIGJvdHRvbS1oYWxmIGZv ciB0aGlzCisJCQkgKiBncm91cC4KKwkJCSAqLworCQkJaWYgKHdhaXQtPnRhc2stPnByaW8gPiB0 b193YWl0KHBhcmVudCktPnRhc2stPnByaW8pIHsKKwkJCQlwID0gJnBhcmVudC0+cmJfcmlnaHQ7 CisJCQkJZmlyc3QgPSBmYWxzZTsKKwkJCX0gZWxzZQorCQkJCXAgPSAmcGFyZW50LT5yYl9sZWZ0 OworCQl9IGVsc2UgaWYgKGk5MTVfc2Vxbm9fcGFzc2VkKHdhaXQtPnNlcW5vLAorCQkJCQkgICAg IHRvX3dhaXQocGFyZW50KS0+c2Vxbm8pKSB7CisJCQlwID0gJnBhcmVudC0+cmJfcmlnaHQ7CisJ CQlpZiAoaTkxNV9zZXFub19wYXNzZWQoc2Vxbm8sIHRvX3dhaXQocGFyZW50KS0+c2Vxbm8pKQor CQkJCWNvbXBsZXRlZCA9IHBhcmVudDsKKwkJCWVsc2UKKwkJCQlmaXJzdCA9IGZhbHNlOworCQl9 IGVsc2UKKwkJCXAgPSAmcGFyZW50LT5yYl9sZWZ0OworCX0KKwlyYl9saW5rX25vZGUoJndhaXQt Pm5vZGUsIHBhcmVudCwgcCk7CisJcmJfaW5zZXJ0X2NvbG9yKCZ3YWl0LT5ub2RlLCAmYi0+d2Fp dGVycyk7CisJR0VNX0JVR19PTighZmlyc3QgJiYgIWItPnRhc2tsZXQpOworCisJaWYgKGNvbXBs ZXRlZCkgeworCQlzdHJ1Y3QgcmJfbm9kZSAqbmV4dCA9IHJiX25leHQoY29tcGxldGVkKTsKKwor CQlHRU1fQlVHX09OKCFuZXh0ICYmICFmaXJzdCk7CisJCWlmIChuZXh0ICYmIG5leHQgIT0gJndh aXQtPm5vZGUpIHsKKwkJCUdFTV9CVUdfT04oZmlyc3QpOworCQkJYi0+Zmlyc3Rfd2FpdCA9IHRv X3dhaXQobmV4dCk7CisJCQlzbXBfc3RvcmVfbWIoYi0+dGFza2xldCwgYi0+Zmlyc3Rfd2FpdC0+ dGFzayk7CisJCQkvKiBBcyB0aGVyZSBpcyBhIGRlbGF5IGJldHdlZW4gcmVhZGluZyB0aGUgY3Vy cmVudAorCQkJICogc2Vxbm8sIHByb2Nlc3NpbmcgdGhlIGNvbXBsZXRlZCB0YXNrcyBhbmQgc2Vs ZWN0aW5nCisJCQkgKiB0aGUgbmV4dCB3YWl0ZXIsIHdlIG1heSBoYXZlIG1pc3NlZCB0aGUgaW50 ZXJydXB0CisJCQkgKiBhbmQgc28gbmVlZCBmb3IgdGhlIG5leHQgYm90dG9tLWhhbGYgdG8gd2Fr ZXVwLgorCQkJICoKKwkJCSAqIEFsc28gYXMgd2UgZW5hYmxlIHRoZSBJUlEsIHdlIG1heSBtaXNz IHRoZQorCQkJICogaW50ZXJydXB0IGZvciB0aGF0IHNlcW5vLCBzbyB3ZSBoYXZlIHRvIHdha2Ug dXAKKwkJCSAqIHRoZSBuZXh0IGJvdHRvbS1oYWxmIGluIG9yZGVyIHRvIGRvIGEgY29oZXJlbnQg Y2hlY2sKKwkJCSAqIGluIGNhc2UgdGhlIHNlcW5vIHBhc3NlZC4KKwkJCSAqLworCQkJX19pbnRl bF9icmVhZGNydW1ic19lbmFibGVfaXJxKGIpOworCQkJd2FrZV91cF9wcm9jZXNzKHRvX3dhaXQo bmV4dCktPnRhc2spOworCQl9CisKKwkJZG8geworCQkJc3RydWN0IGludGVsX3dhaXQgKmNydW1i ID0gdG9fd2FpdChjb21wbGV0ZWQpOworCQkJY29tcGxldGVkID0gcmJfcHJldihjb21wbGV0ZWQp OworCQkJX19pbnRlbF9icmVhZGNydW1ic19maW5pc2goYiwgY3J1bWIpOworCQl9IHdoaWxlIChj b21wbGV0ZWQpOworCX0KKworCWlmIChmaXJzdCkgeworCQlHRU1fQlVHX09OKHJiX2ZpcnN0KCZi LT53YWl0ZXJzKSAhPSAmd2FpdC0+bm9kZSk7CisJCWItPmZpcnN0X3dhaXQgPSB3YWl0OworCQlz bXBfc3RvcmVfbWIoYi0+dGFza2xldCwgd2FpdC0+dGFzayk7CisJCWZpcnN0ID1fX2ludGVsX2Jy ZWFkY3J1bWJzX2VuYWJsZV9pcnEoYik7CisJfQorCUdFTV9CVUdfT04oIWItPnRhc2tsZXQpOwor CUdFTV9CVUdfT04oIWItPmZpcnN0X3dhaXQpOworCUdFTV9CVUdfT04ocmJfZmlyc3QoJmItPndh aXRlcnMpICE9ICZiLT5maXJzdF93YWl0LT5ub2RlKTsKKworCXNwaW5fdW5sb2NrKCZiLT5sb2Nr KTsKKworCXJldHVybiBmaXJzdDsKK30KKwordm9pZCBpbnRlbF9lbmdpbmVfZW5hYmxlX2Zha2Vf aXJxKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKK3sKKwltb2RfdGltZXIoJmVuZ2lu ZS0+YnJlYWRjcnVtYnMuZmFrZV9pcnEsIGppZmZpZXMgKyAxKTsKK30KKworc3RhdGljIGlubGlu ZSBib29sIGNoYWluX3dha2V1cChzdHJ1Y3QgcmJfbm9kZSAqcmIsIGludCBwcmlvcml0eSkKK3sK KwlyZXR1cm4gcmIgJiYgdG9fd2FpdChyYiktPnRhc2stPnByaW8gPD0gcHJpb3JpdHk7Cit9CisK K3ZvaWQgaW50ZWxfZW5naW5lX3JlbW92ZV93YWl0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVu Z2luZSwKKwkJCSAgICAgIHN0cnVjdCBpbnRlbF93YWl0ICp3YWl0KQoreworCXN0cnVjdCBpbnRl bF9icmVhZGNydW1icyAqYiA9ICZlbmdpbmUtPmJyZWFkY3J1bWJzOworCisJLyogUXVpY2sgY2hl Y2sgdG8gc2VlIGlmIHRoaXMgd2FpdGVyIHdhcyBhbHJlYWR5IGRlY291cGxlZCBmcm9tCisJICog dGhlIHRyZWUgYnkgdGhlIGJvdHRvbS1oYWxmIHRvIGF2b2lkIGNvbnRlbnRpb24gb24gdGhlIHNw aW5sb2NrCisJICogYnkgdGhlIGhlcmQuCisJICovCisJaWYgKFJCX0VNUFRZX05PREUoJndhaXQt Pm5vZGUpKQorCQlyZXR1cm47CisKKwlzcGluX2xvY2soJmItPmxvY2spOworCisJaWYgKFJCX0VN UFRZX05PREUoJndhaXQtPm5vZGUpKQorCQlnb3RvIG91dF91bmxvY2s7CisKKwlpZiAoYi0+Zmly c3Rfd2FpdCA9PSB3YWl0KSB7CisJCXN0cnVjdCByYl9ub2RlICpuZXh0OworCQljb25zdCBpbnQg cHJpb3JpdHkgPSB3YWl0LT50YXNrLT5wcmlvOworCisJCUdFTV9CVUdfT04oYi0+dGFza2xldCAh PSB3YWl0LT50YXNrKTsKKworCQkvKiBXZSBhcmUgdGhlIGN1cnJlbnQgYm90dG9tLWhhbGYuIEZp bmQgdGhlIG5leHQgY2FuZGlkYXRlLAorCQkgKiB0aGUgZmlyc3Qgd2FpdGVyIGluIHRoZSBxdWV1 ZSBvbiB0aGUgcmVtYWluaW5nIG9sZGVzdAorCQkgKiByZXF1ZXN0LiBBcyBtdWx0aXBsZSBzZXFu b3MgbWF5IGNvbXBsZXRlIGluIHRoZSB0aW1lIGl0CisJCSAqIHRha2VzIHVzIHRvIHdha2UgdXAg YW5kIGZpbmQgdGhlIG5leHQgd2FpdGVyLCB3ZSBoYXZlIHRvCisJCSAqIHdha2UgdXAgdGhhdCB3 YWl0ZXIgZm9yIGl0IHRvIHBlcmZvcm0gaXRzIG93biBjb2hlcmVudAorCQkgKiBjb21wbGV0aW9u IGNoZWNrLgorCQkgKi8KKwkJbmV4dCA9IHJiX25leHQoJndhaXQtPm5vZGUpOworCQlpZiAoY2hh aW5fd2FrZXVwKG5leHQsIHByaW9yaXR5KSkgeworCQkJLyogSWYgdGhlIG5leHQgd2FpdGVyIGlz IGFscmVhZHkgY29tcGxldGUsCisJCQkgKiB3YWtlIGl0IHVwIGFuZCBjb250aW51ZSBvbnRvIHRo ZSBuZXh0IHdhaXRlci4gU28KKwkJCSAqIGlmIGhhdmUgYSBzbWFsbCBoZXJkLCB0aGV5IHdpbGwg d2FrZSB1cCBpbiBwYXJhbGxlbAorCQkJICogcmF0aGVyIHRoYW4gc2VxdWVudGlhbGx5LCB3aGlj aCBzaG91bGQgcmVkdWNlCisJCQkgKiB0aGUgb3ZlcmFsbCBsYXRlbmN5IGluIHdha2luZyBhbGwg dGhlIGNvbXBsZXRlZAorCQkJICogY2xpZW50cy4KKwkJCSAqCisJCQkgKiBIb3dldmVyLCB3YWtp bmcgdXAgYSBjaGFpbiBhZGRzIGV4dHJhIGxhdGVuY3kgdG8KKwkJCSAqIHRoZSBmaXJzdF93YWl0 ZXIuIFRoaXMgaXMgdW5kZXNpcmFibGUgaWYgdGhhdAorCQkJICogd2FpdGVyIGlzIGEgaGlnaCBw cmlvcml0eSB0YXNrLgorCQkJICovCisJCQl1MzIgc2Vxbm8gPSBlbmdpbmUtPmdldF9zZXFubyhl bmdpbmUpOworCQkJd2hpbGUgKGk5MTVfc2Vxbm9fcGFzc2VkKHNlcW5vLCB0b193YWl0KG5leHQp LT5zZXFubykpIHsKKwkJCQlzdHJ1Y3QgcmJfbm9kZSAqbiA9IHJiX25leHQobmV4dCk7CisJCQkJ X19pbnRlbF9icmVhZGNydW1ic19maW5pc2goYiwgdG9fd2FpdChuZXh0KSk7CisJCQkJbmV4dCA9 IG47CisJCQkJaWYgKCFjaGFpbl93YWtldXAobmV4dCwgcHJpb3JpdHkpKQorCQkJCQlicmVhazsK KwkJCX0KKwkJfQorCisJCWlmIChuZXh0KSB7CisJCQkvKiBJbiBvdXIgaGFzdGUsIHdlIG1heSBo YXZlIGNvbXBsZXRlZCB0aGUgZmlyc3Qgd2FpdGVyCisJCQkgKiBiZWZvcmUgd2UgZW5hYmxlZCB0 aGUgaW50ZXJydXB0LiBEbyBzbyBub3cgYXMgd2UKKwkJCSAqIGhhdmUgYSBzZWNvbmQgd2FpdGVy IGZvciBhIGZ1dHVyZSBzZXFuby4gQWZ0ZXJ3YXJkcywKKwkJCSAqIHdlIGhhdmUgdG8gd2FrZSB1 cCB0aGF0IHdhaXRlciBpbiBjYXNlIHdlIG1pc3NlZAorCQkJICogdGhlIGludGVycnVwdCwgb3Ig aWYgd2UgaGF2ZSB0byBoYW5kbGUgYW4KKwkJCSAqIGV4Y2VwdGlvbiByYXRoZXIgdGhhbiBhIHNl cW5vIGNvbXBsZXRpb24uCisJCQkgKi8KKwkJCWItPmZpcnN0X3dhaXQgPSB0b193YWl0KG5leHQp OworCQkJc21wX3N0b3JlX21iKGItPnRhc2tsZXQsIGItPmZpcnN0X3dhaXQtPnRhc2spOworCQkJ aWYgKGItPmZpcnN0X3dhaXQtPnNlcW5vICE9IHdhaXQtPnNlcW5vKQorCQkJCV9faW50ZWxfYnJl YWRjcnVtYnNfZW5hYmxlX2lycShiKTsKKwkJCXdha2VfdXBfcHJvY2VzcyhiLT50YXNrbGV0KTsK KwkJfSBlbHNlIHsKKwkJCWItPmZpcnN0X3dhaXQgPSBOVUxMOworCQkJV1JJVEVfT05DRShiLT50 YXNrbGV0LCBOVUxMKTsKKwkJCV9faW50ZWxfYnJlYWRjcnVtYnNfZGlzYWJsZV9pcnEoYik7CisJ CX0KKwl9IGVsc2UgeworCQlHRU1fQlVHX09OKHJiX2ZpcnN0KCZiLT53YWl0ZXJzKSA9PSAmd2Fp dC0+bm9kZSk7CisJfQorCisJR0VNX0JVR19PTihSQl9FTVBUWV9OT0RFKCZ3YWl0LT5ub2RlKSk7 CisJcmJfZXJhc2UoJndhaXQtPm5vZGUsICZiLT53YWl0ZXJzKTsKKworb3V0X3VubG9jazoKKwlH RU1fQlVHX09OKGItPmZpcnN0X3dhaXQgPT0gd2FpdCk7CisJR0VNX0JVR19PTihyYl9maXJzdCgm Yi0+d2FpdGVycykgIT0gKGItPmZpcnN0X3dhaXQgPyAmYi0+Zmlyc3Rfd2FpdC0+bm9kZSA6IE5V TEwpKTsKKwlHRU1fQlVHX09OKCFiLT50YXNrbGV0IF4gUkJfRU1QVFlfUk9PVCgmYi0+d2FpdGVy cykpOworCXNwaW5fdW5sb2NrKCZiLT5sb2NrKTsKK30KKwordm9pZCBpbnRlbF9lbmdpbmVfaW5p dF9icmVhZGNydW1icyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCit7CisJc3RydWN0 IGludGVsX2JyZWFkY3J1bWJzICpiID0gJmVuZ2luZS0+YnJlYWRjcnVtYnM7CisKKwlzcGluX2xv Y2tfaW5pdCgmYi0+bG9jayk7CisJc2V0dXBfdGltZXIoJmItPmZha2VfaXJxLAorCQkgICAgaW50 ZWxfYnJlYWRjcnVtYnNfZmFrZV9pcnEsCisJCSAgICAodW5zaWduZWQgbG9uZyllbmdpbmUpOwor fQorCit2b2lkIGludGVsX2VuZ2luZV9maW5pX2JyZWFkY3J1bWJzKHN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKmVuZ2luZSkKK3sKKwlzdHJ1Y3QgaW50ZWxfYnJlYWRjcnVtYnMgKmIgPSAmZW5naW5l LT5icmVhZGNydW1iczsKKworCWRlbF90aW1lcl9zeW5jKCZiLT5mYWtlX2lycSk7Cit9CisKK3Vu c2lnbmVkIGludGVsX2tpY2tfd2FpdGVycyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkK K3sKKwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7CisJdW5zaWduZWQgbWFzayA9IDA7 CisKKwkvKiBUbyBhdm9pZCB0aGUgdGFza19zdHJ1Y3QgZGlzYXBwZWFyaW5nIGJlbmVhdGggdXMg YXMgd2Ugd2FrZSB1cAorCSAqIHRoZSBwcm9jZXNzLCB3ZSBtdXN0IGZpcnN0IGluc3BlY3QgdGhl IHRhc2tfc3RydWN0LT5zdGF0ZSB1bmRlciB0aGUKKwkgKiBSQ1UgbG9jaywgaS5lLiBhcyB3ZSBj YWxsIHdha2VfdXBfcHJvY2VzcygpIHdlIG11c3QgYmUgaG9sZGluZyB0aGUKKwkgKiByY3VfcmVh ZF9sb2NrKCkuCisJICovCisJcmN1X3JlYWRfbG9jaygpOworCWZvcl9lYWNoX2VuZ2luZShlbmdp bmUsIGk5MTUpCisJCWlmICh1bmxpa2VseShpbnRlbF9lbmdpbmVfd2FrZXVwKGVuZ2luZSkpKQor CQkJbWFzayB8PSBpbnRlbF9lbmdpbmVfZmxhZyhlbmdpbmUpOworCXJjdV9yZWFkX3VubG9jaygp OworCisJcmV0dXJuIG1hc2s7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9scmMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jCmluZGV4IDVjMTkx YTFhZmFhZi4uMjcwNDA5ZTlhYzdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9scmMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuYwpAQCAtMTg5 MCw2ICsxODkwLDggQEAgdm9pZCBpbnRlbF9sb2dpY2FsX3JpbmdfY2xlYW51cChzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICplbmdpbmUpCiAJaTkxNV9jbWRfcGFyc2VyX2ZpbmlfcmluZyhlbmdpbmUp OwogCWk5MTVfZ2VtX2JhdGNoX3Bvb2xfZmluaSgmZW5naW5lLT5iYXRjaF9wb29sKTsKIAorCWlu dGVsX2VuZ2luZV9maW5pX2JyZWFkY3J1bWJzKGVuZ2luZSk7CisKIAlpZiAoZW5naW5lLT5zdGF0 dXNfcGFnZS5vYmopIHsKIAkJaTkxNV9nZW1fb2JqZWN0X3VucGluX21hcChlbmdpbmUtPnN0YXR1 c19wYWdlLm9iaik7CiAJCWVuZ2luZS0+c3RhdHVzX3BhZ2Uub2JqID0gTlVMTDsKQEAgLTE5Mjcs NyArMTkyOSw3IEBAIGxvZ2ljYWxfcmluZ19kZWZhdWx0X2lycXMoc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqZW5naW5lLCB1bnNpZ25lZCBzaGlmdCkKIHsKIAllbmdpbmUtPmlycV9lbmFibGVfbWFz ayA9IEdUX1JFTkRFUl9VU0VSX0lOVEVSUlVQVCA8PCBzaGlmdDsKIAllbmdpbmUtPmlycV9rZWVw X21hc2sgPSBHVF9DT05URVhUX1NXSVRDSF9JTlRFUlJVUFQgPDwgc2hpZnQ7Ci0JaW5pdF93YWl0 cXVldWVfaGVhZCgmZW5naW5lLT5pcnFfcXVldWUpOworCWludGVsX2VuZ2luZV9pbml0X2JyZWFk Y3J1bWJzKGVuZ2luZSk7CiB9CiAKIHN0YXRpYyBpbnQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X3JpbmdidWZmZXIuYwppbmRleCAxYTM4OWQwZGNkZDIuLjk1ZjA0MzQ1ZDNlYyAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5jCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuYwpAQCAtMjMwOSw3ICsyMzA5LDcgQEAgc3Rh dGljIGludCBpbnRlbF9pbml0X3JpbmdfYnVmZmVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJ bWVtc2V0KGVuZ2luZS0+c2VtYXBob3JlLnN5bmNfc2Vxbm8sIDAsCiAJICAgICAgIHNpemVvZihl bmdpbmUtPnNlbWFwaG9yZS5zeW5jX3NlcW5vKSk7CiAKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZl bmdpbmUtPmlycV9xdWV1ZSk7CisJaW50ZWxfZW5naW5lX2luaXRfYnJlYWRjcnVtYnMoZW5naW5l KTsKIAogCS8qIFdlIG1heSBuZWVkIHRvIGRvIHRoaW5ncyB3aXRoIHRoZSBzaHJpbmtlciB3aGlj aAogCSAqIHJlcXVpcmUgdXMgdG8gaW1tZWRpYXRlbHkgc3dpdGNoIGJhY2sgdG8gdGhlIGRlZmF1 bHQKQEAgLTIzODksNiArMjM4OSw3IEBAIHZvaWQgaW50ZWxfY2xlYW51cF9lbmdpbmUoc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQogCiAJaTkxNV9jbWRfcGFyc2VyX2ZpbmlfcmluZyhl bmdpbmUpOwogCWk5MTVfZ2VtX2JhdGNoX3Bvb2xfZmluaSgmZW5naW5lLT5iYXRjaF9wb29sKTsK KwlpbnRlbF9lbmdpbmVfZmluaV9icmVhZGNydW1icyhlbmdpbmUpOwogCiAJaW50ZWxfcmluZ19j b250ZXh0X3VucGluKGRldl9wcml2LT5rZXJuZWxfY29udGV4dCwgZW5naW5lKTsKIApkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oCmluZGV4IGIzM2M4NzZmZWQyMC4uMDYxMDg4 MzYwYjgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVy LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oCkBAIC0xNjAs NiArMTYwLDMyIEBAIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgewogCXN0cnVjdCBpbnRlbF9yaW5n YnVmZmVyICpidWZmZXI7CiAJc3RydWN0IGxpc3RfaGVhZCBidWZmZXJzOwogCisJLyogUmF0aGVy IHRoYW4gaGF2ZSBldmVyeSBjbGllbnQgd2FpdCB1cG9uIGFsbCB1c2VyIGludGVycnVwdHMsCisJ ICogd2l0aCB0aGUgaGVyZCB3YWtpbmcgYWZ0ZXIgZXZlcnkgaW50ZXJydXB0IGFuZCBlYWNoIGRv aW5nIHRoZQorCSAqIGhlYXZ5d2VpZ2h0IHNlcW5vIGRhbmNlLCB3ZSBkZWxlZ2F0ZSB0aGUgdGFz ayAob2YgYmVpbmcgdGhlCisJICogYm90dG9tLWhhbGYgb2YgdGhlIHVzZXIgaW50ZXJydXB0KSB0 byB0aGUgZmlyc3QgY2xpZW50LiBBZnRlcgorCSAqIGV2ZXJ5IGludGVycnVwdCwgd2Ugd2FrZSB1 cCBvbmUgY2xpZW50LCB3aG8gZG9lcyB0aGUgaGVhdnl3ZWlnaHQKKwkgKiBjb2hlcmVudCBzZXFu byByZWFkIGFuZCBlaXRoZXIgZ29lcyBiYWNrIHRvIHNsZWVwIChpZiBpbmNvbXBsZXRlKSwKKwkg KiBvciB3YWtlcyB1cCBhbGwgdGhlIGNvbXBsZXRlZCBjbGllbnRzIGluIHBhcmFsbGVsLCBiZWZv cmUgdGhlbgorCSAqIHRyYW5zZmVycmluZyB0aGUgYm90dG9tLWhhbGYgc3RhdHVzIHRvIHRoZSBu ZXh0IGNsaWVudCBpbiB0aGUgcXVldWUuCisJICoKKwkgKiBDb21wYXJlZCB0byB3YWxraW5nIHRo ZSBlbnRpcmUgbGlzdCBvZiB3YWl0ZXJzIGluIGEgc2luZ2xlIGRlZGljYXRlZAorCSAqIGJvdHRv bS1oYWxmLCB3ZSByZWR1Y2UgdGhlIGxhdGVuY3kgb2YgdGhlIGZpcnN0IHdhaXRlciBieSBhdm9p ZGluZworCSAqIGEgY29udGV4dCBzd2l0Y2gsIGJ1dCBpbmN1ciBhZGRpdGlvbmFsIGNvaGVyZW50 IHNlcW5vIHJlYWRzIHdoZW4KKwkgKiBmb2xsb3dpbmcgdGhlIGNoYWluIG9mIHJlcXVlc3QgYnJl YWRjcnVtYnMuIFNpbmNlIGl0IGlzIG1vc3QgbGlrZWx5CisJICogdGhhdCB3ZSBoYXZlIGEgc2lu Z2xlIGNsaWVudCB3YWl0aW5nIG9uIGVhY2ggc2Vxbm8sIHRoZW4gcmVkdWNpbmcKKwkgKiB0aGUg b3ZlcmhlYWQgb2Ygd2FraW5nIHRoYXQgY2xpZW50IGlzIG11Y2ggcHJlZmVycmVkLgorCSAqLwor CXN0cnVjdCBpbnRlbF9icmVhZGNydW1icyB7CisJCXNwaW5sb2NrX3QgbG9jazsgLyogcHJvdGVj dHMgdGhlIGxpc3RzIG9mIHJlcXVlc3RzICovCisJCXN0cnVjdCByYl9yb290IHdhaXRlcnM7IC8q IHNvcnRlZCBieSByZXRpcmVtZW50LCBwcmlvcml0eSAqLworCQlzdHJ1Y3QgaW50ZWxfd2FpdCAq Zmlyc3Rfd2FpdDsgLyogb2xkZXN0IHdhaXRlciBieSByZXRpcmVtZW50ICovCisJCXN0cnVjdCB0 YXNrX3N0cnVjdCAqdGFza2xldDsgLyogYmggZm9yIHVzZXIgaW50ZXJydXB0cyAqLworCQlzdHJ1 Y3QgdGltZXJfbGlzdCBmYWtlX2lycTsgLyogdXNlZCBhZnRlciBhIG1pc3NlZCBpbnRlcnJ1cHQg Ki8KKwkJYm9vbCBpcnFfZW5hYmxlZDsKKwkJYm9vbCBycG1fd2FrZWxvY2s7CisJfSBicmVhZGNy dW1iczsKKwogCS8qCiAJICogQSBwb29sIG9mIG9iamVjdHMgdG8gdXNlIGFzIHNoYWRvdyBjb3Bp ZXMgb2YgY2xpZW50IGJhdGNoIGJ1ZmZlcnMKIAkgKiB3aGVuIHRoZSBjb21tYW5kIHBhcnNlciBp cyBlbmFibGVkLiBQcmV2ZW50cyB0aGUgY2xpZW50IGZyb20KQEAgLTMwOCw4ICszMzQsNiBAQCBz dHJ1Y3QgaW50ZWxfZW5naW5lX2NzIHsKIAogCWJvb2wgZ3B1X2NhY2hlc19kaXJ0eTsKIAotCXdh aXRfcXVldWVfaGVhZF90IGlycV9xdWV1ZTsKLQogCXN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICps YXN0X2NvbnRleHQ7CiAKIAlzdHJ1Y3QgaW50ZWxfcmluZ19oYW5nY2hlY2sgaGFuZ2NoZWNrOwpA QCAtNDk1LDQgKzUxOSw0NCBAQCBzdGF0aWMgaW5saW5lIHUzMiBpbnRlbF9od3Nfc2Vxbm9fYWRk cmVzcyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCiAJcmV0dXJuIGVuZ2luZS0+c3Rh dHVzX3BhZ2UuZ2Z4X2FkZHIgKyBJOTE1X0dFTV9IV1NfSU5ERVhfQUREUjsKIH0KIAorLyogaW50 ZWxfYnJlYWRjcnVtYnMuYyAtLSB1c2VyIGludGVycnVwdCBib3R0b20taGFsZiBmb3Igd2FpdGVy cyAqLworc3RydWN0IGludGVsX3dhaXQgeworCXN0cnVjdCByYl9ub2RlIG5vZGU7CisJc3RydWN0 IHRhc2tfc3RydWN0ICp0YXNrOworCXUzMiBzZXFubzsKK307Cit2b2lkIGludGVsX2VuZ2luZV9p bml0X2JyZWFkY3J1bWJzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSk7CitzdGF0aWMg aW5saW5lIHZvaWQgaW50ZWxfd2FpdF9pbml0KHN0cnVjdCBpbnRlbF93YWl0ICp3YWl0LCB1MzIg c2Vxbm8pCit7CisJd2FpdC0+dGFzayA9IGN1cnJlbnQ7CisJd2FpdC0+c2Vxbm8gPSBzZXFubzsK K30KK3N0YXRpYyBpbmxpbmUgYm9vbCBpbnRlbF93YWl0X2NvbXBsZXRlKGNvbnN0IHN0cnVjdCBp bnRlbF93YWl0ICp3YWl0KQoreworCXJldHVybiBSQl9FTVBUWV9OT0RFKCZ3YWl0LT5ub2RlKTsK K30KK2Jvb2wgaW50ZWxfZW5naW5lX2FkZF93YWl0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVu Z2luZSwKKwkJCSAgIHN0cnVjdCBpbnRlbF93YWl0ICp3YWl0KTsKK3ZvaWQgaW50ZWxfZW5naW5l X3JlbW92ZV93YWl0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKKwkJCSAgICAgIHN0 cnVjdCBpbnRlbF93YWl0ICp3YWl0KTsKK3N0YXRpYyBpbmxpbmUgYm9vbCBpbnRlbF9lbmdpbmVf aGFzX3dhaXRlcihzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCit7CisJcmV0dXJuIFJF QURfT05DRShlbmdpbmUtPmJyZWFkY3J1bWJzLnRhc2tsZXQpOworfQorc3RhdGljIGlubGluZSBi b29sIGludGVsX2VuZ2luZV93YWtldXAoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQor eworCWJvb2wgd2FrZXVwID0gZmFsc2U7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrID0gUkVB RF9PTkNFKGVuZ2luZS0+YnJlYWRjcnVtYnMudGFza2xldCk7CisJLyogTm90ZSB0aGF0IGZvciB0 aGlzIG5vdCB0byBkYW5nZXJvdXNseSBjaGFzZSBhIGRhbmdsaW5nIHBvaW50ZXIsCisJICogdGhl IGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgZW5zdXJlIHRoYXQgdGhlIHRhc2sgcmVtYWluIHZh bGlkIGZvcgorCSAqIHdha2VfdXBfcHJvY2VzcygpIGkuZS4gdGhhdCB0aGUgUkNVIGdyYWNlIHBl cmlvZCBjYW5ub3QgZXhwaXJlLgorCSAqLworCWlmICh0YXNrKQorCQl3YWtldXAgPSB3YWtlX3Vw X3Byb2Nlc3ModGFzayk7CisJcmV0dXJuIHdha2V1cDsKK30KK3ZvaWQgaW50ZWxfZW5naW5lX2Vu YWJsZV9mYWtlX2lycShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpOwordm9pZCBpbnRl bF9lbmdpbmVfZmluaV9icmVhZGNydW1icyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUp OwordW5zaWduZWQgaW50ZWxfa2lja193YWl0ZXJzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpp OTE1KTsKKwogI2VuZGlmIC8qIF9JTlRFTF9SSU5HQlVGRkVSX0hfICovCi0tIAoyLjguMQoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1h aWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMu ZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==