From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tomas Elf Subject: [RFCv2 03/12] drm/i915: Adding TDR / per-engine reset support for gen8. Date: Tue, 21 Jul 2015 14:58:46 +0100 Message-ID: <1437487135-32520-4-git-send-email-tomas.elf@intel.com> References: <1437487135-32520-1-git-send-email-tomas.elf@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTP id 506FC72042 for ; Tue, 21 Jul 2015 06:59:29 -0700 (PDT) In-Reply-To: <1437487135-32520-1-git-send-email-tomas.elf@intel.com> 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: Ian Lister List-Id: intel-gfx@lists.freedesktop.org VGhpcyBjaGFuZ2UgaW50cm9kdWNlcyBzdXBwb3J0IGZvciBURFItc3R5bGUgcGVyLWVuZ2luZSBy ZXNldCBhcyBhIGluaXRpYWwsCmxlc3MgaW50cnVzaXZlIGhhbmcgcmVjb3Zlcnkgb3B0aW9uIHRv IGJlIGF0dGVtcHRlZCBiZWZvcmUgZmFsbGluZyBiYWNrIHRvIHRoZQpsZWdhY3kgZnVsbCBHUFUg cmVzZXQgcmVjb3ZlcnkgbW9kZSBpZiBuZWNlc3NhcnkuIEluaXRpYWxseSB3ZSdyZSBvbmx5CnN1 cHBvcnRpbmcgZ2VuOCBidXQgYWRkaW5nIHN1cHBvcnQgZm9yIGdlbjcgaXMgc3RyYWlnaHQtZm9y d2FyZCBzaW5jZSB3ZSd2ZQphbHJlYWR5IGVzdGFibGlzaGVkIGFuIGV4dGVuc2libGUgZnJhbWV3 b3JrIHdoZXJlIGdlbjcgc3VwcG9ydCBjYW4gYmUgcGx1Z2dlZAppbiAoYWRkIGNvcnJlc3BvbmRp bmcgdmVyc2lvbnMgb2YgaW50ZWxfcmluZ19lbmFibGUsIGludGVsX3JpbmdfZGlzYWJsZSwKaW50 ZWxfcmluZ19zYXZlLCBpbnRlbF9yaW5nX3Jlc3RvcmUsIGV0Yy4pLgoKMS4gUGVyLWVuZ2luZSBy ZWNvdmVyeSB2cy4gRnVsbCBHUFUgcmVjb3ZlcnkKClRvIGNhcHR1cmUgdGhlIHN0YXRlIG9mIGEg c2luZ2xlIGVuZ2luZSBiZWluZyBkZXRlY3RlZCBhcyBodW5nIHRoZXJlIGlzIG5vdyBhCm5ldyBm bGFnIGZvciBldmVyeSBlbmdpbmUgdGhhdCBjYW4gYmUgc2V0IG9uY2UgdGhlIGRlY2lzaW9uIGhh cyBiZWVuIG1hZGUgdG8Kc2NoZWR1bGUgaGFuZyByZWNvdmVyeSBmb3IgdGhhdCBwYXJ0aWN1bGFy IGVuZ2luZS4KClRoZSBmb2xsb3dpbmcgYWxnb3JpdGhtIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHdo ZW4gdG8gdXNlIHdoaWNoIHJlY292ZXJ5IG1vZGU6CgoJYS4gT25jZSB0aGUgaGFuZyBjaGVjayBz Y29yZSByZWFjaGVzIGxldmVsIEhVTkcgaGFuZyByZWNvdmVyeSBpcwoJc2NoZWR1bGVkIGFzIHVz dWFsLiBUaGUgaGFuZyBjaGVja2VyIGFnZ3JlZ2F0ZXMgYWxsIGVuZ2luZXMgY3VycmVudGx5Cglk ZXRlY3RlZCBhcyBodW5nIGludG8gYSBzaW5nbGUgZW5naW5lIGZsYWcgbWFzayBhbmQgcGFzc2Vz IHRoYXQgdG8gdGhlCgllcnJvciBoYW5kbGVyLCB3aGljaCBhbGxvd3MgdXMgdG8gc2NoZWR1bGUg aGFuZyByZWNvdmVyeSBmb3IgYWxsCgljdXJyZW50bHkgaHVuZyBlbmdpbmVzIGluIGEgc2luZ2xl IGNhbGwuCgoJYi4gVGhlIGVycm9yIGhhbmRsZXIgY2hlY2tzIGFsbCBlbmdpbmVzIHRoYXQgaGF2 ZSBiZWVuIG1hcmtlZCBhcyBodW5nCglieSB0aGUgaGFuZyBjaGVja2VyIGFuZCAtIG1vcmUgc3Bl Y2lmaWNhbGx5IC0gY2hlY2tzIGhvdyBsb25nIGFnbyBpdAoJd2FzIHNpbmNlIGl0IGxhc3QgYXR0 ZW1wdGVkIHRvIGRvIHBlci1lbmdpbmUgaGFuZyByZWNvdmVyeSBmb3IgZWFjaAoJcmVzcGVjdGl2 ZSwgY3VycmVudGx5IGh1bmcgZW5naW5lLiBJZiB0aGUgbWVhc3VyZWQgdGltZSBwZXJpb2QgaXMK CXdpdGhpbiBhIGNlcnRhaW4gdGltZSB3aW5kb3csIGkuZS4gdGhlIGxhc3QgcGVyLWVuZ2luZSBo YW5nIHJlY292ZXJ5Cgl3YXMgZG9uZSB0b28gcmVjZW50bHksIGl0IGlzIGRldGVybWluZWQgdGhh dCBwZXItZW5naW5lIGhhbmcgcmVjb3ZlcnkKCWlzIGluZWZmZWN0aXZlIGFuZCB0aGUgc3RlcCBp cyB0YWtlbiB0byBwcm9tb3RlIGEgZnVsbCBHUFUgcmVzZXQuCgoJYy4gSWYgdGhlIGVycm9yIGhh bmRsZXIgZGV0ZXJtaW5lcyB0aGF0IG5vIGN1cnJlbnRseSBodW5nIGVuZ2luZSBoYXMKCXJlY2Vu dGx5IGhhZCBoYW5nIHJlY292ZXJ5IGEgcGVyLWVuZ2luZSBoYW5nIHJlY292ZXJ5IGlzIHNjaGVk dWxlZC4KCglkLiBBZGRpdGlvbmFsbHksIGlmIHRoZSBoYW5nIGNoZWNrZXIgZGV0ZWN0cyB0aGF0 IHRoZSBoYW5nIGNoZWNrIHNjb3JlCgloYXMgZ3Jvd24gdG9vIGhpZ2ggKGN1cnJlbnRseSBkZWZp bmVkIGFzIHR3aWNlIHRoZSBIVU5HIGxldmVsKSBpdAoJZGV0ZXJtaW5lcyB0aGF0IHByZXZpb3Vz IGhhbmcgcmVjb3ZlcnkgYXR0ZW1wdHMgaGF2ZSBmYWlsZWQgZm9yCgl3aGF0ZXZlciByZWFzb24g YW5kIGl0IHdpbGwgYnlwYXNzIHRoZSBlcnJvciBjaGVja2VyIGZ1bGwgR1BVIHJlc2V0Cglwcm9t b3Rpb24gbG9naWMuIE9uZSBjYXNlIHdoZXJlIHRoaXMgaXMgaW1wb3J0YW50IGlzIGlmIHRoZSBo YW5nCgljaGVja2VyIGFuZCBlcnJvciBoYW5kbGVyIHRoaW5rcyB0aGF0IHBlci1lbmdpbmUgaGFu ZyByZWNvdmVyeSBpcyBhCglzdWl0YWJsZSBvcHRpb24gYW5kIHNldmVyYWwgc3VjaCBhdHRlbXB0 cyBhcmUgbWFkZSAtIGluZnJlcXVlbnRseQoJZW5vdWdoIC0gYnV0IG5vIGVmZmVjdGl2ZSByZXNl dCBpcyBkb25lLCBwZXJoYXBzIGR1ZSB0byBpbmNvbnNpc3RlbnQKCWNvbnRleHQgc3VibWlzc2lv biBzdGF0dXMsIHdoaWNoIGlzIGRlc2NyaWJlZCBmdXJ0aGVyIGRvd24gYmVsb3cuCgpOT1RFOiBH ZW4gNyBhbmQgZWFybGllciB3aWxsIGFsd2F5cyBwcm9tb3RlIHRvIGZ1bGwgR1BVIHJlc2V0IHNp bmNlIHRoZXJlIGlzCmN1cnJlbnRseSBubyBwZXItZW5naW5lIHJlc2V0IHN1cHBvcnQgZm9yIHRo ZXNlIGdlbnMuCgoyLiBDb250ZXh0IFN1Ym1pc3Npb24gU3RhdHVzIENvbnNpc3RlbmN5LgoKUGVy LWVuZ2luZSBoYW5nIHJlY292ZXJ5IG9uIGdlbjggcmVsaWVzIG9uIHRoZSBiYXNpYyBjb25jZXB0 IG9mIGNvbnRleHQKc3VibWlzc2lvbiBzdGF0dXMgY29uc2lzdGVuY3kuIFdoYXQgdGhpcyBtZWFu cyBpcyB0aGF0IHdlIG1ha2Ugc3VyZSB0aGF0IHRoZQpzdGF0dXMgb2YgdGhlIGhhcmR3YXJlIGFu ZCB0aGUgZHJpdmVyIHdoZW4gaXQgY29tZXMgdG8gdGhlIHN1Ym1pc3Npb24gc3RhdHVzIG9mCnRo ZSBjdXJyZW50IGNvbnRleHQgb24gYW55IGVuZ2luZSBpcyBjb25zaXN0ZW50LiBGb3IgZXhhbXBs ZSwgd2hlbiBzdWJtaXR0aW5nIGEKY29udGV4dCB0byB0aGUgY29ycmVzcG9uZGluZyBFTFNQIHBv cnQgb2YgYW4gZW5naW5lIHdlIGV4cGVjdCB0aGUgb3duaW5nCnJlcXVlc3Qgb2YgdGhhdCBjb250 ZXh0IHRvIGJlIGF0IHRoZSBoZWFkIG9mIHRoZSBjb3JyZXNwb25kaW5nIGV4ZWN1dGlvbiBsaXN0 CnF1ZXVlLiBMaWtld2lzZSwgYXMgbG9uZyBhcyB0aGUgY29udGV4dCBpcyBleGVjdXRpbmcgb24g dGhlIEdQVSB3ZSBleHBlY3QgdGhlCkVYRUNMSVNUX1NUQVRVUyByZWdpc3RlciBhbmQgdGhlIGNv bnRleHQgc3RhdHVzIGJ1ZmZlciB0byByZWZsZWN0IHRoaXMuIFRodXMsCmlmIHRoZSBjb250ZXh0 IHN1Ym1pc3Npb24gc3RhdHVzIGlzIGNvbnNpc3RlbnQgdGhlIElEIG9mIHRoZSBjdXJyZW50bHkK ZXhlY3V0aW5nIGNvbnRleHQgc2hvdWxkIGJlIGluIEVYRUNMSVNUX1NUQVRVUyBhbmQgaXQgc2hv dWxkIGJlIGNvbnNpc3RlbnQKd2l0aCB0aGUgY29udGV4dCBvZiB0aGUgaGVhZCByZXF1ZXN0IGVs ZW1lbnQgaW4gdGhlIGV4ZWN1dGlvbiBsaXN0IHF1ZXVlCmNvcnJlc3BvbmRpbmcgdG8gdGhhdCBl bmdpbmUuCgpUaGUgcmVhc29uIHdoeSB0aGlzIGlzIGltcG9ydGFudCBmb3IgcGVyLWVuZ2luZSBo YW5nIHJlY292ZXJ5IG9uIGdlbjggaXMKYmVjYXVzZSB0aGlzIHJlY292ZXJ5IG1vZGUgcmVsaWVz IG9uIGNvbnRleHQgcmVzdWJtaXNzaW9uIHRvIHJlc3VtZSBleGVjdXRpb24KZm9sbG93aW5nIHRo ZSByZWNvdmVyeS4gSWYgYSBjb250ZXh0IGhhcyBiZWVuIGRldGVybWluZWQgdG8gYmUgaHVuZyBh bmQgdGhlCnBlci1lbmdpbmUgaGFuZyByZWNvdmVyeSBtb2RlIGlzIGVuZ2FnZWQgbGVhZGluZyB0 byB0aGUgcmVzdWJtaXNzaW9uIG9mIHRoYXQKY29udGV4dCBpdCdzIGltcG9ydGFudCB0aGF0IHRo ZSBoYXJkd2FyZSBpcyBpbiBmYWN0IG5vdCBidXN5IGRvaW5nIHNvbWV0aGluZwplbHNlIG9yIGJl aW5nIGlkbGUgc2luY2UgYSByZXN1Ym1pc3Npb24gZHVyaW5nIHRoaXMgc3RhdGUgd291bGQgY2F1 c2UgdW5mb3JzZWVuCnNpZGUtZWZmZWN0cyBzdWNoIGFzIHVuZXhwZWN0ZWQgcHJlZW1wdGlvbnMu CgpUaGVyZSBhcmUgcmFyZSwgYWx0aG91Z2ggY29uc2lzdGVudGx5IHJlcHJvZHVjYWJsZSwgc2l0 dWF0aW9ucyB0aGF0IGhhdmUgc2hvd24KdXAgaW4gcHJhY3RpY2Ugd2hlcmUgdGhlIGRyaXZlciBh bmQgaGFyZHdhcmUgYXJlIG5vIGxvbmdlciBjb25zaXN0ZW50IHdpdGggZWFjaApvdGhlciwgZS5n LiBkdWUgdG8gbG9zdCBjb250ZXh0IGNvbXBsZXRpb24gaW50ZXJydXB0cyBhZnRlciB3aGljaCB0 aGUgaGFyZHdhcmUKd291bGQgYmUgaWRsZSBidXQgdGhlIGRyaXZlciB3b3VsZCBzdGlsbCB0aGlu ayB0aGF0IGEgY29udGV4dCB3b3VsZCBzdGlsbCBiZQphY3RpdmUuCgozLiBUaGVyZSBpcyBhIG5l dyByZXNldCBwYXRoIGZvciBlbmdpbmUgcmVzZXQgYWxvbmdzaWRlIHRoZSBsZWdhY3kgZnVsbCBH UFUKcmVzZXQgcGF0aC4gVGhpcyBwYXRoIGRvZXMgdGhlIGZvbGxvd2luZzoKCgkxKSBDaGVjayBm b3IgY29udGV4dCBzdWJtaXNzaW9uIGNvbnNpc3RlbmN5IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZQoJ Y29udGV4dCB0aGF0IHRoZSBoYXJkd2FyZSBpcyBjdXJyZW50bHkgc3R1Y2sgb24gaXMgYWN0dWFs bHkgd2hhdCB0aGUKCWRyaXZlciBpcyB3b3JraW5nIG9uLiBJZiBub3QgdGhlbiBjbGVhcmx5IHdl J3JlIG5vdCBpbiBhIGNvbnNpc3RlbnRseQoJaHVuZyBzdGF0ZSBhbmQgd2UgYmFpbCBvdXQgZWFy bHkuCgoJMikgRGlzYWJsZS9pZGxlIHRoZSBlbmdpbmUuIFRoaXMgaXMgZG9uZSB0aHJvdWdoIHJl c2V0IGhhbmRzaGFraW5nIG9uCglnZW44KyB1bmxpa2UgZWFybGllciBnZW5zIHdoZXJlIHRoaXMg d2FzIGRvbmUgYnkgY2xlYXJpbmcgdGhlIHJpbmcKCXZhbGlkIGJpdHMgaW4gTUlfTU9ERSBhbmQg cmluZyBjb250cm9sIHJlZ2lzdGVycywgd2hpY2ggYXJlIG5vIGxvbmdlcgoJc3VwcG9ydGVkIG9u IGdlbjgrLiBSZXNldCBoYW5kc2hha2luZyB0cmFuc2xhdGVzIHRvIHNldHRpbmcgdGhlIHJlc2V0 CglyZXF1ZXN0IGJpdCBpbiB0aGUgcmVzZXQgY29udHJvbCByZWdpc3Rlci4KCgkzKSBTYXZlIHRo ZSBjdXJyZW50IGVuZ2luZSBzdGF0ZS4KCglXaGF0IHRoaXMgdHJhbnNsYXRlcyB0byBvbiBnZW44 IGlzIHNpbXBseSB0byByZWFkIHRoZSBjdXJyZW50IHZhbHVlIG9mCgl0aGUgaGVhZCByZWdpc3Rl ciBhbmQgbnVkZ2UgaXQgc28gdGhhdCBpdCBwb2ludHMgdG8gdGhlIG5leHQgdmFsaWQKCWluc3Ry dWN0aW9uIGluIHRoZSByaW5nIGJ1ZmZlci4gU2luY2Ugd2UgYXNzdW1lIHRoYXQgdGhlIGV4ZWN1 dGlvbiBpcwoJY3VycmVudGx5IHN0dWNrIGluIGEgYmF0Y2ggYnVmZmVyIHRoZSBlZmZlY3Qgb2Yg dGhpcyBpcyB0aGF0IHRoZQoJYmF0Y2hidWZmZXIgc3RhcnQgaW5zdHJ1Y3Rpb24gb2YgdGhlIGh1 bmcgYmF0Y2ggYnVmZmVyIGlzIHNraXBwZWQgc28KCXRoYXQgd2hlbiBleGVjdXRpb24gcmVzdW1l cywgZm9sbG93aW5nIHRoZSBoYW5nIHJlY292ZXJ5IGNvbXBsZXRpb24sIGl0CglyZXN1bWVzIGlt bWVkaWF0ZWx5IGZvbGxvd2luZyB0aGUgYmF0Y2ggYnVmZmVyLgoKCVRoaXMgZWZmZWN0aXZlbHkg bWVhbnMgdGhhdCB3ZSdyZSBmb3JjZWZ1bGx5IHRlcm1pbmF0aW5nIHRoZSBjdXJyZW50bHkKCWFj dGl2ZSwgaHVuZyBiYXRjaCBidWZmZXIuIE9idmlvdXNseSwgdGhlIG91dGNvbWUgb2YgdGhpcyBp bnRlcnZlbnRpb24KCWlzIHBvdGVudGlhbGx5IHVuZGVmaW5lZCBidXQgdGhlcmUgYXJlIG5vdCBt YW55IGdvb2Qgb3B0aW9ucyBpbiB0aGlzCglzY2VuYXJpby4gSXQncyBiZXR0ZXIgdGhhbiByZXNl dHRpbmcgdGhlIGVudGlyZSBHUFUgaW4gdGhlIHZhc3QKCW1ham9yaXR5IG9mIGNhc2VzLgoKCVNh dmUgdGhlIG51ZGdlZCBoZWFkIHZhbHVlIHRvIGJlIGFwcGxpZWQgbGF0ZXIuCgoJNCkgUmVzZXQg dGhlIGVuZ2luZS4KCgk1KSBBcHBseSB0aGUgbnVkZ2VkIGhlYWQgdmFsdWUgdG8gdGhlIGhlYWQg cmVnaXN0ZXIuCgoJNikgUmVlbmFibGUgdGhlIGVuZ2luZS4gRm9yIGdlbjggdGhpcyBtZWFucyBy ZXN1Ym1pdHRpbmcgdGhlIGZpeGVkLXVwCgljb250ZXh0LCBhbGxvd2luZyBleGVjdXRpb24gdG8g cmVzdW1lLiBJbiBvcmRlciB0byByZXN1Ym1pdCBhIGNvbnRleHQKCXdpdGhvdXQgcmVseWluZyBv biB0aGUgY3VycmVudGx5IGh1bmcgZXhlY3V0aW9uIGxpc3QgcXVldWVzIHdlIHVzZSBhCglwcml2 aWxlZ2VkIEFQSSB0aGF0IGlzIGRlZGljYXRlZCBmb3IgVERSIHVzZSBvbmx5LiBUaGlzIHN1Ym1p c3Npb24gQVBJCglieXBhc3NlcyBhbnkgY3VycmVudGx5IHF1ZXVlZCB3b3JrIGFuZCBnZXRzIGV4 Y2x1c2l2ZSBhY2Nlc3MgdG8gdGhlCglFTFNQIHBvcnRzLgoKCTcpIElmIHRoZSBlbmdpbmUgaGFu ZyByZWNvdmVyeSBwcm9jZWR1cmUgZmFpbHMgYXQgYW55IHBvaW50IGluIGJldHdlZW4KCWRpc2Fi bGVtZW50IGFuZCByZWVuYWJsZW1lbnQgb2YgdGhlIGVuZ2luZSB0aGVyZSBpcyBhIGJhY2stb2Zm Cglwcm9jZWR1cmU6IEZvciBnZW44IGl0J3MgcG9zc2libGUgdG8gYmFjayBvdXQgb2YgdGhlIHJl c2V0IGhhbmRzaGFrZSBieQoJY2xlYXJpbmcgdGhlIHJlc2V0IHJlcXVlc3QgYml0IGluIHRoZSBy ZXNldCBjb250cm9sIHJlZ2lzdGVyLgoKTk9URToKSXQncyBwb3NzaWJsZSB0aGF0IHNvbWUgb2Yg QmVuIFdpZGF3c2t5J3Mgb3JpZ2luYWwgcGVyLWVuZ2luZSByZXNldCBwYXRjaGVzCmZyb20gMyB5 ZWFycyBhZ28gYXJlIGluIHRoaXMgY29tbWl0IGJ1dCBzaW5jZSB0aGlzIHdvcmsgaGFzIGdvbmUg dGhyb3VnaCB0aGUKaGFuZHMgb2YgYXQgbGVhc3QgMyBwZW9wbGUgYWxyZWFkeSBhbnkga2luZCBv ZiBvd25lcnNoaXAgdHJhY2tpbmcgaGFzIGJlZW4gbG9zdAphIGxvbmcgdGltZSBhZ28uIElmIHlv dSB0aGluayB0aGF0IHlvdSBzaG91bGQgYmUgb24gdGhlIHNvYiBsaXN0IGp1c3QgbGV0IG1lCmtu b3cuCgoqIHYyOiAoQ2hyaXMgV2lsc29uIC8gRGFuaWVsIFZldHRlcikKLSBTaW1wbHkgdXNlIHRo ZSBwcmV2aW91c2x5IHByaXZhdGUgZnVuY3Rpb24gaTkxNV9nZW1fcmVzZXRfcmluZ19zdGF0dXMo KSBmcm9tCiAgdGhlIGVuZ2luZSBoYW5nIHJlY292ZXJ5IHBhdGggdG8gc2V0IGFjdGl2ZS9wZW5k aW5nIGNvbnRleHQgc3RhdHVzLiBUaGlzCiAgcmVwbGljYXRlcyB0aGUgc2FtZSBiZWhhdmlvdXIg YXMgaW4gZnVsbCBHUFUgcmVzZXQgYnV0IGZvciBhIHNpbmdsZSwKICB0YXJnZXR0ZWQgZW5naW5l LgoKLSBSZW1vdmUgYWxsIGFkZGl0aW9uYWwgdWV2ZW50cyBmb3IgYm90aCBmdWxsIEdQVSByZXNl dCBhbmQgcGVyLWVuZ2luZSByZXNldC4KICBBZGFwdGVkIHVldmVudCBiZWhhdmlvdXIgdG8gdGhl IG5ldyBwZXItZW5naW5lIGhhbmcgcmVjb3ZlcnkgbW9kZSBpbiB0aGF0IGl0CiAgd2lsbCBvbmx5 IHNlbmQgb25lIHVldmVudCByZWdhcmRsZXNzIG9mIHdoaWNoIGZvcm0gb2YgcmVjb3ZlcnkgaXMg ZW1wbG95ZWQuCiAgSWYgYSBwZXItZW5naW5lIHJlc2V0IGlzIGF0dGVtcHRlZCBmaXJzdCB0aGVu IG9uZSB1ZXZlbnQgd2lsbCBiZSBkaXNwYXRjaGVkLgogIElmIHRoYXQgcmVjb3ZlcnkgbW9kZSBm YWlscyBhbmQgdGhlIGhhbmcgaXMgcHJvbW90ZWQgdG8gYSBmdWxsIEdQVSByZXNldCBubwogIGZ1 cnRoZXIgdWV2ZW50cyB3aWxsIGJlIGRpc3BhdGNoZWQgYXQgdGhhdCBwb2ludC4KCi0gUmVtb3Zl ZCB0aGUgMipIVU5HIGhhbmcgdGhyZXNob2xkIGZyb20gaTkxNV9oYW5nY2hlY2tfZWxhcHNlZCBp biBvcmRlciB0byBub3QKICBtYWtlIHRoZSBoYW5nIGRldGVjdGlvbiBhbGdvcml0aG0gdG9vIGNv bXBsaWNhdGVkLiBUaGlzIHRocmVzaG9sZCB3YXMKICBpbnRyb2R1Y2VkIHRvIGNvbXBlbnNhdGUg Zm9yIHRoZSBwb3NzaWJpbGl0eSB0aGF0IGhhbmcgcmVjb3ZlcnkgbWlnaHQgYmUKICBkZWxheWVk IGR1ZSB0byBpbmNvbnNpc3RlbnQgY29udGV4dCBzdWJtaXNzaW9uIHN0YXR1cyB0aGF0IHdvdWxk IHByZXZlbnQKICBwZXItZW5naW5lIGhhbmcgcmVjb3ZlcnkgZnJvbSBoYXBwZW5pbmcuIEluIGEg bGF0ZXIgcGF0Y2ggd2UgaW50cm9kdWNlIGZha2VkCiAgY29udGV4dCBldmVudCBpbnRlcnJ1cHRz IGFuZCBpbmNvbnNpc3RlbmN5IHJlY3RpZmljYXRpb24gYXQgdGhlIG9uc2V0IG9mCiAgcGVyLWVu Z2luZSBoYW5nIHJlY292ZXJ5IGluc3RlYWQgb2YgcmVseWluZyBvbiB0aGUgaGFuZyBjaGVja2Vy IHRvIGRvIHRoaXMKICBmb3IgdXMuIFRoZXJlZm9yZSwgc2luY2Ugd2UgZG8gbm90IGRlbGF5IGFu ZCBkZWZlciB0byBmdXR1cmUgaGFuZyBkZXRlY3Rpb25zLAogIHdlIG5ldmVyIGFsbG93IGhhbmdz IHRvIGdvIGFkZHJlc3NlZCBiZXlvbmQgdGhlIEhVTkcgdGhyZXNob2xkIGFuZAogIHRoZXJlZm9y ZSB0aGVyZSBpcyBubyBuZWVkIGZvciBhbnkgZnVydGhlciB0aHJlc2hvbGRzLgoKLSBUaWRpZWQg dXAgdGhlIFREUiBjb250ZXh0IHJlc3VibWlzc2lvbiBwYXRoIGluIGludGVsX2xyYy5jIC4gUmVk dWNlZCB0aGUKICBhbW91bnQgb2YgZHVwbGljYXRpb24gYnkgcmVseWluZyBlbnRpcmVseSBvbiB0 aGUgbm9ybWFsIHVucXVldWUgZnVuY3Rpb24uCiAgQWRkZWQgYSBuZXcgcGFyYW1ldGVyIHRvIHRo ZSB1bnF1ZXVlIGZ1bmN0aW9uIHRoYXQgdGFrZXMgaW50byBjb25zaWRlcmF0aW9uCiAgaWYgdGhl IHVucXVldWUgY2FsbCBpcyBmb3IgYSBmaXJzdC10aW1lIGNvbnRleHQgc3VibWlzc2lvbiBvciBh IHJlc3VibWlzc2lvbgogIGFuZCBhZGFwdHMgdGhlIGhhbmRsaW5nIG9mIGVsc3Bfc3VibWl0dGVk IGFjY29yZGluZ2x5LiBUaGUgcmVhc29uIGZvciB0aGlzIGlzCiAgdGhhdCBmb3IgY29udGV4dCBy ZXN1Ym1pc3Npb24gd2UgZG9uJ3QgZXhwZWN0IGFueSBmdXJ0aGVyIGludGVycnVwdHMgZm9yIHRo ZQogIHN1Ym1pc3Npb24gb3IgdGhlIGZvbGxvd2luZyBjb250ZXh0IGNvbXBsZXRpb24uIEEgbW9y ZSBlbGVnYW50IHdheSBvZgogIGhhbmRsaW5nIHRoaXMgd291bGQgYmUgdG8gcGhhc2Ugb3V0IGVs c3Bfc3VibWl0dGVkIGFsdG9nZXRoZXIsIGhvd2V2ZXIgdGhhdCdzCiAgcGFydCBvZiBhIExSQy9l eGVjbGlzdCBjbGVhbnVwIGVmZm9ydCB0aGF0IGlzIGhhcHBlbmluZyBpbmRlcGVuZGVudGx5IG9m IHRoaXMKICBSRkMuIEZvciBub3cgd2UgbWFrZSB0aGlzIGNoYW5nZSBhcyBzaW1wbGUgYXMgcG9z c2libGUgd2l0aCBhcyBmZXcKICBub24tVERSLXJlbGF0ZWQgc2lkZS1lZmZlY3RzIGFzIHBvc3Np YmxlLgoKU2lnbmVkLW9mZi1ieTogVG9tYXMgRWxmIDx0b21hcy5lbGZAaW50ZWwuY29tPgpTaWdu ZWQtb2ZmLWJ5OiBBcnVuIFNpbHV2ZXJ5IDxhcnVuLnNpbHV2ZXJ5QGludGVsLmNvbT4KU2lnbmVk LW9mZi1ieTogSWFuIExpc3RlciA8aWFuLmxpc3RlckBpbnRlbC5jb20+CkNjOiBDaHJpcyBXaWxz b24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KQ2M6IE1pa2EgS3VvcHBhbGEgPG1pa2Eua3Vv cHBhbGFAbGludXguaW50ZWwuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVi dWdmcy5jICAgICB8ICAgMiArLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYyAgICAg ICAgIHwgIDE4ICsrCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jICAgICAgICAgfCAx OTggKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oICAgICAgICAg fCAgNjMgKysrLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYyAgICAgICAgIHwgMTk5 ICsrKysrKysrKystLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wYXJhbXMuYyAgICAgIHwg IDEwICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmggICAgICAgICB8ICAgNiArCiBk cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuYyAgICAgICAgfCA1NTYgKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5oICAg ICAgICB8ICAxNCArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmNfdGRyLmggICAgfCAg MzYgKysrCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmMgfCAgODQgKysr Ky0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuaCB8ICA2NCArKysrCiBk cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF91bmNvcmUuYyAgICAgfCAxOTkgKysrKysrKysrKysr CiAxMyBmaWxlcyBjaGFuZ2VkLCAxNDAwIGluc2VydGlvbnMoKyksIDQ5IGRlbGV0aW9ucygtKQog Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyY190ZHIuaAoK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMKaW5kZXggODQ0NmVmNC4uZTMzZTEwNSAxMDA2 NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMKKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMKQEAgLTQxODMsNyArNDE4Myw3IEBAIGk5MTVf d2VkZ2VkX3NldCh2b2lkICpkYXRhLCB1NjQgdmFsKQogCiAJaW50ZWxfcnVudGltZV9wbV9nZXQo ZGV2X3ByaXYpOwogCi0JaTkxNV9oYW5kbGVfZXJyb3IoZGV2LCB2YWwsCisJaTkxNV9oYW5kbGVf ZXJyb3IoZGV2LCAweDAsIHZhbCwKIAkJCSAgIk1hbnVhbGx5IHNldHRpbmcgd2VkZ2VkIHRvICVs bHUiLCB2YWwpOwogCiAJaW50ZWxfcnVudGltZV9wbV9wdXQoZGV2X3ByaXYpOwpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZG1hLmMKaW5kZXggZTQ0MTE2Zi4uY2YwMWU4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9kbWEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rt YS5jCkBAIC03NzYsNiArNzc2LDIyIEBAIHN0YXRpYyB2b2lkIGludGVsX2RldmljZV9pbmZvX3J1 bnRpbWVfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogCQkJIGluZm8tPmhhc19ldV9wZyA/ ICJ5IiA6ICJuIik7CiB9CiAKK3N0YXRpYyB2b2lkCitpOTE1X2hhbmdjaGVja19pbml0KHN0cnVj dCBkcm1fZGV2aWNlICpkZXYpCit7CisJaW50IGk7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCWZvciAoaSA9IDA7IGkgPCBJOTE1X05V TV9SSU5HUzsgaSsrKSB7CisJCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSA9ICZkZXZf cHJpdi0+cmluZ1tpXTsKKwkJc3RydWN0IGludGVsX3JpbmdfaGFuZ2NoZWNrICpoYyA9ICZlbmdp bmUtPmhhbmdjaGVjazsKKworCQlpOTE1X2hhbmdjaGVja19yZWluaXQoZW5naW5lKTsKKwkJaGMt PnJlc2V0X2NvdW50ID0gMDsKKwkJaGMtPnRkcl9jb3VudCA9IDA7CisJfQorfQorCiAvKioKICAq IGk5MTVfZHJpdmVyX2xvYWQgLSBzZXR1cCBjaGlwIGFuZCBjcmVhdGUgYW4gaW5pdGlhbCBjb25m aWcKICAqIEBkZXY6IERSTSBkZXZpY2UKQEAgLTk1Niw2ICs5NzIsOCBAQCBpbnQgaTkxNV9kcml2 ZXJfbG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGZsYWdzKQogCiAJ aTkxNV9nZW1fbG9hZChkZXYpOwogCisJaTkxNV9oYW5nY2hlY2tfaW5pdChkZXYpOworCiAJLyog T24gdGhlIDk0NUcvR00sIHRoZSBjaGlwc2V0IHJlcG9ydHMgdGhlIE1TSSBjYXBhYmlsaXR5IG9u IHRoZQogCSAqIGludGVncmF0ZWQgZ3JhcGhpY3MgZXZlbiB0aG91Z2ggdGhlIHN1cHBvcnQgaXNu J3QgYWN0dWFsbHkgdGhlcmUKIAkgKiBhY2NvcmRpbmcgdG8gdGhlIHB1Ymxpc2hlZCBzcGVjcy4g IEl0IGRvZXNuJ3QgYXBwZWFyIHRvIGZ1bmN0aW9uCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwppbmRl eCBjM2ZkYmIwLi5jN2JhNjRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKQEAgLTM0LDYgKzM0 LDcgQEAKICNpbmNsdWRlICJpOTE1X2Rydi5oIgogI2luY2x1ZGUgImk5MTVfdHJhY2UuaCIKICNp bmNsdWRlICJpbnRlbF9kcnYuaCIKKyNpbmNsdWRlICJpbnRlbF9scmNfdGRyLmgiCiAKICNpbmNs dWRlIDxsaW51eC9jb25zb2xlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC01ODEs NiArNTgyLDcgQEAgc3RhdGljIGludCBpOTE1X2RybV9zdXNwZW5kKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYpCiAJc3RydWN0IGRybV9jcnRjICpjcnRjOwogCXBjaV9wb3dlcl90IG9wcmVnaW9uX3Rh cmdldF9zdGF0ZTsKIAlpbnQgZXJyb3I7CisJaW50IGk7CiAKIAkvKiBpZ25vcmUgbGlkIGV2ZW50 cyBkdXJpbmcgc3VzcGVuZCAqLwogCW11dGV4X2xvY2soJmRldl9wcml2LT5tb2Rlc2V0X3Jlc3Rv cmVfbG9jayk7CkBAIC02MDIsNiArNjA0LDE2IEBAIHN0YXRpYyBpbnQgaTkxNV9kcm1fc3VzcGVu ZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogCQlyZXR1cm4gZXJyb3I7CiAJfQogCisJLyoKKwkg KiBDbGVhciBhbnkgcGVuZGluZyByZXNldCByZXF1ZXN0cy4gVGhleSBzaG91bGQgYmUgcGlja2Vk IHVwCisJICogYWZ0ZXIgcmVzdW1lIHdoZW4gbmV3IHdvcmsgaXMgc3VibWl0dGVkCisJICovCisJ Zm9yIChpID0gMDsgaSA8IEk5MTVfTlVNX1JJTkdTOyBpKyspCisJCWF0b21pY19zZXQoJmRldl9w cml2LT5yaW5nW2ldLmhhbmdjaGVjay5mbGFncywgMCk7CisKKwlhdG9taWNfY2xlYXJfbWFzayhJ OTE1X1JFU0VUX0lOX1BST0dSRVNTX0ZMQUcsCisJCSZkZXZfcHJpdi0+Z3B1X2Vycm9yLnJlc2V0 X2NvdW50ZXIpOworCiAJaW50ZWxfc3VzcGVuZF9ndF9wb3dlcnNhdmUoZGV2KTsKIAogCS8qCkBA IC05MDUsNiArOTE3LDE5MiBAQCBpbnQgaTkxNV9yZXNldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 KQogCXJldHVybiAwOwogfQogCisvKioKKyAqIGk5MTVfcmVzZXRfZW5naW5lIC0gcmVzZXQgR1BV IGVuZ2luZSBhZnRlciBhIGhhbmcKKyAqIEBlbmdpbmU6IGVuZ2luZSB0byByZXNldAorICoKKyAq IFJlc2V0IGEgc3BlY2lmaWMgR1BVIGVuZ2luZS4gVXNlZnVsIGlmIGEgaGFuZyBpcyBkZXRlY3Rl ZC4gUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3NmdWwKKyAqIHJlc2V0IG9yIG90aGVyd2lzZSBhbiBl cnJvciBjb2RlLgorICoKKyAqIFByb2NlZHVyZSBpcyBmYWlybHkgc2ltcGxlOgorICoKKyAqCS0g Rm9yY2UgZW5naW5lIHRvIGlkbGUuCisgKgorICoJLSBTYXZlIGN1cnJlbnQgaGVhZCByZWdpc3Rl ciB2YWx1ZSBhbmQgbnVkZ2UgaXQgcGFzdCB0aGUgcG9pbnQgb2YgdGhlIGhhbmcgaW4gdGhlCisg KgkgIHJpbmcgYnVmZmVyLCB3aGljaCBpcyB0eXBpY2FsbHkgdGhlIEJCX1NUQVJUIGluc3RydWN0 aW9uIG9mIHRoZSBodW5nIGJhdGNoIGJ1ZmZlciwKKyAqCSAgb24gdG8gdGhlIGZvbGxvd2luZyBp bnN0cnVjdGlvbi4KKyAqCisgKgktIFJlc2V0IGVuZ2luZS4KKyAqCisgKgktIFJlc3RvcmUgdGhl IHByZXZpb3VzbHkgc2F2ZWQsIG51ZGdlZCBoZWFkIHJlZ2lzdGVyIHZhbHVlLgorICoKKyAqCS0g UmUtZW5hYmxlIGVuZ2luZSB0byByZXN1bWUgcnVubmluZy4gT24gZ2VuOCB0aGlzIHJlcXVpcmVz IHRoZSBwcmV2aW91c2x5IGh1bmcKKyAqCSAgY29udGV4dCB0byBiZSByZXN1Ym1pdHRlZCB0byBF TFNQIHZpYSB0aGUgZGVkaWNhdGVkIFREUi1leGVjbGlzdHMgaW50ZXJmYWNlLgorICoKKyAqLwor aW50IGk5MTVfcmVzZXRfZW5naW5lKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKK3sK KwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZW5naW5lLT5kZXY7CisJc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2k5MTVf Z2VtX3JlcXVlc3QgKmN1cnJlbnRfcmVxdWVzdCA9IE5VTEw7CisJdWludDMyX3QgaGVhZDsKKwli b29sIGZvcmNlX2FkdmFuY2UgPSBmYWxzZTsKKwlpbnQgcmV0ID0gMDsKKwlpbnQgZXJyX3JldCA9 IDA7CisKKwlXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoJmRldi0+c3RydWN0X211dGV4KSk7CisK KyAgICAgICAgLyogVGFrZSB3YWtlIGxvY2sgdG8gcHJldmVudCBwb3dlciBzYXZpbmcgbW9kZSAq LworCWludGVsX3VuY29yZV9mb3JjZXdha2VfZ2V0KGRldl9wcml2LCBGT1JDRVdBS0VfQUxMKTsK KworCWk5MTVfZ2VtX3Jlc2V0X3Jpbmdfc3RhdHVzKGRldl9wcml2LCBlbmdpbmUpOworCisJaWYg KGk5MTUuZW5hYmxlX2V4ZWNsaXN0cykgeworCQllbnVtIGNvbnRleHRfc3VibWlzc2lvbl9zdGF0 dXMgc3RhdHVzID0KKwkJCWludGVsX2V4ZWNsaXN0c19URFJfZ2V0X2N1cnJlbnRfcmVxdWVzdChl bmdpbmUsIE5VTEwpOworCisJCS8qCisJCSAqIElmIHRoZSBoYXJkd2FyZSBhbmQgZHJpdmVyIHN0 YXRlcyBkbyBub3QgY29pbmNpZGUKKwkJICogb3IgaWYgdGhlcmUgZm9yIHNvbWUgcmVhc29uIGlz IG5vIGN1cnJlbnQgY29udGV4dAorCQkgKiBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBzdWJtaXR0 ZWQgdGhlbiBiYWlsIG91dCBhbmQKKwkJICogdHJ5IGFnYWluLiBEbyBub3QgcHJvY2VlZCB1bmxl c3Mgd2UgaGF2ZSByZWxpYWJsZQorCQkgKiBjdXJyZW50IGNvbnRleHQgc3RhdGUgaW5mb3JtYXRp b24uCisJCSAqLworCQlpZiAoc3RhdHVzICE9IENPTlRFWFRfU1VCTUlTU0lPTl9TVEFUVVNfT0sp IHsKKwkJCXJldCA9IC1FQUdBSU47CisJCQlnb3RvIHJlc2V0X2VuZ2luZV9lcnJvcjsKKwkJfQor CX0KKworCXJldCA9IGludGVsX3JpbmdfZGlzYWJsZShlbmdpbmUpOworCWlmIChyZXQgIT0gMCkg eworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBkaXNhYmxlICVzXG4iLCBlbmdpbmUtPm5hbWUpOwor CQlnb3RvIHJlc2V0X2VuZ2luZV9lcnJvcjsKKwl9CisKKwlpZiAoaTkxNS5lbmFibGVfZXhlY2xp c3RzKSB7CisJCWVudW0gY29udGV4dF9zdWJtaXNzaW9uX3N0YXR1cyBzdGF0dXM7CisJCWJvb2wg aW5jb25zaXN0ZW50OworCisJCXN0YXR1cyA9IGludGVsX2V4ZWNsaXN0c19URFJfZ2V0X2N1cnJl bnRfcmVxdWVzdChlbmdpbmUsCisJCQkJJmN1cnJlbnRfcmVxdWVzdCk7CisKKwkJaW5jb25zaXN0 ZW50ID0gKHN0YXR1cyAhPSBDT05URVhUX1NVQk1JU1NJT05fU1RBVFVTX09LKTsKKwkJaWYgKGlu Y29uc2lzdGVudCkgeworCQkJLyoKKwkJCSAqIElmIHdlIHNvbWVob3cgaGF2ZSByZWFjaGVkIHRo aXMgcG9pbnQgd2l0aAorCQkJICogYW4gaW5jb25zaXN0ZW50IGNvbnRleHQgc3VibWlzc2lvbiBz dGF0dXMgdGhlbgorCQkJICogYmFjayBvdXQgb2YgdGhlIHByZXZpb3VzbHkgcmVxdWVzdGVkIHJl c2V0IGFuZAorCQkJICogcmV0cnkgbGF0ZXIuCisJCQkgKi8KKwkJCVdBUk4oaW5jb25zaXN0ZW50 LAorCQkJICAgICAiSW5jb25zaXN0ZW50IGNvbnRleHQgc3RhdHVzIG9uICVzOiAldVxuIiwKKwkJ CSAgICAgZW5naW5lLT5uYW1lLCBzdGF0dXMpOworCisJCQlyZXQgPSAtRUFHQUlOOworCQkJZ290 byByZWVuYWJsZV9yZXNldF9lbmdpbmVfZXJyb3I7CisJCX0KKwl9CisKKwkvKiBTYW1wbGUgdGhl IGN1cnJlbnQgcmluZyBoZWFkIHBvc2l0aW9uICovCisJaGVhZCA9IEk5MTVfUkVBRF9IRUFEKGVu Z2luZSkgJiBIRUFEX0FERFI7CisKKwlpZiAoaGVhZCA9PSBlbmdpbmUtPmhhbmdjaGVjay5sYXN0 X2hlYWQpIHsKKwkJLyoKKwkJICogVGhlIGVuZ2luZSBoYXMgbm90IGFkdmFuY2VkIHNpbmNlIHRo ZSBsYXN0CisJCSAqIHRpbWUgaXQgaHVuZyBzbyBmb3JjZSBpdCB0byBhZHZhbmNlIHRvIHRoZQor CQkgKiBuZXh0IFFXT1JELiBJbiBtb3N0IGNhc2VzIHRoZSBlbmdpbmUgaGVhZAorCQkgKiBwb2lu dGVyIHdpbGwgYXV0b21hdGljYWxseSBhZHZhbmNlIHRvIHRoZQorCQkgKiBuZXh0IGluc3RydWN0 aW9uIGFzIHNvb24gYXMgaXQgaGFzIHJlYWQgdGhlCisJCSAqIGN1cnJlbnQgaW5zdHJ1Y3Rpb24s IHdpdGhvdXQgd2FpdGluZyBmb3IgaXQKKwkJICogdG8gY29tcGxldGUuIFRoaXMgc2VlbXMgdG8g YmUgdGhlIGRlZmF1bHQKKwkJICogYmVoYXZpb3VyLCBob3dldmVyIGFuIE1CT1ggd2FpdCBpbnNl cnRlZAorCQkgKiBkaXJlY3RseSB0byB0aGUgVkNTL0JDUyBlbmdpbmVzIGRvZXMgbm90IGJlaGF2 ZQorCQkgKiBpbiB0aGUgc2FtZSB3YXksIGluc3RlYWQgdGhlIGhlYWQgcG9pbnRlcgorCQkgKiB3 aWxsIHN0aWxsIGJlIHBvaW50aW5nIGF0IHRoZSBNQk9YIGluc3RydWN0aW9uCisJCSAqIHVudGls IGl0IGNvbXBsZXRlcy4KKwkJICovCisJCWZvcmNlX2FkdmFuY2UgPSB0cnVlOworCX0KKworCWVu Z2luZS0+aGFuZ2NoZWNrLmxhc3RfaGVhZCA9IGhlYWQ7CisKKwlyZXQgPSBpbnRlbF9yaW5nX3Nh dmUoZW5naW5lLCBjdXJyZW50X3JlcXVlc3QsIGZvcmNlX2FkdmFuY2UpOworCWlmIChyZXQpIHsK KwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gc2F2ZSAlcyBlbmdpbmUgc3RhdGVcbiIsIGVuZ2luZS0+ bmFtZSk7CisJCWdvdG8gcmVlbmFibGVfcmVzZXRfZW5naW5lX2Vycm9yOworCX0KKworCXJldCA9 IGludGVsX2dwdV9lbmdpbmVfcmVzZXQoZW5naW5lKTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJP UigiRmFpbGVkIHRvIHJlc2V0ICVzXG4iLCBlbmdpbmUtPm5hbWUpOworCQlnb3RvIHJlZW5hYmxl X3Jlc2V0X2VuZ2luZV9lcnJvcjsKKwl9CisKKwlyZXQgPSBpbnRlbF9yaW5nX3Jlc3RvcmUoZW5n aW5lLCBjdXJyZW50X3JlcXVlc3QpOworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQg dG8gcmVzdG9yZSAlcyBlbmdpbmUgc3RhdGVcbiIsIGVuZ2luZS0+bmFtZSk7CisJCWdvdG8gcmVl bmFibGVfcmVzZXRfZW5naW5lX2Vycm9yOworCX0KKworCS8qIENvcnJlY3QgZHJpdmVyIHN0YXRl ICovCisJaW50ZWxfZ3B1X2VuZ2luZV9yZXNldF9yZXNhbXBsZShlbmdpbmUsIGN1cnJlbnRfcmVx dWVzdCk7CisKKwkvKgorCSAqIFJlZW5hYmxlIGVuZ2luZQorCSAqCisJICogSW4gZXhlY2xpc3Qg bW9kZSBvbiBnZW44KyB0aGlzIGlzIGltcGxpY2l0IGJ5IHNpbXBseSByZXN1Ym1pdHRpbmcKKwkg KiB0aGUgcHJldmlvdXNseSBodW5nIGNvbnRleHQuIEluIHJpbmcgYnVmZmVyIHN1Ym1pc3Npb24g bW9kZSBvbiBnZW43CisJICogYW5kIGVhcmxpZXIgd2UgbmVlZCB0byBhY3RpdmVseSB0dXJuIG9u IHRoZSBlbmdpbmUgZmlyc3QuCisJICovCisJaWYgKGk5MTUuZW5hYmxlX2V4ZWNsaXN0cykKKwkJ aW50ZWxfZXhlY2xpc3RzX1REUl9jb250ZXh0X3Jlc3VibWlzc2lvbihlbmdpbmUpOworCWVsc2UK KwkJcmV0ID0gaW50ZWxfcmluZ19lbmFibGUoZW5naW5lKTsKKworCWlmIChyZXQpIHsKKwkJRFJN X0VSUk9SKCJGYWlsZWQgdG8gZW5hYmxlICVzIGFnYWluIGFmdGVyIHJlc2V0XG4iLAorCQkJZW5n aW5lLT5uYW1lKTsKKworCQlnb3RvIHJlc2V0X2VuZ2luZV9lcnJvcjsKKwl9CisKKwkvKiBDbGVh ciByZXNldCBmbGFncyB0byBhbGxvdyBmdXR1cmUgaGFuZ2NoZWNrcyAqLworCWF0b21pY19zZXQo JmVuZ2luZS0+aGFuZ2NoZWNrLmZsYWdzLCAwKTsKKworCS8qIFdha2UgdXAgYW55dGhpbmcgd2Fp dGluZyBvbiB0aGlzIGVuZ2luZSdzIHF1ZXVlICovCisJd2FrZV91cF9hbGwoJmVuZ2luZS0+aXJx X3F1ZXVlKTsKKworCWlmIChpOTE1LmVuYWJsZV9leGVjbGlzdHMgJiYgY3VycmVudF9yZXF1ZXN0 KQorCQlpOTE1X2dlbV9yZXF1ZXN0X3VucmVmZXJlbmNlKGN1cnJlbnRfcmVxdWVzdCk7CisKKwlp bnRlbF91bmNvcmVfZm9yY2V3YWtlX3B1dChkZXZfcHJpdiwgRk9SQ0VXQUtFX0FMTCk7CisKKwly ZXR1cm4gcmV0OworCityZWVuYWJsZV9yZXNldF9lbmdpbmVfZXJyb3I6CisKKwllcnJfcmV0ID0g aW50ZWxfcmluZ19lbmFibGUoZW5naW5lKTsKKwlpZiAoZXJyX3JldCkKKwkJRFJNX0VSUk9SKCJG YWlsZWQgdG8gcmVlbmFibGUgJXMgZm9sbG93aW5nIGVycm9yIGR1cmluZyByZXNldCAoJWQpXG4i LAorCQkJZW5naW5lLT5uYW1lLCBlcnJfcmV0KTsKKworcmVzZXRfZW5naW5lX2Vycm9yOgorCisJ LyogQ2xlYXIgcmVzZXQgZmxhZ3MgdG8gYWxsb3cgZnV0dXJlIGhhbmdjaGVja3MgKi8KKwlhdG9t aWNfc2V0KCZlbmdpbmUtPmhhbmdjaGVjay5mbGFncywgMCk7CisKKwkvKiBXYWtlIHVwIGFueXRo aW5nIHdhaXRpbmcgb24gdGhpcyBlbmdpbmUncyBxdWV1ZSAqLworCXdha2VfdXBfYWxsKCZlbmdp bmUtPmlycV9xdWV1ZSk7CisKKwlpZiAoaTkxNS5lbmFibGVfZXhlY2xpc3RzICYmIGN1cnJlbnRf cmVxdWVzdCkKKwkJaTkxNV9nZW1fcmVxdWVzdF91bnJlZmVyZW5jZShjdXJyZW50X3JlcXVlc3Qp OworCisJaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9wdXQoZGV2X3ByaXYsIEZPUkNFV0FLRV9BTEwp OworCisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIGludCBpOTE1X3BjaV9wcm9iZShzdHJ1Y3Qg cGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKIAlzdHJ1 Y3QgaW50ZWxfZGV2aWNlX2luZm8gKmludGVsX2luZm8gPQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgK aW5kZXggYzMyYzUwMi4uYmU0Yzk1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCkBAIC0yMjgw LDYgKzIyODAsNDggQEAgc3RydWN0IGRybV9pOTE1X2NtZF90YWJsZSB7CiAJaW50IGNvdW50Owog fTsKIAorLyoKKyAqIENvbnRleHQgc3VibWlzc2lvbiBzdGF0dXMKKyAqCisgKiBDT05URVhUX1NV Qk1JU1NJT05fU1RBVFVTX09LOgorICoJQ29udGV4dCBzdWJtaXR0ZWQgdG8gRUxTUCBhbmQgc3Rh dGUgb2YgZXhlY2xpc3QgcXVldWUgaXMgdGhlIHNhbWUgYXMKKyAqCXRoZSBzdGF0ZSBvZiBFWEVD TElTVF9TVEFUVVMgcmVnaXN0ZXIuIFNvZnR3YXJlIGFuZCBoYXJkd2FyZSBzdGF0ZXMKKyAqCWFy ZSBjb25zaXN0ZW50IGFuZCBjYW4gYmUgdHJ1c3RlZC4KKyAqCisgKiBDT05URVhUX1NVQk1JU1NJ T05fU1RBVFVTX0lOQ09OU0lTVEVOVDoKKyAqCUNvbnRleHQgaGFzIGJlZW4gc3VibWl0dGVkIHRv IHRoZSBleGVjbGlzdCBxdWV1ZSBidXQgdGhlIHN0YXRlIG9mIHRoZQorICoJRVhFQ0xJU1RfU1RB VFVTIHJlZ2lzdGVyIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBleGVjbGlzdCBxdWV1ZSBzdGF0ZS4K KyAqCVRoaXMgY291bGQgbWVhbiBhbnkgb2YgdGhlIGZvbGxvd2luZzoKKyAqCisgKgkJMS4gVGhl IGNvbnRleHQgaXMgaW4gdGhlIGhlYWQgcG9zaXRpb24gb2YgdGhlIGV4ZWNsaXN0IHF1ZXVlCisg KgkJICAgYnV0IGhhcyBub3QgeWV0IGJlZW4gc3VibWl0dGVkIHRvIEVMU1AuCisgKgorICoJCTIu IFRoZSBoYXJkd2FyZSBqdXN0IHJlY2VudGx5IGNvbXBsZXRlZCB0aGUgY29udGV4dCBidXQgdGhl CisgKgkJICAgY29udGV4dCBpcyBwZW5kaW5nIHJlbW92YWwgZnJvbSB0aGUgZXhlY2xpc3QgcXVl dWUuCisgKgorICoJCTMuIFRoZSBkcml2ZXIgaGFzIGxvc3QgYSBjb250ZXh0IHN0YXRlIHRyYW5z aXRpb24gaW50ZXJydXB0LgorICoJCSAgIFR5cGljYWxseSB3aGF0IHRoaXMgbWVhbnMgaXMgdGhh dCBoYXJkd2FyZSBoYXMgY29tcGxldGVkIGFuZAorICoJCSAgIGlzIG5vdyBpZGxlIGJ1dCB0aGUg ZHJpdmVyIHRoaW5rcyB0aGUgaGFyZHdhcmUgaXMgc3RpbGwKKyAqCQkgICBidXN5LgorICoKKyAq CU92ZXJhbGwgd2hhdCB0aGlzIG1lYW5zIGlzIHRoYXQgdGhlIGNvbnRleHQgc3VibWlzc2lvbiBz dGF0dXMgaXMKKyAqCWN1cnJlbnRseSBpbiB0cmFuc2l0aW9uIGFuZCBjYW5ub3QgYmUgdHJ1c3Rl ZCB1bnRpbCBpdCBzZXR0bGVzIGRvd24uCisgKgorICogQ09OVEVYVF9TVUJNSVNTSU9OX1NUQVRV U19OT05FX1NVQk1JVFRFRDoKKyAqCU5vIGNvbnRleHQgc3VibWl0dGVkIHRvIHRoZSBleGVjbGlz dCBxdWV1ZSBhbmQgdGhlIEVYRUNMSVNUX1NUQVRVUworICoJcmVnaXN0ZXIgc2hvd3Mgbm8gY29u dGV4dCBiZWluZyBwcm9jZXNzZWQuCisgKgorICogQ09OVEVYVF9TVUJNSVNTSU9OX1NUQVRVU19O T05FX1VOREVGSU5FRDoKKyAqCUluaXRpYWwgc3RhdGUgYmVmb3JlIHN1Ym1pc3Npb24gc3RhdHVz IGhhcyBiZWVuIGRldGVybWluZWQuCisgKgorICovCitlbnVtIGNvbnRleHRfc3VibWlzc2lvbl9z dGF0dXMgeworCUNPTlRFWFRfU1VCTUlTU0lPTl9TVEFUVVNfT0sgPSAwLAorCUNPTlRFWFRfU1VC TUlTU0lPTl9TVEFUVVNfSU5DT05TSVNURU5ULAorCUNPTlRFWFRfU1VCTUlTU0lPTl9TVEFUVVNf Tk9ORV9TVUJNSVRURUQsCisJQ09OVEVYVF9TVUJNSVNTSU9OX1NUQVRVU19VTkRFRklORUQKK307 CisKIC8qIE5vdGUgdGhhdCB0aGUgKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICopIGNhc3QgaXMg anVzdCB0byBzaHV0IHVwIGdjYy4gKi8KICNkZWZpbmUgX19JOTE1X18ocCkgKHsgXAogCXN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpfX3A7IFwKQEAgLTI0NzgsNiArMjUyMCw3IEBAIHN0cnVjdCBp OTE1X3BhcmFtcyB7CiAJaW50IGVuYWJsZV9pcHM7CiAJaW50IGludmVydF9icmlnaHRuZXNzOwog CWludCBlbmFibGVfY21kX3BhcnNlcjsKKwl1bnNpZ25lZCBpbnQgZ3B1X3Jlc2V0X3Byb21vdGlv bl90aW1lOwogCS8qIGxlYXZlIGJvb2xzIGF0IHRoZSBlbmQgdG8gbm90IGNyZWF0ZSBob2xlcyAq LwogCWJvb2wgZW5hYmxlX2hhbmdjaGVjazsKIAlib29sIGZhc3Rib290OwpAQCAtMjUwOCwxOCAr MjU1MSwzNCBAQCBleHRlcm4gbG9uZyBpOTE1X2NvbXBhdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmls cCwgdW5zaWduZWQgaW50IGNtZCwKIAkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYXJnKTsKICNlbmRp ZgogZXh0ZXJuIGludCBpbnRlbF9ncHVfcmVzZXQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Citl eHRlcm4gaW50IGludGVsX2dwdV9lbmdpbmVfcmVzZXQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAq ZW5naW5lKTsKK2V4dGVybiBpbnQgaW50ZWxfcmVxdWVzdF9ncHVfZW5naW5lX3Jlc2V0KHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSk7CitleHRlcm4gaW50IGludGVsX3VucmVxdWVzdF9n cHVfZW5naW5lX3Jlc2V0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSk7CiBleHRlcm4g aW50IGk5MTVfcmVzZXQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CitleHRlcm4gaW50IGk5MTVf cmVzZXRfZW5naW5lKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSk7CiBleHRlcm4gdW5z aWduZWQgbG9uZyBpOTE1X2NoaXBzZXRfdmFsKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdik7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBpOTE1X21jaF92YWwoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2KTsKIGV4dGVybiB1bnNpZ25lZCBsb25nIGk5MTVfZ2Z4X3ZhbChz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwogZXh0ZXJuIHZvaWQgaTkxNV91cGRh dGVfZ2Z4X3ZhbChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwogaW50IHZsdl9m b3JjZV9nZnhfY2xvY2soc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBib29sIG9u KTsKIHZvaWQgaW50ZWxfaHBkX2NhbmNlbF93b3JrKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdik7CitzdGF0aWMgaW5saW5lIHZvaWQgaTkxNV9oYW5nY2hlY2tfcmVpbml0KHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKK3sKKwlzdHJ1Y3QgaW50ZWxfcmluZ19oYW5nY2hl Y2sgKmhjID0gJmVuZ2luZS0+aGFuZ2NoZWNrOworCisJaGMtPmFjdGhkID0gMDsKKwloYy0+bWF4 X2FjdGhkID0gMDsKKwloYy0+c2Vxbm8gPSAwOworCWhjLT5zY29yZSA9IDA7CisJaGMtPmFjdGlv biA9IEhBTkdDSEVDS19JRExFOworCWhjLT5kZWFkbG9jayA9IDA7Cit9CisKIAogLyogaTkxNV9p cnEuYyAqLwogdm9pZCBpOTE1X3F1ZXVlX2hhbmdjaGVjayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 KTsKLV9fcHJpbnRmKDMsIDQpCi12b2lkIGk5MTVfaGFuZGxlX2Vycm9yKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsIGJvb2wgd2VkZ2VkLAorX19wcmludGYoNCwgNSkKK3ZvaWQgaTkxNV9oYW5kbGVf ZXJyb3Ioc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdTMyIGVuZ2luZV9tYXNrLCBib29sIHdlZGdl ZCwKIAkJICAgICAgIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKIAogZXh0ZXJuIHZvaWQgaW50ZWxf aXJxX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2lycS5jCmluZGV4IDRlOGU3MjIuLmU4Njk4MjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfaXJxLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEu YwpAQCAtMjMxMiwxMCArMjMxMiw3MCBAQCBzdGF0aWMgdm9pZCBpOTE1X3Jlc2V0X2FuZF93YWtl dXAoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIAljaGFyICplcnJvcl9ldmVudFtdID0geyBJOTE1 X0VSUk9SX1VFVkVOVCAiPTEiLCBOVUxMIH07CiAJY2hhciAqcmVzZXRfZXZlbnRbXSA9IHsgSTkx NV9SRVNFVF9VRVZFTlQgIj0xIiwgTlVMTCB9OwogCWNoYXIgKnJlc2V0X2RvbmVfZXZlbnRbXSA9 IHsgSTkxNV9FUlJPUl9VRVZFTlQgIj0wIiwgTlVMTCB9OwotCWludCByZXQ7CisJYm9vbCByZXNl dF9jb21wbGV0ZSA9IGZhbHNlOworCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmc7CisJaW50 IHJldCA9IDA7CisJaW50IGk7CisKKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAK IAlrb2JqZWN0X3VldmVudF9lbnYoJmRldi0+cHJpbWFyeS0+a2Rldi0+a29iaiwgS09CSl9DSEFO R0UsIGVycm9yX2V2ZW50KTsKIAorCWZvcl9lYWNoX3JpbmcocmluZywgZGV2X3ByaXYsIGkpIHsK KworCQkvKgorCQkgKiBTa2lwIGZ1cnRoZXIgaW5kaXZpZHVhbCBlbmdpbmUgcmVzZXQgcmVxdWVz dHMgaWYgZnVsbCBHUFUKKwkJICogcmVzZXQgcmVxdWVzdGVkLgorCQkgKi8KKwkJaWYgKGk5MTVf cmVzZXRfaW5fcHJvZ3Jlc3MoZXJyb3IpKQorCQkJYnJlYWs7CisKKwkJaWYgKGF0b21pY19yZWFk KCZyaW5nLT5oYW5nY2hlY2suZmxhZ3MpICYKKwkJCUk5MTVfRU5HSU5FX1JFU0VUX0lOX1BST0dS RVNTKSB7CisKKwkJCWlmICghcmVzZXRfY29tcGxldGUpCisJCQkJa29iamVjdF91ZXZlbnRfZW52 KCZkZXYtPnByaW1hcnktPmtkZXYtPmtvYmosCisJCQkJCQkgICBLT0JKX0NIQU5HRSwKKwkJCQkJ CSAgIHJlc2V0X2V2ZW50KTsKKworCQkJcmVzZXRfY29tcGxldGUgPSB0cnVlOworCisJCQlyZXQg PSBpOTE1X3Jlc2V0X2VuZ2luZShyaW5nKTsKKworCQkJLyoKKwkJCSAqIEV4ZWNsaXN0IG1vZGUg b25seToKKwkJCSAqCisJCQkgKiAtRUFHQUlOIG1lYW5zIHRoYXQgYmV0d2VlbiBkZXRlY3Rpbmcg YSBoYW5nIChhbmQKKwkJCSAqIGFsc28gZGV0ZXJtaW5pbmcgdGhhdCB0aGUgY3VycmVudGx5IHN1 Ym1pdHRlZAorCQkJICogY29udGV4dCBpcyBzdGFibGUgYW5kIHZhbGlkKSBhbmQgdHJ5aW5nIHRv IHJlY292ZXIKKwkJCSAqIGZyb20gdGhlIGhhbmcgdGhlIGN1cnJlbnQgY29udGV4dCBjaGFuZ2Vk IHN0YXRlLgorCQkJICogVGhpcyBtZWFucyB0aGF0IHdlIGFyZSBwcm9iYWJseSBub3QgY29tcGxl dGVseSBodW5nCisJCQkgKiBhZnRlciBhbGwuIEp1c3QgZmFpbCBhbmQgcmV0cnkgYnkgZXhpdGlu ZyBhbGwgdGhlCisJCQkgKiB3YXkgYmFjayBhbmQgd2FpdCBmb3IgdGhlIG5leHQgaGFuZyBkZXRl Y3Rpb24uIElmIHdlCisJCQkgKiBoYXZlIGEgdHJ1ZSBoYW5nIG9uIG91ciBoYW5kcyB0aGVuIHdl IHdpbGwgZGV0ZWN0IGl0CisJCQkgKiBhZ2Fpbiwgb3RoZXJ3aXNlIHdlIHdpbGwgY29udGludWUg bGlrZSBub3RoaW5nCisJCQkgKiBoYXBwZW5lZC4KKwkJCSAqLworCQkJaWYgKHJldCA9PSAtRUFH QUlOKSB7CisJCQkJRFJNX0VSUk9SKCJSZXNldCBvZiAlcyBhYm9ydGVkIGR1ZSB0byAiIFwKKwkJ CQkJICAiY2hhbmdlIGluIGNvbnRleHQgc3VibWlzc2lvbiAiIFwKKwkJCQkJICAic3RhdGUgLSBy ZXRyeWluZyEiLCByaW5nLT5uYW1lKTsKKwkJCQlyZXQgPSAwOworCQkJfQorCisJCQlpZiAocmV0 KSB7CisJCQkJRFJNX0VSUk9SKCJSZXNldCBvZiAlcyBmYWlsZWQhICglZCkiLCByaW5nLT5uYW1l LCByZXQpOworCisJCQkJYXRvbWljX3NldF9tYXNrKEk5MTVfUkVTRVRfSU5fUFJPR1JFU1NfRkxB RywKKwkJCQkJCSZkZXZfcHJpdi0+Z3B1X2Vycm9yLnJlc2V0X2NvdW50ZXIpOworCQkJCWJyZWFr OworCQkJfQorCQl9CisJfQorCisJLyogVGhlIGZ1bGwgR1BVIHJlc2V0IHdpbGwgZ3JhYiB0aGUg c3RydWN0X211dGV4IHdoZW4gaXQgbmVlZHMgaXQgKi8KKwltdXRleF91bmxvY2soJmRldi0+c3Ry dWN0X211dGV4KTsKKwogCS8qCiAJICogTm90ZSB0aGF0IHRoZXJlJ3Mgb25seSBvbmUgd29yayBp dGVtIHdoaWNoIGRvZXMgZ3B1IHJlc2V0cywgc28gd2UKIAkgKiBuZWVkIG5vdCB3b3JyeSBhYm91 dCBjb25jdXJyZW50IGdwdSByZXNldHMgcG90ZW50aWFsbHkgaW5jcmVtZW50aW5nCkBAIC0yMzI4 LDggKzIzODgsMTMgQEAgc3RhdGljIHZvaWQgaTkxNV9yZXNldF9hbmRfd2FrZXVwKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYpCiAJICovCiAJaWYgKGk5MTVfcmVzZXRfaW5fcHJvZ3Jlc3MoZXJyb3Ip ICYmICFpOTE1X3Rlcm1pbmFsbHlfd2VkZ2VkKGVycm9yKSkgewogCQlEUk1fREVCVUdfRFJJVkVS KCJyZXNldHRpbmcgY2hpcFxuIik7Ci0JCWtvYmplY3RfdWV2ZW50X2VudigmZGV2LT5wcmltYXJ5 LT5rZGV2LT5rb2JqLCBLT0JKX0NIQU5HRSwKLQkJCQkgICByZXNldF9ldmVudCk7CisKKwkJaWYg KCFyZXNldF9jb21wbGV0ZSkKKwkJCWtvYmplY3RfdWV2ZW50X2VudigmZGV2LT5wcmltYXJ5LT5r ZGV2LT5rb2JqLAorCQkJCQkgICBLT0JKX0NIQU5HRSwKKwkJCQkJICAgcmVzZXRfZXZlbnQpOwor CisJCXJlc2V0X2NvbXBsZXRlID0gdHJ1ZTsKIAogCQkvKgogCQkgKiBJbiBtb3N0IGNhc2VzIGl0 J3MgZ3VhcmFudGVlZCB0aGF0IHdlIGdldCBoZXJlIHdpdGggYW4gUlBNCkBAIC0yMzYyLDIzICsy NDI3LDM2IEBAIHN0YXRpYyB2b2lkIGk5MTVfcmVzZXRfYW5kX3dha2V1cChzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2KQogCQkJICoKIAkJCSAqIFNpbmNlIHVubG9jayBvcGVyYXRpb25zIGFyZSBhIG9u ZS1zaWRlZCBiYXJyaWVyIG9ubHksCiAJCQkgKiB3ZSBuZWVkIHRvIGluc2VydCBhIGJhcnJpZXIg aGVyZSB0byBvcmRlciBhbnkgc2Vxbm8KLQkJCSAqIHVwZGF0ZXMgYmVmb3JlCi0JCQkgKiB0aGUg Y291bnRlciBpbmNyZW1lbnQuCisJCQkgKiB1cGRhdGVzIGJlZm9yZSB0aGUgY291bnRlciBpbmNy ZW1lbnQuCisJCQkgKgorCQkJICogVGhlIGluY3JlbWVudCBjbGVhcnMgSTkxNV9SRVNFVF9JTl9Q Uk9HUkVTU19GTEFHLgogCQkJICovCiAJCQlzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTsKIAkJCWF0 b21pY19pbmMoJmRldl9wcml2LT5ncHVfZXJyb3IucmVzZXRfY291bnRlcik7CiAKLQkJCWtvYmpl Y3RfdWV2ZW50X2VudigmZGV2LT5wcmltYXJ5LT5rZGV2LT5rb2JqLAotCQkJCQkgICBLT0JKX0NI QU5HRSwgcmVzZXRfZG9uZV9ldmVudCk7CisJCQkvKgorCQkJICogSWYgYW55IHBlci1lbmdpbmUg cmVzZXRzIHdlcmUgcHJvbW90ZWQgdG8gZnVsbCBHUFUKKwkJCSAqIHJlc2V0IGRvbid0IGZvcmdl dCB0byBjbGVhciB0aG9zZSByZXNldCBmbGFncy4KKwkJCSAqLworCQkJZm9yX2VhY2hfcmluZyhy aW5nLCBkZXZfcHJpdiwgaSkKKwkJCQlhdG9taWNfc2V0KCZyaW5nLT5oYW5nY2hlY2suZmxhZ3Ms IDApOwogCQl9IGVsc2UgeworCQkJLyogVGVybWluYWwgd2VkZ2UgY29uZGl0aW9uICovCisJCQlX QVJOKDEsICJpOTE1X3Jlc2V0IGZhaWxlZCwgZGVjbGFyaW5nIEdQVSBhcyB3ZWRnZWQhXG4iKTsK IAkJCWF0b21pY19zZXRfbWFzayhJOTE1X1dFREdFRCwgJmVycm9yLT5yZXNldF9jb3VudGVyKTsK IAkJfQorCX0KIAotCQkvKgotCQkgKiBOb3RlOiBUaGUgd2FrZV91cCBhbHNvIHNlcnZlcyBhcyBh IG1lbW9yeSBiYXJyaWVyIHNvIHRoYXQKLQkJICogd2FpdGVycyBzZWUgdGhlIHVwZGF0ZSB2YWx1 ZSBvZiB0aGUgcmVzZXQgY291bnRlciBhdG9taWNfdC4KLQkJICovCisJLyoKKwkgKiBOb3RlOiBU aGUgd2FrZV91cCBhbHNvIHNlcnZlcyBhcyBhIG1lbW9yeSBiYXJyaWVyIHNvIHRoYXQKKwkgKiB3 YWl0ZXJzIHNlZSB0aGUgdXBkYXRlIHZhbHVlIG9mIHRoZSByZXNldCBjb3VudGVyIGF0b21pY190 LgorCSAqLworCWlmIChyZXNldF9jb21wbGV0ZSkgewogCQlpOTE1X2Vycm9yX3dha2VfdXAoZGV2 X3ByaXYsIHRydWUpOworCisJCWlmIChyZXQgPT0gMCkKKwkJCWtvYmplY3RfdWV2ZW50X2Vudigm ZGV2LT5wcmltYXJ5LT5rZGV2LT5rb2JqLAorCQkJCQkgICBLT0JKX0NIQU5HRSwgcmVzZXRfZG9u ZV9ldmVudCk7CiAJfQogfQogCkBAIC0yNDc2LDIxICsyNTU0LDQyIEBAIHN0YXRpYyB2b2lkIGk5 MTVfcmVwb3J0X2FuZF9jbGVhcl9laXIoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIAogLyoqCiAg KiBpOTE1X2hhbmRsZV9lcnJvciAtIGhhbmRsZSBhIGdwdSBlcnJvcgotICogQGRldjogZHJtIGRl dmljZQogICoKLSAqIERvIHNvbWUgYmFzaWMgY2hlY2tpbmcgb2YgcmVnc2l0ZXIgc3RhdGUgYXQg ZXJyb3IgdGltZSBhbmQKKyAqIEBkZXY6IAkJZHJtIGRldmljZQorICoKKyAqIEBlbmdpbmVfbWFz azogCUJpdCBtYXNrIGNvbnRhaW5pbmcgdGhlIGVuZ2luZSBmbGFncyBvZiBhbGwgZW5naW5lcwor ICoJCQlhc3NvY2lhdGVkIHdpdGggb25lIG9yIG1vcmUgZGV0ZWN0ZWQgZXJyb3JzLgorICoJCQlN YXkgYmUgMHgwLgorICoKKyAqCQkJSWYgd2VkZ2VkIGlzIHNldCB0byB0cnVlIHRoaXMgaW1wbGll cyB0aGF0IG9uZSBvciBtb3JlCisgKgkJCWVuZ2luZSBoYW5ncyB3ZXJlIGRldGVjdGVkLiBJbiB0 aGlzIGNhc2Ugd2Ugd2lsbAorICoJCQlhdHRlbXB0IHRvIHJlc2V0IGFsbCBlbmdpbmVzIHRoYXQg aGF2ZSBiZWVuIGRldGVjdGVkCisgKgkJCWFzIGh1bmcuCisgKgorICoJCQlJZiBhIHByZXZpb3Vz IGVuZ2luZSByZXNldCB3YXMgYXR0ZW1wdGVkIHRvbyByZWNlbnRseQorICoJCQlvciBpZiBvbmUg b2YgdGhlIGN1cnJlbnQgZW5naW5lIHJlc2V0cyBmYWlscyB3ZSBmYWxsCisgKgkJCWJhY2sgdG8g bGVnYWN5IGZ1bGwgR1BVIHJlc2V0LgorICoKKyAqIEB3ZWRnZWQ6IAkJdHJ1ZSA9IEhhbmcgZGV0 ZWN0ZWQsIGludm9rZSBoYW5nIHJlY292ZXJ5LgorICogQGZtdCwgLi4uOiAJCUVycm9yIG1lc3Nh Z2UgZGVzY3JpYmluZyByZWFzb24gZm9yIGVycm9yLgorICoKKyAqIERvIHNvbWUgYmFzaWMgY2hl Y2tpbmcgb2YgcmVnaXN0ZXIgc3RhdGUgYXQgZXJyb3IgdGltZSBhbmQKICAqIGR1bXAgaXQgdG8g dGhlIHN5c2xvZy4gIEFsc28gY2FsbCBpOTE1X2NhcHR1cmVfZXJyb3Jfc3RhdGUoKSB0byBtYWtl CiAgKiBzdXJlIHdlIGdldCBhIHJlY29yZCBhbmQgbWFrZSBpdCBhdmFpbGFibGUgaW4gZGVidWdm cy4gIEZpcmUgYSB1ZXZlbnQKICAqIHNvIHVzZXJzcGFjZSBrbm93cyBzb21ldGhpbmcgYmFkIGhh cHBlbmVkIChzaG91bGQgdHJpZ2dlciBjb2xsZWN0aW9uCi0gKiBvZiBhIHJpbmcgZHVtcCBldGMu KS4KKyAqIG9mIGEgcmluZyBkdW1wIGV0Yy4pLiBJZiBhIGhhbmcgd2FzIGRldGVjdGVkICh3ZWRn ZWQgPSB0cnVlKSB0cnkgdG8KKyAqIHJlc2V0IHRoZSBhc3NvY2lhdGVkIGVuZ2luZS4gRmFpbGlu ZyB0aGF0LCB0cnkgdG8gZmFsbCBiYWNrIHRvIGxlZ2FjeQorICogZnVsbCBHUFUgcmVzZXQgcmVj b3ZlcnkgbW9kZS4KICAqLwotdm9pZCBpOTE1X2hhbmRsZV9lcnJvcihzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2LCBib29sIHdlZGdlZCwKK3ZvaWQgaTkxNV9oYW5kbGVfZXJyb3Ioc3RydWN0IGRybV9k ZXZpY2UgKmRldiwgdTMyIGVuZ2luZV9tYXNrLCBib29sIHdlZGdlZCwKIAkJICAgICAgIGNvbnN0 IGNoYXIgKmZtdCwgLi4uKQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9 IGRldi0+ZGV2X3ByaXZhdGU7CiAJdmFfbGlzdCBhcmdzOwogCWNoYXIgZXJyb3JfbXNnWzgwXTsK IAorCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKKwogCXZhX3N0YXJ0KGFyZ3MsIGZt dCk7CiAJdnNjbnByaW50ZihlcnJvcl9tc2csIHNpemVvZihlcnJvcl9tc2cpLCBmbXQsIGFyZ3Mp OwogCXZhX2VuZChhcmdzKTsKQEAgLTI0OTksOCArMjU5OCw1OSBAQCB2b2lkIGk5MTVfaGFuZGxl X2Vycm9yKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGJvb2wgd2VkZ2VkLAogCWk5MTVfcmVwb3J0 X2FuZF9jbGVhcl9laXIoZGV2KTsKIAogCWlmICh3ZWRnZWQpIHsKLQkJYXRvbWljX3NldF9tYXNr KEk5MTVfUkVTRVRfSU5fUFJPR1JFU1NfRkxBRywKLQkJCQkmZGV2X3ByaXYtPmdwdV9lcnJvci5y ZXNldF9jb3VudGVyKTsKKwkJLyoKKwkJICogRGVmZXIgdG8gZnVsbCBHUFUgcmVzZXQgaWYgYW55 IG9mIHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZToKKwkJICogCTEuIFRoZSBjYWxsZXIgZGlkIG5vdCBh c2sgZm9yIHBlci1lbmdpbmUgcmVzZXQuCisJCSAqCTIuIFRoZSBoYXJkd2FyZSBkb2VzIG5vdCBz dXBwb3J0IGl0IChwcmUtZ2VuNykuCisJCSAqCTMuIFdlIGFscmVhZHkgdHJpZWQgcGVyLWVuZ2lu ZSByZXNldCByZWNlbnRseS4KKwkJICovCisJCWJvb2wgZnVsbF9yZXNldCA9IHRydWU7CisKKwkJ LyoKKwkJICogVEJEOiBXZSBjdXJyZW50bHkgb25seSBzdXBwb3J0IHBlci1lbmdpbmUgcmVzZXQg Zm9yIGdlbjgrLgorCQkgKiBJbXBsZW1lbnQgc3VwcG9ydCBmb3IgZ2VuNy4KKwkJICovCisJCWlm IChlbmdpbmVfbWFzayAmJiAoSU5URUxfSU5GTyhkZXYpLT5nZW4gPj0gOCkpIHsKKwkJCXUzMiBp OworCisJCQlmb3JfZWFjaF9yaW5nKGVuZ2luZSwgZGV2X3ByaXYsIGkpIHsKKwkJCQl1MzIgbm93 LCBsYXN0X2VuZ2luZV9yZXNldF90aW1lZGlmZjsKKworCQkJCWlmICghKGludGVsX3JpbmdfZmxh ZyhlbmdpbmUpICYgZW5naW5lX21hc2spKQorCQkJCQljb250aW51ZTsKKworCQkJCS8qIE1lYXN1 cmUgdGhlIHRpbWUgc2luY2UgdGhpcyBlbmdpbmUgd2FzIGxhc3QgcmVzZXQgKi8KKwkJCQlub3cg PSBnZXRfc2Vjb25kcygpOworCQkJCWxhc3RfZW5naW5lX3Jlc2V0X3RpbWVkaWZmID0KKwkJCQkJ bm93IC0gZW5naW5lLT5oYW5nY2hlY2subGFzdF9lbmdpbmVfcmVzZXRfdGltZTsKKworCQkJCWZ1 bGxfcmVzZXQgPSBsYXN0X2VuZ2luZV9yZXNldF90aW1lZGlmZiA8CisJCQkJCWk5MTUuZ3B1X3Jl c2V0X3Byb21vdGlvbl90aW1lOworCisJCQkJZW5naW5lLT5oYW5nY2hlY2subGFzdF9lbmdpbmVf cmVzZXRfdGltZSA9IG5vdzsKKworCQkJCS8qCisJCQkJICogVGhpcyBlbmdpbmUgd2FzIG5vdCBy ZXNldCB0b28gcmVjZW50bHkgLSBnbyBhaGVhZAorCQkJCSAqIHdpdGggZW5naW5lIHJlc2V0IGlu c3RlYWQgb2YgZmFsbGluZyBiYWNrIHRvIGZ1bGwKKwkJCQkgKiBHUFUgcmVzZXQuCisJCQkJICoK KwkJCQkgKiBGbGFnIHRoYXQgd2Ugd2FudCB0byB0cnkgYW5kIHJlc2V0IHRoaXMgZW5naW5lLgor CQkJCSAqIFRoaXMgY2FuIHN0aWxsIGJlIG92ZXJyaWRkZW4gYnkgYSBnbG9iYWwKKwkJCQkgKiBy ZXNldCBlLmcuIGlmIHBlci1lbmdpbmUgcmVzZXQgZmFpbHMuCisJCQkJICovCisJCQkJaWYgKCFm dWxsX3Jlc2V0KQorCQkJCQlhdG9taWNfc2V0X21hc2soSTkxNV9FTkdJTkVfUkVTRVRfSU5fUFJP R1JFU1MsCisJCQkJCQkmZW5naW5lLT5oYW5nY2hlY2suZmxhZ3MpOworCQkJCWVsc2UKKwkJCQkJ YnJlYWs7CisKKwkJCX0gLyogZm9yX2VhY2hfcmluZyAqLworCQl9CisKKwkJaWYgKGZ1bGxfcmVz ZXQpIHsKKwkJCWF0b21pY19zZXRfbWFzayhJOTE1X1JFU0VUX0lOX1BST0dSRVNTX0ZMQUcsCisJ CQkJCSZkZXZfcHJpdi0+Z3B1X2Vycm9yLnJlc2V0X2NvdW50ZXIpOworCQl9CiAKIAkJLyoKIAkJ ICogV2FrZXVwIHdhaXRpbmcgcHJvY2Vzc2VzIHNvIHRoYXQgdGhlIHJlc2V0IGZ1bmN0aW9uCkBA IC0yODIzLDcgKzI5NzMsNyBAQCByaW5nX3N0dWNrKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJp bmcsIHU2NCBhY3RoZCkKIAkgKi8KIAl0bXAgPSBJOTE1X1JFQURfQ1RMKHJpbmcpOwogCWlmICh0 bXAgJiBSSU5HX1dBSVQpIHsKLQkJaTkxNV9oYW5kbGVfZXJyb3IoZGV2LCBmYWxzZSwKKwkJaTkx NV9oYW5kbGVfZXJyb3IoZGV2LCBpbnRlbF9yaW5nX2ZsYWcocmluZyksIGZhbHNlLAogCQkJCSAg IktpY2tpbmcgc3R1Y2sgd2FpdCBvbiAlcyIsCiAJCQkJICByaW5nLT5uYW1lKTsKIAkJSTkxNV9X UklURV9DVEwocmluZywgdG1wKTsKQEAgLTI4MzUsNyArMjk4NSw3IEBAIHJpbmdfc3R1Y2soc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqcmluZywgdTY0IGFjdGhkKQogCQlkZWZhdWx0OgogCQkJcmV0 dXJuIEhBTkdDSEVDS19IVU5HOwogCQljYXNlIDE6Ci0JCQlpOTE1X2hhbmRsZV9lcnJvcihkZXYs IGZhbHNlLAorCQkJaTkxNV9oYW5kbGVfZXJyb3IoZGV2LCBpbnRlbF9yaW5nX2ZsYWcocmluZyks IGZhbHNlLAogCQkJCQkgICJLaWNraW5nIHN0dWNrIHNlbWFwaG9yZSBvbiAlcyIsCiAJCQkJCSAg cmluZy0+bmFtZSk7CiAJCQlJOTE1X1dSSVRFX0NUTChyaW5nLCB0bXApOwpAQCAtMjg2NCw3ICsz MDE0LDggQEAgc3RhdGljIHZvaWQgaTkxNV9oYW5nY2hlY2tfZWxhcHNlZChzdHJ1Y3Qgd29ya19z dHJ1Y3QgKndvcmspCiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGRldl9wcml2LT5kZXY7CiAJ c3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZzsKIAlpbnQgaTsKLQlpbnQgYnVzeV9jb3VudCA9 IDAsIHJpbmdzX2h1bmcgPSAwOworCXUzMiBlbmdpbmVfbWFzayA9IDA7CisJaW50IGJ1c3lfY291 bnQgPSAwOwogCWJvb2wgc3R1Y2tbSTkxNV9OVU1fUklOR1NdID0geyAwIH07CiAjZGVmaW5lIEJV U1kgMQogI2RlZmluZSBLSUNLIDUKQEAgLTI5NjAsMTIgKzMxMTEsMTQgQEAgc3RhdGljIHZvaWQg aTkxNV9oYW5nY2hlY2tfZWxhcHNlZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAJCQlEUk1f SU5GTygiJXMgb24gJXNcbiIsCiAJCQkJIHN0dWNrW2ldID8gInN0dWNrIiA6ICJubyBwcm9ncmVz cyIsCiAJCQkJIHJpbmctPm5hbWUpOwotCQkJcmluZ3NfaHVuZysrOworCisJCQllbmdpbmVfbWFz ayB8PSBpbnRlbF9yaW5nX2ZsYWcocmluZyk7CisJCQlyaW5nLT5oYW5nY2hlY2sudGRyX2NvdW50 Kys7CiAJCX0KIAl9CiAKLQlpZiAocmluZ3NfaHVuZykKLQkJcmV0dXJuIGk5MTVfaGFuZGxlX2Vy cm9yKGRldiwgdHJ1ZSwgIlJpbmcgaHVuZyIpOworCWlmIChlbmdpbmVfbWFzaykKKwkJaTkxNV9o YW5kbGVfZXJyb3IoZGV2LCBlbmdpbmVfbWFzaywgdHJ1ZSwgIlJpbmcgaHVuZyAoMHglMDJ4KSIs IGVuZ2luZV9tYXNrKTsKIAogCWlmIChidXN5X2NvdW50KQogCQkvKiBSZXNldCB0aW1lciBjYXNl IGNoaXAgaGFuZ3Mgd2l0aG91dCBhbm90aGVyIHJlcXVlc3QKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfcGFyYW1zLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3Bh cmFtcy5jCmluZGV4IGJiNjQ0MTUuLjljZWEwMDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfcGFyYW1zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wYXJh bXMuYwpAQCAtNTAsNiArNTAsNyBAQCBzdHJ1Y3QgaTkxNV9wYXJhbXMgaTkxNSBfX3JlYWRfbW9z dGx5ID0gewogCS5lbmFibGVfY21kX3BhcnNlciA9IDEsCiAJLmRpc2FibGVfdnRkX3dhID0gMCwK IAkudXNlX21taW9fZmxpcCA9IDAsCisJLmdwdV9yZXNldF9wcm9tb3Rpb25fdGltZSA9IDAsCiAJ Lm1taW9fZGVidWcgPSAwLAogCS52ZXJib3NlX3N0YXRlX2NoZWNrcyA9IDEsCiAJLm51Y2xlYXJf cGFnZWZsaXAgPSAwLApAQCAtMTcyLDYgKzE3MywxNSBAQCBtb2R1bGVfcGFyYW1fbmFtZWQodXNl X21taW9fZmxpcCwgaTkxNS51c2VfbW1pb19mbGlwLCBpbnQsIDA2MDApOwogTU9EVUxFX1BBUk1f REVTQyh1c2VfbW1pb19mbGlwLAogCQkgInVzZSBNTUlPIGZsaXBzICgtMT1uZXZlciwgMD1kcml2 ZXIgZGlzY3JldGlvbiBbZGVmYXVsdF0sIDE9YWx3YXlzKSIpOwogCittb2R1bGVfcGFyYW1fbmFt ZWQoZ3B1X3Jlc2V0X3Byb21vdGlvbl90aW1lLAorICAgICAgICAgICAgICAgaTkxNS5ncHVfcmVz ZXRfcHJvbW90aW9uX3RpbWUsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGdwdV9yZXNl dF9wcm9tb3Rpb25fdGltZSwKKyAgICAgICAgICAgICAgICJDYXRjaCBleGNlc3NpdmUgZW5naW5l IHJlc2V0cy4gRWFjaCBlbmdpbmUgbWFpbnRhaW5zIGEgIgorCSAgICAgICAidGltZXN0YW1wIG9m IHRoZSBsYXN0IHRpbWUgaXQgd2FzIHJlc2V0LiBJZiBpdCBoYW5ncyBhZ2FpbiAiCisJICAgICAg ICJ3aXRoaW4gdGhpcyBwZXJpb2QgdGhlbiBmYWxsIGJhY2sgdG8gZnVsbCBHUFUgcmVzZXQgdG8g dHJ5IGFuZCIKKwkgICAgICAgIiByZWNvdmVyIGZyb20gdGhlIGhhbmcuICIKKyAgICAgICAgICAg ICAgICJkZWZhdWx0PTAgc2Vjb25kcyAoZGlzYWJsZWQpIik7CisKIG1vZHVsZV9wYXJhbV9uYW1l ZChtbWlvX2RlYnVnLCBpOTE1Lm1taW9fZGVidWcsIGludCwgMDYwMCk7CiBNT0RVTEVfUEFSTV9E RVNDKG1taW9fZGVidWcsCiAJIkVuYWJsZSB0aGUgTU1JTyBkZWJ1ZyBjb2RlIGZvciB0aGUgZmly c3QgTiBmYWlsdXJlcyAoZGVmYXVsdDogb2ZmKS4gIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9yZWcuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKaW5k ZXggOWM5Nzg0Mi4uYWY5ZjBhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9yZWcuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCkBAIC0xMDAsNiAr MTAwLDEwIEBACiAjZGVmaW5lICBHUkRPTV9SRVNFVF9TVEFUVVMgKDE8PDEpCiAjZGVmaW5lICBH UkRPTV9SRVNFVF9FTkFCTEUgKDE8PDApCiAKKyNkZWZpbmUgUklOR19SRVNFVF9DVEwocmluZykJ KChyaW5nKS0+bW1pb19iYXNlKzB4ZDApCisjZGVmaW5lICBSRUFEWV9GT1JfUkVTRVQJMHgyCisj ZGVmaW5lICBSRVFVRVNUX1JFU0VUCQkweDEKKwogI2RlZmluZSBJTEtfR0RTUiAweDJjYTQgLyog TUNIQkFSIG9mZnNldCAqLwogI2RlZmluZSAgSUxLX0dSRE9NX0ZVTEwJCSgwPDwxKQogI2RlZmlu ZSAgSUxLX0dSRE9NX1JFTkRFUgkoMTw8MSkKQEAgLTEzMCw2ICsxMzQsOCBAQAogI2RlZmluZSAg R0VONl9HUkRPTV9SRU5ERVIJCSgxIDw8IDEpCiAjZGVmaW5lICBHRU42X0dSRE9NX01FRElBCQko MSA8PCAyKQogI2RlZmluZSAgR0VONl9HUkRPTV9CTFQJCQkoMSA8PCAzKQorI2RlZmluZSAgR0VO Nl9HUkRPTV9WRUNTCQkoMSA8PCA0KQorI2RlZmluZSAgR0VOOF9HUkRPTV9NRURJQTIJCSgxIDw8 IDcpCiAKICNkZWZpbmUgUklOR19QUF9ESVJfQkFTRShyaW5nKQkJKChyaW5nKS0+bW1pb19iYXNl KzB4MjI4KQogI2RlZmluZSBSSU5HX1BQX0RJUl9CQVNFX1JFQUQocmluZykJKChyaW5nKS0+bW1p b19iYXNlKzB4NTE4KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJj LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuYwppbmRleCAwZmMzNWRkLi5lMDJh YmVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuYworKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuYwpAQCAtMTM1LDYgKzEzNSw3IEBACiAjaW5j bHVkZSA8ZHJtL2RybVAuaD4KICNpbmNsdWRlIDxkcm0vaTkxNV9kcm0uaD4KICNpbmNsdWRlICJp OTE1X2Rydi5oIgorI2luY2x1ZGUgImludGVsX2xyY190ZHIuaCIKIAogI2RlZmluZSBHRU45X0xS X0NPTlRFWFRfUkVOREVSX1NJWkUgKDIyICogUEFHRV9TSVpFKQogI2RlZmluZSBHRU44X0xSX0NP TlRFWFRfUkVOREVSX1NJWkUgKDIwICogUEFHRV9TSVpFKQpAQCAtMzMwLDYgKzMzMSwxNjQgQEAg c3RhdGljIHZvaWQgZXhlY2xpc3RzX2Vsc3Bfd3JpdGUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAq cmluZywKIAlzcGluX3VubG9jaygmZGV2X3ByaXYtPnVuY29yZS5sb2NrKTsKIH0KIAorLyoqCisg KiBleGVjbGlzdF9nZXRfY29udGV4dF9yZWdfcGFnZSgpIC0gR2V0IG1lbW9yeSBwYWdlIGZvciBj b250ZXh0IG9iamVjdAorICogQGVuZ2luZTogZW5naW5lCisgKiBAY3R4OiBjb250ZXh0IHJ1bm5p bmcgb24gZW5naW5lCisgKiBAcGFnZTogcmV0dXJuZWQgcGFnZQorICoKKyAqIFJldHVybjogMCBp ZiBzdWNjZXNzZnVsLCBvdGhlcndpc2UgcHJvcGFnYXRlcyBlcnJvciBjb2Rlcy4KKyAqLworc3Rh dGljIGlubGluZSBpbnQgZXhlY2xpc3RfZ2V0X2NvbnRleHRfcmVnX3BhZ2Uoc3RydWN0IGludGVs X2VuZ2luZV9jcyAqZW5naW5lLAorCQlzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY3R4LAorCQlzdHJ1 Y3QgcGFnZSAqKnBhZ2UpCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKmN0eF9vYmo7 CisKKwlpZiAoIXBhZ2UpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCFjdHgpCisJCWN0eCA9 IGVuZ2luZS0+ZGVmYXVsdF9jb250ZXh0OworCisJY3R4X29iaiA9IGN0eC0+ZW5naW5lW2VuZ2lu ZS0+aWRdLnN0YXRlOworCisJaWYgKFdBUk4oIWN0eF9vYmosICJDb250ZXh0IG9iamVjdCBub3Qg c2V0IHVwIVxuIikpCisJCXJldHVybiAtRUlOVkFMOworCisJV0FSTighaTkxNV9nZW1fb2JqX2lz X3Bpbm5lZChjdHhfb2JqKSwKKwkgICAgICJDb250ZXh0IG9iamVjdCBpcyBub3QgcGlubmVkIVxu Iik7CisKKwkqcGFnZSA9IGk5MTVfZ2VtX29iamVjdF9nZXRfcGFnZShjdHhfb2JqLCAxKTsKKwor CWlmIChXQVJOKCEqcGFnZSwgIkNvbnRleHQgb2JqZWN0IHBhZ2UgY291bGQgbm90IGJlIHJlc29s dmVkIVxuIikpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICog ZXhlY2xpc3Rfd3JpdGVfY29udGV4dF9yZWcoKSAtIFdyaXRlIHZhbHVlIHRvIGNvbnRleHQgcmVn aXN0ZXIKKyAqIEBlbmdpbmU6IGVuZ2luZQorICogQGN0eDogY29udGV4dCBydW5uaW5nIG9uIGVu Z2luZQorICogQGN0eF9yZWc6IEluZGV4IGludG8gY29udGV4dCBpbWFnZSBwb2ludGluZyB0byBy ZWdpc3RlciBsb2NhdGlvbgorICogQG1taW9fcmVnX2FkZHI6IE1NSU8gcmVnaXN0ZXIgYWRkcmVz cworICogQHZhbDogVmFsdWUgdG8gYmUgd3JpdHRlbgorICoKKyAqIFJldHVybjogMCBpZiBzdWNj ZXNzZnVsLCBvdGhlcndpc2UgcHJvcGFnYXRlcyBlcnJvciBjb2Rlcy4KKyAqLworc3RhdGljIGlu bGluZSBpbnQgZXhlY2xpc3RzX3dyaXRlX2NvbnRleHRfcmVnKHN0cnVjdCBpbnRlbF9lbmdpbmVf Y3MgKmVuZ2luZSwKKwkJc3RydWN0IGludGVsX2NvbnRleHQgKmN0eCwgdTMyIGN0eF9yZWcsIHUz MiBtbWlvX3JlZ19hZGRyLAorCQl1MzIgdmFsKQoreworCXN0cnVjdCBwYWdlICpwYWdlID0gTlVM TDsKKwl1aW50MzJfdCAqcmVnX3N0YXRlOworCisJaW50IHJldCA9IGV4ZWNsaXN0X2dldF9jb250 ZXh0X3JlZ19wYWdlKGVuZ2luZSwgY3R4LCAmcGFnZSk7CisJaWYgKFdBUk4ocmV0LCAiRmFpbGVk IHRvIHdyaXRlICV1IHRvIHJlZ2lzdGVyICV1IGZvciAlcyFcbiIsCisJCSh1bnNpZ25lZCBpbnQp IHZhbCwgKHVuc2lnbmVkIGludCkgY3R4X3JlZywgZW5naW5lLT5uYW1lKSkKKwkJCXJldHVybiBy ZXQ7CisKKwlyZWdfc3RhdGUgPSBrbWFwX2F0b21pYyhwYWdlKTsKKworCVdBUk4ocmVnX3N0YXRl W2N0eF9yZWddICE9IG1taW9fcmVnX2FkZHIsCisJICAgICAiQ29udGV4dCByZWdpc3RlciBhZGRy ZXNzICgleCkgIT0gTU1JTyByZWdpc3RlciBhZGRyZXNzICgleCkhXG4iLAorCSAgICAgKHVuc2ln bmVkIGludCkgcmVnX3N0YXRlW2N0eF9yZWddLCAodW5zaWduZWQgaW50KSBtbWlvX3JlZ19hZGRy KTsKKworCXJlZ19zdGF0ZVtjdHhfcmVnKzFdID0gdmFsOworCWt1bm1hcF9hdG9taWMocmVnX3N0 YXRlKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogZXhlY2xpc3RfcmVhZF9jb250ZXh0 X3JlZygpIC0gUmVhZCB2YWx1ZSBmcm9tIGNvbnRleHQgcmVnaXN0ZXIKKyAqIEBlbmdpbmU6IGVu Z2luZQorICogQGN0eDogY29udGV4dCBydW5uaW5nIG9uIGVuZ2luZQorICogQGN0eF9yZWc6IElu ZGV4IGludG8gY29udGV4dCBpbWFnZSBwb2ludGluZyB0byByZWdpc3RlciBsb2NhdGlvbgorICog QG1taW9fcmVnX2FkZHI6IE1NSU8gcmVnaXN0ZXIgYWRkcmVzcworICogQHZhbDogT3V0cHV0IHBh cmFtZXRlciByZXR1cm5pbmcgcmVnaXN0ZXIgdmFsdWUKKyAqCisgKiBSZXR1cm46IDAgaWYgc3Vj Y2Vzc2Z1bCwgb3RoZXJ3aXNlIHByb3BhZ2F0ZXMgZXJyb3IgY29kZXMuCisgKi8KK3N0YXRpYyBp bmxpbmUgaW50IGV4ZWNsaXN0c19yZWFkX2NvbnRleHRfcmVnKHN0cnVjdCBpbnRlbF9lbmdpbmVf Y3MgKmVuZ2luZSwKKwkJc3RydWN0IGludGVsX2NvbnRleHQgKmN0eCwgdTMyIGN0eF9yZWcsIHUz MiBtbWlvX3JlZ19hZGRyLAorCQl1MzIgKnZhbCkKK3sKKwlzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5V TEw7CisJdWludDMyX3QgKnJlZ19zdGF0ZTsKKwlpbnQgcmV0ID0gMDsKKworCWlmICghdmFsKQor CQlyZXR1cm4gLUVJTlZBTDsKKworCXJldCA9IGV4ZWNsaXN0X2dldF9jb250ZXh0X3JlZ19wYWdl KGVuZ2luZSwgY3R4LCAmcGFnZSk7CisJaWYgKFdBUk4ocmV0LCAiRmFpbGVkIHRvIHJlYWQgZnJv bSByZWdpc3RlciAldSBmb3IgJXMhXG4iLAorCQkodW5zaWduZWQgaW50KSBjdHhfcmVnLCBlbmdp bmUtPm5hbWUpKQorCQkJcmV0dXJuIHJldDsKKworCXJlZ19zdGF0ZSA9IGttYXBfYXRvbWljKHBh Z2UpOworCisJV0FSTihyZWdfc3RhdGVbY3R4X3JlZ10gIT0gbW1pb19yZWdfYWRkciwKKwkgICAg ICJDb250ZXh0IHJlZ2lzdGVyIGFkZHJlc3MgKCV4KSAhPSBNTUlPIHJlZ2lzdGVyIGFkZHJlc3Mg KCV4KSFcbiIsCisJICAgICAodW5zaWduZWQgaW50KSByZWdfc3RhdGVbY3R4X3JlZ10sICh1bnNp Z25lZCBpbnQpIG1taW9fcmVnX2FkZHIpOworCisJKnZhbCA9IHJlZ19zdGF0ZVtjdHhfcmVnKzFd OworCWt1bm1hcF9hdG9taWMocmVnX3N0YXRlKTsKKworCXJldHVybiByZXQ7CisgfQorCisvKgor ICogR2VuZXJpYyBtYWNyb3MgZm9yIGdlbmVyYXRpbmcgZnVuY3Rpb24gaW1wbGVtZW50YXRpb24g Zm9yIGNvbnRleHQgcmVnaXN0ZXIKKyAqIHJlYWQvd3JpdGUgZnVuY3Rpb25zLgorICoKKyAqIE1h Y3JvIHBhcmFtZXRlcnMKKyAqIC0tLS0tLS0tLS0tLS0tLS0KKyAqIHJlZ19uYW1lOiBEZXNpZ25h dGVkIG5hbWUgb2YgY29udGV4dCByZWdpc3RlciAoZS5nLiB0YWlsLCBoZWFkLCBidWZmZXJfY3Rs KQorICoKKyAqIHJlZ19kZWY6IENvbnRleHQgcmVnaXN0ZXIgbWFjcm8gZGVmaW5pdGlvbiAoZS5n LiBDVFhfUklOR19UQUlMKQorICoKKyAqIG1taW9fcmVnX2RlZjogTmFtZSBvZiBtYWNybyBmdW5j dGlvbiB1c2VkIHRvIGRldGVybWluZSB0aGUgYWRkcmVzcworICoJCSBvZiB0aGUgY29ycmVzcG9u ZGluZyBNTUlPIHJlZ2lzdGVyIChlLmcuIFJJTkdfVEFJTCwgUklOR19IRUFEKS4KKyAqCQkgVGhp cyBtYWNybyBmdW5jdGlvbiBpcyBhc3N1bWVkIHRvIGJlIGRlZmluZWQgb24gdGhlIGZvcm0gb2Y6 CisgKgorICoJCQkjZGVmaW5lIG1taW9fcmVnX2RlZihiYXNlKSAoYmFzZStyZWdpc3Rlcl9vZmZz ZXQpCisgKgorICoJCSBXaGVyZSAiYmFzZSIgaXMgdGhlIE1NSU8gYmFzZSBhZGRyZXNzIG9mIHRo ZSByZXNwZWN0aXZlIHJpbmcKKyAqCQkgYW5kICJyZWdpc3Rlcl9vZmZzZXQiIGlzIHRoZSBvZmZz ZXQgcmVsYXRpdmUgdG8gImJhc2UiLgorICoKKyAqIEZ1bmN0aW9uIHBhcmFtZXRlcnMKKyAqIC0t LS0tLS0tLS0tLS0tLS0tLS0KKyAqIGVuZ2luZTogVGhlIGVuZ2luZSB0aGF0IHRoZSBjb250ZXh0 IGlzIHJ1bm5pbmcgb24KKyAqIGN0eDogVGhlIGNvbnRleHQgb2YgdGhlIHJlZ2lzdGVyIHRoYXQg aXMgdG8gYmUgYWNjZXNzZWQKKyAqIHJlZ19uYW1lOiBWYWx1ZSB0byBiZSB3cml0dGVuL3JlYWQg dG8vZnJvbSB0aGUgcmVnaXN0ZXIuCisgKi8KKyNkZWZpbmUgSU5URUxfRVhFQ0xJU1RTX1dSSVRF X1JFRyhyZWdfbmFtZSwgcmVnX2RlZiwgbW1pb19yZWdfZGVmKSBcCisJaW50IGludGVsX2V4ZWNs aXN0c193cml0ZV8jI3JlZ19uYW1lKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwgXAor CQkJCQkgICAgIHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjdHgsIFwKKwkJCQkJICAgICB1MzIgcmVn X25hbWUpIFwKK3sgXAorCXJldHVybiBleGVjbGlzdHNfd3JpdGVfY29udGV4dF9yZWcoZW5naW5l LCBjdHgsIChyZWdfZGVmKSwgXAorCQkJbW1pb19yZWdfZGVmKGVuZ2luZS0+bW1pb19iYXNlKSwg KHJlZ19uYW1lKSk7IFwKK30KKworI2RlZmluZSBJTlRFTF9FWEVDTElTVFNfUkVBRF9SRUcocmVn X25hbWUsIHJlZ19kZWYsIG1taW9fcmVnX2RlZikgXAorCWludCBpbnRlbF9leGVjbGlzdHNfcmVh ZF8jI3JlZ19uYW1lKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwgXAorCQkJCQkgICAg c3RydWN0IGludGVsX2NvbnRleHQgKmN0eCwgXAorCQkJCQkgICAgdTMyICpyZWdfbmFtZSkgXAor eyBcCisJcmV0dXJuIGV4ZWNsaXN0c19yZWFkX2NvbnRleHRfcmVnKGVuZ2luZSwgY3R4LCAocmVn X2RlZiksIFwKKwkJCW1taW9fcmVnX2RlZihlbmdpbmUtPm1taW9fYmFzZSksIChyZWdfbmFtZSkp OyBcCit9CisKK0lOVEVMX0VYRUNMSVNUU19SRUFEX1JFRyh0YWlsLCBDVFhfUklOR19UQUlMLCBS SU5HX1RBSUwpCitJTlRFTF9FWEVDTElTVFNfV1JJVEVfUkVHKGhlYWQsIENUWF9SSU5HX0hFQUQs IFJJTkdfSEVBRCkKK0lOVEVMX0VYRUNMSVNUU19SRUFEX1JFRyhoZWFkLCBDVFhfUklOR19IRUFE LCBSSU5HX0hFQUQpCisKKyN1bmRlZiBJTlRFTF9FWEVDTElTVFNfUkVBRF9SRUcKKyN1bmRlZiBJ TlRFTF9FWEVDTElTVFNfV1JJVEVfUkVHCisKIHN0YXRpYyBpbnQgZXhlY2xpc3RzX3VwZGF0ZV9j b250ZXh0KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpjdHhfb2JqLAogCQkJCSAgICBzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqcmluZ19vYmosCiAJCQkJICAgIHN0cnVjdCBpOTE1X2h3 X3BwZ3R0ICpwcGd0dCwKQEAgLTM4Nyw0NCArNTQ2LDkzIEBAIHN0YXRpYyB2b2lkIGV4ZWNsaXN0 c19zdWJtaXRfY29udGV4dHMoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZywKIAlleGVjbGlz dHNfZWxzcF93cml0ZShyaW5nLCBjdHhfb2JqMCwgY3R4X29iajEpOwogfQogCi1zdGF0aWMgdm9p ZCBleGVjbGlzdHNfY29udGV4dF91bnF1ZXVlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcp CitzdGF0aWMgdm9pZCBleGVjbGlzdHNfZmV0Y2hfcmVxdWVzdHMoc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqcmluZywKKwkJCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqKnJlcTAsCisJCQlz dHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKipyZXExKQogewotCXN0cnVjdCBkcm1faTkxNV9n ZW1fcmVxdWVzdCAqcmVxMCA9IE5VTEwsICpyZXExID0gTlVMTDsKIAlzdHJ1Y3QgZHJtX2k5MTVf Z2VtX3JlcXVlc3QgKmN1cnNvciA9IE5VTEwsICp0bXAgPSBOVUxMOwogCi0JYXNzZXJ0X3NwaW5f bG9ja2VkKCZyaW5nLT5leGVjbGlzdF9sb2NrKTsKLQotCWlmIChsaXN0X2VtcHR5KCZyaW5nLT5l eGVjbGlzdF9xdWV1ZSkpCisJaWYgKCFyZXEwKQogCQlyZXR1cm47CiAKKwkqcmVxMCA9IE5VTEw7 CisKKwlpZiAocmVxMSkKKwkJKnJlcTEgPSBOVUxMOworCiAJLyogVHJ5IHRvIHJlYWQgaW4gcGFp cnMgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY3Vyc29yLCB0bXAsICZyaW5nLT5leGVj bGlzdF9xdWV1ZSwKIAkJCQkgZXhlY2xpc3RfbGluaykgewotCQlpZiAoIXJlcTApIHsKLQkJCXJl cTAgPSBjdXJzb3I7Ci0JCX0gZWxzZSBpZiAocmVxMC0+Y3R4ID09IGN1cnNvci0+Y3R4KSB7Ci0J CQkvKiBTYW1lIGN0eDogaWdub3JlIGZpcnN0IHJlcXVlc3QsIGFzIHNlY29uZCByZXF1ZXN0Ci0J CQkgKiB3aWxsIHVwZGF0ZSB0YWlsIHBhc3QgZmlyc3QgcmVxdWVzdCdzIHdvcmtsb2FkICovCi0J CQljdXJzb3ItPmVsc3Bfc3VibWl0dGVkID0gcmVxMC0+ZWxzcF9zdWJtaXR0ZWQ7Ci0JCQlsaXN0 X2RlbCgmcmVxMC0+ZXhlY2xpc3RfbGluayk7Ci0JCQlsaXN0X2FkZF90YWlsKCZyZXEwLT5leGVj bGlzdF9saW5rLAorCQlpZiAoISgqcmVxMCkpCisJCQkqcmVxMCA9IGN1cnNvcjsKKwkJZWxzZSBp ZiAoKCpyZXEwKS0+Y3R4ID09IGN1cnNvci0+Y3R4KSB7CisJCQkvKgorCQkJICogU2FtZSBjdHg6 IGlnbm9yZSBmaXJzdCByZXF1ZXN0LCBhcyBzZWNvbmQgcmVxdWVzdAorCQkJICogd2lsbCB1cGRh dGUgdGFpbCBwYXN0IGZpcnN0IHJlcXVlc3QncyB3b3JrbG9hZAorCQkJICovCisJCQljdXJzb3It PmVsc3Bfc3VibWl0dGVkID0gKCpyZXEwKS0+ZWxzcF9zdWJtaXR0ZWQ7CisJCQlsaXN0X2RlbCgm KCpyZXEwKS0+ZXhlY2xpc3RfbGluayk7CisJCQlsaXN0X2FkZF90YWlsKCYoKnJlcTApLT5leGVj bGlzdF9saW5rLAogCQkJCSZyaW5nLT5leGVjbGlzdF9yZXRpcmVkX3JlcV9saXN0KTsKLQkJCXJl cTAgPSBjdXJzb3I7CisJCQkqcmVxMCA9IGN1cnNvcjsKIAkJfSBlbHNlIHsKLQkJCXJlcTEgPSBj dXJzb3I7CisJCQlpZiAocmVxMSkKKwkJCQkqcmVxMSA9IGN1cnNvcjsKIAkJCWJyZWFrOwogCQl9 CiAJfQorfQogCi0JV0FSTl9PTihyZXExICYmIHJlcTEtPmVsc3Bfc3VibWl0dGVkKTsKK3N0YXRp YyB2b2lkIGV4ZWNsaXN0c19jb250ZXh0X3VucXVldWUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAq cmluZywgYm9vbCB0ZHJfcmVzdWJtaXNzaW9uKQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVx dWVzdCAqcmVxMCA9IE5VTEwsICpyZXExID0gTlVMTDsKKworCWFzc2VydF9zcGluX2xvY2tlZCgm cmluZy0+ZXhlY2xpc3RfbG9jayk7CisJaWYgKGxpc3RfZW1wdHkoJnJpbmctPmV4ZWNsaXN0X3F1 ZXVlKSkKKwkJcmV0dXJuOworCisJZXhlY2xpc3RzX2ZldGNoX3JlcXVlc3RzKHJpbmcsICZyZXEw LCAmcmVxMSk7CisKKwlpZiAodGRyX3Jlc3VibWlzc2lvbiAmJiByZXExICYmICFyZXExLT5lbHNw X3N1Ym1pdHRlZCkKKwkJcmVxMSA9IE5VTEw7CisKKwlXQVJOX09OKHJlcTEgJiYgcmVxMS0+ZWxz cF9zdWJtaXR0ZWQgJiYgIXRkcl9yZXN1Ym1pc3Npb24pOwogCiAJZXhlY2xpc3RzX3N1Ym1pdF9j b250ZXh0cyhyaW5nLCByZXEwLT5jdHgsIHJlcTAtPnRhaWwsCiAJCQkJICByZXExID8gcmVxMS0+ Y3R4IDogTlVMTCwKIAkJCQkgIHJlcTEgPyByZXExLT50YWlsIDogMCk7CiAKLQlyZXEwLT5lbHNw X3N1Ym1pdHRlZCsrOwotCWlmIChyZXExKQotCQlyZXExLT5lbHNwX3N1Ym1pdHRlZCsrOworCWlm ICghdGRyX3Jlc3VibWlzc2lvbikgeworCQlyZXEwLT5lbHNwX3N1Ym1pdHRlZCsrOworCQlpZiAo cmVxMSkKKwkJCXJlcTEtPmVsc3Bfc3VibWl0dGVkKys7CisJfQorfQorCisvKioKKyAqIGludGVs X2V4ZWNsaXN0c19URFJfY29udGV4dF9yZXN1Ym1pc3Npb24oKSAtIEVMU1AgY29udGV4dCByZXN1 Ym1pc3Npb24KKyAqIGJ5cGFzc2luZyBxdWV1ZS4KKyAqCisgKiBDb250ZXh0IHN1Ym1pc3Npb24g bWVjaGFuaXNtIGV4Y2x1c2l2ZWx5IHVzZWQgYnkgVERSIHRoYXQgYnlwYXNzZXMgdGhlCisgKiBl eGVjbGlzdCBxdWV1ZS4gVGhpcyBpcyBuZWNlc3Nhcnkgc2luY2UgYXQgdGhlIHBvaW50IG9mIFRE UiBoYW5nIHJlY292ZXJ5CisgKiB0aGUgaGFyZHdhcmUgd2lsbCBiZSBodW5nIGFuZCByZXN1Ym1p dHRpbmcgYSBmaXhlZCBjb250ZXh0ICh0aGUgY29udGV4dCB0aGF0CisgKiB0aGUgVERSIGhhcyBp ZGVudGlmaWVkIGFzIGh1bmcgYW5kIGZpeGVkIHVwIGluIG9yZGVyIHRvIG1vdmUgcGFzdCB0aGUK KyAqIGJsb2NraW5nIGJhdGNoIGJ1ZmZlcikgdG8gYSBodW5nIGV4ZWNsaXN0IHF1ZXVlIHdpbGwg bG9jayB1cCB0aGUgVERSLgorICogSW5zdGVhZCwgb3B0IGZvciBkaXJlY3QgRUxTUCBzdWJtaXNz aW9uIHdpdGhvdXQgZGVwZW5kaW5nIG9uIHRoZSByZXN0IG9mIHRoZQorICogZHJpdmVyLgorICoK KyAqIEByaW5nOiBlbmdpbmUgdG8gZG8gcmVzdWJtaXNzaW9uIGZvci4KKyAqCisgKi8KK3ZvaWQg aW50ZWxfZXhlY2xpc3RzX1REUl9jb250ZXh0X3Jlc3VibWlzc2lvbihzdHJ1Y3QgaW50ZWxfZW5n aW5lX2NzICpyaW5nKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJx c2F2ZSgmcmluZy0+ZXhlY2xpc3RfbG9jaywgZmxhZ3MpOworCVdBUk5fT04obGlzdF9lbXB0eSgm cmluZy0+ZXhlY2xpc3RfcXVldWUpKTsKKworCWV4ZWNsaXN0c19jb250ZXh0X3VucXVldWUocmlu ZywgdHJ1ZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmluZy0+ZXhlY2xpc3RfbG9jaywg ZmxhZ3MpOwogfQogCiBzdGF0aWMgYm9vbCBleGVjbGlzdHNfY2hlY2tfcmVtb3ZlX3JlcXVlc3Qo c3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZywKQEAgLTUwNiw3ICs3MTQsNyBAQCB2b2lkIGlu dGVsX2xyY19pcnFfaGFuZGxlcihzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nKQogCX0KIAog CWlmIChzdWJtaXRfY29udGV4dHMgIT0gMCkKLQkJZXhlY2xpc3RzX2NvbnRleHRfdW5xdWV1ZShy aW5nKTsKKwkJZXhlY2xpc3RzX2NvbnRleHRfdW5xdWV1ZShyaW5nLCBmYWxzZSk7CiAKIAlzcGlu X3VubG9jaygmcmluZy0+ZXhlY2xpc3RfbG9jayk7CiAKQEAgLTU3MCw3ICs3NzgsNyBAQCBzdGF0 aWMgaW50IGV4ZWNsaXN0c19jb250ZXh0X3F1ZXVlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJp bmcsCiAKIAlsaXN0X2FkZF90YWlsKCZyZXF1ZXN0LT5leGVjbGlzdF9saW5rLCAmcmluZy0+ZXhl Y2xpc3RfcXVldWUpOwogCWlmIChudW1fZWxlbWVudHMgPT0gMCkKLQkJZXhlY2xpc3RzX2NvbnRl eHRfdW5xdWV1ZShyaW5nKTsKKwkJZXhlY2xpc3RzX2NvbnRleHRfdW5xdWV1ZShyaW5nLCBmYWxz ZSk7CiAKIAlzcGluX3VubG9ja19pcnEoJnJpbmctPmV4ZWNsaXN0X2xvY2spOwogCkBAIC0xMDY2 LDcgKzEyNzQsNyBAQCBzdGF0aWMgaW50IGdlbjhfaW5pdF9jb21tb25fcmluZyhzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICpyaW5nKQogCXJpbmctPm5leHRfY29udGV4dF9zdGF0dXNfYnVmZmVyID0g MDsKIAlEUk1fREVCVUdfRFJJVkVSKCJFeGVjbGlzdHMgZW5hYmxlZCBmb3IgJXNcbiIsIHJpbmct Pm5hbWUpOwogCi0JbWVtc2V0KCZyaW5nLT5oYW5nY2hlY2ssIDAsIHNpemVvZihyaW5nLT5oYW5n Y2hlY2spKTsKKwlpOTE1X2hhbmdjaGVja19yZWluaXQocmluZyk7CiAKIAlyZXR1cm4gMDsKIH0K QEAgLTEzMTQsNiArMTUyMiwxNzMgQEAgb3V0OgogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBp bnQKK2dlbjhfcmluZ19kaXNhYmxlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcpCit7CisJ aW50ZWxfcmVxdWVzdF9ncHVfZW5naW5lX3Jlc2V0KHJpbmcpOworCXJldHVybiAwOworfQorCitz dGF0aWMgaW50CitnZW44X3JpbmdfZW5hYmxlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcp Cit7CisJaW50ZWxfdW5yZXF1ZXN0X2dwdV9lbmdpbmVfcmVzZXQocmluZyk7CisJcmV0dXJuIDA7 Cit9CisKKy8qCisgKiBnZW44X3Jpbmdfc2F2ZSgpCisgKgorICogU2F2ZXMgdGhlIGhlYWQgTU1J TyByZWdpc3RlciB0byBzY3JhdGNoIG1lbW9yeSB3aGlsZSBlbmdpbmUgaXMgcmVzZXQgYW5kCisg KiByZWluaXRpYWxpemVkLiBCZWZvcmUgc2F2aW5nIHRoZSBoZWFkIHJlZ2lzdGVyIHdlIG51ZGdl IHRoZSBoZWFkIHBvc2l0aW9uIHRvCisgKiBiZSBjb3JyZWN0bHkgYWxpZ25lZCB3aXRoIGEgUVdP UkQgYm91bmRhcnksIHdoaWNoIGJyaW5ncyBpdCB1cCB0byB0aGUgbmV4dAorICogcHJlc3VtYWJs eSB2YWxpZCBpbnN0cnVjdGlvbi4gVHlwaWNhbGx5LCBhdCB0aGUgcG9pbnQgb2YgaGFuZyByZWNv dmVyeSB0aGUKKyAqIGhlYWQgcmVnaXN0ZXIgd2lsbCBiZSBwb2ludGluZyB0byB0aGUgbGFzdCBE V09SRCBvZiB0aGUgQkJfU1RBUlQKKyAqIGluc3RydWN0aW9uLCB3aGljaCBpcyBmb2xsb3dlZCBi eSBhIHBhZGRpbmcgTUlfTk9PUCBpbnNlcnRlZCBieSB0aGUKKyAqIGRyaXZlci4KKyAqCisgKiBy aW5nOiBlbmdpbmUgdG8gYmUgcmVzZXQKKyAqIHJlcTogcmVxdWVzdCBjb250YWluaW5nIHRoZSBj b250ZXh0IGN1cnJlbnRseSBydW5uaW5nIG9uIGVuZ2luZQorICogZm9yY2VfYWR2YW5jZTogaW5k aWNhdGVzIHdoZXRoZXIgb3Igbm90IHdlIHNob3VsZCBudWRnZSB0aGUgaGVhZAorICoJCSAgZm9y d2FyZCBvciBub3QKKyAqLworc3RhdGljIGludAorZ2VuOF9yaW5nX3NhdmUoc3RydWN0IGludGVs X2VuZ2luZV9jcyAqcmluZywgc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEsCisJCWJv b2wgZm9yY2VfYWR2YW5jZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYg PSByaW5nLT5kZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBpbnRlbF9yaW5nYnVmZmVyICpyaW5n YnVmID0gTlVMTDsKKwlzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY3R4OworCWludCByZXQgPSAwOwor CWludCBjbGFtcF90b190YWlsID0gMDsKKwl1aW50MzJfdCBoZWFkOworCXVpbnQzMl90IHRhaWw7 CisJdWludDMyX3QgaGVhZF9hZGRyOworCXVpbnQzMl90IHRhaWxfYWRkcjsKKworCWlmIChXQVJO X09OKCFyZXEpKQorCSAgICByZXR1cm4gLUVJTlZBTDsKKworCWN0eCA9IHJlcS0+Y3R4OworCXJp bmdidWYgPSBjdHgtPmVuZ2luZVtyaW5nLT5pZF0ucmluZ2J1ZjsKKworCS8qCisJICogUmVhZCBo ZWFkIGZyb20gTU1JTyByZWdpc3RlciBzaW5jZSBpdCBjb250YWlucyB0aGUKKwkgKiBtb3N0IHVw IHRvIGRhdGUgdmFsdWUgb2YgaGVhZCBhdCB0aGlzIHBvaW50LgorCSAqLworCWhlYWQgPSBJOTE1 X1JFQURfSEVBRChyaW5nKTsKKworCS8qCisJICogUmVhZCB0YWlsIGZyb20gdGhlIGNvbnRleHQg YmVjYXVzZSB0aGUgZXhlY2xpc3QgcXVldWUKKwkgKiB1cGRhdGVzIHRoZSB0YWlsIHZhbHVlIHRo ZXJlIGZpcnN0IGR1cmluZyBzdWJtaXNzaW9uLgorCSAqIFRoZSBNTUlPIHRhaWwgcmVnaXN0ZXIg aXMgbm90IHVwZGF0ZWQgdW50aWwgdGhlIGFjdHVhbAorCSAqIHJpbmcgc3VibWlzc2lvbiBjb21w bGV0ZXMuCisJICovCisJcmV0ID0gSTkxNV9SRUFEX1RBSUxfQ1RYKHJpbmcsIGN0eCwgdGFpbCk7 CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qCisJICogaGVhZF9hZGRyIGFuZCB0YWls X2FkZHIgYXJlIHRoZSBoZWFkIGFuZCB0YWlsIHZhbHVlcworCSAqIGV4Y2x1ZGluZyByaW5nIHdy YXBwaW5nIGluZm9ybWF0aW9uIGFuZCBhbGlnbmVkIHRvIERXT1JECisJICogYm91bmRhcnkKKwkg Ki8KKwloZWFkX2FkZHIgPSBoZWFkICYgSEVBRF9BRERSOworCXRhaWxfYWRkciA9IHRhaWwgJiBU QUlMX0FERFI7CisKKwkvKgorCSAqIFRoZSBoZWFkIG11c3QgYWx3YXlzIGNoYXNlIHRoZSB0YWls LgorCSAqIElmIHRoZSB0YWlsIGlzIGJleW9uZCB0aGUgaGVhZCB0aGVuIGRvIG5vdCBhbGxvdwor CSAqIHRoZSBoZWFkIHRvIG92ZXJ0YWtlIGl0LiBJZiB0aGUgdGFpbCBpcyBsZXNzIHRoYW4KKwkg KiB0aGUgaGVhZCB0aGVuIHRoZSB0YWlsIGhhcyBhbHJlYWR5IHdyYXBwZWQgYW5kCisJICogdGhl cmUgaXMgbm8gcHJvYmxlbSBpbiBhZHZhbmNpbmcgdGhlIGhlYWQgb3IgZXZlbgorCSAqIHdyYXBw aW5nIHRoZSBoZWFkIGJhY2sgdG8gMCBhcyB3b3JzdCBjYXNlIGl0IHdpbGwKKwkgKiBiZWNvbWUg ZXF1YWwgdG8gdGFpbAorCSAqLworCWlmIChoZWFkX2FkZHIgPD0gdGFpbF9hZGRyKQorCQljbGFt cF90b190YWlsID0gMTsKKworCWlmIChmb3JjZV9hZHZhbmNlKSB7CisKKwkJLyogRm9yY2UgaGVh ZCBwb2ludGVyIHRvIG5leHQgUVdPUkQgYm91bmRhcnkgKi8KKwkJaGVhZF9hZGRyICY9IH4weDc7 CisJCWhlYWRfYWRkciArPSA4OworCisJfSBlbHNlIGlmIChoZWFkICYgMHg3KSB7CisKKwkJLyog RW5zdXJlIGhlYWQgcG9pbnRlciBpcyBwb2ludGluZyB0byBhIFFXT1JEIGJvdW5kYXJ5ICovCisJ CWhlYWQgKz0gMHg3OworCQloZWFkICY9IH4weDc7CisJCWhlYWRfYWRkciA9IGhlYWQ7CisJfQor CisJaWYgKGNsYW1wX3RvX3RhaWwgJiYgKGhlYWRfYWRkciA+IHRhaWxfYWRkcikpIHsKKwkJaGVh ZF9hZGRyID0gdGFpbF9hZGRyOworCX0gZWxzZSBpZiAoaGVhZF9hZGRyID49IHJpbmdidWYtPnNp emUpIHsKKwkJLyogV3JhcCBoZWFkIGJhY2sgdG8gc3RhcnQgaWYgaXQgZXhjZWVkcyByaW5nIHNp emUgKi8KKwkJaGVhZF9hZGRyID0gMDsKKwl9CisKKwloZWFkICY9IH5IRUFEX0FERFI7CisJaGVh ZCB8PSAoaGVhZF9hZGRyICYgSEVBRF9BRERSKTsKKwlyaW5nLT5zYXZlZF9oZWFkID0gaGVhZDsK KworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitnZW44X3JpbmdfcmVzdG9yZShzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICpyaW5nLCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSkK K3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSByaW5nLT5kZXYtPmRldl9w cml2YXRlOworCXN0cnVjdCBpbnRlbF9jb250ZXh0ICpjdHg7CisKKwlpZiAoV0FSTl9PTighcmVx KSkKKwkgICAgcmV0dXJuIC1FSU5WQUw7CisKKwljdHggPSByZXEtPmN0eDsKKworCS8qIFJlLWlu aXRpYWxpemUgcmluZyAqLworCWlmIChyaW5nLT5pbml0X2h3KSB7CisJCWludCByZXQgPSByaW5n LT5pbml0X2h3KHJpbmcpOworCQlpZiAocmV0ICE9IDApIHsKKwkJCURSTV9FUlJPUigiRmFpbGVk IHRvIHJlLWluaXRpYWxpemUgJXNcbiIsCisJCQkJCXJpbmctPm5hbWUpOworCQkJcmV0dXJuIHJl dDsKKwkJfQorCX0gZWxzZSB7CisJCURSTV9FUlJPUigicmluZyBpbml0IGZ1bmN0aW9uIHBvaW50 ZXIgbm90IHNldCB1cFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChyaW5nLT5p ZCA9PSBSQ1MpIHsKKwkJLyoKKwkJICogVGhlc2UgcmVnaXN0ZXIgcmVpbml0aWFsaXphdGlvbnMg YXJlIG9ubHkgbG9jYXRlZCBoZXJlCisJCSAqIHRlbXBvcmFyaWx5IHVudGlsIHRoZXkgYXJlIG1v dmVkIG91dCBvZiB0aGUKKwkJICogaW5pdF9jbG9ja19nYXRpbmcgZnVuY3Rpb24gdG8gc29tZSBm dW5jdGlvbiB3ZSBjYW4KKwkJICogY2FsbCBmcm9tIGhlcmUuCisJCSAqLworCisJCS8qIFdhVlNS ZWZDb3VudEZ1bGxmb3JjZU1pc3NEaXNhYmxlOmNodiAqLworCQkvKiBXYURTUmVmQ291bnRGdWxs Zm9yY2VNaXNzRGlzYWJsZTpjaHYgKi8KKwkJSTkxNV9XUklURShHRU43X0ZGX1RIUkVBRF9NT0RF LAorCQkJICAgSTkxNV9SRUFEKEdFTjdfRkZfVEhSRUFEX01PREUpICYKKwkJCSAgIH4oR0VOOF9G Rl9EU19SRUZfQ05UX0ZGTUUgfCBHRU43X0ZGX1ZTX1JFRl9DTlRfRkZNRSkpOworCisJCUk5MTVf V1JJVEUoXzNEX0NISUNLRU4zLAorCQkJICAgXzNEX0NISUNLRU5fU0RFX0xJTUlUX0ZJRk9fUE9M WV9ERVBUSCgyKSk7CisKKwkJLyogV2FTd2l0Y2hTb2xWZkZBcmJpdHJhdGlvblByaW9yaXR5OmJk dyAqLworCQlJOTE1X1dSSVRFKEdBTV9FQ09DSEssIEk5MTVfUkVBRChHQU1fRUNPQ0hLKSB8IEhT V19FQ09DSEtfQVJCX1BSSU9fU09MKTsKKwl9CisKKwkvKiBSZXN0b3JlIGhlYWQgKi8KKworCUk5 MTVfV1JJVEVfSEVBRChyaW5nLCByaW5nLT5zYXZlZF9oZWFkKTsKKwlJOTE1X1dSSVRFX0hFQURf Q1RYKHJpbmcsIGN0eCwgcmluZy0+c2F2ZWRfaGVhZCk7CisKKwlyZXR1cm4gMDsKK30KKwogc3Rh dGljIGludCBnZW44X2luaXRfcmNzX2NvbnRleHQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmlu ZywKIAkJICAgICAgIHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjdHgpCiB7CkBAIC0xNDEyLDYgKzE3 ODcsMTAgQEAgc3RhdGljIGludCBsb2dpY2FsX3JlbmRlcl9yaW5nX2luaXQoc3RydWN0IGRybV9k ZXZpY2UgKmRldikKIAlyaW5nLT5pcnFfZ2V0ID0gZ2VuOF9sb2dpY2FsX3JpbmdfZ2V0X2lycTsK IAlyaW5nLT5pcnFfcHV0ID0gZ2VuOF9sb2dpY2FsX3JpbmdfcHV0X2lycTsKIAlyaW5nLT5lbWl0 X2JiX3N0YXJ0ID0gZ2VuOF9lbWl0X2JiX3N0YXJ0OworCXJpbmctPmVuYWJsZSA9IGdlbjhfcmlu Z19lbmFibGU7CisJcmluZy0+ZGlzYWJsZSA9IGdlbjhfcmluZ19kaXNhYmxlOworCXJpbmctPnNh dmUgPSBnZW44X3Jpbmdfc2F2ZTsKKwlyaW5nLT5yZXN0b3JlID0gZ2VuOF9yaW5nX3Jlc3RvcmU7 CiAKIAlyaW5nLT5kZXYgPSBkZXY7CiAJcmV0ID0gbG9naWNhbF9yaW5nX2luaXQoZGV2LCByaW5n KTsKQEAgLTE0NDIsNiArMTgyMSwxMCBAQCBzdGF0aWMgaW50IGxvZ2ljYWxfYnNkX3JpbmdfaW5p dChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogCXJpbmctPmlycV9nZXQgPSBnZW44X2xvZ2ljYWxf cmluZ19nZXRfaXJxOwogCXJpbmctPmlycV9wdXQgPSBnZW44X2xvZ2ljYWxfcmluZ19wdXRfaXJx OwogCXJpbmctPmVtaXRfYmJfc3RhcnQgPSBnZW44X2VtaXRfYmJfc3RhcnQ7CisJcmluZy0+ZW5h YmxlID0gZ2VuOF9yaW5nX2VuYWJsZTsKKwlyaW5nLT5kaXNhYmxlID0gZ2VuOF9yaW5nX2Rpc2Fi bGU7CisJcmluZy0+c2F2ZSA9IGdlbjhfcmluZ19zYXZlOworCXJpbmctPnJlc3RvcmUgPSBnZW44 X3JpbmdfcmVzdG9yZTsKIAogCXJldHVybiBsb2dpY2FsX3JpbmdfaW5pdChkZXYsIHJpbmcpOwog fQpAQCAtMTQ2Nyw2ICsxODUwLDEwIEBAIHN0YXRpYyBpbnQgbG9naWNhbF9ic2QyX3JpbmdfaW5p dChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogCXJpbmctPmlycV9nZXQgPSBnZW44X2xvZ2ljYWxf cmluZ19nZXRfaXJxOwogCXJpbmctPmlycV9wdXQgPSBnZW44X2xvZ2ljYWxfcmluZ19wdXRfaXJx OwogCXJpbmctPmVtaXRfYmJfc3RhcnQgPSBnZW44X2VtaXRfYmJfc3RhcnQ7CisJcmluZy0+ZW5h YmxlID0gZ2VuOF9yaW5nX2VuYWJsZTsKKwlyaW5nLT5kaXNhYmxlID0gZ2VuOF9yaW5nX2Rpc2Fi bGU7CisJcmluZy0+c2F2ZSA9IGdlbjhfcmluZ19zYXZlOworCXJpbmctPnJlc3RvcmUgPSBnZW44 X3JpbmdfcmVzdG9yZTsKIAogCXJldHVybiBsb2dpY2FsX3JpbmdfaW5pdChkZXYsIHJpbmcpOwog fQpAQCAtMTQ5Miw2ICsxODc5LDEwIEBAIHN0YXRpYyBpbnQgbG9naWNhbF9ibHRfcmluZ19pbml0 KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiAJcmluZy0+aXJxX2dldCA9IGdlbjhfbG9naWNhbF9y aW5nX2dldF9pcnE7CiAJcmluZy0+aXJxX3B1dCA9IGdlbjhfbG9naWNhbF9yaW5nX3B1dF9pcnE7 CiAJcmluZy0+ZW1pdF9iYl9zdGFydCA9IGdlbjhfZW1pdF9iYl9zdGFydDsKKwlyaW5nLT5lbmFi bGUgPSBnZW44X3JpbmdfZW5hYmxlOworCXJpbmctPmRpc2FibGUgPSBnZW44X3JpbmdfZGlzYWJs ZTsKKwlyaW5nLT5zYXZlID0gZ2VuOF9yaW5nX3NhdmU7CisJcmluZy0+cmVzdG9yZSA9IGdlbjhf cmluZ19yZXN0b3JlOwogCiAJcmV0dXJuIGxvZ2ljYWxfcmluZ19pbml0KGRldiwgcmluZyk7CiB9 CkBAIC0xNTE3LDYgKzE5MDgsMTAgQEAgc3RhdGljIGludCBsb2dpY2FsX3ZlYm94X3JpbmdfaW5p dChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogCXJpbmctPmlycV9nZXQgPSBnZW44X2xvZ2ljYWxf cmluZ19nZXRfaXJxOwogCXJpbmctPmlycV9wdXQgPSBnZW44X2xvZ2ljYWxfcmluZ19wdXRfaXJx OwogCXJpbmctPmVtaXRfYmJfc3RhcnQgPSBnZW44X2VtaXRfYmJfc3RhcnQ7CisJcmluZy0+ZW5h YmxlID0gZ2VuOF9yaW5nX2VuYWJsZTsKKwlyaW5nLT5kaXNhYmxlID0gZ2VuOF9yaW5nX2Rpc2Fi bGU7CisJcmluZy0+c2F2ZSA9IGdlbjhfcmluZ19zYXZlOworCXJpbmctPnJlc3RvcmUgPSBnZW44 X3JpbmdfcmVzdG9yZTsKIAogCXJldHVybiBsb2dpY2FsX3JpbmdfaW5pdChkZXYsIHJpbmcpOwog fQpAQCAtMTk3NCwzICsyMzY5LDEyMCBAQCB2b2lkIGludGVsX2xyX2NvbnRleHRfcmVzZXQoc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwKIAkJcmluZ2J1Zi0+dGFpbCA9IDA7CiAJfQogfQorCisvKioK KyAqIGludGVsX2V4ZWNsaXN0c19URFJfZ2V0X2N1cnJlbnRfcmVxdWVzdCgpIC0gcmV0dXJuIHJl cXVlc3QgY3VycmVudGx5CisgKiBwcm9jZXNzZWQgYnkgZW5naW5lCisgKgorICogQHJpbmc6IEVu Z2luZSBjdXJyZW50bHkgcnVubmluZyBjb250ZXh0IHRvIGJlIHJldHVybmVkLgorICoKKyAqIEBy ZXE6ICBPdXRwdXQgcGFyYW1ldGVyIGNvbnRhaW5pbmcgdGhlIGN1cnJlbnQgcmVxdWVzdCAodGhl IHJlcXVlc3QgYXQgdGhlCisgKgkgIGhlYWQgb2YgZXhlY2xpc3QgcXVldWUgY29ycmVzcG9uZGlu ZyB0byB0aGUgZ2l2ZW4gcmluZykuIE1heSBiZSBOVUxMCisgKgkgIGlmIG5vIHJlcXVlc3QgaGFz IGJlZW4gc3VibWl0dGVkIHRvIHRoZSBleGVjbGlzdCBxdWV1ZSBvZiB0aGlzCisgKgkgIGVuZ2lu ZS4gSWYgdGhlIHJlcSBwYXJhbWV0ZXIgcGFzc2VkIGluIHRvIHRoZSBmdW5jdGlvbiBpcyBub3Qg TlVMTAorICoJICBhbmQgYSByZXF1ZXN0IGlzIGZvdW5kIGFuZCByZXR1cm5lZCB0aGUgcmVxdWVz dCBpcyByZWZlcmVuY2VkIGJlZm9yZQorICoJICBpdCBpcyByZXR1cm5lZC4gSXQgaXMgdGhlIHJl c3BvbnNpYmlsaXR5IG9mIHRoZSBjYWxsZXIgdG8gZGVyZWZlcmVuY2UKKyAqCSAgaXQgYXQgdGhl IGVuZCBvZiBpdHMgbGlmZSBjeWNsZS4KKyAqCisgKiBSZXR1cm46CisgKglDT05URVhUX1NVQk1J U1NJT05fU1RBVFVTX09LIGlmIHJlcXVlc3QgaXMgZm91bmQgdG8gYmUgc3VibWl0dGVkIGFuZCBp dHMKKyAqCWNvbnRleHQgaXMgY3VycmVudGx5IHJ1bm5pbmcgb24gZW5naW5lLgorICoKKyAqCUNP TlRFWFRfU1VCTUlTU0lPTl9TVEFUVVNfSU5DT05TSVNURU5UIGlmIHJlcXVlc3QgaXMgZm91bmQg dG8gYmUgc3VibWl0dGVkCisgKglidXQgaXRzIGNvbnRleHQgaXMgbm90IGluIGEgc3RhdGUgdGhh dCBpcyBjb25zaXN0ZW50IHdpdGggY3VycmVudAorICoJaGFyZHdhcmUgc3RhdGUgZm9yIHRoZSBn aXZlbiBlbmdpbmUuIFRoaXMgaGFzIGJlZW4gb2JzZXJ2ZWQgaW4gdGhyZWUgY2FzZXM6CisgKgor ICoJCTEuIEJlZm9yZSB0aGUgZW5naW5lIGhhcyBzd2l0Y2hlZCB0byB0aGlzIGNvbnRleHQgYWZ0 ZXIgaXQgaGFzCisgKgkJYmVlbiBzdWJtaXR0ZWQgdG8gdGhlIGV4ZWNsaXN0IHF1ZXVlLgorICoK KyAqCQkyLiBBZnRlciB0aGUgZW5naW5lIGhhcyBzd2l0Y2hlZCBhd2F5IGZyb20gdGhpcyBjb250 ZXh0IGJ1dAorICoJCWJlZm9yZSB0aGUgY29udGV4dCBoYXMgYmVlbiByZW1vdmVkIGZyb20gdGhl IGV4ZWNsaXN0IHF1ZXVlLgorICoKKyAqCQkzLiBUaGUgZHJpdmVyIGhhcyBsb3N0IGFuIGludGVy cnVwdC4gVHlwaWNhbGx5IHRoZSBoYXJkd2FyZSBoYXMKKyAqCQlnb25lIHRvIGlkbGUgYnV0IHRo ZSBkcml2ZXIgc3RpbGwgdGhpbmtzIHRoZSBjb250ZXh0IGJlbG9uZ2luZyB0bworICoJCXRoZSBy ZXF1ZXN0IGF0IHRoZSBoZWFkIG9mIHRoZSBxdWV1ZSBpcyBzdGlsbCBleGVjdXRpbmcuCisgKgor ICoJQ09OVEVYVF9TVUJNSVNTSU9OX1NUQVRVU19OT05FX1NVQk1JVFRFRCBpZiBubyBjb250ZXh0 IGhhcyBiZWVuIGZvdW5kCisgKgl0byBiZSBzdWJtaXR0ZWQgdG8gdGhlIGV4ZWNsaXN0IHF1ZXVl IGFuZCBpZiB0aGUgaGFyZHdhcmUgaXMgaWRsZS4KKyAqLworZW51bSBjb250ZXh0X3N1Ym1pc3Np b25fc3RhdHVzCitpbnRlbF9leGVjbGlzdHNfVERSX2dldF9jdXJyZW50X3JlcXVlc3Qoc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqcmluZywKKwkJc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICoq cmVxKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdjsKKwl1bnNpZ25lZCBs b25nIGZsYWdzOworCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqdG1wcmVxID0gTlVMTDsK KwlzdHJ1Y3QgaW50ZWxfY29udGV4dCAqdG1wY3R4ID0gTlVMTDsKKwl1bnNpZ25lZCBod19jb250 ZXh0ID0gMDsKKwlib29sIGh3X2FjdGl2ZSA9IGZhbHNlOworCWVudW0gY29udGV4dF9zdWJtaXNz aW9uX3N0YXR1cyBzdGF0dXMgPQorCQkJQ09OVEVYVF9TVUJNSVNTSU9OX1NUQVRVU19VTkRFRklO RUQ7CisKKwlpZiAoV0FSTl9PTighcmluZykpCisJCXJldHVybiBzdGF0dXM7CisKKwlkZXZfcHJp diA9IHJpbmctPmRldi0+ZGV2X3ByaXZhdGU7CisKKwlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX2dl dChkZXZfcHJpdiwgRk9SQ0VXQUtFX0FMTCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnJpbmctPmV4 ZWNsaXN0X2xvY2ssIGZsYWdzKTsKKwlod19jb250ZXh0ID0gSTkxNV9SRUFEKFJJTkdfRVhFQ0xJ U1RfU1RBVFVTX0NUWF9JRChyaW5nKSk7CisKKwlod19hY3RpdmUgPSAoSTkxNV9SRUFEKFJJTkdf RVhFQ0xJU1RfU1RBVFVTKHJpbmcpKSAmCisJCUVYRUNMSVNUX1NUQVRVU19DVVJSRU5UX0FDVElW RV9FTEVNRU5UX1NUQVRVUykgPyB0cnVlIDogZmFsc2U7CisKKwl0bXByZXEgPSBsaXN0X2ZpcnN0 X2VudHJ5X29yX251bGwoJnJpbmctPmV4ZWNsaXN0X3F1ZXVlLAorCQlzdHJ1Y3QgZHJtX2k5MTVf Z2VtX3JlcXVlc3QsIGV4ZWNsaXN0X2xpbmspOworCisJaWYgKHRtcHJlcSkgeworCQkvKgorCQkg KiBJZiB0aGUgY2FsbGVyIGhhcyBub3QgcGFzc2VkIGEgbm9uLU5VTEwgcmVxIHBhcmFtZXRlciB0 aGVuCisJCSAqIGl0IGlzIG5vdCBpbnRlcmVzdGVkIGluIGdldHRpbmcgYSByZXF1ZXN0IHJlZmVy ZW5jZSBiYWNrLgorCQkgKiBEb24ndCB0ZW1wb3JhcmlseSBncmFiIGEgcmVmZXJlbmNlIHNpbmNl IGhvbGRpbmcgdGhlIGV4ZWNsaXN0CisJCSAqIGxvY2sgaXMgZW5vdWdoIHRvIGVuc3VyZSB0aGF0 IHRoZSBleGVjbGlzdCBjb2RlIHdpbGwgaG9sZCBpdHMKKwkJICogcmVmZXJlbmNlIGFsbCB0aHJv dWdob3V0IHRoaXMgZnVuY3Rpb24uIEFzIGxvbmcgYXMgdGhhdCByZWZlcmVuY2UKKwkJICogaXMg a2VwdCB0aGVyZSBpcyBubyBuZWVkIGZvciB1cyB0byB0YWtlIHlldCBhbm90aGVyIHJlZmVyZW5j ZS4KKwkJICogVGhlIHJlYXNvbiB3aHkgdGhpcyBpcyBvZiBpbnRlcmVzdCBpcyBiZWNhdXNlIGNl cnRhaW4gY2FsbGVycywgc3VjaAorCQkgKiBhcyB0aGUgVERSIGhhbmcgY2hlY2tlciwgY2Fubm90 IGdyYWIgc3RydWN0X211dGV4IGJlZm9yZSBjYWxsaW5nCisJCSAqIGFuZCBiZWNhdXNlIG9mIHRo YXQgd2UgY2Fubm90IGRlcmVmZXJlbmNlIGFueSByZXF1ZXN0cyAoRFJNIG1pZ2h0CisJCSAqIGFz c2VydCBpZiB3ZSBkbykuIEp1c3QgcmVseSBvbiB0aGUgZXhlY2xpc3QgY29kZSB0byBwcm92aWRl CisJCSAqIGluZGlyZWN0IHByb3RlY3Rpb24uCisJCSAqLworCQlpZiAocmVxKQorCQkJaTkxNV9n ZW1fcmVxdWVzdF9yZWZlcmVuY2UodG1wcmVxKTsKKworCisJCWlmICh0bXByZXEtPmN0eCkKKwkJ CXRtcGN0eCA9IHRtcHJlcS0+Y3R4OworCisJCVdBUk4oIXRtcGN0eCwgIk5vIGNvbnRleHQgaW4g cmVxdWVzdCAlcFxuIiwgdG1wcmVxKTsKKwl9CisKKwlpZiAodG1wY3R4KSB7CisJCXVuc2lnbmVk IHN3X2NvbnRleHQgPQorCQkJaW50ZWxfZXhlY2xpc3RzX2N0eF9pZCgodG1wY3R4KS0+ZW5naW5l W3JpbmctPmlkXS5zdGF0ZSk7CisKKwkJc3RhdHVzID0gKChod19jb250ZXh0ID09IHN3X2NvbnRl eHQpICYmIGh3X2FjdGl2ZSkgPworCQkJCUNPTlRFWFRfU1VCTUlTU0lPTl9TVEFUVVNfT0sgOgor CQkJCUNPTlRFWFRfU1VCTUlTU0lPTl9TVEFUVVNfSU5DT05TSVNURU5UOworCX0gZWxzZSB7CisJ CS8qCisJCSAqIElmIHdlIGRvbid0IGhhdmUgYW55IHF1ZXVlIGVudHJpZXMgYW5kIHRoZQorCQkg KiBFWEVDTElTVF9TVEFUVVMgcmVnaXN0ZXIgcG9pbnRzIHRvIHplcm8gd2UgYXJlCisJCSAqIGNs ZWFybHkgbm90IHByb2Nlc3NpbmcgYW55IGNvbnRleHQgcmlnaHQgbm93CisJCSAqLworCQlXQVJO KChod19jb250ZXh0IHx8IGh3X2FjdGl2ZSksICJod19jb250ZXh0PSV4LCBoYXJkd2FyZSAlcyFc biIsCisJCQlod19jb250ZXh0LCBod19hY3RpdmUgPyAibm90IGlkbGUiOiJpZGxlIik7CisKKwkJ c3RhdHVzID0gKGh3X2NvbnRleHQgfHwgaHdfYWN0aXZlKSA/CisJCQlDT05URVhUX1NVQk1JU1NJ T05fU1RBVFVTX0lOQ09OU0lTVEVOVCA6CisJCQlDT05URVhUX1NVQk1JU1NJT05fU1RBVFVTX05P TkVfU1VCTUlUVEVEOworCX0KKworCWlmIChyZXEpCisJCSpyZXEgPSB0bXByZXE7CisKKwlzcGlu X3VubG9ja19pcnFyZXN0b3JlKCZyaW5nLT5leGVjbGlzdF9sb2NrLCBmbGFncyk7CisJaW50ZWxf dW5jb3JlX2ZvcmNld2FrZV9wdXQoZGV2X3ByaXYsIEZPUkNFV0FLRV9BTEwpOworCisJcmV0dXJu IHN0YXR1czsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5o IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmgKaW5kZXggMDRkM2E2ZC4uZDJmNDk3 YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmgKKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmgKQEAgLTI5LDYgKzI5LDggQEAKIC8qIEV4ZWNs aXN0cyByZWdzICovCiAjZGVmaW5lIFJJTkdfRUxTUChyaW5nKQkJCSgocmluZyktPm1taW9fYmFz ZSsweDIzMCkKICNkZWZpbmUgUklOR19FWEVDTElTVF9TVEFUVVMocmluZykJKChyaW5nKS0+bW1p b19iYXNlKzB4MjM0KQorI2RlZmluZQkgIEVYRUNMSVNUX1NUQVRVU19DVVJSRU5UX0FDVElWRV9F TEVNRU5UX1NUQVRVUwkoMHgzIDw8IDE0KQorI2RlZmluZSBSSU5HX0VYRUNMSVNUX1NUQVRVU19D VFhfSUQocmluZykJKFJJTkdfRVhFQ0xJU1RfU1RBVFVTKHJpbmcpKzQpCiAjZGVmaW5lIFJJTkdf Q09OVEVYVF9DT05UUk9MKHJpbmcpCSgocmluZyktPm1taW9fYmFzZSsweDI0NCkKICNkZWZpbmUJ ICBDVFhfQ1RSTF9JTkhJQklUX1NZTl9DVFhfU1dJVENICSgxIDw8IDMpCiAjZGVmaW5lCSAgQ1RY X0NUUkxfRU5HSU5FX0NUWF9SRVNUT1JFX0lOSElCSVQJKDEgPDwgMCkKQEAgLTg5LDQgKzkxLDE2 IEBAIHUzMiBpbnRlbF9leGVjbGlzdHNfY3R4X2lkKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 ICpjdHhfb2JqKTsKIHZvaWQgaW50ZWxfbHJjX2lycV9oYW5kbGVyKHN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKnJpbmcpOwogdm9pZCBpbnRlbF9leGVjbGlzdHNfcmV0aXJlX3JlcXVlc3RzKHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcpOwogCitpbnQgaW50ZWxfZXhlY2xpc3RzX3JlYWRfdGFp bChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nLAorCQkJIHN0cnVjdCBpbnRlbF9jb250ZXh0 ICpjdHgsCisJCQkgdTMyICp0YWlsKTsKKworaW50IGludGVsX2V4ZWNsaXN0c193cml0ZV9oZWFk KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcsCisJCQkgIHN0cnVjdCBpbnRlbF9jb250ZXh0 ICpjdHgsCisJCQkgIHUzMiBoZWFkKTsKKworaW50IGludGVsX2V4ZWNsaXN0c19yZWFkX2hlYWQo c3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZywKKwkJCSBzdHJ1Y3QgaW50ZWxfY29udGV4dCAq Y3R4LAorCQkJIHUzMiAqaGVhZCk7CisKICNlbmRpZiAvKiBfSU5URUxfTFJDX0hfICovCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmNfdGRyLmggYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9scmNfdGRyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMC4uNDUyMDc1MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2xyY190ZHIuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTUg SW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBm cmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlz IHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdh cmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGlu Y2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBt b2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29y IHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdo b20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhl IGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNl IGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFn cmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0 aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURF RCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJ TVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1F UkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBO T05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09Q WVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIK KyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Ig T1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRI IFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCisgKiBERUFMSU5HUyBJTiBUSEUgU09G VFdBUkUuCisgKi8KKworI2lmbmRlZiBfSU5URUxfTFJDX1REUl9IXworI2RlZmluZSBfSU5URUxf TFJDX1REUl9IXworCisvKiBQcml2aWxlZ2VkIGV4ZWNsaXN0IEFQSSB1c2VkIGV4Y2x1c2l2ZWx5 IGJ5IFREUiAqLworCit2b2lkIGludGVsX2V4ZWNsaXN0c19URFJfY29udGV4dF9yZXN1Ym1pc3Np b24oc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZyk7CisKK2VudW0gY29udGV4dF9zdWJtaXNz aW9uX3N0YXR1cworaW50ZWxfZXhlY2xpc3RzX1REUl9nZXRfY3VycmVudF9yZXF1ZXN0KHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcsCisJCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAq KnJlcSk7CisKKyNlbmRpZiAvKiBfSU5URUxfTFJDX1REUl9IXyAqLworCmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmMgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9yaW5nYnVmZmVyLmMKaW5kZXggZjk0OTU4My4uMGZkZjk4MyAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5jCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuYwpAQCAtNDQyLDYgKzQ0Miw4OCBAQCBzdGF0 aWMgdm9pZCByaW5nX3dyaXRlX3RhaWwoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZywKIAlJ OTE1X1dSSVRFX1RBSUwocmluZywgdmFsdWUpOwogfQogCitpbnQgaW50ZWxfcmluZ19kaXNhYmxl KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcpCit7CisJV0FSTl9PTighcmluZyk7CisKKwlp ZiAocmluZyAmJiByaW5nLT5kaXNhYmxlKQorCQlyZXR1cm4gcmluZy0+ZGlzYWJsZShyaW5nKTsK KwllbHNlIHsKKwkJRFJNX0VSUk9SKCJSaW5nIGRpc2FibGUgbm90IHN1cHBvcnRlZCBvbiAlc1xu IiwgcmluZy0+bmFtZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KK30KKworaW50IGludGVsX3Jp bmdfZW5hYmxlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcpCit7CisJV0FSTl9PTighcmlu Zyk7CisKKwlpZiAocmluZyAmJiByaW5nLT5lbmFibGUpCisJCXJldHVybiByaW5nLT5lbmFibGUo cmluZyk7CisJZWxzZSB7CisJCURSTV9FUlJPUigiUmluZyBlbmFibGUgbm90IHN1cHBvcnRlZCBv biAlc1xuIiwgcmluZy0+bmFtZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KK30KKworaW50IGlu dGVsX3Jpbmdfc2F2ZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nLAorCQlzdHJ1Y3QgZHJt X2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSwKKwkJYm9vbCBmb3JjZV9hZHZhbmNlKQoreworCVdBUk5f T04oIXJpbmcpOworCisJaWYgKHJpbmcgJiYgcmluZy0+c2F2ZSkKKwkJcmV0dXJuIHJpbmctPnNh dmUocmluZywgcmVxLCBmb3JjZV9hZHZhbmNlKTsKKwllbHNlIHsKKwkJRFJNX0VSUk9SKCJSaW5n IHNhdmUgbm90IHN1cHBvcnRlZCBvbiAlc1xuIiwgcmluZy0+bmFtZSk7CisJCXJldHVybiAtRUlO VkFMOworCX0KK30KKworaW50IGludGVsX3JpbmdfcmVzdG9yZShzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICpyaW5nLAorCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSkKK3sKKwlXQVJO X09OKCFyaW5nKTsKKworCWlmIChyaW5nICYmIHJpbmctPnJlc3RvcmUpCisJCXJldHVybiByaW5n LT5yZXN0b3JlKHJpbmcsIHJlcSk7CisJZWxzZSB7CisJCURSTV9FUlJPUigiUmluZyByZXN0b3Jl IG5vdCBzdXBwb3J0ZWQgb24gJXNcbiIsIHJpbmctPm5hbWUpOworCQlyZXR1cm4gLUVJTlZBTDsK Kwl9Cit9CisKK3ZvaWQgaW50ZWxfZ3B1X2VuZ2luZV9yZXNldF9yZXNhbXBsZShzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICpyaW5nLAorCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSkK K3sKKwlzdHJ1Y3QgaW50ZWxfcmluZ2J1ZmZlciAqcmluZ2J1ZjsKKwlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXY7CisKKwlpZiAoV0FSTl9PTighcmluZykpCisJCXJldHVybjsKKwor CWRldl9wcml2ID0gcmluZy0+ZGV2LT5kZXZfcHJpdmF0ZTsKKworCWlmIChpOTE1LmVuYWJsZV9l eGVjbGlzdHMpIHsKKwkJc3RydWN0IGludGVsX2NvbnRleHQgKmN0eDsKKworCQlpZiAoV0FSTl9P TighcmVxKSkKKwkJCXJldHVybjsKKworCQljdHggPSByZXEtPmN0eDsKKwkJcmluZ2J1ZiA9IGN0 eC0+ZW5naW5lW3JpbmctPmlkXS5yaW5nYnVmOworCisJCS8qCisJCSAqIEluIGdlbjgrIGNvbnRl eHQgaGVhZCBpcyByZXN0b3JlZCBkdXJpbmcgcmVzZXQgYW5kCisJCSAqIHdlIGNhbiB1c2UgaXQg YXMgYSByZWZlcmVuY2UgdG8gc2V0IHVwIHRoZSBuZXcKKwkJICogZHJpdmVyIHN0YXRlLgorCQkg Ki8KKwkJSTkxNV9SRUFEX0hFQURfQ1RYKHJpbmcsIGN0eCwgcmluZ2J1Zi0+aGVhZCk7CisJCXJp bmdidWYtPmxhc3RfcmV0aXJlZF9oZWFkID0gLTE7CisJCWludGVsX3JpbmdfdXBkYXRlX3NwYWNl KHJpbmdidWYpOworCX0KK30KKwogdTY0IGludGVsX3JpbmdfZ2V0X2FjdGl2ZV9oZWFkKHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcpCiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2ID0gcmluZy0+ZGV2LT5kZXZfcHJpdmF0ZTsKQEAgLTYzNyw3ICs3MTksNyBAQCBzdGF0 aWMgaW50IGluaXRfcmluZ19jb21tb24oc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZykKIAly aW5nYnVmLT50YWlsID0gSTkxNV9SRUFEX1RBSUwocmluZykgJiBUQUlMX0FERFI7CiAJaW50ZWxf cmluZ191cGRhdGVfc3BhY2UocmluZ2J1Zik7CiAKLQltZW1zZXQoJnJpbmctPmhhbmdjaGVjaywg MCwgc2l6ZW9mKHJpbmctPmhhbmdjaGVjaykpOworCWk5MTVfaGFuZ2NoZWNrX3JlaW5pdChyaW5n KTsKIAogb3V0OgogCWludGVsX3VuY29yZV9mb3JjZXdha2VfcHV0KGRldl9wcml2LCBGT1JDRVdB S0VfQUxMKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZm ZXIuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuaAppbmRleCAzOWY2 ZGZjLi4zNTM2MGE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5n YnVmZmVyLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oCkBA IC00OCw2ICs0OCwyMiBAQCBzdHJ1Y3QgIGludGVsX2h3X3N0YXR1c19wYWdlIHsKICNkZWZpbmUg STkxNV9SRUFEX01PREUocmluZykgSTkxNV9SRUFEKFJJTkdfTUlfTU9ERSgocmluZyktPm1taW9f YmFzZSkpCiAjZGVmaW5lIEk5MTVfV1JJVEVfTU9ERShyaW5nLCB2YWwpIEk5MTVfV1JJVEUoUklO R19NSV9NT0RFKChyaW5nKS0+bW1pb19iYXNlKSwgdmFsKQogCisKKyNkZWZpbmUgSTkxNV9SRUFE X1RBSUxfQ1RYKGVuZ2luZSwgY3R4LCBvdXR2YWwpIFwKKwlpbnRlbF9leGVjbGlzdHNfcmVhZF90 YWlsKChlbmdpbmUpLCBcCisJCQkJKGN0eCksIFwKKwkJCQkmKG91dHZhbCkpOworCisjZGVmaW5l IEk5MTVfUkVBRF9IRUFEX0NUWChlbmdpbmUsIGN0eCwgb3V0dmFsKSBcCisJaW50ZWxfZXhlY2xp c3RzX3JlYWRfaGVhZCgoZW5naW5lKSwgXAorCQkJCShjdHgpLCBcCisJCQkJJihvdXR2YWwpKTsK KworI2RlZmluZSBJOTE1X1dSSVRFX0hFQURfQ1RYKGVuZ2luZSwgY3R4LCB2YWwpIFwKKwlpbnRl bF9leGVjbGlzdHNfd3JpdGVfaGVhZCgoZW5naW5lKSwgXAorCQkJCShjdHgpLCBcCisJCQkJKHZh bCkpOworCiAvKiBzZXFubyBzaXplIGlzIGFjdHVhbGx5IG9ubHkgYSB1aW50MzIsIGJ1dCBzaW5j ZSB3ZSBwbGFuIHRvIHVzZSBNSV9GTFVTSF9EVyB0bwogICogZG8gdGhlIHdyaXRlcywgYW5kIHRo YXQgbXVzdCBoYXZlIHF3IGFsaWduZWQgb2Zmc2V0cywgc2ltcGx5IHByZXRlbmQgaXQncyA4Yi4K ICAqLwpAQCAtOTIsNiArMTA4LDM0IEBAIHN0cnVjdCBpbnRlbF9yaW5nX2hhbmdjaGVjayB7CiAJ aW50IHNjb3JlOwogCWVudW0gaW50ZWxfcmluZ19oYW5nY2hlY2tfYWN0aW9uIGFjdGlvbjsKIAlp bnQgZGVhZGxvY2s7CisKKwkvKgorCSAqIExhc3QgcmVjb3JkZWQgcmluZyBoZWFkIGluZGV4Lgor CSAqIFRoaXMgaXMgb25seSBldmVyIGEgcmluZyBpbmRleCB3aGVyZSBhcyBhY3RpdmUKKwkgKiBo ZWFkIG1heSBiZSBhIGdyYXBoaWNzIGFkZHJlc3MgaW4gYSByaW5nIGJ1ZmZlcgorCSAqLworCXUz MiBsYXN0X2hlYWQ7CisKKwkvKiBGbGFnIHRvIGluZGljYXRlIGlmIGVuZ2luZSByZXNldCByZXF1 aXJlZCAqLworCWF0b21pY190IGZsYWdzOworCisJLyogSW5kaWNhdGVzIHJlcXVlc3QgdG8gcmVz ZXQgdGhpcyBlbmdpbmUgKi8KKyNkZWZpbmUgSTkxNV9FTkdJTkVfUkVTRVRfSU5fUFJPR1JFU1Mg KDE8PDApCisKKwkvKgorCSAqIFRpbWVzdGFtcCAoc2Vjb25kcykgZnJvbSB3aGVuIHRoZSBsYXN0 IHRpbWUKKwkgKiB0aGlzIGVuZ2luZSB3YXMgcmVzZXQuCisJICovCisJdTMyIGxhc3RfZW5naW5l X3Jlc2V0X3RpbWU7CisKKwkvKgorCSAqIE51bWJlciBvZiB0aW1lcyB0aGlzIGVuZ2luZSBoYXMg YmVlbgorCSAqIHJlc2V0IHNpbmNlIGJvb3QKKwkgKi8KKwl1MzIgcmVzZXRfY291bnQ7CisKKwkv KiBOdW1iZXIgb2YgVERSIGhhbmcgZGV0ZWN0aW9ucyAqLworCXUzMiB0ZHJfY291bnQ7CiB9Owog CiBzdHJ1Y3QgaW50ZWxfcmluZ2J1ZmZlciB7CkBAIC0xNzcsNiArMjIxLDE0IEBAIHN0cnVjdCAg aW50ZWxfZW5naW5lX2NzIHsKICNkZWZpbmUgSTkxNV9ESVNQQVRDSF9QSU5ORUQgMHgyCiAJdm9p ZAkJKCpjbGVhbnVwKShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nKTsKIAorCWludCAoKmVu YWJsZSkoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZyk7CisJaW50ICgqZGlzYWJsZSkoc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqcmluZyk7CisJaW50ICgqc2F2ZSkoc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqcmluZywKKwkJICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxLAor CQkgICAgYm9vbCBmb3JjZV9hZHZhbmNlKTsKKwlpbnQgKCpyZXN0b3JlKShzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICpyaW5nLAorCQkgICAgICAgc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpy ZXEpOworCiAJLyogR0VOOCBzaWduYWwvd2FpdCB0YWJsZSAtIG5ldmVyIHRydXN0IGNvbW1lbnRz IQogCSAqCSAgc2lnbmFsIHRvCXNpZ25hbCB0byAgICBzaWduYWwgdG8gICBzaWduYWwgdG8gICAg ICBzaWduYWwgdG8KIAkgKgkgICAgUkNTCQkgICBWQ1MgICAgICAgICAgQkNTICAgICAgICBWRUNT CQkgVkNTMgpAQCAtMjgzLDYgKzMzNSw5IEBAIHN0cnVjdCAgaW50ZWxfZW5naW5lX2NzIHsKIAog CXN0cnVjdCBpbnRlbF9yaW5nX2hhbmdjaGVjayBoYW5nY2hlY2s7CiAKKwkvKiBTYXZlZCBoZWFk IHZhbHVlIHRvIGJlIHJlc3RvcmVkIGFmdGVyIHJlc2V0ICovCisJdTMyIHNhdmVkX2hlYWQ7CisK IAlzdHJ1Y3QgewogCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOwogCQl1MzIgZ3R0 X29mZnNldDsKQEAgLTQyMCw2ICs0NzUsMTUgQEAgaW50IGludGVsX3Jpbmdfc3BhY2Uoc3RydWN0 IGludGVsX3JpbmdidWZmZXIgKnJpbmdidWYpOwogYm9vbCBpbnRlbF9yaW5nX3N0b3BwZWQoc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqcmluZyk7CiB2b2lkIF9faW50ZWxfcmluZ19hZHZhbmNlKHN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcpOwogCit2b2lkIGludGVsX2dwdV9lbmdpbmVfcmVz ZXRfcmVzYW1wbGUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZywKKwkJc3RydWN0IGRybV9p OTE1X2dlbV9yZXF1ZXN0ICpyZXEpOworaW50IGludGVsX3JpbmdfZGlzYWJsZShzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICpyaW5nKTsKK2ludCBpbnRlbF9yaW5nX2VuYWJsZShzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICpyaW5nKTsKK2ludCBpbnRlbF9yaW5nX3NhdmUoc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqcmluZywKKwkJc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEsIGJvb2wgZm9y Y2VfYWR2YW5jZSk7CitpbnQgaW50ZWxfcmluZ19yZXN0b3JlKHN0cnVjdCBpbnRlbF9lbmdpbmVf Y3MgKnJpbmcsCisJCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxKTsKKwogaW50IF9f bXVzdF9jaGVjayBpbnRlbF9yaW5nX2lkbGUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZyk7 CiB2b2lkIGludGVsX3JpbmdfaW5pdF9zZXFubyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5n LCB1MzIgc2Vxbm8pOwogaW50IGludGVsX3JpbmdfZmx1c2hfYWxsX2NhY2hlcyhzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICpyaW5nKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX3VuY29yZS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdW5jb3JlLmMKaW5kZXgg ZDk2ZDE1Zi4uOTE0MjdhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf dW5jb3JlLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdW5jb3JlLmMKQEAgLTE0 NjMsNiArMTQ2MywyMDUgQEAgaW50IGludGVsX2dwdV9yZXNldChzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2KQogCQlyZXR1cm4gLUVOT0RFVjsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgd2FpdF9mb3Jf ZW5naW5lX3Jlc2V0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKKwkJdW5zaWdu ZWQgaW50IGdyZG9tKQoreworI2RlZmluZSBfQ05EICgoX19yYXdfaTkxNV9yZWFkMzIoZGV2X3By aXYsIEdFTjZfR0RSU1QpICYgZ3Jkb20pID09IDApCisKKwkvKgorCSAqIFNwaW4gd2FpdGluZyBm b3IgdGhlIGRldmljZSB0byBhY2sgdGhlIHJlc2V0IHJlcXVlc3QuCisJICogVGltZXMgb3V0IGFm dGVyIDUwMCB1cworCSAqICovCisJcmV0dXJuIHdhaXRfZm9yX2F0b21pY191cyhfQ05ELCA1MDAp OworCisjdW5kZWYgX0NORAorfQorCitzdGF0aWMgaW50IGRvX2VuZ2luZV9yZXNldF9ub2xvY2so c3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQoreworCWludCByZXQgPSAtRU5PREVWOwor CXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGVuZ2luZS0+ZGV2LT5kZXZfcHJp dmF0ZTsKKworCWFzc2VydF9zcGluX2xvY2tlZCgmZGV2X3ByaXYtPnVuY29yZS5sb2NrKTsKKwor CXN3aXRjaCAoZW5naW5lLT5pZCkgeworCWNhc2UgUkNTOgorCQlfX3Jhd19pOTE1X3dyaXRlMzIo ZGV2X3ByaXYsIEdFTjZfR0RSU1QsIEdFTjZfR1JET01fUkVOREVSKTsKKwkJZW5naW5lLT5oYW5n Y2hlY2sucmVzZXRfY291bnQrKzsKKwkJcmV0ID0gd2FpdF9mb3JfZW5naW5lX3Jlc2V0KGRldl9w cml2LCBHRU42X0dSRE9NX1JFTkRFUik7CisJCWJyZWFrOworCisJY2FzZSBCQ1M6CisJCV9fcmF3 X2k5MTVfd3JpdGUzMihkZXZfcHJpdiwgR0VONl9HRFJTVCwgR0VONl9HUkRPTV9CTFQpOworCQll bmdpbmUtPmhhbmdjaGVjay5yZXNldF9jb3VudCsrOworCQlyZXQgPSB3YWl0X2Zvcl9lbmdpbmVf cmVzZXQoZGV2X3ByaXYsIEdFTjZfR1JET01fQkxUKTsKKwkJYnJlYWs7CisKKwljYXNlIFZDUzoK KwkJX19yYXdfaTkxNV93cml0ZTMyKGRldl9wcml2LCBHRU42X0dEUlNULCBHRU42X0dSRE9NX01F RElBKTsKKwkJZW5naW5lLT5oYW5nY2hlY2sucmVzZXRfY291bnQrKzsKKwkJcmV0ID0gd2FpdF9m b3JfZW5naW5lX3Jlc2V0KGRldl9wcml2LCBHRU42X0dSRE9NX01FRElBKTsKKwkJYnJlYWs7CisK KwljYXNlIFZFQ1M6CisJCV9fcmF3X2k5MTVfd3JpdGUzMihkZXZfcHJpdiwgR0VONl9HRFJTVCwg R0VONl9HUkRPTV9WRUNTKTsKKwkJZW5naW5lLT5oYW5nY2hlY2sucmVzZXRfY291bnQrKzsKKwkJ cmV0ID0gd2FpdF9mb3JfZW5naW5lX3Jlc2V0KGRldl9wcml2LCBHRU42X0dSRE9NX1ZFQ1MpOwor CQlicmVhazsKKworCWNhc2UgVkNTMjoKKwkJX19yYXdfaTkxNV93cml0ZTMyKGRldl9wcml2LCBH RU42X0dEUlNULCBHRU44X0dSRE9NX01FRElBMik7CisJCWVuZ2luZS0+aGFuZ2NoZWNrLnJlc2V0 X2NvdW50Kys7CisJCXJldCA9IHdhaXRfZm9yX2VuZ2luZV9yZXNldChkZXZfcHJpdiwgR0VOOF9H UkRPTV9NRURJQTIpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCURSTV9FUlJPUigiVW5leHBl Y3RlZCBlbmdpbmU6ICVkXG4iLCBlbmdpbmUtPmlkKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJu IHJldDsKK30KKworc3RhdGljIGludCBnZW44X2RvX2VuZ2luZV9yZXNldChzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICplbmdpbmUpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGVuZ2luZS0+ ZGV2OworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZh dGU7CisJaW50IHJldCA9IC1FTk9ERVY7CisJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKKworCXNw aW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+dW5jb3JlLmxvY2ssIGlycWZsYWdzKTsKKwlyZXQg PSBkb19lbmdpbmVfcmVzZXRfbm9sb2NrKGVuZ2luZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9y ZSgmZGV2X3ByaXYtPnVuY29yZS5sb2NrLCBpcnFmbGFncyk7CisKKwlpZiAoIXJldCkgeworCQl1 MzIgcmVzZXRfY3RsID0gMDsKKworCQkvKgorCQkgKiBDb25maXJtIHRoYXQgcmVzZXQgY29udHJv bCByZWdpc3RlciBiYWNrIHRvIG5vcm1hbAorCQkgKiBmb2xsb3dpbmcgdGhlIHJlc2V0LgorCQkg Ki8KKwkJcmVzZXRfY3RsID0gSTkxNV9SRUFEKFJJTkdfUkVTRVRfQ1RMKGVuZ2luZSkpOworCQlX QVJOKHJlc2V0X2N0bCAmIDB4MywgIlJlc2V0IGNvbnRyb2wgc3RpbGwgYWN0aXZlIGFmdGVyIHJl c2V0ISAoMHglMDh4KVxuIiwKKwkJCXJlc2V0X2N0bCk7CisJfSBlbHNlIHsKKwkJRFJNX0VSUk9S KCJFbmdpbmUgcmVzZXQgZmFpbGVkISAoJWQpXG4iLCByZXQpOworCX0KKworCXJldHVybiByZXQ7 Cit9CisKK2ludCBpbnRlbF9ncHVfZW5naW5lX3Jlc2V0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3Mg KmVuZ2luZSkKK3sKKwkvKiBSZXNldCBhbiBpbmRpdmlkdWFsIGVuZ2luZSAqLworCWludCByZXQg PSAtRU5PREVWOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBlbmdpbmUtPmRldjsKKworCXN3 aXRjaCAoSU5URUxfSU5GTyhkZXYpLT5nZW4pIHsKKwljYXNlIDg6CisJCXJldCA9IGdlbjhfZG9f ZW5naW5lX3Jlc2V0KGVuZ2luZSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCURSTV9FUlJPUigi UGVyIEVuZ2luZSBSZXNldCBub3Qgc3VwcG9ydGVkIG9uIEdlbiVkXG4iLAorCQkJICBJTlRFTF9J TkZPKGRldiktPmdlbik7CisJCXJldCA9IC1FTk9ERVY7CisJCWJyZWFrOworCX0KKworCXJldHVy biByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZ2VuOF9yZXF1ZXN0X2VuZ2luZV9yZXNldChzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICplbmdpbmUpCit7CisJaW50IHJldCA9IDA7CisJdW5zaWduZWQgbG9u ZyBpcnFmbGFnczsKKwl1MzIgcmVzZXRfY3RsID0gMDsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYgPSBlbmdpbmUtPmRldi0+ZGV2X3ByaXZhdGU7CisKKwlzcGluX2xvY2tfaXJx c2F2ZSgmZGV2X3ByaXYtPnVuY29yZS5sb2NrLCBpcnFmbGFncyk7CisKKwkvKgorCSAqIEluaXRp YXRlIHJlc2V0IGhhbmRzaGFrZSBieSByZXF1ZXN0aW5nIHJlc2V0IGZyb20gdGhlCisJICogcmVz ZXQgY29udHJvbCByZWdpc3Rlci4KKwkgKi8KKwlfX3Jhd19pOTE1X3dyaXRlMzIoZGV2X3ByaXYs IFJJTkdfUkVTRVRfQ1RMKGVuZ2luZSksCisJCV9NQVNLRURfQklUX0VOQUJMRShSRVFVRVNUX1JF U0VUKSk7CisKKwkvKgorCSAqIFdhaXQgZm9yIHJlYWR5IHRvIHJlc2V0IGFjay4KKwkgKi8KKwly ZXQgPSB3YWl0X2Zvcl9hdG9taWNfdXMoKF9fcmF3X2k5MTVfcmVhZDMyKGRldl9wcml2LAorCQlS SU5HX1JFU0VUX0NUTChlbmdpbmUpKSAmIFJFQURZX0ZPUl9SRVNFVCkgPT0KKwkJCVJFQURZX0ZP Ul9SRVNFVCwgNTAwKTsKKworCXJlc2V0X2N0bCA9IF9fcmF3X2k5MTVfcmVhZDMyKGRldl9wcml2 LCBSSU5HX1JFU0VUX0NUTChlbmdpbmUpKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRl dl9wcml2LT51bmNvcmUubG9jaywgaXJxZmxhZ3MpOworCisJV0FSTihyZXQsICJSZXNldCByZXF1 ZXN0IGZhaWxlZCEgKGVycj0lZCwgcmVzZXQgY29udHJvbD0weCUwOHgpXG4iLAorCQlyZXQsIHJl c2V0X2N0bCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGdlbjhfdW5yZXF1ZXN0 X2VuZ2luZV9yZXNldChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCit7CisJc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZW5naW5lLT5kZXYtPmRldl9wcml2YXRlOwor CisJSTkxNV9XUklURShSSU5HX1JFU0VUX0NUTChlbmdpbmUpLCBfTUFTS0VEX0JJVF9ESVNBQkxF KFJFUVVFU1RfUkVTRVQpKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIE9uIGdlbjgrIGEgcmVz ZXQgcmVxdWVzdCBoYXMgdG8gYmUgaXNzdWVkIHZpYSB0aGUgcmVzZXQgY29udHJvbCByZWdpc3Rl cgorICogYmVmb3JlIGEgR1BVIGVuZ2luZSBjYW4gYmUgcmVzZXQgaW4gb3JkZXIgdG8gc3RvcCB0 aGUgY29tbWFuZCBzdHJlYW1lcgorICogYW5kIGlkbGUgdGhlIGVuZ2luZS4gVGhpcyByZXBsYWNl cyB0aGUgbGVnYWN5IHdheSBvZiBzdG9wcGluZyBhbiBlbmdpbmUKKyAqIGJ5IHdyaXRpbmcgdG8g dGhlIHN0b3AgcmluZyBiaXQgaW4gdGhlIE1JX01PREUgcmVnaXN0ZXIuCisgKi8KK2ludCBpbnRl bF9yZXF1ZXN0X2dwdV9lbmdpbmVfcmVzZXQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5l KQoreworCS8qIFJlcXVlc3QgcmVzZXQgZm9yIGFuIGluZGl2aWR1YWwgZW5naW5lICovCisJaW50 IHJldCA9IC1FTk9ERVY7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldjsKKworCWlmIChXQVJOX09O KCFlbmdpbmUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRldiA9IGVuZ2luZS0+ZGV2OworCisJ aWYgKElOVEVMX0lORk8oZGV2KS0+Z2VuID49IDgpCisJCXJldCA9IGdlbjhfcmVxdWVzdF9lbmdp bmVfcmVzZXQoZW5naW5lKTsKKwllbHNlCisJCURSTV9FUlJPUigiUmVzZXQgcmVxdWVzdCBub3Qg c3VwcG9ydGVkIG9uIEdlbiVkXG4iLAorCQkJICBJTlRFTF9JTkZPKGRldiktPmdlbik7CisKKwly ZXR1cm4gcmV0OworfQorCisvKgorICogSXQgaXMgcG9zc2libGUgdG8gYmFjayBvZmYgZnJvbSBh IHByZXZpb3VzbHkgaXNzdWVkIHJlc2V0IHJlcXVlc3QgYnkgc2ltcGx5CisgKiBjbGVhcmluZyB0 aGUgcmVzZXQgcmVxdWVzdCBiaXQgaW4gdGhlIHJlc2V0IGNvbnRyb2wgcmVnaXN0ZXIuCisgKi8K K2ludCBpbnRlbF91bnJlcXVlc3RfZ3B1X2VuZ2luZV9yZXNldChzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICplbmdpbmUpCit7CisJLyogUmVxdWVzdCByZXNldCBmb3IgYW4gaW5kaXZpZHVhbCBlbmdp bmUgKi8KKwlpbnQgcmV0ID0gLUVOT0RFVjsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2OworCisJ aWYgKFdBUk5fT04oIWVuZ2luZSkpCisJCXJldHVybiAtRUlOVkFMOworCisJZGV2ID0gZW5naW5l LT5kZXY7CisKKwlpZiAoSU5URUxfSU5GTyhkZXYpLT5nZW4gPj0gOCkKKwkJcmV0ID0gZ2VuOF91 bnJlcXVlc3RfZW5naW5lX3Jlc2V0KGVuZ2luZSk7CisJZWxzZQorCQlEUk1fRVJST1IoIlJlc2V0 IHVucmVxdWVzdCBub3Qgc3VwcG9ydGVkIG9uIEdlbiVkXG4iLAorCQkJICBJTlRFTF9JTkZPKGRl diktPmdlbik7CisKKwlyZXR1cm4gcmV0OworfQorCiB2b2lkIGludGVsX3VuY29yZV9jaGVja19l cnJvcnMoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotLSAKMS45LjEKCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QK SW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Au b3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==