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:33:08 +0100 Message-ID: <20191203173308.GK624164@phenom.ffwll.local> References: <20191203163203.1486837-1-thierry.reding@gmail.com> <20191203163203.1486837-3-thierry.reding@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <20191203163203.1486837-3-thierry.reding@gmail.com> 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 T24gVHVlLCBEZWMgMDMsIDIwMTkgYXQgMDU6MzI6MDNQTSArMDEwMCwgVGhpZXJyeSBSZWRpbmcg d3JvdGU6Cj4gRnJvbTogVGhpZXJyeSBSZWRpbmcgPHRyZWRpbmdAbnZpZGlhLmNvbT4KPiAKPiBE TUEtQlVGIHJlcXVpcmVzIHRoYXQgZWFjaCBkZXZpY2UgdGhhdCBhY2Nlc3NlcyBhIERNQS1CVUYg YXR0YWNoZXMgdG8gaXQKPiBzZXBhcmF0ZWx5LiBUbyBkbyBzbyB0aGUgaG9zdDF4X2JvX3Bpbigp IGFuZCBob3N0MXhfYm9fdW5waW4oKSBmdW5jdGlvbnMKPiBuZWVkIHRvIGJlIHJlaW1wbGVtZW50 ZWQgc28gdGhhdCB0aGV5IGNhbiByZXR1cm4gYSBtYXBwaW5nLCB3aGljaCBlaXRoZXIKPiByZXBy ZXNlbnRzIGFuIGF0dGFjaG1lbnQgb3IgYSBtYXAgb2YgdGhlIGRyaXZlcidzIG93biBHRU0gb2Jq ZWN0Lgo+IAo+IFNpZ25lZC1vZmYtYnk6IFRoaWVycnkgUmVkaW5nIDx0cmVkaW5nQG52aWRpYS5j b20+CgpJIGRpZG4ndCBjaGVjayB0aGUgZnVsbCBkZXRhaWxzLCBidXQgdGhpcyBsb29rcyBsaWtl IGl0J3MgZG9pbmcgdGhpbmdzIGFzCmludGVuZGVkLgoKQWNrZWQtYnk6IERhbmllbCBWZXR0ZXIg PGRhbmllbC52ZXR0ZXJAZmZ3bGwuY2g+CgpDaGVlcnMsIERhbmllbAoKPiAtLS0KPiAgZHJpdmVy cy9ncHUvZHJtL3RlZ3JhL2dlbS5jICAgfCAxMzEgKysrKysrKysrKysrKysrKysrKysrLS0tLS0t LS0tLS0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vdGVncmEvcGxhbmUuYyB8ICA0NyArKysrLS0tLS0t LS0KPiAgZHJpdmVycy9ncHUvZHJtL3RlZ3JhL3BsYW5lLmggfCAgIDIgKy0KPiAgZHJpdmVycy9n cHUvaG9zdDF4L2pvYi5jICAgICAgfCAxMjcgKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0t LS0KPiAgZHJpdmVycy9ncHUvaG9zdDF4L2pvYi5oICAgICAgfCAgIDYgKy0KPiAgaW5jbHVkZS9s aW51eC9ob3N0MXguaCAgICAgICAgfCAgMzIgKysrKysrLS0tCj4gIDYgZmlsZXMgY2hhbmdlZCwg MTYyIGluc2VydGlvbnMoKyksIDE4MyBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL3RlZ3JhL2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL3RlZ3JhL2dlbS5jCj4g aW5kZXggMTIzN2RmMTU3ZTA1Li5jMDg1NDk5MDY3ZWQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL3RlZ3JhL2dlbS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3RlZ3JhL2dlbS5jCj4g QEAgLTI3LDcxICsyNyw3NyBAQCBzdGF0aWMgdm9pZCB0ZWdyYV9ib19wdXQoc3RydWN0IGhvc3Qx eF9ibyAqYm8pCj4gIAlkcm1fZ2VtX29iamVjdF9wdXRfdW5sb2NrZWQoJm9iai0+Z2VtKTsKPiAg fQo+ICAKPiAtLyogWFhYIG1vdmUgdGhpcyBpbnRvIGxpYi9zY2F0dGVybGlzdC5jPyAqLwo+IC1z dGF0aWMgaW50IHNnX2FsbG9jX3RhYmxlX2Zyb21fc2coc3RydWN0IHNnX3RhYmxlICpzZ3QsIHN0 cnVjdCBzY2F0dGVybGlzdCAqc2csCj4gLQkJCQkgIHVuc2lnbmVkIGludCBuZW50cywgZ2ZwX3Qg Z2ZwX21hc2spCj4gK3N0YXRpYyBzdHJ1Y3QgaG9zdDF4X2JvX21hcHBpbmcgKgo+ICt0ZWdyYV9i b19waW4oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgaG9zdDF4X2JvICpibywKPiArCSAgICAg ZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQo+ICB7Cj4gLQlzdHJ1Y3Qgc2NhdHRl cmxpc3QgKmRzdDsKPiAtCXVuc2lnbmVkIGludCBpOwo+ICsJc3RydWN0IHRlZ3JhX2JvICpvYmog PSBob3N0MXhfdG9fdGVncmFfYm8oYm8pOwo+ICsJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW0g PSAmb2JqLT5nZW07Cj4gKwlzdHJ1Y3QgaG9zdDF4X2JvX21hcHBpbmcgKm1hcDsKPiAgCWludCBl cnI7Cj4gIAo+IC0JZXJyID0gc2dfYWxsb2NfdGFibGUoc2d0LCBuZW50cywgZ2ZwX21hc2spOwo+ IC0JaWYgKGVyciA8IDApCj4gLQkJcmV0dXJuIGVycjsKPiAtCj4gLQlkc3QgPSBzZ3QtPnNnbDsK PiArCW1hcCA9IGt6YWxsb2Moc2l6ZW9mKCptYXApLCBHRlBfS0VSTkVMKTsKPiArCWlmICghbWFw KQo+ICsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwo+ICAKPiAtCWZvciAoaSA9IDA7IGkgPCBu ZW50czsgaSsrKSB7Cj4gLQkJc2dfc2V0X3BhZ2UoZHN0LCBzZ19wYWdlKHNnKSwgc2ctPmxlbmd0 aCwgMCk7Cj4gLQkJZHN0ID0gc2dfbmV4dChkc3QpOwo+IC0JCXNnID0gc2dfbmV4dChzZyk7Cj4g LQl9Cj4gLQo+IC0JcmV0dXJuIDA7Cj4gLX0KPiAtCj4gLXN0YXRpYyBzdHJ1Y3Qgc2dfdGFibGUg KnRlZ3JhX2JvX3BpbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBob3N0MXhfYm8gKmJvLAo+ IC0JCQkJICAgICBkbWFfYWRkcl90ICpwaHlzKQo+IC17Cj4gLQlzdHJ1Y3QgdGVncmFfYm8gKm9i aiA9IGhvc3QxeF90b190ZWdyYV9ibyhibyk7Cj4gLQlzdHJ1Y3Qgc2dfdGFibGUgKnNndDsKPiAt CWludCBlcnI7Cj4gKwltYXAtPmRpcmVjdGlvbiA9IGRpcmVjdGlvbjsKPiArCW1hcC0+ZGV2ID0g ZGV2Owo+ICsJbWFwLT5ibyA9IGJvOwo+ICAKPiAgCS8qCj4gIAkgKiBJZiB3ZSd2ZSBtYW51YWxs eSBtYXBwZWQgdGhlIGJ1ZmZlciBvYmplY3QgdGhyb3VnaCB0aGUgSU9NTVUsIG1ha2UKPiAgCSAq IHN1cmUgdG8gcmV0dXJuIHRoZSBJT1ZBIGFkZHJlc3Mgb2Ygb3VyIG1hcHBpbmcuCj4gIAkgKi8K PiAtCWlmIChwaHlzICYmIG9iai0+bW0pIHsKPiAtCQkqcGh5cyA9IG9iai0+aW92YTsKPiAtCQly ZXR1cm4gTlVMTDsKPiArCWlmIChvYmotPm1tKSB7Cj4gKwkJbWFwLT5waHlzID0gb2JqLT5pb3Zh Owo+ICsJCXJldHVybiBtYXA7Cj4gKwl9Cj4gKwo+ICsJLyoKPiArCSAqIEltcG9ydGVkIGJ1ZmZl cnMgbmVlZCBzcGVjaWFsIHRyZWF0bWVudCB0byBzYXRpc2Z5IHRoZSBzZW1hbnRpY3Mgb2YKPiAr CSAqIERNQS1CVUYuCj4gKwkgKi8KPiArCWlmIChnZW0tPmltcG9ydF9hdHRhY2gpIHsKPiArCQlz dHJ1Y3QgZG1hX2J1ZiAqYnVmID0gZ2VtLT5pbXBvcnRfYXR0YWNoLT5kbWFidWY7Cj4gKwo+ICsJ CW1hcC0+YXR0YWNoID0gZG1hX2J1Zl9hdHRhY2goYnVmLCBkZXYpOwo+ICsJCWlmIChJU19FUlIo bWFwLT5hdHRhY2gpKSB7Cj4gKwkJCWVyciA9IFBUUl9FUlIobWFwLT5hdHRhY2gpOwo+ICsJCQln b3RvIGZyZWU7Cj4gKwkJfQo+ICsKPiArCQltYXAtPnNndCA9IGRtYV9idWZfbWFwX2F0dGFjaG1l bnQobWFwLT5hdHRhY2gsIGRpcmVjdGlvbik7Cj4gKwkJaWYgKElTX0VSUihtYXAtPnNndCkpIHsK PiArCQkJZG1hX2J1Zl9kZXRhY2goYnVmLCBtYXAtPmF0dGFjaCk7Cj4gKwkJCWVyciA9IFBUUl9F UlIobWFwLT5zZ3QpOwo+ICsJCQlnb3RvIGZyZWU7Cj4gKwkJfQo+ICsKPiArCQltYXAtPmNodW5r cyA9IHNndF9kbWFfY291bnRfY2h1bmtzKG1hcC0+c2d0KTsKPiArCQltYXAtPnBoeXMgPSBzZ19k bWFfYWRkcmVzcyhtYXAtPnNndC0+c2dsKTsKPiArCQltYXAtPnNpemUgPSBnZW0tPnNpemU7Cj4g Kwo+ICsJCXJldHVybiBtYXA7Cj4gIAl9Cj4gIAo+ICAJLyoKPiAgCSAqIElmIHdlIGRvbid0IGhh dmUgYSBtYXBwaW5nIGZvciB0aGlzIGJ1ZmZlciB5ZXQsIHJldHVybiBhbiBTRyB0YWJsZQo+ICAJ ICogc28gdGhhdCBob3N0MXggY2FuIGRvIHRoZSBtYXBwaW5nIGZvciB1cyB2aWEgdGhlIERNQSBB UEkuCj4gIAkgKi8KPiAtCXNndCA9IGt6YWxsb2Moc2l6ZW9mKCpzZ3QpLCBHRlBfS0VSTkVMKTsK PiAtCWlmICghc2d0KQo+IC0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwo+ICsJbWFwLT5zZ3Qg PSBremFsbG9jKHNpemVvZigqbWFwLT5zZ3QpLCBHRlBfS0VSTkVMKTsKPiArCWlmICghbWFwLT5z Z3QpIHsKPiArCQllcnIgPSAtRU5PTUVNOwo+ICsJCWdvdG8gZnJlZTsKPiArCX0KPiAgCj4gIAlp ZiAob2JqLT5wYWdlcykgewo+ICAJCS8qCj4gIAkJICogSWYgdGhlIGJ1ZmZlciBvYmplY3Qgd2Fz IGFsbG9jYXRlZCBmcm9tIHRoZSBleHBsaWNpdCBJT01NVQo+ICAJCSAqIEFQSSBjb2RlIHBhdGhz LCBjb25zdHJ1Y3QgYW4gU0cgdGFibGUgZnJvbSB0aGUgcGFnZXMuCj4gIAkJICovCj4gLQkJZXJy ID0gc2dfYWxsb2NfdGFibGVfZnJvbV9wYWdlcyhzZ3QsIG9iai0+cGFnZXMsIG9iai0+bnVtX3Bh Z2VzLAo+IC0JCQkJCQkwLCBvYmotPmdlbS5zaXplLCBHRlBfS0VSTkVMKTsKPiAtCQlpZiAoZXJy IDwgMCkKPiAtCQkJZ290byBmcmVlOwo+IC0JfSBlbHNlIGlmIChvYmotPnNndCkgewo+IC0JCS8q Cj4gLQkJICogSWYgdGhlIGJ1ZmZlciBvYmplY3QgYWxyZWFkeSBoYXMgYW4gU0cgdGFibGUgYnV0 IG5vIHBhZ2VzCj4gLQkJICogd2VyZSBhbGxvY2F0ZWQgZm9yIGl0LCBpdCBtZWFucyB0aGUgYnVm ZmVyIHdhcyBpbXBvcnRlZCBhbmQKPiAtCQkgKiB0aGUgU0cgdGFibGUgbmVlZHMgdG8gYmUgY29w aWVkIHRvIGF2b2lkIG92ZXJ3cml0aW5nIGFueQo+IC0JCSAqIG90aGVyIHBvdGVudGlhbCB1c2Vy cyBvZiB0aGUgb3JpZ2luYWwgU0cgdGFibGUuCj4gLQkJICovCj4gLQkJZXJyID0gc2dfYWxsb2Nf dGFibGVfZnJvbV9zZyhzZ3QsIG9iai0+c2d0LT5zZ2wsIG9iai0+c2d0LT5uZW50cywKPiAtCQkJ CQkgICAgIEdGUF9LRVJORUwpOwo+ICsJCWVyciA9IHNnX2FsbG9jX3RhYmxlX2Zyb21fcGFnZXMo bWFwLT5zZ3QsIG9iai0+cGFnZXMsCj4gKwkJCQkJCW9iai0+bnVtX3BhZ2VzLCAwLAo+ICsJCQkJ CQlvYmotPmdlbS5zaXplLCBHRlBfS0VSTkVMKTsKPiAgCQlpZiAoZXJyIDwgMCkKPiAgCQkJZ290 byBmcmVlOwo+ICAJfSBlbHNlIHsKPiBAQCAtMTAwLDI1ICsxMDYsNDggQEAgc3RhdGljIHN0cnVj dCBzZ190YWJsZSAqdGVncmFfYm9fcGluKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGhvc3Qx eF9ibyAqYm8sCj4gIAkJICogbm90IGltcG9ydGVkLCBpdCBoYWQgdG8gYmUgYWxsb2NhdGVkIHdp dGggdGhlIERNQSBBUEksIHNvCj4gIAkJICogdGhlIERNQSBBUEkgaGVscGVyIGNhbiBiZSB1c2Vk Lgo+ICAJCSAqLwo+IC0JCWVyciA9IGRtYV9nZXRfc2d0YWJsZShkZXYsIHNndCwgb2JqLT52YWRk ciwgb2JqLT5pb3ZhLAo+ICsJCWVyciA9IGRtYV9nZXRfc2d0YWJsZShkZXYsIG1hcC0+c2d0LCBv YmotPnZhZGRyLCBvYmotPmlvdmEsCj4gIAkJCQkgICAgICBvYmotPmdlbS5zaXplKTsKPiAgCQlp ZiAoZXJyIDwgMCkKPiAgCQkJZ290byBmcmVlOwo+ICAJfQo+ICAKPiAtCXJldHVybiBzZ3Q7Cj4g KwllcnIgPSBkbWFfbWFwX3NnKGRldiwgbWFwLT5zZ3QtPnNnbCwgbWFwLT5zZ3QtPm5lbnRzLCBk aXJlY3Rpb24pOwo+ICsJaWYgKCFlcnIpIHsKPiArCQllcnIgPSAtRU5PTUVNOwo+ICsJCWdvdG8g ZnJlZV9zZ3Q7Cj4gKwl9Cj4gKwo+ICsJbWFwLT5waHlzID0gc2dfZG1hX2FkZHJlc3MobWFwLT5z Z3QtPnNnbCk7Cj4gKwltYXAtPnNpemUgPSBnZW0tPnNpemU7Cj4gKwltYXAtPmNodW5rcyA9IGVy cjsKPiArCj4gKwlyZXR1cm4gbWFwOwo+ICAKPiArZnJlZV9zZ3Q6Cj4gKwlzZ19mcmVlX3RhYmxl KG1hcC0+c2d0KTsKPiAgZnJlZToKPiAtCWtmcmVlKHNndCk7Cj4gKwlrZnJlZShtYXAtPnNndCk7 Cj4gKwlrZnJlZShtYXApOwo+ICAJcmV0dXJuIEVSUl9QVFIoZXJyKTsKPiAgfQo+ICAKPiAtc3Rh dGljIHZvaWQgdGVncmFfYm9fdW5waW4oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2dfdGFi bGUgKnNndCkKPiArc3RhdGljIHZvaWQgdGVncmFfYm9fdW5waW4oc3RydWN0IGhvc3QxeF9ib19t YXBwaW5nICptYXApCj4gIHsKPiAtCWlmIChzZ3QpIHsKPiAtCQlzZ19mcmVlX3RhYmxlKHNndCk7 Cj4gLQkJa2ZyZWUoc2d0KTsKPiArCWlmICghbWFwKQo+ICsJCXJldHVybjsKPiArCj4gKwlpZiAo bWFwLT5hdHRhY2gpIHsKPiArCQlkbWFfYnVmX3VubWFwX2F0dGFjaG1lbnQobWFwLT5hdHRhY2gs IG1hcC0+c2d0LCBtYXAtPmRpcmVjdGlvbik7Cj4gKwkJZG1hX2J1Zl9kZXRhY2gobWFwLT5hdHRh Y2gtPmRtYWJ1ZiwgbWFwLT5hdHRhY2gpOwo+ICsJfSBlbHNlIHsKPiArCQlkbWFfdW5tYXBfc2co bWFwLT5kZXYsIG1hcC0+c2d0LT5zZ2wsIG1hcC0+c2d0LT5uZW50cywKPiArCQkJICAgICBtYXAt PmRpcmVjdGlvbik7Cj4gKwkJc2dfZnJlZV90YWJsZShtYXAtPnNndCk7Cj4gKwkJa2ZyZWUobWFw LT5zZ3QpOwo+ICAJfQo+ICsKPiArCWtmcmVlKG1hcCk7Cj4gIH0KPiAgCj4gIHN0YXRpYyB2b2lk ICp0ZWdyYV9ib19tbWFwKHN0cnVjdCBob3N0MXhfYm8gKmJvKQo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vdGVncmEvcGxhbmUuYyBiL2RyaXZlcnMvZ3B1L2RybS90ZWdyYS9wbGFuZS5j Cj4gaW5kZXggY2FkY2RkOWVhNDI3Li4yOGNmNjY4MDI2ZGEgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVy cy9ncHUvZHJtL3RlZ3JhL3BsYW5lLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vdGVncmEvcGxh bmUuYwo+IEBAIC02Nyw3ICs2Nyw3IEBAIHRlZ3JhX3BsYW5lX2F0b21pY19kdXBsaWNhdGVfc3Rh dGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUpCj4gIAo+ICAJZm9yIChpID0gMDsgaSA8IDM7IGkr Kykgewo+ICAJCWNvcHktPmlvdmFbaV0gPSBETUFfTUFQUElOR19FUlJPUjsKPiAtCQljb3B5LT5z Z3RbaV0gPSBOVUxMOwo+ICsJCWNvcHktPm1hcFtpXSA9IE5VTEw7Cj4gIAl9Cj4gIAo+ICAJcmV0 dXJuICZjb3B5LT5iYXNlOwo+IEBAIC0xMTQsMTggKzExNCwxMSBAQCBzdGF0aWMgaW50IHRlZ3Jh X2RjX3BpbihzdHJ1Y3QgdGVncmFfZGMgKmRjLCBzdHJ1Y3QgdGVncmFfcGxhbmVfc3RhdGUgKnN0 YXRlKQo+ICAJCXN0cnVjdCB0ZWdyYV9ibyAqYm8gPSB0ZWdyYV9mYl9nZXRfcGxhbmUoc3RhdGUt PmJhc2UuZmIsIGkpOwo+ICAKPiAgCQlpZiAoIWRjLT5jbGllbnQuZ3JvdXApIHsKPiAtCQkJc3Ry dWN0IHNnX3RhYmxlICpzZ3Q7Cj4gKwkJCXN0cnVjdCBob3N0MXhfYm9fbWFwcGluZyAqbWFwOwo+ ICAKPiAtCQkJc2d0ID0gaG9zdDF4X2JvX3BpbihkYy0+ZGV2LCAmYm8tPmJhc2UsIE5VTEwpOwo+ IC0JCQlpZiAoSVNfRVJSKHNndCkpIHsKPiAtCQkJCWVyciA9IFBUUl9FUlIoc2d0KTsKPiAtCQkJ CWdvdG8gdW5waW47Cj4gLQkJCX0KPiAtCj4gLQkJCWVyciA9IGRtYV9tYXBfc2coZGMtPmRldiwg c2d0LT5zZ2wsIHNndC0+bmVudHMsCj4gLQkJCQkJIERNQV9UT19ERVZJQ0UpOwo+IC0JCQlpZiAo ZXJyID09IDApIHsKPiAtCQkJCWVyciA9IC1FTk9NRU07Cj4gKwkJCW1hcCA9IGhvc3QxeF9ib19w aW4oZGMtPmRldiwgJmJvLT5iYXNlLCBETUFfVE9fREVWSUNFKTsKPiArCQkJaWYgKElTX0VSUiht YXApKSB7Cj4gKwkJCQllcnIgPSBQVFJfRVJSKG1hcCk7Cj4gIAkJCQlnb3RvIHVucGluOwo+ICAJ CQl9Cj4gIAo+IEBAIC0xMzUsMTMgKzEyOCwxMyBAQCBzdGF0aWMgaW50IHRlZ3JhX2RjX3Bpbihz dHJ1Y3QgdGVncmFfZGMgKmRjLCBzdHJ1Y3QgdGVncmFfcGxhbmVfc3RhdGUgKnN0YXRlKQo+ICAJ CQkgKiBtYXAgaXRzIFNHIHRhYmxlIHRvIGEgc2luZ2xlIGNvbnRpZ3VvdXMgY2h1bmsgb2YKPiAg CQkJICogSS9PIHZpcnR1YWwgbWVtb3J5Lgo+ICAJCQkgKi8KPiAtCQkJaWYgKGVyciA+IDEpIHsK PiArCQkJaWYgKG1hcC0+Y2h1bmtzID4gMSkgewo+ICAJCQkJZXJyID0gLUVJTlZBTDsKPiAgCQkJ CWdvdG8gdW5waW47Cj4gIAkJCX0KPiAgCj4gLQkJCXN0YXRlLT5pb3ZhW2ldID0gc2dfZG1hX2Fk ZHJlc3Moc2d0LT5zZ2wpOwo+IC0JCQlzdGF0ZS0+c2d0W2ldID0gc2d0Owo+ICsJCQlzdGF0ZS0+ aW92YVtpXSA9IG1hcC0+cGh5czsKPiArCQkJc3RhdGUtPm1hcFtpXSA9IG1hcDsKPiAgCQl9IGVs c2Ugewo+ICAJCQlzdGF0ZS0+aW92YVtpXSA9IGJvLT5pb3ZhOwo+ICAJCX0KPiBAQCAtMTUzLDE0 ICsxNDYsOSBAQCBzdGF0aWMgaW50IHRlZ3JhX2RjX3BpbihzdHJ1Y3QgdGVncmFfZGMgKmRjLCBz dHJ1Y3QgdGVncmFfcGxhbmVfc3RhdGUgKnN0YXRlKQo+ICAJZGV2X2VycihkYy0+ZGV2LCAiZmFp bGVkIHRvIG1hcCBwbGFuZSAldTogJWRcbiIsIGksIGVycik7Cj4gIAo+ICAJd2hpbGUgKGktLSkg ewo+IC0JCXN0cnVjdCB0ZWdyYV9ibyAqYm8gPSB0ZWdyYV9mYl9nZXRfcGxhbmUoc3RhdGUtPmJh c2UuZmIsIGkpOwo+IC0JCXN0cnVjdCBzZ190YWJsZSAqc2d0ID0gc3RhdGUtPnNndFtpXTsKPiAt Cj4gLQkJZG1hX3VubWFwX3NnKGRjLT5kZXYsIHNndC0+c2dsLCBzZ3QtPm5lbnRzLCBETUFfVE9f REVWSUNFKTsKPiAtCQlob3N0MXhfYm9fdW5waW4oZGMtPmRldiwgJmJvLT5iYXNlLCBzZ3QpOwo+ IC0KPiArCQlob3N0MXhfYm9fdW5waW4oc3RhdGUtPm1hcFtpXSk7Cj4gIAkJc3RhdGUtPmlvdmFb aV0gPSBETUFfTUFQUElOR19FUlJPUjsKPiAtCQlzdGF0ZS0+c2d0W2ldID0gTlVMTDsKPiArCQlz dGF0ZS0+bWFwW2ldID0gTlVMTDsKPiAgCX0KPiAgCj4gIAlyZXR1cm4gZXJyOwo+IEBAIC0xNzEs MjAgKzE1OSwxMSBAQCBzdGF0aWMgdm9pZCB0ZWdyYV9kY191bnBpbihzdHJ1Y3QgdGVncmFfZGMg KmRjLCBzdHJ1Y3QgdGVncmFfcGxhbmVfc3RhdGUgKnN0YXRlKQo+ICAJdW5zaWduZWQgaW50IGk7 Cj4gIAo+ICAJZm9yIChpID0gMDsgaSA8IHN0YXRlLT5iYXNlLmZiLT5mb3JtYXQtPm51bV9wbGFu ZXM7IGkrKykgewo+IC0JCXN0cnVjdCB0ZWdyYV9ibyAqYm8gPSB0ZWdyYV9mYl9nZXRfcGxhbmUo c3RhdGUtPmJhc2UuZmIsIGkpOwo+IC0KPiAtCQlpZiAoIWRjLT5jbGllbnQuZ3JvdXApIHsKPiAt CQkJc3RydWN0IHNnX3RhYmxlICpzZ3QgPSBzdGF0ZS0+c2d0W2ldOwo+IC0KPiAtCQkJaWYgKHNn dCkgewo+IC0JCQkJZG1hX3VubWFwX3NnKGRjLT5kZXYsIHNndC0+c2dsLCBzZ3QtPm5lbnRzLAo+ IC0JCQkJCSAgICAgRE1BX1RPX0RFVklDRSk7Cj4gLQkJCQlob3N0MXhfYm9fdW5waW4oZGMtPmRl diwgJmJvLT5iYXNlLCBzZ3QpOwo+IC0JCQl9Cj4gLQkJfQo+ICsJCWlmICghZGMtPmNsaWVudC5n cm91cCkKPiArCQkJaG9zdDF4X2JvX3VucGluKHN0YXRlLT5tYXBbaV0pOwo+ICAKPiAgCQlzdGF0 ZS0+aW92YVtpXSA9IERNQV9NQVBQSU5HX0VSUk9SOwo+IC0JCXN0YXRlLT5zZ3RbaV0gPSBOVUxM Owo+ICsJCXN0YXRlLT5tYXBbaV0gPSBOVUxMOwo+ICAJfQo+ICB9Cj4gIAo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vdGVncmEvcGxhbmUuaCBiL2RyaXZlcnMvZ3B1L2RybS90ZWdyYS9w bGFuZS5oCj4gaW5kZXggYTE1OGE5MTUxMDlhLi4wOGRmMWJhMWY1NjcgMTAwNjQ0Cj4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL3RlZ3JhL3BsYW5lLmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vdGVn cmEvcGxhbmUuaAo+IEBAIC0zOSw3ICszOSw3IEBAIHN0cnVjdCB0ZWdyYV9wbGFuZV9sZWdhY3lf YmxlbmRpbmdfc3RhdGUgewo+ICBzdHJ1Y3QgdGVncmFfcGxhbmVfc3RhdGUgewo+ICAJc3RydWN0 IGRybV9wbGFuZV9zdGF0ZSBiYXNlOwo+ICAKPiAtCXN0cnVjdCBzZ190YWJsZSAqc2d0WzNdOwo+ ICsJc3RydWN0IGhvc3QxeF9ib19tYXBwaW5nICptYXBbM107Cj4gIAlkbWFfYWRkcl90IGlvdmFb M107Cj4gIAo+ICAJc3RydWN0IHRlZ3JhX2JvX3RpbGluZyB0aWxpbmc7Cj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2hvc3QxeC9qb2IuYyBiL2RyaXZlcnMvZ3B1L2hvc3QxeC9qb2IuYwo+IGlu ZGV4IDYwYjJmZWRkMDA2MS4uODhlNDQ1NTUzZGYzIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1 L2hvc3QxeC9qb2IuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2hvc3QxeC9qb2IuYwo+IEBAIC05OSw2 ICs5OSw3IEBAIEVYUE9SVF9TWU1CT0woaG9zdDF4X2pvYl9hZGRfZ2F0aGVyKTsKPiAgCj4gIHN0 YXRpYyB1bnNpZ25lZCBpbnQgcGluX2pvYihzdHJ1Y3QgaG9zdDF4ICpob3N0LCBzdHJ1Y3QgaG9z dDF4X2pvYiAqam9iKQo+ICB7Cj4gKwl1bnNpZ25lZCBsb25nIG1hc2sgPSBIT1NUMVhfUkVMT0Nf UkVBRCB8IEhPU1QxWF9SRUxPQ19XUklURTsKPiAgCXN0cnVjdCBob3N0MXhfY2xpZW50ICpjbGll bnQgPSBqb2ItPmNsaWVudDsKPiAgCXN0cnVjdCBkZXZpY2UgKmRldiA9IGNsaWVudC0+ZGV2Owo+ ICAJdW5zaWduZWQgaW50IGk7Cj4gQEAgLTEwOCw4ICsxMDksOCBAQCBzdGF0aWMgdW5zaWduZWQg aW50IHBpbl9qb2Ioc3RydWN0IGhvc3QxeCAqaG9zdCwgc3RydWN0IGhvc3QxeF9qb2IgKmpvYikK PiAgCj4gIAlmb3IgKGkgPSAwOyBpIDwgam9iLT5udW1fcmVsb2NzOyBpKyspIHsKPiAgCQlzdHJ1 Y3QgaG9zdDF4X3JlbG9jICpyZWxvYyA9ICZqb2ItPnJlbG9jc1tpXTsKPiAtCQlkbWFfYWRkcl90 IHBoeXNfYWRkciwgKnBoeXM7Cj4gLQkJc3RydWN0IHNnX3RhYmxlICpzZ3Q7Cj4gKwkJZW51bSBk bWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uOwo+ICsJCXN0cnVjdCBob3N0MXhfYm9fbWFwcGlu ZyAqbWFwOwo+ICAKPiAgCQlyZWxvYy0+dGFyZ2V0LmJvID0gaG9zdDF4X2JvX2dldChyZWxvYy0+ dGFyZ2V0LmJvKTsKPiAgCQlpZiAoIXJlbG9jLT50YXJnZXQuYm8pIHsKPiBAQCAtMTE3LDYzICsx MTgsNDAgQEAgc3RhdGljIHVuc2lnbmVkIGludCBwaW5fam9iKHN0cnVjdCBob3N0MXggKmhvc3Qs IHN0cnVjdCBob3N0MXhfam9iICpqb2IpCj4gIAkJCWdvdG8gdW5waW47Cj4gIAkJfQo+ICAKPiAt CQlpZiAoY2xpZW50LT5ncm91cCkKPiAtCQkJcGh5cyA9ICZwaHlzX2FkZHI7Cj4gLQkJZWxzZQo+ IC0JCQlwaHlzID0gTlVMTDsKPiAtCj4gLQkJc2d0ID0gaG9zdDF4X2JvX3BpbihkZXYsIHJlbG9j LT50YXJnZXQuYm8sIHBoeXMpOwo+IC0JCWlmIChJU19FUlIoc2d0KSkgewo+IC0JCQllcnIgPSBQ VFJfRVJSKHNndCk7Cj4gLQkJCWdvdG8gdW5waW47Cj4gLQkJfQo+IC0KPiAtCQlpZiAoc2d0KSB7 Cj4gLQkJCXVuc2lnbmVkIGxvbmcgbWFzayA9IEhPU1QxWF9SRUxPQ19SRUFEIHwKPiAtCQkJCQkg ICAgIEhPU1QxWF9SRUxPQ19XUklURTsKPiAtCQkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGly Owo+IC0KPiAtCQkJc3dpdGNoIChyZWxvYy0+ZmxhZ3MgJiBtYXNrKSB7Cj4gLQkJCWNhc2UgSE9T VDFYX1JFTE9DX1JFQUQ6Cj4gLQkJCQlkaXIgPSBETUFfVE9fREVWSUNFOwo+IC0JCQkJYnJlYWs7 Cj4gLQo+IC0JCQljYXNlIEhPU1QxWF9SRUxPQ19XUklURToKPiAtCQkJCWRpciA9IERNQV9GUk9N X0RFVklDRTsKPiAtCQkJCWJyZWFrOwo+ICsJCXN3aXRjaCAocmVsb2MtPmZsYWdzICYgbWFzaykg ewo+ICsJCWNhc2UgSE9TVDFYX1JFTE9DX1JFQUQ6Cj4gKwkJCWRpcmVjdGlvbiA9IERNQV9UT19E RVZJQ0U7Cj4gKwkJCWJyZWFrOwo+ICAKPiAtCQkJY2FzZSBIT1NUMVhfUkVMT0NfUkVBRCB8IEhP U1QxWF9SRUxPQ19XUklURToKPiAtCQkJCWRpciA9IERNQV9CSURJUkVDVElPTkFMOwo+IC0JCQkJ YnJlYWs7Cj4gKwkJY2FzZSBIT1NUMVhfUkVMT0NfV1JJVEU6Cj4gKwkJCWRpcmVjdGlvbiA9IERN QV9GUk9NX0RFVklDRTsKPiArCQkJYnJlYWs7Cj4gIAo+IC0JCQlkZWZhdWx0Ogo+IC0JCQkJZXJy ID0gLUVJTlZBTDsKPiAtCQkJCWdvdG8gdW5waW47Cj4gLQkJCX0KPiArCQljYXNlIEhPU1QxWF9S RUxPQ19SRUFEIHwgSE9TVDFYX1JFTE9DX1dSSVRFOgo+ICsJCQlkaXJlY3Rpb24gPSBETUFfQklE SVJFQ1RJT05BTDsKPiArCQkJYnJlYWs7Cj4gIAo+IC0JCQllcnIgPSBkbWFfbWFwX3NnKGRldiwg c2d0LT5zZ2wsIHNndC0+bmVudHMsIGRpcik7Cj4gLQkJCWlmICghZXJyKSB7Cj4gLQkJCQllcnIg PSAtRU5PTUVNOwo+IC0JCQkJZ290byB1bnBpbjsKPiAtCQkJfQo+ICsJCWRlZmF1bHQ6Cj4gKwkJ CWVyciA9IC1FSU5WQUw7Cj4gKwkJCWdvdG8gdW5waW47Cj4gKwkJfQo+ICAKPiAtCQkJam9iLT51 bnBpbnNbam9iLT5udW1fdW5waW5zXS5kZXYgPSBkZXY7Cj4gLQkJCWpvYi0+dW5waW5zW2pvYi0+ bnVtX3VucGluc10uZGlyID0gZGlyOwo+IC0JCQlwaHlzX2FkZHIgPSBzZ19kbWFfYWRkcmVzcyhz Z3QtPnNnbCk7Cj4gKwkJbWFwID0gaG9zdDF4X2JvX3BpbihkZXYsIHJlbG9jLT50YXJnZXQuYm8s IGRpcmVjdGlvbik7Cj4gKwkJaWYgKElTX0VSUihtYXApKSB7Cj4gKwkJCWVyciA9IFBUUl9FUlIo bWFwKTsKPiArCQkJZ290byB1bnBpbjsKPiAgCQl9Cj4gIAo+IC0JCWpvYi0+YWRkcl9waHlzW2pv Yi0+bnVtX3VucGluc10gPSBwaHlzX2FkZHI7Cj4gLQkJam9iLT51bnBpbnNbam9iLT5udW1fdW5w aW5zXS5ibyA9IHJlbG9jLT50YXJnZXQuYm87Cj4gLQkJam9iLT51bnBpbnNbam9iLT5udW1fdW5w aW5zXS5zZ3QgPSBzZ3Q7Cj4gKwkJam9iLT5hZGRyX3BoeXNbam9iLT5udW1fdW5waW5zXSA9IG1h cC0+cGh5czsKPiArCQlqb2ItPnVucGluc1tqb2ItPm51bV91bnBpbnNdLm1hcCA9IG1hcDsKPiAg CQlqb2ItPm51bV91bnBpbnMrKzsKPiAgCX0KPiAgCj4gIAlmb3IgKGkgPSAwOyBpIDwgam9iLT5u dW1fZ2F0aGVyczsgaSsrKSB7Cj4gIAkJc3RydWN0IGhvc3QxeF9qb2JfZ2F0aGVyICpnID0gJmpv Yi0+Z2F0aGVyc1tpXTsKPiArCQlzdHJ1Y3QgaG9zdDF4X2JvX21hcHBpbmcgKm1hcDsKPiAgCQlz aXplX3QgZ2F0aGVyX3NpemUgPSAwOwo+ICAJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7Cj4gLQkJ c3RydWN0IHNnX3RhYmxlICpzZ3Q7Cj4gLQkJZG1hX2FkZHJfdCBwaHlzX2FkZHI7Cj4gIAkJdW5z aWduZWQgbG9uZyBzaGlmdDsKPiAgCQlzdHJ1Y3QgaW92YSAqYWxsb2M7Cj4gIAkJdW5zaWduZWQg aW50IGo7Cj4gQEAgLTE4NCwxNSArMTYyLDE2IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgcGluX2pv YihzdHJ1Y3QgaG9zdDF4ICpob3N0LCBzdHJ1Y3QgaG9zdDF4X2pvYiAqam9iKQo+ICAJCQlnb3Rv IHVucGluOwo+ICAJCX0KPiAgCj4gLQkJc2d0ID0gaG9zdDF4X2JvX3Bpbihob3N0LT5kZXYsIGct PmJvLCBOVUxMKTsKPiAtCQlpZiAoSVNfRVJSKHNndCkpIHsKPiAtCQkJZXJyID0gUFRSX0VSUihz Z3QpOwo+ICsJCW1hcCA9IGhvc3QxeF9ib19waW4oaG9zdC0+ZGV2LCBnLT5ibywgRE1BX1RPX0RF VklDRSk7Cj4gKwkJaWYgKElTX0VSUihtYXApKSB7Cj4gKwkJCWVyciA9IFBUUl9FUlIobWFwKTsK PiAgCQkJZ290byB1bnBpbjsKPiAgCQl9Cj4gIAo+ICAJCWlmICghSVNfRU5BQkxFRChDT05GSUdf VEVHUkFfSE9TVDFYX0ZJUkVXQUxMKSAmJiBob3N0LT5kb21haW4pIHsKPiAtCQkJZm9yX2VhY2hf c2coc2d0LT5zZ2wsIHNnLCBzZ3QtPm5lbnRzLCBqKQo+ICsJCQlmb3JfZWFjaF9zZyhtYXAtPnNn dC0+c2dsLCBzZywgbWFwLT5zZ3QtPm5lbnRzLCBqKQo+ICAJCQkJZ2F0aGVyX3NpemUgKz0gc2ct Pmxlbmd0aDsKPiArCj4gIAkJCWdhdGhlcl9zaXplID0gaW92YV9hbGlnbigmaG9zdC0+aW92YSwg Z2F0aGVyX3NpemUpOwo+ICAKPiAgCQkJc2hpZnQgPSBpb3ZhX3NoaWZ0KCZob3N0LT5pb3ZhKTsK PiBAQCAtMjA0LDM1ICsxODMsMjQgQEAgc3RhdGljIHVuc2lnbmVkIGludCBwaW5fam9iKHN0cnVj dCBob3N0MXggKmhvc3QsIHN0cnVjdCBob3N0MXhfam9iICpqb2IpCj4gIAkJCX0KPiAgCj4gIAkJ CWVyciA9IGlvbW11X21hcF9zZyhob3N0LT5kb21haW4sCj4gLQkJCQkJaW92YV9kbWFfYWRkcigm aG9zdC0+aW92YSwgYWxsb2MpLAo+IC0JCQkJCXNndC0+c2dsLCBzZ3QtPm5lbnRzLCBJT01NVV9S RUFEKTsKPiArCQkJCQkgICBpb3ZhX2RtYV9hZGRyKCZob3N0LT5pb3ZhLCBhbGxvYyksCj4gKwkJ CQkJICAgbWFwLT5zZ3QtPnNnbCwgbWFwLT5zZ3QtPm5lbnRzLAo+ICsJCQkJCSAgIElPTU1VX1JF QUQpOwo+ICAJCQlpZiAoZXJyID09IDApIHsKPiAgCQkJCV9fZnJlZV9pb3ZhKCZob3N0LT5pb3Zh LCBhbGxvYyk7Cj4gIAkJCQllcnIgPSAtRUlOVkFMOwo+ICAJCQkJZ290byB1bnBpbjsKPiAgCQkJ fQo+ICAKPiAtCQkJam9iLT51bnBpbnNbam9iLT5udW1fdW5waW5zXS5zaXplID0gZ2F0aGVyX3Np emU7Cj4gLQkJCXBoeXNfYWRkciA9IGlvdmFfZG1hX2FkZHIoJmhvc3QtPmlvdmEsIGFsbG9jKTsK PiAtCQl9IGVsc2Ugewo+IC0JCQllcnIgPSBkbWFfbWFwX3NnKGhvc3QtPmRldiwgc2d0LT5zZ2ws IHNndC0+bmVudHMsCj4gLQkJCQkJIERNQV9UT19ERVZJQ0UpOwo+IC0JCQlpZiAoIWVycikgewo+ IC0JCQkJZXJyID0gLUVOT01FTTsKPiAtCQkJCWdvdG8gdW5waW47Cj4gLQkJCX0KPiAtCj4gLQkJ CWpvYi0+dW5waW5zW2pvYi0+bnVtX3VucGluc10uZGV2ID0gaG9zdC0+ZGV2Owo+IC0JCQlwaHlz X2FkZHIgPSBzZ19kbWFfYWRkcmVzcyhzZ3QtPnNnbCk7Cj4gKwkJCW1hcC0+cGh5cyA9IGlvdmFf ZG1hX2FkZHIoJmhvc3QtPmlvdmEsIGFsbG9jKTsKPiArCQkJbWFwLT5zaXplID0gZ2F0aGVyX3Np emU7Cj4gIAkJfQo+ICAKPiAtCQlqb2ItPmFkZHJfcGh5c1tqb2ItPm51bV91bnBpbnNdID0gcGh5 c19hZGRyOwo+IC0JCWpvYi0+Z2F0aGVyX2FkZHJfcGh5c1tpXSA9IHBoeXNfYWRkcjsKPiAtCj4g LQkJam9iLT51bnBpbnNbam9iLT5udW1fdW5waW5zXS5kaXIgPSBETUFfVE9fREVWSUNFOwo+IC0J CWpvYi0+dW5waW5zW2pvYi0+bnVtX3VucGluc10uYm8gPSBnLT5ibzsKPiAtCQlqb2ItPnVucGlu c1tqb2ItPm51bV91bnBpbnNdLnNndCA9IHNndDsKPiArCQlqb2ItPmFkZHJfcGh5c1tqb2ItPm51 bV91bnBpbnNdID0gbWFwLT5waHlzOwo+ICsJCWpvYi0+dW5waW5zW2pvYi0+bnVtX3VucGluc10u bWFwID0gbWFwOwo+ICAJCWpvYi0+bnVtX3VucGlucysrOwo+ICsKPiArCQlqb2ItPmdhdGhlcl9h ZGRyX3BoeXNbaV0gPSBtYXAtPnBoeXM7Cj4gIAl9Cj4gIAo+ICAJcmV0dXJuIDA7Cj4gQEAgLTYw OCwyNCArNTc2LDE5IEBAIHZvaWQgaG9zdDF4X2pvYl91bnBpbihzdHJ1Y3QgaG9zdDF4X2pvYiAq am9iKQo+ICAJdW5zaWduZWQgaW50IGk7Cj4gIAo+ICAJZm9yIChpID0gMDsgaSA8IGpvYi0+bnVt X3VucGluczsgaSsrKSB7Cj4gLQkJc3RydWN0IGhvc3QxeF9qb2JfdW5waW5fZGF0YSAqdW5waW4g PSAmam9iLT51bnBpbnNbaV07Cj4gLQkJc3RydWN0IGRldmljZSAqZGV2ID0gdW5waW4tPmRldiA/ OiBob3N0LT5kZXY7Cj4gLQkJc3RydWN0IHNnX3RhYmxlICpzZ3QgPSB1bnBpbi0+c2d0Owo+ICsJ CXN0cnVjdCBob3N0MXhfYm9fbWFwcGluZyAqbWFwID0gam9iLT51bnBpbnNbaV0ubWFwOwo+ICsJ CXN0cnVjdCBob3N0MXhfYm8gKmJvID0gbWFwLT5ibzsKPiAgCj4gIAkJaWYgKCFJU19FTkFCTEVE KENPTkZJR19URUdSQV9IT1NUMVhfRklSRVdBTEwpICYmCj4gLQkJICAgIHVucGluLT5zaXplICYm IGhvc3QtPmRvbWFpbikgewo+ICsJCSAgICBtYXAtPnNpemUgJiYgaG9zdC0+ZG9tYWluKSB7Cj4g IAkJCWlvbW11X3VubWFwKGhvc3QtPmRvbWFpbiwgam9iLT5hZGRyX3BoeXNbaV0sCj4gLQkJCQkg ICAgdW5waW4tPnNpemUpOwo+ICsJCQkJICAgIG1hcC0+c2l6ZSk7Cj4gIAkJCWZyZWVfaW92YSgm aG9zdC0+aW92YSwKPiAtCQkJCWlvdmFfcGZuKCZob3N0LT5pb3ZhLCBqb2ItPmFkZHJfcGh5c1tp XSkpOwo+ICsJCQkJICBpb3ZhX3BmbigmaG9zdC0+aW92YSwgam9iLT5hZGRyX3BoeXNbaV0pKTsK PiAgCQl9Cj4gIAo+IC0JCWlmICh1bnBpbi0+ZGV2ICYmIHNndCkKPiAtCQkJZG1hX3VubWFwX3Nn KHVucGluLT5kZXYsIHNndC0+c2dsLCBzZ3QtPm5lbnRzLAo+IC0JCQkJICAgICB1bnBpbi0+ZGly KTsKPiAtCj4gLQkJaG9zdDF4X2JvX3VucGluKGRldiwgdW5waW4tPmJvLCBzZ3QpOwo+IC0JCWhv c3QxeF9ib19wdXQodW5waW4tPmJvKTsKPiArCQlob3N0MXhfYm9fdW5waW4obWFwKTsKPiArCQlo b3N0MXhfYm9fcHV0KGJvKTsKPiAgCX0KPiAgCj4gIAlqb2ItPm51bV91bnBpbnMgPSAwOwo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9ob3N0MXgvam9iLmggYi9kcml2ZXJzL2dwdS9ob3N0MXgv am9iLmgKPiBpbmRleCA5NGJjMmU0YWUyNDEuLmMyOGVlYmI4Y2UxNCAxMDA2NDQKPiAtLS0gYS9k cml2ZXJzL2dwdS9ob3N0MXgvam9iLmgKPiArKysgYi9kcml2ZXJzL2dwdS9ob3N0MXgvam9iLmgK PiBAQCAtMTksMTEgKzE5LDcgQEAgc3RydWN0IGhvc3QxeF9qb2JfZ2F0aGVyIHsKPiAgfTsKPiAg Cj4gIHN0cnVjdCBob3N0MXhfam9iX3VucGluX2RhdGEgewo+IC0Jc3RydWN0IGhvc3QxeF9ibyAq Ym87Cj4gLQlzdHJ1Y3Qgc2dfdGFibGUgKnNndDsKPiAtCXN0cnVjdCBkZXZpY2UgKmRldjsKPiAt CXNpemVfdCBzaXplOwo+IC0JZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyOwo+ICsJc3RydWN0 IGhvc3QxeF9ib19tYXBwaW5nICptYXA7Cj4gIH07Cj4gIAo+ICAvKgo+IGRpZmYgLS1naXQgYS9p bmNsdWRlL2xpbnV4L2hvc3QxeC5oIGIvaW5jbHVkZS9saW51eC9ob3N0MXguaAo+IGluZGV4IDAy NTRlYmNkYzBhNy4uZjFlNmZhZDE5Mjg5IDEwMDY0NAo+IC0tLSBhL2luY2x1ZGUvbGludXgvaG9z dDF4LmgKPiArKysgYi9pbmNsdWRlL2xpbnV4L2hvc3QxeC5oCj4gQEAgLTcsNiArNyw3IEBACj4g ICNkZWZpbmUgX19MSU5VWF9IT1NUMVhfSAo+ICAKPiAgI2luY2x1ZGUgPGxpbnV4L2RldmljZS5o Pgo+ICsjaW5jbHVkZSA8bGludXgvZG1hLWRpcmVjdGlvbi5oPgo+ICAjaW5jbHVkZSA8bGludXgv dHlwZXMuaD4KPiAgCj4gIGVudW0gaG9zdDF4X2NsYXNzIHsKPiBAQCAtNzIsMTIgKzczLDI0IEBA IHN0cnVjdCBob3N0MXhfY2xpZW50IHsKPiAgc3RydWN0IGhvc3QxeF9ibzsKPiAgc3RydWN0IHNn X3RhYmxlOwo+ICAKPiArc3RydWN0IGhvc3QxeF9ib19tYXBwaW5nIHsKPiArCXN0cnVjdCBkbWFf YnVmX2F0dGFjaG1lbnQgKmF0dGFjaDsKPiArCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVj dGlvbjsKPiArCXN0cnVjdCBob3N0MXhfYm8gKmJvOwo+ICsJc3RydWN0IHNnX3RhYmxlICpzZ3Q7 Cj4gKwl1bnNpZ25lZCBpbnQgY2h1bmtzOwo+ICsJc3RydWN0IGRldmljZSAqZGV2Owo+ICsJZG1h X2FkZHJfdCBwaHlzOwo+ICsJc2l6ZV90IHNpemU7Cj4gK307Cj4gKwo+ICBzdHJ1Y3QgaG9zdDF4 X2JvX29wcyB7Cj4gIAlzdHJ1Y3QgaG9zdDF4X2JvICooKmdldCkoc3RydWN0IGhvc3QxeF9ibyAq Ym8pOwo+ICAJdm9pZCAoKnB1dCkoc3RydWN0IGhvc3QxeF9ibyAqYm8pOwo+IC0Jc3RydWN0IHNn X3RhYmxlICooKnBpbikoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgaG9zdDF4X2JvICpibywK PiAtCQkJCWRtYV9hZGRyX3QgKnBoeXMpOwo+IC0Jdm9pZCAoKnVucGluKShzdHJ1Y3QgZGV2aWNl ICpkZXYsIHN0cnVjdCBzZ190YWJsZSAqc2d0KTsKPiArCXN0cnVjdCBob3N0MXhfYm9fbWFwcGlu ZyAqKCpwaW4pKHN0cnVjdCBkZXZpY2UgKmRldiwKPiArCQkJCQkgc3RydWN0IGhvc3QxeF9ibyAq Ym8sCj4gKwkJCQkJIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcik7Cj4gKwl2b2lkICgqdW5w aW4pKHN0cnVjdCBob3N0MXhfYm9fbWFwcGluZyAqbWFwKTsKPiAgCXZvaWQgKigqbW1hcCkoc3Ry dWN0IGhvc3QxeF9ibyAqYm8pOwo+ICAJdm9pZCAoKm11bm1hcCkoc3RydWN0IGhvc3QxeF9ibyAq Ym8sIHZvaWQgKmFkZHIpOwo+ICB9Owo+IEBAIC0xMDIsMTcgKzExNSwxNiBAQCBzdGF0aWMgaW5s aW5lIHZvaWQgaG9zdDF4X2JvX3B1dChzdHJ1Y3QgaG9zdDF4X2JvICpibykKPiAgCWJvLT5vcHMt PnB1dChibyk7Cj4gIH0KPiAgCj4gLXN0YXRpYyBpbmxpbmUgc3RydWN0IHNnX3RhYmxlICpob3N0 MXhfYm9fcGluKHN0cnVjdCBkZXZpY2UgKmRldiwKPiAtCQkJCQkgICAgIHN0cnVjdCBob3N0MXhf Ym8gKmJvLAo+IC0JCQkJCSAgICAgZG1hX2FkZHJfdCAqcGh5cykKPiArc3RhdGljIGlubGluZSBz dHJ1Y3QgaG9zdDF4X2JvX21hcHBpbmcgKgo+ICtob3N0MXhfYm9fcGluKHN0cnVjdCBkZXZpY2Ug KmRldiwgc3RydWN0IGhvc3QxeF9ibyAqYm8sCj4gKwkgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVj dGlvbiBkaXIpCj4gIHsKPiAtCXJldHVybiBiby0+b3BzLT5waW4oZGV2LCBibywgcGh5cyk7Cj4g KwlyZXR1cm4gYm8tPm9wcy0+cGluKGRldiwgYm8sIGRpcik7Cj4gIH0KPiAgCj4gLXN0YXRpYyBp bmxpbmUgdm9pZCBob3N0MXhfYm9fdW5waW4oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgaG9z dDF4X2JvICpibywKPiAtCQkJCSAgIHN0cnVjdCBzZ190YWJsZSAqc2d0KQo+ICtzdGF0aWMgaW5s aW5lIHZvaWQgaG9zdDF4X2JvX3VucGluKHN0cnVjdCBob3N0MXhfYm9fbWFwcGluZyAqbWFwKQo+ ICB7Cj4gLQliby0+b3BzLT51bnBpbihkZXYsIHNndCk7Cj4gKwltYXAtPmJvLT5vcHMtPnVucGlu KG1hcCk7Cj4gIH0KPiAgCj4gIHN0YXRpYyBpbmxpbmUgdm9pZCAqaG9zdDF4X2JvX21tYXAoc3Ry dWN0IGhvc3QxeF9ibyAqYm8pCj4gLS0gCj4gMi4yMy4wCj4gCgotLSAKRGFuaWVsIFZldHRlcgpT b2Z0d2FyZSBFbmdpbmVlciwgSW50ZWwgQ29ycG9yYXRpb24KaHR0cDovL2Jsb2cuZmZ3bGwuY2gK X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVs IG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlz dHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVs