From mboxrd@z Thu Jan 1 00:00:00 1970 From: John.C.Harrison@Intel.com Subject: [PATCH v5 06/35] drm/i915: Start of GPU scheduler Date: Thu, 18 Feb 2016 14:26:54 +0000 Message-ID: <1455805644-6450-7-git-send-email-John.C.Harrison@Intel.com> References: <1455805644-6450-1-git-send-email-John.C.Harrison@Intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTP id 439AF6EBF0 for ; Thu, 18 Feb 2016 14:27:36 +0000 (UTC) In-Reply-To: <1455805644-6450-1-git-send-email-John.C.Harrison@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 List-Id: intel-gfx@lists.freedesktop.org RnJvbTogSm9obiBIYXJyaXNvbiA8Sm9obi5DLkhhcnJpc29uQEludGVsLmNvbT4KCkluaXRpYWwg Y3JlYXRpb24gb2Ygc2NoZWR1bGVyIHNvdXJjZSBmaWxlcy4gTm90ZSB0aGF0IHRoaXMgcGF0Y2gK aW1wbGVtZW50cyBtb3N0IG9mIHRoZSBzY2hlZHVsZXIgZnVuY3Rpb25hbGl0eSBidXQgZG9lcyBu b3QgaG9vayBpdCBpbgp0byB0aGUgZHJpdmVyIHlldC4gSXQgYWxzbyBsZWF2ZXMgdGhlIHNjaGVk dWxlciBjb2RlIGluICdwYXNzIHRocm91Z2gnCm1vZGUgc28gdGhhdCBldmVuIHdoZW4gaXQgaXMg aG9va2VkIGluLCBpdCB3aWxsIG5vdCBhY3R1YWxseSBkbyB2ZXJ5Cm11Y2guIFRoaXMgYWxsb3dz IHRoZSBob29rcyB0byBiZSBhZGRlZCBvbmUgYXQgYSB0aW1lIGluIGJpdGUgc2l6ZQpjaHVua3Mg YW5kIG9ubHkgd2hlbiB0aGUgc2NoZWR1bGVyIGlzIGZpbmFsbHkgZW5hYmxlZCBhdCB0aGUgZW5k IGRvZXMKYW55dGhpbmcgc3RhcnQgaGFwcGVuaW5nLgoKVGhlIGdlbmVyYWwgdGhlb3J5IG9mIG9w ZXJhdGlvbiBpcyB0aGF0IHdoZW4gYmF0Y2ggYnVmZmVycyBhcmUKc3VibWl0dGVkIHRvIHRoZSBk cml2ZXIsIHRoZSBleGVjYnVmZmVyKCkgY29kZSBwYWNrYWdlcyB1cCBhbGwgdGhlCmluZm9ybWF0 aW9uIHJlcXVpcmVkIHRvIGV4ZWN1dGUgdGhlIGJhdGNoIGJ1ZmZlciBhdCBhIGxhdGVyIHRpbWUu IFRoaXMKcGFja2FnZSBpcyBnaXZlbiBvdmVyIHRvIHRoZSBzY2hlZHVsZXIgd2hpY2ggYWRkcyBp dCB0byBhbiBpbnRlcm5hbApub2RlIGxpc3QuIFRoZSBzY2hlZHVsZXIgYWxzbyBzY2FucyB0aGUg bGlzdCBvZiBvYmplY3RzIGFzc29jaWF0ZWQKd2l0aCB0aGUgYmF0Y2ggYnVmZmVyIGFuZCBjb21w YXJlcyB0aGVtIGFnYWluc3QgdGhlIG9iamVjdHMgYWxyZWFkeSBpbgp1c2UgYnkgb3RoZXIgYnVm ZmVycyBpbiB0aGUgbm9kZSBsaXN0LiBJZiBtYXRjaGVzIGFyZSBmb3VuZCB0aGVuIHRoZQpuZXcg YmF0Y2ggYnVmZmVyIG5vZGUgaXMgbWFya2VkIGFzIGJlaW5nIGRlcGVuZGVudCB1cG9uIHRoZSBt YXRjaGluZwpub2RlLiBUaGUgc2FtZSBpcyBkb25lIGZvciB0aGUgY29udGV4dCBvYmplY3QuIFRo ZSBzY2hlZHVsZXIgYWxzbwpidW1wcyB1cCB0aGUgcHJpb3JpdHkgb2Ygc3VjaCBtYXRjaGluZyBu b2RlcyBvbiB0aGUgZ3JvdW5kcyB0aGF0IHRoZQptb3JlIGRlcGVuZGVuY2llcyBhIGdpdmVuIGJh dGNoIGJ1ZmZlciBoYXMgdGhlIG1vcmUgaW1wb3J0YW50IGl0IGlzCmxpa2VseSB0byBiZS4KClRo ZSBzY2hlZHVsZXIgYWltcyB0byBoYXZlIGEgZ2l2ZW4gKHR1bmVhYmxlKSBudW1iZXIgb2YgYmF0 Y2ggYnVmZmVycwppbiBmbGlnaHQgb24gdGhlIGhhcmR3YXJlIGF0IGFueSBnaXZlbiB0aW1lLiBJ ZiBmZXdlciB0aGFuIHRoaXMgYXJlCmN1cnJlbnRseSBleGVjdXRpbmcgd2hlbiBhIG5ldyBub2Rl IGlzIHF1ZXVlZCwgdGhlbiB0aGUgbm9kZSBpcyBwYXNzZWQKc3RyYWlnaHQgdGhyb3VnaCB0byB0 aGUgc3VibWl0IGZ1bmN0aW9uLiBPdGhlcndpc2UgaXQgaXMgc2ltcGx5IGFkZGVkCnRvIHRoZSBx dWV1ZSBhbmQgdGhlIGRyaXZlciByZXR1cm5zIGJhY2sgdG8gdXNlciBsYW5kLgoKVGhlIHNjaGVk dWxlciBpcyBub3RpZmllZCB3aGVuIGVhY2ggYmF0Y2ggYnVmZmVyIGNvbXBsZXRlcyBhbmQgdXBk YXRlcwppdHMgaW50ZXJuYWwgdHJhY2tpbmcgYWNjb3JkaW5nbHkuIEF0IHRoZSBlbmQgb2YgdGhl IGNvbXBsZXRpb24KaW50ZXJydXB0IHByb2Nlc3NpbmcsIGlmIGFueSBzY2hlZHVsZXIgdHJhY2tl ZCBiYXRjaGVzIHdlcmUgcHJvY2Vzc2VkLAp0aGUgc2NoZWR1bGVyJ3MgZGVmZXJyZWQgd29ya2Vy IHRocmVhZCBpcyB3b2tlbiB1cC4gVGhpcyBjYW4gZG8gbW9yZQppbnZvbHZlZCBwcm9jZXNzaW5n IHN1Y2ggYXMgYWN0dWFsbHkgcmVtb3ZpbmcgY29tcGxldGVkIG5vZGVzIGZyb20gdGhlCnF1ZXVl IGFuZCBmcmVlaW5nIHVwIHRoZSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoZW0gKGludGVy bmFsCm1lbW9yeSBhbGxvY2F0aW9ucywgRFJNIG9iamVjdCByZWZlcmVuY2VzLCBjb250ZXh0IHJl ZmVyZW5jZSwgZXRjLikuClRoZSB3b3JrIGhhbmRsZXIgYWxzbyBjaGVja3MgdGhlIGluIGZsaWdo dCBjb3VudCBhbmQgY2FsbHMgdGhlCnN1Ym1pc3Npb24gY29kZSBpZiBhIG5ldyBzbG90IGhhcyBh cHBlYXJlZC4KCldoZW4gdGhlIHNjaGVkdWxlcidzIHN1Ym1pdCBjb2RlIGlzIGNhbGxlZCwgaXQg c2NhbnMgdGhlIHF1ZXVlZCBub2RlCmxpc3QgZm9yIHRoZSBoaWdoZXN0IHByaW9yaXR5IG5vZGUg dGhhdCBoYXMgbm8gdW5tZXQgZGVwZW5kZW5jaWVzLgpOb3RlIHRoYXQgdGhlIGRlcGVuZGVuY3kg Y2FsY3VsYXRpb24gaXMgY29tcGxleCBhcyBpdCBtdXN0IHRha2UKaW50ZXItcmluZyBkZXBlbmRl bmNpZXMgYW5kIHBvdGVudGlhbCBwcmVlbXB0aW9ucyBpbnRvIGFjY291bnQuIE5vdGUKYWxzbyB0 aGF0IGluIHRoZSBmdXR1cmUgdGhpcyB3aWxsIGJlIGV4dGVuZGVkIHRvIGluY2x1ZGUgZXh0ZXJu YWwKZGVwZW5kZW5jaWVzIHN1Y2ggYXMgdGhlIEFuZHJvaWQgTmF0aXZlIFN5bmMgZmlsZSBkZXNj cmlwdG9ycyBhbmQvb3IKdGhlIGxpbnV4IGRtYS1idWZmIHN5bmNocm9uaXNhdGlvbiBzY2hlbWUu CgpJZiBhIHN1aXRhYmxlIG5vZGUgaXMgZm91bmQgdGhlbiBpdCBpcyBzZW50IHRvIGV4ZWNidWZm X2ZpbmFsKCkgZm9yCnN1Ym1pc3Npb24gdG8gdGhlIGhhcmR3YXJlLiBUaGUgaW4gZmxpZ2h0IGNv dW50IGlzIHRoZW4gcmUtY2hlY2tlZCBhbmQKYSBuZXcgbm9kZSBwb3BwZWQgZnJvbSB0aGUgbGlz dCBpZiBhcHByb3ByaWF0ZS4gQWxsIG5vZGVzIHRoYXQgYXJlIG5vdApzdWJtaXR0ZWQgaGF2ZSB0 aGVpciBwcmlvcml0eSBidW1wZWQuIFRoaXMgZW5zdXJlcyB0aGF0IGxvdyBwcmlvcml0eQp0YXNr cyBkbyBub3QgZ2V0IHN0YXJ2ZWQgb3V0IGJ5IGJ1c3kgaGlnaGVyIHByaW9yaXR5IG9uZXMgLSBl dmVyeXRoaW5nCndpbGwgZXZlbnR1YWxseSBnZXQgaXRzIHR1cm4gdG8gcnVuLgoKTm90ZSB0aGF0 IHRoaXMgcGF0Y2ggZG9lcyBub3QgaW1wbGVtZW50IHByZS1lbXB0aXZlIHNjaGVkdWxpbmcuIE9u bHkKYmFzaWMgc2NoZWR1bGluZyBieSByZS1vcmRlcmluZyBiYXRjaCBidWZmZXIgc3VibWlzc2lv biBpcyBjdXJyZW50bHkKaW1wbGVtZW50ZWQuIFByZS1lbXB0aW9uIG9mIGFjdGl2ZWx5IGV4ZWN1 dGluZyBiYXRjaCBidWZmZXJzIGNvbWVzIGluCnRoZSBuZXh0IHBhdGNoIHNlcmllcy4KCnYyOiBD aGFuZ2VkIHByaW9yaXR5IGxldmVscyB0byArLy0xMDIzIGR1ZSB0byBmZWVkYmFjayBmcm9tIENo cmlzCldpbHNvbi4KClJlbW92ZWQgcmVkdW5kYW50IGluZGV4IGZyb20gc2NoZWR1bGVyIG5vZGUu CgpDaGFuZ2VkIHRpbWUgc3RhbXBzIHRvIHVzZSBqaWZmaWVzIGluc3RlYWQgb2YgcmF3IG1vbm90 b25pYy4gVGhpcwpwcm92aWRlcyBsb3dlciByZXNvbHV0aW9uIGJ1dCBpbXByb3ZlZCBjb21wYXRp YmlsaXR5IHdpdGggb3RoZXIgaTkxNQpjb2RlLgoKTWFqb3IgcmUtd3JpdGUgb2YgY29tcGxldGlv biB0cmFja2luZyBjb2RlIGR1ZSB0byBzdHJ1Y3QgZmVuY2UKY29udmVyc2lvbi4gVGhlIHNjaGVk dWxlciBubyBsb25nZXIgaGFzIGl0J3Mgb3duIHByaXZhdGUgSVJRIGhhbmRsZXIKYnV0IGp1c3Qg bGV0cyB0aGUgZXhpc3RpbmcgcmVxdWVzdCBjb2RlIGhhbmRsZSBjb21wbGV0aW9uIGV2ZW50cy4K SW5zdGVhZCwgdGhlIHNjaGVkdWxlciBub3cgaG9va3MgaW50byB0aGUgcmVxdWVzdCBub3RpZnkg Y29kZSB0byBiZQp0b2xkIHdoZW4gYSByZXF1ZXN0IGhhcyBjb21wbGV0ZWQuCgpSZWR1Y2VkIGRy aXZlciBtdXRleCBsb2NraW5nIHNjb3BlLiBSZW1vdmFsIG9mIHNjaGVkdWxlciBub2RlcyBubwps b25nZXIgZ3JhYnMgdGhlIG11dGV4IGxvY2suCgp2MzogUmVmYWN0b3Igb2YgZGVwZW5kZW5jeSBn ZW5lcmF0aW9uIHRvIG1ha2UgdGhlIGNvZGUgbW9yZSByZWFkYWJsZS4KQWxzbyBhZGRlZCBpbiBy ZWFkLXJlYWQgb3B0aW1pc2F0aW9uIHN1cHBvcnQgLSBpLmUuLCBkb24ndCB0cmVhdCBhCnNoYXJl ZCByZWFkLW9ubHkgYnVmZmVyIGFzIGJlaW5nIGEgZGVwZW5kZW5jeS4KCkFsbG93ZWQgdGhlIGtp bGxpbmcgb2YgcXVldWVkIG5vZGVzIHJhdGhlciB0aGFuIG9ubHkgZmx5aW5nIG9uZXMuCgp2NDog VXBkYXRlZCB0aGUgY29tbWl0IG1lc3NhZ2UgdG8gYmV0dGVyIHJlZmxlY3QgdGhlIGN1cnJlbnQg c3RhdGUgb2YKdGhlIGNvZGUuIERvd25ncmFkZWQgc29tZSBCVUdfT05zIHRvIFdBUk5fT05zLiBV c2VkIHRoZSBjb3JyZWN0IGFycmF5Cm1lbW9yeSBhbGxvY2F0b3IgZnVuY3Rpb24gKGttYWxsb2Nf YXJyYXkgaW5zdGVhZCBvZiBrbWFsbG9jKS4KQ29ycmVjdGVkIHRoZSBmb3JtYXQgb2Ygc29tZSBj b21tZW50cy4gV3JhcHBlZCBzb21lIGxpbmVzIGRpZmZlcmVudGx5CnRvIGtlZXAgdGhlIHN0eWxl IGNoZWNrZXIgaGFwcHkuCgpGaXhlZCBhIFdBUk5fT04gd2hlbiBraWxsaW5nIG5vZGVzLiBUaGUg ZGVwZW5kZW5jeSByZW1vdmFsIGNvZGUgY2hlY2tzCnRoYXQgbm9kZXMgYmVpbmcgZGVzdHJveWVk IGRvIG5vdCBoYXZlIGFueSBvdXN0YW5kaW5nIGRlcGVuZGVuY2llcwood2hpY2ggd291bGQgaW1w bHkgdGhleSBzaG91bGQgbm90IGhhdmUgYmVlbiBleGVjdXRlZCB5ZXQpLiBJbiB0aGUKY2FzZSBv ZiBub2RlcyBiZWluZyBkZXN0cm95ZWQsIGUuZy4gZHVlIHRvIGNvbnRleHQgYmFubmluZywgdGhl biB0aGlzCm1pZ2h0IHdlbGwgYmUgdGhlIGNhc2UgLSB0aGV5IGhhdmUgbm90IGJlZW4gZXhlY3V0 ZWQgYW5kIGRvIGluZGVlZApoYXZlIG91dHN0YW5kaW5nIGRlcGVuZGVuY2llcy4KClJlLWluc3Rh dGVkIHRoZSBjb2RlIHRvIGRpc2JsZSBpbnRlcnJ1cHRzIHdoZW4gbm90IGluIHVzZS4gVGhlCnVu ZGVybHlpbmcgcHJvYmxlbSBjYXVzaW5nIGJyb2tlbiBJUlEgcmVmZXJlbmNlIGNvdW50cyBzZWVt cyB0byBoYXZlCmJlZW4gZml4ZWQgbm93LgoKdjU6IFNodWZmbGVkIHZhcmlvdXMgZnVuY3Rpb25z IGFyb3VuZCB0byByZW1vdmUgZm9yd2FyZCBkZWNsYXJhdGlvbnMKYXMgYXBwYXJlbnRseSB0aGVz ZSBhcmUgZnJvd25lZCB1cG9uLiBSZW1vdmVkIGxvdHMgb2Ygd2hpdGUgc3BhY2UgYXMKYXBwYXJl bnRseSBoYXZpbmcgZWFzeSB0byByZWFkIGNvZGUgaXMgYWxzbyBmcm93bmVkIHVwb24uIFNwbGl0 IHRoZQpkaXJlY3Qgc3VibWlzc2lvbiBzY2hlZHVsZXIgYnlwYXNzIGNvZGUgb3V0IGludG8gYSBz ZXBhcmF0ZSBmdW5jdGlvbi4KU3F1YXNoZWQgZG93biB0aGUgaTkxNV9zY2hlZHVsZXIuYyBzZWN0 aW9ucyBvZiB2YXJpb3VzIHBhdGNoZXMgaW50bwp0aGlzIHBhdGNoLiBUaHVzIHRoZSBsYXRlciBw YXRjaGVzIHNpbXBseSBob29rIGluIGV4aXN0aW5nIGNvZGUgaW50bwp2YXJpb3VzIHBhcnRzIG9m IHRoZSBkcml2ZXIgcmF0aGVyIHRoYW4gYWRkaW5nIHRoZSBjb2RlIGFzIHdlbGwuIEFkZGVkCmRv Y3VtZW50YXRpb24gdG8gdmFyaW91cyBmdW5jdGlvbnMuIFJlLXdvcmtlZCB0aGUgc3VibWl0IGZ1 bmN0aW9uIGluCnRlcm1zIG9mIG11dGV4IGxvY2tpbmcsIGVycm9yIGhhbmRsaW5nIGFuZCBleGl0 IHBhdGhzLiBTcGxpdCB0aGUKZGVsYXllZCB3b3JrIGhhbmRsZXIgZnVuY3Rpb24gaW4gaGFsZi4g TWFkZSB1c2Ugb2YgdGhlIGtlcm5lbCAnY2xhbXAnCm1hY3JvLiBbSm9vbmFzIExhaHRpbmVuXQoK QWRkZWQgcnVudGltZSBQTSBjYWxscyBhcyB0aGVzZSBtdXN0IGJlIGRvbmUgYXQgdGhlIHRvcCBs ZXZlbCBiZWZvcmUKYWNxdWlyaW5nIHRoZSBkcml2ZXIgbXV0ZXggbG9jay4gW0NocmlzIFdpbHNv bl0KClJlbW92ZWQgc29tZSBvYnNvbGV0ZSBkZWJ1ZyBjb2RlIHRoYXQgaGFkIGJlZW4gZm9yZ290 dGVuIGFib3V0LgoKTW92ZWQgbW9yZSBjbGVhbiB1cCBjb2RlIGludG8gdGhlICdpOTE1X2dlbV9z Y2hlZHVsZXJfY2xlYW5fbm9kZSgpJwpmdW5jdGlvbiByYXRoZXIgdGhhbiByZXBsaWNhdGluZyBp dCBpbiBtdXRsaXBsZSBwbGFjZXMuCgpVc2VkIGxpZ2h0ZXIgd2VpZ2h0IHNwaW5sb2Nrcy4KCkZv cjogVklaLTE1ODcKU2lnbmVkLW9mZi1ieTogSm9obiBIYXJyaXNvbiA8Sm9obi5DLkhhcnJpc29u QEludGVsLmNvbT4KQ2M6IEpvb25hcyBMYWh0aW5lbiA8am9vbmFzLmxhaHRpbmVuQGxpbnV4Lmlu dGVsLmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSAgICAgICAgIHwgICAx ICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggICAgICAgfCAgIDYgKwogZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYyAgICAgICB8ICAgNSArCiBkcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X3NjaGVkdWxlci5jIHwgODc0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc2NoZWR1bGVyLmggfCAgOTUgKysrKwog NSBmaWxlcyBjaGFuZ2VkLCA5ODEgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc2NoZWR1bGVyLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3NjaGVkdWxlci5oCgpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQpp bmRleCAxNTM5OGM1Li43OWNiMzhiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9N YWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQpAQCAtMTAsNiArMTAs NyBAQCBjY2ZsYWdzLXkgOj0gLVdlcnJvcgogaTkxNS15IDo9IGk5MTVfZHJ2Lm8gXAogCSAgaTkx NV9pcnEubyBcCiAJICBpOTE1X3BhcmFtcy5vIFwKKwkgIGk5MTVfc2NoZWR1bGVyLm8gXAogICAg ICAgICAgIGk5MTVfc3VzcGVuZC5vIFwKIAkgIGk5MTVfc3lzZnMubyBcCiAJICBpbnRlbF9jc3Iu byBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAppbmRleCBmNDQ4N2I5Li4wM2FkZDFhIDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZHJ2LmgKQEAgLTE3MDMsNiArMTcwMyw4IEBAIHN0cnVjdCBpOTE1X2V4ZWNi dWZmZXJfcGFyYW1zIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgICAgICpyZXF1ZXN0 OwogfTsKIAorc3RydWN0IGk5MTVfc2NoZWR1bGVyOworCiAvKiB1c2VkIGluIGNvbXB1dGluZyB0 aGUgbmV3IHdhdGVybWFya3Mgc3RhdGUgKi8KIHN0cnVjdCBpbnRlbF93bV9jb25maWcgewogCXVu c2lnbmVkIGludCBudW1fcGlwZXNfYWN0aXZlOwpAQCAtMTk2OCw2ICsxOTcwLDggQEAgc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgewogCiAJc3RydWN0IGk5MTVfcnVudGltZV9wbSBwbTsKIAorCXN0 cnVjdCBpOTE1X3NjaGVkdWxlciAqc2NoZWR1bGVyOworCiAJLyogQWJzdHJhY3QgdGhlIHN1Ym1p c3Npb24gbWVjaGFuaXNtIChsZWdhY3kgcmluZ2J1ZmZlciBvciBleGVjbGlzdHMpIGF3YXkgKi8K IAlzdHJ1Y3QgewogCQlpbnQgKCpleGVjYnVmX3N1Ym1pdCkoc3RydWN0IGk5MTVfZXhlY2J1ZmZl cl9wYXJhbXMgKnBhcmFtcywKQEAgLTIyOTAsNiArMjI5NCw4IEBAIHN0cnVjdCBkcm1faTkxNV9n ZW1fcmVxdWVzdCB7CiAJLyoqIHByb2Nlc3MgaWRlbnRpZmllciBzdWJtaXR0aW5nIHRoaXMgcmVx dWVzdCAqLwogCXN0cnVjdCBwaWQgKnBpZDsKIAorCXN0cnVjdCBpOTE1X3NjaGVkdWxlcl9xdWV1 ZV9lbnRyeQkqc2NoZWR1bGVyX3FlOworCiAJLyoqCiAJICogVGhlIEVMU1Agb25seSBhY2NlcHRz IHR3byBlbGVtZW50cyBhdCBhIHRpbWUsIHNvIHdlIHF1ZXVlCiAJICogY29udGV4dC90YWlsIHBh aXJzIG9uIGEgZ2l2ZW4gcXVldWUgKHJpbmctPmV4ZWNsaXN0X3F1ZXVlKSB1bnRpbCB0aGUKZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2dlbS5jCmluZGV4IGRmZTQzZWEuLjdkOWFhMjQgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9nZW0uYwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgImk5MTVfdmdwdS5oIgogI2lu Y2x1ZGUgImk5MTVfdHJhY2UuaCIKICNpbmNsdWRlICJpbnRlbF9kcnYuaCIKKyNpbmNsdWRlICJp OTE1X3NjaGVkdWxlci5oIgogI2luY2x1ZGUgPGxpbnV4L3NobWVtX2ZzLmg+CiAjaW5jbHVkZSA8 bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KQEAgLTUzMTUsNiArNTMxNiwx MCBAQCBpbnQgaTkxNV9nZW1faW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogCSAqLwogCWlu dGVsX3VuY29yZV9mb3JjZXdha2VfZ2V0KGRldl9wcml2LCBGT1JDRVdBS0VfQUxMKTsKIAorCXJl dCA9IGk5MTVfc2NoZWR1bGVyX2luaXQoZGV2KTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF91bmxv Y2s7CisKIAlyZXQgPSBpOTE1X2dlbV9pbml0X3VzZXJwdHIoZGV2KTsKIAlpZiAocmV0KQogCQln b3RvIG91dF91bmxvY2s7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3Nj aGVkdWxlci5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zY2hlZHVsZXIuYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzIzZWU3Ci0tLSAvZGV2L251bGwKKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zY2hlZHVsZXIuYwpAQCAtMCwwICsxLDg3NCBAQAor LyoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1p c3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9i dGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1l bnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdh cmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICog dGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1 dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBh bmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hl ZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICog VGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGlu Y2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwg Y29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgor ICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0Yg QU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlU RUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNI QUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFO WSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFD VElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9V VCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RI RVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKi8KKworI2luY2x1ZGUgImk5 MTVfZHJ2LmgiCisjaW5jbHVkZSAiaW50ZWxfZHJ2LmgiCisjaW5jbHVkZSAiaTkxNV9zY2hlZHVs ZXIuaCIKKworLyoqCisgKiBpOTE1X3NjaGVkdWxlcl9pc19lbmFibGVkIC0gUmV0dXJucyB0cnVl IGlmIHRoZSBzY2hlZHVsZXIgaXMgZW5hYmxlZC4KKyAqIEBkZXY6IERSTSBkZXZpY2UKKyAqLwor Ym9vbCBpOTE1X3NjaGVkdWxlcl9pc19lbmFibGVkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7 CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsK KworCXJldHVybiBkZXZfcHJpdi0+c2NoZWR1bGVyICE9IE5VTEw7Cit9CisKKy8qKgorICogaTkx NV9zY2hlZHVsZXJfaW5pdCAtIEluaXRpYWxpc2UgdGhlIHNjaGVkdWxlci4KKyAqIEBkZXY6IERS TSBkZXZpY2UKKyAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzIG9yIC1FTk9NRU0gaWYgbWVtb3J5 IGFsbG9jYXRpb25zIGZhaWwuCisgKi8KK2ludCBpOTE1X3NjaGVkdWxlcl9pbml0KHN0cnVjdCBk cm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0g ZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgaTkxNV9zY2hlZHVsZXIgKnNjaGVkdWxlciA9IGRl dl9wcml2LT5zY2hlZHVsZXI7CisJaW50IHI7CisKKwlpZiAoc2NoZWR1bGVyKQorCQlyZXR1cm4g MDsKKworCXNjaGVkdWxlciA9IGt6YWxsb2Moc2l6ZW9mKCpzY2hlZHVsZXIpLCBHRlBfS0VSTkVM KTsKKwlpZiAoIXNjaGVkdWxlcikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzcGluX2xvY2tfaW5p dCgmc2NoZWR1bGVyLT5sb2NrKTsKKworCWZvciAociA9IDA7IHIgPCBJOTE1X05VTV9SSU5HUzsg cisrKQorCQlJTklUX0xJU1RfSEVBRCgmc2NoZWR1bGVyLT5ub2RlX3F1ZXVlW3JdKTsKKworCS8q IERlZmF1bHQgdHVuaW5nIHZhbHVlczogKi8KKwlzY2hlZHVsZXItPnByaW9yaXR5X2xldmVsX21p biAgICAgPSAtMTAyMzsKKwlzY2hlZHVsZXItPnByaW9yaXR5X2xldmVsX21heCAgICAgPSAxMDIz OworCXNjaGVkdWxlci0+cHJpb3JpdHlfbGV2ZWxfYnVtcCAgICA9IDUwOworCXNjaGVkdWxlci0+ cHJpb3JpdHlfbGV2ZWxfcHJlZW1wdCA9IDkwMDsKKwlzY2hlZHVsZXItPm1pbl9mbHlpbmcgICAg ICAgICAgICAgPSAyOworCisJZGV2X3ByaXYtPnNjaGVkdWxlciA9IHNjaGVkdWxlcjsKKworCXJl dHVybiAwOworfQorCisvKgorICogQWRkIGEgcG9wcGVkIG5vZGUgYmFjayBpbiB0byB0aGUgcXVl dWUuIEZvciBleGFtcGxlLCBiZWNhdXNlIHRoZSByaW5nIHdhcworICogaHVuZyB3aGVuIGV4ZWNm aW5hbCgpIHdhcyBjYWxsZWQgYW5kIHRodXMgdGhlIHJpbmcgc3VibWlzc2lvbiBuZWVkcyB0byBi ZQorICogcmV0cmllZCBsYXRlci4KKyAqLworc3RhdGljIHZvaWQgaTkxNV9zY2hlZHVsZXJfbm9k ZV9yZXF1ZXVlKHN0cnVjdCBpOTE1X3NjaGVkdWxlcl9xdWV1ZV9lbnRyeSAqbm9kZSkKK3sKKwlX QVJOX09OKCFub2RlKTsKKwlXQVJOX09OKCFJOTE1X1NRU19JU19GTFlJTkcobm9kZSkpOworCisJ LyogU2Vxbm8gd2lsbCBiZSByZWFzc2lnbmVkIG9uIHJlbGF1bmNoICovCisJbm9kZS0+cGFyYW1z LnJlcXVlc3QtPnNlcW5vID0gMDsKKwlub2RlLT5zdGF0dXMgPSBpOTE1X3Nxc19xdWV1ZWQ7Cit9 CisKKy8qCisgKiBHaXZlIHVwIG9uIGEgbm9kZSBjb21wbGV0ZWx5LiBGb3IgZXhhbXBsZSwgYmVj YXVzZSBpdCBpcyBjYXVzaW5nIHRoZQorICogcmluZyB0byBoYW5nIG9yIGlzIHVzaW5nIHNvbWUg cmVzb3VyY2UgdGhhdCBubyBsb25nZXIgZXhpc3RzLgorICovCitzdGF0aWMgdm9pZCBpOTE1X3Nj aGVkdWxlcl9ub2RlX2tpbGwoc3RydWN0IGk5MTVfc2NoZWR1bGVyX3F1ZXVlX2VudHJ5ICpub2Rl KQoreworCVdBUk5fT04oIW5vZGUpOworCVdBUk5fT04oSTkxNV9TUVNfSVNfQ09NUExFVEUobm9k ZSkpOworCisJbm9kZS0+c3RhdHVzID0gaTkxNV9zcXNfZGVhZDsKK30KKworLyogTWFyayBhIG5v ZGUgYXMgaW4gZmxpZ2h0IG9uIHRoZSBoYXJkd2FyZS4gKi8KK3N0YXRpYyBpbnQgaTkxNV9zY2hl ZHVsZXJfbm9kZV9mbHkoc3RydWN0IGk5MTVfc2NoZWR1bGVyX3F1ZXVlX2VudHJ5ICpub2RlKQor eworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IG5vZGUtPnBhcmFtcy5kZXYt PmRldl9wcml2YXRlOworCXN0cnVjdCBpOTE1X3NjaGVkdWxlciAqc2NoZWR1bGVyID0gZGV2X3By aXYtPnNjaGVkdWxlcjsKKwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nOworCisJV0FSTl9P Tighc2NoZWR1bGVyKTsKKwlXQVJOX09OKCFub2RlKTsKKwlXQVJOX09OKG5vZGUtPnN0YXR1cyAh PSBpOTE1X3Nxc19wb3BwZWQpOworCisJcmluZyA9IG5vZGUtPnBhcmFtcy5yaW5nOworCisJLyoK KwkgKiBBZGQgdGhlIG5vZGUgKHdoaWNoIHNob3VsZCBjdXJyZW50bHkgYmUgaW4gc3RhdGUgcG9w cGVkKSB0byB0aGUKKwkgKiBmcm9udCBvZiB0aGUgcXVldWUuIFRoaXMgZW5zdXJlIHRoYXQgZmx5 aW5nIG5vZGVzIGFyZSBhbHdheXMgaGVsZAorCSAqIGluIGhhcmR3YXJlIHN1Ym1pc3Npb24gb3Jk ZXIuCisJICovCisJbGlzdF9hZGQoJm5vZGUtPmxpbmssICZzY2hlZHVsZXItPm5vZGVfcXVldWVb cmluZy0+aWRdKTsKKworCW5vZGUtPnN0YXR1cyA9IGk5MTVfc3FzX2ZseWluZzsKKworCWlmICgh KHNjaGVkdWxlci0+ZmxhZ3NbcmluZy0+aWRdICYgaTkxNV9zZl9pbnRlcnJ1cHRzX2VuYWJsZWQp KSB7CisJCWJvb2wgc3VjY2VzcyA9IHRydWU7CisKKwkJc3VjY2VzcyA9IHJpbmctPmlycV9nZXQo cmluZyk7CisJCWlmIChzdWNjZXNzKQorCQkJc2NoZWR1bGVyLT5mbGFnc1tyaW5nLT5pZF0gfD0g aTkxNV9zZl9pbnRlcnJ1cHRzX2VuYWJsZWQ7CisJCWVsc2UKKwkJCXJldHVybiAtRUlOVkFMOwor CX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdWludDMyX3QgaTkxNV9zY2hlZHVsZXJfY291 bnRfZmx5aW5nKHN0cnVjdCBpOTE1X3NjaGVkdWxlciAqc2NoZWR1bGVyLAorCQkJCQkgICAgc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqcmluZykKK3sKKwlzdHJ1Y3QgaTkxNV9zY2hlZHVsZXJfcXVl dWVfZW50cnkgKm5vZGU7CisJdWludDMyX3QgZmx5aW5nID0gMDsKKworCWxpc3RfZm9yX2VhY2hf ZW50cnkobm9kZSwgJnNjaGVkdWxlci0+bm9kZV9xdWV1ZVtyaW5nLT5pZF0sIGxpbmspCisJCWlm IChJOTE1X1NRU19JU19GTFlJTkcobm9kZSkpCisJCQlmbHlpbmcrKzsKKworCXJldHVybiBmbHlp bmc7Cit9CisKK3N0YXRpYyB2b2lkIGk5MTVfc2NoZWR1bGVyX3ByaW9yaXR5X2J1bXBfY2xlYXIo c3RydWN0IGk5MTVfc2NoZWR1bGVyICpzY2hlZHVsZXIpCit7CisJc3RydWN0IGk5MTVfc2NoZWR1 bGVyX3F1ZXVlX2VudHJ5ICpub2RlOworCWludCBpOworCisJLyoKKwkgKiBFbnN1cmUgY2lyY3Vs YXIgZGVwZW5kZW5jaWVzIGRvbid0IGNhdXNlIHByb2JsZW1zIGFuZCB0aGF0IGEgYnVtcAorCSAq IGJ5IG9iamVjdCB1c2FnZSBvbmx5IGJ1bXBzIGVhY2ggdXNpbmcgYnVmZmVyIG9uY2U6CisJICov CisJZm9yIChpID0gMDsgaSA8IEk5MTVfTlVNX1JJTkdTOyBpKyspIHsKKwkJbGlzdF9mb3JfZWFj aF9lbnRyeShub2RlLCAmc2NoZWR1bGVyLT5ub2RlX3F1ZXVlW2ldLCBsaW5rKQorCQkJbm9kZS0+ YnVtcGVkID0gZmFsc2U7CisJfQorfQorCitzdGF0aWMgaW50IGk5MTVfc2NoZWR1bGVyX3ByaW9y aXR5X2J1bXAoc3RydWN0IGk5MTVfc2NoZWR1bGVyICpzY2hlZHVsZXIsCisJCQkJc3RydWN0IGk5 MTVfc2NoZWR1bGVyX3F1ZXVlX2VudHJ5ICp0YXJnZXQsCisJCQkJdWludDMyX3QgYnVtcCkKK3sK Kwl1aW50MzJfdCBuZXdfcHJpb3JpdHk7CisJaW50IGksIGNvdW50OworCisJaWYgKHRhcmdldC0+ cHJpb3JpdHkgPj0gc2NoZWR1bGVyLT5wcmlvcml0eV9sZXZlbF9tYXgpCisJCXJldHVybiAxOwor CisJaWYgKHRhcmdldC0+YnVtcGVkKQorCQlyZXR1cm4gMDsKKworCW5ld19wcmlvcml0eSA9IHRh cmdldC0+cHJpb3JpdHkgKyBidW1wOworCWlmICgobmV3X3ByaW9yaXR5IDw9IHRhcmdldC0+cHJp b3JpdHkpIHx8CisJICAgIChuZXdfcHJpb3JpdHkgPiBzY2hlZHVsZXItPnByaW9yaXR5X2xldmVs X21heCkpCisJCXRhcmdldC0+cHJpb3JpdHkgPSBzY2hlZHVsZXItPnByaW9yaXR5X2xldmVsX21h eDsKKwllbHNlCisJCXRhcmdldC0+cHJpb3JpdHkgPSBuZXdfcHJpb3JpdHk7CisKKwljb3VudCA9 IDE7CisJdGFyZ2V0LT5idW1wZWQgPSB0cnVlOworCisJZm9yIChpID0gMDsgaSA8IHRhcmdldC0+ bnVtX2RlcHM7IGkrKykgeworCQlpZiAoIXRhcmdldC0+ZGVwX2xpc3RbaV0pCisJCQljb250aW51 ZTsKKworCQlpZiAodGFyZ2V0LT5kZXBfbGlzdFtpXS0+YnVtcGVkKQorCQkJY29udGludWU7CisK KwkJY291bnQgKz0gaTkxNV9zY2hlZHVsZXJfcHJpb3JpdHlfYnVtcChzY2hlZHVsZXIsCisJCQkJ CQkgICAgICB0YXJnZXQtPmRlcF9saXN0W2ldLAorCQkJCQkJICAgICAgYnVtcCk7CisJfQorCisJ cmV0dXJuIGNvdW50OworfQorCisvKgorICogTm9kZXMgYXJlIGNvbnNpZGVyZWQgdmFsaWQgZGVw ZW5kZW5jaWVzIGlmIHRoZXkgYXJlIHF1ZXVlZCBvbiBhbnkgcmluZyBvcgorICogaWYgdGhleSBh cmUgaW4gZmxpZ2h0IG9uIGEgZGlmZmVyZW50IHJpbmcuIEluIGZsaWdodCBvbiB0aGUgc2FtZSBy aW5nIGlzIG5vCisgKiBsb25nZXIgaW50ZXJlc3RpbmcgZm9yIG5vbi1wcmVtcHRpdmUgbm9kZXMg YXMgdGhlIHJpbmcgc2VyaWFsaXNlcyBleGVjdXRpb24uCisgKiBGb3IgcHJlLWVtcHRpbmcgbm9k ZXMsIGFsbCBpbiBmbGlnaHQgZGVwZW5kZW5jaWVzIGFyZSB2YWxpZCBhcyB0aGV5IG11c3Qgbm90 CisgKiBiZSBqdW1wZWQgYnkgdGhlIGFjdCBvZiBwcmUtZW1wdGluZy4KKyAqCisgKiBBbnl0aGlu ZyB0aGF0IGlzIG5laXRoZXIgcXVldWVkIG5vciBmbHlpbmcgaXMgdW5pbnRlcmVzdGluZy4KKyAq Lworc3RhdGljIGlubGluZSBib29sIGk5MTVfc2NoZWR1bGVyX2lzX2RlcGVuZGVuY3lfdmFsaWQo CisJCQlzdHJ1Y3QgaTkxNV9zY2hlZHVsZXJfcXVldWVfZW50cnkgKm5vZGUsIHVpbnQzMl90IGlk eCkKK3sKKwlzdHJ1Y3QgaTkxNV9zY2hlZHVsZXJfcXVldWVfZW50cnkgKmRlcDsKKworCWRlcCA9 IG5vZGUtPmRlcF9saXN0W2lkeF07CisJaWYgKCFkZXApCisJCXJldHVybiBmYWxzZTsKKworCWlm IChJOTE1X1NRU19JU19RVUVVRUQoZGVwKSkKKwkJcmV0dXJuIHRydWU7CisKKwlpZiAoSTkxNV9T UVNfSVNfRkxZSU5HKGRlcCkpIHsKKwkJaWYgKG5vZGUtPnBhcmFtcy5yaW5nICE9IGRlcC0+cGFy YW1zLnJpbmcpCisJCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0 YXRpYyBpbnQgaTkxNV9zY2hlZHVsZXJfcG9wX2Zyb21fcXVldWVfbG9ja2VkKHN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKnJpbmcsCisJCQkJc3RydWN0IGk5MTVfc2NoZWR1bGVyX3F1ZXVlX2VudHJ5 ICoqcG9wX25vZGUpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gcmlu Zy0+ZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgaTkxNV9zY2hlZHVsZXIgKnNjaGVkdWxlciA9 IGRldl9wcml2LT5zY2hlZHVsZXI7CisJc3RydWN0IGk5MTVfc2NoZWR1bGVyX3F1ZXVlX2VudHJ5 ICpiZXN0ID0gTlVMTDsKKwlzdHJ1Y3QgaTkxNV9zY2hlZHVsZXJfcXVldWVfZW50cnkgKm5vZGU7 CisJaW50IHJldDsKKwlpbnQgaTsKKwlib29sIGFueV9xdWV1ZWQgPSBmYWxzZTsKKwlib29sIGhh c19sb2NhbCwgaGFzX3JlbW90ZSwgb25seV9yZW1vdGUgPSBmYWxzZTsKKworCSpwb3Bfbm9kZSA9 IE5VTEw7CisJcmV0ID0gLUVOT0RBVEE7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG5vZGUsICZz Y2hlZHVsZXItPm5vZGVfcXVldWVbcmluZy0+aWRdLCBsaW5rKSB7CisJCWlmICghSTkxNV9TUVNf SVNfUVVFVUVEKG5vZGUpKQorCQkJY29udGludWU7CisJCWFueV9xdWV1ZWQgPSB0cnVlOworCisJ CWhhc19sb2NhbCAgPSBmYWxzZTsKKwkJaGFzX3JlbW90ZSA9IGZhbHNlOworCQlmb3IgKGkgPSAw OyBpIDwgbm9kZS0+bnVtX2RlcHM7IGkrKykgeworCQkJaWYgKCFpOTE1X3NjaGVkdWxlcl9pc19k ZXBlbmRlbmN5X3ZhbGlkKG5vZGUsIGkpKQorCQkJCWNvbnRpbnVlOworCisJCQlpZiAobm9kZS0+ ZGVwX2xpc3RbaV0tPnBhcmFtcy5yaW5nID09IG5vZGUtPnBhcmFtcy5yaW5nKQorCQkJCWhhc19s b2NhbCA9IHRydWU7CisJCQllbHNlCisJCQkJaGFzX3JlbW90ZSA9IHRydWU7CisJCX0KKworCQlp ZiAoaGFzX3JlbW90ZSAmJiAhaGFzX2xvY2FsKQorCQkJb25seV9yZW1vdGUgPSB0cnVlOworCisJ CWlmICghaGFzX2xvY2FsICYmICFoYXNfcmVtb3RlKSB7CisJCQlpZiAoIWJlc3QgfHwKKwkJCSAg ICAobm9kZS0+cHJpb3JpdHkgPiBiZXN0LT5wcmlvcml0eSkpCisJCQkJYmVzdCA9IG5vZGU7CisJ CX0KKwl9CisKKwlpZiAoYmVzdCkgeworCQlsaXN0X2RlbCgmYmVzdC0+bGluayk7CisKKwkJSU5J VF9MSVNUX0hFQUQoJmJlc3QtPmxpbmspOworCQliZXN0LT5zdGF0dXMgID0gaTkxNV9zcXNfcG9w cGVkOworCisJCXJldCA9IDA7CisJfSBlbHNlIHsKKwkJLyogQ2FuIG9ubHkgZ2V0IGhlcmUgaWY6 CisJCSAqIChhKSB0aGVyZSBhcmUgbm8gYnVmZmVycyBpbiB0aGUgcXVldWUKKwkJICogKGIpIGFs bCBxdWV1ZWQgYnVmZmVycyBhcmUgZGVwZW5kZW50IG9uIG90aGVyIGJ1ZmZlcnMKKwkJICogICAg IGUuZy4gb24gYSBidWZmZXIgdGhhdCBpcyBpbiBmbGlnaHQgb24gYSBkaWZmZXJlbnQgcmluZwor CQkgKi8KKwkJaWYgKG9ubHlfcmVtb3RlKSB7CisJCQkvKiBUaGUgb25seSBkZXBlbmRlbnQgYnVm ZmVycyBhcmUgb24gYW5vdGhlciByaW5nLiAqLworCQkJcmV0ID0gLUVBR0FJTjsKKwkJfSBlbHNl IGlmIChhbnlfcXVldWVkKSB7CisJCQkvKiBJdCBzZWVtcyB0aGF0IHNvbWV0aGluZyBoYXMgZ29u ZSBob3JyaWJseSB3cm9uZyEgKi8KKwkJCURSTV9FUlJPUigiQnJva2VuIGRlcGVuZGVuY3kgdHJh Y2tpbmcgb24gcmluZyAlZCFcbiIsCisJCQkJICAoaW50KSByaW5nLT5pZCk7CisJCX0KKwl9CisK KwkqcG9wX25vZGUgPSBiZXN0OworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBOQjogVGhlIGRy aXZlciBtdXRleCBsb2NrIG11c3QgYmUgaGVsZCBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9u LiBJdCBpcworICogb25seSByZWFsbHkgcmVxdWlyZWQgZHVyaW5nIHRoZSBhY3R1YWwgYmFjayBl bmQgc3VibWlzc2lvbiBjYWxsLiBIb3dldmVyLAorICogYXR0ZW1wdGluZyB0byBhY3F1aXJlIGEg bXV0ZXggd2hpbGUgaG9sZGluZyBhIHNwaW4gbG9jayBpcyBhIEJhZCBJZGVhLgorICogQW5kIHJl bGVhc2luZyB0aGUgb25lIGJlZm9yZSBhY3F1aXJpbmcgdGhlIG90aGVyIGxlYWRzIHRvIG90aGVy IGNvZGUKKyAqIGJlaW5nIHJ1biBhbmQgaW50ZXJmZXJpbmcuCisgKi8KK3N0YXRpYyBpbnQgaTkx NV9zY2hlZHVsZXJfc3VibWl0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcpCit7CisJc3Ry dWN0IGRybV9kZXZpY2UgKmRldiA9IHJpbmctPmRldjsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBpOTE1X3NjaGVkdWxlciAq c2NoZWR1bGVyID0gZGV2X3ByaXYtPnNjaGVkdWxlcjsKKwlzdHJ1Y3QgaTkxNV9zY2hlZHVsZXJf cXVldWVfZW50cnkgKm5vZGU7CisJaW50IHJldCwgY291bnQgPSAwLCBmbHlpbmc7CisKKwlXQVJO X09OKCFtdXRleF9pc19sb2NrZWQoJmRldi0+c3RydWN0X211dGV4KSk7CisKKwlzcGluX2xvY2tf aXJxKCZzY2hlZHVsZXItPmxvY2spOworCisJV0FSTl9PTihzY2hlZHVsZXItPmZsYWdzW3Jpbmct PmlkXSAmIGk5MTVfc2Zfc3VibWl0dGluZyk7CisJc2NoZWR1bGVyLT5mbGFnc1tyaW5nLT5pZF0g fD0gaTkxNV9zZl9zdWJtaXR0aW5nOworCisJLyogRmlyc3QgdGltZSBhcm91bmQsIGNvbXBsYWlu IGlmIGFueXRoaW5nIHVuZXhwZWN0ZWQgb2NjdXJzOiAqLworCXJldCA9IGk5MTVfc2NoZWR1bGVy X3BvcF9mcm9tX3F1ZXVlX2xvY2tlZChyaW5nLCAmbm9kZSk7CisJaWYgKHJldCkKKwkJZ290byBl cnJvcjsKKworCWRvIHsKKwkJV0FSTl9PTighbm9kZSk7CisJCVdBUk5fT04obm9kZS0+cGFyYW1z LnJpbmcgIT0gcmluZyk7CisJCVdBUk5fT04obm9kZS0+c3RhdHVzICE9IGk5MTVfc3FzX3BvcHBl ZCk7CisJCWNvdW50Kys7CisKKwkJLyoKKwkJICogVGhlIGNhbGwgdG8gcG9wIGFib3ZlIHdpbGwg aGF2ZSByZW1vdmVkIHRoZSBub2RlIGZyb20gdGhlCisJCSAqIGxpc3QuIFNvIGFkZCBpdCBiYWNr IGluIGFuZCBtYXJrIGl0IGFzIGluIGZsaWdodC4KKwkJICovCisJCWk5MTVfc2NoZWR1bGVyX25v ZGVfZmx5KG5vZGUpOworCisJCXNwaW5fdW5sb2NrX2lycSgmc2NoZWR1bGVyLT5sb2NrKTsKKwkJ cmV0ID0gZGV2X3ByaXYtPmd0LmV4ZWNidWZfZmluYWwoJm5vZGUtPnBhcmFtcyk7CisJCXNwaW5f bG9ja19pcnEoJnNjaGVkdWxlci0+bG9jayk7CisKKwkJLyoKKwkJICogSGFuZGxlIGZhaWxlZCBz dWJtaXNzaW9uIGJ1dCBmaXJzdCBjaGVjayB0aGF0IHRoZQorCQkgKiB3YXRjaGRvZy9yZXNldCBj b2RlIGhhcyBub3QgbnVrZWQgdGhlIG5vZGUgd2hpbGUgd2UKKwkJICogd2VyZW4ndCBsb29raW5n OgorCQkgKi8KKwkJaWYgKHJldCAmJiAobm9kZS0+c3RhdHVzICE9IGk5MTVfc3FzX2RlYWQpKSB7 CisJCQlib29sIHJlcXVldWUgPSB0cnVlOworCisJCQkvKgorCQkJICogT2ggZGVhciEgRWl0aGVy IHRoZSBub2RlIGlzIGJyb2tlbiBvciB0aGUgcmluZyBpcworCQkJICogYnVzeS4gU28gbmVlZCB0 byBraWxsIHRoZSBub2RlIG9yIHJlcXVldWUgaXQgYW5kIHRyeQorCQkJICogYWdhaW4gbGF0ZXIg YXMgYXBwcm9wcmlhdGUuCisJCQkgKi8KKworCQkJc3dpdGNoICgtcmV0KSB7CisJCQljYXNlIEVO T0RFVjoKKwkJCWNhc2UgRU5PRU5UOgorCQkJCS8qIEZhdGFsIGVycm9ycy4gS2lsbCB0aGUgbm9k ZS4gKi8KKwkJCQlyZXF1ZXVlID0gZmFsc2U7CisJCQkJaTkxNV9zY2hlZHVsZXJfbm9kZV9raWxs KG5vZGUpOworCQkJYnJlYWs7CisKKwkJCWNhc2UgRUFHQUlOOgorCQkJY2FzZSBFQlVTWToKKwkJ CWNhc2UgRUlPOgorCQkJY2FzZSBFTk9NRU06CisJCQljYXNlIEVSRVNUQVJUU1lTOgorCQkJY2Fz ZSBFSU5UUjoKKwkJCQkvKiBTdXBwb3NlZGx5IHJlY292ZXJhYmxlIGVycm9ycy4gKi8KKwkJCWJy ZWFrOworCisJCQlkZWZhdWx0OgorCQkJCS8qCisJCQkJICogQXNzdW1lIHRoZSBlcnJvciBpcyBy ZWNvdmVyYWJsZSBhbmQgaG9wZQorCQkJCSAqIGZvciB0aGUgYmVzdC4KKwkJCQkgKi8KKwkJCQlN SVNTSU5HX0NBU0UoLXJldCk7CisJCQlicmVhazsKKwkJCX0KKworCQkJaWYgKHJlcXVldWUpIHsK KwkJCQlpOTE1X3NjaGVkdWxlcl9ub2RlX3JlcXVldWUobm9kZSk7CisJCQkJLyoKKwkJCQkgKiBO byBwb2ludCBzcGlubmluZyBpZiB0aGUgcmluZyBpcyBjdXJyZW50bHkKKwkJCQkgKiB1bmF2YWls YWJsZSBzbyBqdXN0IGdpdmUgdXAgYW5kIGNvbWUgYmFjaworCQkJCSAqIGxhdGVyLgorCQkJCSAq LworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJLyogS2VlcCBsYXVuY2hpbmcgdW50aWwgdGhl IHNreSBpcyBzdWZmaWNpZW50bHkgZnVsbC4gKi8KKwkJZmx5aW5nID0gaTkxNV9zY2hlZHVsZXJf Y291bnRfZmx5aW5nKHNjaGVkdWxlciwgcmluZyk7CisJCWlmIChmbHlpbmcgPj0gc2NoZWR1bGVy LT5taW5fZmx5aW5nKQorCQkJYnJlYWs7CisKKwkJLyogR3JhYiBhbm90aGVyIG5vZGUgYW5kIGdv IHJvdW5kIGFnYWluLi4uICovCisJCXJldCA9IGk5MTVfc2NoZWR1bGVyX3BvcF9mcm9tX3F1ZXVl X2xvY2tlZChyaW5nLCAmbm9kZSk7CisJfSB3aGlsZSAocmV0ID09IDApOworCisJLyogRG9uJ3Qg Y29tcGxhaW4gYWJvdXQgbm90IGJlaW5nIGFibGUgdG8gc3VibWl0IGV4dHJhIGVudHJpZXMgKi8K KwlpZiAocmV0ID09IC1FTk9EQVRBKQorCQlyZXQgPSAwOworCisJLyoKKwkgKiBCdW1wIHRoZSBw cmlvcml0eSBvZiBldmVyeXRoaW5nIHRoYXQgd2FzIG5vdCBzdWJtaXR0ZWQgdG8gcHJldmVudAor CSAqIHN0YXJ2YXRpb24gb2YgbG93IHByaW9yaXR5IHRhc2tzIGJ5IGEgc3BhbW1pbmcgaGlnaCBw cmlvcml0eSB0YXNrLgorCSAqLworCWk5MTVfc2NoZWR1bGVyX3ByaW9yaXR5X2J1bXBfY2xlYXIo c2NoZWR1bGVyKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG5vZGUsICZzY2hlZHVsZXItPm5vZGVf cXVldWVbcmluZy0+aWRdLCBsaW5rKSB7CisJCWlmICghSTkxNV9TUVNfSVNfUVVFVUVEKG5vZGUp KQorCQkJY29udGludWU7CisKKwkJaTkxNV9zY2hlZHVsZXJfcHJpb3JpdHlfYnVtcChzY2hlZHVs ZXIsIG5vZGUsCisJCQkJCSAgICAgc2NoZWR1bGVyLT5wcmlvcml0eV9sZXZlbF9idW1wKTsKKwl9 CisKKwkvKiBPbiBzdWNjZXNzLCByZXR1cm4gdGhlIG51bWJlciBvZiBidWZmZXJzIHN1Ym1pdHRl ZC4gKi8KKwlpZiAocmV0ID09IDApCisJCXJldCA9IGNvdW50OworCitlcnJvcjoKKwlzY2hlZHVs ZXItPmZsYWdzW3JpbmctPmlkXSAmPSB+aTkxNV9zZl9zdWJtaXR0aW5nOworCXNwaW5fdW5sb2Nr X2lycSgmc2NoZWR1bGVyLT5sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBp OTE1X2dlbmVyYXRlX2RlcGVuZGVuY2llcyhzdHJ1Y3QgaTkxNV9zY2hlZHVsZXIgKnNjaGVkdWxl ciwKKwkJCQkgICAgICAgc3RydWN0IGk5MTVfc2NoZWR1bGVyX3F1ZXVlX2VudHJ5ICpub2RlLAor CQkJCSAgICAgICB1aW50MzJfdCByaW5nKQoreworCXN0cnVjdCBpOTE1X3NjaGVkdWxlcl9vYmpf ZW50cnkgKnRoaXMsICp0aGF0OworCXN0cnVjdCBpOTE1X3NjaGVkdWxlcl9xdWV1ZV9lbnRyeSAq dGVzdDsKKwlpbnQgaSwgajsKKwlib29sIGZvdW5kOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0 ZXN0LCAmc2NoZWR1bGVyLT5ub2RlX3F1ZXVlW3JpbmddLCBsaW5rKSB7CisJCWlmIChJOTE1X1NR U19JU19DT01QTEVURSh0ZXN0KSkKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIEJhdGNoZXMg b24gdGhlIHNhbWUgcmluZyBmb3IgdGhlIHNhbWUKKwkJICogY29udGV4dCBtdXN0IGJlIGtlcHQg aW4gb3JkZXIuCisJCSAqLworCQlmb3VuZCA9IChub2RlLT5wYXJhbXMuY3R4ID09IHRlc3QtPnBh cmFtcy5jdHgpICYmCisJCQkobm9kZS0+cGFyYW1zLnJpbmcgPT0gdGVzdC0+cGFyYW1zLnJpbmcp OworCisJCS8qCisJCSAqIEJhdGNoZXMgd29ya2luZyBvbiB0aGUgc2FtZSBvYmplY3RzIG11c3QK KwkJICogYmUga2VwdCBpbiBvcmRlci4KKwkJICovCisJCWZvciAoaSA9IDA7IChpIDwgbm9kZS0+ bnVtX29ianMpICYmICFmb3VuZDsgaSsrKSB7CisJCQl0aGlzID0gbm9kZS0+c2F2ZWRfb2JqZWN0 cyArIGk7CisKKwkJCWZvciAoaiA9IDA7IGogPCB0ZXN0LT5udW1fb2JqczsgaisrKSB7CisJCQkJ dGhhdCA9IHRlc3QtPnNhdmVkX29iamVjdHMgKyBqOworCisJCQkJaWYgKHRoaXMtPm9iaiAhPSB0 aGF0LT5vYmopCisJCQkJCWNvbnRpbnVlOworCisJCQkJLyogT25seSBuZWVkIHRvIHdvcnJ5IGFi b3V0IHdyaXRlcyAqLworCQkJCWlmICh0aGlzLT5yZWFkX29ubHkgJiYgdGhhdC0+cmVhZF9vbmx5 KQorCQkJCQljb250aW51ZTsKKworCQkJCWZvdW5kID0gdHJ1ZTsKKwkJCQlicmVhazsKKwkJCX0K KwkJfQorCisJCWlmIChmb3VuZCkgeworCQkJbm9kZS0+ZGVwX2xpc3Rbbm9kZS0+bnVtX2RlcHNd ID0gdGVzdDsKKwkJCW5vZGUtPm51bV9kZXBzKys7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQg aTkxNV9zY2hlZHVsZXJfcXVldWVfZXhlY2J1ZmZlcl9ieXBhc3Moc3RydWN0IGk5MTVfc2NoZWR1 bGVyX3F1ZXVlX2VudHJ5ICpxZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYgPSBxZS0+cGFyYW1zLmRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGk5MTVfc2NoZWR1bGVy ICpzY2hlZHVsZXIgPSBkZXZfcHJpdi0+c2NoZWR1bGVyOworCWludCByZXQ7CisKKwlzY2hlZHVs ZXItPmZsYWdzW3FlLT5wYXJhbXMucmluZy0+aWRdIHw9IGk5MTVfc2Zfc3VibWl0dGluZzsKKwly ZXQgPSBkZXZfcHJpdi0+Z3QuZXhlY2J1Zl9maW5hbCgmcWUtPnBhcmFtcyk7CisJc2NoZWR1bGVy LT5mbGFnc1txZS0+cGFyYW1zLnJpbmctPmlkXSAmPSB+aTkxNV9zZl9zdWJtaXR0aW5nOworCisJ LyoKKwkgKiBEb24ndCBkbyBhbnkgY2xlYW4gdXAgb24gZmFpbHVyZSBiZWNhdXNlIHRoZSBjYWxs ZXIgd2lsbAorCSAqIGRvIGl0IGFsbCBhbnl3YXkuCisJICovCisJaWYgKHJldCkKKwkJcmV0dXJu IHJldDsKKworCS8qIE5lZWQgdG8gcmVsZWFzZSBhbnkgcmVzb3VyY2VzIGhlbGQgYnkgdGhlIG5v ZGU6ICovCisJaTkxNV9zY2hlZHVsZXJfY2xlYW5fbm9kZShxZSk7CisKKwlyZXR1cm4gMDsKK30K KworLyoqCisgKiBpOTE1X3NjaGVkdWxlcl9xdWV1ZV9leGVjYnVmZmVyIC0gU3VibWl0IGEgYmF0 Y2ggYnVmZmVyIHJlcXVlc3QgdG8gdGhlCisgKiBzY2hlZHVsZXIuCisgKiBAcWU6IFRoZSBiYXRj aCBidWZmZXIgcmVxdWVzdCB0byBiZSBxdWV1ZWQuCisgKiBUaGUgZXhwZWN0YXRpb24gaXMgdGhl IHFlIHBhc3NlZCBpbiBpcyBhIGxvY2FsIHN0YWNrIHZhcmlhYmxlLiBUaGlzCisgKiBmdW5jdGlv biB3aWxsIGNvcHkgaXRzIGNvbnRlbnRzIGludG8gYSBmcmVzaGx5IGFsbG9jYXRlZCBsaXN0IG5v ZGUuIFRoZQorICogbmV3IG5vZGUgdGFrZXMgb3duZXJzaGlwIG9mIHNhaWQgY29udGVudHMgc28g dGhlIG9yaWdpbmFsIHFlIHNob3VsZCBzaW1wbHkKKyAqIGJlIGRpc2NhcmRlZCBhbmQgbm90IGNs ZWFuZWQgdXAgKGkuZS4gZG9uJ3QgZnJlZSBtZW1vcnkgaXQgcG9pbnRzIHRvIG9yCisgKiBkZXJl ZmVyZW5jZSBvYmplY3RzIGl0IGhvbGRzKS4gVGhlIG5vZGUgaXMgYWRkZWQgdG8gdGhlIHNjaGVk dWxlcidzIHF1ZXVlCisgKiBhbmQgdGhlIGJhdGNoIGJ1ZmZlciB3aWxsIGJlIHN1Ym1pdHRlZCB0 byB0aGUgaGFyZHdhcmUgYXQgc29tZSBmdXR1cmUKKyAqIHBvaW50IGluIHRpbWUgKHdoaWNoIG1h eSBiZSBpbW1lZGlhdGVseSwgYmVmb3JlIHJldHVybmluZyBvciBtYXkgYmUgcXVpdGUKKyAqIGEg bG90IGxhdGVyKS4KKyAqLworaW50IGk5MTVfc2NoZWR1bGVyX3F1ZXVlX2V4ZWNidWZmZXIoc3Ry dWN0IGk5MTVfc2NoZWR1bGVyX3F1ZXVlX2VudHJ5ICpxZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYgPSBxZS0+cGFyYW1zLmRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0 IGk5MTVfc2NoZWR1bGVyICpzY2hlZHVsZXIgPSBkZXZfcHJpdi0+c2NoZWR1bGVyOworCXN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcgPSBxZS0+cGFyYW1zLnJpbmc7CisJc3RydWN0IGk5MTVf c2NoZWR1bGVyX3F1ZXVlX2VudHJ5ICpub2RlOworCXN0cnVjdCBpOTE1X3NjaGVkdWxlcl9xdWV1 ZV9lbnRyeSAqdGVzdDsKKwlib29sIG5vdF9mbHlpbmc7CisJaW50IGksIHI7CisJaW50IGluY29t cGxldGUgPSAwOworCisJV0FSTl9PTighc2NoZWR1bGVyKTsKKworCWlmICgxLyohaTkxNS5lbmFi bGVfc2NoZWR1bGVyKi8pCisJCXJldHVybiBpOTE1X3NjaGVkdWxlcl9xdWV1ZV9leGVjYnVmZmVy X2J5cGFzcyhxZSk7CisKKwlub2RlID0ga21hbGxvYyhzaXplb2YoKm5vZGUpLCBHRlBfS0VSTkVM KTsKKwlpZiAoIW5vZGUpCisJCXJldHVybiAtRU5PTUVNOworCisJKm5vZGUgPSAqcWU7CisJSU5J VF9MSVNUX0hFQUQoJm5vZGUtPmxpbmspOworCW5vZGUtPnN0YXR1cyA9IGk5MTVfc3FzX3F1ZXVl ZDsKKwlub2RlLT5zdGFtcCAgPSBqaWZmaWVzOworCWk5MTVfZ2VtX3JlcXVlc3RfcmVmZXJlbmNl KG5vZGUtPnBhcmFtcy5yZXF1ZXN0KTsKKworCVdBUk5fT04obm9kZS0+cGFyYW1zLnJlcXVlc3Qt PnNjaGVkdWxlcl9xZSk7CisJbm9kZS0+cGFyYW1zLnJlcXVlc3QtPnNjaGVkdWxlcl9xZSA9IG5v ZGU7CisKKwkvKiBOZWVkIHRvIGRldGVybWluZSB0aGUgbnVtYmVyIG9mIGluY29tcGxldGUgZW50 cmllcyBpbiB0aGUgbGlzdCBhcworCSAqIHRoYXQgd2lsbCBiZSB0aGUgbWF4aW11bSBzaXplIG9m IHRoZSBkZXBlbmRlbmN5IGxpc3QuCisJICoKKwkgKiBOb3RlIHRoYXQgdGhlIGFsbG9jYXRpb24g bXVzdCBub3QgYmUgbWFkZSB3aXRoIHRoZSBzcGlubG9jayBhY3F1aXJlZAorCSAqIGFzIGttYWxs b2MgY2FuIHNsZWVwLiBIb3dldmVyLCB0aGUgdW5sb2NrL3JlbG9jayBpcyBzYWZlIGJlY2F1c2Ug bm8KKwkgKiBuZXcgZW50cmllcyBjYW4gYmUgcXVldWVkIHVwIGR1cmluZyB0aGUgdW5sb2NrIGFz IHRoZSBpOTE1IGRyaXZlcgorCSAqIG11dGV4IGlzIHN0aWxsIGhlbGQuIEVudHJpZXMgY291bGQg YmUgcmVtb3ZlZCBmcm9tIHRoZSBsaXN0IGJ1dCB0aGF0CisJICoganVzdCBtZWFucyB0aGUgZGVw X2xpc3Qgd2lsbCBiZSBvdmVyLWFsbG9jYXRlZCB3aGljaCBpcyBmaW5lLgorCSAqLworCXNwaW5f bG9ja19pcnEoJnNjaGVkdWxlci0+bG9jayk7CisJZm9yIChyID0gMDsgciA8IEk5MTVfTlVNX1JJ TkdTOyByKyspIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeSh0ZXN0LCAmc2NoZWR1bGVyLT5ub2Rl X3F1ZXVlW3JdLCBsaW5rKSB7CisJCQlpZiAoSTkxNV9TUVNfSVNfQ09NUExFVEUodGVzdCkpCisJ CQkJY29udGludWU7CisKKwkJCWluY29tcGxldGUrKzsKKwkJfQorCX0KKworCS8qIFRlbXBvcmFy aWx5IHVubG9jayB0byBhbGxvY2F0ZSBtZW1vcnk6ICovCisJc3Bpbl91bmxvY2tfaXJxKCZzY2hl ZHVsZXItPmxvY2spOworCWlmIChpbmNvbXBsZXRlKSB7CisJCW5vZGUtPmRlcF9saXN0ID0ga21h bGxvY19hcnJheShpbmNvbXBsZXRlLAorCQkJCQkgICAgICAgc2l6ZW9mKCpub2RlLT5kZXBfbGlz dCksCisJCQkJCSAgICAgICBHRlBfS0VSTkVMKTsKKwkJaWYgKCFub2RlLT5kZXBfbGlzdCkgewor CQkJa2ZyZWUobm9kZSk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCX0gZWxzZQorCQlub2Rl LT5kZXBfbGlzdCA9IE5VTEw7CisKKwlzcGluX2xvY2tfaXJxKCZzY2hlZHVsZXItPmxvY2spOwor CW5vZGUtPm51bV9kZXBzID0gMDsKKworCWlmIChub2RlLT5kZXBfbGlzdCkgeworCQlmb3IgKHIg PSAwOyByIDwgSTkxNV9OVU1fUklOR1M7IHIrKykKKwkJCWk5MTVfZ2VuZXJhdGVfZGVwZW5kZW5j aWVzKHNjaGVkdWxlciwgbm9kZSwgcik7CisKKwkJV0FSTl9PTihub2RlLT5udW1fZGVwcyA+IGlu Y29tcGxldGUpOworCX0KKworCW5vZGUtPnByaW9yaXR5ID0gY2xhbXAobm9kZS0+cHJpb3JpdHks CisJCQkgICAgICAgc2NoZWR1bGVyLT5wcmlvcml0eV9sZXZlbF9taW4sCisJCQkgICAgICAgc2No ZWR1bGVyLT5wcmlvcml0eV9sZXZlbF9tYXgpOworCisJaWYgKChub2RlLT5wcmlvcml0eSA+IDAp ICYmIG5vZGUtPm51bV9kZXBzKSB7CisJCWk5MTVfc2NoZWR1bGVyX3ByaW9yaXR5X2J1bXBfY2xl YXIoc2NoZWR1bGVyKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgbm9kZS0+bnVtX2RlcHM7IGkrKykK KwkJCWk5MTVfc2NoZWR1bGVyX3ByaW9yaXR5X2J1bXAoc2NoZWR1bGVyLAorCQkJCQlub2RlLT5k ZXBfbGlzdFtpXSwgbm9kZS0+cHJpb3JpdHkpOworCX0KKworCWxpc3RfYWRkX3RhaWwoJm5vZGUt PmxpbmssICZzY2hlZHVsZXItPm5vZGVfcXVldWVbcmluZy0+aWRdKTsKKworCW5vdF9mbHlpbmcg PSBpOTE1X3NjaGVkdWxlcl9jb3VudF9mbHlpbmcoc2NoZWR1bGVyLCByaW5nKSA8CisJCQkJCQkg c2NoZWR1bGVyLT5taW5fZmx5aW5nOworCisJc3Bpbl91bmxvY2tfaXJxKCZzY2hlZHVsZXItPmxv Y2spOworCisJaWYgKG5vdF9mbHlpbmcpCisJCWk5MTVfc2NoZWR1bGVyX3N1Ym1pdChyaW5nKTsK KworCXJldHVybiAwOworfQorCisvKioKKyAqIGk5MTVfc2NoZWR1bGVyX25vdGlmeV9yZXF1ZXN0 IC0gTm90aWZ5IHRoZSBzY2hlZHVsZXIgdGhhdCB0aGUgZ2l2ZW4KKyAqIHJlcXVlc3QgaGFzIGNv bXBsZXRlZCBvbiB0aGUgaGFyZHdhcmUuCisgKiBAcmVxOiBSZXF1ZXN0IHN0cnVjdHVyZSB3aGlj aCBoYXMgY29tcGxldGVkCisgKiBAcHJlZW1wdDogRGlkIGl0IGNvbXBsZXRlIHByZS1lbXB0aXZl bHk/CisgKiBBIHNlcXVlbmNlIG51bWJlciBoYXMgcG9wcGVkIG91dCBvZiB0aGUgaGFyZHdhcmUg YW5kIHRoZSByZXF1ZXN0IGhhbmRsaW5nCisgKiBjb2RlIGhhcyBtYXBwZWQgaXQgYmFjayB0byBh IHJlcXVlc3QgYW5kIHdpbGwgbWFyayB0aGF0IHJlcXVlc3QgY29tcGxldGUuCisgKiBJdCBhbHNv IGNhbGxzIHRoaXMgZnVuY3Rpb24gdG8gbm90aWZ5IHRoZSBzY2hlZHVsZXIgYWJvdXQgdGhlIGNv bXBsZXRpb24KKyAqIHNvIHRoZSBzY2hlZHVsZXIncyBub2RlIGNhbiBiZSB1cGRhdGVkIGFwcHJv cHJpYXRlbHkuCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHJlcXVlc3QgaXMgc2NoZWR1bGVyIG1h bmFnZWQsIGZhbHNlIGlmIG5vdC4gVGhlIHJldHVybgorICogdmFsdWUgaXMgY29tYmluZWQgZm9y IGFsbCBmcmVzaGx5IGNvbXBsZXRlZCByZXF1ZXN0cyBhbmQgaWYgYW55IHdlcmUgdHJ1ZQorICog dGhlbiBpOTE1X3NjaGVkdWxlcl93YWtldXAoKSBpcyBjYWxsZWQgc28gdGhlIHNjaGVkdWxlciBj YW4gZG8gZnVydGhlcgorICogcHJvY2Vzc2luZyAoc3VibWl0IG1vcmUgd29yaykgYXQgdGhlIGVu ZC4KKyAqLworYm9vbCBpOTE1X3NjaGVkdWxlcl9ub3RpZnlfcmVxdWVzdChzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX3JlcXVlc3QgKnJlcSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYgPSB0b19pOTE1KHJlcS0+cmluZy0+ZGV2KTsKKwlzdHJ1Y3QgaTkxNV9zY2hlZHVsZXIgKnNj aGVkdWxlciA9IGRldl9wcml2LT5zY2hlZHVsZXI7CisJc3RydWN0IGk5MTVfc2NoZWR1bGVyX3F1 ZXVlX2VudHJ5ICpub2RlID0gcmVxLT5zY2hlZHVsZXJfcWU7CisJdW5zaWduZWQgbG9uZyBmbGFn czsKKworCWlmICghbm9kZSkKKwkJcmV0dXJuIGZhbHNlOworCisJc3Bpbl9sb2NrX2lycXNhdmUo JnNjaGVkdWxlci0+bG9jaywgZmxhZ3MpOworCisJV0FSTl9PTighSTkxNV9TUVNfSVNfRkxZSU5H KG5vZGUpKTsKKworCS8qIE5vZGUgd2FzIGluIGZsaWdodCBzbyBtYXJrIGl0IGFzIGNvbXBsZXRl LiAqLworCWlmIChyZXEtPmNhbmNlbGxlZCkKKwkJbm9kZS0+c3RhdHVzID0gaTkxNV9zcXNfZGVh ZDsKKwllbHNlCisJCW5vZGUtPnN0YXR1cyA9IGk5MTVfc3FzX2NvbXBsZXRlOworCisJc3Bpbl91 bmxvY2tfaXJxcmVzdG9yZSgmc2NoZWR1bGVyLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gdHJ1 ZTsKK30KKworc3RhdGljIGludCBpOTE1X3NjaGVkdWxlcl9yZW1vdmVfZGVwZW5kZW50KHN0cnVj dCBpOTE1X3NjaGVkdWxlciAqc2NoZWR1bGVyLAorCQkJCXN0cnVjdCBpOTE1X3NjaGVkdWxlcl9x dWV1ZV9lbnRyeSAqcmVtb3ZlKQoreworCXN0cnVjdCBpOTE1X3NjaGVkdWxlcl9xdWV1ZV9lbnRy eSAqbm9kZTsKKwlpbnQgaSwgcjsKKwlpbnQgY291bnQgPSAwOworCisJLyoKKwkgKiBFbnN1cmUg dGhhdCBhIG5vZGUgaXMgbm90IGJlaW5nIHJlbW92ZWQgd2hpY2ggaXMgc3RpbGwgZGVwZW5kZW50 CisJICogdXBvbiBvdGhlciAobm90IGNvbXBsZXRlZCkgd29yay4gSWYgdGhhdCBoYXBwZW5zLCBp dCBpbXBsaWVzCisJICogc29tZXRoaW5nIGhhcyBnb25lIHZlcnkgd3Jvbmcgd2l0aCB0aGUgZGVw ZW5kZW5jeSB0cmFja2luZyEgTm90ZQorCSAqIHRoYXQgdGhlcmUgaXMgbm8gbmVlZCB0byB3b3Jy eSBpZiB0aGlzIG5vZGUgaGFzIGJlZW4gZXhwbGljaXRseQorCSAqIGtpbGxlZCBmb3Igc29tZSBy ZWFzb24gLSBpdCBtaWdodCBiZSBiZWluZyBraWxsZWQgYmVmb3JlIGl0IGdvdAorCSAqIHNlbnQg dG8gdGhlIGhhcmR3YXJlLgorCSAqLworCWlmIChyZW1vdmUtPnN0YXR1cyAhPSBpOTE1X3Nxc19k ZWFkKSB7CisJCWZvciAoaSA9IDA7IGkgPCByZW1vdmUtPm51bV9kZXBzOyBpKyspCisJCQlpZiAo KHJlbW92ZS0+ZGVwX2xpc3RbaV0pICYmCisJCQkgICAgKCFJOTE1X1NRU19JU19DT01QTEVURShy ZW1vdmUtPmRlcF9saXN0W2ldKSkpCisJCQkJY291bnQrKzsKKwkJV0FSTl9PTihjb3VudCk7CisJ fQorCisJLyoKKwkgKiBSZW1vdmUgdGhpcyBub2RlIGZyb20gdGhlIGRlcGVuZGVuY3kgbGlzdHMg b2YgYW55IG90aGVyIG5vZGUgd2hpY2gKKwkgKiBtaWdodCBiZSB3YWl0aW5nIG9uIGl0LgorCSAq LworCWZvciAociA9IDA7IHIgPCBJOTE1X05VTV9SSU5HUzsgcisrKSB7CisJCWxpc3RfZm9yX2Vh Y2hfZW50cnkobm9kZSwgJnNjaGVkdWxlci0+bm9kZV9xdWV1ZVtyXSwgbGluaykgeworCQkJZm9y IChpID0gMDsgaSA8IG5vZGUtPm51bV9kZXBzOyBpKyspIHsKKwkJCQlpZiAobm9kZS0+ZGVwX2xp c3RbaV0gIT0gcmVtb3ZlKQorCQkJCQljb250aW51ZTsKKworCQkJCW5vZGUtPmRlcF9saXN0W2ld ID0gTlVMTDsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqIGk5MTVf c2NoZWR1bGVyX3dha2V1cCAtIHdha2UgdGhlIHNjaGVkdWxlcidzIHdvcmtlciB0aHJlYWQKKyAq IEBkZXY6IERSTSBkZXZpY2UKKyAqIENhbGxlZCBhdCB0aGUgZW5kIG9mIHNlcW5vIGludGVycnVw dCBwcm9jZXNzaW5nIGlmIGFueSByZXF1ZXN0IGhhcworICogY29tcGxldGVkIHRoYXQgY29ycmVz cG9uZHMgdG8gYSBzY2hlZHVsZXIgbm9kZS4KKyAqLwordm9pZCBpOTE1X3NjaGVkdWxlcl93YWtl dXAoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwkvKiBYWFg6IE5lZWQgdG8gY2FsbCBpOTE1 X3NjaGVkdWxlcl9yZW1vdmUoKSB2aWEgd29yayBoYW5kbGVyLiAqLworfQorCisvKioKKyAqIGk5 MTVfc2NoZWR1bGVyX2NsZWFuX25vZGUgLSBmcmVlIHVwIGFueSBhbGxvY2F0aW9ucy9yZWZlcmVu Y2VzCisgKiBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIHNjaGVkdWxlciBxdWV1ZSBlbnRyeS4K KyAqIEBub2RlOiBRdWV1ZSBlbnRyeSBzdHJ1Y3R1cmUgd2hpY2ggaXMgY29tcGxldGUKKyAqIEFm dGVyIGEgZ2l2ZSBiYXRjaCBidWZmZXIgY29tcGxldGVzIG9uIHRoZSBoYXJkd2FyZSwgYWxsIHRo ZSBpbmZvcm1hdGlvbgorICogcmVxdWlyZWQgdG8gcmVzdWJtaXQgaXQgaXMgbm8gbG9uZ2VyIHJl cXVpcmVkLiBIb3dldmVyLCB0aGUgbm9kZSBlbnRyeQorICogaXRzZWxmIG1pZ2h0IHN0aWxsIGJl IHJlcXVpcmVkIGZvciB0cmFja2luZyBwdXJwb3NlcyBmb3IgYSB3aGlsZSBsb25nZXIuCisgKiBU aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgYXMgc29vbiBhcyB0aGUgbm9kZSBpcyBrbm93 biB0byBiZSBjb21wbGV0ZQorICogc28gdGhhdCB0aGVzZSByZXNvdXJjZXMgbWF5IGJlIGZyZWVk IGV2ZW4gdGhvdWdoIHRoZSBub2RlIGl0c2VsZiBtaWdodAorICogaGFuZyBhcm91bmQuCisgKi8K K3ZvaWQgaTkxNV9zY2hlZHVsZXJfY2xlYW5fbm9kZShzdHJ1Y3QgaTkxNV9zY2hlZHVsZXJfcXVl dWVfZW50cnkgKm5vZGUpCit7CisJaWYgKCFJOTE1X1NRU19JU19DT01QTEVURShub2RlKSkgewor CQlXQVJOKCFub2RlLT5wYXJhbXMucmVxdWVzdC0+Y2FuY2VsbGVkLAorCQkgICAgICJDbGVhbmlu ZyBhY3RpdmUgbm9kZTogJWQhXG4iLCBub2RlLT5zdGF0dXMpOworCQlyZXR1cm47CisJfQorCisJ aWYgKG5vZGUtPnBhcmFtcy5iYXRjaF9vYmopIHsKKwkJLyoKKwkJICogVGhlIGJhdGNoIGJ1ZmZl ciBtdXN0IGJlIHVucGlubmVkIGJlZm9yZSBpdCBpcyB1bnJlZmVyZW5jZWQKKwkJICogb3RoZXJ3 aXNlIHRoZSB1bnBpbiBmYWlscyB3aXRoIGEgbWlzc2luZyB2bWEhPworCQkgKi8KKwkJaWYgKG5v ZGUtPnBhcmFtcy5kaXNwYXRjaF9mbGFncyAmIEk5MTVfRElTUEFUQ0hfU0VDVVJFKQorCQkJaTkx NV9nZW1fZXhlY2J1ZmZfcmVsZWFzZV9iYXRjaF9vYmoobm9kZS0+cGFyYW1zLmJhdGNoX29iaik7 CisKKwkJbm9kZS0+cGFyYW1zLmJhdGNoX29iaiA9IE5VTEw7CisJfQorCisJLyogQW5kIGFueXRo aW5nIGVsc2Ugb3duZWQgYnkgdGhlIG5vZGU6ICovCisJaWYgKG5vZGUtPnBhcmFtcy5jbGlwcmVj dHMpIHsKKwkJa2ZyZWUobm9kZS0+cGFyYW1zLmNsaXByZWN0cyk7CisJCW5vZGUtPnBhcmFtcy5j bGlwcmVjdHMgPSBOVUxMOworCX0KK30KKworc3RhdGljIGJvb2wgaTkxNV9zY2hlZHVsZXJfcmVt b3ZlKHN0cnVjdCBpOTE1X3NjaGVkdWxlciAqc2NoZWR1bGVyLAorCQkJCSAgc3RydWN0IGludGVs X2VuZ2luZV9jcyAqcmluZywKKwkJCQkgIHN0cnVjdCBsaXN0X2hlYWQgKnJlbW92ZSkKK3sKKwlz dHJ1Y3QgaTkxNV9zY2hlZHVsZXJfcXVldWVfZW50cnkgKm5vZGUsICpub2RlX25leHQ7CisJaW50 IGZseWluZyA9IDAsIHF1ZXVlZCA9IDA7CisJYm9vbCBkb19zdWJtaXQ7CisJdWludDMyX3QgbWlu X3NlcW5vOworCisJc3Bpbl9sb2NrX2lycSgmc2NoZWR1bGVyLT5sb2NrKTsKKworCS8qCisJICog SW4gdGhlIGNhc2Ugd2hlcmUgdGhlIHN5c3RlbSBpcyBpZGxlLCBzdGFydGluZyAnbWluX3NlcW5v JyBmcm9tIGEgYmlnCisJICogbnVtYmVyIHdpbGwgY2F1c2UgYWxsIG5vZGVzIHRvIGJlIHJlbW92 ZWQgYXMgdGhleSBhcmUgbm93IGJhY2sgdG8KKwkgKiBiZWluZyBpbi1vcmRlci4gSG93ZXZlciwg dGhpcyB3aWxsIGJlIGEgcHJvYmxlbSBpZiB0aGUgbGFzdCBvbmUgdG8KKwkgKiBjb21wbGV0ZSB3 YXMgYWN0dWFsbHkgb3V0LW9mLW9yZGVyIGFzIHRoZSByaW5nIHNlcW5vIHZhbHVlIHdpbGwgYmUK KwkgKiBsb3dlciB0aGFuIG9uZSBvciBtb3JlIGNvbXBsZXRlZCBidWZmZXJzLiBUaHVzIGNvZGUg bG9va2luZyBmb3IgdGhlCisJICogY29tcGxldGlvbiBvZiBzYWlkIGJ1ZmZlcnMgd2lsbCB3YWl0 IGZvcmV2ZXIuCisJICogSW5zdGVhZCwgdXNlIHRoZSBoYXJkd2FyZSBzZXFubyBhcyB0aGUgc3Rh cnRpbmcgcG9pbnQuIFRoaXMgbWVhbnMKKwkgKiB0aGF0IHNvbWUgYnVmZmVycyBtaWdodCBiZSBr ZXB0IGFyb3VuZCBldmVuIGluIGEgY29tcGxldGVseSBpZGxlCisJICogc3lzdGVtIGJ1dCBpdCBz aG91bGQgZ3VhcmFudGVlIHRoYXQgbm8tb25lIGV2ZXIgZ2V0cyBjb25mdXNlZCB3aGVuCisJICog d2FpdGluZyBmb3IgYnVmZmVyIGNvbXBsZXRpb24uCisJICovCisJbWluX3NlcW5vID0gcmluZy0+ Z2V0X3NlcW5vKHJpbmcsIHRydWUpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShub2RlLCAmc2No ZWR1bGVyLT5ub2RlX3F1ZXVlW3JpbmctPmlkXSwgbGluaykgeworCQlpZiAoSTkxNV9TUVNfSVNf UVVFVUVEKG5vZGUpKQorCQkJcXVldWVkKys7CisJCWVsc2UgaWYgKEk5MTVfU1FTX0lTX0ZMWUlO Ryhub2RlKSkKKwkJCWZseWluZysrOworCQllbHNlIGlmIChJOTE1X1NRU19JU19DT01QTEVURShu b2RlKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChub2RlLT5wYXJhbXMucmVxdWVzdC0+c2Vxbm8g PT0gMCkKKwkJCWNvbnRpbnVlOworCisJCWlmICghaTkxNV9zZXFub19wYXNzZWQobm9kZS0+cGFy YW1zLnJlcXVlc3QtPnNlcW5vLCBtaW5fc2Vxbm8pKQorCQkJbWluX3NlcW5vID0gbm9kZS0+cGFy YW1zLnJlcXVlc3QtPnNlcW5vOworCX0KKworCUlOSVRfTElTVF9IRUFEKHJlbW92ZSk7CisJbGlz dF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5vZGUsIG5vZGVfbmV4dCwgJnNjaGVkdWxlci0+bm9kZV9x dWV1ZVtyaW5nLT5pZF0sIGxpbmspIHsKKwkJLyoKKwkJICogT25seSByZW1vdmUgY29tcGxldGVk IG5vZGVzIHdoaWNoIGhhdmUgYSBsb3dlciBzZXFubyB0aGFuCisJCSAqIGFsbCBwZW5kaW5nIG5v ZGVzLiBXaGlsZSB0aGVyZSBpcyB0aGUgcG9zc2liaWxpdHkgb2YgdGhlCisJCSAqIHJpbmcncyBz ZXFubyBjb3VudGluZyBiYWNrd2FyZHMsIGFsbCBoaWdoZXIgYnVmZmVycyBtdXN0CisJCSAqIGJl IHJlbWVtYmVyZWQgc28gdGhhdCB0aGUgJ2k5MTVfc2Vxbm9fcGFzc2VkKCknIHRlc3QgY2FuCisJ CSAqIHJlcG9ydCB0aGF0IHRoZXkgaGF2ZSBpbiBmYWN0IHBhc3NlZC4KKwkJICoKKwkJICogTkI6 IFRoaXMgaXMgbm90IHRydWUgZm9yICdkZWFkJyBub2Rlcy4gVGhlIEdQVSByZXNldCBjYXVzZXMK KwkJICogdGhlIHNvZnR3YXJlIHNlcW5vIHRvIHJlc3RhcnQgZnJvbSBpdHMgaW5pdGlhbCB2YWx1 ZS4gVGh1cworCQkgKiB0aGUgZGVhZCBub2RlcyBtdXN0IGJlIHJlbW92ZWQgZXZlbiB0aG91Z2gg dGhlaXIgc2Vxbm8gdmFsdWVzCisJCSAqIGFyZSBwb3RlbnRpYWxseSB2YXN0bHkgZ3JlYXRlciB0 aGFuIHRoZSBjdXJyZW50IHJpbmcgc2Vxbm8uCisJCSAqLworCQlpZiAoIUk5MTVfU1FTX0lTX0NP TVBMRVRFKG5vZGUpKQorCQkJY29udGludWU7CisKKwkJaWYgKG5vZGUtPnN0YXR1cyAhPSBpOTE1 X3Nxc19kZWFkKSB7CisJCQlpZiAoaTkxNV9zZXFub19wYXNzZWQobm9kZS0+cGFyYW1zLnJlcXVl c3QtPnNlcW5vLCBtaW5fc2Vxbm8pICYmCisJCQkgICAgKG5vZGUtPnBhcmFtcy5yZXF1ZXN0LT5z ZXFubyAhPSBtaW5fc2Vxbm8pKQorCQkJCWNvbnRpbnVlOworCQl9CisKKwkJbGlzdF9kZWwoJm5v ZGUtPmxpbmspOworCQlsaXN0X2FkZCgmbm9kZS0+bGluaywgcmVtb3ZlKTsKKworCQkvKiBTdHJp cCB0aGUgZGVwZW5kZW5jeSBpbmZvIHdoaWxlIHRoZSBtdXRleCBpcyBzdGlsbCBsb2NrZWQgKi8K KwkJaTkxNV9zY2hlZHVsZXJfcmVtb3ZlX2RlcGVuZGVudChzY2hlZHVsZXIsIG5vZGUpOworCisJ CWNvbnRpbnVlOworCX0KKworCS8qCisJICogUmVsZWFzZSB0aGUgaW50ZXJydXB0IHJlZmVyZW5j ZSBjb3VudCBpZiB0aGVyZSBhcmUgbm8gbG9uZ2VyIGFueQorCSAqIG5vZGVzIHRvIHdvcnJ5IGFi b3V0LgorCSAqLworCWlmICghZmx5aW5nICYmICFxdWV1ZWQgJiYKKwkgICAgKHNjaGVkdWxlci0+ ZmxhZ3NbcmluZy0+aWRdICYgaTkxNV9zZl9pbnRlcnJ1cHRzX2VuYWJsZWQpKSB7CisJCXJpbmct PmlycV9wdXQocmluZyk7CisJCXNjaGVkdWxlci0+ZmxhZ3NbcmluZy0+aWRdICY9IH5pOTE1X3Nm X2ludGVycnVwdHNfZW5hYmxlZDsKKwl9CisKKwkvKiBMYXVuY2ggbW9yZSBwYWNrZXRzIG5vdz8g Ki8KKwlkb19zdWJtaXQgPSAocXVldWVkID4gMCkgJiYgKGZseWluZyA8IHNjaGVkdWxlci0+bWlu X2ZseWluZyk7CisKKwlzcGluX3VubG9ja19pcnEoJnNjaGVkdWxlci0+bG9jayk7CisKKwlyZXR1 cm4gZG9fc3VibWl0OworfQorCit2b2lkIGk5MTVfc2NoZWR1bGVyX3Byb2Nlc3Nfd29yayhzdHJ1 Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiA9IHJpbmctPmRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGk5MTVfc2NoZWR1bGVy ICpzY2hlZHVsZXIgPSBkZXZfcHJpdi0+c2NoZWR1bGVyOworCXN0cnVjdCBpOTE1X3NjaGVkdWxl cl9xdWV1ZV9lbnRyeSAqbm9kZTsKKwlib29sIGRvX3N1Ym1pdDsKKwlzdHJ1Y3QgbGlzdF9oZWFk IHJlbW92ZTsKKworCWlmIChsaXN0X2VtcHR5KCZzY2hlZHVsZXItPm5vZGVfcXVldWVbcmluZy0+ aWRdKSkKKwkJcmV0dXJuOworCisJLyogUmVtb3ZlIGNvbXBsZXRlZCBub2Rlcy4gKi8KKwlkb19z dWJtaXQgPSBpOTE1X3NjaGVkdWxlcl9yZW1vdmUoc2NoZWR1bGVyLCByaW5nLCAmcmVtb3ZlKTsK KworCWlmICghZG9fc3VibWl0ICYmIGxpc3RfZW1wdHkoJnJlbW92ZSkpCisJCXJldHVybjsKKwor CS8qIE5lZWQgdG8gZ3JhYiB0aGUgcG0gbG9jayBvdXRzaWRlIG9mIHRoZSBtdXRleCBsb2NrICov CisJaWYgKGRvX3N1Ym1pdCkKKwkJaW50ZWxfcnVudGltZV9wbV9nZXQoZGV2X3ByaXYpOworCisJ bXV0ZXhfbG9jaygmcmluZy0+ZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCisJaWYgKGRvX3N1Ym1pdCkK KwkJaTkxNV9zY2hlZHVsZXJfc3VibWl0KHJpbmcpOworCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZy ZW1vdmUpKSB7CisJCW5vZGUgPSBsaXN0X2ZpcnN0X2VudHJ5KCZyZW1vdmUsIHR5cGVvZigqbm9k ZSksIGxpbmspOworCQlsaXN0X2RlbCgmbm9kZS0+bGluayk7CisKKwkJLyogRnJlZSB1cCBhbGwg dGhlIERSTSByZWZlcmVuY2VzICovCisJCWk5MTVfc2NoZWR1bGVyX2NsZWFuX25vZGUobm9kZSk7 CisKKwkJLyogQW5kIGFueXRoaW5nIGVsc2Ugb3duZWQgYnkgdGhlIG5vZGU6ICovCisJCW5vZGUt PnBhcmFtcy5yZXF1ZXN0LT5zY2hlZHVsZXJfcWUgPSBOVUxMOworCQlpOTE1X2dlbV9yZXF1ZXN0 X3VucmVmZXJlbmNlKG5vZGUtPnBhcmFtcy5yZXF1ZXN0KTsKKwkJa2ZyZWUobm9kZS0+ZGVwX2xp c3QpOworCQlrZnJlZShub2RlKTsKKwl9CisKKwltdXRleF91bmxvY2soJnJpbmctPmRldi0+c3Ry dWN0X211dGV4KTsKKworCWlmIChkb19zdWJtaXQpCisJCWludGVsX3J1bnRpbWVfcG1fcHV0KGRl dl9wcml2KTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc2NoZWR1 bGVyLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3NjaGVkdWxlci5oCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxNWZlYzgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3NjaGVkdWxlci5oCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisg KiBDb3B5cmlnaHQgKGMpIDIwMTQgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9u IGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5p bmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRp b24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdp dGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSBy aWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBz dWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRv IHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8g ZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBh Ym92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRp bmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGll cyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRI RSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBL SU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRP IFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAor ICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xB SU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04g T0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0Yg T1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERF QUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKgorICovCisKKyNpZm5kZWYgX0k5MTVfU0NI RURVTEVSX0hfCisjZGVmaW5lIF9JOTE1X1NDSEVEVUxFUl9IXworCitlbnVtIGk5MTVfc2NoZWR1 bGVyX3F1ZXVlX3N0YXR1cyB7CisJLyogTGltYm86ICovCisJaTkxNV9zcXNfbm9uZSA9IDAsCisJ LyogTm90IHlldCBzdWJtaXR0ZWQgdG8gaGFyZHdhcmU6ICovCisJaTkxNV9zcXNfcXVldWVkLAor CS8qIFBvcHBlZCBmcm9tIHF1ZXVlLCByZWFkeSB0byBmbHk6ICovCisJaTkxNV9zcXNfcG9wcGVk LAorCS8qIFNlbnQgdG8gaGFyZHdhcmUgZm9yIHByb2Nlc3Npbmc6ICovCisJaTkxNV9zcXNfZmx5 aW5nLAorCS8qIEZpbmlzaGVkIHByb2Nlc3Npbmcgb24gdGhlIGhhcmR3YXJlOiAqLworCWk5MTVf c3FzX2NvbXBsZXRlLAorCS8qIEtpbGxlZCBieSB3YXRjaGRvZyBvciBjYXRhc3Ryb3BoaWMgc3Vi bWlzc2lvbiBmYWlsdXJlOiAqLworCWk5MTVfc3FzX2RlYWQsCisJLyogTGltaXQgdmFsdWUgZm9y IHVzZSB3aXRoIGFycmF5cy9sb29wcyAqLworCWk5MTVfc3FzX01BWAorfTsKKworI2RlZmluZSBJ OTE1X1NRU19JU19RVUVVRUQobm9kZSkJKCgobm9kZSktPnN0YXR1cyA9PSBpOTE1X3Nxc19xdWV1 ZWQpKQorI2RlZmluZSBJOTE1X1NRU19JU19GTFlJTkcobm9kZSkJKCgobm9kZSktPnN0YXR1cyA9 PSBpOTE1X3Nxc19mbHlpbmcpKQorI2RlZmluZSBJOTE1X1NRU19JU19DT01QTEVURShub2RlKQko KChub2RlKS0+c3RhdHVzID09IGk5MTVfc3FzX2NvbXBsZXRlKSB8fCBcCisJCQkJCSAoKG5vZGUp LT5zdGF0dXMgPT0gaTkxNV9zcXNfZGVhZCkpCisKK3N0cnVjdCBpOTE1X3NjaGVkdWxlcl9vYmpf ZW50cnkgeworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICAgICAgICAgICpvYmo7CisJYm9v bCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9vbmx5OworfTsKKworc3RydWN0 IGk5MTVfc2NoZWR1bGVyX3F1ZXVlX2VudHJ5IHsKKwlzdHJ1Y3QgaTkxNV9leGVjYnVmZmVyX3Bh cmFtcyAgICAgICBwYXJhbXM7CisJLyogLTEwMjMgPSBsb3dlc3QgcHJpb3JpdHksIDAgPSBkZWZh dWx0LCAxMDIzID0gaGlnaGVzdCAqLworCWludDMyX3QgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHByaW9yaXR5OworCXN0cnVjdCBpOTE1X3NjaGVkdWxlcl9vYmpfZW50cnkgICAgICpzYXZl ZF9vYmplY3RzOworCWludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bV9vYmpz OworCWJvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1bXBlZDsKKwlzdHJ1Y3Qg aTkxNV9zY2hlZHVsZXJfcXVldWVfZW50cnkgICAqKmRlcF9saXN0OworCWludCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG51bV9kZXBzOworCWVudW0gaTkxNV9zY2hlZHVsZXJfcXVl dWVfc3RhdHVzICAgIHN0YXR1czsKKwl1bnNpZ25lZCBsb25nICAgICAgICAgICAgICAgICAgICAg ICBzdGFtcDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAgICAgICAgICAgICBsaW5rOworfTsK Kworc3RydWN0IGk5MTVfc2NoZWR1bGVyIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgIG5vZGVfcXVl dWVbSTkxNV9OVU1fUklOR1NdOworCXVpbnQzMl90ICAgICAgICAgICAgZmxhZ3NbSTkxNV9OVU1f UklOR1NdOworCXNwaW5sb2NrX3QgICAgICAgICAgbG9jazsKKworCS8qIFR1bmluZyBwYXJhbWV0 ZXJzOiAqLworCWludDMyX3QgICAgICAgICAgICAgcHJpb3JpdHlfbGV2ZWxfbWluOworCWludDMy X3QgICAgICAgICAgICAgcHJpb3JpdHlfbGV2ZWxfbWF4OworCWludDMyX3QgICAgICAgICAgICAg cHJpb3JpdHlfbGV2ZWxfYnVtcDsKKwlpbnQzMl90ICAgICAgICAgICAgIHByaW9yaXR5X2xldmVs X3ByZWVtcHQ7CisJdWludDMyX3QgICAgICAgICAgICBtaW5fZmx5aW5nOworfTsKKworLyogRmxh ZyBiaXRzIGZvciBpOTE1X3NjaGVkdWxlcjo6ZmxhZ3MgKi8KK2VudW0geworCWk5MTVfc2ZfaW50 ZXJydXB0c19lbmFibGVkICA9ICgxIDw8IDApLAorCWk5MTVfc2Zfc3VibWl0dGluZyAgICAgICAg ICA9ICgxIDw8IDEpLAorfTsKKworYm9vbCBpOTE1X3NjaGVkdWxlcl9pc19lbmFibGVkKHN0cnVj dCBkcm1fZGV2aWNlICpkZXYpOworaW50IGk5MTVfc2NoZWR1bGVyX2luaXQoc3RydWN0IGRybV9k ZXZpY2UgKmRldik7Cit2b2lkIGk5MTVfc2NoZWR1bGVyX2NsZWFuX25vZGUoc3RydWN0IGk5MTVf c2NoZWR1bGVyX3F1ZXVlX2VudHJ5ICpub2RlKTsKK2ludCBpOTE1X3NjaGVkdWxlcl9xdWV1ZV9l eGVjYnVmZmVyKHN0cnVjdCBpOTE1X3NjaGVkdWxlcl9xdWV1ZV9lbnRyeSAqcWUpOworYm9vbCBp OTE1X3NjaGVkdWxlcl9ub3RpZnlfcmVxdWVzdChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3Qg KnJlcSk7Cit2b2lkIGk5MTVfc2NoZWR1bGVyX3dha2V1cChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 KTsKKworI2VuZGlmICAvKiBfSTkxNV9TQ0hFRFVMRVJfSF8gKi8KLS0gCjEuOS4xCgpfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGlu ZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVl ZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK