From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH 3/3] drm/tegra: Implement correct DMA-BUF semantics Date: Tue, 3 Dec 2019 18:34:15 +0100 Message-ID: <20191203173415.GL624164@phenom.ffwll.local> References: <20191203163203.1486837-1-thierry.reding@gmail.com> <20191203163203.1486837-3-thierry.reding@gmail.com> <20191203173308.GK624164@phenom.ffwll.local> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <20191203173308.GK624164@phenom.ffwll.local> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Thierry Reding Cc: linux-tegra@vger.kernel.org, dri-devel@lists.freedesktop.org List-Id: linux-tegra@vger.kernel.org T24gVHVlLCBEZWMgMDMsIDIwMTkgYXQgMDY6MzM6MDhQTSArMDEwMCwgRGFuaWVsIFZldHRlciB3 cm90ZToKPiBPbiBUdWUsIERlYyAwMywgMjAxOSBhdCAwNTozMjowM1BNICswMTAwLCBUaGllcnJ5 IFJlZGluZyB3cm90ZToKPiA+IEZyb206IFRoaWVycnkgUmVkaW5nIDx0cmVkaW5nQG52aWRpYS5j b20+Cj4gPiAKPiA+IERNQS1CVUYgcmVxdWlyZXMgdGhhdCBlYWNoIGRldmljZSB0aGF0IGFjY2Vz c2VzIGEgRE1BLUJVRiBhdHRhY2hlcyB0byBpdAo+ID4gc2VwYXJhdGVseS4gVG8gZG8gc28gdGhl IGhvc3QxeF9ib19waW4oKSBhbmQgaG9zdDF4X2JvX3VucGluKCkgZnVuY3Rpb25zCj4gPiBuZWVk IHRvIGJlIHJlaW1wbGVtZW50ZWQgc28gdGhhdCB0aGV5IGNhbiByZXR1cm4gYSBtYXBwaW5nLCB3 aGljaCBlaXRoZXIKPiA+IHJlcHJlc2VudHMgYW4gYXR0YWNobWVudCBvciBhIG1hcCBvZiB0aGUg ZHJpdmVyJ3Mgb3duIEdFTSBvYmplY3QuCj4gPiAKPiA+IFNpZ25lZC1vZmYtYnk6IFRoaWVycnkg UmVkaW5nIDx0cmVkaW5nQG52aWRpYS5jb20+Cj4gCj4gSSBkaWRuJ3QgY2hlY2sgdGhlIGZ1bGwg ZGV0YWlscywgYnV0IHRoaXMgbG9va3MgbGlrZSBpdCdzIGRvaW5nIHRoaW5ncyBhcwo+IGludGVu ZGVkLgo+IAo+IEFja2VkLWJ5OiBEYW5pZWwgVmV0dGVyIDxkYW5pZWwudmV0dGVyQGZmd2xsLmNo PgoKSSBmb3Jnb3QgdG8gYWRkOiBJIGd1ZXNzIHRoaXMgY291bGQgY29uZmxpY3Qgd2l0aCB0aGUg Y2xlYW51cCBJIHB1c2hlZAppbnRvIGRybS1taXNjLW5leHQgZm9yIDUuNi4gSWYgdGhhdCdzIHRo ZSBjYXNlIGVpdGhlciBwdXQgdGhlc2UgdGhlcmUgdG9vLApvciB3YWl0IHVudGlsIGRybS1taXNj LW5leHQgaGFzIGxhbmRlZCBpbiBkcm0tbmV4dCBiZWZvcmUgbWVyZ2luZyB0aGVtIHRvCnNvbWUg dGVncmEgdHJlZS4KLURhbmllbAoKPiAKPiBDaGVlcnMsIERhbmllbAo+IAo+ID4gLS0tCj4gPiAg ZHJpdmVycy9ncHUvZHJtL3RlZ3JhL2dlbS5jICAgfCAxMzEgKysrKysrKysrKysrKysrKysrKysr LS0tLS0tLS0tLS0tLQo+ID4gIGRyaXZlcnMvZ3B1L2RybS90ZWdyYS9wbGFuZS5jIHwgIDQ3ICsr KystLS0tLS0tLQo+ID4gIGRyaXZlcnMvZ3B1L2RybS90ZWdyYS9wbGFuZS5oIHwgICAyICstCj4g PiAgZHJpdmVycy9ncHUvaG9zdDF4L2pvYi5jICAgICAgfCAxMjcgKysrKysrKysrKysrLS0tLS0t LS0tLS0tLS0tLS0tLS0KPiA+ICBkcml2ZXJzL2dwdS9ob3N0MXgvam9iLmggICAgICB8ICAgNiAr LQo+ID4gIGluY2x1ZGUvbGludXgvaG9zdDF4LmggICAgICAgIHwgIDMyICsrKysrKy0tLQo+ID4g IDYgZmlsZXMgY2hhbmdlZCwgMTYyIGluc2VydGlvbnMoKyksIDE4MyBkZWxldGlvbnMoLSkKPiA+ IAo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90ZWdyYS9nZW0uYyBiL2RyaXZlcnMv Z3B1L2RybS90ZWdyYS9nZW0uYwo+ID4gaW5kZXggMTIzN2RmMTU3ZTA1Li5jMDg1NDk5MDY3ZWQg MTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vdGVncmEvZ2VtLmMKPiA+ICsrKyBiL2Ry aXZlcnMvZ3B1L2RybS90ZWdyYS9nZW0uYwo+ID4gQEAgLTI3LDcxICsyNyw3NyBAQCBzdGF0aWMg dm9pZCB0ZWdyYV9ib19wdXQoc3RydWN0IGhvc3QxeF9ibyAqYm8pCj4gPiAgCWRybV9nZW1fb2Jq ZWN0X3B1dF91bmxvY2tlZCgmb2JqLT5nZW0pOwo+ID4gIH0KPiA+ICAKPiA+IC0vKiBYWFggbW92 ZSB0aGlzIGludG8gbGliL3NjYXR0ZXJsaXN0LmM/ICovCj4gPiAtc3RhdGljIGludCBzZ19hbGxv Y190YWJsZV9mcm9tX3NnKHN0cnVjdCBzZ190YWJsZSAqc2d0LCBzdHJ1Y3Qgc2NhdHRlcmxpc3Qg KnNnLAo+ID4gLQkJCQkgIHVuc2lnbmVkIGludCBuZW50cywgZ2ZwX3QgZ2ZwX21hc2spCj4gPiAr c3RhdGljIHN0cnVjdCBob3N0MXhfYm9fbWFwcGluZyAqCj4gPiArdGVncmFfYm9fcGluKHN0cnVj dCBkZXZpY2UgKmRldiwgc3RydWN0IGhvc3QxeF9ibyAqYm8sCj4gPiArCSAgICAgZW51bSBkbWFf ZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQo+ID4gIHsKPiA+IC0Jc3RydWN0IHNjYXR0ZXJsaXN0 ICpkc3Q7Cj4gPiAtCXVuc2lnbmVkIGludCBpOwo+ID4gKwlzdHJ1Y3QgdGVncmFfYm8gKm9iaiA9 IGhvc3QxeF90b190ZWdyYV9ibyhibyk7Cj4gPiArCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2Vt ID0gJm9iai0+Z2VtOwo+ID4gKwlzdHJ1Y3QgaG9zdDF4X2JvX21hcHBpbmcgKm1hcDsKPiA+ICAJ aW50IGVycjsKPiA+ICAKPiA+IC0JZXJyID0gc2dfYWxsb2NfdGFibGUoc2d0LCBuZW50cywgZ2Zw X21hc2spOwo+ID4gLQlpZiAoZXJyIDwgMCkKPiA+IC0JCXJldHVybiBlcnI7Cj4gPiAtCj4gPiAt CWRzdCA9IHNndC0+c2dsOwo+ID4gKwltYXAgPSBremFsbG9jKHNpemVvZigqbWFwKSwgR0ZQX0tF Uk5FTCk7Cj4gPiArCWlmICghbWFwKQo+ID4gKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cj4g PiAgCj4gPiAtCWZvciAoaSA9IDA7IGkgPCBuZW50czsgaSsrKSB7Cj4gPiAtCQlzZ19zZXRfcGFn ZShkc3QsIHNnX3BhZ2Uoc2cpLCBzZy0+bGVuZ3RoLCAwKTsKPiA+IC0JCWRzdCA9IHNnX25leHQo ZHN0KTsKPiA+IC0JCXNnID0gc2dfbmV4dChzZyk7Cj4gPiAtCX0KPiA+IC0KPiA+IC0JcmV0dXJu IDA7Cj4gPiAtfQo+ID4gLQo+ID4gLXN0YXRpYyBzdHJ1Y3Qgc2dfdGFibGUgKnRlZ3JhX2JvX3Bp bihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBob3N0MXhfYm8gKmJvLAo+ID4gLQkJCQkgICAg IGRtYV9hZGRyX3QgKnBoeXMpCj4gPiAtewo+ID4gLQlzdHJ1Y3QgdGVncmFfYm8gKm9iaiA9IGhv c3QxeF90b190ZWdyYV9ibyhibyk7Cj4gPiAtCXN0cnVjdCBzZ190YWJsZSAqc2d0Owo+ID4gLQlp bnQgZXJyOwo+ID4gKwltYXAtPmRpcmVjdGlvbiA9IGRpcmVjdGlvbjsKPiA+ICsJbWFwLT5kZXYg PSBkZXY7Cj4gPiArCW1hcC0+Ym8gPSBibzsKPiA+ICAKPiA+ICAJLyoKPiA+ICAJICogSWYgd2Un dmUgbWFudWFsbHkgbWFwcGVkIHRoZSBidWZmZXIgb2JqZWN0IHRocm91Z2ggdGhlIElPTU1VLCBt YWtlCj4gPiAgCSAqIHN1cmUgdG8gcmV0dXJuIHRoZSBJT1ZBIGFkZHJlc3Mgb2Ygb3VyIG1hcHBp bmcuCj4gPiAgCSAqLwo+ID4gLQlpZiAocGh5cyAmJiBvYmotPm1tKSB7Cj4gPiAtCQkqcGh5cyA9 IG9iai0+aW92YTsKPiA+IC0JCXJldHVybiBOVUxMOwo+ID4gKwlpZiAob2JqLT5tbSkgewo+ID4g KwkJbWFwLT5waHlzID0gb2JqLT5pb3ZhOwo+ID4gKwkJcmV0dXJuIG1hcDsKPiA+ICsJfQo+ID4g Kwo+ID4gKwkvKgo+ID4gKwkgKiBJbXBvcnRlZCBidWZmZXJzIG5lZWQgc3BlY2lhbCB0cmVhdG1l bnQgdG8gc2F0aXNmeSB0aGUgc2VtYW50aWNzIG9mCj4gPiArCSAqIERNQS1CVUYuCj4gPiArCSAq Lwo+ID4gKwlpZiAoZ2VtLT5pbXBvcnRfYXR0YWNoKSB7Cj4gPiArCQlzdHJ1Y3QgZG1hX2J1ZiAq YnVmID0gZ2VtLT5pbXBvcnRfYXR0YWNoLT5kbWFidWY7Cj4gPiArCj4gPiArCQltYXAtPmF0dGFj aCA9IGRtYV9idWZfYXR0YWNoKGJ1ZiwgZGV2KTsKPiA+ICsJCWlmIChJU19FUlIobWFwLT5hdHRh Y2gpKSB7Cj4gPiArCQkJZXJyID0gUFRSX0VSUihtYXAtPmF0dGFjaCk7Cj4gPiArCQkJZ290byBm cmVlOwo+ID4gKwkJfQo+ID4gKwo+ID4gKwkJbWFwLT5zZ3QgPSBkbWFfYnVmX21hcF9hdHRhY2ht ZW50KG1hcC0+YXR0YWNoLCBkaXJlY3Rpb24pOwo+ID4gKwkJaWYgKElTX0VSUihtYXAtPnNndCkp IHsKPiA+ICsJCQlkbWFfYnVmX2RldGFjaChidWYsIG1hcC0+YXR0YWNoKTsKPiA+ICsJCQllcnIg PSBQVFJfRVJSKG1hcC0+c2d0KTsKPiA+ICsJCQlnb3RvIGZyZWU7Cj4gPiArCQl9Cj4gPiArCj4g PiArCQltYXAtPmNodW5rcyA9IHNndF9kbWFfY291bnRfY2h1bmtzKG1hcC0+c2d0KTsKPiA+ICsJ CW1hcC0+cGh5cyA9IHNnX2RtYV9hZGRyZXNzKG1hcC0+c2d0LT5zZ2wpOwo+ID4gKwkJbWFwLT5z aXplID0gZ2VtLT5zaXplOwo+ID4gKwo+ID4gKwkJcmV0dXJuIG1hcDsKPiA+ICAJfQo+ID4gIAo+ ID4gIAkvKgo+ID4gIAkgKiBJZiB3ZSBkb24ndCBoYXZlIGEgbWFwcGluZyBmb3IgdGhpcyBidWZm ZXIgeWV0LCByZXR1cm4gYW4gU0cgdGFibGUKPiA+ICAJICogc28gdGhhdCBob3N0MXggY2FuIGRv IHRoZSBtYXBwaW5nIGZvciB1cyB2aWEgdGhlIERNQSBBUEkuCj4gPiAgCSAqLwo+ID4gLQlzZ3Qg PSBremFsbG9jKHNpemVvZigqc2d0KSwgR0ZQX0tFUk5FTCk7Cj4gPiAtCWlmICghc2d0KQo+ID4g LQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cj4gPiArCW1hcC0+c2d0ID0ga3phbGxvYyhzaXpl b2YoKm1hcC0+c2d0KSwgR0ZQX0tFUk5FTCk7Cj4gPiArCWlmICghbWFwLT5zZ3QpIHsKPiA+ICsJ CWVyciA9IC1FTk9NRU07Cj4gPiArCQlnb3RvIGZyZWU7Cj4gPiArCX0KPiA+ICAKPiA+ICAJaWYg KG9iai0+cGFnZXMpIHsKPiA+ICAJCS8qCj4gPiAgCQkgKiBJZiB0aGUgYnVmZmVyIG9iamVjdCB3 YXMgYWxsb2NhdGVkIGZyb20gdGhlIGV4cGxpY2l0IElPTU1VCj4gPiAgCQkgKiBBUEkgY29kZSBw YXRocywgY29uc3RydWN0IGFuIFNHIHRhYmxlIGZyb20gdGhlIHBhZ2VzLgo+ID4gIAkJICovCj4g PiAtCQllcnIgPSBzZ19hbGxvY190YWJsZV9mcm9tX3BhZ2VzKHNndCwgb2JqLT5wYWdlcywgb2Jq LT5udW1fcGFnZXMsCj4gPiAtCQkJCQkJMCwgb2JqLT5nZW0uc2l6ZSwgR0ZQX0tFUk5FTCk7Cj4g PiAtCQlpZiAoZXJyIDwgMCkKPiA+IC0JCQlnb3RvIGZyZWU7Cj4gPiAtCX0gZWxzZSBpZiAob2Jq LT5zZ3QpIHsKPiA+IC0JCS8qCj4gPiAtCQkgKiBJZiB0aGUgYnVmZmVyIG9iamVjdCBhbHJlYWR5 IGhhcyBhbiBTRyB0YWJsZSBidXQgbm8gcGFnZXMKPiA+IC0JCSAqIHdlcmUgYWxsb2NhdGVkIGZv ciBpdCwgaXQgbWVhbnMgdGhlIGJ1ZmZlciB3YXMgaW1wb3J0ZWQgYW5kCj4gPiAtCQkgKiB0aGUg U0cgdGFibGUgbmVlZHMgdG8gYmUgY29waWVkIHRvIGF2b2lkIG92ZXJ3cml0aW5nIGFueQo+ID4g LQkJICogb3RoZXIgcG90ZW50aWFsIHVzZXJzIG9mIHRoZSBvcmlnaW5hbCBTRyB0YWJsZS4KPiA+ IC0JCSAqLwo+ID4gLQkJZXJyID0gc2dfYWxsb2NfdGFibGVfZnJvbV9zZyhzZ3QsIG9iai0+c2d0 LT5zZ2wsIG9iai0+c2d0LT5uZW50cywKPiA+IC0JCQkJCSAgICAgR0ZQX0tFUk5FTCk7Cj4gPiAr CQllcnIgPSBzZ19hbGxvY190YWJsZV9mcm9tX3BhZ2VzKG1hcC0+c2d0LCBvYmotPnBhZ2VzLAo+ ID4gKwkJCQkJCW9iai0+bnVtX3BhZ2VzLCAwLAo+ID4gKwkJCQkJCW9iai0+Z2VtLnNpemUsIEdG UF9LRVJORUwpOwo+ID4gIAkJaWYgKGVyciA8IDApCj4gPiAgCQkJZ290byBmcmVlOwo+ID4gIAl9 IGVsc2Ugewo+ID4gQEAgLTEwMCwyNSArMTA2LDQ4IEBAIHN0YXRpYyBzdHJ1Y3Qgc2dfdGFibGUg KnRlZ3JhX2JvX3BpbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBob3N0MXhfYm8gKmJvLAo+ ID4gIAkJICogbm90IGltcG9ydGVkLCBpdCBoYWQgdG8gYmUgYWxsb2NhdGVkIHdpdGggdGhlIERN QSBBUEksIHNvCj4gPiAgCQkgKiB0aGUgRE1BIEFQSSBoZWxwZXIgY2FuIGJlIHVzZWQuCj4gPiAg CQkgKi8KPiA+IC0JCWVyciA9IGRtYV9nZXRfc2d0YWJsZShkZXYsIHNndCwgb2JqLT52YWRkciwg b2JqLT5pb3ZhLAo+ID4gKwkJZXJyID0gZG1hX2dldF9zZ3RhYmxlKGRldiwgbWFwLT5zZ3QsIG9i ai0+dmFkZHIsIG9iai0+aW92YSwKPiA+ICAJCQkJICAgICAgb2JqLT5nZW0uc2l6ZSk7Cj4gPiAg CQlpZiAoZXJyIDwgMCkKPiA+ICAJCQlnb3RvIGZyZWU7Cj4gPiAgCX0KPiA+ICAKPiA+IC0JcmV0 dXJuIHNndDsKPiA+ICsJZXJyID0gZG1hX21hcF9zZyhkZXYsIG1hcC0+c2d0LT5zZ2wsIG1hcC0+ c2d0LT5uZW50cywgZGlyZWN0aW9uKTsKPiA+ICsJaWYgKCFlcnIpIHsKPiA+ICsJCWVyciA9IC1F Tk9NRU07Cj4gPiArCQlnb3RvIGZyZWVfc2d0Owo+ID4gKwl9Cj4gPiArCj4gPiArCW1hcC0+cGh5 cyA9IHNnX2RtYV9hZGRyZXNzKG1hcC0+c2d0LT5zZ2wpOwo+ID4gKwltYXAtPnNpemUgPSBnZW0t PnNpemU7Cj4gPiArCW1hcC0+Y2h1bmtzID0gZXJyOwo+ID4gKwo+ID4gKwlyZXR1cm4gbWFwOwo+ ID4gIAo+ID4gK2ZyZWVfc2d0Ogo+ID4gKwlzZ19mcmVlX3RhYmxlKG1hcC0+c2d0KTsKPiA+ICBm cmVlOgo+ID4gLQlrZnJlZShzZ3QpOwo+ID4gKwlrZnJlZShtYXAtPnNndCk7Cj4gPiArCWtmcmVl KG1hcCk7Cj4gPiAgCXJldHVybiBFUlJfUFRSKGVycik7Cj4gPiAgfQo+ID4gIAo+ID4gLXN0YXRp YyB2b2lkIHRlZ3JhX2JvX3VucGluKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNnX3RhYmxl ICpzZ3QpCj4gPiArc3RhdGljIHZvaWQgdGVncmFfYm9fdW5waW4oc3RydWN0IGhvc3QxeF9ib19t YXBwaW5nICptYXApCj4gPiAgewo+ID4gLQlpZiAoc2d0KSB7Cj4gPiAtCQlzZ19mcmVlX3RhYmxl KHNndCk7Cj4gPiAtCQlrZnJlZShzZ3QpOwo+ID4gKwlpZiAoIW1hcCkKPiA+ICsJCXJldHVybjsK PiA+ICsKPiA+ICsJaWYgKG1hcC0+YXR0YWNoKSB7Cj4gPiArCQlkbWFfYnVmX3VubWFwX2F0dGFj aG1lbnQobWFwLT5hdHRhY2gsIG1hcC0+c2d0LCBtYXAtPmRpcmVjdGlvbik7Cj4gPiArCQlkbWFf YnVmX2RldGFjaChtYXAtPmF0dGFjaC0+ZG1hYnVmLCBtYXAtPmF0dGFjaCk7Cj4gPiArCX0gZWxz ZSB7Cj4gPiArCQlkbWFfdW5tYXBfc2cobWFwLT5kZXYsIG1hcC0+c2d0LT5zZ2wsIG1hcC0+c2d0 LT5uZW50cywKPiA+ICsJCQkgICAgIG1hcC0+ZGlyZWN0aW9uKTsKPiA+ICsJCXNnX2ZyZWVfdGFi bGUobWFwLT5zZ3QpOwo+ID4gKwkJa2ZyZWUobWFwLT5zZ3QpOwo+ID4gIAl9Cj4gPiArCj4gPiAr CWtmcmVlKG1hcCk7Cj4gPiAgfQo+ID4gIAo+ID4gIHN0YXRpYyB2b2lkICp0ZWdyYV9ib19tbWFw KHN0cnVjdCBob3N0MXhfYm8gKmJvKQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90 ZWdyYS9wbGFuZS5jIGIvZHJpdmVycy9ncHUvZHJtL3RlZ3JhL3BsYW5lLmMKPiA+IGluZGV4IGNh ZGNkZDllYTQyNy4uMjhjZjY2ODAyNmRhIDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L3RlZ3JhL3BsYW5lLmMKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS90ZWdyYS9wbGFuZS5jCj4g PiBAQCAtNjcsNyArNjcsNyBAQCB0ZWdyYV9wbGFuZV9hdG9taWNfZHVwbGljYXRlX3N0YXRlKHN0 cnVjdCBkcm1fcGxhbmUgKnBsYW5lKQo+ID4gIAo+ID4gIAlmb3IgKGkgPSAwOyBpIDwgMzsgaSsr KSB7Cj4gPiAgCQljb3B5LT5pb3ZhW2ldID0gRE1BX01BUFBJTkdfRVJST1I7Cj4gPiAtCQljb3B5 LT5zZ3RbaV0gPSBOVUxMOwo+ID4gKwkJY29weS0+bWFwW2ldID0gTlVMTDsKPiA+ICAJfQo+ID4g IAo+ID4gIAlyZXR1cm4gJmNvcHktPmJhc2U7Cj4gPiBAQCAtMTE0LDE4ICsxMTQsMTEgQEAgc3Rh dGljIGludCB0ZWdyYV9kY19waW4oc3RydWN0IHRlZ3JhX2RjICpkYywgc3RydWN0IHRlZ3JhX3Bs YW5lX3N0YXRlICpzdGF0ZSkKPiA+ICAJCXN0cnVjdCB0ZWdyYV9ibyAqYm8gPSB0ZWdyYV9mYl9n ZXRfcGxhbmUoc3RhdGUtPmJhc2UuZmIsIGkpOwo+ID4gIAo+ID4gIAkJaWYgKCFkYy0+Y2xpZW50 Lmdyb3VwKSB7Cj4gPiAtCQkJc3RydWN0IHNnX3RhYmxlICpzZ3Q7Cj4gPiArCQkJc3RydWN0IGhv c3QxeF9ib19tYXBwaW5nICptYXA7Cj4gPiAgCj4gPiAtCQkJc2d0ID0gaG9zdDF4X2JvX3Bpbihk Yy0+ZGV2LCAmYm8tPmJhc2UsIE5VTEwpOwo+ID4gLQkJCWlmIChJU19FUlIoc2d0KSkgewo+ID4g LQkJCQllcnIgPSBQVFJfRVJSKHNndCk7Cj4gPiAtCQkJCWdvdG8gdW5waW47Cj4gPiAtCQkJfQo+ ID4gLQo+ID4gLQkJCWVyciA9IGRtYV9tYXBfc2coZGMtPmRldiwgc2d0LT5zZ2wsIHNndC0+bmVu dHMsCj4gPiAtCQkJCQkgRE1BX1RPX0RFVklDRSk7Cj4gPiAtCQkJaWYgKGVyciA9PSAwKSB7Cj4g PiAtCQkJCWVyciA9IC1FTk9NRU07Cj4gPiArCQkJbWFwID0gaG9zdDF4X2JvX3BpbihkYy0+ZGV2 LCAmYm8tPmJhc2UsIERNQV9UT19ERVZJQ0UpOwo+ID4gKwkJCWlmIChJU19FUlIobWFwKSkgewo+ ID4gKwkJCQllcnIgPSBQVFJfRVJSKG1hcCk7Cj4gPiAgCQkJCWdvdG8gdW5waW47Cj4gPiAgCQkJ fQo+ID4gIAo+ID4gQEAgLTEzNSwxMyArMTI4LDEzIEBAIHN0YXRpYyBpbnQgdGVncmFfZGNfcGlu KHN0cnVjdCB0ZWdyYV9kYyAqZGMsIHN0cnVjdCB0ZWdyYV9wbGFuZV9zdGF0ZSAqc3RhdGUpCj4g PiAgCQkJICogbWFwIGl0cyBTRyB0YWJsZSB0byBhIHNpbmdsZSBjb250aWd1b3VzIGNodW5rIG9m Cj4gPiAgCQkJICogSS9PIHZpcnR1YWwgbWVtb3J5Lgo+ID4gIAkJCSAqLwo+ID4gLQkJCWlmIChl cnIgPiAxKSB7Cj4gPiArCQkJaWYgKG1hcC0+Y2h1bmtzID4gMSkgewo+ID4gIAkJCQllcnIgPSAt RUlOVkFMOwo+ID4gIAkJCQlnb3RvIHVucGluOwo+ID4gIAkJCX0KPiA+ICAKPiA+IC0JCQlzdGF0 ZS0+aW92YVtpXSA9IHNnX2RtYV9hZGRyZXNzKHNndC0+c2dsKTsKPiA+IC0JCQlzdGF0ZS0+c2d0 W2ldID0gc2d0Owo+ID4gKwkJCXN0YXRlLT5pb3ZhW2ldID0gbWFwLT5waHlzOwo+ID4gKwkJCXN0 YXRlLT5tYXBbaV0gPSBtYXA7Cj4gPiAgCQl9IGVsc2Ugewo+ID4gIAkJCXN0YXRlLT5pb3ZhW2ld ID0gYm8tPmlvdmE7Cj4gPiAgCQl9Cj4gPiBAQCAtMTUzLDE0ICsxNDYsOSBAQCBzdGF0aWMgaW50 IHRlZ3JhX2RjX3BpbihzdHJ1Y3QgdGVncmFfZGMgKmRjLCBzdHJ1Y3QgdGVncmFfcGxhbmVfc3Rh dGUgKnN0YXRlKQo+ID4gIAlkZXZfZXJyKGRjLT5kZXYsICJmYWlsZWQgdG8gbWFwIHBsYW5lICV1 OiAlZFxuIiwgaSwgZXJyKTsKPiA+ICAKPiA+ICAJd2hpbGUgKGktLSkgewo+ID4gLQkJc3RydWN0 IHRlZ3JhX2JvICpibyA9IHRlZ3JhX2ZiX2dldF9wbGFuZShzdGF0ZS0+YmFzZS5mYiwgaSk7Cj4g PiAtCQlzdHJ1Y3Qgc2dfdGFibGUgKnNndCA9IHN0YXRlLT5zZ3RbaV07Cj4gPiAtCj4gPiAtCQlk bWFfdW5tYXBfc2coZGMtPmRldiwgc2d0LT5zZ2wsIHNndC0+bmVudHMsIERNQV9UT19ERVZJQ0Up Owo+ID4gLQkJaG9zdDF4X2JvX3VucGluKGRjLT5kZXYsICZiby0+YmFzZSwgc2d0KTsKPiA+IC0K PiA+ICsJCWhvc3QxeF9ib191bnBpbihzdGF0ZS0+bWFwW2ldKTsKPiA+ICAJCXN0YXRlLT5pb3Zh W2ldID0gRE1BX01BUFBJTkdfRVJST1I7Cj4gPiAtCQlzdGF0ZS0+c2d0W2ldID0gTlVMTDsKPiA+ ICsJCXN0YXRlLT5tYXBbaV0gPSBOVUxMOwo+ID4gIAl9Cj4gPiAgCj4gPiAgCXJldHVybiBlcnI7 Cj4gPiBAQCAtMTcxLDIwICsxNTksMTEgQEAgc3RhdGljIHZvaWQgdGVncmFfZGNfdW5waW4oc3Ry dWN0IHRlZ3JhX2RjICpkYywgc3RydWN0IHRlZ3JhX3BsYW5lX3N0YXRlICpzdGF0ZSkKPiA+ICAJ dW5zaWduZWQgaW50IGk7Cj4gPiAgCj4gPiAgCWZvciAoaSA9IDA7IGkgPCBzdGF0ZS0+YmFzZS5m Yi0+Zm9ybWF0LT5udW1fcGxhbmVzOyBpKyspIHsKPiA+IC0JCXN0cnVjdCB0ZWdyYV9ibyAqYm8g PSB0ZWdyYV9mYl9nZXRfcGxhbmUoc3RhdGUtPmJhc2UuZmIsIGkpOwo+ID4gLQo+ID4gLQkJaWYg KCFkYy0+Y2xpZW50Lmdyb3VwKSB7Cj4gPiAtCQkJc3RydWN0IHNnX3RhYmxlICpzZ3QgPSBzdGF0 ZS0+c2d0W2ldOwo+ID4gLQo+ID4gLQkJCWlmIChzZ3QpIHsKPiA+IC0JCQkJZG1hX3VubWFwX3Nn KGRjLT5kZXYsIHNndC0+c2dsLCBzZ3QtPm5lbnRzLAo+ID4gLQkJCQkJICAgICBETUFfVE9fREVW SUNFKTsKPiA+IC0JCQkJaG9zdDF4X2JvX3VucGluKGRjLT5kZXYsICZiby0+YmFzZSwgc2d0KTsK PiA+IC0JCQl9Cj4gPiAtCQl9Cj4gPiArCQlpZiAoIWRjLT5jbGllbnQuZ3JvdXApCj4gPiArCQkJ aG9zdDF4X2JvX3VucGluKHN0YXRlLT5tYXBbaV0pOwo+ID4gIAo+ID4gIAkJc3RhdGUtPmlvdmFb aV0gPSBETUFfTUFQUElOR19FUlJPUjsKPiA+IC0JCXN0YXRlLT5zZ3RbaV0gPSBOVUxMOwo+ID4g KwkJc3RhdGUtPm1hcFtpXSA9IE5VTEw7Cj4gPiAgCX0KPiA+ICB9Cj4gPiAgCj4gPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL3RlZ3JhL3BsYW5lLmggYi9kcml2ZXJzL2dwdS9kcm0vdGVn cmEvcGxhbmUuaAo+ID4gaW5kZXggYTE1OGE5MTUxMDlhLi4wOGRmMWJhMWY1NjcgMTAwNjQ0Cj4g PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vdGVncmEvcGxhbmUuaAo+ID4gKysrIGIvZHJpdmVycy9n cHUvZHJtL3RlZ3JhL3BsYW5lLmgKPiA+IEBAIC0zOSw3ICszOSw3IEBAIHN0cnVjdCB0ZWdyYV9w bGFuZV9sZWdhY3lfYmxlbmRpbmdfc3RhdGUgewo+ID4gIHN0cnVjdCB0ZWdyYV9wbGFuZV9zdGF0 ZSB7Cj4gPiAgCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgYmFzZTsKPiA+ICAKPiA+IC0Jc3RydWN0 IHNnX3RhYmxlICpzZ3RbM107Cj4gPiArCXN0cnVjdCBob3N0MXhfYm9fbWFwcGluZyAqbWFwWzNd Owo+ID4gIAlkbWFfYWRkcl90IGlvdmFbM107Cj4gPiAgCj4gPiAgCXN0cnVjdCB0ZWdyYV9ib190 aWxpbmcgdGlsaW5nOwo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2hvc3QxeC9qb2IuYyBi L2RyaXZlcnMvZ3B1L2hvc3QxeC9qb2IuYwo+ID4gaW5kZXggNjBiMmZlZGQwMDYxLi44OGU0NDU1 NTNkZjMgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9ob3N0MXgvam9iLmMKPiA+ICsrKyBi L2RyaXZlcnMvZ3B1L2hvc3QxeC9qb2IuYwo+ID4gQEAgLTk5LDYgKzk5LDcgQEAgRVhQT1JUX1NZ TUJPTChob3N0MXhfam9iX2FkZF9nYXRoZXIpOwo+ID4gIAo+ID4gIHN0YXRpYyB1bnNpZ25lZCBp bnQgcGluX2pvYihzdHJ1Y3QgaG9zdDF4ICpob3N0LCBzdHJ1Y3QgaG9zdDF4X2pvYiAqam9iKQo+ ID4gIHsKPiA+ICsJdW5zaWduZWQgbG9uZyBtYXNrID0gSE9TVDFYX1JFTE9DX1JFQUQgfCBIT1NU MVhfUkVMT0NfV1JJVEU7Cj4gPiAgCXN0cnVjdCBob3N0MXhfY2xpZW50ICpjbGllbnQgPSBqb2It PmNsaWVudDsKPiA+ICAJc3RydWN0IGRldmljZSAqZGV2ID0gY2xpZW50LT5kZXY7Cj4gPiAgCXVu c2lnbmVkIGludCBpOwo+ID4gQEAgLTEwOCw4ICsxMDksOCBAQCBzdGF0aWMgdW5zaWduZWQgaW50 IHBpbl9qb2Ioc3RydWN0IGhvc3QxeCAqaG9zdCwgc3RydWN0IGhvc3QxeF9qb2IgKmpvYikKPiA+ ICAKPiA+ICAJZm9yIChpID0gMDsgaSA8IGpvYi0+bnVtX3JlbG9jczsgaSsrKSB7Cj4gPiAgCQlz dHJ1Y3QgaG9zdDF4X3JlbG9jICpyZWxvYyA9ICZqb2ItPnJlbG9jc1tpXTsKPiA+IC0JCWRtYV9h ZGRyX3QgcGh5c19hZGRyLCAqcGh5czsKPiA+IC0JCXN0cnVjdCBzZ190YWJsZSAqc2d0Owo+ID4g KwkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uOwo+ID4gKwkJc3RydWN0IGhvc3Qx eF9ib19tYXBwaW5nICptYXA7Cj4gPiAgCj4gPiAgCQlyZWxvYy0+dGFyZ2V0LmJvID0gaG9zdDF4 X2JvX2dldChyZWxvYy0+dGFyZ2V0LmJvKTsKPiA+ICAJCWlmICghcmVsb2MtPnRhcmdldC5ibykg ewo+ID4gQEAgLTExNyw2MyArMTE4LDQwIEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgcGluX2pvYihz dHJ1Y3QgaG9zdDF4ICpob3N0LCBzdHJ1Y3QgaG9zdDF4X2pvYiAqam9iKQo+ID4gIAkJCWdvdG8g dW5waW47Cj4gPiAgCQl9Cj4gPiAgCj4gPiAtCQlpZiAoY2xpZW50LT5ncm91cCkKPiA+IC0JCQlw aHlzID0gJnBoeXNfYWRkcjsKPiA+IC0JCWVsc2UKPiA+IC0JCQlwaHlzID0gTlVMTDsKPiA+IC0K PiA+IC0JCXNndCA9IGhvc3QxeF9ib19waW4oZGV2LCByZWxvYy0+dGFyZ2V0LmJvLCBwaHlzKTsK PiA+IC0JCWlmIChJU19FUlIoc2d0KSkgewo+ID4gLQkJCWVyciA9IFBUUl9FUlIoc2d0KTsKPiA+ IC0JCQlnb3RvIHVucGluOwo+ID4gLQkJfQo+ID4gLQo+ID4gLQkJaWYgKHNndCkgewo+ID4gLQkJ CXVuc2lnbmVkIGxvbmcgbWFzayA9IEhPU1QxWF9SRUxPQ19SRUFEIHwKPiA+IC0JCQkJCSAgICAg SE9TVDFYX1JFTE9DX1dSSVRFOwo+ID4gLQkJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcjsK PiA+IC0KPiA+IC0JCQlzd2l0Y2ggKHJlbG9jLT5mbGFncyAmIG1hc2spIHsKPiA+IC0JCQljYXNl IEhPU1QxWF9SRUxPQ19SRUFEOgo+ID4gLQkJCQlkaXIgPSBETUFfVE9fREVWSUNFOwo+ID4gLQkJ CQlicmVhazsKPiA+IC0KPiA+IC0JCQljYXNlIEhPU1QxWF9SRUxPQ19XUklURToKPiA+IC0JCQkJ ZGlyID0gRE1BX0ZST01fREVWSUNFOwo+ID4gLQkJCQlicmVhazsKPiA+ICsJCXN3aXRjaCAocmVs b2MtPmZsYWdzICYgbWFzaykgewo+ID4gKwkJY2FzZSBIT1NUMVhfUkVMT0NfUkVBRDoKPiA+ICsJ CQlkaXJlY3Rpb24gPSBETUFfVE9fREVWSUNFOwo+ID4gKwkJCWJyZWFrOwo+ID4gIAo+ID4gLQkJ CWNhc2UgSE9TVDFYX1JFTE9DX1JFQUQgfCBIT1NUMVhfUkVMT0NfV1JJVEU6Cj4gPiAtCQkJCWRp ciA9IERNQV9CSURJUkVDVElPTkFMOwo+ID4gLQkJCQlicmVhazsKPiA+ICsJCWNhc2UgSE9TVDFY X1JFTE9DX1dSSVRFOgo+ID4gKwkJCWRpcmVjdGlvbiA9IERNQV9GUk9NX0RFVklDRTsKPiA+ICsJ CQlicmVhazsKPiA+ICAKPiA+IC0JCQlkZWZhdWx0Ogo+ID4gLQkJCQllcnIgPSAtRUlOVkFMOwo+ ID4gLQkJCQlnb3RvIHVucGluOwo+ID4gLQkJCX0KPiA+ICsJCWNhc2UgSE9TVDFYX1JFTE9DX1JF QUQgfCBIT1NUMVhfUkVMT0NfV1JJVEU6Cj4gPiArCQkJZGlyZWN0aW9uID0gRE1BX0JJRElSRUNU SU9OQUw7Cj4gPiArCQkJYnJlYWs7Cj4gPiAgCj4gPiAtCQkJZXJyID0gZG1hX21hcF9zZyhkZXYs IHNndC0+c2dsLCBzZ3QtPm5lbnRzLCBkaXIpOwo+ID4gLQkJCWlmICghZXJyKSB7Cj4gPiAtCQkJ CWVyciA9IC1FTk9NRU07Cj4gPiAtCQkJCWdvdG8gdW5waW47Cj4gPiAtCQkJfQo+ID4gKwkJZGVm YXVsdDoKPiA+ICsJCQllcnIgPSAtRUlOVkFMOwo+ID4gKwkJCWdvdG8gdW5waW47Cj4gPiArCQl9 Cj4gPiAgCj4gPiAtCQkJam9iLT51bnBpbnNbam9iLT5udW1fdW5waW5zXS5kZXYgPSBkZXY7Cj4g PiAtCQkJam9iLT51bnBpbnNbam9iLT5udW1fdW5waW5zXS5kaXIgPSBkaXI7Cj4gPiAtCQkJcGh5 c19hZGRyID0gc2dfZG1hX2FkZHJlc3Moc2d0LT5zZ2wpOwo+ID4gKwkJbWFwID0gaG9zdDF4X2Jv X3BpbihkZXYsIHJlbG9jLT50YXJnZXQuYm8sIGRpcmVjdGlvbik7Cj4gPiArCQlpZiAoSVNfRVJS KG1hcCkpIHsKPiA+ICsJCQllcnIgPSBQVFJfRVJSKG1hcCk7Cj4gPiArCQkJZ290byB1bnBpbjsK PiA+ICAJCX0KPiA+ICAKPiA+IC0JCWpvYi0+YWRkcl9waHlzW2pvYi0+bnVtX3VucGluc10gPSBw aHlzX2FkZHI7Cj4gPiAtCQlqb2ItPnVucGluc1tqb2ItPm51bV91bnBpbnNdLmJvID0gcmVsb2Mt PnRhcmdldC5ibzsKPiA+IC0JCWpvYi0+dW5waW5zW2pvYi0+bnVtX3VucGluc10uc2d0ID0gc2d0 Owo+ID4gKwkJam9iLT5hZGRyX3BoeXNbam9iLT5udW1fdW5waW5zXSA9IG1hcC0+cGh5czsKPiA+ ICsJCWpvYi0+dW5waW5zW2pvYi0+bnVtX3VucGluc10ubWFwID0gbWFwOwo+ID4gIAkJam9iLT5u dW1fdW5waW5zKys7Cj4gPiAgCX0KPiA+ICAKPiA+ICAJZm9yIChpID0gMDsgaSA8IGpvYi0+bnVt X2dhdGhlcnM7IGkrKykgewo+ID4gIAkJc3RydWN0IGhvc3QxeF9qb2JfZ2F0aGVyICpnID0gJmpv Yi0+Z2F0aGVyc1tpXTsKPiA+ICsJCXN0cnVjdCBob3N0MXhfYm9fbWFwcGluZyAqbWFwOwo+ID4g IAkJc2l6ZV90IGdhdGhlcl9zaXplID0gMDsKPiA+ICAJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7 Cj4gPiAtCQlzdHJ1Y3Qgc2dfdGFibGUgKnNndDsKPiA+IC0JCWRtYV9hZGRyX3QgcGh5c19hZGRy Owo+ID4gIAkJdW5zaWduZWQgbG9uZyBzaGlmdDsKPiA+ICAJCXN0cnVjdCBpb3ZhICphbGxvYzsK PiA+ICAJCXVuc2lnbmVkIGludCBqOwo+ID4gQEAgLTE4NCwxNSArMTYyLDE2IEBAIHN0YXRpYyB1 bnNpZ25lZCBpbnQgcGluX2pvYihzdHJ1Y3QgaG9zdDF4ICpob3N0LCBzdHJ1Y3QgaG9zdDF4X2pv YiAqam9iKQo+ID4gIAkJCWdvdG8gdW5waW47Cj4gPiAgCQl9Cj4gPiAgCj4gPiAtCQlzZ3QgPSBo b3N0MXhfYm9fcGluKGhvc3QtPmRldiwgZy0+Ym8sIE5VTEwpOwo+ID4gLQkJaWYgKElTX0VSUihz Z3QpKSB7Cj4gPiAtCQkJZXJyID0gUFRSX0VSUihzZ3QpOwo+ID4gKwkJbWFwID0gaG9zdDF4X2Jv X3Bpbihob3N0LT5kZXYsIGctPmJvLCBETUFfVE9fREVWSUNFKTsKPiA+ICsJCWlmIChJU19FUlIo bWFwKSkgewo+ID4gKwkJCWVyciA9IFBUUl9FUlIobWFwKTsKPiA+ICAJCQlnb3RvIHVucGluOwo+ ID4gIAkJfQo+ID4gIAo+ID4gIAkJaWYgKCFJU19FTkFCTEVEKENPTkZJR19URUdSQV9IT1NUMVhf RklSRVdBTEwpICYmIGhvc3QtPmRvbWFpbikgewo+ID4gLQkJCWZvcl9lYWNoX3NnKHNndC0+c2ds LCBzZywgc2d0LT5uZW50cywgaikKPiA+ICsJCQlmb3JfZWFjaF9zZyhtYXAtPnNndC0+c2dsLCBz ZywgbWFwLT5zZ3QtPm5lbnRzLCBqKQo+ID4gIAkJCQlnYXRoZXJfc2l6ZSArPSBzZy0+bGVuZ3Ro Owo+ID4gKwo+ID4gIAkJCWdhdGhlcl9zaXplID0gaW92YV9hbGlnbigmaG9zdC0+aW92YSwgZ2F0 aGVyX3NpemUpOwo+ID4gIAo+ID4gIAkJCXNoaWZ0ID0gaW92YV9zaGlmdCgmaG9zdC0+aW92YSk7 Cj4gPiBAQCAtMjA0LDM1ICsxODMsMjQgQEAgc3RhdGljIHVuc2lnbmVkIGludCBwaW5fam9iKHN0 cnVjdCBob3N0MXggKmhvc3QsIHN0cnVjdCBob3N0MXhfam9iICpqb2IpCj4gPiAgCQkJfQo+ID4g IAo+ID4gIAkJCWVyciA9IGlvbW11X21hcF9zZyhob3N0LT5kb21haW4sCj4gPiAtCQkJCQlpb3Zh X2RtYV9hZGRyKCZob3N0LT5pb3ZhLCBhbGxvYyksCj4gPiAtCQkJCQlzZ3QtPnNnbCwgc2d0LT5u ZW50cywgSU9NTVVfUkVBRCk7Cj4gPiArCQkJCQkgICBpb3ZhX2RtYV9hZGRyKCZob3N0LT5pb3Zh LCBhbGxvYyksCj4gPiArCQkJCQkgICBtYXAtPnNndC0+c2dsLCBtYXAtPnNndC0+bmVudHMsCj4g PiArCQkJCQkgICBJT01NVV9SRUFEKTsKPiA+ICAJCQlpZiAoZXJyID09IDApIHsKPiA+ICAJCQkJ X19mcmVlX2lvdmEoJmhvc3QtPmlvdmEsIGFsbG9jKTsKPiA+ICAJCQkJZXJyID0gLUVJTlZBTDsK PiA+ICAJCQkJZ290byB1bnBpbjsKPiA+ICAJCQl9Cj4gPiAgCj4gPiAtCQkJam9iLT51bnBpbnNb am9iLT5udW1fdW5waW5zXS5zaXplID0gZ2F0aGVyX3NpemU7Cj4gPiAtCQkJcGh5c19hZGRyID0g aW92YV9kbWFfYWRkcigmaG9zdC0+aW92YSwgYWxsb2MpOwo+ID4gLQkJfSBlbHNlIHsKPiA+IC0J CQllcnIgPSBkbWFfbWFwX3NnKGhvc3QtPmRldiwgc2d0LT5zZ2wsIHNndC0+bmVudHMsCj4gPiAt CQkJCQkgRE1BX1RPX0RFVklDRSk7Cj4gPiAtCQkJaWYgKCFlcnIpIHsKPiA+IC0JCQkJZXJyID0g LUVOT01FTTsKPiA+IC0JCQkJZ290byB1bnBpbjsKPiA+IC0JCQl9Cj4gPiAtCj4gPiAtCQkJam9i LT51bnBpbnNbam9iLT5udW1fdW5waW5zXS5kZXYgPSBob3N0LT5kZXY7Cj4gPiAtCQkJcGh5c19h ZGRyID0gc2dfZG1hX2FkZHJlc3Moc2d0LT5zZ2wpOwo+ID4gKwkJCW1hcC0+cGh5cyA9IGlvdmFf ZG1hX2FkZHIoJmhvc3QtPmlvdmEsIGFsbG9jKTsKPiA+ICsJCQltYXAtPnNpemUgPSBnYXRoZXJf c2l6ZTsKPiA+ICAJCX0KPiA+ICAKPiA+IC0JCWpvYi0+YWRkcl9waHlzW2pvYi0+bnVtX3VucGlu c10gPSBwaHlzX2FkZHI7Cj4gPiAtCQlqb2ItPmdhdGhlcl9hZGRyX3BoeXNbaV0gPSBwaHlzX2Fk ZHI7Cj4gPiAtCj4gPiAtCQlqb2ItPnVucGluc1tqb2ItPm51bV91bnBpbnNdLmRpciA9IERNQV9U T19ERVZJQ0U7Cj4gPiAtCQlqb2ItPnVucGluc1tqb2ItPm51bV91bnBpbnNdLmJvID0gZy0+Ym87 Cj4gPiAtCQlqb2ItPnVucGluc1tqb2ItPm51bV91bnBpbnNdLnNndCA9IHNndDsKPiA+ICsJCWpv Yi0+YWRkcl9waHlzW2pvYi0+bnVtX3VucGluc10gPSBtYXAtPnBoeXM7Cj4gPiArCQlqb2ItPnVu cGluc1tqb2ItPm51bV91bnBpbnNdLm1hcCA9IG1hcDsKPiA+ICAJCWpvYi0+bnVtX3VucGlucysr Owo+ID4gKwo+ID4gKwkJam9iLT5nYXRoZXJfYWRkcl9waHlzW2ldID0gbWFwLT5waHlzOwo+ID4g IAl9Cj4gPiAgCj4gPiAgCXJldHVybiAwOwo+ID4gQEAgLTYwOCwyNCArNTc2LDE5IEBAIHZvaWQg aG9zdDF4X2pvYl91bnBpbihzdHJ1Y3QgaG9zdDF4X2pvYiAqam9iKQo+ID4gIAl1bnNpZ25lZCBp bnQgaTsKPiA+ICAKPiA+ICAJZm9yIChpID0gMDsgaSA8IGpvYi0+bnVtX3VucGluczsgaSsrKSB7 Cj4gPiAtCQlzdHJ1Y3QgaG9zdDF4X2pvYl91bnBpbl9kYXRhICp1bnBpbiA9ICZqb2ItPnVucGlu c1tpXTsKPiA+IC0JCXN0cnVjdCBkZXZpY2UgKmRldiA9IHVucGluLT5kZXYgPzogaG9zdC0+ZGV2 Owo+ID4gLQkJc3RydWN0IHNnX3RhYmxlICpzZ3QgPSB1bnBpbi0+c2d0Owo+ID4gKwkJc3RydWN0 IGhvc3QxeF9ib19tYXBwaW5nICptYXAgPSBqb2ItPnVucGluc1tpXS5tYXA7Cj4gPiArCQlzdHJ1 Y3QgaG9zdDF4X2JvICpibyA9IG1hcC0+Ym87Cj4gPiAgCj4gPiAgCQlpZiAoIUlTX0VOQUJMRUQo Q09ORklHX1RFR1JBX0hPU1QxWF9GSVJFV0FMTCkgJiYKPiA+IC0JCSAgICB1bnBpbi0+c2l6ZSAm JiBob3N0LT5kb21haW4pIHsKPiA+ICsJCSAgICBtYXAtPnNpemUgJiYgaG9zdC0+ZG9tYWluKSB7 Cj4gPiAgCQkJaW9tbXVfdW5tYXAoaG9zdC0+ZG9tYWluLCBqb2ItPmFkZHJfcGh5c1tpXSwKPiA+ IC0JCQkJICAgIHVucGluLT5zaXplKTsKPiA+ICsJCQkJICAgIG1hcC0+c2l6ZSk7Cj4gPiAgCQkJ ZnJlZV9pb3ZhKCZob3N0LT5pb3ZhLAo+ID4gLQkJCQlpb3ZhX3BmbigmaG9zdC0+aW92YSwgam9i LT5hZGRyX3BoeXNbaV0pKTsKPiA+ICsJCQkJICBpb3ZhX3BmbigmaG9zdC0+aW92YSwgam9iLT5h ZGRyX3BoeXNbaV0pKTsKPiA+ICAJCX0KPiA+ICAKPiA+IC0JCWlmICh1bnBpbi0+ZGV2ICYmIHNn dCkKPiA+IC0JCQlkbWFfdW5tYXBfc2codW5waW4tPmRldiwgc2d0LT5zZ2wsIHNndC0+bmVudHMs Cj4gPiAtCQkJCSAgICAgdW5waW4tPmRpcik7Cj4gPiAtCj4gPiAtCQlob3N0MXhfYm9fdW5waW4o ZGV2LCB1bnBpbi0+Ym8sIHNndCk7Cj4gPiAtCQlob3N0MXhfYm9fcHV0KHVucGluLT5ibyk7Cj4g PiArCQlob3N0MXhfYm9fdW5waW4obWFwKTsKPiA+ICsJCWhvc3QxeF9ib19wdXQoYm8pOwo+ID4g IAl9Cj4gPiAgCj4gPiAgCWpvYi0+bnVtX3VucGlucyA9IDA7Cj4gPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvaG9zdDF4L2pvYi5oIGIvZHJpdmVycy9ncHUvaG9zdDF4L2pvYi5oCj4gPiBpbmRl eCA5NGJjMmU0YWUyNDEuLmMyOGVlYmI4Y2UxNCAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1 L2hvc3QxeC9qb2IuaAo+ID4gKysrIGIvZHJpdmVycy9ncHUvaG9zdDF4L2pvYi5oCj4gPiBAQCAt MTksMTEgKzE5LDcgQEAgc3RydWN0IGhvc3QxeF9qb2JfZ2F0aGVyIHsKPiA+ICB9Owo+ID4gIAo+ ID4gIHN0cnVjdCBob3N0MXhfam9iX3VucGluX2RhdGEgewo+ID4gLQlzdHJ1Y3QgaG9zdDF4X2Jv ICpibzsKPiA+IC0Jc3RydWN0IHNnX3RhYmxlICpzZ3Q7Cj4gPiAtCXN0cnVjdCBkZXZpY2UgKmRl djsKPiA+IC0Jc2l6ZV90IHNpemU7Cj4gPiAtCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcjsK PiA+ICsJc3RydWN0IGhvc3QxeF9ib19tYXBwaW5nICptYXA7Cj4gPiAgfTsKPiA+ICAKPiA+ICAv Kgo+ID4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaG9zdDF4LmggYi9pbmNsdWRlL2xpbnV4 L2hvc3QxeC5oCj4gPiBpbmRleCAwMjU0ZWJjZGMwYTcuLmYxZTZmYWQxOTI4OSAxMDA2NDQKPiA+ IC0tLSBhL2luY2x1ZGUvbGludXgvaG9zdDF4LmgKPiA+ICsrKyBiL2luY2x1ZGUvbGludXgvaG9z dDF4LmgKPiA+IEBAIC03LDYgKzcsNyBAQAo+ID4gICNkZWZpbmUgX19MSU5VWF9IT1NUMVhfSAo+ ID4gIAo+ID4gICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgv ZG1hLWRpcmVjdGlvbi5oPgo+ID4gICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgo+ID4gIAo+ID4g IGVudW0gaG9zdDF4X2NsYXNzIHsKPiA+IEBAIC03MiwxMiArNzMsMjQgQEAgc3RydWN0IGhvc3Qx eF9jbGllbnQgewo+ID4gIHN0cnVjdCBob3N0MXhfYm87Cj4gPiAgc3RydWN0IHNnX3RhYmxlOwo+ ID4gIAo+ID4gK3N0cnVjdCBob3N0MXhfYm9fbWFwcGluZyB7Cj4gPiArCXN0cnVjdCBkbWFfYnVm X2F0dGFjaG1lbnQgKmF0dGFjaDsKPiA+ICsJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0 aW9uOwo+ID4gKwlzdHJ1Y3QgaG9zdDF4X2JvICpibzsKPiA+ICsJc3RydWN0IHNnX3RhYmxlICpz Z3Q7Cj4gPiArCXVuc2lnbmVkIGludCBjaHVua3M7Cj4gPiArCXN0cnVjdCBkZXZpY2UgKmRldjsK PiA+ICsJZG1hX2FkZHJfdCBwaHlzOwo+ID4gKwlzaXplX3Qgc2l6ZTsKPiA+ICt9Owo+ID4gKwo+ ID4gIHN0cnVjdCBob3N0MXhfYm9fb3BzIHsKPiA+ICAJc3RydWN0IGhvc3QxeF9ibyAqKCpnZXQp KHN0cnVjdCBob3N0MXhfYm8gKmJvKTsKPiA+ICAJdm9pZCAoKnB1dCkoc3RydWN0IGhvc3QxeF9i byAqYm8pOwo+ID4gLQlzdHJ1Y3Qgc2dfdGFibGUgKigqcGluKShzdHJ1Y3QgZGV2aWNlICpkZXYs IHN0cnVjdCBob3N0MXhfYm8gKmJvLAo+ID4gLQkJCQlkbWFfYWRkcl90ICpwaHlzKTsKPiA+IC0J dm9pZCAoKnVucGluKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzZ190YWJsZSAqc2d0KTsK PiA+ICsJc3RydWN0IGhvc3QxeF9ib19tYXBwaW5nICooKnBpbikoc3RydWN0IGRldmljZSAqZGV2 LAo+ID4gKwkJCQkJIHN0cnVjdCBob3N0MXhfYm8gKmJvLAo+ID4gKwkJCQkJIGVudW0gZG1hX2Rh dGFfZGlyZWN0aW9uIGRpcik7Cj4gPiArCXZvaWQgKCp1bnBpbikoc3RydWN0IGhvc3QxeF9ib19t YXBwaW5nICptYXApOwo+ID4gIAl2b2lkICooKm1tYXApKHN0cnVjdCBob3N0MXhfYm8gKmJvKTsK PiA+ICAJdm9pZCAoKm11bm1hcCkoc3RydWN0IGhvc3QxeF9ibyAqYm8sIHZvaWQgKmFkZHIpOwo+ ID4gIH07Cj4gPiBAQCAtMTAyLDE3ICsxMTUsMTYgQEAgc3RhdGljIGlubGluZSB2b2lkIGhvc3Qx eF9ib19wdXQoc3RydWN0IGhvc3QxeF9ibyAqYm8pCj4gPiAgCWJvLT5vcHMtPnB1dChibyk7Cj4g PiAgfQo+ID4gIAo+ID4gLXN0YXRpYyBpbmxpbmUgc3RydWN0IHNnX3RhYmxlICpob3N0MXhfYm9f cGluKHN0cnVjdCBkZXZpY2UgKmRldiwKPiA+IC0JCQkJCSAgICAgc3RydWN0IGhvc3QxeF9ibyAq Ym8sCj4gPiAtCQkJCQkgICAgIGRtYV9hZGRyX3QgKnBoeXMpCj4gPiArc3RhdGljIGlubGluZSBz dHJ1Y3QgaG9zdDF4X2JvX21hcHBpbmcgKgo+ID4gK2hvc3QxeF9ib19waW4oc3RydWN0IGRldmlj ZSAqZGV2LCBzdHJ1Y3QgaG9zdDF4X2JvICpibywKPiA+ICsJICAgICAgZW51bSBkbWFfZGF0YV9k aXJlY3Rpb24gZGlyKQo+ID4gIHsKPiA+IC0JcmV0dXJuIGJvLT5vcHMtPnBpbihkZXYsIGJvLCBw aHlzKTsKPiA+ICsJcmV0dXJuIGJvLT5vcHMtPnBpbihkZXYsIGJvLCBkaXIpOwo+ID4gIH0KPiA+ ICAKPiA+IC1zdGF0aWMgaW5saW5lIHZvaWQgaG9zdDF4X2JvX3VucGluKHN0cnVjdCBkZXZpY2Ug KmRldiwgc3RydWN0IGhvc3QxeF9ibyAqYm8sCj4gPiAtCQkJCSAgIHN0cnVjdCBzZ190YWJsZSAq c2d0KQo+ID4gK3N0YXRpYyBpbmxpbmUgdm9pZCBob3N0MXhfYm9fdW5waW4oc3RydWN0IGhvc3Qx eF9ib19tYXBwaW5nICptYXApCj4gPiAgewo+ID4gLQliby0+b3BzLT51bnBpbihkZXYsIHNndCk7 Cj4gPiArCW1hcC0+Ym8tPm9wcy0+dW5waW4obWFwKTsKPiA+ICB9Cj4gPiAgCj4gPiAgc3RhdGlj IGlubGluZSB2b2lkICpob3N0MXhfYm9fbW1hcChzdHJ1Y3QgaG9zdDF4X2JvICpibykKPiA+IC0t IAo+ID4gMi4yMy4wCj4gPiAKPiAKPiAtLSAKPiBEYW5pZWwgVmV0dGVyCj4gU29mdHdhcmUgRW5n aW5lZXIsIEludGVsIENvcnBvcmF0aW9uCj4gaHR0cDovL2Jsb2cuZmZ3bGwuY2gKCi0tIApEYW5p ZWwgVmV0dGVyClNvZnR3YXJlIEVuZ2luZWVyLCBJbnRlbCBDb3Jwb3JhdGlvbgpodHRwOi8vYmxv Zy5mZndsbC5jaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcK aHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWw=