From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ralph Campbell Subject: Re: [PATCH v2 12/11] mm/hmm: Fix error flows in hmm_invalidate_range_start Date: Fri, 7 Jun 2019 16:52:58 -0700 Message-ID: <439b5731-0b7e-b25b-ce1a-74b34e1f9bf5@nvidia.com> References: <20190606184438.31646-1-jgg@ziepe.ca> <20190607160557.GA335@ziepe.ca> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20190607160557.GA335@ziepe.ca> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Jason Gunthorpe , Jerome Glisse , John Hubbard , Felix.Kuehling@amd.com Cc: linux-rdma@vger.kernel.org, linux-mm@kvack.org, Andrea Arcangeli , amd-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org List-Id: amd-gfx.lists.freedesktop.org Ck9uIDYvNy8xOSA5OjA1IEFNLCBKYXNvbiBHdW50aG9ycGUgd3JvdGU6Cj4gSWYgdGhlIHRyeWxv Y2sgb24gdGhlIGhtbS0+bWlycm9yc19zZW0gZmFpbHMgdGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJu Cj4gd2l0aG91dCBkZWNyZW1lbnRpbmcgdGhlIG5vdGlmaWVycyB0aGF0IHdlcmUgcHJldmlvdXNs eSBpbmNyZW1lbnRlZC4gU2luY2UKPiB0aGUgY2FsbGVyIHdpbGwgbm90IGNhbGwgaW52YWxpZGF0 ZV9yYW5nZV9lbmQoKSBvbiBFQUdBSU4gdGhpcyB3aWxsIHJlc3VsdAo+IGluIG5vdGlmaWVycyBi ZWNvbWluZyBwZXJtYW5lbnRseSBpbmNyZW1lbnRlZCBhbmQgZGVhZGxvY2suCj4gCj4gSWYgdGhl IHN5bmNfY3B1X2RldmljZV9wYWdldGFibGVzKCkgcmVxdWlyZWQgYmxvY2tpbmcgdGhlIGZ1bmN0 aW9uIHdpbGwKPiBub3QgcmV0dXJuIEVBR0FJTiBldmVuIHRob3VnaCB0aGUgZGV2aWNlIGNvbnRp bnVlcyB0byB0b3VjaCB0aGUKPiBwYWdlcy4gVGhpcyBpcyBhIHZpb2xhdGlvbiBvZiB0aGUgbW11 IG5vdGlmaWVyIGNvbnRyYWN0Lgo+IAo+IFN3aXRjaCwgYW5kIHJlbmFtZSwgdGhlIHJhbmdlc19s b2NrIHRvIGEgc3BpbiBsb2NrIHNvIHdlIGNhbiByZWxpYWJseQo+IG9idGFpbiBpdCB3aXRob3V0 IGJsb2NraW5nIGR1cmluZyBlcnJvciB1bndpbmQuCj4gCj4gVGhlIGVycm9yIHVud2luZCBpcyBu ZWNlc3Nhcnkgc2luY2UgdGhlIG5vdGlmaWVycyBjb3VudCBtdXN0IGJlIGhlbGQKPiBpbmNyZW1l bnRlZCBhY3Jvc3MgdGhlIGNhbGwgdG8gc3luY19jcHVfZGV2aWNlX3BhZ2V0YWJsZXMoKSBhcyB3 ZSBjYW5ub3QKPiBhbGxvdyB0aGUgcmFuZ2UgdG8gYmVjb21lIG1hcmtlZCB2YWxpZCBieSBhIHBh cmFsbGVsCj4gaW52YWxpZGF0ZV9zdGFydC9lbmQoKSBwYWlyIHdoaWxlIGRvaW5nIHN5bmNfY3B1 X2RldmljZV9wYWdldGFibGVzKCkuCj4gCj4gU2lnbmVkLW9mZi1ieTogSmFzb24gR3VudGhvcnBl IDxqZ2dAbWVsbGFub3guY29tPgoKUmV2aWV3ZWQtYnk6IFJhbHBoIENhbXBiZWxsIDxyY2FtcGJl bGxAbnZpZGlhLmNvbT4KCj4gLS0tCj4gICBpbmNsdWRlL2xpbnV4L2htbS5oIHwgIDIgKy0KPiAg IG1tL2htbS5jICAgICAgICAgICAgfCA3NyArKysrKysrKysrKysrKysrKysrKysrKysrKystLS0t LS0tLS0tLS0tLS0tLS0KPiAgIDIgZmlsZXMgY2hhbmdlZCwgNDggaW5zZXJ0aW9ucygrKSwgMzEg ZGVsZXRpb25zKC0pCj4gCj4gSSBhbG1vc3QgbG9zdCB0aGlzIHBhdGNoIC0gaXQgaXMgcGFydCBv ZiB0aGUgc2VyaWVzLCBoYXNuJ3QgYmVlbgo+IHBvc3RlZCBiZWZvcmUsIGFuZCB3YXNuJ3Qgc2Vu dCB3aXRoIHRoZSByZXN0LCBzb3JyeS4KPiAKPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9o bW0uaCBiL2luY2x1ZGUvbGludXgvaG1tLmgKPiBpbmRleCBiZjAxM2U5NjUyNTc3MS4uMGZhOGVh MzRjY2VmNmQgMTAwNjQ0Cj4gLS0tIGEvaW5jbHVkZS9saW51eC9obW0uaAo+ICsrKyBiL2luY2x1 ZGUvbGludXgvaG1tLmgKPiBAQCAtODYsNyArODYsNyBAQAo+ICAgc3RydWN0IGhtbSB7Cj4gICAJ c3RydWN0IG1tX3N0cnVjdAkqbW07Cj4gICAJc3RydWN0IGtyZWYJCWtyZWY7Cj4gLQlzdHJ1Y3Qg bXV0ZXgJCWxvY2s7Cj4gKwlzcGlubG9ja190CQlyYW5nZXNfbG9jazsKPiAgIAlzdHJ1Y3QgbGlz dF9oZWFkCXJhbmdlczsKPiAgIAlzdHJ1Y3QgbGlzdF9oZWFkCW1pcnJvcnM7Cj4gICAJc3RydWN0 IG1tdV9ub3RpZmllcgltbXVfbm90aWZpZXI7Cj4gZGlmZiAtLWdpdCBhL21tL2htbS5jIGIvbW0v aG1tLmMKPiBpbmRleCA0MjE1ZWRmNzM3ZWY1Yi4uMTAxMDNhMjRlOWI3YjMgMTAwNjQ0Cj4gLS0t IGEvbW0vaG1tLmMKPiArKysgYi9tbS9obW0uYwo+IEBAIC02OCw3ICs2OCw3IEBAIHN0YXRpYyBz dHJ1Y3QgaG1tICpobW1fZ2V0X29yX2NyZWF0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKPiAgIAlp bml0X3J3c2VtKCZobW0tPm1pcnJvcnNfc2VtKTsKPiAgIAlobW0tPm1tdV9ub3RpZmllci5vcHMg PSBOVUxMOwo+ICAgCUlOSVRfTElTVF9IRUFEKCZobW0tPnJhbmdlcyk7Cj4gLQltdXRleF9pbml0 KCZobW0tPmxvY2spOwo+ICsJc3Bpbl9sb2NrX2luaXQoJmhtbS0+cmFuZ2VzX2xvY2spOwo+ICAg CWtyZWZfaW5pdCgmaG1tLT5rcmVmKTsKPiAgIAlobW0tPm5vdGlmaWVycyA9IDA7Cj4gICAJaG1t LT5tbSA9IG1tOwo+IEBAIC0xMTQsMTggKzExNCwxOSBAQCBzdGF0aWMgdm9pZCBobW1fcmVsZWFz ZShzdHJ1Y3QgbW11X25vdGlmaWVyICptbiwgc3RydWN0IG1tX3N0cnVjdCAqbW0pCj4gICB7Cj4g ICAJc3RydWN0IGhtbSAqaG1tID0gY29udGFpbmVyX29mKG1uLCBzdHJ1Y3QgaG1tLCBtbXVfbm90 aWZpZXIpOwo+ICAgCXN0cnVjdCBobW1fbWlycm9yICptaXJyb3I7Cj4gKwl1bnNpZ25lZCBsb25n IGZsYWdzOwo+ICAgCj4gICAJLyogQmFpbCBvdXQgaWYgaG1tIGlzIGluIHRoZSBwcm9jZXNzIG9m IGJlaW5nIGZyZWVkICovCj4gICAJaWYgKCFrcmVmX2dldF91bmxlc3NfemVybygmaG1tLT5rcmVm KSkKPiAgIAkJcmV0dXJuOwo+ICAgCj4gLQltdXRleF9sb2NrKCZobW0tPmxvY2spOwo+ICsJc3Bp bl9sb2NrX2lycXNhdmUoJmhtbS0+cmFuZ2VzX2xvY2ssIGZsYWdzKTsKPiAgIAkvKgo+ICAgCSAq IFNpbmNlIGhtbV9yYW5nZV9yZWdpc3RlcigpIGhvbGRzIHRoZSBtbWdldCgpIGxvY2sgaG1tX3Jl bGVhc2UoKSBpcwo+ICAgCSAqIHByZXZlbnRlZCBhcyBsb25nIGFzIGEgcmFuZ2UgZXhpc3RzLgo+ ICAgCSAqLwo+ICAgCVdBUk5fT04oIWxpc3RfZW1wdHkoJmhtbS0+cmFuZ2VzKSk7Cj4gLQltdXRl eF91bmxvY2soJmhtbS0+bG9jayk7Cj4gKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZobW0tPnJh bmdlc19sb2NrLCBmbGFncyk7Cj4gICAKPiAgIAlkb3duX3JlYWQoJmhtbS0+bWlycm9yc19zZW0p Owo+ICAgCWxpc3RfZm9yX2VhY2hfZW50cnkobWlycm9yLCAmaG1tLT5taXJyb3JzLCBsaXN0KSB7 Cj4gQEAgLTE0MSw2ICsxNDIsMjMgQEAgc3RhdGljIHZvaWQgaG1tX3JlbGVhc2Uoc3RydWN0IG1t dV9ub3RpZmllciAqbW4sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQo+ICAgCWhtbV9wdXQoaG1tKTsK PiAgIH0KPiAgIAo+ICtzdGF0aWMgdm9pZCBub3RpZmllcnNfZGVjcmVtZW50KHN0cnVjdCBobW0g KmhtbSkKPiArewo+ICsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmaG1tLT5yYW5nZXNfbG9jayk7Cj4g Kwo+ICsJaG1tLT5ub3RpZmllcnMtLTsKPiArCWlmICghaG1tLT5ub3RpZmllcnMpIHsKPiArCQlz dHJ1Y3QgaG1tX3JhbmdlICpyYW5nZTsKPiArCj4gKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShyYW5n ZSwgJmhtbS0+cmFuZ2VzLCBsaXN0KSB7Cj4gKwkJCWlmIChyYW5nZS0+dmFsaWQpCj4gKwkJCQlj b250aW51ZTsKPiArCQkJcmFuZ2UtPnZhbGlkID0gdHJ1ZTsKPiArCQl9CgpUaGlzIGp1c3QgZWZm ZWN0aXZlbHkgc2V0cyBhbGwgcmFuZ2VzIHRvIHZhbGlkLgpJJ20gbm90IHN1cmUgdGhhdCBpcyBi ZXN0LgpTaG91bGRuJ3QgaG1tX3JhbmdlX3JlZ2lzdGVyKCkgc3RhcnQgd2l0aCByYW5nZS52YWxp ZCA9IHRydWUgYW5kCnRoZW4gaG1tX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoKSBzZXQgYWZmZWN0 ZWQgcmFuZ2VzIHRvIGZhbHNlPwpUaGVuIHRoaXMgYmVjb21lcyBqdXN0IHdha2VfdXBfYWxsKCkg aWYgLS1ub3RpZmllcnMgPT0gMCBhbmQKaG1tX3JhbmdlX3dhaXRfdW50aWxfdmFsaWQoKSBzaG91 bGQgd2FpdCBmb3Igbm90aWZpZXJzID09IDAuCk90aGVyd2lzZSwgcmFuZ2UudmFsaWQgZG9lc24n dCByZWFsbHkgbWVhbiBpdCdzIHZhbGlkLgoKPiArCQl3YWtlX3VwX2FsbCgmaG1tLT53cSk7Cj4g Kwl9Cj4gK30KPiArCj4gICBzdGF0aWMgaW50IGhtbV9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KHN0 cnVjdCBtbXVfbm90aWZpZXIgKm1uLAo+ICAgCQkJY29uc3Qgc3RydWN0IG1tdV9ub3RpZmllcl9y YW5nZSAqbnJhbmdlKQo+ICAgewo+IEBAIC0xNDgsNiArMTY2LDcgQEAgc3RhdGljIGludCBobW1f aW52YWxpZGF0ZV9yYW5nZV9zdGFydChzdHJ1Y3QgbW11X25vdGlmaWVyICptbiwKPiAgIAlzdHJ1 Y3QgaG1tX21pcnJvciAqbWlycm9yOwo+ICAgCXN0cnVjdCBobW1fdXBkYXRlIHVwZGF0ZTsKPiAg IAlzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZTsKPiArCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gICAJ aW50IHJldCA9IDA7Cj4gICAKPiAgIAlpZiAoIWtyZWZfZ2V0X3VubGVzc196ZXJvKCZobW0tPmty ZWYpKQo+IEBAIC0xNTgsMTIgKzE3Nyw3IEBAIHN0YXRpYyBpbnQgaG1tX2ludmFsaWRhdGVfcmFu Z2Vfc3RhcnQoc3RydWN0IG1tdV9ub3RpZmllciAqbW4sCj4gICAJdXBkYXRlLmV2ZW50ID0gSE1N X1VQREFURV9JTlZBTElEQVRFOwo+ICAgCXVwZGF0ZS5ibG9ja2FibGUgPSBtbXVfbm90aWZpZXJf cmFuZ2VfYmxvY2thYmxlKG5yYW5nZSk7Cj4gICAKPiAtCWlmIChtbXVfbm90aWZpZXJfcmFuZ2Vf YmxvY2thYmxlKG5yYW5nZSkpCj4gLQkJbXV0ZXhfbG9jaygmaG1tLT5sb2NrKTsKPiAtCWVsc2Ug aWYgKCFtdXRleF90cnlsb2NrKCZobW0tPmxvY2spKSB7Cj4gLQkJcmV0ID0gLUVBR0FJTjsKPiAt CQlnb3RvIG91dDsKPiAtCX0KPiArCXNwaW5fbG9ja19pcnFzYXZlKCZobW0tPnJhbmdlc19sb2Nr LCBmbGFncyk7Cj4gICAJaG1tLT5ub3RpZmllcnMrKzsKPiAgIAlsaXN0X2Zvcl9lYWNoX2VudHJ5 KHJhbmdlLCAmaG1tLT5yYW5nZXMsIGxpc3QpIHsKPiAgIAkJaWYgKHVwZGF0ZS5lbmQgPCByYW5n ZS0+c3RhcnQgfHwgdXBkYXRlLnN0YXJ0ID49IHJhbmdlLT5lbmQpCj4gQEAgLTE3MSw3ICsxODUs NyBAQCBzdGF0aWMgaW50IGhtbV9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KHN0cnVjdCBtbXVfbm90 aWZpZXIgKm1uLAo+ICAgCj4gICAJCXJhbmdlLT52YWxpZCA9IGZhbHNlOwo+ICAgCX0KPiAtCW11 dGV4X3VubG9jaygmaG1tLT5sb2NrKTsKPiArCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhtbS0+ cmFuZ2VzX2xvY2ssIGZsYWdzKTsKPiAgIAo+ICAgCWlmIChtbXVfbm90aWZpZXJfcmFuZ2VfYmxv Y2thYmxlKG5yYW5nZSkpCj4gICAJCWRvd25fcmVhZCgmaG1tLT5taXJyb3JzX3NlbSk7Cj4gQEAg LTE3OSwxNiArMTkzLDI2IEBAIHN0YXRpYyBpbnQgaG1tX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQo c3RydWN0IG1tdV9ub3RpZmllciAqbW4sCj4gICAJCXJldCA9IC1FQUdBSU47Cj4gICAJCWdvdG8g b3V0Owo+ICAgCX0KPiArCj4gICAJbGlzdF9mb3JfZWFjaF9lbnRyeShtaXJyb3IsICZobW0tPm1p cnJvcnMsIGxpc3QpIHsKPiAtCQlpbnQgcmV0Owo+ICsJCWludCByYzsKPiAgIAo+IC0JCXJldCA9 IG1pcnJvci0+b3BzLT5zeW5jX2NwdV9kZXZpY2VfcGFnZXRhYmxlcyhtaXJyb3IsICZ1cGRhdGUp Owo+IC0JCWlmICghdXBkYXRlLmJsb2NrYWJsZSAmJiByZXQgPT0gLUVBR0FJTikKPiArCQlyYyA9 IG1pcnJvci0+b3BzLT5zeW5jX2NwdV9kZXZpY2VfcGFnZXRhYmxlcyhtaXJyb3IsICZ1cGRhdGUp Owo+ICsJCWlmIChyYykgewo+ICsJCQlpZiAoV0FSTl9PTih1cGRhdGUuYmxvY2thYmxlIHx8IHJj ICE9IC1FQUdBSU4pKQo+ICsJCQkJY29udGludWU7Cj4gKwkJCXJldCA9IC1FQUdBSU47Cj4gICAJ CQlicmVhazsKPiArCQl9Cj4gICAJfQo+ICAgCXVwX3JlYWQoJmhtbS0+bWlycm9yc19zZW0pOwo+ ICAgCj4gICBvdXQ6Cj4gKwlpZiAocmV0KSB7Cj4gKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmhtbS0+ cmFuZ2VzX2xvY2ssIGZsYWdzKTsKPiArCQlub3RpZmllcnNfZGVjcmVtZW50KGhtbSk7Cj4gKwkJ c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG1tLT5yYW5nZXNfbG9jaywgZmxhZ3MpOwo+ICsJfQo+ ICAgCWhtbV9wdXQoaG1tKTsKPiAgIAlyZXR1cm4gcmV0Owo+ICAgfQo+IEBAIC0xOTcsMjMgKzIy MSwxNCBAQCBzdGF0aWMgdm9pZCBobW1faW52YWxpZGF0ZV9yYW5nZV9lbmQoc3RydWN0IG1tdV9u b3RpZmllciAqbW4sCj4gICAJCQljb25zdCBzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlICpucmFu Z2UpCj4gICB7Cj4gICAJc3RydWN0IGhtbSAqaG1tID0gY29udGFpbmVyX29mKG1uLCBzdHJ1Y3Qg aG1tLCBtbXVfbm90aWZpZXIpOwo+ICsJdW5zaWduZWQgbG9uZyBmbGFnczsKPiAgIAo+ICAgCWlm ICgha3JlZl9nZXRfdW5sZXNzX3plcm8oJmhtbS0+a3JlZikpCj4gICAJCXJldHVybjsKPiAgIAo+ IC0JbXV0ZXhfbG9jaygmaG1tLT5sb2NrKTsKPiAtCWhtbS0+bm90aWZpZXJzLS07Cj4gLQlpZiAo IWhtbS0+bm90aWZpZXJzKSB7Cj4gLQkJc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2U7Cj4gLQo+IC0J CWxpc3RfZm9yX2VhY2hfZW50cnkocmFuZ2UsICZobW0tPnJhbmdlcywgbGlzdCkgewo+IC0JCQlp ZiAocmFuZ2UtPnZhbGlkKQo+IC0JCQkJY29udGludWU7Cj4gLQkJCXJhbmdlLT52YWxpZCA9IHRy dWU7Cj4gLQkJfQo+IC0JCXdha2VfdXBfYWxsKCZobW0tPndxKTsKPiAtCX0KPiAtCW11dGV4X3Vu bG9jaygmaG1tLT5sb2NrKTsKPiArCXNwaW5fbG9ja19pcnFzYXZlKCZobW0tPnJhbmdlc19sb2Nr LCBmbGFncyk7Cj4gKwlub3RpZmllcnNfZGVjcmVtZW50KGhtbSk7Cj4gKwlzcGluX3VubG9ja19p cnFyZXN0b3JlKCZobW0tPnJhbmdlc19sb2NrLCBmbGFncyk7Cj4gICAKPiAgIAlobW1fcHV0KGht bSk7Cj4gICB9Cj4gQEAgLTg2Niw2ICs4ODEsNyBAQCBpbnQgaG1tX3JhbmdlX3JlZ2lzdGVyKHN0 cnVjdCBobW1fcmFuZ2UgKnJhbmdlLAo+ICAgewo+ICAgCXVuc2lnbmVkIGxvbmcgbWFzayA9ICgo MVVMIDw8IHBhZ2Vfc2hpZnQpIC0gMVVMKTsKPiAgIAlzdHJ1Y3QgaG1tICpobW0gPSBtaXJyb3It PmhtbTsKPiArCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gICAKPiAgIAlyYW5nZS0+dmFsaWQgPSBm YWxzZTsKPiAgIAlyYW5nZS0+aG1tID0gTlVMTDsKPiBAQCAtODg3LDcgKzkwMyw3IEBAIGludCBo bW1fcmFuZ2VfcmVnaXN0ZXIoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UsCj4gICAJa3JlZl9nZXQo JmhtbS0+a3JlZik7Cj4gICAKPiAgIAkvKiBJbml0aWFsaXplIHJhbmdlIHRvIHRyYWNrIENQVSBw YWdlIHRhYmxlIHVwZGF0ZXMuICovCj4gLQltdXRleF9sb2NrKCZobW0tPmxvY2spOwo+ICsJc3Bp bl9sb2NrX2lycXNhdmUoJmhtbS0+cmFuZ2VzX2xvY2ssIGZsYWdzKTsKPiAgIAo+ICAgCXJhbmdl LT5obW0gPSBobW07Cj4gICAJbGlzdF9hZGQoJnJhbmdlLT5saXN0LCAmaG1tLT5yYW5nZXMpOwo+ IEBAIC04OTgsNyArOTE0LDcgQEAgaW50IGhtbV9yYW5nZV9yZWdpc3RlcihzdHJ1Y3QgaG1tX3Jh bmdlICpyYW5nZSwKPiAgIAkgKi8KPiAgIAlpZiAoIWhtbS0+bm90aWZpZXJzKQo+ICAgCQlyYW5n ZS0+dmFsaWQgPSB0cnVlOwo+IC0JbXV0ZXhfdW5sb2NrKCZobW0tPmxvY2spOwo+ICsJc3Bpbl91 bmxvY2tfaXJxcmVzdG9yZSgmaG1tLT5yYW5nZXNfbG9jaywgZmxhZ3MpOwo+ICAgCj4gICAJcmV0 dXJuIDA7Cj4gICB9Cj4gQEAgLTkxNCwxMyArOTMwLDE0IEBAIEVYUE9SVF9TWU1CT0woaG1tX3Jh bmdlX3JlZ2lzdGVyKTsKPiAgIHZvaWQgaG1tX3JhbmdlX3VucmVnaXN0ZXIoc3RydWN0IGhtbV9y YW5nZSAqcmFuZ2UpCj4gICB7Cj4gICAJc3RydWN0IGhtbSAqaG1tID0gcmFuZ2UtPmhtbTsKPiAr CXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gICAKPiAgIAlpZiAoV0FSTl9PTihyYW5nZS0+ZW5kIDw9 IHJhbmdlLT5zdGFydCkpCj4gICAJCXJldHVybjsKPiAgIAo+IC0JbXV0ZXhfbG9jaygmaG1tLT5s b2NrKTsKPiArCXNwaW5fbG9ja19pcnFzYXZlKCZobW0tPnJhbmdlc19sb2NrLCBmbGFncyk7Cj4g ICAJbGlzdF9kZWwoJnJhbmdlLT5saXN0KTsKPiAtCW11dGV4X3VubG9jaygmaG1tLT5sb2NrKTsK PiArCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhtbS0+cmFuZ2VzX2xvY2ssIGZsYWdzKTsKPiAg IAo+ICAgCS8qIERyb3AgcmVmZXJlbmNlIHRha2VuIGJ5IGhtbV9yYW5nZV9yZWdpc3RlcigpICov Cj4gICAJcmFuZ2UtPnZhbGlkID0gZmFsc2U7Cj4gCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxp c3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2RyaS1kZXZlbA==