Re: [RESEND PATCH] lightnvm: pblk: add asynchronous partial read
From: Javier Gonzalez <hidden>
Date: 2018-06-26 20:02:41
DQo+IE9uIDI2IEp1biAyMDE4LCBhdCAyMC40NywgSGVpbmVyIExpdHogPGhsaXR6QHVjc2MuZWR1 PiB3cm90ZToNCj4gDQo+PiBPbiBGcmksIEp1biAyMiwgMjAxOCBhdCAxMToxNyBBTSBNYXRpYXMg QmrDuHJsaW5nIDxtYkBsaWdodG52bS5pbz4gd3JvdGU6DQo+PiANCj4+PiBPbiAwNi8xOC8yMDE4 IDA3OjU2IFBNLCBIZWluZXIgTGl0eiB3cm90ZToNCj4+PiBJbiB0aGUgcmVhZCBwYXRoLCBwYXJ0 aWFsIHJlYWRzIGFyZSBjdXJyZW50bHkgcGVyZm9ybWVkIHN5bmNocm9ub3VzbHkNCj4+PiB3aGlj aCBhZmZlY3RzIHBlcmZvcm1hbmNlIGZvciB3b3JrbG9hZHMgdGhhdCBnZW5lcmF0ZSBtYW55IHBh cnRpYWwNCj4+PiByZWFkcy4gVGhpcyBwYXRjaCBhZGRzIGFuIGFzeW5jaHJvbm91cyBwYXJ0aWFs IHJlYWQgcGF0aCBhcyB3ZWxsIGFzDQo+Pj4gdGhlIHJlcXVpcmVkIHBhcnRpYWwgcmVhZCBjdHgu DQo+Pj4gDQo+Pj4gU2lnbmVkLW9mZi1ieTogSGVpbmVyIExpdHogPGhsaXR6QHVjc2MuZWR1Pg0K Pj4+IC0tLQ0KPj4+ICBkcml2ZXJzL2xpZ2h0bnZtL3BibGstcmVhZC5jIHwgMTgzICsrKysrKysr KysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0NCj4+PiAgZHJpdmVycy9saWdodG52 bS9wYmxrLmggICAgICB8ICAxMCArKysNCj4+PiAgMiBmaWxlcyBjaGFuZ2VkLCAxMzAgaW5zZXJ0 aW9ucygrKSwgNjMgZGVsZXRpb25zKC0pDQo+Pj4gDQo+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv bGlnaHRudm0vcGJsay1yZWFkLmMgYi9kcml2ZXJzL2xpZ2h0bnZtL3BibGstcmVhZC5jDQo+Pj4g aW5kZXggNmU5M2M0OC4uODI4ZGY5OCAxMDA2NDQNCj4+PiAtLS0gYS9kcml2ZXJzL2xpZ2h0bnZt L3BibGstcmVhZC5jDQo+Pj4gKysrIGIvZHJpdmVycy9saWdodG52bS9wYmxrLXJlYWQuYw0KPj4+ IEBAIC0yMzEsNzQgKzIzMSwzNiBAQCBzdGF0aWMgdm9pZCBwYmxrX2VuZF9pb19yZWFkKHN0cnVj dCBudm1fcnEgKnJxZCkNCj4+PiAgICAgIF9fcGJsa19lbmRfaW9fcmVhZChwYmxrLCBycWQsIHRy dWUpOw0KPj4+ICB9DQo+Pj4gDQo+Pj4gLXN0YXRpYyBpbnQgcGJsa19wYXJ0aWFsX3JlYWQoc3Ry dWN0IHBibGsgKnBibGssIHN0cnVjdCBudm1fcnEgKnJxZCwNCj4+PiAtICAgICAgICAgICAgICAg ICAgICAgICAgICBzdHJ1Y3QgYmlvICpvcmlnX2JpbywgdW5zaWduZWQgaW50IGJpb19pbml0X2lk eCwNCj4+PiAtICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICpyZWFkX2Jp dG1hcCkNCj4+PiArc3RhdGljIHZvaWQgcGJsa19lbmRfcGFydGlhbF9yZWFkKHN0cnVjdCBudm1f cnEgKnJxZCkNCj4+PiAgew0KPj4+IC0gICAgIHN0cnVjdCBwYmxrX3NlY19tZXRhICptZXRhX2xp c3QgPSBycWQtPm1ldGFfbGlzdDsNCj4+PiAtICAgICBzdHJ1Y3QgYmlvICpuZXdfYmlvOw0KPj4+ ICsgICAgIHN0cnVjdCBwYmxrICpwYmxrID0gcnFkLT5wcml2YXRlOw0KPj4+ICsgICAgIHN0cnVj dCBwYmxrX2dfY3R4ICpyX2N0eCA9IG52bV9ycV90b19wZHUocnFkKTsNCj4+PiArICAgICBzdHJ1 Y3QgcGJsa19wcl9jdHggKnByX2N0eCA9IHJfY3R4LT5wcml2YXRlOw0KPj4+ICsgICAgIHN0cnVj dCBiaW8gKm5ld19iaW8gPSBycWQtPmJpbzsNCj4+PiArICAgICBzdHJ1Y3QgYmlvICpiaW8gPSBw cl9jdHgtPm9yaWdfYmlvOw0KPj4+ICAgICAgc3RydWN0IGJpb192ZWMgc3JjX2J2LCBkc3RfYnY7 DQo+Pj4gLSAgICAgdm9pZCAqcHBhX3B0ciA9IE5VTEw7DQo+Pj4gLSAgICAgdm9pZCAqc3JjX3As ICpkc3RfcDsNCj4+PiAtICAgICBkbWFfYWRkcl90IGRtYV9wcGFfbGlzdCA9IDA7DQo+Pj4gLSAg ICAgX19sZTY0ICpsYmFfbGlzdF9tZW0sICpsYmFfbGlzdF9tZWRpYTsNCj4+PiAtICAgICBpbnQg bnJfc2VjcyA9IHJxZC0+bnJfcHBhczsNCj4+PiArICAgICBzdHJ1Y3QgcGJsa19zZWNfbWV0YSAq bWV0YV9saXN0ID0gcnFkLT5tZXRhX2xpc3Q7DQo+Pj4gKyAgICAgaW50IGJpb19pbml0X2lkeCA9 IHByX2N0eC0+YmlvX2luaXRfaWR4Ow0KPj4+ICsgICAgIHVuc2lnbmVkIGxvbmcgKnJlYWRfYml0 bWFwID0gJnByX2N0eC0+Yml0bWFwOw0KPj4+ICsgICAgIGludCBucl9zZWNzID0gcHJfY3R4LT5v cmlnX25yX3NlY3M7DQo+Pj4gICAgICBpbnQgbnJfaG9sZXMgPSBucl9zZWNzIC0gYml0bWFwX3dl aWdodChyZWFkX2JpdG1hcCwgbnJfc2Vjcyk7DQo+Pj4gLSAgICAgaW50IGksIHJldCwgaG9sZTsN Cj4+PiAtDQo+Pj4gLSAgICAgLyogUmUtdXNlIGFsbG9jYXRlZCBtZW1vcnkgZm9yIGludGVybWVk aWF0ZSBsYmFzICovDQo+Pj4gLSAgICAgbGJhX2xpc3RfbWVtID0gKCgodm9pZCAqKXJxZC0+cHBh X2xpc3QpICsgcGJsa19kbWFfcHBhX3NpemUpOw0KPj4+IC0gICAgIGxiYV9saXN0X21lZGlhID0g KCgodm9pZCAqKXJxZC0+cHBhX2xpc3QpICsgMiAqIHBibGtfZG1hX3BwYV9zaXplKTsNCj4+PiAt DQo+Pj4gLSAgICAgbmV3X2JpbyA9IGJpb19hbGxvYyhHRlBfS0VSTkVMLCBucl9ob2xlcyk7DQo+ Pj4gLQ0KPj4+IC0gICAgIGlmIChwYmxrX2Jpb19hZGRfcGFnZXMocGJsaywgbmV3X2JpbywgR0ZQ X0tFUk5FTCwgbnJfaG9sZXMpKQ0KPj4+IC0gICAgICAgICAgICAgZ290byBmYWlsX2FkZF9wYWdl czsNCj4+PiAtDQo+Pj4gLSAgICAgaWYgKG5yX2hvbGVzICE9IG5ld19iaW8tPmJpX3ZjbnQpIHsN Cj4+PiAtICAgICAgICAgICAgIHByX2VycigicGJsazogbWFsZm9ybWVkIGJpb1xuIik7DQo+Pj4g LSAgICAgICAgICAgICBnb3RvIGZhaWw7DQo+Pj4gLSAgICAgfQ0KPj4+IC0NCj4+PiAtICAgICBm b3IgKGkgPSAwOyBpIDwgbnJfc2VjczsgaSsrKQ0KPj4+IC0gICAgICAgICAgICAgbGJhX2xpc3Rf bWVtW2ldID0gbWV0YV9saXN0W2ldLmxiYTsNCj4+PiAtDQo+Pj4gLSAgICAgbmV3X2Jpby0+Ymlf aXRlci5iaV9zZWN0b3IgPSAwOyAvKiBpbnRlcm5hbCBiaW8gKi8NCj4+PiAtICAgICBiaW9fc2V0 X29wX2F0dHJzKG5ld19iaW8sIFJFUV9PUF9SRUFELCAwKTsNCj4+PiAtDQo+Pj4gLSAgICAgcnFk LT5iaW8gPSBuZXdfYmlvOw0KPj4+IC0gICAgIHJxZC0+bnJfcHBhcyA9IG5yX2hvbGVzOw0KPj4+ IC0gICAgIHJxZC0+ZmxhZ3MgPSBwYmxrX3NldF9yZWFkX21vZGUocGJsaywgUEJMS19SRUFEX1JB TkRPTSk7DQo+Pj4gLQ0KPj4+IC0gICAgIGlmICh1bmxpa2VseShucl9ob2xlcyA9PSAxKSkgew0K Pj4+IC0gICAgICAgICAgICAgcHBhX3B0ciA9IHJxZC0+cHBhX2xpc3Q7DQo+Pj4gLSAgICAgICAg ICAgICBkbWFfcHBhX2xpc3QgPSBycWQtPmRtYV9wcGFfbGlzdDsNCj4+PiAtICAgICAgICAgICAg IHJxZC0+cHBhX2FkZHIgPSBycWQtPnBwYV9saXN0WzBdOw0KPj4+IC0gICAgIH0NCj4+PiAtDQo+ Pj4gLSAgICAgcmV0ID0gcGJsa19zdWJtaXRfaW9fc3luYyhwYmxrLCBycWQpOw0KPj4+IC0gICAg IGlmIChyZXQpIHsNCj4+PiAtICAgICAgICAgICAgIGJpb19wdXQocnFkLT5iaW8pOw0KPj4+IC0g ICAgICAgICAgICAgcHJfZXJyKCJwYmxrOiBzeW5jIHJlYWQgSU8gc3VibWlzc2lvbiBmYWlsZWRc biIpOw0KPj4+IC0gICAgICAgICAgICAgZ290byBmYWlsOw0KPj4+IC0gICAgIH0NCj4+PiAtDQo+ Pj4gLSAgICAgaWYgKHJxZC0+ZXJyb3IpIHsNCj4+PiAtICAgICAgICAgICAgIGF0b21pY19sb25n X2luYygmcGJsay0+cmVhZF9mYWlsZWQpOw0KPj4+IC0jaWZkZWYgQ09ORklHX05WTV9QQkxLX0RF QlVHDQo+Pj4gLSAgICAgICAgICAgICBwYmxrX3ByaW50X2ZhaWxlZF9ycWQocGJsaywgcnFkLCBy cWQtPmVycm9yKTsNCj4+PiAtI2VuZGlmDQo+Pj4gLSAgICAgfQ0KPj4+ICsgICAgIF9fbGU2NCAq bGJhX2xpc3RfbWVtLCAqbGJhX2xpc3RfbWVkaWE7DQo+Pj4gKyAgICAgdm9pZCAqc3JjX3AsICpk c3RfcDsNCj4+PiArICAgICBpbnQgaG9sZSwgaTsNCj4+PiANCj4+PiAgICAgIGlmICh1bmxpa2Vs eShucl9ob2xlcyA9PSAxKSkgew0KPj4+ICAgICAgICAgICAgICBzdHJ1Y3QgcHBhX2FkZHIgcHBh Ow0KPj4+IA0KPj4+ICAgICAgICAgICAgICBwcGEgPSBycWQtPnBwYV9hZGRyOw0KPj4+IC0gICAg ICAgICAgICAgcnFkLT5wcGFfbGlzdCA9IHBwYV9wdHI7DQo+Pj4gLSAgICAgICAgICAgICBycWQt PmRtYV9wcGFfbGlzdCA9IGRtYV9wcGFfbGlzdDsNCj4+PiArICAgICAgICAgICAgIHJxZC0+cHBh X2xpc3QgPSBwcl9jdHgtPnBwYV9wdHI7DQo+Pj4gKyAgICAgICAgICAgICBycWQtPmRtYV9wcGFf bGlzdCA9IHByX2N0eC0+ZG1hX3BwYV9saXN0Ow0KPj4+ICAgICAgICAgICAgICBycWQtPnBwYV9s aXN0WzBdID0gcHBhOw0KPj4+ICAgICAgfQ0KPj4+IA0KPj4+ICsgICAgIC8qIFJlLXVzZSBhbGxv Y2F0ZWQgbWVtb3J5IGZvciBpbnRlcm1lZGlhdGUgbGJhcyAqLw0KPj4+ICsgICAgIGxiYV9saXN0 X21lbSA9ICgoKHZvaWQgKilycWQtPnBwYV9saXN0KSArIHBibGtfZG1hX3BwYV9zaXplKTsNCj4+ PiArICAgICBsYmFfbGlzdF9tZWRpYSA9ICgoKHZvaWQgKilycWQtPnBwYV9saXN0KSArIDIgKiBw YmxrX2RtYV9wcGFfc2l6ZSk7DQo+Pj4gKw0KPj4+ICAgICAgZm9yIChpID0gMDsgaSA8IG5yX3Nl Y3M7IGkrKykgew0KPj4+ICAgICAgICAgICAgICBsYmFfbGlzdF9tZWRpYVtpXSA9IG1ldGFfbGlz dFtpXS5sYmE7DQo+Pj4gICAgICAgICAgICAgIG1ldGFfbGlzdFtpXS5sYmEgPSBsYmFfbGlzdF9t ZW1baV07DQo+Pj4gQEAgLTMxNiw3ICsyNzgsNyBAQCBzdGF0aWMgaW50IHBibGtfcGFydGlhbF9y ZWFkKHN0cnVjdCBwYmxrICpwYmxrLCBzdHJ1Y3QgbnZtX3JxICpycWQsDQo+Pj4gICAgICAgICAg ICAgIG1ldGFfbGlzdFtob2xlXS5sYmEgPSBsYmFfbGlzdF9tZWRpYVtpXTsNCj4+PiANCj4+PiAg ICAgICAgICAgICAgc3JjX2J2ID0gbmV3X2Jpby0+YmlfaW9fdmVjW2krK107DQo+Pj4gLSAgICAg ICAgICAgICBkc3RfYnYgPSBvcmlnX2Jpby0+YmlfaW9fdmVjW2Jpb19pbml0X2lkeCArIGhvbGVd Ow0KPj4+ICsgICAgICAgICAgICAgZHN0X2J2ID0gYmlvLT5iaV9pb192ZWNbYmlvX2luaXRfaWR4 ICsgaG9sZV07DQo+Pj4gDQo+Pj4gICAgICAgICAgICAgIHNyY19wID0ga21hcF9hdG9taWMoc3Jj X2J2LmJ2X3BhZ2UpOw0KPj4+ICAgICAgICAgICAgICBkc3RfcCA9IGttYXBfYXRvbWljKGRzdF9i di5idl9wYWdlKTsNCj4+PiBAQCAtMzM0LDE5ICsyOTYsMTA3IEBAIHN0YXRpYyBpbnQgcGJsa19w YXJ0aWFsX3JlYWQoc3RydWN0IHBibGsgKnBibGssIHN0cnVjdCBudm1fcnEgKnJxZCwNCj4+PiAg ICAgIH0gd2hpbGUgKGhvbGUgPCBucl9zZWNzKTsNCj4+PiANCj4+PiAgICAgIGJpb19wdXQobmV3 X2Jpbyk7DQo+Pj4gKyAgICAga2ZyZWUocHJfY3R4KTsNCj4+PiANCj4+PiAgICAgIC8qIHJlc3Rv cmUgb3JpZ2luYWwgcmVxdWVzdCAqLw0KPj4+ICAgICAgcnFkLT5iaW8gPSBOVUxMOw0KPj4+ICAg ICAgcnFkLT5ucl9wcGFzID0gbnJfc2VjczsNCj4+PiANCj4+PiArICAgICBiaW9fZW5kaW8oYmlv KTsNCj4+PiAgICAgIF9fcGJsa19lbmRfaW9fcmVhZChwYmxrLCBycWQsIGZhbHNlKTsNCj4+PiAt ICAgICByZXR1cm4gTlZNX0lPX0RPTkU7DQo+Pj4gK30NCj4+PiANCj4+PiAtZmFpbDoNCj4+PiAt ICAgICAvKiBGcmVlIGFsbG9jYXRlZCBwYWdlcyBpbiBuZXcgYmlvICovDQo+Pj4gK3N0YXRpYyBp bnQgcGJsa19zZXR1cF9wYXJ0aWFsX3JlYWQoc3RydWN0IHBibGsgKnBibGssIHN0cnVjdCBudm1f cnEgKnJxZCwNCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBiaW9f aW5pdF9pZHgsDQo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICpy ZWFkX2JpdG1hcCwNCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgIGludCBucl9ob2xlcykN Cj4+PiArew0KPj4+ICsgICAgIHN0cnVjdCBwYmxrX3NlY19tZXRhICptZXRhX2xpc3QgPSBycWQt Pm1ldGFfbGlzdDsNCj4+PiArICAgICBzdHJ1Y3QgcGJsa19nX2N0eCAqcl9jdHggPSBudm1fcnFf dG9fcGR1KHJxZCk7DQo+Pj4gKyAgICAgc3RydWN0IHBibGtfcHJfY3R4ICpwcl9jdHg7DQo+Pj4g KyAgICAgc3RydWN0IGJpbyAqbmV3X2JpbywgKmJpbyA9IHJfY3R4LT5wcml2YXRlOw0KPj4+ICsg ICAgIF9fbGU2NCAqbGJhX2xpc3RfbWVtOw0KPj4+ICsgICAgIGludCBucl9zZWNzID0gcnFkLT5u cl9wcGFzOw0KPj4+ICsgICAgIGludCBpOw0KPj4+ICsNCj4+PiArICAgICAvKiBSZS11c2UgYWxs b2NhdGVkIG1lbW9yeSBmb3IgaW50ZXJtZWRpYXRlIGxiYXMgKi8NCj4+PiArICAgICBsYmFfbGlz dF9tZW0gPSAoKCh2b2lkICopcnFkLT5wcGFfbGlzdCkgKyBwYmxrX2RtYV9wcGFfc2l6ZSk7DQo+ Pj4gKw0KPj4+ICsgICAgIG5ld19iaW8gPSBiaW9fYWxsb2MoR0ZQX0tFUk5FTCwgbnJfaG9sZXMp Ow0KPj4gDQo+PiANCj4+IG5ld19iaW8gY2FuIHJldHVybiBOVUxMLg0KPiANCj4gc2VlIEplbnMn cyBlbWFpbA0KDQpZZXMsIHRoaXMgaXMgdGhlIHNhbWUgYXMgaW4gdGhlIG9yaWdpbmFsIHBhcnRp YWwgcGF0aA0KPiANCj4+IA0KPj4+ICsNCj4+PiArICAgICBpZiAocGJsa19iaW9fYWRkX3BhZ2Vz KHBibGssIG5ld19iaW8sIEdGUF9LRVJORUwsIG5yX2hvbGVzKSkNCj4+PiArICAgICAgICAgICAg IGdvdG8gZmFpbDsNCj4+IA0KPj4gZ290byBiaW9fcHV0Pw0KPiANCj4gZG8geW91IG9ubHkgd2Fu dCB0aGUgbGFiZWwgdG8gYmUgY2hhbmdlZD8gc3VyZQ0KDQpUbyBiZSBjb25zaXN0ZW50IHdpdGgg dGhlIHJlc3Qgb2YgcGJsaywgdGhlIGxhYmVsIHNob3VsZCBiZSBmYWlsX2Jpb19wdXQuIA0KPiAN Cj4+PiArDQo+Pj4gKyAgICAgaWYgKG5yX2hvbGVzICE9IG5ld19iaW8tPmJpX3ZjbnQpIHsNCj4+ PiArICAgICAgICAgICAgIHByX2VycigicGJsazogbWFsZm9ybWVkIGJpb1xuIik7DQo+PiANCj4+ IEkgZG9uJ3QgdGhpbmsgdGhlcmUgaXMgYSBuZWVkIGZvciBhbiBlcnJvciBtZXNzYWdlIGhlcmUu IEluIHdoaWNoIGNhc2UNCj4+IHdvdWxkIHRoaXMgaGFwcGVuPw0KPiANCj4gVGhpcyBpcyB0YWtl biBvdmVyIGZyb20gdGhlIG9yaWdpbmFsIHBhcnRpYWwgcmVhZCBwYXRoLiBNYXliZSBKYXZpZXIN Cj4ga25vd3Mgd2h5IGl0IHdhcyBwdXQgaW4gdGhlcmUgaW4gdGhlIGZpcnN0IHBsYWNlLg0KDQpU aGlzIHNob3VsZCBub3QgaGFwcGVuIGFuZCBpdOKAmXMgYSBwYmxrIGludGVybmFsIGVycm9yLiBJ 4oCZbSBvayB3aXRoIG1ha2luZyBpdCBhIFdBUk5fT05DRSgpDQo+IA0KPj4gDQo+Pj4gKyAgICAg ICAgICAgICBnb3RvIGZhaWxfcGFnZXM7DQo+Pj4gKyAgICAgfQ0KPj4gDQo+PiBnb3RvIGZyZWVf cGFnZXM/DQoNClNhbWUgYXMgYWJvdmUgZmFpbF9mcmVlX3BhZ2VzDQo+IA0KPiBzdXJlIEkgY2Fu IGNoYW5nZSB0aGUgbGFiZWwNCj4gDQo+PiANCj4+PiArDQo+Pj4gKyAgICAgcHJfY3R4ID0ga21h bGxvYyhzaXplb2Yoc3RydWN0IHBibGtfcHJfY3R4KSwgR0ZQX0tFUk5FTCk7DQo+Pj4gKyAgICAg aWYgKCFwcl9jdHgpDQo+Pj4gKyAgICAgICAgICAgICBnb3RvIGZhaWxfcGFnZXM7DQo+Pj4gKw0K Pj4+ICsgICAgIGZvciAoaSA9IDA7IGkgPCBucl9zZWNzOyBpKyspDQo+Pj4gKyAgICAgICAgICAg ICBsYmFfbGlzdF9tZW1baV0gPSBtZXRhX2xpc3RbaV0ubGJhOw0KPj4+ICsNCj4+PiArICAgICBu ZXdfYmlvLT5iaV9pdGVyLmJpX3NlY3RvciA9IDA7IC8qIGludGVybmFsIGJpbyAqLw0KPj4+ICsg ICAgIGJpb19zZXRfb3BfYXR0cnMobmV3X2JpbywgUkVRX09QX1JFQUQsIDApOw0KPj4+ICsNCj4+ PiArICAgICBycWQtPmJpbyA9IG5ld19iaW87DQo+Pj4gKyAgICAgcnFkLT5ucl9wcGFzID0gbnJf aG9sZXM7DQo+Pj4gKyAgICAgcnFkLT5mbGFncyA9IHBibGtfc2V0X3JlYWRfbW9kZShwYmxrLCBQ QkxLX1JFQURfUkFORE9NKTsNCj4+PiArDQo+Pj4gKyAgICAgcHJfY3R4LT5wcGFfcHRyID0gTlVM TDsNCj4+PiArICAgICBwcl9jdHgtPm9yaWdfYmlvID0gYmlvOw0KPj4+ICsgICAgIHByX2N0eC0+ Yml0bWFwID0gKnJlYWRfYml0bWFwOw0KPj4+ICsgICAgIHByX2N0eC0+YmlvX2luaXRfaWR4ID0g YmlvX2luaXRfaWR4Ow0KPj4+ICsgICAgIHByX2N0eC0+b3JpZ19ucl9zZWNzID0gbnJfc2VjczsN Cj4+PiArICAgICByX2N0eC0+cHJpdmF0ZSA9IHByX2N0eDsNCj4+PiArDQo+Pj4gKyAgICAgaWYg KHVubGlrZWx5KG5yX2hvbGVzID09IDEpKSB7DQo+Pj4gKyAgICAgICAgICAgICBwcl9jdHgtPnBw YV9wdHIgPSBycWQtPnBwYV9saXN0Ow0KPj4+ICsgICAgICAgICAgICAgcHJfY3R4LT5kbWFfcHBh X2xpc3QgPSBycWQtPmRtYV9wcGFfbGlzdDsNCj4+PiArICAgICAgICAgICAgIHJxZC0+cHBhX2Fk ZHIgPSBycWQtPnBwYV9saXN0WzBdOw0KPj4+ICsgICAgIH0NCj4+PiArICAgICByZXR1cm4gMDsN Cj4+PiArDQo+Pj4gK2ZhaWxfcGFnZXM6DQo+Pj4gICAgICBwYmxrX2Jpb19mcmVlX3BhZ2VzKHBi bGssIG5ld19iaW8sIDAsIG5ld19iaW8tPmJpX3ZjbnQpOw0KPj4+IC1mYWlsX2FkZF9wYWdlczoN Cj4+PiArZmFpbDoNCj4+PiArICAgICBiaW9fcHV0KG5ld19iaW8pOw0KPj4+ICsNCj4+PiArICAg ICByZXR1cm4gLUVOT01FTTsNCj4+PiArfQ0KPj4+ICsNCj4+PiArc3RhdGljIGludCBwYmxrX3Bh cnRpYWxfcmVhZF9iaW8oc3RydWN0IHBibGsgKnBibGssIHN0cnVjdCBudm1fcnEgKnJxZCwNCj4+ PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGJpb19pbml0X2lk eCwNCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqcmVh ZF9iaXRtYXAsIGludCBucl9zZWNzKQ0KPj4+ICt7DQo+Pj4gKyAgICAgaW50IG5yX2hvbGVzOw0K Pj4+ICsgICAgIGludCByZXQ7DQo+Pj4gKw0KPj4+ICsgICAgIG5yX2hvbGVzID0gbnJfc2VjcyAt IGJpdG1hcF93ZWlnaHQocmVhZF9iaXRtYXAsIG5yX3NlY3MpOw0KPj4+ICsNCj4+PiArICAgICBp ZiAocGJsa19zZXR1cF9wYXJ0aWFsX3JlYWQocGJsaywgcnFkLCBiaW9faW5pdF9pZHgsIHJlYWRf Yml0bWFwLA0KPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBucl9ob2xlcykp DQo+Pj4gKyAgICAgICAgICAgICByZXR1cm4gTlZNX0lPX0VSUjsNCj4+PiArDQo+Pj4gKyAgICAg cnFkLT5lbmRfaW8gPSBwYmxrX2VuZF9wYXJ0aWFsX3JlYWQ7DQo+Pj4gKw0KPj4+ICsgICAgIHJl dCA9IHBibGtfc3VibWl0X2lvKHBibGssIHJxZCk7DQo+Pj4gKyAgICAgaWYgKHJldCkgew0KPj4+ ICsgICAgICAgICAgICAgYmlvX3B1dChycWQtPmJpbyk7DQo+Pj4gKyAgICAgICAgICAgICBwcl9l cnIoInBibGs6IHBhcnRpYWwgcmVhZCBJTyBzdWJtaXNzaW9uIGZhaWxlZFxuIik7DQo+Pj4gKyAg ICAgICAgICAgICBnb3RvIGVycjsNCj4+PiArICAgICB9DQo+Pj4gKw0KPj4+ICsgICAgIHJldHVy biBOVk1fSU9fT0s7DQo+Pj4gKw0KPj4+ICtlcnI6DQo+Pj4gICAgICBwcl9lcnIoInBibGs6IGZh aWxlZCB0byBwZXJmb3JtIHBhcnRpYWwgcmVhZFxuIik7DQo+Pj4gKw0KPj4+ICsgICAgIC8qIEZy ZWUgYWxsb2NhdGVkIHBhZ2VzIGluIG5ldyBiaW8gKi8NCj4+PiArICAgICBwYmxrX2Jpb19mcmVl X3BhZ2VzKHBibGssIHJxZC0+YmlvLCAwLCBycWQtPmJpby0+YmlfdmNudCk7DQo+Pj4gICAgICBf X3BibGtfZW5kX2lvX3JlYWQocGJsaywgcnFkLCBmYWxzZSk7DQo+Pj4gICAgICByZXR1cm4gTlZN X0lPX0VSUjsNCj4+PiAgfQ0KPj4+IEBAIC00ODAsOCArNTMwLDE1IEBAIGludCBwYmxrX3N1Ym1p dF9yZWFkKHN0cnVjdCBwYmxrICpwYmxrLCBzdHJ1Y3QgYmlvICpiaW8pDQo+Pj4gICAgICAvKiBU aGUgcmVhZCBiaW8gcmVxdWVzdCBjb3VsZCBiZSBwYXJ0aWFsbHkgZmlsbGVkIGJ5IHRoZSB3cml0 ZSBidWZmZXIsDQo+Pj4gICAgICAgKiBidXQgdGhlcmUgYXJlIHNvbWUgaG9sZXMgdGhhdCBuZWVk IHRvIGJlIHJlYWQgZnJvbSB0aGUgZHJpdmUuDQo+Pj4gICAgICAgKi8NCj4+PiAtICAgICByZXR1 cm4gcGJsa19wYXJ0aWFsX3JlYWQocGJsaywgcnFkLCBiaW8sIGJpb19pbml0X2lkeCwgJnJlYWRf Yml0bWFwKTsNCj4+PiArICAgICByZXQgPSBwYmxrX3BhcnRpYWxfcmVhZF9iaW8ocGJsaywgcnFk LCBiaW9faW5pdF9pZHgsICZyZWFkX2JpdG1hcCwNCj4+PiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbnJfc2Vjcyk7DQo+Pj4gKyAgICAgaWYgKHJldCkNCj4+PiArICAgICAgICAg ICAgIGdvdG8gZmFpbF9tZXRhX2ZyZWU7DQo+Pj4gKw0KPj4+ICsgICAgIHJldHVybiBOVk1fSU9f T0s7DQo+Pj4gDQo+Pj4gK2ZhaWxfbWV0YV9mcmVlOg0KPj4+ICsgICAgIG52bV9kZXZfZG1hX2Zy ZWUoZGV2LT5wYXJlbnQsIHJxZC0+bWV0YV9saXN0LCBycWQtPmRtYV9tZXRhX2xpc3QpOw0KPj4+ ICBmYWlsX3JxZF9mcmVlOg0KPj4+ICAgICAgcGJsa19mcmVlX3JxZChwYmxrLCBycWQsIFBCTEtf UkVBRCk7DQo+Pj4gICAgICByZXR1cm4gcmV0Ow0KPj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2xp Z2h0bnZtL3BibGsuaCBiL2RyaXZlcnMvbGlnaHRudm0vcGJsay5oDQo+Pj4gaW5kZXggYzA3Mjk1 NS4uMWM3YWMwNiAxMDA2NDQNCj4+PiAtLS0gYS9kcml2ZXJzL2xpZ2h0bnZtL3BibGsuaA0KPj4+ ICsrKyBiL2RyaXZlcnMvbGlnaHRudm0vcGJsay5oDQo+Pj4gQEAgLTExOSw2ICsxMTksMTYgQEAg c3RydWN0IHBibGtfZ19jdHggew0KPj4+ICAgICAgdTY0IGxiYTsNCj4+PiAgfTsNCj4+PiANCj4+ PiArLyogcGFydGlhbCByZWFkIGNvbnRleHQgKi8NCj4+PiArc3RydWN0IHBibGtfcHJfY3R4IHsN Cj4+PiArICAgICBzdHJ1Y3QgYmlvICpvcmlnX2JpbzsNCj4+PiArICAgICB1bnNpZ25lZCBsb25n IGJpdG1hcDsNCj4+IA0KPj4gR3VhcmFudGVlcyB0aGF0IHRoaXMgaXMgYXQgbGVhc3QgMzJiaXQs IGJ1dCB0aGlzIHNob3VsZCBiZSBhdCBsZWFzdCA2NA0KPj4gYml0IHJpZ2h0Pw0KPj4gDQo+Pj4g KyAgICAgdW5zaWduZWQgaW50IG9yaWdfbnJfc2VjczsNCj4+PiArICAgICB1bnNpZ25lZCBpbnQg YmlvX2luaXRfaWR4Ow0KPj4+ICsgICAgIHZvaWQgKnBwYV9wdHI7DQo+Pj4gKyAgICAgZG1hX2Fk ZHJfdCBkbWFfcHBhX2xpc3Q7DQo+Pj4gK307DQo+Pj4gKw0KPj4+ICAvKiBQYWQgY29udGV4dCAq Lw0KPj4+ICBzdHJ1Y3QgcGJsa19wYWRfcnEgew0KPj4+ICAgICAgc3RydWN0IHBibGsgKnBibGs7 DQo+Pj4gDQo+PiANCg==