From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rodrigo Vivi Subject: Re: [PATCH 4/5] drm/i915: Introduce a non-blocking power domain for vblank interrupts Date: Thu, 4 Jan 2018 18:08:12 -0800 Message-ID: <20180105020812.j5ihlti2g5o2njje@intel.com> References: <20180103204001.3008-1-dhinakaran.pandiyan@intel.com> <20180103204001.3008-4-dhinakaran.pandiyan@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTPS id 295136E291 for ; Fri, 5 Jan 2018 02:08:14 +0000 (UTC) Content-Disposition: inline In-Reply-To: <20180103204001.3008-4-dhinakaran.pandiyan@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Dhinakaran Pandiyan Cc: Daniel Vetter , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gV2VkLCBKYW4gMDMsIDIwMTggYXQgMDg6NDA6MDBQTSArMDAwMCwgRGhpbmFrYXJhbiBQYW5k aXlhbiB3cm90ZToKPiBXaGVuIERDIHN0YXRlcyBhcmUgZW5hYmxlZCBhbmQgUFNSIGlzIGFjdGl2 ZSwgdGhlIGhhcmR3YXJlIGVudGVycyBEQzUvREM2Cj4gc3RhdGVzIHJlc3VsdGluZyBpbiB0aGUg ZnJhbWUgY291bnRlciByZXNldHRpbmcuIFRoZSBmcmFtZSBjb3VudGVyIHJlc2V0Cj4gbWVzcyB1 cCB0aGUgdmJsYW5rIGNvdW50aW5nIGxvZ2ljIGFzIHRoZSBkaWZmIGJldHdlZW4gdGhlIG5ldyBm cmFtZQo+IGNvdW50ZXIgdmFsdWUgYW5kIHRoZSBwcmV2aW91cyBpcyBuZWdhdGl2ZSwgYW5kIHRo aXMgbmVnYXRpdmUgZGlmZiBnZXRzCj4gYXBwbGllZCBhcyBhbiB1bnNpZ25lZCB2YWx1ZSB0byB0 aGUgdmJsYW5rIGNvdW50LiBXZSBjYW5ub3QgcmVqZWN0IG5lZ2F0aXZlCj4gZGlmZnMgYWx0b2dl dGhlciBiZWNhdXNlIHRoZXkgY2FuIGFyaXNlIGZyb20gbGVnaXRpbWF0ZSBmcmFtZSBjb3VudGVy Cj4gb3ZlcmZsb3dzIHdoZW4gdGhlcmUgaXMgYSBsb25nIHBlcmlvZCB3aXRoIHZibGFuayBkaXNh YmxlZC4gU28sIHRoaXMKPiBhcHByb2FjaCBhbGxvd3MgZm9yIHRoZSBkcml2ZXIgdG8gbm90aWNl IGEgREMgc3RhdGUgdG9nZ2xlIGJldHdlZW4gYSB2YmxhbmsKPiBkaXNhYmxlIGFuZCBlbmFibGUg YW5kIGZpbGwgaW4gdGhlIG1pc3NlZCB2YmxhbmtzLgo+IAo+IEJ1dCwgaW4gb3JkZXIgdG8gZGlz YWJsZSBEQyBzdGF0ZXMgd2hlbiB2YmxhbmsgaW50ZXJydXB0cyBhcmUgcmVxdWlyZWQsCj4gdGhl IERDX09GRiBwb3dlciB3ZWxsIGhhcyB0byBiZSBkaXNhYmxlZCBpbiBhbiBhdG9taWMgY29udGV4 dC4gU28sCj4gaW50cm9kdWNlIGEgbmV3IFZCTEFOSyBwb3dlciBkb21haW4gdGhhdCBjYW4gYmUg YWNxdWlyZWQgYW5kIHJlbGVhc2VkIGluCj4gYXRvbWljIGNvbnRleHRzIHdpdGggdGhlc2UgY2hh bmdlcyAtCj4gMSkgIF92YmxhbmtfZ2V0KCkgYW5kIF92YmxhbmtfcHV0KCkgbWV0aG9kcyBza2lw IHRoZSBwb3dlcl9kb21haW4gbXV0ZXgKPiBhbmQgdXNlIGEgc3BpbiBsb2NrIGZvciB0aGUgREMg cG93ZXIgd2VsbC4KPiAyKSBwb3dlcl9kb21haW5zLT5kb21haW5fdXNlX2NvdW50IGlzIGNvbnZl cnRlZCB0byBhbiBhdG9taWNfdCBhcnJheSBzbwo+IHRoYXQgaXQgY2FuIGJlIHVwZGF0ZWQgb3V0 c2lkZSBvZiB0aGUgcG93ZXIgZG9tYWluIG11dGV4Lgo+IAo+IHYzOiBTcXVhc2ggZG9tYWluX3Vz ZV9jb3VudCBhdG9taWNfdCBjb252ZXJzaW9uIChNYWFydGVuKQo+IHYyOiBGaXggZGVhZGxvY2sg Ynkgc3dpdGNoaW5nIGlycXNhdmUgc3BpbmxvY2suCj4gICAgIEltcGxlbWVudCBhdG9taWMgdmVy c2lvbiBvZiBnZXRfaWZfZW5hYmxlZC4KPiAgICAgTW9kaWZ5IHBvd2VyX2RvbWFpbl92ZXJpZnlf c3RhdGUgdG8gY2hlY2sgcG93ZXIgd2VsbCB1c2UgY291bnQgYW5kCj4gZW5hYmxlZCBzdGF0dXMg YXRvbWljYWxseS4KPiAgICAgUmV3cml0ZSBvZiBpbnRlbF9wb3dlcl93ZWxsX3tnZXQscHV0fQo+ IAo+IENjOiBNYWFydGVuIExhbmtob3JzdCA8bWFhcnRlbi5sYW5raG9yc3RAbGludXguaW50ZWwu Y29tPgo+IENjOiBEYW5pZWwgVmV0dGVyIDxkYW5pZWwudmV0dGVyQGZmd2xsLmNoPgo+IENjOiBW aWxsZSBTeXJqw6Rsw6QgPHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwuY29tPgo+IENjOiBSb2Ry aWdvIFZpdmkgPHJvZHJpZ28udml2aUBpbnRlbC5jb20+Cj4gU2lnbmVkLW9mZi1ieTogRGhpbmFr YXJhbiBQYW5kaXlhbiA8ZGhpbmFrYXJhbi5wYW5kaXlhbkBpbnRlbC5jb20+Cj4gLS0tCj4gIGRy aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jICAgICB8ICAgMiArLQo+ICBkcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oICAgICAgICAgfCAgMTkgKysrLQo+ICBkcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmggICAgfCAgIDEgKwo+ICBkcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9kcnYuaCAgICAgICAgfCAgIDMgKwo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9ydW50aW1lX3BtLmMgfCAxOTUgKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0K PiAgNSBmaWxlcyBjaGFuZ2VkLCAxOTkgaW5zZXJ0aW9ucygrKSwgMjEgZGVsZXRpb25zKC0pCj4g Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMKPiBpbmRleCBkODFjYjI1MTMwNjkuLjVh N2NlNzM0ZGUwMiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVn ZnMuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jCj4gQEAgLTI3 NDYsNyArMjc0Niw3IEBAIHN0YXRpYyBpbnQgaTkxNV9wb3dlcl9kb21haW5faW5mbyhzdHJ1Y3Qg c2VxX2ZpbGUgKm0sIHZvaWQgKnVudXNlZCkKPiAgCQlmb3JfZWFjaF9wb3dlcl9kb21haW4ocG93 ZXJfZG9tYWluLCBwb3dlcl93ZWxsLT5kb21haW5zKQo+ICAJCQlzZXFfcHJpbnRmKG0sICIgICUt MjNzICVkXG4iLAo+ICAJCQkJIGludGVsX2Rpc3BsYXlfcG93ZXJfZG9tYWluX3N0cihwb3dlcl9k b21haW4pLAo+IC0JCQkJIHBvd2VyX2RvbWFpbnMtPmRvbWFpbl91c2VfY291bnRbcG93ZXJfZG9t YWluXSk7Cj4gKwkJCQkgYXRvbWljX3JlYWQoJnBvd2VyX2RvbWFpbnMtPmRvbWFpbl91c2VfY291 bnRbcG93ZXJfZG9tYWluXSkpOwo+ICAJfQo+ICAKPiAgCW11dGV4X3VubG9jaygmcG93ZXJfZG9t YWlucy0+bG9jayk7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2 LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gaW5kZXggY2FlYmQ1ODI1Mjc5 Li42MWE2MzVmMDNhZjcgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9k cnYuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiBAQCAtMTAzMiw2 ICsxMDMyLDIzIEBAIHN0cnVjdCBpOTE1X3Bvd2VyX3dlbGwgewo+ICAJCQlib29sIGhhc19mdXNl czoxOwo+ICAJCX0gaHN3Owo+ICAJfTsKPiArCj4gKwkvKiBMb2NrIHRvIHNlcmlhbGl6ZSBhY2Nl c3MgdG8gY291bnQsIGh3X2VuYWJsZWQgYW5kIG9wcywgdXNlZCBmb3IKPiArCSAqIHBvd2VyIHdl bGxzIHRoYXQgaGF2ZSBzdXBwb3J0c19hdG9taXhfY3R4IHNldCB0byBUcnVlLgo+ICsJICovCj4g KwlzcGlubG9ja190IGxvY2s7Cj4gKwo+ICsJLyogSW5kaWNhdGVzIHRoYXQgdGhlIGdldC9wdXQg bWV0aG9kcyBmb3IgdGhpcyBwb3dlciB3ZWxsIGNhbiBiZSBjYWxsZWQKPiArCSAqIGluIGF0b21p YyBjb250ZXh0cywgcmVxdWlyZXMgLm9wcyB0byBub3Qgc2xlZXAuIFRoaXMgaXMgdmFsaWQKPiAr CSAqIG9ubHkgZm9yIHRoZSBEQ19PRkYgcG93ZXIgd2VsbCBjdXJyZW50bHkuCj4gKwkgKi8KPiAr CWJvb2wgc3VwcG9ydHNfYXRvbWljX2N0eDsKPiArCj4gKwkvKiBEQ19PRkYgcG93ZXIgd2VsbCB3 YXMgZGlzYWJsZWQgc2luY2UgdGhlIGxhc3QgdGltZSB2YmxhbmtzIHdlcmUKPiArCSAqIGRpc2Fi bGVkLgo+ICsJICovCj4gKwlib29sIGRjX29mZl9kaXNhYmxlZDsKPiArCj4gIAljb25zdCBzdHJ1 Y3QgaTkxNV9wb3dlcl93ZWxsX29wcyAqb3BzOwo+ICB9Owo+ICAKPiBAQCAtMTA0NSw3ICsxMDYy LDcgQEAgc3RydWN0IGk5MTVfcG93ZXJfZG9tYWlucyB7Cj4gIAlpbnQgcG93ZXJfd2VsbF9jb3Vu dDsKPiAgCj4gIAlzdHJ1Y3QgbXV0ZXggbG9jazsKPiAtCWludCBkb21haW5fdXNlX2NvdW50W1BP V0VSX0RPTUFJTl9OVU1dOwo+ICsJYXRvbWljX3QgZG9tYWluX3VzZV9jb3VudFtQT1dFUl9ET01B SU5fTlVNXTsKPiAgCXN0cnVjdCBpOTE1X3Bvd2VyX3dlbGwgKnBvd2VyX3dlbGxzOwo+ICB9Owo+ ICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5oIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5oCj4gaW5kZXggYTBkMmI2MTY5MzYx Li4zZTk2NzFmZjZmNzkgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf ZGlzcGxheS5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5oCj4g QEAgLTE3Miw2ICsxNzIsNyBAQCBlbnVtIGludGVsX2Rpc3BsYXlfcG93ZXJfZG9tYWluIHsKPiAg CVBPV0VSX0RPTUFJTl9BVVhfQywKPiAgCVBPV0VSX0RPTUFJTl9BVVhfRCwKPiAgCVBPV0VSX0RP TUFJTl9HTUJVUywKPiArCVBPV0VSX0RPTUFJTl9WQkxBTkssCgpNYXliZSB3ZSBjb3VsZCBzdGFy dCBhIG5ldyBjYXRlZ29yeSBvZiBhdG9taWMgZG9tYWlucyBhbmQgb24gaW50ZXJhdGlvbnMgdGhh dCBtYWtlcyBzZW5zZSBnbyBvdmVyIGJvdGgKb3IgbWFraW5nIHRoZSBkb21haW5zIGluIGFuIGFy cmF5IHdpdGggaXNfYXRvbWljIGJvb2wgaW4gY2FzZSB3ZSBjYW4gdHJhbnNmb3JtIHRoZSBhdG9t aWMgZ2V0LHB1dCB0bwpiZSByZWFsbHkgZ2VuZXJpYyBvciBpbnRvIC5lbmFibGUgLmRpc2FibGUg ZnVuY3Rpb24gcG9pbnRlcnMuCgo+ICAJUE9XRVJfRE9NQUlOX01PREVTRVQsCj4gIAlQT1dFUl9E T01BSU5fR1RfSVJRLAo+ICAJUE9XRVJfRE9NQUlOX0lOSVQsCj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf ZHJ2LmgKPiBpbmRleCAzMGY3OTFmODlkNjQuLjE2NGU2MmNiMDQ3YiAxMDA2NDQKPiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2Rydi5oCj4gQEAgLTE3OTcsNiArMTc5Nyw5IEBAIGJvb2wgaW50ZWxfZGlzcGxh eV9wb3dlcl9nZXRfaWZfZW5hYmxlZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYs Cj4gIAkJCQkJZW51bSBpbnRlbF9kaXNwbGF5X3Bvd2VyX2RvbWFpbiBkb21haW4pOwo+ICB2b2lk IGludGVsX2Rpc3BsYXlfcG93ZXJfcHV0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diwKPiAgCQkJICAgICBlbnVtIGludGVsX2Rpc3BsYXlfcG93ZXJfZG9tYWluIGRvbWFpbik7Cj4g K3ZvaWQgaW50ZWxfZGlzcGxheV9wb3dlcl92YmxhbmtfZ2V0KHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiwKPiArCQkJCSAgICBib29sICpuZWVkc19yZXN0b3JlKTsKCmNhbiB3ZSBk dW1wIHRoZSBuZWVkc19yZXN0b3JlIGFuZCBhbHdheXMgcmVzdG9yZSB0aGUgY291bnRlcj8KaWYg c28sIHdlIGNvdWxkIHVzZSByZWd1bGFyIGludGVsX3Bvd2VyX2RvbWFpbl97Z2V0LHB1dH0gZnVu Y3Rpb25zIGFuZCBidWlsdCB0aGUgZ2VuZXJpYyBhdG9taWMgaW5zaWRlIGl0LgoKPiArdm9pZCBp bnRlbF9kaXNwbGF5X3Bvd2VyX3ZibGFua19wdXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2KTsKPiAgCj4gIHN0YXRpYyBpbmxpbmUgdm9pZAo+ICBhc3NlcnRfcnBtX2RldmljZV9u b3Rfc3VzcGVuZGVkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcnVudGltZV9wbS5jIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfcnVudGltZV9wbS5jCj4gaW5kZXggZDc1OGRhNjE1NmE4Li45M2Iz MjRkY2M1NWQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcnVudGlt ZV9wbS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcnVudGltZV9wbS5jCj4g QEAgLTU2LDYgKzU2LDE5IEBAIHN0YXRpYyBzdHJ1Y3QgaTkxNV9wb3dlcl93ZWxsICoKPiAgbG9v a3VwX3Bvd2VyX3dlbGwoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICAJCSAg ZW51bSBpOTE1X3Bvd2VyX3dlbGxfaWQgcG93ZXJfd2VsbF9pZCk7Cj4gIAo+ICsvKiBPcHRpbWl6 ZSBmb3IgdGhlIGNhc2Ugd2hlbiB0aGlzIGlzIGNhbGxlZCBmcm9tIGF0b21pYyBjb250ZXh0cywK PiArICogYWx0aG91Z2ggdGhlIGNhc2UgaXMgdW5saWtlbHkuCj4gKyAqLwo+ICsjZGVmaW5lIHBv d2VyX3dlbGxfbG9jayhwb3dlcl93ZWxsLCBmbGFncykgZG8gewkJCVwKPiArCWlmIChsaWtlbHko cG93ZXJfd2VsbC0+c3VwcG9ydHNfYXRvbWljX2N0eCkpCQlcCj4gKwkJc3Bpbl9sb2NrX2lycXNh dmUoJnBvd2VyX3dlbGwtPmxvY2ssIGZsYWdzKTsJXAo+ICsJfSB3aGlsZSAoMCkKPiArCj4gKyNk ZWZpbmUgcG93ZXJfd2VsbF91bmxvY2socG93ZXJfd2VsbCwgZmxhZ3MpIGRvIHsJCQlcCj4gKwlp ZiAobGlrZWx5KHBvd2VyX3dlbGwtPnN1cHBvcnRzX2F0b21pY19jdHgpKQkJCVwKPiArCQlzcGlu X3VubG9ja19pcnFyZXN0b3JlKCZwb3dlcl93ZWxsLT5sb2NrLCBmbGFncyk7CVwKPiArCX0gd2hp bGUgKDApCj4gKwo+ICBjb25zdCBjaGFyICoKPiAgaW50ZWxfZGlzcGxheV9wb3dlcl9kb21haW5f c3RyKGVudW0gaW50ZWxfZGlzcGxheV9wb3dlcl9kb21haW4gZG9tYWluKQo+ICB7Cj4gQEAgLTEy Niw2ICsxMzksOCBAQCBpbnRlbF9kaXNwbGF5X3Bvd2VyX2RvbWFpbl9zdHIoZW51bSBpbnRlbF9k aXNwbGF5X3Bvd2VyX2RvbWFpbiBkb21haW4pCj4gIAkJcmV0dXJuICJBVVhfRCI7Cj4gIAljYXNl IFBPV0VSX0RPTUFJTl9HTUJVUzoKPiAgCQlyZXR1cm4gIkdNQlVTIjsKPiArCWNhc2UgUE9XRVJf RE9NQUlOX1ZCTEFOSzoKPiArCQlyZXR1cm4gIlZCTEFOSyI7Cj4gIAljYXNlIFBPV0VSX0RPTUFJ Tl9JTklUOgo+ICAJCXJldHVybiAiSU5JVCI7Cj4gIAljYXNlIFBPV0VSX0RPTUFJTl9NT0RFU0VU Ogo+IEBAIC0xNDEsNiArMTU2LDkgQEAgaW50ZWxfZGlzcGxheV9wb3dlcl9kb21haW5fc3RyKGVu dW0gaW50ZWxfZGlzcGxheV9wb3dlcl9kb21haW4gZG9tYWluKQo+ICBzdGF0aWMgdm9pZCBpbnRl bF9wb3dlcl93ZWxsX2VuYWJsZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4g IAkJCQkgICAgc3RydWN0IGk5MTVfcG93ZXJfd2VsbCAqcG93ZXJfd2VsbCkKPiAgewo+ICsJaWYg KHBvd2VyX3dlbGwtPnN1cHBvcnRzX2F0b21pY19jdHgpCj4gKwkJYXNzZXJ0X3NwaW5fbG9ja2Vk KCZwb3dlcl93ZWxsLT5sb2NrKTsKPiArCj4gIAlEUk1fREVCVUdfS01TKCJlbmFibGluZyAlc1xu IiwgcG93ZXJfd2VsbC0+bmFtZSk7Cj4gIAlwb3dlcl93ZWxsLT5vcHMtPmVuYWJsZShkZXZfcHJp diwgcG93ZXJfd2VsbCk7Cj4gIAlwb3dlcl93ZWxsLT5od19lbmFibGVkID0gdHJ1ZTsKPiBAQCAt MTQ5LDI2ICsxNjcsNDMgQEAgc3RhdGljIHZvaWQgaW50ZWxfcG93ZXJfd2VsbF9lbmFibGUoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICBzdGF0aWMgdm9pZCBpbnRlbF9wb3dl cl93ZWxsX2Rpc2FibGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICAJCQkJ ICAgICBzdHJ1Y3QgaTkxNV9wb3dlcl93ZWxsICpwb3dlcl93ZWxsKQo+ICB7Cj4gKwlpZiAocG93 ZXJfd2VsbC0+c3VwcG9ydHNfYXRvbWljX2N0eCkKPiArCQlhc3NlcnRfc3Bpbl9sb2NrZWQoJnBv d2VyX3dlbGwtPmxvY2spOwo+ICsKPiAgCURSTV9ERUJVR19LTVMoImRpc2FibGluZyAlc1xuIiwg cG93ZXJfd2VsbC0+bmFtZSk7Cj4gIAlwb3dlcl93ZWxsLT5od19lbmFibGVkID0gZmFsc2U7Cj4g IAlwb3dlcl93ZWxsLT5vcHMtPmRpc2FibGUoZGV2X3ByaXYsIHBvd2VyX3dlbGwpOwo+ICB9Cj4g IAo+IC1zdGF0aWMgdm9pZCBpbnRlbF9wb3dlcl93ZWxsX2dldChzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYsCj4gK3N0YXRpYyB2b2lkIF9faW50ZWxfcG93ZXJfd2VsbF9nZXQoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICAJCQkJIHN0cnVjdCBpOTE1X3Bvd2Vy X3dlbGwgKnBvd2VyX3dlbGwpCj4gIHsKPiAgCWlmICghcG93ZXJfd2VsbC0+Y291bnQrKykKPiAg CQlpbnRlbF9wb3dlcl93ZWxsX2VuYWJsZShkZXZfcHJpdiwgcG93ZXJfd2VsbCk7Cj4gIH0KPiAg Cj4gK3N0YXRpYyB2b2lkIGludGVsX3Bvd2VyX3dlbGxfZ2V0KHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiwKPiArCQkJCSBzdHJ1Y3QgaTkxNV9wb3dlcl93ZWxsICpwb3dlcl93ZWxs KQo+ICt7Cj4gKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKPiArCj4gKwlwb3dlcl93ZWxsX2xv Y2socG93ZXJfd2VsbCwgZmxhZ3MpOwo+ICsJX19pbnRlbF9wb3dlcl93ZWxsX2dldChkZXZfcHJp diwgcG93ZXJfd2VsbCk7Cj4gKwlwb3dlcl93ZWxsX3VubG9jayhwb3dlcl93ZWxsLCBmbGFncyk7 Cj4gK30KPiArCj4gIHN0YXRpYyB2b2lkIGludGVsX3Bvd2VyX3dlbGxfcHV0KHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAgCQkJCSBzdHJ1Y3QgaTkxNV9wb3dlcl93ZWxsICpw b3dlcl93ZWxsKQo+ICB7Cj4gKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKPiArCj4gKwlwb3dl cl93ZWxsX2xvY2socG93ZXJfd2VsbCwgZmxhZ3MpOwo+ICAJV0FSTighcG93ZXJfd2VsbC0+Y291 bnQsICJVc2UgY291bnQgb24gcG93ZXIgd2VsbCAlcyBpcyBhbHJlYWR5IHplcm8iLAo+ICAJICAg ICBwb3dlcl93ZWxsLT5uYW1lKTsKPiAgCj4gIAlpZiAoIS0tcG93ZXJfd2VsbC0+Y291bnQpCj4g IAkJaW50ZWxfcG93ZXJfd2VsbF9kaXNhYmxlKGRldl9wcml2LCBwb3dlcl93ZWxsKTsKPiArCXBv d2VyX3dlbGxfdW5sb2NrKHBvd2VyX3dlbGwsIGZsYWdzKTsKPiAgfQo+ICAKPiAgLyoqCj4gQEAg LTczNiw2ICs3NzEsNyBAQCBzdGF0aWMgdm9pZCBnZW45X2RjX29mZl9wb3dlcl93ZWxsX2Rpc2Fi bGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICAJCXNrbF9lbmFibGVfZGM2 KGRldl9wcml2KTsKPiAgCWVsc2UgaWYgKGRldl9wcml2LT5jc3IuYWxsb3dlZF9kY19tYXNrICYg RENfU1RBVEVfRU5fVVBUT19EQzUpCj4gIAkJZ2VuOV9lbmFibGVfZGM1KGRldl9wcml2KTsKPiAr CXBvd2VyX3dlbGwtPmRjX29mZl9kaXNhYmxlZCA9IHRydWU7Cj4gIH0KPiAgCj4gIHN0YXRpYyB2 b2lkIGk5eHhfcG93ZXJfd2VsbF9zeW5jX2h3X25vb3Aoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2LAo+IEBAIC0xNDUzLDYgKzE0ODksNTggQEAgc3RhdGljIHZvaWQgY2h2X3BpcGVf cG93ZXJfd2VsbF9kaXNhYmxlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAg CWNodl9zZXRfcGlwZV9wb3dlcl93ZWxsKGRldl9wcml2LCBwb3dlcl93ZWxsLCBmYWxzZSk7Cj4g IH0KPiAgCj4gK3ZvaWQgaW50ZWxfZGlzcGxheV9wb3dlcl92YmxhbmtfZ2V0KHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiArCQkJCSAgICBib29sICpuZWVkc19yZXN0b3JlKQo+ ICt7Cj4gKwlzdHJ1Y3QgaTkxNV9wb3dlcl9kb21haW5zICpwb3dlcl9kb21haW5zICA9ICZkZXZf cHJpdi0+cG93ZXJfZG9tYWluczsKPiArCXN0cnVjdCBpOTE1X3Bvd2VyX3dlbGwgKnBvd2VyX3dl bGw7Cj4gKwllbnVtIGludGVsX2Rpc3BsYXlfcG93ZXJfZG9tYWluIGRvbWFpbiA9IFBPV0VSX0RP TUFJTl9WQkxBTks7Cj4gKwo+ICsJKm5lZWRzX3Jlc3RvcmUgPSBmYWxzZTsKPiArCj4gKwlpZiAo IUhBU19DU1IoZGV2X3ByaXYpKQo+ICsJCXJldHVybjsKPiArCj4gKwlpZiAoIShIQVNfUFNSKGRl dl9wcml2KSAmJiBkZXZfcHJpdi0+cHNyLnNpbmtfc3VwcG9ydCkpCj4gKwkJcmV0dXJuOwo+ICsK PiArCWludGVsX3J1bnRpbWVfcG1fZ2V0X25vcmVzdW1lKGRldl9wcml2KTsKPiArCj4gKwlmb3Jf ZWFjaF9wb3dlcl9kb21haW5fd2VsbChkZXZfcHJpdiwgcG93ZXJfd2VsbCwgQklUX1VMTChkb21h aW4pKSB7Cj4gKwkJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7Cj4gKwo+ICsJCXBvd2VyX3dlbGxf bG9jayhwb3dlcl93ZWxsLCBmbGFncyk7Cj4gKwkJX19pbnRlbF9wb3dlcl93ZWxsX2dldChkZXZf cHJpdiwgcG93ZXJfd2VsbCk7Cj4gKwkJKm5lZWRzX3Jlc3RvcmUgPSBwb3dlcl93ZWxsLT5kY19v ZmZfZGlzYWJsZWQ7Cj4gKwkJcG93ZXJfd2VsbC0+ZGNfb2ZmX2Rpc2FibGVkID0gZmFsc2U7Cgpp dCBzZWVtIGFsc28gdGhhdCBieSBhbHdheXMgcmVzdG9yaW5nIHdlIGRvbid0IG5lZWQgdG8gYWRk IHRoaXMgc3BlY2lmaWMgZGNfb2ZmX2Rpc2FibGVkCnZhcmlhYmxlIGluc2lkZSB0aGUgZ2VuZXJp YyBwdyBzdHJ1Y3QuCgo+ICsJCXBvd2VyX3dlbGxfdW5sb2NrKHBvd2VyX3dlbGwsIGZsYWdzKTsK PiArCX0KPiArCj4gKwlhdG9taWNfaW5jKCZwb3dlcl9kb21haW5zLT5kb21haW5fdXNlX2NvdW50 W2RvbWFpbl0pOwo+ICt9Cj4gKwo+ICt2b2lkIGludGVsX2Rpc3BsYXlfcG93ZXJfdmJsYW5rX3B1 dChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gK3sKPiArCXN0cnVjdCBpOTE1 X3Bvd2VyX2RvbWFpbnMgKnBvd2VyX2RvbWFpbnMgPSAmZGV2X3ByaXYtPnBvd2VyX2RvbWFpbnM7 Cj4gKwlzdHJ1Y3QgaTkxNV9wb3dlcl93ZWxsICpwb3dlcl93ZWxsOwo+ICsJZW51bSBpbnRlbF9k aXNwbGF5X3Bvd2VyX2RvbWFpbiBkb21haW4gPSBQT1dFUl9ET01BSU5fVkJMQU5LOwo+ICsKPiAr CWlmICghSEFTX0NTUihkZXZfcHJpdikpCj4gKwkJcmV0dXJuOwo+ICsKPiArCWlmICghKEhBU19Q U1IoZGV2X3ByaXYpICYmIGRldl9wcml2LT5wc3Iuc2lua19zdXBwb3J0KSkKPiArCQlyZXR1cm47 CgpDYW4gd2UgcmVtb3ZlIHRoZXNlIGNoZWNrcyBhbmQgZG8gdGhpcyBmb3IgYW55IHZibGFuayBk b21haW4/CkkgYmVsaWV2ZSB0aGlzIGtpbmQgb2YgYXNzb2NpYXRpb24gc2hvdWxkIGJlIG9ubHkg b24gdGhlIGRvbWFpbjwtPndlbGwgYXNzb2NpYXRpb24KYW5kIG5vdCBjaGVjayBmb3IgZmVhdHVy ZSBoZXJlLgoKPiArCj4gKwlXQVJOKGF0b21pY19kZWNfcmV0dXJuKCZwb3dlcl9kb21haW5zLT5k b21haW5fdXNlX2NvdW50W2RvbWFpbl0pIDwgMCwKPiArCSAgICAgIlVzZSBjb3VudCBvbiBkb21h aW4gJXMgd2FzIGFscmVhZHkgemVyb1xuIiwKPiArCSAgICAgaW50ZWxfZGlzcGxheV9wb3dlcl9k b21haW5fc3RyKGRvbWFpbikpOwoKaXMgdGhlIGF0b21pYyBzYWZlIGVub3VnaCBoZXJlPyBvciB3 ZSBuZWVkIGEgc3BpbmxvY2s/Cgo+ICsKPiArCWZvcl9lYWNoX3Bvd2VyX2RvbWFpbl93ZWxsX3Jl dihkZXZfcHJpdiwgcG93ZXJfd2VsbCwgQklUX1VMTChkb21haW4pKQo+ICsJCWludGVsX3Bvd2Vy X3dlbGxfcHV0KGRldl9wcml2LCBwb3dlcl93ZWxsKTsKPiArCj4gKwlpbnRlbF9ydW50aW1lX3Bt X3B1dChkZXZfcHJpdik7Cj4gK30KPiArCj4gIHN0YXRpYyB2b2lkCj4gIF9faW50ZWxfZGlzcGxh eV9wb3dlcl9nZXRfZG9tYWluKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAg CQkJCSBlbnVtIGludGVsX2Rpc3BsYXlfcG93ZXJfZG9tYWluIGRvbWFpbikKPiBAQCAtMTQ2Myw3 ICsxNTUxLDcgQEAgX19pbnRlbF9kaXNwbGF5X3Bvd2VyX2dldF9kb21haW4oc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICAJZm9yX2VhY2hfcG93ZXJfZG9tYWluX3dlbGwoZGV2 X3ByaXYsIHBvd2VyX3dlbGwsIEJJVF9VTEwoZG9tYWluKSkKPiAgCQlpbnRlbF9wb3dlcl93ZWxs X2dldChkZXZfcHJpdiwgcG93ZXJfd2VsbCk7Cj4gIAo+IC0JcG93ZXJfZG9tYWlucy0+ZG9tYWlu X3VzZV9jb3VudFtkb21haW5dKys7Cj4gKwlhdG9taWNfaW5jKCZwb3dlcl9kb21haW5zLT5kb21h aW5fdXNlX2NvdW50W2RvbWFpbl0pOwo+ICB9Cj4gIAo+ICAvKioKPiBAQCAtMTQ5Miw2ICsxNTgw LDM4IEBAIHZvaWQgaW50ZWxfZGlzcGxheV9wb3dlcl9nZXQoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2LAo+ICAJbXV0ZXhfdW5sb2NrKCZwb3dlcl9kb21haW5zLT5sb2NrKTsKPiAg fQo+ICAKPiArc3RhdGljIGJvb2wgZGNfb2ZmX2dldF9pZl9lbmFibGVkKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiwKPiArCQkJCSAgZW51bSBpbnRlbF9kaXNwbGF5X3Bvd2VyX2Rv bWFpbiBkb21haW4pCj4gK3sKPiArCXN0cnVjdCBpOTE1X3Bvd2VyX3dlbGwgKnBvd2VyX3dlbGw7 Cj4gKwlib29sIGlzX2VuYWJsZWQ7Cj4gKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKPiArCj4g Kwlwb3dlcl93ZWxsID0gbG9va3VwX3Bvd2VyX3dlbGwoZGV2X3ByaXYsIFNLTF9ESVNQX1BXX0RD X09GRik7Cj4gKwlpZiAoIXBvd2VyX3dlbGwgfHwgIShwb3dlcl93ZWxsLT5kb21haW5zICYgZG9t YWluKSkKPiArCQlyZXR1cm4gdHJ1ZTsKPiArCj4gKwlwb3dlcl93ZWxsX2xvY2socG93ZXJfd2Vs bCwgZmxhZ3MpOwo+ICsJaXNfZW5hYmxlZCA9IHBvd2VyX3dlbGwtPmh3X2VuYWJsZWQ7Cj4gKwlp ZiAoaXNfZW5hYmxlZCkKPiArCQlfX2ludGVsX3Bvd2VyX3dlbGxfZ2V0KGRldl9wcml2LCBwb3dl cl93ZWxsKTsKPiArCXBvd2VyX3dlbGxfdW5sb2NrKHBvd2VyX3dlbGwsIGZsYWdzKTsKPiArCj4g KwlyZXR1cm4gaXNfZW5hYmxlZDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZGNfb2ZmX3B1dChz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gKwkJICAgICAgIGVudW0gaW50ZWxf ZGlzcGxheV9wb3dlcl9kb21haW4gZG9tYWluKQo+ICt7Cj4gKwlzdHJ1Y3QgaTkxNV9wb3dlcl93 ZWxsICpwb3dlcl93ZWxsOwo+ICsKPiArCXBvd2VyX3dlbGwgPSBsb29rdXBfcG93ZXJfd2VsbChk ZXZfcHJpdiwgU0tMX0RJU1BfUFdfRENfT0ZGKTsKPiArCWlmICghcG93ZXJfd2VsbCB8fCAhKHBv d2VyX3dlbGwtPmRvbWFpbnMgJiBkb21haW4pKQo+ICsJCXJldHVybjsKPiArCj4gKwlpbnRlbF9w b3dlcl93ZWxsX3B1dChkZXZfcHJpdiwgcG93ZXJfd2VsbCk7Cj4gK30KPiArCj4gIC8qKgo+ICAg KiBpbnRlbF9kaXNwbGF5X3Bvd2VyX2dldF9pZl9lbmFibGVkIC0gZ3JhYiBhIHJlZmVyZW5jZSBm b3IgYW4gZW5hYmxlZCBkaXNwbGF5IHBvd2VyIGRvbWFpbgo+ICAgKiBAZGV2X3ByaXY6IGk5MTUg ZGV2aWNlIGluc3RhbmNlCj4gQEAgLTE1MDgsMjAgKzE2MjgsMjQgQEAgYm9vbCBpbnRlbF9kaXNw bGF5X3Bvd2VyX2dldF9pZl9lbmFibGVkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diwKPiAgCQkJCQllbnVtIGludGVsX2Rpc3BsYXlfcG93ZXJfZG9tYWluIGRvbWFpbikKPiAgewo+ ICAJc3RydWN0IGk5MTVfcG93ZXJfZG9tYWlucyAqcG93ZXJfZG9tYWlucyA9ICZkZXZfcHJpdi0+ cG93ZXJfZG9tYWluczsKPiAtCWJvb2wgaXNfZW5hYmxlZDsKPiArCWJvb2wgaXNfZW5hYmxlZCA9 IGZhbHNlOwo+ICAKPiAgCWlmICghaW50ZWxfcnVudGltZV9wbV9nZXRfaWZfaW5fdXNlKGRldl9w cml2KSkKPiAgCQlyZXR1cm4gZmFsc2U7Cj4gIAo+ICAJbXV0ZXhfbG9jaygmcG93ZXJfZG9tYWlu cy0+bG9jayk7Cj4gIAo+ICsJaWYgKCFkY19vZmZfZ2V0X2lmX2VuYWJsZWQoZGV2X3ByaXYsIGRv bWFpbikpCj4gKwkJZ290byBvdXQ7Cj4gKwo+ICAJaWYgKF9faW50ZWxfZGlzcGxheV9wb3dlcl9p c19lbmFibGVkKGRldl9wcml2LCBkb21haW4pKSB7Cj4gIAkJX19pbnRlbF9kaXNwbGF5X3Bvd2Vy X2dldF9kb21haW4oZGV2X3ByaXYsIGRvbWFpbik7Cj4gIAkJaXNfZW5hYmxlZCA9IHRydWU7Cj4g LQl9IGVsc2Ugewo+IC0JCWlzX2VuYWJsZWQgPSBmYWxzZTsKPiAgCX0KPiAgCj4gKwlkY19vZmZf cHV0KGRldl9wcml2LCBkb21haW4pOwo+ICsKPiArb3V0Ogo+ICAJbXV0ZXhfdW5sb2NrKCZwb3dl cl9kb21haW5zLT5sb2NrKTsKPiAgCj4gIAlpZiAoIWlzX2VuYWJsZWQpCj4gQEAgLTE1NDksMTAg KzE2NzMsOSBAQCB2b2lkIGludGVsX2Rpc3BsYXlfcG93ZXJfcHV0KHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiwKPiAgCj4gIAltdXRleF9sb2NrKCZwb3dlcl9kb21haW5zLT5sb2Nr KTsKPiAgCj4gLQlXQVJOKCFwb3dlcl9kb21haW5zLT5kb21haW5fdXNlX2NvdW50W2RvbWFpbl0s Cj4gLQkgICAgICJVc2UgY291bnQgb24gZG9tYWluICVzIGlzIGFscmVhZHkgemVyb1xuIiwKPiAr CVdBUk4oYXRvbWljX2RlY19yZXR1cm4oJnBvd2VyX2RvbWFpbnMtPmRvbWFpbl91c2VfY291bnRb ZG9tYWluXSkgPCAwLAo+ICsJICAgICAiVXNlIGNvdW50IG9uIGRvbWFpbiAlcyB3YXMgYWxyZWFk eSB6ZXJvXG4iLAo+ICAJICAgICBpbnRlbF9kaXNwbGF5X3Bvd2VyX2RvbWFpbl9zdHIoZG9tYWlu KSk7Cj4gLQlwb3dlcl9kb21haW5zLT5kb21haW5fdXNlX2NvdW50W2RvbWFpbl0tLTsKPiAgCj4g IAlmb3JfZWFjaF9wb3dlcl9kb21haW5fd2VsbF9yZXYoZGV2X3ByaXYsIHBvd2VyX3dlbGwsIEJJ VF9VTEwoZG9tYWluKSkKPiAgCQlpbnRlbF9wb3dlcl93ZWxsX3B1dChkZXZfcHJpdiwgcG93ZXJf d2VsbCk7Cj4gQEAgLTE3MjAsNiArMTg0Myw3IEBAIHZvaWQgaW50ZWxfZGlzcGxheV9wb3dlcl9w dXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICAJQklUX1VMTChQT1dFUl9E T01BSU5fR1RfSVJRKSB8CQkJXAo+ICAJQklUX1VMTChQT1dFUl9ET01BSU5fTU9ERVNFVCkgfAkJ CVwKPiAgCUJJVF9VTEwoUE9XRVJfRE9NQUlOX0FVWF9BKSB8CQkJXAo+ICsJQklUX1VMTChQT1dF Ul9ET01BSU5fVkJMQU5LKSB8CQkJXAo+ICAJQklUX1VMTChQT1dFUl9ET01BSU5fSU5JVCkpCj4g IAo+ICAjZGVmaW5lIEJYVF9ESVNQTEFZX1BPV0VSV0VMTF8yX1BPV0VSX0RPTUFJTlMgKAkJXAo+ IEBAIC0xNzQzLDYgKzE4NjcsNyBAQCB2b2lkIGludGVsX2Rpc3BsYXlfcG93ZXJfcHV0KHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAgCUJJVF9VTEwoUE9XRVJfRE9NQUlOX01P REVTRVQpIHwJCQlcCj4gIAlCSVRfVUxMKFBPV0VSX0RPTUFJTl9BVVhfQSkgfAkJCVwKPiAgCUJJ VF9VTEwoUE9XRVJfRE9NQUlOX0dNQlVTKSB8CQkJXAo+ICsJQklUX1VMTChQT1dFUl9ET01BSU5f VkJMQU5LKSB8CQkJXAo+ICAJQklUX1VMTChQT1dFUl9ET01BSU5fSU5JVCkpCj4gICNkZWZpbmUg QlhUX0RQSU9fQ01OX0FfUE9XRVJfRE9NQUlOUyAoCQkJXAo+ICAJQklUX1VMTChQT1dFUl9ET01B SU5fUE9SVF9ERElfQV9MQU5FUykgfAkJXAo+IEBAIC0xODAzLDYgKzE5MjgsNyBAQCB2b2lkIGlu dGVsX2Rpc3BsYXlfcG93ZXJfcHV0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwK PiAgCUJJVF9VTEwoUE9XRVJfRE9NQUlOX01PREVTRVQpIHwJCQlcCj4gIAlCSVRfVUxMKFBPV0VS X0RPTUFJTl9BVVhfQSkgfAkJCVwKPiAgCUJJVF9VTEwoUE9XRVJfRE9NQUlOX0dNQlVTKSB8CQkJ XAo+ICsJQklUX1VMTChQT1dFUl9ET01BSU5fVkJMQU5LKSB8CQkJXAo+ICAJQklUX1VMTChQT1dF Ul9ET01BSU5fSU5JVCkpCj4gIAo+ICAjZGVmaW5lIENOTF9ESVNQTEFZX1BPV0VSV0VMTF8yX1BP V0VSX0RPTUFJTlMgKAkJXAo+IEBAIC0xODUwLDYgKzE5NzYsNyBAQCB2b2lkIGludGVsX2Rpc3Bs YXlfcG93ZXJfcHV0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAgCUNOTF9E SVNQTEFZX1BPV0VSV0VMTF8yX1BPV0VSX0RPTUFJTlMgfAkJXAo+ICAJQklUX1VMTChQT1dFUl9E T01BSU5fTU9ERVNFVCkgfAkJCVwKPiAgCUJJVF9VTEwoUE9XRVJfRE9NQUlOX0FVWF9BKSB8CQkJ XAo+ICsJQklUX1VMTChQT1dFUl9ET01BSU5fVkJMQU5LKSB8CQkJXAo+ICAJQklUX1VMTChQT1dF Ul9ET01BSU5fSU5JVCkpCj4gIAo+ICBzdGF0aWMgY29uc3Qgc3RydWN0IGk5MTVfcG93ZXJfd2Vs bF9vcHMgaTl4eF9hbHdheXNfb25fcG93ZXJfd2VsbF9vcHMgPSB7Cj4gQEAgLTIwODMsOSArMjIx MCwxMiBAQCBib29sIGludGVsX2Rpc3BsYXlfcG93ZXJfd2VsbF9pc19lbmFibGVkKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAgewo+ICAJc3RydWN0IGk5MTVfcG93ZXJfd2Vs bCAqcG93ZXJfd2VsbDsKPiAgCWJvb2wgcmV0Owo+ICsJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7 Cj4gIAo+ICAJcG93ZXJfd2VsbCA9IGxvb2t1cF9wb3dlcl93ZWxsKGRldl9wcml2LCBwb3dlcl93 ZWxsX2lkKTsKPiArCXBvd2VyX3dlbGxfbG9jayhwb3dlcl93ZWxsLCBmbGFncyk7Cj4gIAlyZXQg PSBwb3dlcl93ZWxsLT5vcHMtPmlzX2VuYWJsZWQoZGV2X3ByaXYsIHBvd2VyX3dlbGwpOwo+ICsJ cG93ZXJfd2VsbF91bmxvY2socG93ZXJfd2VsbCwgZmxhZ3MpOwo+ICAKPiAgCXJldHVybiByZXQ7 Cj4gIH0KPiBAQCAtMjEyMCw2ICsyMjUwLDggQEAgc3RhdGljIHN0cnVjdCBpOTE1X3Bvd2VyX3dl bGwgc2tsX3Bvd2VyX3dlbGxzW10gPSB7Cj4gIAkJLmRvbWFpbnMgPSBTS0xfRElTUExBWV9EQ19P RkZfUE9XRVJfRE9NQUlOUywKPiAgCQkub3BzID0gJmdlbjlfZGNfb2ZmX3Bvd2VyX3dlbGxfb3Bz LAo+ICAJCS5pZCA9IFNLTF9ESVNQX1BXX0RDX09GRiwKPiArCQkuc3VwcG9ydHNfYXRvbWljX2N0 eCA9IHRydWUsCj4gKwkJLmRjX29mZl9kaXNhYmxlZCA9IGZhbHNlLAo+ICAJfSwKPiAgCXsKPiAg CQkubmFtZSA9ICJwb3dlciB3ZWxsIDIiLAo+IEBAIC0yMTgwLDYgKzIzMTIsOCBAQCBzdGF0aWMg c3RydWN0IGk5MTVfcG93ZXJfd2VsbCBieHRfcG93ZXJfd2VsbHNbXSA9IHsKPiAgCQkuZG9tYWlu cyA9IEJYVF9ESVNQTEFZX0RDX09GRl9QT1dFUl9ET01BSU5TLAo+ICAJCS5vcHMgPSAmZ2VuOV9k Y19vZmZfcG93ZXJfd2VsbF9vcHMsCj4gIAkJLmlkID0gU0tMX0RJU1BfUFdfRENfT0ZGLAo+ICsJ CS5zdXBwb3J0c19hdG9taWNfY3R4ID0gdHJ1ZSwKPiArCQkuZGNfb2ZmX2Rpc2FibGVkID0gZmFs c2UsCj4gIAl9LAo+ICAJewo+ICAJCS5uYW1lID0gInBvd2VyIHdlbGwgMiIsCj4gQEAgLTIyMzUs NiArMjM2OSw4IEBAIHN0YXRpYyBzdHJ1Y3QgaTkxNV9wb3dlcl93ZWxsIGdsa19wb3dlcl93ZWxs c1tdID0gewo+ICAJCS5kb21haW5zID0gR0xLX0RJU1BMQVlfRENfT0ZGX1BPV0VSX0RPTUFJTlMs Cj4gIAkJLm9wcyA9ICZnZW45X2RjX29mZl9wb3dlcl93ZWxsX29wcywKPiAgCQkuaWQgPSBTS0xf RElTUF9QV19EQ19PRkYsCj4gKwkJLnN1cHBvcnRzX2F0b21pY19jdHggPSB0cnVlLAo+ICsJCS5k Y19vZmZfZGlzYWJsZWQgPSBmYWxzZSwKPiAgCX0sCj4gIAl7Cj4gIAkJLm5hbWUgPSAicG93ZXIg d2VsbCAyIiwKPiBAQCAtMjM1OSw2ICsyNDk1LDggQEAgc3RhdGljIHN0cnVjdCBpOTE1X3Bvd2Vy X3dlbGwgY25sX3Bvd2VyX3dlbGxzW10gPSB7Cj4gIAkJLmRvbWFpbnMgPSBDTkxfRElTUExBWV9E Q19PRkZfUE9XRVJfRE9NQUlOUywKPiAgCQkub3BzID0gJmdlbjlfZGNfb2ZmX3Bvd2VyX3dlbGxf b3BzLAo+ICAJCS5pZCA9IFNLTF9ESVNQX1BXX0RDX09GRiwKPiArCQkuc3VwcG9ydHNfYXRvbWlj X2N0eCA9IHRydWUsCj4gKwkJLmRjX29mZl9kaXNhYmxlZCA9IGZhbHNlLAo+ICAJfSwKPiAgCXsK PiAgCQkubmFtZSA9ICJwb3dlciB3ZWxsIDIiLAo+IEBAIC0yNDg3LDYgKzI2MjUsNyBAQCBzdGF0 aWMgdm9pZCBhc3NlcnRfcG93ZXJfd2VsbF9pZHNfdW5pcXVlKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdikKPiAgaW50IGludGVsX3Bvd2VyX2RvbWFpbnNfaW5pdChzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gIHsKPiAgCXN0cnVjdCBpOTE1X3Bvd2VyX2RvbWFp bnMgKnBvd2VyX2RvbWFpbnMgPSAmZGV2X3ByaXYtPnBvd2VyX2RvbWFpbnM7Cj4gKwlzdHJ1Y3Qg aTkxNV9wb3dlcl93ZWxsICpwb3dlcl93ZWxsOwo+ICAKPiAgCWk5MTVfbW9kcGFyYW1zLmRpc2Fi bGVfcG93ZXJfd2VsbCA9Cj4gIAkJc2FuaXRpemVfZGlzYWJsZV9wb3dlcl93ZWxsX29wdGlvbihk ZXZfcHJpdiwKPiBAQCAtMjUyNCw2ICsyNjYzLDEwIEBAIGludCBpbnRlbF9wb3dlcl9kb21haW5z X2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICAJCXNldF9wb3dlcl93 ZWxscyhwb3dlcl9kb21haW5zLCBpOXh4X2Fsd2F5c19vbl9wb3dlcl93ZWxsKTsKPiAgCX0KPiAg Cj4gKwlmb3JfZWFjaF9wb3dlcl93ZWxsKGRldl9wcml2LCBwb3dlcl93ZWxsKQo+ICsJCWlmIChw b3dlcl93ZWxsLT5zdXBwb3J0c19hdG9taWNfY3R4KQo+ICsJCQlzcGluX2xvY2tfaW5pdCgmcG93 ZXJfd2VsbC0+bG9jayk7Cj4gKwo+ICAJYXNzZXJ0X3Bvd2VyX3dlbGxfaWRzX3VuaXF1ZShkZXZf cHJpdik7Cj4gIAo+ICAJcmV0dXJuIDA7Cj4gQEAgLTI1NzEsOSArMjcxNCwxMyBAQCBzdGF0aWMg dm9pZCBpbnRlbF9wb3dlcl9kb21haW5zX3N5bmNfaHcoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2KQo+ICAKPiAgCW11dGV4X2xvY2soJnBvd2VyX2RvbWFpbnMtPmxvY2spOwo+ICAJ Zm9yX2VhY2hfcG93ZXJfd2VsbChkZXZfcHJpdiwgcG93ZXJfd2VsbCkgewo+ICsJCXVuc2lnbmVk IGxvbmcgZmxhZ3MgPSAwOwo+ICsKPiArCQlwb3dlcl93ZWxsX2xvY2socG93ZXJfd2VsbCwgZmxh Z3MpOwo+ICAJCXBvd2VyX3dlbGwtPm9wcy0+c3luY19odyhkZXZfcHJpdiwgcG93ZXJfd2VsbCk7 Cj4gIAkJcG93ZXJfd2VsbC0+aHdfZW5hYmxlZCA9IHBvd2VyX3dlbGwtPm9wcy0+aXNfZW5hYmxl ZChkZXZfcHJpdiwKPiAgCQkJCQkJCQkgICAgIHBvd2VyX3dlbGwpOwo+ICsJCXBvd2VyX3dlbGxf dW5sb2NrKHBvd2VyX3dlbGwsIGZsYWdzKTsKPiAgCX0KPiAgCW11dGV4X3VubG9jaygmcG93ZXJf ZG9tYWlucy0+bG9jayk7Cj4gIH0KPiBAQCAtMzA0NiwyMSArMzE5MywyMyBAQCB2b2lkIGludGVs X3Bvd2VyX2RvbWFpbnNfc3VzcGVuZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYp Cj4gIAkJYnh0X2Rpc3BsYXlfY29yZV91bmluaXQoZGV2X3ByaXYpOwo+ICB9Cj4gIAo+IC1zdGF0 aWMgdm9pZCBpbnRlbF9wb3dlcl9kb21haW5zX2R1bXBfaW5mbyhzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYpCj4gK3N0YXRpYyB2b2lkIGludGVsX3Bvd2VyX2RvbWFpbnNfZHVtcF9p bmZvKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiArCQkJCQkgIGNvbnN0IGlu dCAqcG93ZXJfd2VsbF91c2UpCj4gIHsKPiAgCXN0cnVjdCBpOTE1X3Bvd2VyX2RvbWFpbnMgKnBv d2VyX2RvbWFpbnMgPSAmZGV2X3ByaXYtPnBvd2VyX2RvbWFpbnM7Cj4gIAlzdHJ1Y3QgaTkxNV9w b3dlcl93ZWxsICpwb3dlcl93ZWxsOwo+ICsJaW50IGkgPSAwOwo+ICAKPiAgCWZvcl9lYWNoX3Bv d2VyX3dlbGwoZGV2X3ByaXYsIHBvd2VyX3dlbGwpIHsKPiAgCQllbnVtIGludGVsX2Rpc3BsYXlf cG93ZXJfZG9tYWluIGRvbWFpbjsKPiAgCj4gIAkJRFJNX0RFQlVHX0RSSVZFUigiJS0yNXMgJWRc biIsCj4gLQkJCQkgcG93ZXJfd2VsbC0+bmFtZSwgcG93ZXJfd2VsbC0+Y291bnQpOwo+ICsJCQkJ IHBvd2VyX3dlbGwtPm5hbWUsIHBvd2VyX3dlbGxfdXNlW2krK10pOwo+ICAKPiAgCQlmb3JfZWFj aF9wb3dlcl9kb21haW4oZG9tYWluLCBwb3dlcl93ZWxsLT5kb21haW5zKQo+ICAJCQlEUk1fREVC VUdfRFJJVkVSKCIgICUtMjNzICVkXG4iLAo+ICAJCQkJCSBpbnRlbF9kaXNwbGF5X3Bvd2VyX2Rv bWFpbl9zdHIoZG9tYWluKSwKPiAtCQkJCQkgcG93ZXJfZG9tYWlucy0+ZG9tYWluX3VzZV9jb3Vu dFtkb21haW5dKTsKPiArCQkJCQkgYXRvbWljX3JlYWQoJnBvd2VyX2RvbWFpbnMtPmRvbWFpbl91 c2VfY291bnRbZG9tYWluXSkpOwo+ICAJfQo+ICB9Cj4gIAo+IEBAIC0zMDc5LDYgKzMyMjgsNyBA QCB2b2lkIGludGVsX3Bvd2VyX2RvbWFpbnNfdmVyaWZ5X3N0YXRlKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdikKPiAgCXN0cnVjdCBpOTE1X3Bvd2VyX2RvbWFpbnMgKnBvd2VyX2Rv bWFpbnMgPSAmZGV2X3ByaXYtPnBvd2VyX2RvbWFpbnM7Cj4gIAlzdHJ1Y3QgaTkxNV9wb3dlcl93 ZWxsICpwb3dlcl93ZWxsOwo+ICAJYm9vbCBkdW1wX2RvbWFpbl9pbmZvOwo+ICsJaW50IHBvd2Vy X3dlbGxfdXNlW2Rldl9wcml2LT5wb3dlcl9kb21haW5zLnBvd2VyX3dlbGxfY291bnRdOwo+ICAK PiAgCW11dGV4X2xvY2soJnBvd2VyX2RvbWFpbnMtPmxvY2spOwo+ICAKPiBAQCAtMzA4Nyw2ICsz MjM3LDE0IEBAIHZvaWQgaW50ZWxfcG93ZXJfZG9tYWluc192ZXJpZnlfc3RhdGUoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICAJCWVudW0gaW50ZWxfZGlzcGxheV9wb3dlcl9k b21haW4gZG9tYWluOwo+ICAJCWludCBkb21haW5zX2NvdW50Owo+ICAJCWJvb2wgZW5hYmxlZDsK PiArCQlpbnQgd2VsbF9jb3VudCwgaSA9IDA7Cj4gKwkJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7 Cj4gKwo+ICsJCXBvd2VyX3dlbGxfbG9jayhwb3dlcl93ZWxsLCBmbGFncyk7Cj4gKwkJd2VsbF9j b3VudCA9IHBvd2VyX3dlbGwtPmNvdW50Owo+ICsJCWVuYWJsZWQgPSBwb3dlcl93ZWxsLT5vcHMt PmlzX2VuYWJsZWQoZGV2X3ByaXYsIHBvd2VyX3dlbGwpOwo+ICsJCXBvd2VyX3dlbGxfdW5sb2Nr KHBvd2VyX3dlbGwsIGZsYWdzKTsKPiArCQlwb3dlcl93ZWxsX3VzZVtpKytdID0gd2VsbF9jb3Vu dDsKPiAgCj4gIAkJLyoKPiAgCQkgKiBQb3dlciB3ZWxscyBub3QgYmVsb25naW5nIHRvIGFueSBk b21haW4gKGxpa2UgdGhlIE1JU0NfSU8KPiBAQCAtMzA5NiwyMCArMzI1NCwxOSBAQCB2b2lkIGlu dGVsX3Bvd2VyX2RvbWFpbnNfdmVyaWZ5X3N0YXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdikKPiAgCQlpZiAoIXBvd2VyX3dlbGwtPmRvbWFpbnMpCj4gIAkJCWNvbnRpbnVlOwo+ ICAKPiAtCQllbmFibGVkID0gcG93ZXJfd2VsbC0+b3BzLT5pc19lbmFibGVkKGRldl9wcml2LCBw b3dlcl93ZWxsKTsKPiAtCQlpZiAoKHBvd2VyX3dlbGwtPmNvdW50IHx8IHBvd2VyX3dlbGwtPmFs d2F5c19vbikgIT0gZW5hYmxlZCkKPiArCj4gKwkJaWYgKCh3ZWxsX2NvdW50IHx8IHBvd2VyX3dl bGwtPmFsd2F5c19vbikgIT0gZW5hYmxlZCkKPiAgCQkJRFJNX0VSUk9SKCJwb3dlciB3ZWxsICVz IHN0YXRlIG1pc21hdGNoIChyZWZjb3VudCAlZC9lbmFibGVkICVkKSIsCj4gLQkJCQkgIHBvd2Vy X3dlbGwtPm5hbWUsIHBvd2VyX3dlbGwtPmNvdW50LCBlbmFibGVkKTsKPiArCQkJCSAgcG93ZXJf d2VsbC0+bmFtZSwgd2VsbF9jb3VudCwgZW5hYmxlZCk7Cj4gIAo+ICAJCWRvbWFpbnNfY291bnQg PSAwOwo+ICAJCWZvcl9lYWNoX3Bvd2VyX2RvbWFpbihkb21haW4sIHBvd2VyX3dlbGwtPmRvbWFp bnMpCj4gLQkJCWRvbWFpbnNfY291bnQgKz0gcG93ZXJfZG9tYWlucy0+ZG9tYWluX3VzZV9jb3Vu dFtkb21haW5dOwo+ICsJCQlkb21haW5zX2NvdW50ICs9IGF0b21pY19yZWFkKCZwb3dlcl9kb21h aW5zLT5kb21haW5fdXNlX2NvdW50W2RvbWFpbl0pOwo+ICAKPiAtCQlpZiAocG93ZXJfd2VsbC0+ Y291bnQgIT0gZG9tYWluc19jb3VudCkgewo+ICsJCWlmICh3ZWxsX2NvdW50ICE9IGRvbWFpbnNf Y291bnQpIHsKPiAgCQkJRFJNX0VSUk9SKCJwb3dlciB3ZWxsICVzIHJlZmNvdW50L2RvbWFpbiBy ZWZjb3VudCBtaXNtYXRjaCAiCj4gIAkJCQkgICIocmVmY291bnQgJWQvZG9tYWlucyByZWZjb3Vu dCAlZClcbiIsCj4gLQkJCQkgIHBvd2VyX3dlbGwtPm5hbWUsIHBvd2VyX3dlbGwtPmNvdW50LAo+ IC0JCQkJICBkb21haW5zX2NvdW50KTsKPiArCQkJCSAgcG93ZXJfd2VsbC0+bmFtZSwgd2VsbF9j b3VudCwgZG9tYWluc19jb3VudCk7Cj4gIAkJCWR1bXBfZG9tYWluX2luZm8gPSB0cnVlOwo+ICAJ CX0KPiAgCX0KPiBAQCAtMzExOCw3ICszMjc1LDcgQEAgdm9pZCBpbnRlbF9wb3dlcl9kb21haW5z X3ZlcmlmeV9zdGF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gIAkJc3Rh dGljIGJvb2wgZHVtcGVkOwo+ICAKPiAgCQlpZiAoIWR1bXBlZCkgewo+IC0JCQlpbnRlbF9wb3dl cl9kb21haW5zX2R1bXBfaW5mbyhkZXZfcHJpdik7Cj4gKwkJCWludGVsX3Bvd2VyX2RvbWFpbnNf ZHVtcF9pbmZvKGRldl9wcml2LCBwb3dlcl93ZWxsX3VzZSk7Cj4gIAkJCWR1bXBlZCA9IHRydWU7 Cj4gIAkJfQo+ICAJfQo+IC0tIAo+IDIuMTEuMAo+IAoKSSB3aWxsIHByb2JhYmx5IGhhdmUgbW9y ZSBjb21tZW50cyBsYXRlciwgYnV0IGp1c3QgZG9pbmcgYSBicmFpbiBkdW1wIG5vdwpzaW5jZSBJ IGVuZCB1cCBmb3JnZXR0aW5nIHRvIHdyaXRlIHllc3RlcmRheS4uLgoKVGhlIGFwcHJvYWNoIGhl cmUgaW4gZ2VuZXJhbCBpcyBnb29kIGFuZCBtdWNoIGJldHRlciB0aGFuIHRoYXQgcHJlLHBvc3Qg aG9va3MuCkJ1dCBJIGp1c3QgYmVsaWV2ZSB3ZSBjYW4gZG8gdGhpcyBoZXJlIGluIGEgbW9yZSBn ZW5lcmljIGFwcHJvYWNoIHRoYW4gZGV2aWF0aW5nCnRoZSBpbml0aWFsIHBvd2VyIHdlbGwgYW5k IGRvbWFpbnMuCgpUaGFua3MsClJvZHJpZ28uCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3Rz LmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2ludGVsLWdmeAo=