From mboxrd@z Thu Jan 1 00:00:00 1970 From: Heiko =?ISO-8859-1?Q?St=FCbner?= Subject: Re: [PATCH v2 3/5] drm/rockchip: Use the helpers for PSR Date: Fri, 29 Mar 2019 19:51:51 +0100 Message-ID: <2899575.41yBNtqCfV@diego> References: <20190326204509.96515-1-sean@poorly.run> <20190326204509.96515-3-sean@poorly.run> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from gloria.sntech.de (gloria.sntech.de [185.11.138.130]) by gabe.freedesktop.org (Postfix) with ESMTPS id 1E3256E4E0 for ; Fri, 29 Mar 2019 18:51:58 +0000 (UTC) In-Reply-To: <20190326204509.96515-3-sean@poorly.run> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Sean Paul Cc: Zain Wang , David Airlie , dri-devel@lists.freedesktop.org, Tomasz Figa , Sean Paul , Laurent Pinchart List-Id: dri-devel@lists.freedesktop.org SGksCgpBbSBEaWVuc3RhZywgMjYuIE3DpHJ6IDIwMTksIDIxOjQ0OjU2IENFVCBzY2hyaWViIFNl YW4gUGF1bDoKPiBGcm9tOiBTZWFuIFBhdWwgPHNlYW5wYXVsQGNocm9taXVtLm9yZz4KPiAKPiBJ bnN0ZWFkIG9mIHJvbGxpbmcgb3VyIG93biBpbXBsZW1lbnRhdGlvbiBmb3IgdHJhY2tpbmcgd2hl biBQU1Igc2hvdWxkCj4gYmUgW2luXWFjdGl2ZSwgdXNlIHRoZSBuZXcgc2VsZiByZWZyZXNoIGhl bHBlcnMgdG8gZG8gdGhlIGhlYXZ5IGxpZnRpbmcuCgpJIG9ubHkgZ290IHBhdGNoZXMgMy01IGFu ZCBoYWQgdG8gcHVsbCAxKzIgZnJvbSBwYXRjaHdvcmssIHRoZSBmb2xsb3dpbmcKYXBwbGllcyB0 byB0aGUgd2hvbGUgc2VyaWVzIHRob3VnaC4KCldoaWxlIG15IEtldmluIGRpc3BsYXkgZG9lcyBz dGlsbCBnZW5lcmFsbHkgd29yayB3aXRoIHRoZXNlIDUgcGF0Y2hlcwphcHBsaWVkIGZ1bmN0aW9u YWxpdHkgaGFzIHJlZ3Jlc3NlZCBzb21laG93LgoKRW52aXJvbm1lbnQgaXMgYSBzdGFuZGFyZCBE ZWJpYW4gd2l0aCBmcmFtZWJ1ZmZlciBjb25zb2xlIGFuZCBzZGRtCmxvZ2luIG1hbmFnZXIuCgpX aXRoIHRoaXMgcGF0Y2hzZXQgYXBwbGllZCwgd2hlbiBzZGRtIHN0YXJ0cyBJIG9ubHkgZ2V0IHRo ZSBzZWUgdGhlCmxvZ2luIHNjcmVlbiBhZnRlciBJIG1vdmUgdGhlIG1vdXNlLCBzaW1pbGFybHkg dGhlIGJsaW5raW5nIGN1cnNvciBpbgp0aGUgcGFzc3dvcmQgZmllbGQgYWxzbyBvbmx5IGJsaW5r cyB3aGVuIEkgYWN0aXZlbHkgbW92ZSB0aGUgY3Vyc29yCmFuZCBzdG9wcyB3aGVuIHRoZXJlIGlz IG5vIG1vdXNlIG1vdmVtZW50LgoKV2l0aCBhbGwgNSBwYXRjaGVzIHJldmVydGVkIHRoaXMgZ29l cyBiYWNrIHRvIG5vcm1hbC4KClNvIGl0IGxvb2tzIGxpa2UgdGhlIFBTUiBnZXRzIGEgYml0IHRv byBhZ3Jlc3NpdmUgd2l0aCB0aGVzZT8KCgpIZWlrbwoKPiBDaGFuZ2VzIGluIHYyOgo+IC0gdXBk YXRlZCB0byByZWZsZWN0IGNoYW5nZXMgbWFkZSBpbiB0aGUgaGVscGVycwo+IAo+IExpbmsgdG8g djE6IGh0dHBzOi8vcGF0Y2h3b3JrLmZyZWVkZXNrdG9wLm9yZy9wYXRjaC9tc2dpZC8yMDE5MDIy ODIxMDkzOS44MzM4Ni00LXNlYW5AcG9vcmx5LnJ1bgo+IAo+IENjOiBaYWluIFdhbmcgPHd6ekBy b2NrLWNoaXBzLmNvbT4KPiBDYzogVG9tYXN6IEZpZ2EgPHRmaWdhQGNocm9taXVtLm9yZz4KPiBT aWduZWQtb2ZmLWJ5OiBTZWFuIFBhdWwgPHNlYW5wYXVsQGNocm9taXVtLm9yZz4KPiAtLS0KPiAg Li4uL2RybS9icmlkZ2UvYW5hbG9naXgvYW5hbG9naXhfZHBfY29yZS5jICAgIHwgMjEzICsrKysr KysrLS0tLS0KPiAgLi4uL2RybS9icmlkZ2UvYW5hbG9naXgvYW5hbG9naXhfZHBfY29yZS5oICAg IHwgICAyICstCj4gIGRyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9NYWtlZmlsZSAgICAgICAgICAg ICB8ICAgMyArLQo+ICAuLi4vZ3B1L2RybS9yb2NrY2hpcC9hbmFsb2dpeF9kcC1yb2NrY2hpcC5j ICAgfCAgNzAgKystLS0KPiAgZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV9m Yi5jICAgIHwgIDE2IC0KPiAgZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV9w c3IuYyAgIHwgMjkwIC0tLS0tLS0tLS0tLS0tLS0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vcm9ja2No aXAvcm9ja2NoaXBfZHJtX3Bzci5oICAgfCAgMzAgLS0KPiAgZHJpdmVycy9ncHUvZHJtL3JvY2tj aGlwL3JvY2tjaGlwX2RybV92b3AuYyAgIHwgIDMzICstCj4gIGluY2x1ZGUvZHJtL2JyaWRnZS9h bmFsb2dpeF9kcC5oICAgICAgICAgICAgICB8ICAgNCArLQo+ICA5IGZpbGVzIGNoYW5nZWQsIDE4 NSBpbnNlcnRpb25zKCspLCA0NzYgZGVsZXRpb25zKC0pCj4gIGRlbGV0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX3Bzci5jCj4gIGRlbGV0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX3Bzci5oCj4gCj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvYW5hbG9naXgvYW5hbG9naXhfZHBf Y29yZS5jIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9hbmFsb2dpeC9hbmFsb2dpeF9kcF9jb3Jl LmMKPiBpbmRleCBhZjM0NTU0YTVhMDIuLmM1MDNmZTNiYzNiMyAxMDA2NDQKPiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vYnJpZGdlL2FuYWxvZ2l4L2FuYWxvZ2l4X2RwX2NvcmUuYwo+ICsrKyBiL2Ry aXZlcnMvZ3B1L2RybS9icmlkZ2UvYW5hbG9naXgvYW5hbG9naXhfZHBfY29yZS5jCj4gQEAgLTEw Niw2MyArMTA2LDEzIEBAIHN0YXRpYyBpbnQgYW5hbG9naXhfZHBfZGV0ZWN0X2hwZChzdHJ1Y3Qg YW5hbG9naXhfZHBfZGV2aWNlICpkcCkKPiAgCXJldHVybiAwOwo+ICB9Cj4gIAo+IC1pbnQgYW5h bG9naXhfZHBfcHNyX2VuYWJsZWQoc3RydWN0IGFuYWxvZ2l4X2RwX2RldmljZSAqZHApCj4gK2Jv b2wgYW5hbG9naXhfZHBfc2VsZl9yZWZyZXNoX2NoYW5nZWQoc3RydWN0IGFuYWxvZ2l4X2RwX2Rl dmljZSAqZHApCj4gIHsKPiAtCj4gLQlyZXR1cm4gZHAtPnBzcl9lbmFibGU7Cj4gKwlyZXR1cm4g ZHAtPmNvbm5lY3Rvci5zdGF0ZS0+c2VsZl9yZWZyZXNoX2NoYW5nZWQ7Cj4gIH0KPiAtRVhQT1JU X1NZTUJPTF9HUEwoYW5hbG9naXhfZHBfcHNyX2VuYWJsZWQpOwo+ICtFWFBPUlRfU1lNQk9MX0dQ TChhbmFsb2dpeF9kcF9zZWxmX3JlZnJlc2hfY2hhbmdlZCk7Cj4gIAo+IC1pbnQgYW5hbG9naXhf ZHBfZW5hYmxlX3BzcihzdHJ1Y3QgYW5hbG9naXhfZHBfZGV2aWNlICpkcCkKPiAtewo+IC0Jc3Ry dWN0IGVkcF92c2NfcHNyIHBzcl92c2M7Cj4gLQo+IC0JaWYgKCFkcC0+cHNyX2VuYWJsZSkKPiAt CQlyZXR1cm4gMDsKPiAtCj4gLQkvKiBQcmVwYXJlIFZTQyBwYWNrZXQgYXMgcGVyIEVEUCAxLjQg c3BlYywgVGFibGUgNi45ICovCj4gLQltZW1zZXQoJnBzcl92c2MsIDAsIHNpemVvZihwc3JfdnNj KSk7Cj4gLQlwc3JfdnNjLnNkcF9oZWFkZXIuSEIwID0gMDsKPiAtCXBzcl92c2Muc2RwX2hlYWRl ci5IQjEgPSAweDc7Cj4gLQlwc3JfdnNjLnNkcF9oZWFkZXIuSEIyID0gMHgyOwo+IC0JcHNyX3Zz Yy5zZHBfaGVhZGVyLkhCMyA9IDB4ODsKPiAtCj4gLQlwc3JfdnNjLkRCMCA9IDA7Cj4gLQlwc3Jf dnNjLkRCMSA9IEVEUF9WU0NfUFNSX1NUQVRFX0FDVElWRSB8IEVEUF9WU0NfUFNSX0NSQ19WQUxV RVNfVkFMSUQ7Cj4gLQo+IC0JcmV0dXJuIGFuYWxvZ2l4X2RwX3NlbmRfcHNyX3NwZChkcCwgJnBz cl92c2MsIHRydWUpOwo+IC19Cj4gLUVYUE9SVF9TWU1CT0xfR1BMKGFuYWxvZ2l4X2RwX2VuYWJs ZV9wc3IpOwo+IC0KPiAtaW50IGFuYWxvZ2l4X2RwX2Rpc2FibGVfcHNyKHN0cnVjdCBhbmFsb2dp eF9kcF9kZXZpY2UgKmRwKQo+IC17Cj4gLQlzdHJ1Y3QgZWRwX3ZzY19wc3IgcHNyX3ZzYzsKPiAt CWludCByZXQ7Cj4gLQo+IC0JaWYgKCFkcC0+cHNyX2VuYWJsZSkKPiAtCQlyZXR1cm4gMDsKPiAt Cj4gLQkvKiBQcmVwYXJlIFZTQyBwYWNrZXQgYXMgcGVyIEVEUCAxLjQgc3BlYywgVGFibGUgNi45 ICovCj4gLQltZW1zZXQoJnBzcl92c2MsIDAsIHNpemVvZihwc3JfdnNjKSk7Cj4gLQlwc3JfdnNj LnNkcF9oZWFkZXIuSEIwID0gMDsKPiAtCXBzcl92c2Muc2RwX2hlYWRlci5IQjEgPSAweDc7Cj4g LQlwc3JfdnNjLnNkcF9oZWFkZXIuSEIyID0gMHgyOwo+IC0JcHNyX3ZzYy5zZHBfaGVhZGVyLkhC MyA9IDB4ODsKPiAtCj4gLQlwc3JfdnNjLkRCMCA9IDA7Cj4gLQlwc3JfdnNjLkRCMSA9IDA7Cj4g LQo+IC0JcmV0ID0gZHJtX2RwX2RwY2Rfd3JpdGViKCZkcC0+YXV4LCBEUF9TRVRfUE9XRVIsIERQ X1NFVF9QT1dFUl9EMCk7Cj4gLQlpZiAocmV0ICE9IDEpIHsKPiAtCQlkZXZfZXJyKGRwLT5kZXYs ICJGYWlsZWQgdG8gc2V0IERQIFBvd2VyMCAlZFxuIiwgcmV0KTsKPiAtCQlyZXR1cm4gcmV0Owo+ IC0JfQo+IC0KPiAtCXJldHVybiBhbmFsb2dpeF9kcF9zZW5kX3Bzcl9zcGQoZHAsICZwc3JfdnNj LCBmYWxzZSk7Cj4gLX0KPiAtRVhQT1JUX1NZTUJPTF9HUEwoYW5hbG9naXhfZHBfZGlzYWJsZV9w c3IpOwo+IC0KPiAtc3RhdGljIGludCBhbmFsb2dpeF9kcF9kZXRlY3Rfc2lua19wc3Ioc3RydWN0 IGFuYWxvZ2l4X2RwX2RldmljZSAqZHApCj4gK3N0YXRpYyBib29sIGFuYWxvZ2l4X2RwX2RldGVj dF9zaW5rX3BzcihzdHJ1Y3QgYW5hbG9naXhfZHBfZGV2aWNlICpkcCkKPiAgewo+ICAJdW5zaWdu ZWQgY2hhciBwc3JfdmVyc2lvbjsKPiAgCWludCByZXQ7Cj4gQEAgLTE3MCwxNCArMTIwLDExIEBA IHN0YXRpYyBpbnQgYW5hbG9naXhfZHBfZGV0ZWN0X3NpbmtfcHNyKHN0cnVjdCBhbmFsb2dpeF9k cF9kZXZpY2UgKmRwKQo+ICAJcmV0ID0gZHJtX2RwX2RwY2RfcmVhZGIoJmRwLT5hdXgsIERQX1BT Ul9TVVBQT1JULCAmcHNyX3ZlcnNpb24pOwo+ICAJaWYgKHJldCAhPSAxKSB7Cj4gIAkJZGV2X2Vy cihkcC0+ZGV2LCAiZmFpbGVkIHRvIGdldCBQU1IgdmVyc2lvbiwgZGlzYWJsZSBpdFxuIik7Cj4g LQkJcmV0dXJuIHJldDsKPiArCQlyZXR1cm4gZmFsc2U7Cj4gIAl9Cj4gIAo+ICAJZGV2X2RiZyhk cC0+ZGV2LCAiUGFuZWwgUFNSIHZlcnNpb24gOiAleFxuIiwgcHNyX3ZlcnNpb24pOwo+IC0KPiAt CWRwLT5wc3JfZW5hYmxlID0gKHBzcl92ZXJzaW9uICYgRFBfUFNSX0lTX1NVUFBPUlRFRCkgPyB0 cnVlIDogZmFsc2U7Cj4gLQo+IC0JcmV0dXJuIDA7Cj4gKwlyZXR1cm4gcHNyX3ZlcnNpb24gJiBE UF9QU1JfSVNfU1VQUE9SVEVEOwo+ICB9Cj4gIAo+ICBzdGF0aWMgaW50IGFuYWxvZ2l4X2RwX2Vu YWJsZV9zaW5rX3BzcihzdHJ1Y3QgYW5hbG9naXhfZHBfZGV2aWNlICpkcCkKPiBAQCAtMjAwLDcg KzE0Nyw3IEBAIHN0YXRpYyBpbnQgYW5hbG9naXhfZHBfZW5hYmxlX3NpbmtfcHNyKHN0cnVjdCBh bmFsb2dpeF9kcF9kZXZpY2UgKmRwKQo+ICAJfQo+ICAKPiAgCS8qIE1haW4tTGluayB0cmFuc21p dHRlciByZW1haW5zIGFjdGl2ZSBkdXJpbmcgUFNSIGFjdGl2ZSBzdGF0ZXMgKi8KPiAtCXBzcl9l biA9IERQX1BTUl9NQUlOX0xJTktfQUNUSVZFIHwgRFBfUFNSX0NSQ19WRVJJRklDQVRJT047Cj4g Kwlwc3JfZW4gPSBEUF9QU1JfQ1JDX1ZFUklGSUNBVElPTjsKPiAgCXJldCA9IGRybV9kcF9kcGNk X3dyaXRlYigmZHAtPmF1eCwgRFBfUFNSX0VOX0NGRywgcHNyX2VuKTsKPiAgCWlmIChyZXQgIT0g MSkgewo+ICAJCWRldl9lcnIoZHAtPmRldiwgImZhaWxlZCB0byBzZXQgcGFuZWwgcHNyXG4iKTsK PiBAQCAtMjA4LDggKzE1NSw3IEBAIHN0YXRpYyBpbnQgYW5hbG9naXhfZHBfZW5hYmxlX3Npbmtf cHNyKHN0cnVjdCBhbmFsb2dpeF9kcF9kZXZpY2UgKmRwKQo+ICAJfQo+ICAKPiAgCS8qIEVuYWJs ZSBwc3IgZnVuY3Rpb24gKi8KPiAtCXBzcl9lbiA9IERQX1BTUl9FTkFCTEUgfCBEUF9QU1JfTUFJ Tl9MSU5LX0FDVElWRSB8Cj4gLQkJIERQX1BTUl9DUkNfVkVSSUZJQ0FUSU9OOwo+ICsJcHNyX2Vu ID0gRFBfUFNSX0VOQUJMRSB8IERQX1BTUl9DUkNfVkVSSUZJQ0FUSU9OOwo+ICAJcmV0ID0gZHJt X2RwX2RwY2Rfd3JpdGViKCZkcC0+YXV4LCBEUF9QU1JfRU5fQ0ZHLCBwc3JfZW4pOwo+ICAJaWYg KHJldCAhPSAxKSB7Cj4gIAkJZGV2X2VycihkcC0+ZGV2LCAiZmFpbGVkIHRvIHNldCBwYW5lbCBw c3JcbiIpOwo+IEBAIC0yMTgsMTAgKzE2NCwxMSBAQCBzdGF0aWMgaW50IGFuYWxvZ2l4X2RwX2Vu YWJsZV9zaW5rX3BzcihzdHJ1Y3QgYW5hbG9naXhfZHBfZGV2aWNlICpkcCkKPiAgCj4gIAlhbmFs b2dpeF9kcF9lbmFibGVfcHNyX2NyYyhkcCk7Cj4gIAo+ICsJZHAtPnBzcl9zdXBwb3J0ZWQgPSB0 cnVlOwo+ICsKPiAgCXJldHVybiAwOwo+ICBlbmQ6Cj4gIAlkZXZfZXJyKGRwLT5kZXYsICJlbmFi bGUgcHNyIGZhaWwsIGZvcmNlIHRvIGRpc2FibGUgcHNyXG4iKTsKPiAtCWRwLT5wc3JfZW5hYmxl ID0gZmFsc2U7Cj4gIAo+ICAJcmV0dXJuIHJldDsKPiAgfQo+IEBAIC0xMDM2LDI1ICs5ODMsOTAg QEAgc3RhdGljIGludCBhbmFsb2dpeF9kcF9jb21taXQoc3RydWN0IGFuYWxvZ2l4X2RwX2Rldmlj ZSAqZHApCj4gIAkJfQo+ICAJfQo+ICAKPiAtCXJldCA9IGFuYWxvZ2l4X2RwX2RldGVjdF9zaW5r X3BzcihkcCk7Cj4gLQlpZiAocmV0KQo+IC0JCXJldHVybiByZXQ7Cj4gLQo+ICAJLyogQ2hlY2sg d2hldGhlciBwYW5lbCBzdXBwb3J0cyBmYXN0IHRyYWluaW5nICovCj4gIAlyZXQgPSBhbmFsb2dp eF9kcF9mYXN0X2xpbmtfdHJhaW5fZGV0ZWN0aW9uKGRwKTsKPiAgCWlmIChyZXQpCj4gLQkJZHAt PnBzcl9lbmFibGUgPSBmYWxzZTsKPiArCQlyZXR1cm4gcmV0Owo+ICAKPiAtCWlmIChkcC0+cHNy X2VuYWJsZSkgewo+ICsJaWYgKGFuYWxvZ2l4X2RwX2RldGVjdF9zaW5rX3BzcihkcCkpIHsKPiAg CQlyZXQgPSBhbmFsb2dpeF9kcF9lbmFibGVfc2lua19wc3IoZHApOwo+ICAJCWlmIChyZXQpCj4g IAkJCXJldHVybiByZXQ7Cj4gIAl9Cj4gIAo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3Rh dGljIGludCBhbmFsb2dpeF9kcF9lbmFibGVfcHNyKHN0cnVjdCBhbmFsb2dpeF9kcF9kZXZpY2Ug KmRwKQo+ICt7Cj4gKwlzdHJ1Y3QgZWRwX3ZzY19wc3IgcHNyX3ZzYzsKPiArCWludCByZXQ7Cj4g Kwl1OCBzaW5rOwo+ICsKPiArCXJldCA9IGRybV9kcF9kcGNkX3JlYWRiKCZkcC0+YXV4LCBEUF9Q U1JfU1RBVFVTLCAmc2luayk7Cj4gKwlpZiAocmV0ICE9IDEpCj4gKwkJRFJNX0RFVl9FUlJPUihk cC0+ZGV2LCAiRmFpbGVkIHRvIHJlYWQgcHNyIHN0YXR1cyAlZFxuIiwgcmV0KTsKPiArCWVsc2Ug aWYgKHNpbmsgPT0gRFBfUFNSX1NJTktfQUNUSVZFX1JGQikKPiArCQlyZXR1cm4gMDsKPiArCj4g KwkvKiBQcmVwYXJlIFZTQyBwYWNrZXQgYXMgcGVyIEVEUCAxLjQgc3BlYywgVGFibGUgNi45ICov Cj4gKwltZW1zZXQoJnBzcl92c2MsIDAsIHNpemVvZihwc3JfdnNjKSk7Cj4gKwlwc3JfdnNjLnNk cF9oZWFkZXIuSEIwID0gMDsKPiArCXBzcl92c2Muc2RwX2hlYWRlci5IQjEgPSAweDc7Cj4gKwlw c3JfdnNjLnNkcF9oZWFkZXIuSEIyID0gMHgyOwo+ICsJcHNyX3ZzYy5zZHBfaGVhZGVyLkhCMyA9 IDB4ODsKPiArCXBzcl92c2MuREIwID0gMDsKPiArCXBzcl92c2MuREIxID0gRURQX1ZTQ19QU1Jf U1RBVEVfQUNUSVZFIHwgRURQX1ZTQ19QU1JfQ1JDX1ZBTFVFU19WQUxJRDsKPiArCj4gKwlyZXQg PSBhbmFsb2dpeF9kcF9zZW5kX3Bzcl9zcGQoZHAsICZwc3JfdnNjLCB0cnVlKTsKPiArCWlmICgh cmV0KQo+ICsJCWFuYWxvZ2l4X2RwX3NldF9hbmFsb2dfcG93ZXJfZG93bihkcCwgUE9XRVJfQUxM LCB0cnVlKTsKPiAgCj4gIAlyZXR1cm4gcmV0Owo+ICB9Cj4gIAo+ICtzdGF0aWMgaW50IGFuYWxv Z2l4X2RwX2Rpc2FibGVfcHNyKHN0cnVjdCBhbmFsb2dpeF9kcF9kZXZpY2UgKmRwKQo+ICt7Cj4g KwlzdHJ1Y3QgZWRwX3ZzY19wc3IgcHNyX3ZzYzsKPiArCWludCByZXQ7Cj4gKwl1OCBzaW5rOwo+ ICsKPiArCWFuYWxvZ2l4X2RwX3NldF9hbmFsb2dfcG93ZXJfZG93bihkcCwgUE9XRVJfQUxMLCBm YWxzZSk7Cj4gKwo+ICsJcmV0ID0gZHJtX2RwX2RwY2Rfd3JpdGViKCZkcC0+YXV4LCBEUF9TRVRf UE9XRVIsIERQX1NFVF9QT1dFUl9EMCk7Cj4gKwlpZiAocmV0ICE9IDEpIHsKPiArCQlEUk1fREVW X0VSUk9SKGRwLT5kZXYsICJGYWlsZWQgdG8gc2V0IERQIFBvd2VyMCAlZFxuIiwgcmV0KTsKPiAr CQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCXJldCA9IGRybV9kcF9kcGNkX3JlYWRiKCZkcC0+ YXV4LCBEUF9QU1JfU1RBVFVTLCAmc2luayk7Cj4gKwlpZiAocmV0ICE9IDEpIHsKPiArCQlEUk1f REVWX0VSUk9SKGRwLT5kZXYsICJGYWlsZWQgdG8gcmVhZCBwc3Igc3RhdHVzICVkXG4iLCByZXQp Owo+ICsJCXJldHVybiByZXQ7Cj4gKwl9IGVsc2UgaWYgKHNpbmsgPT0gRFBfUFNSX1NJTktfSU5B Q1RJVkUpIHsKPiArCQlEUk1fREVWX0VSUk9SKGRwLT5kZXYsICJzaW5rIGluYWN0aXZlLCBza2lw IGRpc2FibGUgcHNyIik7Cj4gKwkJcmV0dXJuIDA7Cj4gKwl9Cj4gKwo+ICsJcmV0ID0gYW5hbG9n aXhfZHBfdHJhaW5fbGluayhkcCk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJRFJNX0RFVl9FUlJPUihk cC0+ZGV2LCAiRmFpbGVkIHRvIHRyYWluIHRoZSBsaW5rICVkXG4iLCByZXQpOwo+ICsJCXJldHVy biByZXQ7Cj4gKwl9Cj4gKwo+ICsJLyogUHJlcGFyZSBWU0MgcGFja2V0IGFzIHBlciBFRFAgMS40 IHNwZWMsIFRhYmxlIDYuOSAqLwo+ICsJbWVtc2V0KCZwc3JfdnNjLCAwLCBzaXplb2YocHNyX3Zz YykpOwo+ICsJcHNyX3ZzYy5zZHBfaGVhZGVyLkhCMCA9IDA7Cj4gKwlwc3JfdnNjLnNkcF9oZWFk ZXIuSEIxID0gMHg3Owo+ICsJcHNyX3ZzYy5zZHBfaGVhZGVyLkhCMiA9IDB4MjsKPiArCXBzcl92 c2Muc2RwX2hlYWRlci5IQjMgPSAweDg7Cj4gKwo+ICsJcHNyX3ZzYy5EQjAgPSAwOwo+ICsJcHNy X3ZzYy5EQjEgPSAwOwo+ICsKPiArCXJldHVybiBhbmFsb2dpeF9kcF9zZW5kX3Bzcl9zcGQoZHAs ICZwc3JfdnNjLCB0cnVlKTsKPiArfQo+ICsKPiAgLyoKPiAgICogVGhpcyBmdW5jdGlvbiBpcyBh IGJpdCBvZiBhIGNhdGNoLWFsbCBmb3IgcGFuZWwgcHJlcGFyYXRpb24sIGhvcGVmdWxseQo+ICAg KiBzaW1wbGlmeWluZyB0aGUgbG9naWMgb2YgZnVuY3Rpb25zIHRoYXQgbmVlZCB0byBwcmVwYXJl L3VucHJlcGFyZSB0aGUgcGFuZWwKPiBAQCAtMTE0NSw5ICsxMTU3LDIzIEBAIGFuYWxvZ2l4X2Rw X2Jlc3RfZW5jb2RlcihzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQo+ICAJcmV0dXJu IGRwLT5lbmNvZGVyOwo+ICB9Cj4gIAo+ICsKPiAraW50IGFuYWxvZ2l4X2RwX2F0b21pY19jaGVj ayhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAo+ICsJCQkgICAgIHN0cnVjdCBkcm1f Y29ubmVjdG9yX3N0YXRlICpzdGF0ZSkKPiArewo+ICsJc3RydWN0IGFuYWxvZ2l4X2RwX2Rldmlj ZSAqZHAgPSB0b19kcChjb25uZWN0b3IpOwo+ICsKPiArCXN0YXRlLT5zZWxmX3JlZnJlc2hfYXdh cmUgPSB0cnVlOwo+ICsJaWYgKHN0YXRlLT5zZWxmX3JlZnJlc2hfYWN0aXZlICYmICFkcC0+cHNy X3N1cHBvcnRlZCkKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ ICsKPiAgc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX2hlbHBlcl9mdW5jcyBhbmFs b2dpeF9kcF9jb25uZWN0b3JfaGVscGVyX2Z1bmNzID0gewo+ICAJLmdldF9tb2RlcyA9IGFuYWxv Z2l4X2RwX2dldF9tb2RlcywKPiAgCS5iZXN0X2VuY29kZXIgPSBhbmFsb2dpeF9kcF9iZXN0X2Vu Y29kZXIsCj4gKwkuYXRvbWljX2NoZWNrID0gYW5hbG9naXhfZHBfYXRvbWljX2NoZWNrLAo+ICB9 Owo+ICAKPiAgc3RhdGljIGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMKPiBAQCAtMTI0NCw2ICsx MjcwLDEwIEBAIHN0YXRpYyB2b2lkIGFuYWxvZ2l4X2RwX2JyaWRnZV9wcmVfZW5hYmxlKHN0cnVj dCBkcm1fYnJpZGdlICpicmlkZ2UpCj4gIAlzdHJ1Y3QgYW5hbG9naXhfZHBfZGV2aWNlICpkcCA9 IGJyaWRnZS0+ZHJpdmVyX3ByaXZhdGU7Cj4gIAlpbnQgcmV0Owo+ICAKPiArCS8qIERvbid0IHRv dWNoIHRoZSBwYW5lbCBpZiB3ZSdyZSBjb21pbmcgYmFjayBmcm9tIFBTUiAqLwo+ICsJaWYgKGRw LT5jb25uZWN0b3Iuc3RhdGUtPnNlbGZfcmVmcmVzaF9jaGFuZ2VkKQo+ICsJCXJldHVybjsKPiAr Cj4gIAlyZXQgPSBhbmFsb2dpeF9kcF9wcmVwYXJlX3BhbmVsKGRwLCB0cnVlLCB0cnVlKTsKPiAg CWlmIChyZXQpCj4gIAkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gc2V0dXAgdGhlIHBhbmVsIHJldCA9 ICVkXG4iLCByZXQpOwo+IEBAIC0xMzA5LDYgKzEzMzksMTQgQEAgc3RhdGljIHZvaWQgYW5hbG9n aXhfZHBfYnJpZGdlX2VuYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQo+ICAJc3RydWN0 IGFuYWxvZ2l4X2RwX2RldmljZSAqZHAgPSBicmlkZ2UtPmRyaXZlcl9wcml2YXRlOwo+ICAJaW50 IHRpbWVvdXRfbG9vcCA9IDA7Cj4gIAo+ICsJLyogTm90IGEgZnVsbCBlbmFibGUsIGp1c3QgZGlz YWJsZSBQU1IgYW5kIGNvbnRpbnVlICovCj4gKwlpZiAoZHAtPmNvbm5lY3Rvci5zdGF0ZS0+c2Vs Zl9yZWZyZXNoX2NoYW5nZWQpIHsKPiArCQlpbnQgcmV0ID0gYW5hbG9naXhfZHBfZGlzYWJsZV9w c3IoZHApOwo+ICsJCWlmIChyZXQpCj4gKwkJCURSTV9FUlJPUigiRmFpbGVkIHRvIGRpc2FibGUg cHNyICVkXG4iLCByZXQpOwo+ICsJCXJldHVybjsKPiArCX0KPiArCj4gIAlpZiAoZHAtPmRwbXNf bW9kZSA9PSBEUk1fTU9ERV9EUE1TX09OKQo+ICAJCXJldHVybjsKPiAgCj4gQEAgLTEzNTYsMTEg KzEzOTQsMzcgQEAgc3RhdGljIHZvaWQgYW5hbG9naXhfZHBfYnJpZGdlX2Rpc2FibGUoc3RydWN0 IGRybV9icmlkZ2UgKmJyaWRnZSkKPiAgCWlmIChyZXQpCj4gIAkJRFJNX0VSUk9SKCJmYWlsZWQg dG8gc2V0dXAgdGhlIHBhbmVsIHJldCA9ICVkXG4iLCByZXQpOwo+ICAKPiAtCWRwLT5wc3JfZW5h YmxlID0gZmFsc2U7Cj4gIAlkcC0+ZmFzdF90cmFpbl9lbmFibGUgPSBmYWxzZTsKPiArCWRwLT5w c3Jfc3VwcG9ydGVkID0gZmFsc2U7Cj4gIAlkcC0+ZHBtc19tb2RlID0gRFJNX01PREVfRFBNU19P RkY7Cj4gIH0KPiAgCj4gK3N0YXRpYyB2b2lkIGFuYWxvZ2l4X2RwX2JyaWRnZV9hdG9taWNfZGlz YWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQo+ICt7Cj4gKwlzdHJ1Y3QgYW5hbG9naXhf ZHBfZGV2aWNlICpkcCA9IGJyaWRnZS0+ZHJpdmVyX3ByaXZhdGU7Cj4gKwlzdHJ1Y3QgZHJtX2Nv bm5lY3Rvcl9zdGF0ZSAqY29ubl9zdGF0ZSA9IGRwLT5jb25uZWN0b3Iuc3RhdGU7Cj4gKwo+ICsJ LyogRG9uJ3QgZG8gYSBmdWxsIGRpc2FibGUgb24gUFNSIHRyYW5zaXRpb25zICovCj4gKwlpZiAo Y29ubl9zdGF0ZS0+Y3J0YyAmJiBjb25uX3N0YXRlLT5zZWxmX3JlZnJlc2hfY2hhbmdlZCkKPiAr CQlyZXR1cm47Cj4gKwo+ICsJYW5hbG9naXhfZHBfYnJpZGdlX2Rpc2FibGUoYnJpZGdlKTsKPiAr fQo+ICsKPiArc3RhdGljIHZvaWQgYW5hbG9naXhfZHBfYnJpZGdlX3Bvc3RfZGlzYWJsZShzdHJ1 Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQo+ICt7Cj4gKwlzdHJ1Y3QgYW5hbG9naXhfZHBfZGV2aWNl ICpkcCA9IGJyaWRnZS0+ZHJpdmVyX3ByaXZhdGU7Cj4gKwlzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9z dGF0ZSAqY29ubl9zdGF0ZSA9IGRwLT5jb25uZWN0b3Iuc3RhdGU7Cj4gKwlpbnQgcmV0Owo+ICsK PiArCWlmIChjb25uX3N0YXRlLT5zZWxmX3JlZnJlc2hfYWN0aXZlKSB7Cj4gKwkJcmV0ID0gYW5h bG9naXhfZHBfZW5hYmxlX3BzcihkcCk7Cj4gKwkJaWYgKHJldCkKPiArCQkJRFJNX0VSUk9SKCJG YWlsZWQgdG8gZW5hYmxlIHBzciAoJWQpXG4iLCByZXQpOwo+ICsJCXJldHVybjsKPiArCX0KPiAr fQo+ICsKPiAgc3RhdGljIHZvaWQgYW5hbG9naXhfZHBfYnJpZGdlX21vZGVfc2V0KHN0cnVjdCBk cm1fYnJpZGdlICpicmlkZ2UsCj4gIAkJCQljb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAq b3JpZ19tb2RlLAo+ICAJCQkJY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCj4g QEAgLTE0NDAsMTYgKzE1MDQsMTEgQEAgc3RhdGljIHZvaWQgYW5hbG9naXhfZHBfYnJpZGdlX21v ZGVfc2V0KHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UsCj4gIAkJdmlkZW8tPmludGVybGFjZWQg PSB0cnVlOwo+ICB9Cj4gIAo+IC1zdGF0aWMgdm9pZCBhbmFsb2dpeF9kcF9icmlkZ2Vfbm9wKHN0 cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpCj4gLXsKPiAtCS8qIGRvIG5vdGhpbmcgKi8KPiAtfQo+ IC0KPiAgc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fYnJpZGdlX2Z1bmNzIGFuYWxvZ2l4X2RwX2Jy aWRnZV9mdW5jcyA9IHsKPiAgCS5wcmVfZW5hYmxlID0gYW5hbG9naXhfZHBfYnJpZGdlX3ByZV9l bmFibGUsCj4gIAkuZW5hYmxlID0gYW5hbG9naXhfZHBfYnJpZGdlX2VuYWJsZSwKPiAtCS5kaXNh YmxlID0gYW5hbG9naXhfZHBfYnJpZGdlX2Rpc2FibGUsCj4gLQkucG9zdF9kaXNhYmxlID0gYW5h bG9naXhfZHBfYnJpZGdlX25vcCwKPiArCS5kaXNhYmxlID0gYW5hbG9naXhfZHBfYnJpZGdlX2F0 b21pY19kaXNhYmxlLAo+ICsJLnBvc3RfZGlzYWJsZSA9IGFuYWxvZ2l4X2RwX2JyaWRnZV9wb3N0 X2Rpc2FibGUsCj4gIAkubW9kZV9zZXQgPSBhbmFsb2dpeF9kcF9icmlkZ2VfbW9kZV9zZXQsCj4g IAkuYXR0YWNoID0gYW5hbG9naXhfZHBfYnJpZGdlX2F0dGFjaCwKPiAgfTsKPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9hbmFsb2dpeC9hbmFsb2dpeF9kcF9jb3JlLmggYi9k cml2ZXJzL2dwdS9kcm0vYnJpZGdlL2FuYWxvZ2l4L2FuYWxvZ2l4X2RwX2NvcmUuaAo+IGluZGV4 IDc2OTI1NWRjNmU5OS4uZDkzN2ZhM2Q5ZWU4IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9icmlkZ2UvYW5hbG9naXgvYW5hbG9naXhfZHBfY29yZS5oCj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL2JyaWRnZS9hbmFsb2dpeC9hbmFsb2dpeF9kcF9jb3JlLmgKPiBAQCAtMTczLDggKzE3Myw4 IEBAIHN0cnVjdCBhbmFsb2dpeF9kcF9kZXZpY2Ugewo+ICAJaW50CQkJZHBtc19tb2RlOwo+ICAJ aW50CQkJaHBkX2dwaW87Cj4gIAlib29sICAgICAgICAgICAgICAgICAgICBmb3JjZV9ocGQ7Cj4g LQlib29sCQkJcHNyX2VuYWJsZTsKPiAgCWJvb2wJCQlmYXN0X3RyYWluX2VuYWJsZTsKPiArCWJv b2wJCQlwc3Jfc3VwcG9ydGVkOwo+ICAKPiAgCXN0cnVjdCBtdXRleAkJcGFuZWxfbG9jazsKPiAg CWJvb2wJCQlwYW5lbF9pc19tb2Rlc2V0Owo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v cm9ja2NoaXAvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvTWFrZWZpbGUKPiBp bmRleCBmNmZjOWQ1ZGQwYWQuLmE3Nzc3MjZjMjNjYiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vcm9ja2NoaXAvTWFrZWZpbGUKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAv TWFrZWZpbGUKPiBAQCAtNCw4ICs0LDcgQEAKPiAgIyBEaXJlY3QgUmVuZGVyaW5nIEluZnJhc3Ry dWN0dXJlIChEUkkpIGluIFhGcmVlODYgNC4xLjAgYW5kIGhpZ2hlci4KPiAgCj4gIHJvY2tjaGlw ZHJtLXkgOj0gcm9ja2NoaXBfZHJtX2Rydi5vIHJvY2tjaGlwX2RybV9mYi5vIFwKPiAtCQlyb2Nr Y2hpcF9kcm1fZ2VtLm8gcm9ja2NoaXBfZHJtX3Bzci5vIFwKPiAtCQlyb2NrY2hpcF9kcm1fdm9w Lm8gcm9ja2NoaXBfdm9wX3JlZy5vCj4gKwkJcm9ja2NoaXBfZHJtX2dlbS5vIHJvY2tjaGlwX2Ry bV92b3AubyByb2NrY2hpcF92b3BfcmVnLm8KPiAgcm9ja2NoaXBkcm0tJChDT05GSUdfRFJNX0ZC REVWX0VNVUxBVElPTikgKz0gcm9ja2NoaXBfZHJtX2ZiZGV2Lm8KPiAgCj4gIHJvY2tjaGlwZHJt LSQoQ09ORklHX1JPQ0tDSElQX0FOQUxPR0lYX0RQKSArPSBhbmFsb2dpeF9kcC1yb2NrY2hpcC5v Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9hbmFsb2dpeF9kcC1yb2Nr Y2hpcC5jIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2FuYWxvZ2l4X2RwLXJvY2tjaGlwLmMK PiBpbmRleCBiYzQ0MjM2MjQyMDkuLjhmNDJjMzg4NDhkYiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJz L2dwdS9kcm0vcm9ja2NoaXAvYW5hbG9naXhfZHAtcm9ja2NoaXAuYwo+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS9yb2NrY2hpcC9hbmFsb2dpeF9kcC1yb2NrY2hpcC5jCj4gQEAgLTMyLDcgKzMyLDYg QEAKPiAgI2luY2x1ZGUgPGRybS9icmlkZ2UvYW5hbG9naXhfZHAuaD4KPiAgCj4gICNpbmNsdWRl ICJyb2NrY2hpcF9kcm1fZHJ2LmgiCj4gLSNpbmNsdWRlICJyb2NrY2hpcF9kcm1fcHNyLmgiCj4g ICNpbmNsdWRlICJyb2NrY2hpcF9kcm1fdm9wLmgiCj4gIAo+ICAjZGVmaW5lIFJLMzI4OF9HUkZf U09DX0NPTjYJCTB4MjVjCj4gQEAgLTc3LDI5ICs3Niw2IEBAIHN0cnVjdCByb2NrY2hpcF9kcF9k ZXZpY2Ugewo+ICAJc3RydWN0IGFuYWxvZ2l4X2RwX3BsYXRfZGF0YSBwbGF0X2RhdGE7Cj4gIH07 Cj4gIAo+IC1zdGF0aWMgaW50IGFuYWxvZ2l4X2RwX3Bzcl9zZXQoc3RydWN0IGRybV9lbmNvZGVy ICplbmNvZGVyLCBib29sIGVuYWJsZWQpCj4gLXsKPiAtCXN0cnVjdCByb2NrY2hpcF9kcF9kZXZp Y2UgKmRwID0gdG9fZHAoZW5jb2Rlcik7Cj4gLQlpbnQgcmV0Owo+IC0KPiAtCWlmICghYW5hbG9n aXhfZHBfcHNyX2VuYWJsZWQoZHAtPmFkcCkpCj4gLQkJcmV0dXJuIDA7Cj4gLQo+IC0JRFJNX0RF Vl9ERUJVRyhkcC0+ZGV2LCAiJXMgUFNSLi4uXG4iLCBlbmFibGVkID8gIkVudHJ5IiA6ICJFeGl0 Iik7Cj4gLQo+IC0JcmV0ID0gcm9ja2NoaXBfZHJtX3dhaXRfdmFjdF9lbmQoZHAtPmVuY29kZXIu Y3J0YywKPiAtCQkJCQkgUFNSX1dBSVRfTElORV9GTEFHX1RJTUVPVVRfTVMpOwo+IC0JaWYgKHJl dCkgewo+IC0JCURSTV9ERVZfRVJST1IoZHAtPmRldiwgImxpbmUgZmxhZyBpbnRlcnJ1cHQgZGlk IG5vdCBhcnJpdmVcbiIpOwo+IC0JCXJldHVybiAtRVRJTUVET1VUOwo+IC0JfQo+IC0KPiAtCWlm IChlbmFibGVkKQo+IC0JCXJldHVybiBhbmFsb2dpeF9kcF9lbmFibGVfcHNyKGRwLT5hZHApOwo+ IC0JZWxzZQo+IC0JCXJldHVybiBhbmFsb2dpeF9kcF9kaXNhYmxlX3BzcihkcC0+YWRwKTsKPiAt fQo+IC0KPiAgc3RhdGljIGludCByb2NrY2hpcF9kcF9wcmVfaW5pdChzdHJ1Y3Qgcm9ja2NoaXBf ZHBfZGV2aWNlICpkcCkKPiAgewo+ICAJcmVzZXRfY29udHJvbF9hc3NlcnQoZHAtPnJzdCk7Cj4g QEAgLTEzMCwyMSArMTA2LDkgQEAgc3RhdGljIGludCByb2NrY2hpcF9kcF9wb3dlcm9uX3N0YXJ0 KHN0cnVjdCBhbmFsb2dpeF9kcF9wbGF0X2RhdGEgKnBsYXRfZGF0YSkKPiAgCXJldHVybiByZXQ7 Cj4gIH0KPiAgCj4gLXN0YXRpYyBpbnQgcm9ja2NoaXBfZHBfcG93ZXJvbl9lbmQoc3RydWN0IGFu YWxvZ2l4X2RwX3BsYXRfZGF0YSAqcGxhdF9kYXRhKQo+IC17Cj4gLQlzdHJ1Y3Qgcm9ja2NoaXBf ZHBfZGV2aWNlICpkcCA9IHRvX2RwKHBsYXRfZGF0YSk7Cj4gLQo+IC0JcmV0dXJuIHJvY2tjaGlw X2RybV9wc3JfaW5oaWJpdF9wdXQoJmRwLT5lbmNvZGVyKTsKPiAtfQo+IC0KPiAgc3RhdGljIGlu dCByb2NrY2hpcF9kcF9wb3dlcmRvd24oc3RydWN0IGFuYWxvZ2l4X2RwX3BsYXRfZGF0YSAqcGxh dF9kYXRhKQo+ICB7Cj4gIAlzdHJ1Y3Qgcm9ja2NoaXBfZHBfZGV2aWNlICpkcCA9IHRvX2RwKHBs YXRfZGF0YSk7Cj4gLQlpbnQgcmV0Owo+IC0KPiAtCXJldCA9IHJvY2tjaGlwX2RybV9wc3JfaW5o aWJpdF9nZXQoJmRwLT5lbmNvZGVyKTsKPiAtCWlmIChyZXQgIT0gMCkKPiAtCQlyZXR1cm4gcmV0 Owo+ICAKPiAgCWNsa19kaXNhYmxlX3VucHJlcGFyZShkcC0+cGNsayk7Cj4gIAo+IEBAIC0xOTAs NiArMTU0LDkgQEAgc3RhdGljIHZvaWQgcm9ja2NoaXBfZHBfZHJtX2VuY29kZXJfZW5hYmxlKHN0 cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKPiAgCWludCByZXQ7Cj4gIAl1MzIgdmFsOwo+ICAK PiArCWlmIChhbmFsb2dpeF9kcF9zZWxmX3JlZnJlc2hfY2hhbmdlZChkcC0+YWRwKSkKPiArCQly ZXR1cm47Cj4gKwo+ICAJcmV0ID0gZHJtX29mX2VuY29kZXJfYWN0aXZlX2VuZHBvaW50X2lkKGRw LT5kZXYtPm9mX25vZGUsIGVuY29kZXIpOwo+ICAJaWYgKHJldCA8IDApCj4gIAkJcmV0dXJuOwo+ IEBAIC0yMTQsOSArMTgxLDI0IEBAIHN0YXRpYyB2b2lkIHJvY2tjaGlwX2RwX2RybV9lbmNvZGVy X2VuYWJsZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCj4gIAljbGtfZGlzYWJsZV91bnBy ZXBhcmUoZHAtPmdyZmNsayk7Cj4gIH0KPiAgCj4gLXN0YXRpYyB2b2lkIHJvY2tjaGlwX2RwX2Ry bV9lbmNvZGVyX25vcChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCj4gK3N0YXRpYyB2b2lk IHJvY2tjaGlwX2RwX2RybV9lbmNvZGVyX2Rpc2FibGUoc3RydWN0IGRybV9lbmNvZGVyICplbmNv ZGVyKQo+ICB7Cj4gLQkvKiBkbyBub3RoaW5nICovCj4gKwlzdHJ1Y3Qgcm9ja2NoaXBfZHBfZGV2 aWNlICpkcCA9IHRvX2RwKGVuY29kZXIpOwo+ICsJc3RydWN0IGRybV9jcnRjICpjcnRjOwo+ICsJ aW50IHJldDsKPiArCj4gKwlkcm1fZm9yX2VhY2hfY3J0YyhjcnRjLCBkcC0+ZHJtX2Rldikgewo+ ICsJCWlmICghKGNydGMtPnN0YXRlLT5lbmNvZGVyX21hc2sgJiBkcm1fZW5jb2Rlcl9tYXNrKGVu Y29kZXIpKSkKPiArCQkJY29udGludWU7Cj4gKwo+ICsJCWlmICghY3J0Yy0+c3RhdGUtPnNlbGZf cmVmcmVzaF9hY3RpdmUpCj4gKwkJCWNvbnRpbnVlOwo+ICsKPiArCQlyZXQgPSByb2NrY2hpcF9k cm1fd2FpdF92YWN0X2VuZChjcnRjLAo+ICsJCQkJCQkgUFNSX1dBSVRfTElORV9GTEFHX1RJTUVP VVRfTVMpOwo+ICsJCWlmIChyZXQpCj4gKwkJCURSTV9ERVZfRVJST1IoZHAtPmRldiwgImxpbmUg ZmxhZyBpcnEgdGltZWQgb3V0XG4iKTsKPiArCX0KPiAgfQo+ICAKPiAgc3RhdGljIGludAo+IEBA IC0yNDYsNyArMjI4LDcgQEAgc3RhdGljIHN0cnVjdCBkcm1fZW5jb2Rlcl9oZWxwZXJfZnVuY3Mg cm9ja2NoaXBfZHBfZW5jb2Rlcl9oZWxwZXJfZnVuY3MgPSB7Cj4gIAkubW9kZV9maXh1cCA9IHJv Y2tjaGlwX2RwX2RybV9lbmNvZGVyX21vZGVfZml4dXAsCj4gIAkubW9kZV9zZXQgPSByb2NrY2hp cF9kcF9kcm1fZW5jb2Rlcl9tb2RlX3NldCwKPiAgCS5lbmFibGUgPSByb2NrY2hpcF9kcF9kcm1f ZW5jb2Rlcl9lbmFibGUsCj4gLQkuZGlzYWJsZSA9IHJvY2tjaGlwX2RwX2RybV9lbmNvZGVyX25v cCwKPiArCS5kaXNhYmxlID0gcm9ja2NoaXBfZHBfZHJtX2VuY29kZXJfZGlzYWJsZSwKPiAgCS5h dG9taWNfY2hlY2sgPSByb2NrY2hpcF9kcF9kcm1fZW5jb2Rlcl9hdG9taWNfY2hlY2ssCj4gIH07 Cj4gIAo+IEBAIC0zMzgsMjMgKzMyMCwxNiBAQCBzdGF0aWMgaW50IHJvY2tjaGlwX2RwX2JpbmQo c3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsCj4gIAo+ICAJZHAtPnBs YXRfZGF0YS5kZXZfdHlwZSA9IGRwLT5kYXRhLT5jaGlwX3R5cGU7Cj4gIAlkcC0+cGxhdF9kYXRh LnBvd2VyX29uX3N0YXJ0ID0gcm9ja2NoaXBfZHBfcG93ZXJvbl9zdGFydDsKPiAtCWRwLT5wbGF0 X2RhdGEucG93ZXJfb25fZW5kID0gcm9ja2NoaXBfZHBfcG93ZXJvbl9lbmQ7Cj4gIAlkcC0+cGxh dF9kYXRhLnBvd2VyX29mZiA9IHJvY2tjaGlwX2RwX3Bvd2VyZG93bjsKPiAgCWRwLT5wbGF0X2Rh dGEuZ2V0X21vZGVzID0gcm9ja2NoaXBfZHBfZ2V0X21vZGVzOwo+ICAKPiAtCXJldCA9IHJvY2tj aGlwX2RybV9wc3JfcmVnaXN0ZXIoJmRwLT5lbmNvZGVyLCBhbmFsb2dpeF9kcF9wc3Jfc2V0KTsK PiAtCWlmIChyZXQgPCAwKQo+IC0JCWdvdG8gZXJyX2NsZWFudXBfZW5jb2RlcjsKPiAtCj4gIAlk cC0+YWRwID0gYW5hbG9naXhfZHBfYmluZChkZXYsIGRwLT5kcm1fZGV2LCAmZHAtPnBsYXRfZGF0 YSk7Cj4gIAlpZiAoSVNfRVJSKGRwLT5hZHApKSB7Cj4gIAkJcmV0ID0gUFRSX0VSUihkcC0+YWRw KTsKPiAtCQlnb3RvIGVycl91bnJlZ19wc3I7Cj4gKwkJZ290byBlcnJfY2xlYW51cF9lbmNvZGVy Owo+ICAJfQo+ICAKPiAgCXJldHVybiAwOwo+IC1lcnJfdW5yZWdfcHNyOgo+IC0Jcm9ja2NoaXBf ZHJtX3Bzcl91bnJlZ2lzdGVyKCZkcC0+ZW5jb2Rlcik7Cj4gIGVycl9jbGVhbnVwX2VuY29kZXI6 Cj4gIAlkcC0+ZW5jb2Rlci5mdW5jcy0+ZGVzdHJveSgmZHAtPmVuY29kZXIpOwo+ICAJcmV0dXJu IHJldDsKPiBAQCAtMzY2LDcgKzM0MSw2IEBAIHN0YXRpYyB2b2lkIHJvY2tjaGlwX2RwX3VuYmlu ZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3RlciwKPiAgCXN0cnVjdCBy b2NrY2hpcF9kcF9kZXZpY2UgKmRwID0gZGV2X2dldF9kcnZkYXRhKGRldik7Cj4gIAo+ICAJYW5h bG9naXhfZHBfdW5iaW5kKGRwLT5hZHApOwo+IC0Jcm9ja2NoaXBfZHJtX3Bzcl91bnJlZ2lzdGVy KCZkcC0+ZW5jb2Rlcik7Cj4gIAlkcC0+ZW5jb2Rlci5mdW5jcy0+ZGVzdHJveSgmZHAtPmVuY29k ZXIpOwo+ICAKPiAgCWRwLT5hZHAgPSBFUlJfUFRSKC1FTk9ERVYpOwo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX2ZiLmMgYi9kcml2ZXJzL2dwdS9k cm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX2ZiLmMKPiBpbmRleCA5NzQzOGJiYmUzODkuLjdlMTIx ODc1ZTNjOSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBf ZHJtX2ZiLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX2Zi LmMKPiBAQCAtMjMsMjIgKzIzLDEwIEBACj4gICNpbmNsdWRlICJyb2NrY2hpcF9kcm1fZHJ2Lmgi Cj4gICNpbmNsdWRlICJyb2NrY2hpcF9kcm1fZmIuaCIKPiAgI2luY2x1ZGUgInJvY2tjaGlwX2Ry bV9nZW0uaCIKPiAtI2luY2x1ZGUgInJvY2tjaGlwX2RybV9wc3IuaCIKPiAtCj4gLXN0YXRpYyBp bnQgcm9ja2NoaXBfZHJtX2ZiX2RpcnR5KHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAo+IC0J CQkJIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSwKPiAtCQkJCSB1bnNpZ25lZCBpbnQgZmxhZ3MsIHVu c2lnbmVkIGludCBjb2xvciwKPiAtCQkJCSBzdHJ1Y3QgZHJtX2NsaXBfcmVjdCAqY2xpcHMsCj4g LQkJCQkgdW5zaWduZWQgaW50IG51bV9jbGlwcykKPiAtewo+IC0Jcm9ja2NoaXBfZHJtX3Bzcl9m bHVzaF9hbGwoZmItPmRldik7Cj4gLQlyZXR1cm4gMDsKPiAtfQo+ICAKPiAgc3RhdGljIGNvbnN0 IHN0cnVjdCBkcm1fZnJhbWVidWZmZXJfZnVuY3Mgcm9ja2NoaXBfZHJtX2ZiX2Z1bmNzID0gewo+ ICAJLmRlc3Ryb3kgICAgICAgPSBkcm1fZ2VtX2ZiX2Rlc3Ryb3ksCj4gIAkuY3JlYXRlX2hhbmRs ZSA9IGRybV9nZW1fZmJfY3JlYXRlX2hhbmRsZSwKPiAtCS5kaXJ0eQkgICAgICAgPSByb2NrY2hp cF9kcm1fZmJfZGlydHksCj4gIH07Cj4gIAo+ICBzdGF0aWMgc3RydWN0IGRybV9mcmFtZWJ1ZmZl ciAqCj4gQEAgLTEzMiw4ICsxMjAsNiBAQCByb2NrY2hpcF9hdG9taWNfaGVscGVyX2NvbW1pdF90 YWlsX3JwbShzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqb2xkX3N0YXRlKQo+ICB7Cj4gIAlzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2ID0gb2xkX3N0YXRlLT5kZXY7Cj4gIAo+IC0Jcm9ja2NoaXBfZHJt X3Bzcl9pbmhpYml0X2dldF9zdGF0ZShvbGRfc3RhdGUpOwo+IC0KPiAgCWRybV9hdG9taWNfaGVs cGVyX2NvbW1pdF9tb2Rlc2V0X2Rpc2FibGVzKGRldiwgb2xkX3N0YXRlKTsKPiAgCj4gIAlkcm1f YXRvbWljX2hlbHBlcl9jb21taXRfbW9kZXNldF9lbmFibGVzKGRldiwgb2xkX3N0YXRlKTsKPiBA QCAtMTQxLDggKzEyNyw2IEBAIHJvY2tjaGlwX2F0b21pY19oZWxwZXJfY29tbWl0X3RhaWxfcnBt KHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpvbGRfc3RhdGUpCj4gIAlkcm1fYXRvbWljX2hlbHBl cl9jb21taXRfcGxhbmVzKGRldiwgb2xkX3N0YXRlLAo+ICAJCQkJCURSTV9QTEFORV9DT01NSVRf QUNUSVZFX09OTFkpOwo+ICAKPiAtCXJvY2tjaGlwX2RybV9wc3JfaW5oaWJpdF9wdXRfc3RhdGUo b2xkX3N0YXRlKTsKPiAtCj4gIAlkcm1fYXRvbWljX2hlbHBlcl9jb21taXRfaHdfZG9uZShvbGRf c3RhdGUpOwo+ICAKPiAgCWRybV9hdG9taWNfaGVscGVyX3dhaXRfZm9yX3ZibGFua3MoZGV2LCBv bGRfc3RhdGUpOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2No aXBfZHJtX3Bzci5jIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV9wc3Iu Ywo+IGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IGEwYzhiZDIzNWI2Ny4uMDAwMDAw MDAwMDAwCj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV9wc3Iu Ywo+ICsrKyAvZGV2L251bGwKPiBAQCAtMSwyOTAgKzAsMCBAQAo+IC0vKgo+IC0gKiBDb3B5cmln aHQgKEMpIEZ1emhvdSBSb2NrY2hpcCBFbGVjdHJvbmljcyBDby5MdGQKPiAtICogQXV0aG9yOiBZ YWtpciBZYW5nIDx5a2tAcm9jay1jaGlwcy5jb20+Cj4gLSAqCj4gLSAqIFRoaXMgc29mdHdhcmUg aXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKPiAt ICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uLCBhbmQKPiAtICogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2Rp ZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KPiAtICoKPiAtICogVGhpcyBwcm9ncmFtIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4gLSAqIGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4g LSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g IFNlZSB0aGUKPiAtICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls cy4KPiAtICovCj4gLQo+IC0jaW5jbHVkZSA8ZHJtL2RybVAuaD4KPiAtI2luY2x1ZGUgPGRybS9k cm1fYXRvbWljLmg+Cj4gLSNpbmNsdWRlIDxkcm0vZHJtX3Byb2JlX2hlbHBlci5oPgo+IC0KPiAt I2luY2x1ZGUgInJvY2tjaGlwX2RybV9kcnYuaCIKPiAtI2luY2x1ZGUgInJvY2tjaGlwX2RybV9w c3IuaCIKPiAtCj4gLSNkZWZpbmUgUFNSX0ZMVVNIX1RJTUVPVVRfTVMJMTAwCj4gLQo+IC1zdHJ1 Y3QgcHNyX2RydiB7Cj4gLQlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7Cj4gLQlzdHJ1Y3QgZHJtX2Vu Y29kZXIJKmVuY29kZXI7Cj4gLQo+IC0Jc3RydWN0IG11dGV4CQlsb2NrOwo+IC0JaW50CQkJaW5o aWJpdF9jb3VudDsKPiAtCWJvb2wJCQllbmFibGVkOwo+IC0KPiAtCXN0cnVjdCBkZWxheWVkX3dv cmsJZmx1c2hfd29yazsKPiAtCj4gLQlpbnQgKCpzZXQpKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5j b2RlciwgYm9vbCBlbmFibGUpOwo+IC19Owo+IC0KPiAtc3RhdGljIHN0cnVjdCBwc3JfZHJ2ICpm aW5kX3Bzcl9ieV9lbmNvZGVyKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKPiAtewo+IC0J c3RydWN0IHJvY2tjaGlwX2RybV9wcml2YXRlICpkcm1fZHJ2ID0gZW5jb2Rlci0+ZGV2LT5kZXZf cHJpdmF0ZTsKPiAtCXN0cnVjdCBwc3JfZHJ2ICpwc3I7Cj4gLQo+IC0JbXV0ZXhfbG9jaygmZHJt X2Rydi0+cHNyX2xpc3RfbG9jayk7Cj4gLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBzciwgJmRybV9k cnYtPnBzcl9saXN0LCBsaXN0KSB7Cj4gLQkJaWYgKHBzci0+ZW5jb2RlciA9PSBlbmNvZGVyKQo+ IC0JCQlnb3RvIG91dDsKPiAtCX0KPiAtCXBzciA9IEVSUl9QVFIoLUVOT0RFVik7Cj4gLQo+IC1v dXQ6Cj4gLQltdXRleF91bmxvY2soJmRybV9kcnYtPnBzcl9saXN0X2xvY2spOwo+IC0JcmV0dXJu IHBzcjsKPiAtfQo+IC0KPiAtc3RhdGljIGludCBwc3Jfc2V0X3N0YXRlX2xvY2tlZChzdHJ1Y3Qg cHNyX2RydiAqcHNyLCBib29sIGVuYWJsZSkKPiAtewo+IC0JaW50IHJldDsKPiAtCj4gLQlpZiAo cHNyLT5pbmhpYml0X2NvdW50ID4gMCkKPiAtCQlyZXR1cm4gLUVJTlZBTDsKPiAtCj4gLQlpZiAo ZW5hYmxlID09IHBzci0+ZW5hYmxlZCkKPiAtCQlyZXR1cm4gMDsKPiAtCj4gLQlyZXQgPSBwc3It PnNldChwc3ItPmVuY29kZXIsIGVuYWJsZSk7Cj4gLQlpZiAocmV0KQo+IC0JCXJldHVybiByZXQ7 Cj4gLQo+IC0JcHNyLT5lbmFibGVkID0gZW5hYmxlOwo+IC0JcmV0dXJuIDA7Cj4gLX0KPiAtCj4g LXN0YXRpYyB2b2lkIHBzcl9mbHVzaF9oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykK PiAtewo+IC0Jc3RydWN0IHBzcl9kcnYgKnBzciA9IGNvbnRhaW5lcl9vZih0b19kZWxheWVkX3dv cmsod29yayksCj4gLQkJCQkJICAgc3RydWN0IHBzcl9kcnYsIGZsdXNoX3dvcmspOwo+IC0KPiAt CW11dGV4X2xvY2soJnBzci0+bG9jayk7Cj4gLQlwc3Jfc2V0X3N0YXRlX2xvY2tlZChwc3IsIHRy dWUpOwo+IC0JbXV0ZXhfdW5sb2NrKCZwc3ItPmxvY2spOwo+IC19Cj4gLQo+IC0vKioKPiAtICog cm9ja2NoaXBfZHJtX3Bzcl9pbmhpYml0X3B1dCAtIHJlbGVhc2UgUFNSIGluaGliaXQgb24gZ2l2 ZW4gZW5jb2Rlcgo+IC0gKiBAZW5jb2RlcjogZW5jb2RlciB0byBvYnRhaW4gdGhlIFBTUiBlbmNv ZGVyCj4gLSAqCj4gLSAqIERlY3JlbWVudHMgUFNSIGluaGliaXQgY291bnQgb24gZ2l2ZW4gZW5j b2Rlci4gU2hvdWxkIGJlIGNhbGxlZCBvbmx5Cj4gLSAqIGZvciBhIFBTUiBpbmhpYml0IGNvdW50 IGluY3JlbWVudCBkb25lIGJlZm9yZS4gSWYgUFNSIGluaGliaXQgY291bnRlcgo+IC0gKiByZWFj aGVzIHplcm8sIFBTUiBmbHVzaCB3b3JrIGlzIHNjaGVkdWxlZCB0byBtYWtlIHRoZSBoYXJkd2Fy ZSBlbnRlcgo+IC0gKiBQU1IgbW9kZSBpbiBQU1JfRkxVU0hfVElNRU9VVF9NUy4KPiAtICoKPiAt ICogUmV0dXJuczoKPiAtICogWmVybyBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJubyBvbiBmYWls dXJlLgo+IC0gKi8KPiAtaW50IHJvY2tjaGlwX2RybV9wc3JfaW5oaWJpdF9wdXQoc3RydWN0IGRy bV9lbmNvZGVyICplbmNvZGVyKQo+IC17Cj4gLQlzdHJ1Y3QgcHNyX2RydiAqcHNyID0gZmluZF9w c3JfYnlfZW5jb2RlcihlbmNvZGVyKTsKPiAtCj4gLQlpZiAoSVNfRVJSKHBzcikpCj4gLQkJcmV0 dXJuIFBUUl9FUlIocHNyKTsKPiAtCj4gLQltdXRleF9sb2NrKCZwc3ItPmxvY2spOwo+IC0JLS1w c3ItPmluaGliaXRfY291bnQ7Cj4gLQlXQVJOX09OKHBzci0+aW5oaWJpdF9jb3VudCA8IDApOwo+ IC0JaWYgKCFwc3ItPmluaGliaXRfY291bnQpCj4gLQkJbW9kX2RlbGF5ZWRfd29yayhzeXN0ZW1f d3EsICZwc3ItPmZsdXNoX3dvcmssCj4gLQkJCQkgUFNSX0ZMVVNIX1RJTUVPVVRfTVMpOwo+IC0J bXV0ZXhfdW5sb2NrKCZwc3ItPmxvY2spOwo+IC0KPiAtCXJldHVybiAwOwo+IC19Cj4gLUVYUE9S VF9TWU1CT0wocm9ja2NoaXBfZHJtX3Bzcl9pbmhpYml0X3B1dCk7Cj4gLQo+IC12b2lkIHJvY2tj aGlwX2RybV9wc3JfaW5oaWJpdF9nZXRfc3RhdGUoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0 YXRlKQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7Cj4gLQlzdHJ1Y3QgZHJtX2NydGNf c3RhdGUgKmNydGNfc3RhdGU7Cj4gLQlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7Cj4gLQl1 MzIgZW5jb2Rlcl9tYXNrID0gMDsKPiAtCWludCBpOwo+IC0KPiAtCWZvcl9lYWNoX29sZF9jcnRj X2luX3N0YXRlKHN0YXRlLCBjcnRjLCBjcnRjX3N0YXRlLCBpKSB7Cj4gLQkJZW5jb2Rlcl9tYXNr IHw9IGNydGNfc3RhdGUtPmVuY29kZXJfbWFzazsKPiAtCQllbmNvZGVyX21hc2sgfD0gY3J0Yy0+ c3RhdGUtPmVuY29kZXJfbWFzazsKPiAtCX0KPiAtCj4gLQlkcm1fZm9yX2VhY2hfZW5jb2Rlcl9t YXNrKGVuY29kZXIsIHN0YXRlLT5kZXYsIGVuY29kZXJfbWFzaykKPiAtCQlyb2NrY2hpcF9kcm1f cHNyX2luaGliaXRfZ2V0KGVuY29kZXIpOwo+IC19Cj4gLUVYUE9SVF9TWU1CT0wocm9ja2NoaXBf ZHJtX3Bzcl9pbmhpYml0X2dldF9zdGF0ZSk7Cj4gLQo+IC12b2lkIHJvY2tjaGlwX2RybV9wc3Jf aW5oaWJpdF9wdXRfc3RhdGUoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQo+IC17Cj4g LQlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7Cj4gLQlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNf c3RhdGU7Cj4gLQlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7Cj4gLQl1MzIgZW5jb2Rlcl9t YXNrID0gMDsKPiAtCWludCBpOwo+IC0KPiAtCWZvcl9lYWNoX29sZF9jcnRjX2luX3N0YXRlKHN0 YXRlLCBjcnRjLCBjcnRjX3N0YXRlLCBpKSB7Cj4gLQkJZW5jb2Rlcl9tYXNrIHw9IGNydGNfc3Rh dGUtPmVuY29kZXJfbWFzazsKPiAtCQllbmNvZGVyX21hc2sgfD0gY3J0Yy0+c3RhdGUtPmVuY29k ZXJfbWFzazsKPiAtCX0KPiAtCj4gLQlkcm1fZm9yX2VhY2hfZW5jb2Rlcl9tYXNrKGVuY29kZXIs IHN0YXRlLT5kZXYsIGVuY29kZXJfbWFzaykKPiAtCQlyb2NrY2hpcF9kcm1fcHNyX2luaGliaXRf cHV0KGVuY29kZXIpOwo+IC19Cj4gLUVYUE9SVF9TWU1CT0wocm9ja2NoaXBfZHJtX3Bzcl9pbmhp Yml0X3B1dF9zdGF0ZSk7Cj4gLQo+IC0vKioKPiAtICogcm9ja2NoaXBfZHJtX3Bzcl9pbmhpYml0 X2dldCAtIGFjcXVpcmUgUFNSIGluaGliaXQgb24gZ2l2ZW4gZW5jb2Rlcgo+IC0gKiBAZW5jb2Rl cjogZW5jb2RlciB0byBvYnRhaW4gdGhlIFBTUiBlbmNvZGVyCj4gLSAqCj4gLSAqIEluY3JlbWVu dHMgUFNSIGluaGliaXQgY291bnQgb24gZ2l2ZW4gZW5jb2Rlci4gVGhpcyBmdW5jdGlvbiBndWFy YW50ZWVzCj4gLSAqIHRoYXQgYWZ0ZXIgaXQgcmV0dXJucyBQU1IgaXMgdHVybmVkIG9mZiBvbiBn aXZlbiBlbmNvZGVyIGFuZCBubyBQU1ItcmVsYXRlZAo+IC0gKiBoYXJkd2FyZSBzdGF0ZSBjaGFu Z2Ugb2NjdXJzIGF0IGxlYXN0IHVudGlsIGEgbWF0Y2hpbmcgY2FsbCB0bwo+IC0gKiByb2NrY2hp cF9kcm1fcHNyX2luaGliaXRfcHV0KCkgaXMgZG9uZS4KPiAtICoKPiAtICogUmV0dXJuczoKPiAt ICogWmVybyBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlLgo+IC0gKi8KPiAt aW50IHJvY2tjaGlwX2RybV9wc3JfaW5oaWJpdF9nZXQoc3RydWN0IGRybV9lbmNvZGVyICplbmNv ZGVyKQo+IC17Cj4gLQlzdHJ1Y3QgcHNyX2RydiAqcHNyID0gZmluZF9wc3JfYnlfZW5jb2Rlcihl bmNvZGVyKTsKPiAtCj4gLQlpZiAoSVNfRVJSKHBzcikpCj4gLQkJcmV0dXJuIFBUUl9FUlIocHNy KTsKPiAtCj4gLQltdXRleF9sb2NrKCZwc3ItPmxvY2spOwo+IC0JcHNyX3NldF9zdGF0ZV9sb2Nr ZWQocHNyLCBmYWxzZSk7Cj4gLQkrK3Bzci0+aW5oaWJpdF9jb3VudDsKPiAtCW11dGV4X3VubG9j aygmcHNyLT5sb2NrKTsKPiAtCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcHNyLT5mbHVzaF93 b3JrKTsKPiAtCj4gLQlyZXR1cm4gMDsKPiAtfQo+IC1FWFBPUlRfU1lNQk9MKHJvY2tjaGlwX2Ry bV9wc3JfaW5oaWJpdF9nZXQpOwo+IC0KPiAtc3RhdGljIHZvaWQgcm9ja2NoaXBfZHJtX2RvX2Zs dXNoKHN0cnVjdCBwc3JfZHJ2ICpwc3IpCj4gLXsKPiAtCWNhbmNlbF9kZWxheWVkX3dvcmtfc3lu YygmcHNyLT5mbHVzaF93b3JrKTsKPiAtCj4gLQltdXRleF9sb2NrKCZwc3ItPmxvY2spOwo+IC0J aWYgKCFwc3Jfc2V0X3N0YXRlX2xvY2tlZChwc3IsIGZhbHNlKSkKPiAtCQltb2RfZGVsYXllZF93 b3JrKHN5c3RlbV93cSwgJnBzci0+Zmx1c2hfd29yaywKPiAtCQkJCSBQU1JfRkxVU0hfVElNRU9V VF9NUyk7Cj4gLQltdXRleF91bmxvY2soJnBzci0+bG9jayk7Cj4gLX0KPiAtCj4gLS8qKgo+IC0g KiByb2NrY2hpcF9kcm1fcHNyX2ZsdXNoX2FsbCAtIGZvcmNlIHRvIGZsdXNoIGFsbCByZWdpc3Rl cmVkIFBTUiBlbmNvZGVycwo+IC0gKiBAZGV2OiBkcm0gZGV2aWNlCj4gLSAqCj4gLSAqIERpc2Fi bGUgdGhlIFBTUiBmdW5jdGlvbiBmb3IgYWxsIHJlZ2lzdGVyZWQgZW5jb2RlcnMsIGFuZCB0aGVu IGVuYWJsZSB0aGUKPiAtICogUFNSIGZ1bmN0aW9uIGJhY2sgYWZ0ZXIgUFNSX0ZMVVNIX1RJTUVP VVQuIElmIGVuY29kZXIgUFNSIHN0YXRlIGhhdmUgYmVlbgo+IC0gKiBjaGFuZ2VkIGR1cmluZyBm bHVzaCB0aW1lLCB0aGVuIGtlZXAgdGhlIHN0YXRlIG5vIGNoYW5nZSBhZnRlciBmbHVzaAo+IC0g KiB0aW1lb3V0Lgo+IC0gKgo+IC0gKiBSZXR1cm5zOgo+IC0gKiBaZXJvIG9uIHN1Y2Nlc3MsIG5l Z2F0aXZlIGVycm5vIG9uIGZhaWx1cmUuCj4gLSAqLwo+IC12b2lkIHJvY2tjaGlwX2RybV9wc3Jf Zmx1c2hfYWxsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gLXsKPiAtCXN0cnVjdCByb2NrY2hp cF9kcm1fcHJpdmF0ZSAqZHJtX2RydiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gLQlzdHJ1Y3QgcHNy X2RydiAqcHNyOwo+IC0KPiAtCW11dGV4X2xvY2soJmRybV9kcnYtPnBzcl9saXN0X2xvY2spOwo+ IC0JbGlzdF9mb3JfZWFjaF9lbnRyeShwc3IsICZkcm1fZHJ2LT5wc3JfbGlzdCwgbGlzdCkKPiAt CQlyb2NrY2hpcF9kcm1fZG9fZmx1c2gocHNyKTsKPiAtCW11dGV4X3VubG9jaygmZHJtX2Rydi0+ cHNyX2xpc3RfbG9jayk7Cj4gLX0KPiAtRVhQT1JUX1NZTUJPTChyb2NrY2hpcF9kcm1fcHNyX2Zs dXNoX2FsbCk7Cj4gLQo+IC0vKioKPiAtICogcm9ja2NoaXBfZHJtX3Bzcl9yZWdpc3RlciAtIHJl Z2lzdGVyIGVuY29kZXIgdG8gcHNyIGRyaXZlcgo+IC0gKiBAZW5jb2RlcjogZW5jb2RlciB0aGF0 IG9idGFpbiB0aGUgUFNSIGZ1bmN0aW9uCj4gLSAqIEBwc3Jfc2V0OiBjYWxsIGJhY2sgdG8gc2V0 IFBTUiBzdGF0ZQo+IC0gKgo+IC0gKiBUaGUgZnVuY3Rpb24gcmV0dXJucyB3aXRoIFBTUiBpbmhp Yml0IGNvdW50ZXIgaW5pdGlhbGl6ZWQgd2l0aCBvbmUKPiAtICogYW5kIHRoZSBjYWxsZXIgKHR5 cGljYWxseSBlbmNvZGVyIGRyaXZlcikgbmVlZHMgdG8gY2FsbAo+IC0gKiByb2NrY2hpcF9kcm1f cHNyX2luaGliaXRfcHV0KCkgd2hlbiBpdCBiZWNvbWVzIHJlYWR5IHRvIGFjY2VwdCBQU1IKPiAt ICogZW5hYmxlIHJlcXVlc3QuCj4gLSAqCj4gLSAqIFJldHVybnM6Cj4gLSAqIFplcm8gb24gc3Vj Y2VzcywgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZS4KPiAtICovCj4gLWludCByb2NrY2hpcF9k cm1fcHNyX3JlZ2lzdGVyKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKPiAtCQkJaW50ICgq cHNyX3NldCkoc3RydWN0IGRybV9lbmNvZGVyICosIGJvb2wgZW5hYmxlKSkKPiAtewo+IC0Jc3Ry dWN0IHJvY2tjaGlwX2RybV9wcml2YXRlICpkcm1fZHJ2Owo+IC0Jc3RydWN0IHBzcl9kcnYgKnBz cjsKPiAtCj4gLQlpZiAoIWVuY29kZXIgfHwgIXBzcl9zZXQpCj4gLQkJcmV0dXJuIC1FSU5WQUw7 Cj4gLQo+IC0JZHJtX2RydiA9IGVuY29kZXItPmRldi0+ZGV2X3ByaXZhdGU7Cj4gLQo+IC0JcHNy ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBzcl9kcnYpLCBHRlBfS0VSTkVMKTsKPiAtCWlmICgh cHNyKQo+IC0JCXJldHVybiAtRU5PTUVNOwo+IC0KPiAtCUlOSVRfREVMQVlFRF9XT1JLKCZwc3It PmZsdXNoX3dvcmssIHBzcl9mbHVzaF9oYW5kbGVyKTsKPiAtCW11dGV4X2luaXQoJnBzci0+bG9j ayk7Cj4gLQo+IC0JcHNyLT5pbmhpYml0X2NvdW50ID0gMTsKPiAtCXBzci0+ZW5hYmxlZCA9IGZh bHNlOwo+IC0JcHNyLT5lbmNvZGVyID0gZW5jb2RlcjsKPiAtCXBzci0+c2V0ID0gcHNyX3NldDsK PiAtCj4gLQltdXRleF9sb2NrKCZkcm1fZHJ2LT5wc3JfbGlzdF9sb2NrKTsKPiAtCWxpc3RfYWRk X3RhaWwoJnBzci0+bGlzdCwgJmRybV9kcnYtPnBzcl9saXN0KTsKPiAtCW11dGV4X3VubG9jaygm ZHJtX2Rydi0+cHNyX2xpc3RfbG9jayk7Cj4gLQo+IC0JcmV0dXJuIDA7Cj4gLX0KPiAtRVhQT1JU X1NZTUJPTChyb2NrY2hpcF9kcm1fcHNyX3JlZ2lzdGVyKTsKPiAtCj4gLS8qKgo+IC0gKiByb2Nr Y2hpcF9kcm1fcHNyX3VucmVnaXN0ZXIgLSB1bnJlZ2lzdGVyIGVuY29kZXIgdG8gcHNyIGRyaXZl cgo+IC0gKiBAZW5jb2RlcjogZW5jb2RlciB0aGF0IG9idGFpbiB0aGUgUFNSIGZ1bmN0aW9uCj4g LSAqIEBwc3Jfc2V0OiBjYWxsIGJhY2sgdG8gc2V0IFBTUiBzdGF0ZQo+IC0gKgo+IC0gKiBJdCBp cyBleHBlY3RlZCB0aGF0IHRoZSBQU1IgaW5oaWJpdCBjb3VudGVyIGlzIDEgd2hlbiB0aGlzIGZ1 bmN0aW9uIGlzCj4gLSAqIGNhbGxlZCwgd2hpY2ggY29ycmVzcG9uZHMgdG8gYSBzdGF0ZSB3aGVu IHJlbGF0ZWQgZW5jb2RlciBoYXMgYmVlbgo+IC0gKiBkaXNjb25uZWN0ZWQgZnJvbSBhbnkgQ1JU Q3MgYW5kIGl0cyBkcml2ZXIgY2FsbGVkCj4gLSAqIHJvY2tjaGlwX2RybV9wc3JfaW5oaWJpdF9n ZXQoKSB0byBzdG9wIHRoZSBQU1IgbG9naWMuCj4gLSAqCj4gLSAqIFJldHVybnM6Cj4gLSAqIFpl cm8gb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZS4KPiAtICovCj4gLXZvaWQg cm9ja2NoaXBfZHJtX3Bzcl91bnJlZ2lzdGVyKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikK PiAtewo+IC0Jc3RydWN0IHJvY2tjaGlwX2RybV9wcml2YXRlICpkcm1fZHJ2ID0gZW5jb2Rlci0+ ZGV2LT5kZXZfcHJpdmF0ZTsKPiAtCXN0cnVjdCBwc3JfZHJ2ICpwc3IsICpuOwo+IC0KPiAtCW11 dGV4X2xvY2soJmRybV9kcnYtPnBzcl9saXN0X2xvY2spOwo+IC0JbGlzdF9mb3JfZWFjaF9lbnRy eV9zYWZlKHBzciwgbiwgJmRybV9kcnYtPnBzcl9saXN0LCBsaXN0KSB7Cj4gLQkJaWYgKHBzci0+ ZW5jb2RlciA9PSBlbmNvZGVyKSB7Cj4gLQkJCS8qCj4gLQkJCSAqIEFueSBvdGhlciB2YWx1ZSB3 b3VsZCBtZWFuIHRoYXQgdGhlIGVuY29kZXIKPiAtCQkJICogaXMgc3RpbGwgaW4gdXNlLgo+IC0J CQkgKi8KPiAtCQkJV0FSTl9PTihwc3ItPmluaGliaXRfY291bnQgIT0gMSk7Cj4gLQo+IC0JCQls aXN0X2RlbCgmcHNyLT5saXN0KTsKPiAtCQkJa2ZyZWUocHNyKTsKPiAtCQl9Cj4gLQl9Cj4gLQlt dXRleF91bmxvY2soJmRybV9kcnYtPnBzcl9saXN0X2xvY2spOwo+IC19Cj4gLUVYUE9SVF9TWU1C T0wocm9ja2NoaXBfZHJtX3Bzcl91bnJlZ2lzdGVyKTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV9wc3IuaCBiL2RyaXZlcnMvZ3B1L2RybS9yb2Nr Y2hpcC9yb2NrY2hpcF9kcm1fcHNyLmgKPiBkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRl eCAyNTM1MGJhMzIzN2IuLjAwMDAwMDAwMDAwMAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yb2Nr Y2hpcC9yb2NrY2hpcF9kcm1fcHNyLmgKPiArKysgL2Rldi9udWxsCj4gQEAgLTEsMzAgKzAsMCBA QAo+IC0vKgo+IC0gKiBDb3B5cmlnaHQgKEMpIEZ1emhvdSBSb2NrY2hpcCBFbGVjdHJvbmljcyBD by5MdGQKPiAtICogQXV0aG9yOiBZYWtpciBZYW5nIDx5a2tAcm9jay1jaGlwcy5jb20+Cj4gLSAq Cj4gLSAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMKPiAtICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBi eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKPiAtICogbWF5IGJlIGNvcGllZCwg ZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KPiAtICoKPiAtICog VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsCj4gLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp bXBsaWVkIHdhcnJhbnR5IG9mCj4gLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKPiAtICogR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPiAtICovCj4gLQo+IC0jaWZuZGVmIF9fUk9DS0NISVBf RFJNX1BTUl9fXwo+IC0jZGVmaW5lIF9fUk9DS0NISVBfRFJNX1BTUl9fXwo+IC0KPiAtdm9pZCBy b2NrY2hpcF9kcm1fcHNyX2ZsdXNoX2FsbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKPiAtCj4g LWludCByb2NrY2hpcF9kcm1fcHNyX2luaGliaXRfcHV0KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5j b2Rlcik7Cj4gLWludCByb2NrY2hpcF9kcm1fcHNyX2luaGliaXRfZ2V0KHN0cnVjdCBkcm1fZW5j b2RlciAqZW5jb2Rlcik7Cj4gLQo+IC12b2lkIHJvY2tjaGlwX2RybV9wc3JfaW5oaWJpdF9nZXRf c3RhdGUoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKTsKPiAtdm9pZCByb2NrY2hpcF9k cm1fcHNyX2luaGliaXRfcHV0X3N0YXRlKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSk7 Cj4gLQo+IC1pbnQgcm9ja2NoaXBfZHJtX3Bzcl9yZWdpc3RlcihzdHJ1Y3QgZHJtX2VuY29kZXIg KmVuY29kZXIsCj4gLQkJCWludCAoKnBzcl9zZXQpKHN0cnVjdCBkcm1fZW5jb2RlciAqLCBib29s IGVuYWJsZSkpOwo+IC12b2lkIHJvY2tjaGlwX2RybV9wc3JfdW5yZWdpc3RlcihzdHJ1Y3QgZHJt X2VuY29kZXIgKmVuY29kZXIpOwo+IC0KPiAtI2VuZGlmIC8qIF9fUk9DS0NISVBfRFJNX1BTUl9f ICovCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1f dm9wLmMgYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX3ZvcC5jCj4gaW5k ZXggYzdkNGM2MDczZWE1Li4yMWZjY2RhNzAzNTYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUv ZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV92b3AuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9y b2NrY2hpcC9yb2NrY2hpcF9kcm1fdm9wLmMKPiBAQCAtMjEsNiArMjEsNyBAQAo+ICAjaW5jbHVk ZSA8ZHJtL2RybV9nZW1fZnJhbWVidWZmZXJfaGVscGVyLmg+Cj4gICNpbmNsdWRlIDxkcm0vZHJt X3BsYW5lX2hlbHBlci5oPgo+ICAjaW5jbHVkZSA8ZHJtL2RybV9wcm9iZV9oZWxwZXIuaD4KPiAr I2luY2x1ZGUgPGRybS9kcm1fc2VsZl9yZWZyZXNoX2hlbHBlci5oPgo+ICAjaWZkZWYgQ09ORklH X0RSTV9BTkFMT0dJWF9EUAo+ICAjaW5jbHVkZSA8ZHJtL2JyaWRnZS9hbmFsb2dpeF9kcC5oPgo+ ICAjZW5kaWYKPiBAQCAtNDIsMTAgKzQzLDExIEBACj4gICNpbmNsdWRlICJyb2NrY2hpcF9kcm1f ZHJ2LmgiCj4gICNpbmNsdWRlICJyb2NrY2hpcF9kcm1fZ2VtLmgiCj4gICNpbmNsdWRlICJyb2Nr Y2hpcF9kcm1fZmIuaCIKPiAtI2luY2x1ZGUgInJvY2tjaGlwX2RybV9wc3IuaCIKPiAgI2luY2x1 ZGUgInJvY2tjaGlwX2RybV92b3AuaCIKPiAgI2luY2x1ZGUgInJvY2tjaGlwX3JnYi5oIgo+ICAK PiArI2RlZmluZSBWT1BfU0VMRl9SRUZSRVNIX0VOVFJZX0RFTEFZX01TIDEwMAo+ICsKPiAgI2Rl ZmluZSBWT1BfV0lOX1NFVCh2b3AsIHdpbiwgbmFtZSwgdikgXAo+ICAJCXZvcF9yZWdfc2V0KHZv cCwgJndpbi0+cGh5LT5uYW1lLCB3aW4tPmJhc2UsIH4wLCB2LCAjbmFtZSkKPiAgI2RlZmluZSBW T1BfU0NMX1NFVCh2b3AsIHdpbiwgbmFtZSwgdikgXAo+IEBAIC01NDEsNyArNTQzLDcgQEAgc3Rh dGljIHZvaWQgdm9wX2NvcmVfY2xrc19kaXNhYmxlKHN0cnVjdCB2b3AgKnZvcCkKPiAgCWNsa19k aXNhYmxlKHZvcC0+aGNsayk7Cj4gIH0KPiAgCj4gLXN0YXRpYyBpbnQgdm9wX2VuYWJsZShzdHJ1 Y3QgZHJtX2NydGMgKmNydGMpCj4gK3N0YXRpYyBpbnQgdm9wX2VuYWJsZShzdHJ1Y3QgZHJtX2Ny dGMgKmNydGMsIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqb2xkX3N0YXRlKQo+ICB7Cj4gIAlzdHJ1 Y3Qgdm9wICp2b3AgPSB0b192b3AoY3J0Yyk7Cj4gIAlpbnQgcmV0LCBpOwo+IEBAIC01ODEsMTIg KzU4MywxOCBAQCBzdGF0aWMgaW50IHZvcF9lbmFibGUoc3RydWN0IGRybV9jcnRjICpjcnRjKQo+ ICAJICogV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBhbGwgd2luZG93cyBhcmUgZGlzYWJsZWQg YmVmb3JlIHdlCj4gIAkgKiBlbmFibGUgdGhlIGNydGMuIE90aGVyd2lzZSB3ZSBtaWdodCB0cnkg dG8gc2NhbiBmcm9tIGEgZGVzdHJveWVkCj4gIAkgKiBidWZmZXIgbGF0ZXIuCj4gKwkgKgo+ICsJ ICogSW4gdGhlIGNhc2Ugb2YgZW5hYmxlLWFmdGVyLVBTUiwgd2UgZG9uJ3QgbmVlZCB0byB3b3Jy eSBhYm91dCB0aGlzCj4gKwkgKiBjYXNlIHNpbmNlIHRoZSBidWZmZXIgaXMgZ3VhcmFudGVlZCB0 byBiZSB2YWxpZCBhbmQgZGlzYWJsaW5nIHRoZQo+ICsJICogd2luZG93IHdpbGwgcmVzdWx0IGlu IHNjcmVlbiBnbGl0Y2hlcyBvbiBQU1IgZXhpdC4KPiAgCSAqLwo+IC0JZm9yIChpID0gMDsgaSA8 IHZvcC0+ZGF0YS0+d2luX3NpemU7IGkrKykgewo+IC0JCXN0cnVjdCB2b3Bfd2luICp2b3Bfd2lu ID0gJnZvcC0+d2luW2ldOwo+IC0JCWNvbnN0IHN0cnVjdCB2b3Bfd2luX2RhdGEgKndpbiA9IHZv cF93aW4tPmRhdGE7Cj4gKwlpZiAoIW9sZF9zdGF0ZSB8fCAhb2xkX3N0YXRlLT5zZWxmX3JlZnJl c2hfYWN0aXZlKSB7Cj4gKwkJZm9yIChpID0gMDsgaSA8IHZvcC0+ZGF0YS0+d2luX3NpemU7IGkr Kykgewo+ICsJCQlzdHJ1Y3Qgdm9wX3dpbiAqdm9wX3dpbiA9ICZ2b3AtPndpbltpXTsKPiArCQkJ Y29uc3Qgc3RydWN0IHZvcF93aW5fZGF0YSAqd2luID0gdm9wX3dpbi0+ZGF0YTsKPiAgCj4gLQkJ Vk9QX1dJTl9TRVQodm9wLCB3aW4sIGVuYWJsZSwgMCk7Cj4gKwkJCVZPUF9XSU5fU0VUKHZvcCwg d2luLCBlbmFibGUsIDApOwo+ICsJCX0KPiAgCX0KPiAgCXNwaW5fdW5sb2NrKCZ2b3AtPnJlZ19s b2NrKTsKPiAgCj4gQEAgLTkzNywxMiArOTQ1LDEwIEBAIHN0YXRpYyB2b2lkIHZvcF9wbGFuZV9h dG9taWNfYXN5bmNfdXBkYXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ICAJfQo+ICAKPiAg CWlmICh2b3AtPmlzX2VuYWJsZWQpIHsKPiAtCQlyb2NrY2hpcF9kcm1fcHNyX2luaGliaXRfZ2V0 X3N0YXRlKG5ld19zdGF0ZS0+c3RhdGUpOwo+ICAJCXZvcF9wbGFuZV9hdG9taWNfdXBkYXRlKHBs YW5lLCBwbGFuZS0+c3RhdGUpOwo+ICAJCXNwaW5fbG9jaygmdm9wLT5yZWdfbG9jayk7Cj4gIAkJ dm9wX2NmZ19kb25lKHZvcCk7Cj4gIAkJc3Bpbl91bmxvY2soJnZvcC0+cmVnX2xvY2spOwo+IC0J CXJvY2tjaGlwX2RybV9wc3JfaW5oaWJpdF9wdXRfc3RhdGUobmV3X3N0YXRlLT5zdGF0ZSk7Cj4g IAl9Cj4gIAo+ICAJcGxhbmUtPmZ1bmNzLT5hdG9taWNfZGVzdHJveV9zdGF0ZShwbGFuZSwgcGxh bmVfc3RhdGUpOwo+IEBAIC0xMDM1LDcgKzEwNDEsNyBAQCBzdGF0aWMgdm9pZCB2b3BfY3J0Y19h dG9taWNfZW5hYmxlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiAgCj4gIAlXQVJOX09OKHZvcC0+ ZXZlbnQpOwo+ICAKPiAtCXJldCA9IHZvcF9lbmFibGUoY3J0Yyk7Cj4gKwlyZXQgPSB2b3BfZW5h YmxlKGNydGMsIG9sZF9zdGF0ZSk7Cj4gIAlpZiAocmV0KSB7Cj4gIAkJbXV0ZXhfdW5sb2NrKCZ2 b3AtPnZvcF9sb2NrKTsKPiAgCQlEUk1fREVWX0VSUk9SKHZvcC0+ZGV2LCAiRmFpbGVkIHRvIGVu YWJsZSB2b3AgKCVkKVxuIiwgcmV0KTsKPiBAQCAtMTUwOSw2ICsxNTE1LDEzIEBAIHN0YXRpYyBp bnQgdm9wX2NyZWF0ZV9jcnRjKHN0cnVjdCB2b3AgKnZvcCkKPiAgCWluaXRfY29tcGxldGlvbigm dm9wLT5saW5lX2ZsYWdfY29tcGxldGlvbik7Cj4gIAljcnRjLT5wb3J0ID0gcG9ydDsKPiAgCj4g KwlyZXQgPSBkcm1fc2VsZl9yZWZyZXNoX2hlbHBlcl9yZWdpc3RlcihjcnRjLAo+ICsJCQkJCSAg ICAgICBWT1BfU0VMRl9SRUZSRVNIX0VOVFJZX0RFTEFZX01TKTsKPiArCWlmIChyZXQpCj4gKwkJ RFJNX0RFVl9ERUJVR19LTVModm9wLT5kZXYsCj4gKwkJCSJGYWlsZWQgdG8gcmVnaXN0ZXIgJXMg d2l0aCBTUiBoZWxwZXJzICVkLCBpZ25vcmluZ1xuIiwKPiArCQkJY3J0Yy0+bmFtZSwgcmV0KTsK PiArCj4gIAlyZXR1cm4gMDsKPiAgCj4gIGVycl9jbGVhbnVwX2NydGM6Cj4gQEAgLTE1MjYsNiAr MTUzOSw4IEBAIHN0YXRpYyB2b2lkIHZvcF9kZXN0cm95X2NydGMoc3RydWN0IHZvcCAqdm9wKQo+ ICAJc3RydWN0IGRybV9kZXZpY2UgKmRybV9kZXYgPSB2b3AtPmRybV9kZXY7Cj4gIAlzdHJ1Y3Qg ZHJtX3BsYW5lICpwbGFuZSwgKnRtcDsKPiAgCj4gKwlkcm1fc2VsZl9yZWZyZXNoX2hlbHBlcl91 bnJlZ2lzdGVyKGNydGMpOwo+ICsKPiAgCW9mX25vZGVfcHV0KGNydGMtPnBvcnQpOwo+ICAKPiAg CS8qCj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2JyaWRnZS9hbmFsb2dpeF9kcC5oIGIvaW5j bHVkZS9kcm0vYnJpZGdlL2FuYWxvZ2l4X2RwLmgKPiBpbmRleCA0NzViNzA2YjQ5ZGUuLmI2Y2M2 NTQxNDNkNyAxMDA2NDQKPiAtLS0gYS9pbmNsdWRlL2RybS9icmlkZ2UvYW5hbG9naXhfZHAuaAo+ ICsrKyBiL2luY2x1ZGUvZHJtL2JyaWRnZS9hbmFsb2dpeF9kcC5oCj4gQEAgLTQyLDkgKzQyLDcg QEAgc3RydWN0IGFuYWxvZ2l4X2RwX3BsYXRfZGF0YSB7Cj4gIAkJCSBzdHJ1Y3QgZHJtX2Nvbm5l Y3RvciAqKTsKPiAgfTsKPiAgCj4gLWludCBhbmFsb2dpeF9kcF9wc3JfZW5hYmxlZChzdHJ1Y3Qg YW5hbG9naXhfZHBfZGV2aWNlICpkcCk7Cj4gLWludCBhbmFsb2dpeF9kcF9lbmFibGVfcHNyKHN0 cnVjdCBhbmFsb2dpeF9kcF9kZXZpY2UgKmRwKTsKPiAtaW50IGFuYWxvZ2l4X2RwX2Rpc2FibGVf cHNyKHN0cnVjdCBhbmFsb2dpeF9kcF9kZXZpY2UgKmRwKTsKPiArYm9vbCBhbmFsb2dpeF9kcF9z ZWxmX3JlZnJlc2hfY2hhbmdlZChzdHJ1Y3QgYW5hbG9naXhfZHBfZGV2aWNlICpkcCk7Cj4gIAo+ ICBpbnQgYW5hbG9naXhfZHBfcmVzdW1lKHN0cnVjdCBhbmFsb2dpeF9kcF9kZXZpY2UgKmRwKTsK PiAgaW50IGFuYWxvZ2l4X2RwX3N1c3BlbmQoc3RydWN0IGFuYWxvZ2l4X2RwX2RldmljZSAqZHAp Owo+IAoKCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K ZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0 dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVs