From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Jianpeng Ma" Subject: Re: Re: [RFC PATCH] raid5: Correct some failed-stripe which because the badsector. Date: Wed, 26 Sep 2012 13:25:21 +0800 Message-ID: <2012092613251873407316@gmail.com> References: <2012092211144517180514@gmail.com>, <20120926112010.0d27c892@notabene.brown> Mime-Version: 1.0 Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: base64 Return-path: Sender: linux-raid-owner@vger.kernel.org To: Neil Brown Cc: linux-raid , =?gb2312?B?1twsIPfo?= , =?gb2312?B?sd8sINPq?= List-Id: linux-raid.ids T24gMjAxMi0wOS0yNiAwOToyMCBOZWlsQnJvd24gPG5laWxiQHN1c2UuZGU+IFdyb3RlOg0KPk9u IFNhdCwgMjIgU2VwIDIwMTIgMTE6MTQ6NDcgKzA4MDAgIkppYW5wZW5nIE1hIiA8bWFqaWFucGVu Z0BnbWFpbC5jb20+IHdyb3RlOg0KPg0KPj4gQmVjYXVzZSByYWlkNSBoYWQgaW1wbGVtZW50ZWQg YmFkc2VjdG9yIGZlYXR1cmUsc29tZSBmYWlsZWQtc3RyaXBlIHdoaWNoIGJlY2F1c2UgdGhlDQo+ PiBiYWRzZWN0b3IgY2FuIHRyeSB0byBjb3JyZWN0IGluc3RlYWQgb2Ygb25seSBmYWlsaW5nLg0K Pj4gDQo+PiBGb3IgZXhhbXBsZToNCj4+IDE6Q3JlYXRlIGEgcmFpZDUgYnkgZm91ciBkaXNrcyBt aXNzaW5nL3NkYi9zZGMvc2RkLg0KPj4gMjpJZiByZWFkZWQgIGRhdGEgZnJvbSBzZGIgYW5kIG1l dCBlcnJvcixzbyB0aGUgc3RyaXBlIGlzIGZhaWxlZA0KPj4gMzpJZiBsYXRlciB3cml0ZS1zdHJp cGUgY29udGFpbnMgc2RiIHdoaWNoIG92ZXJ3cml0ZS5UaGUgc3RyaXBlIGhhcyBhDQo+PiBjaGFu Y2UgdG8gY29ycmVjdC4NCj4NCj5Zb3VyIHBhdGNoIGxvb2tzIG11Y2ggbW9yZSBjb21wbGljYXRl ZCB0aGF0IHNob3VsZCBiZSBuZWNlc3NhcnksIGFuZCB5b3UNCj5kb24ndCBwcm92aWRlIGFueSBl eHBsYW5hdGlvbiBmb3IgaG93IGl0IHdvcmtzLCBzbyBpdCBpcyB2ZXJ5IGhhcmQgZm9yIG1lIHRv DQo+cmV2aWV3Lg0KPg0KQmVmb3JlIGltcGxlbWVudGluZyBiYWRzZWN0b3IgbG9nLCBmYWlsZWQt c3RyaXBlcyB3ZXJlIGJlY2FzdWUgdGhlIGZhdWx0eSBvciByZW1vdmVkIGRpc2tzLg0KRm9yIHRo b3NlLCBpdCdzIHVubmVjZXNzYXJ5IHRvIGRvIHNvbWV0aGluZyBmb3IgdGhvc2UgZmFpbGVkLXN0 cmlwZS4NCkJ1dCBhZnRlciBpbXBsZW1lbnRpbmcgYmFkc2VjdG9yIGxvZywgZmFpbGVkLXN0cmlw ZSBjYW4gYnkgc29tZSBiYWRzZWN0b3IuDQpPbmUgZXhhbXBsZSwgUkFJRDUgaGFzIGZvdXIgZGlz azogb25lIHJlbW92ZWQgYW5kIG9uZSBjb250YWluZWQgYmFkc2VjdG9yLCBzbyB0aGUgc3RyaXBl IGlzIGZhaWxlZDsNCkFub3RoZXIgZXhhbXBsZSBpcyByZWNvdmVyeSwgd2hlbiByZWNvdmVyeSBh IHN0cmlwZSBhbmQgZmFpbCxzbyBhbGwgdGhlIGRpc2tzIHNldCBiYWRzZWN0b3IuDQpCdXQgZm9y IGFib3ZlIGV4YW1wbGUsIGlmIGZ1bGwtd3JpdGUgb24gdGhpcyBzdHJpcGUsdGhlIGJhZHNlY3Rv ciB3aWxsIGJlIGNvcnJlY3QgYW5kIGZhaWxlZC1zdHJpcGUgYmVjb21lIG5vcm1hbC4NCg0KVGhp cyBwYXRjaCBpcyBkbyB0aGlzIHRvIHRyeSByZWNvcnJlY3Qgc29tZSBmYWlsZWQtc3RyaXBlIGJl Y2F1c2UgYmFkc2VjdG9ycy4NClRoZSB3b3JrZmxvdyBpczoNCjE6aW4gZnVuYyBhbmFseXNlX3N0 cmlwZSwgd2UgY291bnQgdGhlIG92ZXJ3cml0ZS1vbi1mYWlsZWQtZGlza3MoY29udGFpbmVkIGJh ZHNlY3RvciBvciBmYXVsdHkgb3IgcmVtb3ZlZCksIG5vd29ya2VkZGlzayhmYXVsdHkgb3IgcmVt b3ZlKQ0KMjppbiBmdW5jIGhhbmRsZV9zdHJpcGUsIGl0IGRldGVybWluZXMgd2hldGhlciB0byBi ZSBwcm9jZXNzZWQuVGhlcmUgd2lsbCBiZSB0aHJlZSBjYXNlczoNCkE6IG5vd29ya2Rpc2sgPiBt YXhfZGVncmFkZWQuIEl0IGluZGljYXRlcyB0aGVyZSBhcmUgbWFueSByZW1vdmVkIG9yIGZhdWx0 eSBkaXNrcy5JdCBvbmx5IGZhaWxlZA0KQjogQWxsIGZhaWxkLWRpc2tzIGFyZSBvdmVyd3JpdGVk LHdoaWNoIGRvc2VuJ3QgbmVlZCByZWFkIG9sZCBkYXRhLlNvIGl0IGNhbiByZWFkIG90aGVyIGdv b2cgZGlza3Mgb3IgY29tcHV0ZXIgcGFyaXR5IGRhdGEgdXNpbmcgUkNXLg0KQzogU29tZSBmYWls ZWQtZGlza3MgYXJlIG92ZXJ3cml0ZWQuSWYgc3RyaXBlIGRpZG4ndCBzZXQgU1RSSVBFX1BSRVJF QURfQUNUSVZFLCBzdHJpcGUgY2FuIGRlbGF5IGZvciB3YWl0dGluZyBvdGhlciBmYWlsZWQtZGlz a3Mgd3JpdGUtZGF0YS4NCk90aGVyd2lzZSwgaXQgb25seSBmYWlsZWQgdGhlIHN0cmlwZS4NCjM7 aW4gZnVuYyBoYW5kbGVfc3RyaXBlX2RpcnR5aW5nIGRvIHR3byB0aGluZ3M6DQoJQTogZGVsYXkg Zm9yIGZhaWxlZC1kaXNrcyB3cml0ZS1kYXRhDQoJQjogc2V0IFJDVyB0byBjb250cm9sIHRoaXMg c2l0dWF0aW9uDQo0OkFmdGVyIHN1Y2Nlc3NseSB3cml0ZWQsIG9uZSB0aGluZyBtdXN0IHRvIGRv Lkl0IHdpbGwgYmUgcmV3cml0ZSBhbmQgcmVyZWFkIGZvciBjaGVjay4NCkJ1dCBmb3IgdGhpcyBj YXNlLCBpdCdzIHVubmVjZXNzYXJ5IHRvIHJld3JpdGUsaXQgb25seSByZXJlYWQgdGhlIGZhaWxl ZC1kaXNrcyhvbmx5IGNvbnRhaW5zIGJhZHNlY3RvcikuDQogIA0KPkkgd291bGQgdGhpbmsgeW91 IGp1c3QgbmVlZCB0byBtb2RpZnkgYW5hbHlzZV9zdHJpcGUgc2xpZ2h0bHkgc28gdGhhdCBpdA0K PmRldGVjdHMgdGhlICJvdmVyd3JpdGUtYS1iYWQtYmxvY2siIGNhc2UgYW5kIG1hcmtzIHRoYXQg ZGV2aWNlIGFzDQo+J2luX3N5bmMnIChpZiB0aGVyZSBoYXNuJ3QgYmVlbiBhIHdyaXRlIGVycm9y IG9uIHRoZSBkZXZpY2UpLg0KSSB0aGluayBpdCBkb2Vzbid0IHdvcmsuIEJlY2F1c2Ugd2hlbiBz b21lIG92ZXJ3cml0ZS1hLWJhZC1ibG9jayBhcnJpdmVkLGJ1dCB0aGUgc3RyaXBlIGlzIHN0aWxs IGZhaWxlZC5TbyB3ZSBtdXN0IGRlbGF5IGZvciBvdGhlciBkYXRhIHVubGVzcw0Kc3RyaXBlIGFs cmVhZHkgc2V0dGVkIFNUUklQRV9QUkVSRUFEX0FDVElWRS4NCg0KPg0KPlRoZW4gbWFrZSBzdXJl IHRoYXQgaGFuZGxlX3N0cmlwZV9kaXJ0eWluZyBkZXRlY3RzIHRoYXQgY2FzZSBhbmQgZG9lc24n dCB0cnkNCj50byByZWFkLCBzbyBmb3JjZXMgJ3JjdycNCj4NCj5Zb3UgcGF0Y2ggZG9lcyBzZWVt IHRvIGRvIHNvbWUgb2YgdGhvc2UgdGhpbmdzLCBidXQgaXQgZG9lcyBhIGxvdCBtb3JlIGFzDQo+ d2VsbCB0aGF0IGRvZXNuJ3Qgc2VlbSB0byBiZSBqdXN0aWZpZWQuDQo+SXQgYWxzbyBtYWtlcyBw b2ludGxlc3MgY2hhbmdlcyB0byBmb3JtYXR0aW5nIHdoaWNoIG1ha2VzIHRoZSBwYXRjaCBoYXJk ZXIgdG8NCj5yZWFkLg0KPg0KPlBsZWFzZQ0KPiAtIGtlZXAgdGhlIHBhdGNoIGFzIHNtYWxsIGFz IHBvc3NpYmxlLg0KPiAtIGV4cGxhaW4gd2hhdCBpcyBoYXBwZW5pbmcgaW4gYXMgbXVjaCBkZXRh aWwgYXMgcG9zc2libGUuDQo+DQo+TmVpbEJyb3duDQo+DQo+DQo+DQo+PiA0OklmIHN0ZXAzIHN1 Y2Nlc3NlZCwgYWRkIGEgc3BhcmUgZGlzayB0byByYWlkLHRoZSByYWlkIGNhbiBiZSBhY3RpdmUN Cj4+IGZyb20gZGVncmFkZWQuDQo+PiANCj4+IFRoZXJlIGFyZSB0d28gbWV0aG9kcyB0byBjb21w dXRlIHJhaWQ1IHBhcml0eSxyY3cgYW5kIHJtdy4NCj4+IEluIHRoaXMgc2l0dWF0aW9uLGl0IG9u bHkgdXNlZCByY3cuDQo+PiBUaGUgcHVycG9zZSBpcyBvbmx5IGNoYW5nZSBzdGF0ZSBvZiBzdHJp cGUgZnJvbSBmYWlsZWQgdG8gZGVncmFkZWQgb3INCj4+IGFjdGl2ZS4NCj4+IA0KPj4gTk9URToN Cj4+IFRoZSBwYXRjaCBsb29rcyB1Z2x5LiBJdCBpcyBwb3N0IG91dCBtYWlubHkgdG8gbWFrZSBz dXJlIGl0IGlzIA0KPj4gZ29pbmcgaW4gdGhlIGNvcnJlY3QgZGlyZWN0aW9uIGFuZCBob3BlIHRv IGdldCBzb21lIGhlbHBmdWwgY29tbWVudHMgZnJvbSBvdGhlciBndXlzLg0KPj4gDQo+PiBUZXN0 ZWQtYnk6IFFpIFpob3UgPHFpLmcuemhvdUBnbWFpbC5jb20+DQo+PiBTaWduZWQtb2ZmLWJ5OiBZ dSBCaWFuIDx5Y2J6empsYnlieUBnbWFpbC5jb20+DQo+PiBTaWduZWQtb2ZmLWJ5OiBKaWFucGVu ZyBNYSA8bWFqaWFucGVuZ0BnbWFpbC5jb20+DQo+PiAtLS0NCj4+ICBkcml2ZXJzL21kL3JhaWQ1 LmMgfCAgMTUyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0t LS0tLS0NCj4+ICBkcml2ZXJzL21kL3JhaWQ1LmggfCAgICA4ICsrKw0KPj4gIDIgZmlsZXMgY2hh bmdlZCwgMTM1IGluc2VydGlvbnMoKyksIDI1IGRlbGV0aW9ucygtKQ0KPj4gDQo+PiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9tZC9yYWlkNS5jIGIvZHJpdmVycy9tZC9yYWlkNS5jDQo+PiBpbmRleCBh ZGRhOTRkLi5kMDg1ZmE0IDEwMDY0NA0KPj4gLS0tIGEvZHJpdmVycy9tZC9yYWlkNS5jDQo+PiAr KysgYi9kcml2ZXJzL21kL3JhaWQ1LmMNCj4+IEBAIC0yMjAsNiArMjIwLDcgQEAgc3RhdGljIHZv aWQgZG9fcmVsZWFzZV9zdHJpcGUoc3RydWN0IHI1Y29uZiAqY29uZiwgc3RydWN0IHN0cmlwZV9o ZWFkICpzaCkNCj4+ICAJCQkgICAgPCBJT19USFJFU0hPTEQpDQo+PiAgCQkJCW1kX3dha2V1cF90 aHJlYWQoY29uZi0+bWRkZXYtPnRocmVhZCk7DQo+PiAgCQlhdG9taWNfZGVjKCZjb25mLT5hY3Rp dmVfc3RyaXBlcyk7DQo+PiArCQljbGVhcl9iaXQoU1RSSVBFX0ZBSUxFRF9SRVJFQUQsICZzaC0+ c3RhdGUpOw0KPj4gIAkJaWYgKCF0ZXN0X2JpdChTVFJJUEVfRVhQQU5ESU5HLCAmc2gtPnN0YXRl KSkgew0KPj4gIAkJCWxpc3RfYWRkX3RhaWwoJnNoLT5scnUsICZjb25mLT5pbmFjdGl2ZV9saXN0 KTsNCj4+ICAJCQl3YWtlX3VwKCZjb25mLT53YWl0X2Zvcl9zdHJpcGUpOw0KPj4gQEAgLTU0OCw5 ICs1NDksOSBAQCBzdGF0aWMgdm9pZCBvcHNfcnVuX2lvKHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gs IHN0cnVjdCBzdHJpcGVfaGVhZF9zdGF0ZSAqcykNCj4+ICAJCQllbHNlDQo+PiAgCQkJCXJ3ID0g V1JJVEU7DQo+PiAgCQl9IGVsc2UgaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChSNV9XYW50cmVhZCwg JnNoLT5kZXZbaV0uZmxhZ3MpKQ0KPj4gLQkJCXJ3ID0gUkVBRDsNCj4+ICsJCQkJcncgPSBSRUFE Ow0KPj4gIAkJZWxzZSBpZiAodGVzdF9hbmRfY2xlYXJfYml0KFI1X1dhbnRSZXBsYWNlLA0KPj4g LQkJCQkJICAgICZzaC0+ZGV2W2ldLmZsYWdzKSkgew0KPj4gKwkJCQkmc2gtPmRldltpXS5mbGFn cykpIHsNCj4+ICAJCQlydyA9IFdSSVRFOw0KPj4gIAkJCXJlcGxhY2Vfb25seSA9IDE7DQo+PiAg CQl9IGVsc2UNCj4+IEBAIC0xNzM3LDYgKzE3MzgsNyBAQCBzdGF0aWMgdm9pZCByYWlkNV9lbmRf cmVhZF9yZXF1ZXN0KHN0cnVjdCBiaW8gKiBiaSwgaW50IGVycm9yKQ0KPj4gIAkJcyA9IHNoLT5z ZWN0b3IgKyByZGV2LT5uZXdfZGF0YV9vZmZzZXQ7DQo+PiAgCWVsc2UNCj4+ICAJCXMgPSBzaC0+ c2VjdG9yICsgcmRldi0+ZGF0YV9vZmZzZXQ7DQo+PiArDQo+PiAgCWlmICh1cHRvZGF0ZSkgew0K Pj4gIAkJc2V0X2JpdChSNV9VUFRPREFURSwgJnNoLT5kZXZbaV0uZmxhZ3MpOw0KPj4gIAkJaWYg KHRlc3RfYml0KFI1X1JlYWRFcnJvciwgJnNoLT5kZXZbaV0uZmxhZ3MpKSB7DQo+PiBAQCAtMTc1 NCw2ICsxNzU2LDcgQEAgc3RhdGljIHZvaWQgcmFpZDVfZW5kX3JlYWRfcmVxdWVzdChzdHJ1Y3Qg YmlvICogYmksIGludCBlcnJvcikNCj4+ICAJCQlhdG9taWNfYWRkKFNUUklQRV9TRUNUT1JTLCAm cmRldi0+Y29ycmVjdGVkX2Vycm9ycyk7DQo+PiAgCQkJY2xlYXJfYml0KFI1X1JlYWRFcnJvciwg JnNoLT5kZXZbaV0uZmxhZ3MpOw0KPj4gIAkJCWNsZWFyX2JpdChSNV9SZVdyaXRlLCAmc2gtPmRl dltpXS5mbGFncyk7DQo+PiArCQkJY2xlYXJfYml0KFI1X0ZhaWxlZFJlcmVhZCwgJnNoLT5kZXZb aV0uZmxhZ3MpOw0KPj4gIAkJfSBlbHNlIGlmICh0ZXN0X2JpdChSNV9SZWFkTm9NZXJnZSwgJnNo LT5kZXZbaV0uZmxhZ3MpKQ0KPj4gIAkJCWNsZWFyX2JpdChSNV9SZWFkTm9NZXJnZSwgJnNoLT5k ZXZbaV0uZmxhZ3MpOw0KPj4gIA0KPj4gQEAgLTE4MDksNiArMTgxMiw3IEBAIHN0YXRpYyB2b2lk IHJhaWQ1X2VuZF9yZWFkX3JlcXVlc3Qoc3RydWN0IGJpbyAqIGJpLCBpbnQgZXJyb3IpDQo+PiAg CQllbHNlIHsNCj4+ICAJCQljbGVhcl9iaXQoUjVfUmVhZEVycm9yLCAmc2gtPmRldltpXS5mbGFn cyk7DQo+PiAgCQkJY2xlYXJfYml0KFI1X1JlV3JpdGUsICZzaC0+ZGV2W2ldLmZsYWdzKTsNCj4+ ICsJCQljbGVhcl9iaXQoUjVfRmFpbGVkUmVyZWFkLCAmc2gtPmRldltpXS5mbGFncyk7DQo+PiAg CQkJaWYgKCEoc2V0X2JhZA0KPj4gIAkJCSAgICAgICYmIHRlc3RfYml0KEluX3N5bmMsICZyZGV2 LT5mbGFncykNCj4+ICAJCQkgICAgICAmJiByZGV2X3NldF9iYWRibG9ja3MoDQo+PiBAQCAtMTg1 Miw4ICsxODU2LDggQEAgc3RhdGljIHZvaWQgcmFpZDVfZW5kX3dyaXRlX3JlcXVlc3Qoc3RydWN0 IGJpbyAqYmksIGludCBlcnJvcikNCj4+ICAJCX0NCj4+ICAJfQ0KPj4gIAlwcl9kZWJ1ZygiZW5k X3dyaXRlX3JlcXVlc3QgJWxsdS8lZCwgY291bnQgJWQsIHVwdG9kYXRlOiAlZC5cbiIsDQo+PiAt CQkodW5zaWduZWQgbG9uZyBsb25nKXNoLT5zZWN0b3IsIGksIGF0b21pY19yZWFkKCZzaC0+Y291 bnQpLA0KPj4gLQkJdXB0b2RhdGUpOw0KPj4gKwkJKHVuc2lnbmVkIGxvbmcgbG9uZylzaC0+c2Vj dG9yLCBpLA0KPj4gKwkJYXRvbWljX3JlYWQoJnNoLT5jb3VudCksIHVwdG9kYXRlKTsNCj4+ICAJ aWYgKGkgPT0gZGlza3MpIHsNCj4+ICAJCUJVRygpOw0KPj4gIAkJcmV0dXJuOw0KPj4gQEAgLTE4 NzAsNiArMTg3NCw3IEBAIHN0YXRpYyB2b2lkIHJhaWQ1X2VuZF93cml0ZV9yZXF1ZXN0KHN0cnVj dCBiaW8gKmJpLCBpbnQgZXJyb3IpDQo+PiAgCQlpZiAoIXVwdG9kYXRlKSB7DQo+PiAgCQkJc2V0 X2JpdChXcml0ZUVycm9yU2VlbiwgJnJkZXYtPmZsYWdzKTsNCj4+ICAJCQlzZXRfYml0KFI1X1dy aXRlRXJyb3IsICZzaC0+ZGV2W2ldLmZsYWdzKTsNCj4+ICsJCQljbGVhcl9iaXQoUjVfRmFpbGVk T3ZlcndyaXRlLCAmc2gtPmRldltpXS5mbGFncyk7DQo+PiAgCQkJaWYgKCF0ZXN0X2FuZF9zZXRf Yml0KFdhbnRSZXBsYWNlbWVudCwgJnJkZXYtPmZsYWdzKSkNCj4+ICAJCQkJc2V0X2JpdChNRF9S RUNPVkVSWV9ORUVERUQsDQo+PiAgCQkJCQkmcmRldi0+bWRkZXYtPnJlY292ZXJ5KTsNCj4+IEBA IC0yNDc5LDYgKzI0ODQsOSBAQCBoYW5kbGVfZmFpbGVkX3N0cmlwZShzdHJ1Y3QgcjVjb25mICpj b25mLCBzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoLA0KPj4gIAkJCWJpdG1hcF9lbmQgPSAxOw0KPj4g IAkJfQ0KPj4gIA0KPj4gKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChSNV9GYWlsZWRPdmVyd3Jp dGUsICZzaC0+ZGV2W2ldLmZsYWdzKSkNCj4+ICsJCQlzLT5mYWlsZWRfb3ZlcndyaXRlLS07Ow0K Pj4gKwkJY2xlYXJfYml0KFI1X0JhZFBhcml0eSwJJnNoLT5kZXZbaV0uZmxhZ3MpOw0KPj4gIAkJ aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChSNV9PdmVybGFwLCAmc2gtPmRldltpXS5mbGFncykpDQo+ PiAgCQkJd2FrZV91cCgmY29uZi0+d2FpdF9mb3Jfb3ZlcmxhcCk7DQo+PiAgDQo+PiBAQCAtMjc3 Niw2ICsyNzg0LDEwIEBAIHN0YXRpYyB2b2lkIGhhbmRsZV9zdHJpcGVfZGlydHlpbmcoc3RydWN0 IHI1Y29uZiAqY29uZiwNCj4+ICAJCSAqIGxvb2sgbGlrZSByY3cgaXMgY2hlYXBlcg0KPj4gIAkJ ICovDQo+PiAgCQlyY3cgPSAxOyBybXcgPSAyOw0KPj4gKwl9IGVsc2UgaWYgKHMtPmZhaWxlZCA+ IGNvbmYtPm1heF9kZWdyYWRlZCkgew0KPj4gKwkJLypGb3Igd3JpdGUgZmFpbGVkLXN0cmlwZSwg b25seSB1c2UgcmN3ICovDQo+PiArCQlyY3cgPSAxOw0KPj4gKwkJcm13ID0gMjsNCj4+ICAJfSBl bHNlIGZvciAoaSA9IGRpc2tzOyBpLS07ICkgew0KPj4gIAkJLyogd291bGQgSSBoYXZlIHRvIHJl YWQgdGhpcyBidWZmZXIgZm9yIHJlYWRfbW9kaWZ5X3dyaXRlICovDQo+PiAgCQlzdHJ1Y3QgcjVk ZXYgKmRldiA9ICZzaC0+ZGV2W2ldOw0KPj4gQEAgLTI4MjYsNiArMjgzOCw3IEBAIHN0YXRpYyB2 b2lkIGhhbmRsZV9zdHJpcGVfZGlydHlpbmcoc3RydWN0IHI1Y29uZiAqY29uZiwNCj4+ICAJaWYg KHJjdyA8PSBybXcgJiYgcmN3ID4gMCkgew0KPj4gIAkJLyogd2FudCByZWNvbnN0cnVjdCB3cml0 ZSwgYnV0IG5lZWQgdG8gZ2V0IHNvbWUgZGF0YSAqLw0KPj4gIAkJcmN3ID0gMDsNCj4+ICsNCj4+ ICAJCWZvciAoaSA9IGRpc2tzOyBpLS07ICkgew0KPj4gIAkJCXN0cnVjdCByNWRldiAqZGV2ID0g JnNoLT5kZXZbaV07DQo+PiAgCQkJaWYgKCF0ZXN0X2JpdChSNV9PVkVSV1JJVEUsICZkZXYtPmZs YWdzKSAmJg0KPj4gQEAgLTI4MzQsOCArMjg0NywxMyBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfc3Ry aXBlX2RpcnR5aW5nKHN0cnVjdCByNWNvbmYgKmNvbmYsDQo+PiAgCQkJICAgICEodGVzdF9iaXQo UjVfVVBUT0RBVEUsICZkZXYtPmZsYWdzKSB8fA0KPj4gIAkJCSAgICAgIHRlc3RfYml0KFI1X1dh bnRjb21wdXRlLCAmZGV2LT5mbGFncykpKSB7DQo+PiAgCQkJCXJjdysrOw0KPj4gLQkJCQlpZiAo IXRlc3RfYml0KFI1X0luc3luYywgJmRldi0+ZmxhZ3MpKQ0KPj4gKwkJCQlpZiAoIXRlc3RfYml0 KFI1X0luc3luYywgJmRldi0+ZmxhZ3MpKSB7DQo+PiArCQkJCQkvKiBPbmx5IGZvciBhbGwgZGF0 YS1kaXNrcyAhUjVfSW5zeW5jICovDQo+PiArCQkJCQlpZiAocy0+ZmFpbGVkID4gY29uZi0+bWF4 X2RlZ3JhZGVkICYmDQo+PiArCQkJCQkJIXRlc3RfYml0KFNUUklQRV9GQUlMRURfV1JJVEUsICZz aC0+c3RhdGUpKQ0KPj4gKwkJCQkJCXNldF9iaXQoU1RSSVBFX0RFTEFZRUQsICZzaC0+c3RhdGUp Ow0KPj4gIAkJCQkJY29udGludWU7IC8qIGl0J3MgYSBmYWlsZWQgZHJpdmUgKi8NCj4+ICsJCQkJ fQ0KPj4gIAkJCQlpZiAoDQo+PiAgCQkJCSAgdGVzdF9iaXQoU1RSSVBFX1BSRVJFQURfQUNUSVZF LCAmc2gtPnN0YXRlKSkgew0KPj4gIAkJCQkJcHJfZGVidWcoIlJlYWRfb2xkIGJsb2NrICINCj4+ IEBAIC0zMjY4LDYgKzMyODYsNyBAQCBzdGF0aWMgdm9pZCBhbmFseXNlX3N0cmlwZShzdHJ1Y3Qg c3RyaXBlX2hlYWQgKnNoLCBzdHJ1Y3Qgc3RyaXBlX2hlYWRfc3RhdGUgKnMpDQo+PiAgCQlpZiAo cmRldikgew0KPj4gIAkJCWlzX2JhZCA9IGlzX2JhZGJsb2NrKHJkZXYsIHNoLT5zZWN0b3IsIFNU UklQRV9TRUNUT1JTLA0KPj4gIAkJCQkJICAgICAmZmlyc3RfYmFkLCAmYmFkX3NlY3RvcnMpOw0K Pj4gKw0KPj4gIAkJCWlmIChzLT5ibG9ja2VkX3JkZXYgPT0gTlVMTA0KPj4gIAkJCSAgICAmJiAo dGVzdF9iaXQoQmxvY2tlZCwgJnJkZXYtPmZsYWdzKQ0KPj4gIAkJCQl8fCBpc19iYWQgPCAwKSkg ew0KPj4gQEAgLTMyNzksOSArMzI5OCwxNCBAQCBzdGF0aWMgdm9pZCBhbmFseXNlX3N0cmlwZShz dHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoLCBzdHJ1Y3Qgc3RyaXBlX2hlYWRfc3RhdGUgKnMpDQo+PiAg CQkJfQ0KPj4gIAkJfQ0KPj4gIAkJY2xlYXJfYml0KFI1X0luc3luYywgJmRldi0+ZmxhZ3MpOw0K Pj4gLQkJaWYgKCFyZGV2KQ0KPj4gLQkJCS8qIE5vdCBpbi1zeW5jICovOw0KPj4gLQkJZWxzZSBp ZiAoaXNfYmFkKSB7DQo+PiArCQlpZiAoIXJkZXYpIHsNCj4+ICsJCQlzLT5ub3dvcmtlZCsrOw0K Pj4gKwkJCWlmICgoZGV2LT50b3dyaXRlICYmIHRlc3RfYml0KFI1X09WRVJXUklURSwgJmRldi0+ ZmxhZ3MpKSB8fA0KPj4gKwkJCQl0ZXN0X2JpdChSNV9GYWlsZWRPdmVyd3JpdGUsICZkZXYtPmZs YWdzKSkgew0KPj4gKwkJCQlzLT5mYWlsZWRfb3ZlcndyaXRlKys7DQo+PiArCQkJCXNldF9iaXQo UjVfRmFpbGVkT3ZlcndyaXRlLCAmZGV2LT5mbGFncyk7DQo+PiArCQkJfQ0KPj4gKwkJfSBlbHNl IGlmIChpc19iYWQpIHsNCj4+ICAJCQkvKiBhbHNvIG5vdCBpbi1zeW5jICovDQo+PiAgCQkJaWYg KCF0ZXN0X2JpdChXcml0ZUVycm9yU2VlbiwgJnJkZXYtPmZsYWdzKSAmJg0KPj4gIAkJCSAgICB0 ZXN0X2JpdChSNV9VUFRPREFURSwgJmRldi0+ZmxhZ3MpKSB7DQo+PiBAQCAtMzI5MSw2ICszMzE1 LDE0IEBAIHN0YXRpYyB2b2lkIGFuYWx5c2Vfc3RyaXBlKHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gs IHN0cnVjdCBzdHJpcGVfaGVhZF9zdGF0ZSAqcykNCj4+ICAJCQkJc2V0X2JpdChSNV9JbnN5bmMs ICZkZXYtPmZsYWdzKTsNCj4+ICAJCQkJc2V0X2JpdChSNV9SZWFkRXJyb3IsICZkZXYtPmZsYWdz KTsNCj4+ICAJCQl9DQo+PiArDQo+PiArCQkJaWYgKCF0ZXN0X2JpdChXcml0ZUVycm9yU2Vlbiwg JnJkZXYtPmZsYWdzKSAmJg0KPj4gKwkJCQkoKGRldi0+dG93cml0ZSAmJiB0ZXN0X2JpdChSNV9P VkVSV1JJVEUsICZkZXYtPmZsYWdzKSkgfHwNCj4+ICsJCQkJdGVzdF9iaXQoUjVfRmFpbGVkT3Zl cndyaXRlLCAmZGV2LT5mbGFncykpKSB7DQo+PiArCQkJCXMtPmZhaWxlZF9vdmVyd3JpdGUrKzsN Cj4+ICsJCQkJc2V0X2JpdChSNV9GYWlsZWRPdmVyd3JpdGUsICZkZXYtPmZsYWdzKTsNCj4+ICsJ CQl9IGVsc2UgaWYgKGkgPT0gc2gtPnBkX2lkeCB8fCBpID09IHNoLT5xZF9pZHgpDQo+PiArCQkJ CXNldF9iaXQoUjVfQmFkUGFyaXR5LCAmZGV2LT5mbGFncyk7DQo+PiAgCQl9IGVsc2UgaWYgKHRl c3RfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncykpDQo+PiAgCQkJc2V0X2JpdChSNV9JbnN5bmMs ICZkZXYtPmZsYWdzKTsNCj4+ICAJCWVsc2UgaWYgKHNoLT5zZWN0b3IgKyBTVFJJUEVfU0VDVE9S UyA8PSByZGV2LT5yZWNvdmVyeV9vZmZzZXQpDQo+PiBAQCAtMzM0MiwxNCArMzM3NCwzNSBAQCBz dGF0aWMgdm9pZCBhbmFseXNlX3N0cmlwZShzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoLCBzdHJ1Y3Qg c3RyaXBlX2hlYWRfc3RhdGUgKnMpDQo+PiAgCQkJY2xlYXJfYml0KFI1X1JlYWRFcnJvciwgJmRl di0+ZmxhZ3MpOw0KPj4gIAkJCWNsZWFyX2JpdChSNV9SZVdyaXRlLCAmZGV2LT5mbGFncyk7DQo+ PiAgCQl9DQo+PiAtCQlpZiAodGVzdF9iaXQoUjVfUmVhZEVycm9yLCAmZGV2LT5mbGFncykpDQo+ PiAtCQkJY2xlYXJfYml0KFI1X0luc3luYywgJmRldi0+ZmxhZ3MpOw0KPj4gKwkJaWYgKHRlc3Rf Yml0KFI1X1JlYWRFcnJvciwgJmRldi0+ZmxhZ3MpKSB7DQo+PiArCQkJLyoNCj4+ICsJCQkgKiBG b3IgZmFpbGVkLXN0cmlwZSB3aGljaCBjb250YWluZWQgYmFkc2VjdG9ycyxhZnRlciB3cml0aW5n DQo+PiArCQkJICogaXQgc2hvdWxkIHJlcmVhZCB0byBjaGVjay4NCj4+ICsJCQkgKi8NCj4+ICsJ CQlzdHJ1Y3QgbWRfcmRldiAqcmRldjIgPSByY3VfZGVyZWZlcmVuY2UoDQo+PiArCQkJCWNvbmYt PmRpc2tzW2ldLnJkZXYpOw0KPj4gKwkJCWlmICghaXNfYmFkICYmIHJkZXYyICYmICF0ZXN0X2Jp dChGYXVsdHksICZyZGV2Mi0+ZmxhZ3MpICYmDQo+PiArCQkJCXRlc3RfYml0KFI1X1VQVE9EQVRF LCAmZGV2LT5mbGFncykgJiYNCj4+ICsJCQkJKHRlc3RfYml0KFI1X0ZhaWxlZE92ZXJ3cml0ZSwg JmRldi0+ZmxhZ3MpIHx8DQo+PiArCQkJCSB0ZXN0X2JpdChSNV9CYWRQYXJpdHksICZkZXYtPmZs YWdzKSB8fA0KPj4gKwkJCQkgdGVzdF9iaXQoUjVfRmFpbGVkUmVyZWFkLCAmZGV2LT5mbGFncykp KSB7DQo+PiArCQkJCXNldF9iaXQoU1RSSVBFX0ZBSUxFRF9SRVJFQUQsICZzaC0+c3RhdGUpOw0K Pj4gKwkJCQlzZXRfYml0KFI1X0ZhaWxlZFJlcmVhZCwgJmRldi0+ZmxhZ3MpOw0KPj4gKwkJCQlj bGVhcl9iaXQoUjVfRmFpbGVkT3ZlcndyaXRlLCAmZGV2LT5mbGFncyk7DQo+PiArCQkJCWNsZWFy X2JpdChSNV9CYWRQYXJpdHksICZkZXYtPmZsYWdzKTsNCj4+ICsJCQl9IGVsc2UNCj4+ICsJCQkJ Y2xlYXJfYml0KFI1X0luc3luYywgJmRldi0+ZmxhZ3MpOw0KPj4gKwkJfQ0KPj4gIAkJaWYgKCF0 ZXN0X2JpdChSNV9JbnN5bmMsICZkZXYtPmZsYWdzKSkgew0KPj4gIAkJCWlmIChzLT5mYWlsZWQg PCAyKQ0KPj4gIAkJCQlzLT5mYWlsZWRfbnVtW3MtPmZhaWxlZF0gPSBpOw0KPj4gIAkJCXMtPmZh aWxlZCsrOw0KPj4gIAkJCWlmIChyZGV2ICYmICF0ZXN0X2JpdChGYXVsdHksICZyZGV2LT5mbGFn cykpDQo+PiAgCQkJCWRvX3JlY292ZXJ5ID0gMTsNCj4+ICsJCQlpZiAoaSA9PSBzaC0+cGRfaWR4 KQ0KPj4gKwkJCQlzLT5wX2ZhaWxlZCA9IDE7DQo+PiArCQkJZWxzZSBpZiAoaSA9PSBzaC0+cWRf aWR4KQ0KPj4gKwkJCQlzLT5xX2ZhaWxlZCA9IDE7DQo+PiAgCQl9DQo+PiAgCX0NCj4+ICAJaWYg KHRlc3RfYml0KFNUUklQRV9TWU5DSU5HLCAmc2gtPnN0YXRlKSkgew0KPj4gQEAgLTM0MjQsMTkg KzM0NzcsNDMgQEAgc3RhdGljIHZvaWQgaGFuZGxlX3N0cmlwZShzdHJ1Y3Qgc3RyaXBlX2hlYWQg KnNoKQ0KPj4gIAl9DQo+PiAgDQo+PiAgCXByX2RlYnVnKCJsb2NrZWQ9JWQgdXB0b2RhdGU9JWQg dG9fcmVhZD0lZCINCj4+IC0JICAgICAgICIgdG9fd3JpdGU9JWQgZmFpbGVkPSVkIGZhaWxlZF9u dW09JWQsJWRcbiIsDQo+PiArCSAgICAgICAiIHRvX3dyaXRlPSVkIGZhaWxlZD0lZCBmYWlsZWRf bnVtPSVkLCVkIg0KPj4gKwkgICAgICAgIiBmYWlsZWRfb3ZlcndyaXRlPSVkIHBfZmFpbGVkPSVk IHFfZmFpbGVkPSVkXG4iLA0KPj4gIAkgICAgICAgcy5sb2NrZWQsIHMudXB0b2RhdGUsIHMudG9f cmVhZCwgcy50b193cml0ZSwgcy5mYWlsZWQsDQo+PiAtCSAgICAgICBzLmZhaWxlZF9udW1bMF0s IHMuZmFpbGVkX251bVsxXSk7DQo+PiArCSAgICAgICBzLmZhaWxlZF9udW1bMF0sIHMuZmFpbGVk X251bVsxXSwgcy5mYWlsZWRfb3ZlcndyaXRlLA0KPj4gKwkgICAgICAgcy5wX2ZhaWxlZCwgcy5x X2ZhaWxlZCk7DQo+PiAgCS8qIGNoZWNrIGlmIHRoZSBhcnJheSBoYXMgbG9zdCBtb3JlIHRoYW4g bWF4X2RlZ3JhZGVkIGRldmljZXMgYW5kLA0KPj4gIAkgKiBpZiBzbywgc29tZSByZXF1ZXN0cyBt aWdodCBuZWVkIHRvIGJlIGZhaWxlZC4NCj4+ICAJICovDQo+PiAgCWlmIChzLmZhaWxlZCA+IGNv bmYtPm1heF9kZWdyYWRlZCkgew0KPj4gLQkJc2gtPmNoZWNrX3N0YXRlID0gMDsNCj4+IC0JCXNo LT5yZWNvbnN0cnVjdF9zdGF0ZSA9IDA7DQo+PiAtCQlpZiAocy50b19yZWFkK3MudG9fd3JpdGUr cy53cml0dGVuKQ0KPj4gLQkJCWhhbmRsZV9mYWlsZWRfc3RyaXBlKGNvbmYsIHNoLCAmcywgZGlz a3MsICZzLnJldHVybl9iaSk7DQo+PiAtCQlpZiAocy5zeW5jaW5nICsgcy5yZXBsYWNpbmcpDQo+ PiAtCQkJaGFuZGxlX2ZhaWxlZF9zeW5jKGNvbmYsIHNoLCAmcyk7DQo+PiArCQkvKg0KPj4gKwkJ ICpEaXNrcyB3aGljaCByZW1vdmVkIG9yIGZhdWx0eSBtdXN0IGxlc3Mgb3IgZXF1YWwgbWF4X2Rl Z3JhZGVkDQo+PiArCQkgKi8NCj4+ICsJCWlmIChzLm5vd29ya2VkIDw9IGNvbmYtPm1heF9kZWdy YWRlZCAmJg0KPj4gKwkJCSgoY29uZi0+bGV2ZWwgPCA2ICYmDQo+PiArCQkJKHMuZmFpbGVkIC0g cy5mYWlsZWRfb3ZlcndyaXRlIDw9IHMucF9mYWlsZWQpKSB8fA0KPj4gKwkJCShjb25mLT5sZXZl bCA9PSA2ICYmDQo+PiArCQkJKHMuZmFpbGVkIC0gcy5mYWlsZWRfb3ZlcndyaXRlIDw9IHMucF9m YWlsZWQgKyBzLnFfZmFpbGVkKSkpKSB7DQo+PiArCQkJc2V0X2JpdChTVFJJUEVfRkFJTEVEX1dS SVRFLCAmc2gtPnN0YXRlKTsNCj4+ICsJCQlwcl9kZWJ1Zygic3RyaXBlKCVsbHUpIGZhaWxlZCwg dHJ5IHRvIHJlY29ycmVjdFxuIiwNCj4+ICsJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylzaC0+c2Vj dG9yKTsNCj4+ICsJCX0gZWxzZSBpZiAoKHMuZmFpbGVkX292ZXJ3cml0ZSA+IDAgJiYNCj4+ICsJ CQkhdGVzdF9iaXQoU1RSSVBFX1BSRVJFQURfQUNUSVZFLCAmc2gtPnN0YXRlKSkpDQo+PiArCQkJ cHJfZGVidWcoInN0cmlwZSglbGxkKSBkZWxheSBmb3IgZmFpbGVkLXdyaXRlXG4iLA0KPj4gKwkJ CQkodW5zaWduZWQgbG9uZyBsb25nKXNoLT5zZWN0b3IpOw0KPj4gKwkJZWxzZSB7DQo+PiArCQkJ c2gtPmNoZWNrX3N0YXRlID0gMDsNCj4+ICsJCQlzaC0+cmVjb25zdHJ1Y3Rfc3RhdGUgPSAwOw0K Pj4gKwkJCWNsZWFyX2JpdChTVFJJUEVfRkFJTEVEX1dSSVRFLCAmc2gtPnN0YXRlKTsNCj4+ICsJ CQljbGVhcl9iaXQoU1RSSVBFX0ZBSUxFRF9SRVJFQUQsICZzaC0+c3RhdGUpOw0KPj4gKwkJCWlm IChzLnRvX3JlYWQrcy50b193cml0ZStzLndyaXR0ZW4pIHsNCj4+ICsJCQkJaGFuZGxlX2ZhaWxl ZF9zdHJpcGUoY29uZiwgc2gsICZzLCBkaXNrcywgJnMucmV0dXJuX2JpKTsNCj4+ICsJCQkJcHJf ZGVidWcoImhhbmRsZV9mYWlsZWRfc3RyaXBlOiVsbGRcbiIsDQo+PiArCQkJCQkodW5zaWduZWQg bG9uZyBsb25nKXNoLT5zZWN0b3IpOw0KPj4gKwkJCX0NCj4+ICsJCQlpZiAocy5zeW5jaW5nICsg cy5yZXBsYWNpbmcpDQo+PiArCQkJCWhhbmRsZV9mYWlsZWRfc3luYyhjb25mLCBzaCwgJnMpOw0K Pj4gKwkJfQ0KPj4gIAl9DQo+PiAgDQo+PiAgCS8qDQo+PiBAQCAtMzQ4Nyw2ICszNTY0LDggQEAg c3RhdGljIHZvaWQgaGFuZGxlX3N0cmlwZShzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoKQ0KPj4gIAkJ QlVHX09OKCF0ZXN0X2JpdChSNV9VUFRPREFURSwgJnNoLT5kZXZbc2gtPnBkX2lkeF0uZmxhZ3Mp KTsNCj4+ICAJCUJVR19PTihzaC0+cWRfaWR4ID49IDAgJiYNCj4+ICAJCSAgICAgICAhdGVzdF9i aXQoUjVfVVBUT0RBVEUsICZzaC0+ZGV2W3NoLT5xZF9pZHhdLmZsYWdzKSk7DQo+PiArDQo+PiAr CQljbGVhcl9iaXQoU1RSSVBFX0ZBSUxFRF9XUklURSwgJnNoLT5zdGF0ZSk7DQo+PiAgCQlmb3Ig KGkgPSBkaXNrczsgaS0tOyApIHsNCj4+ICAJCQlzdHJ1Y3QgcjVkZXYgKmRldiA9ICZzaC0+ZGV2 W2ldOw0KPj4gIAkJCWlmICh0ZXN0X2JpdChSNV9MT0NLRUQsICZkZXYtPmZsYWdzKSAmJg0KPj4g QEAgLTM1MDQsNiArMzU4Myw3IEBAIHN0YXRpYyB2b2lkIGhhbmRsZV9zdHJpcGUoc3RydWN0IHN0 cmlwZV9oZWFkICpzaCkNCj4+ICAJCX0NCj4+ICAJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoU1RS SVBFX1BSRVJFQURfQUNUSVZFLCAmc2gtPnN0YXRlKSkNCj4+ICAJCQlzLmRlY19wcmVyZWFkX2Fj dGl2ZSA9IDE7DQo+PiArDQo+PiAgCX0NCj4+ICANCj4+ICAJLyogTm93IHRvIGNvbnNpZGVyIG5l dyB3cml0ZSByZXF1ZXN0cyBhbmQgd2hhdCBlbHNlLCBpZiBhbnl0aGluZw0KPj4gQEAgLTM1NDgs MTAgKzM2MjgsMzAgQEAgc3RhdGljIHZvaWQgaGFuZGxlX3N0cmlwZShzdHJ1Y3Qgc3RyaXBlX2hl YWQgKnNoKQ0KPj4gIAkJY2xlYXJfYml0KFNUUklQRV9TWU5DSU5HLCAmc2gtPnN0YXRlKTsNCj4+ ICAJfQ0KPj4gIA0KPj4gLQkvKiBJZiB0aGUgZmFpbGVkIGRyaXZlcyBhcmUganVzdCBhIFJlYWRF cnJvciwgdGhlbiB3ZSBtaWdodCBuZWVkDQo+PiAtCSAqIHRvIHByb2dyZXNzIHRoZSByZXBhaXIv Y2hlY2sgcHJvY2Vzcw0KPj4gKwkvKg0KPj4gKwkgKiBJZiBzdHJpcGUgZmFpbGVkIGJlY2F1c2Ug YmFkc2VjdG9yIGFuZA0KPj4gKwkgKiBjYW4gd3JpdGUgdG8gY29ycmVjdCB0aGUgYmFkc2VjdG9y DQo+PiArCSAqIHdlIHVzZWQgcmVhZGVyciByb3V0aW5lIHdoaWNoIHJld3JpdGUgYW5kIHJlcmVh ZA0KPj4gIAkgKi8NCj4+IC0JaWYgKHMuZmFpbGVkIDw9IGNvbmYtPm1heF9kZWdyYWRlZCAmJiAh Y29uZi0+bWRkZXYtPnJvKQ0KPj4gKwlpZiAodGVzdF9iaXQoU1RSSVBFX0ZBSUxFRF9SRVJFQUQs ICZzaC0+c3RhdGUpKSB7DQo+PiArCQlmb3IgKGkgPSBkaXNrczsgaS0tOyApIHsNCj4+ICsJCQlz dHJ1Y3QgcjVkZXYgKmRldiA9ICZzaC0+ZGV2W2ldOw0KPj4gKwkJCWlmICh0ZXN0X2JpdChSNV9G YWlsZWRSZXJlYWQsICZkZXYtPmZsYWdzKQ0KPj4gKwkJCSAgICAmJiAhdGVzdF9iaXQoUjVfTE9D S0VELCAmZGV2LT5mbGFncykNCj4+ICsJCQkgICAgJiYgdGVzdF9iaXQoUjVfVVBUT0RBVEUsICZk ZXYtPmZsYWdzKSkgew0KPj4gKwkJCQkvKiBpdCBqdXN0IHdyb3RlIGFuZCBzdWNlc3NlZCxzbyBu b3QNCj4+ICsJCQkJICogbmVjZXNzYXJ5IHRvIHJld3JpdGUsb25seSBzZXQgZmxhZw0KPj4gKwkJ CQkgKi8NCj4+ICsJCQkJc2V0X2JpdChSNV9SZVdyaXRlLCAmZGV2LT5mbGFncyk7DQo+PiArCQkJ CXNldF9iaXQoUjVfV2FudHJlYWQsICZkZXYtPmZsYWdzKTsNCj4+ICsJCQkJc2V0X2JpdChSNV9M T0NLRUQsICZkZXYtPmZsYWdzKTsNCj4+ICsJCQkJcy5sb2NrZWQrKzsNCj4+ICsJCQl9DQo+PiAr CQl9DQo+PiArCX0gZWxzZSBpZiAocy5mYWlsZWQgPD0gY29uZi0+bWF4X2RlZ3JhZGVkICYmICFj b25mLT5tZGRldi0+cm8pDQo+PiArCQkvKiBJZiB0aGUgZmFpbGVkIGRyaXZlcyBhcmUganVzdCBh IFJlYWRFcnJvciwgdGhlbiB3ZSBtaWdodCBuZWVkDQo+PiArCQkgKiB0byBwcm9ncmVzcyB0aGUg cmVwYWlyL2NoZWNrIHByb2Nlc3MNCj4+ICsJCSAqLw0KPj4gIAkJZm9yIChpID0gMDsgaSA8IHMu ZmFpbGVkOyBpKyspIHsNCj4+ICAJCQlzdHJ1Y3QgcjVkZXYgKmRldiA9ICZzaC0+ZGV2W3MuZmFp bGVkX251bVtpXV07DQo+PiAgCQkJaWYgKHRlc3RfYml0KFI1X1JlYWRFcnJvciwgJmRldi0+Zmxh Z3MpDQo+PiBAQCAtMzU3MSw3ICszNjcxLDEwIEBAIHN0YXRpYyB2b2lkIGhhbmRsZV9zdHJpcGUo c3RydWN0IHN0cmlwZV9oZWFkICpzaCkNCj4+ICAJCQkJfQ0KPj4gIAkJCX0NCj4+ICAJCX0NCj4+ ICsNCj4+ICANCj4+ICsNCj4+ICsNCj4+ICANCj4+ICAJLyogRmluaXNoIHJlY29uc3RydWN0IG9w ZXJhdGlvbnMgaW5pdGlhdGVkIGJ5IHRoZSBleHBhbnNpb24gcHJvY2VzcyAqLw0KPj4gIAlpZiAo c2gtPnJlY29uc3RydWN0X3N0YXRlID09IHJlY29uc3RydWN0X3N0YXRlX3Jlc3VsdCkgew0KPj4g QEAgLTM2NDgsNyArMzc1MSw3IEBAIGZpbmlzaDoNCj4+ICAJCQlpZiAodGVzdF9hbmRfY2xlYXJf Yml0KFI1X01hZGVHb29kLCAmZGV2LT5mbGFncykpIHsNCj4+ICAJCQkJcmRldiA9IGNvbmYtPmRp c2tzW2ldLnJkZXY7DQo+PiAgCQkJCXJkZXZfY2xlYXJfYmFkYmxvY2tzKHJkZXYsIHNoLT5zZWN0 b3IsDQo+PiAtCQkJCQkJICAgICBTVFJJUEVfU0VDVE9SUywgMCk7DQo+PiArCQkJCSAgICAgU1RS SVBFX1NFQ1RPUlMsIDApOw0KPj4gIAkJCQlyZGV2X2RlY19wZW5kaW5nKHJkZXYsIGNvbmYtPm1k ZGV2KTsNCj4+ICAJCQl9DQo+PiAgCQkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChSNV9NYWRlR29v ZFJlcGwsICZkZXYtPmZsYWdzKSkgew0KPj4gQEAgLTM4NTMsNyArMzk1Niw2IEBAIHN0YXRpYyB2 b2lkIHJhaWQ1X2FsaWduX2VuZGlvKHN0cnVjdCBiaW8gKmJpLCBpbnQgZXJyb3IpDQo+PiAgDQo+ PiAgDQo+PiAgCXByX2RlYnVnKCJyYWlkNV9hbGlnbl9lbmRpbyA6IGlvIGVycm9yLi4uaGFuZGlu ZyBJTyBmb3IgYSByZXRyeVxuIik7DQo+PiAtDQo+PiAgCWFkZF9iaW9fdG9fcmV0cnkocmFpZF9i aSwgY29uZik7DQo+PiAgfQ0KPj4gIA0KPj4gQEAgLTQwODgsNyArNDE5MCw2IEBAIHN0YXRpYyB2 b2lkIG1ha2VfcmVxdWVzdChzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgYmlvICogYmkpDQo+ PiAgCSAgICAgbWRkZXYtPnJlc2hhcGVfcG9zaXRpb24gPT0gTWF4U2VjdG9yICYmDQo+PiAgCSAg ICAgY2h1bmtfYWxpZ25lZF9yZWFkKG1kZGV2LGJpKSkNCj4+ICAJCXJldHVybjsNCj4+IC0NCj4+ ICAJbG9naWNhbF9zZWN0b3IgPSBiaS0+Ymlfc2VjdG9yICYgfigoc2VjdG9yX3QpU1RSSVBFX1NF Q1RPUlMtMSk7DQo+PiAgCWxhc3Rfc2VjdG9yID0gYmktPmJpX3NlY3RvciArIChiaS0+Ymlfc2l6 ZT4+OSk7DQo+PiAgCWJpLT5iaV9uZXh0ID0gTlVMTDsNCj4+IEBAIC00NTg2LDggKzQ2ODcsOSBA QCBzdGF0aWMgaW50ICByZXRyeV9hbGlnbmVkX3JlYWQoc3RydWN0IHI1Y29uZiAqY29uZiwgc3Ry dWN0IGJpbyAqcmFpZF9iaW8pDQo+PiAgCQloYW5kbGVkKys7DQo+PiAgCX0NCj4+ICAJcmVtYWlu aW5nID0gcmFpZDVfZGVjX2JpX2FjdGl2ZV9zdHJpcGVzKHJhaWRfYmlvKTsNCj4+IC0JaWYgKHJl bWFpbmluZyA9PSAwKQ0KPj4gKwlpZiAocmVtYWluaW5nID09IDApDQo+PiAgCQliaW9fZW5kaW8o cmFpZF9iaW8sIDApOw0KPj4gKw0KPj4gIAlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmY29uZi0+ YWN0aXZlX2FsaWduZWRfcmVhZHMpKQ0KPj4gIAkJd2FrZV91cCgmY29uZi0+d2FpdF9mb3Jfc3Ry aXBlKTsNCj4+ICAJcmV0dXJuIGhhbmRsZWQ7DQo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9y YWlkNS5oIGIvZHJpdmVycy9tZC9yYWlkNS5oDQo+PiBpbmRleCBhOWZjMjQ5Li4wNDcwOWQ3IDEw MDY0NA0KPj4gLS0tIGEvZHJpdmVycy9tZC9yYWlkNS5oDQo+PiArKysgYi9kcml2ZXJzL21kL3Jh aWQ1LmgNCj4+IEBAIC0yNTEsNiArMjUxLDkgQEAgc3RydWN0IHN0cmlwZV9oZWFkX3N0YXRlIHsN Cj4+ICAJICovDQo+PiAgCWludCBzeW5jaW5nLCBleHBhbmRpbmcsIGV4cGFuZGVkLCByZXBsYWNp bmc7DQo+PiAgCWludCBsb2NrZWQsIHVwdG9kYXRlLCB0b19yZWFkLCB0b193cml0ZSwgZmFpbGVk LCB3cml0dGVuOw0KPj4gKwkvKiBPdmVyd3JpdGUgZGlza3Mgd2hpY2ggZmF1bHR5IG9yIHJlbW92 ZWQgb3IgY29udGFpbmVkIGJhZHNlY3RvciAqLw0KPj4gKwlpbnQgZmFpbGVkX292ZXJ3cml0ZTsN Cj4+ICsJaW50IG5vd29ya2VkOwkvKmRpc2sgZmF1bHR5IG9yIHJlbW92ZWQqLw0KPj4gIAlpbnQg dG9fZmlsbCwgY29tcHV0ZSwgcmVxX2NvbXB1dGUsIG5vbl9vdmVyd3JpdGU7DQo+PiAgCWludCBm YWlsZWRfbnVtWzJdOw0KPj4gIAlpbnQgcF9mYWlsZWQsIHFfZmFpbGVkOw0KPj4gQEAgLTI5OCw2 ICszMDEsOSBAQCBlbnVtIHI1ZGV2X2ZsYWdzIHsNCj4+ICAJUjVfV2FudFJlcGxhY2UsIC8qIFdl IG5lZWQgdG8gdXBkYXRlIHRoZSByZXBsYWNlbWVudCwgd2UgaGF2ZSByZWFkDQo+PiAgCQkJICog ZGF0YSBpbiwgYW5kIG5vdyBpcyBhIGdvb2QgdGltZSB0byB3cml0ZSBpdCBvdXQuDQo+PiAgCQkJ ICovDQo+PiArCVI1X0ZhaWxlZE92ZXJ3cml0ZSwgLypvdmVyd3JpdGUgb24gZGlzayB3aGljaCBy ZW1vdmVkIG9yIGZhdWx0eSBvciBoYWQgYmFkc2VjdG9ycyovDQo+PiArCVI1X0ZhaWxlZFJlcmVh ZCwNCj4+ICsJUjVfQmFkUGFyaXR5LA0KPj4gIH07DQo+PiAgDQo+PiAgLyoNCj4+IEBAIC0zMjIs NiArMzI4LDggQEAgZW51bSB7DQo+PiAgCVNUUklQRV9DT01QVVRFX1JVTiwNCj4+ICAJU1RSSVBF X09QU19SRVFfUEVORElORywNCj4+ICAJU1RSSVBFX09OX1VOUExVR19MSVNULA0KPj4gKwlTVFJJ UEVfRkFJTEVEX1dSSVRFLA0KPj4gKwlTVFJJUEVfRkFJTEVEX1JFUkVBRCwNCj4+ICB9Ow0KPj4g IA0KPj4gIC8qDQo+DQo+