From mboxrd@z Thu Jan 1 00:00:00 1970 From: majianpeng Subject: Re: Re: [PATCH 4/4] raid1: Rewrite the implementation of iobarrier. Date: Tue, 29 Oct 2013 09:30:14 +0800 Message-ID: <201310290930116677124@gmail.com> References: <201308281940511854138@gmail.com>, <20131024125059.1a440152@notabene.brown> Reply-To: majianpeng Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Sender: linux-raid-owner@vger.kernel.org To: NeilBrown Cc: linux-raid List-Id: linux-raid.ids Pg0KPkhpLA0KPiBzb3JyeSBmb3IgdGhlIGV4Y2Vzc2l2ZSBkZWxheSBpbiByZXZpZXdpbmcgdGhl c2UuDQo+DQo+IEkndmUgYXBwbGllZCB0aGUgZmlyc3QgdGhyZWUsIHRob3VnaCBJIGZpeGVkIHNv bWUgY2FyZWxlc3Mgc3BlbGxpbmcgZXJyb3JzIGluDQo+IHRoZSBwYXRjaCBkZXNjcmlwdGlvbnMg YW5kIGZpeGVkIHVwIHNvbWUgb2YgdGhlIGdyYW1tYXIuDQo+DQo+IFRoaXMgb25lIGlzIGZhaXJs eSBnb29kIC0ganVzdCBhIGNvdXBsZSBvZiBmaXhlcyBuZWVkZWQuDQo+IEl0IGlzIGdvb2QgdGhh dCB5b3UgaGF2ZSBhIG5pY2UgZGV0YWlscyBwYXRjaCBkZXNjcmlwdGlvbiBhdCB0aGUgdG9wLCBi dXQgaXQNCj4gaXMgYSBiaXQgaGFyZCB0byByZWFkLiAgRml4aW5nIHRoZSBzcGVsbGluZyBhbmQg aW1wcm92aW5nIHRoZSBmb3JtYXR0aW5nDQo+IHdvdWxkIGhlbHAgYSBsb3QuLi4uDQo+DQo+IFNl ZSBiZWxvdyBmb3IgY29tbWVudHMgaW4gdGhlIGNvZGUuLi4uDQo+DQpbc25pcF0NCj4gICAuLi4N Cj4NCj4NCj4+ICAJd2FpdF9ldmVudF9sb2NrX2lycShjb25mLT53YWl0X2JhcnJpZXIsDQo+PiAg CQkJICAgICFjb25mLT5hcnJheV9mcm96ZW4gJiYgDQo+PiAtCQkJICAgICFjb25mLT5ucl9wZW5k aW5nICYmIGNvbmYtPmJhcnJpZXIgPCBSRVNZTkNfREVQVEgsDQo+PiArCQkJICAgICFjb25mLT5u cl9wZW5kaW5nICYmIGNvbmYtPmJhcnJpZXIgPCBSRVNZTkNfREVQVEggJiYNCj4+ICsJCQkgICAg KGNvbmYtPm5leHRfcmVzeW5jICsgUkVTWU5DX1NFQ1RPUlMNCj4+ICsJCQkJICAgIDw9IGNvbmYt PnN0YXJ0X25leHRfd2luZG93KSwNCj4NCj5JIHRoaW5rIGNvbmRpdGlvbnMgYXJlIG11Y2ggbW9y ZSByZWFkYWJsZSBpZiB0aGUgdGhpbmcgdGhhdCB5b3UgZXhwZWN0IHRvDQo+Y2hhbmdlIGNvbWVz IGZpcnN0Lg0KPkluIHRoaXMgY2FzZSB3ZSBtaWdodCBuZWVkIHRvIHdhaXQgdW50aWwgc3RhcnRf bmV4dF93aW5kb3cgaW5jcmVhc2VzLCBzbw0KPiAgICBjb25mLT5zdGFydF9uZXh0X3dpbmRvdyA+ PSBjb25mLT5uZXh0X3Jlc3luYyArIFJFU1lOQ19TRUNUT1JTDQo+DQo+YXMgaXQgaXMsIGl0IGxv b2tzIGxpa2UgeW91IGFyZSB3YWl0aW5nIGZvciBuZXh0X3Jlc3luYyB0byBkZWNyZWFzZS4NCj4N Cj4NCj4+ICAJCQkgICAgY29uZi0+cmVzeW5jX2xvY2spOw0KPj4gIA0KPj4gIAlzcGluX3VubG9j a19pcnEoJmNvbmYtPnJlc3luY19sb2NrKTsNCj4+IEBAIC04NDYsMTAgKzg2Myw0MyBAQCBzdGF0 aWMgdm9pZCBsb3dlcl9iYXJyaWVyKHN0cnVjdCByMWNvbmYgKmNvbmYpDQo+PiAgCXdha2VfdXAo JmNvbmYtPndhaXRfYmFycmllcik7DQo+PiAgfQ0KPj4gIA0KPj4gLXN0YXRpYyB2b2lkIHdhaXRf YmFycmllcihzdHJ1Y3QgcjFjb25mICpjb25mKQ0KPj4gK3N0YXRpYyBib29sIG5lZWRfdG9fd2Fp dF9mb3Jfc3luYyhzdHJ1Y3QgcjFjb25mICpjb25mLCBzdHJ1Y3QgYmlvICpiaW8pDQo+PiAgew0K Pj4gKwlib29sIHdhaXQgPSBmYWxzZTsNCj4+ICsNCj4+ICsJaWYgKGNvbmYtPmFycmF5X2Zyb3pl biB8fCAhYmlvKQ0KPj4gKwkJd2FpdCA9IHRydWU7DQo+PiArCWVsc2UgaWYgKGNvbmYtPmJhcnJp ZXIgJiYgYmlvX2RhdGFfZGlyKGJpbykgPT0gV1JJVEUpIHsNCj4+ICsJCWlmIChjb25mLT5uZXh0 X3Jlc3luYyA8IFJFU1lOQ19XSU5ET1dfU0VDVE9SUykNCj4+ICsJCQl3YWl0ID0gdHJ1ZTsNCj4+ ICsJCWVsc2UgaWYgKGNvbmYtPm5leHRfcmVzeW5jIC0gUkVTWU5DX1dJTkRPV19TRUNUT1JTID49 DQo+PiArCQkJCWJpb19lbmRfc2VjdG9yKGJpbykpDQo+PiArCQkJd2FpdCA9IGZhbHNlOw0KPj4g KwkJZWxzZSBpZiAoY29uZi0+bmV4dF9yZXN5bmMgKyBORVhUX05PUk1BTElPX0RJU1RBTkNFDQo+ PiArCQkJCTw9IGJpby0+Ymlfc2VjdG9yKSB7DQo+PiArCQkJaWYgKGNvbmYtPnN0YXJ0X25leHRf d2luZG93ID09IE1heFNlY3RvcikNCj4+ICsJCQkJY29uZi0+c3RhcnRfbmV4dF93aW5kb3cgPQ0K Pj4gKwkJCQkJY29uZi0+bmV4dF9yZXN5bmMgKw0KPj4gKwkJCQkJCU5FWFRfTk9STUFMSU9fRElT VEFOQ0U7DQo+PiArDQo+PiArCQkJaWYgKChjb25mLT5zdGFydF9uZXh0X3dpbmRvdyArIE5FWFRf Tk9STUFMSU9fRElTVEFOQ0UpDQo+PiArCQkJCTw9IGJpby0+Ymlfc2VjdG9yKQ0KPj4gKwkJCQlj b25mLT5uZXh0X3dpbmRvd19yZXF1ZXN0cysrOw0KPj4gKwkJCWVsc2UNCj4+ICsJCQkJY29uZi0+ Y3VycmVudF93aW5kb3dfcmVxdWVzdHMrKzsNCj4+ICsJCX0gZWxzZQ0KPj4gKwkJCXdhaXQgPSB0 cnVlOw0KPj4gKwl9DQo+PiArDQo+PiArCXJldHVybiB3YWl0Ow0KPj4gK30NCj4NCj5JIHJlYWxs eSBkb24ndCBsaWtlIGl0IHRoYXQgdGhpcyBmdW5jdGlvbiBjaGFuZ2VzIHN0YXJ0X25leHRfd2lu ZG93IGFuZA0KPipfd2luZG93X3JlcXVlc3RzKCkuDQo+SXQgbG9va3MgbGlrZSBpdCBpcyBhIHNp bXBsZSBmdW5jdGlvbiB0aGF0IHRlc3RzIGEgY29uZGl0aW9uLiAgQnV0IGl0DQo+YWN0dWFsbHkg aGFzIGEgc2lkZS1lZmZlY3QgYXMgd2VsbC4gIEFuZCBpdCBoYXMgdGhlIHNpZGUtZWZmZWN0IHdo ZW4gaXQNCj5yZXR1cm5zIGZhbHNlIHdoaWNoIGlzIGV4dHJhIGNvbmZ1c2luZy4NCj4NCj5BbHNv LCB5b3UgYXJlIGluY3JlbWVudGluZyAqX3dpbmRvd19yZXF1ZXN0cyBmb3IgUkVBRCByZXF1ZXN0 cywgd2hpY2ggeW91DQo+ZG9uJ3QgbmVlZCB0byBkby4NCj4NCkZvciB0aGlzLCBpIHRoaW5rIHRo ZSBwYXRjaCBoYWQgYSBlcnJvci4NCkluIGZ1bmMgcmFpc2VfYmFycmllcigpDQogIAl3YWl0X2V2 ZW50X2xvY2tfaXJxKGNvbmYtPndhaXRfYmFycmllciwNCiAgCQkJICAgICFjb25mLT5hcnJheV9m cm96ZW4gJiYgDQogLQkJCSAgICAhY29uZi0+bnJfcGVuZGluZyAmJiBjb25mLT5iYXJyaWVyIDwg UkVTWU5DX0RFUFRILA0KICsJCQkgICAgIWNvbmYtPm5yX3BlbmRpbmcgJiYgY29uZi0+YmFycmll ciA8IFJFU1lOQ19ERVBUSCAmJg0KICsJCQkgICAgKGNvbmYtPm5leHRfcmVzeW5jICsgUkVTWU5D X1NFQ1RPUlMNCiArCQkJCSAgICA8PSBjb25mLT5zdGFydF9uZXh0X3dpbmRvdyksDQpBY3R1YWx5 LCB3ZSBzaG91bGQgcmVtb3ZlIHRoZSBjb25kaXRvbiAhY29uZi0+bnJfcGVuZGluZy4gUmVzeW5j IGRvbid0IG5lZWQgIWNvbmYtPm5yX3BlbmRpbmcuDQpBbmQgZm9yIHJlYWQsIGkgZG9uJ3QgaW5j cmVhc2UgKl93aW5kb3dfcmVxdWVzdC4NCg0KW3NuaXBdDQoNCg0KQmVsb3cgaXMgbXkgbGF0ZXN0 IHBhdGNoLg0KDQpTdWJqZWN0OnJhaWQxOiBSZXdyaXRlIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBp b2JhcnJpZXIuDQoNCkZyb20gYzI0MTQyZmE0NjA1OTZjY2Y0NjE3NjVkYzc3NjYwZWRhYmQ3ZTBh NSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDENCkZyb206IEppYW5wZW5nIE1hIDxtYWppYW5wZW5n QGdtYWlsLmNvbT4NCkRhdGU6IE1vbiwgMjggT2N0IDIwMTMgMTk6MzQ6MzQgKzA4MDANClN1Ympl Y3Q6IFtQQVRDSF0gcmFpZDE6IFJld3JpdGUgdGhlIGltcGxlbWVudGF0aW9uIG9mIGlvYmFycmll cg0KDQpUaGVyZSBpcyBhIGlvYmFycmllciBpbiByYWlkMSBiZWNhdXNlIHRoZSBjb250ZW5kIGJl dHdlZW4gbm9ybWFsIElPIGFuZA0KcmVzeW5jIElPLkl0IHN1c3BlbmQgYWxsIG5vcm1hbCBJTyB3 aGVuIHJleXN5bmMuDQpCdXQgaWYgbm9ybWFsSU8gaXMgb3V0cmFuZ2UgdGhlIHJlc3luYyB3aW5k d29zLHRoZXJlIGlzIG5vIGNvbnRlbmQuDQpTbyBJIHJld3JpdGUgdGhlIGlvYmFycmllci4NCg0K SSBwYXRpdGlvbiB0aGUgd2hvbGUgc3BhY2UgaW50byBmaXZlIHBhcnRzLg0KfC0tLS0tLS0tLXwt LS0tLS0tLS0tLXwtLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tfA0KICAgICAg ICAgUGEgICAgbmV4dF9yZXN5bmMgICBzdGFydF9uZXh0X3dpbmRvdyAgICAgIFBiDQoNClBhICsg U1lOQ19XSU5ET1cgPSBuZXh0X3Jlc3luYw0KbmV4dF9yZXN5bmMgKyBORVhUX05PUk1BTElPX0RJ U1RBTkNFID0gc3RhcnRfbmV4dF93aW5kb3cNCnN0YXJ0X25leHRfd2luZG93ICsgTkVYVF9OT1JN QUlMSU9fRElTVEFOQ0UgPSBQYg0KDQpGaXJzdGx5IGkgaW50cm9kdWNlIHNvbWUgY29uY2VwdHM6 DQoxOlJFU1lOQ19XSU5ET1c6IEZvciByZXN5bmMsIHRoZXJlIGFyZSAzMiByZXN5bmMgcmVxdWVz dHMgYXQgbW9zdCBhdCB0aGUNCnNhbWUgdGltZS5BIHN5bmMgcmVxdWVzdCBpcyBSRVNZTkNfQkxP Q0tfU0laRSg2NCoxMDI0KS4NClNvIHRoZSBSRVNZTkNfV0lORE9XIGlzIDMyICogUkVTWU5DX0JM T0NLX1NJWkUsIHRoYXQgaXMgMk1CLg0KMjpORVhUX05PUk1BTElPX0RJU1RBTkNFOiBpdCBpbmRp Y2F0ZSB0aGUgZGlzdGFuY2UgYmV0d2VlbiBuZXh0X3Jlc3luYw0KYW5kIHN0YXJ0X25leHRfd2lu ZG93Lkl0IGFsc28gaW5kaWNhdGUgdGhlIGRpc3RhbmNlIGJldHdlZW4NCnN0YXJ0X25leHRfd2lu ZG93IGFuZCBQYi5Ob3cgaXQgaXMgMyAqIFJFU1lOQ19XSU5ET1dfU0laRS5JdCBjYW4gdHVuZS4N CjM6bmV4dF9yZXN5bmM6IG1lYW4gdGhlIG5leHQgc3RhcnQgc2VjdG9yIHdoaWNoIHdpbGwgYmVp bmcgZG8gc3luYy4NCjQ6UGEgbWVhbnM6IGEgcG9zaXRpb24gd2hpY2ggYmVmb3JlIFJFU1lOQ19X SU5ET1cgZGlzdGFuY2UgZnJvbQ0KbmV4dF9yZXN5bmMuDQo1OnN0YXJ0X25leHRfd2luZG93OiBt ZWFucyBhIHBvc2l0aW9uIHdoaWNoIGFmdGVyIE5FWFRfTk9STUFMSU9fRElTVEFOQ0UNCmRpc3Rh bmNlIGZyb20gbmV4dF9yZXN5bmMuRm9yIG5vcm1hbGlvIGFmdGVyIHRoaXMgcG9zaXRpb24sDQpp dCBjYW4ndCB3YWl0IHJlc3luY2lvIHRvIGNvbXBsZXRlLg0KNjpQYjogbWVhbnMgYSBwb3NpdGlv biB3aGljaCBhZnRlciAyICogTkVYVF9OT1JNQUxJT19ESVNUQU5DRSBkaXN0YW5jZQ0KZnJvbSBu ZXh0X3Jlc3luYy4NCjc6Y3VycmVudF93aW5kb3dfcmVxdWVzdHM6IG1lYW5zIHRoZSBjb3VudCBv ZiBub3JtYWxJTyBiZXR3ZWVuIFBiIGFuZA0Kc3RhcnRfbmV4dF93aW5kb3cuDQo4Om5leHRfd2lu ZG93X3JlcXVlc3RzOiBtZWFucyB0aGUgY291bnQgb2Ygbm9ubWFsSU8gYWZ0ZXIgUGIuDQoNCk5v cm1hbElPIHdpbGwgYmUgcGFydGl0aW9uZWQgaW50byBmb3VyIHR5cGVzOg0KTm9JTzE6IGl0IG1l YW5zIHRoZSBlbmQgc2VjdG9yIG9mIGJpbyBpcyBzbWFsbGVyIG9yIGVxdWFsIHRoZSBQYS4NCk5v SU8yOiBpdCBtZWFucyB0aGUgc3RhcnQgc2VjdG9yIG9mIGJpbyBsYXJnZXIgb3IgZXF1YWwgUGIN Ck5vSU8zOiBpdCBtZWFucyB0aGUgc3RhcnQgc2VjdG9yIG9mIGJpbyBsYXJnZXIgb3IgZXF1YWwN CnN0YXJ0X25leHRfd2luZG93Lg0KTm9JTzQ6IGl0IG1lYW5zIHRoZSBsb2NhdGlvbiBiZXR3ZWVu IFBhIGFuZCBzdGFydF9uZXh0X3dpbmRvdw0KDQp8LS0tLS0tLS18LS0tLS0tLS0tLS18LS0tLS0t LS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS18DQogICAgfCAgICBQYSAg IHwgICBuZXh0X3Jlc3luYyAgIHwgIHN0YXJ0X25leHRfd2luZG93ICAgfCAgIFBiICAgfA0KICBO b0lPMSAgICAgTm9JTzQgICAgICAgICAgICAgTm9JTzQJCSAgICAgTm9JTzMgICAgIE5vSU8yDQoN CkZvciBOb0lPMSxpdCBkb24ndCB1c2UgaW9iYXJyaWVyLg0KRm9yIE5vSU80LGl0IHVzZWQgdGhl IG9yaWdpbmFsIGlvYmFycmllciBtZWNoYW5pc20uVGhlIG5vcm5hbElPIGFuZA0KcmVzeW5jSU8g bXVzdCBiZSBjb250ZW5kLg0KRm9yIE5vSU8yLzMsIGkgYWRkIHR3byBmaWVsZHMgaW4gc3RydWN0 IHIxY29uZiAiY3VycmVudF93aW5kb3dfcmVxdWVzdHMsDQpuZXh0X3dpbmRvd19yZXF1ZXN0cyIu VGhleSBpbmRpY2F0ZSB0aGUgY291bnQgb2YgdHdvIHR5cGVzLg0KRm9yIHRob3NlLCB0aGV5IGRv bid0IHdhaXQgcmVzeW5jIGlvIHRvIGNvbXBsZXRlLg0KDQpGb3IgcmVzeW5jIGFjdGlvbiwgaWYg dGhlcmUgYXJlIE5vSU80cywgaXQgbXVzdCBiZSB3YWl0ZWQuSWYgbm90LGl0DQpmb3J3YXJkLkJ1 dCBpZiBzeW5jIGFjdGlvbiByZWFjaGVkIHRvIHRoZSBzdGFydF9uZXh0X3dpbmRvdyBhbmQNCmN1 cnJlbnRfd2luZG93X3JlcXVlc3RlcyA+IDAgKHRoYXQgaXMgdGhlcmUgYXJlIE5vSU8zcyksaXQg bXVzdA0Kd2FpdCB1bnRpbCB0aGUgY3VycmVudF93aW5kb3dfcmVxdWVzdHMgYmVjYW1lIHplcm8u DQpJZiBjdXJyZW50X3dpbmRvd19yZXF1ZXN0cyBiZWNhbWUgemVybyx0aGUgc3RhcnRfbmV4dF93 aW5kb3cgYWxzbw0KZm9yd2FyZC4gVGhlIGN1cnJlbnRfd2luZG93X3JlcXVlc3RzIHdpbGwgcmVw bGFjZWQgYnkgbmV4dF93aW5kb3dfcmVxdWVzdHMuDQoNClRoZXJlIGlzIGEgcHJvYmxlbSB3aGlj aCB3aGVuIGFuZCBob3cgdG8gY2hhbmdlIGZyb20gTm9JTzIgdG8gTm9JTzMuT25seQ0Kc28sIHRo ZSBzeW5jIGFjdGlvbiBjYW4gZm9yd2FyZC4NCg0KSSBhZGQgYSBmaWVsZCBpbiBzdHJ1Y3QgcjFj b25mICJzdGFydF9uZXh0X3dpbmRvdyIuV2hhdCBjb25kaXRpb24gd2lsbA0KY2hhbmdlPw0KQTog aWYgc3RhcnRfbmV4dF93aW5kb3cgPT0gTWF4U2VjdG9yLCBpdCBtZWFucyB0aGVyZSBhcmUgbm8g Tm9JTzIvMy4NCiAgIFNvIHN0YXJ0X25leHRfd2luZG93ID0gbmV4dF9yZXN5bmMgKyBORVhUX05P Uk1BTElPX0RJU1RBTkNFDQpCOiBpZiBjdXJyZW50X3dpbmRvd19yZXF1ZXN0cyA9PSAwICYmIG5l eHRfd2luZG93X3JlcXVlc3RzICE9IDAsIGl0DQogICBtZWFucyBzdGFydF9uZXh0X3dpbmRvdyBt b3ZlIHRvIFBiDQoNClRoZXJlIGlzIGFudGhvciBwcm9ibGVtIHdoaWNoIGhvdyB0byBkaWZmZXJl bnRpYXRlIGJldHdlZW4NCm9sZCBOb0lPMihub3cgaXQgaXMgTm9JTzMpIGFuZCBOb0lPMi4NCkZv ciBleGFtcGxlLCB0aGVyZSBhcmUgbWFueSBiaW9zIHdoaWNoIGFyZSBOb0lPMiBhbmQgYSBiaW8g d2hpY2ggaXMNCk5vSU8zLiBOb0lPMyBmaXJzdGx5IGNvbXBsZXRlZCxzbyB0aGUgYmlvcyBvZiBO b0lPMiBiZWNhbWUgTm9JTzMuDQpBdCBnZW5lcmFsLHdlIHVzZSBmbGFncyBhbmQgbGlzdF9oZWFk LiBUaGUgY29kZXMgc2hvdWxkOg0KPmxpc3Rfc3BsaWNlX2luaXQoTm9JTzIsIE5vSU8zKTsNCj5j dXJyZW50X3dpbmRvd19yZXF1ZXN0cyA9IG5leHRfd2luZG93X3JlcXVlc3RzOw0KPm5leHRfd2lu ZG93X3JlcXVlc3RzID0gMDsNCj5saXN0X2Zvcl9lYWNoX2VudHJ5KE5vSU8zKXsNCj4gICAgICAg Y2xlYXJfYml0KE5vSU8yX0ZMQUcpLA0KPiAgICAgICBzZXRfYml0KE5vSU8zX0ZMQUcsDQo+fQ0K SWYgdGhlcmUgYXJlIG1hbnkgTm9JTzIsIGl0IHdpbGwgdGFrZSB0b28gbXVjaCB0aW1lIGluIGxp c3RfZm9yX2VhY2hfZW50cnkuDQpBdm9pZCB0aGlzLCBpIGFkZCBhIGZpZWxkIGluIHN0cnVjdCBy MWJpbyAic3RhcnRfbmV4dF93aW5kb3ciLg0KSSB1c2VkIHRoaXMgdG8gcmVjb3JkIHRoZSBwb3Np dGlvbiBjb25mLT5zdGFydF9uZXh0X3dpbmRvdyB3aGVuIGNhbGwNCndhaXRfYmFycmllciBpbiBm dW5jIG1ha2VfcmVxdWVzdC4NCg0KSW4gZnVuYyBhbGxvd19iYXJyaWVyLCBpdCBjaGVjayB0aGUg Y29uZi0+c3RhcnRfbmV4dF93aW5kb3cuDQpJZiByMWJpby0+c3RhdF9uZXh0X3dpbmRvdyA9PSBj b25mLT5zdGFydF9uZXh0X3dpbmRvdyxpdCBtZWFuDQp0aGVyZSBpcyBubyB0cmFuc2l0aW9uIGJl dHdlZW4gTm9JTzIgYW5kIE5vSU8zLg0KSWYgcjFiaW8tPnN0YXJ0X25leHRfd2luZG93ICE9IGNv bmYtPnN0YXJ0X25leHRfd2luZG93LGl0IG1lYW4NCnRoZXJlIGlzIGEgdHJuYXNpdG9uIGJldHdl ZW4gTm9JTzIgYW5kIE5vSU8zLkJlY2F1c2UgdGhlcmUgaXMgYXQgbW9zdCBvbmUNCnRyYW5zdGlv bi5TbyBpdCBvbmx5IG1lYW5zIHRoZSBiaW8gaXMgb2xkIE5vSU8yLg0KDQpGb3Igb25lIGJpbyx0 aGVyZSBhcmUgbWFueSByMWJpbydzLlNvIHdlIG1ha2Ugc3VyZSB0aGUNCmFsbCByMWJpby0+c3Rh cnRfbmV4dF93aW5kb3cgYXJlIHRoZSBzYW1lIHZhbHVlLg0KSWYgd2UgbWV0IGJsb2NrZWRfZGV2 IGluIG1ha2VfcmVxdWVzdCgpLCBpdCBtdXN0IGNhbGwgYWxsb3dfYmFycmllcg0KYW5kIHdhaXRf YmFycmllci5TbyB0aGUgZm9ybWVyIGFuZCB0aGUgbGF0ZXIgdmFsdWUgb2YNCmNvbmYtPnN0YXJ0 X25leHRfd2luZG93IHdpbGwgYmUgY2hhbmdlLg0KSWYgdGhlcmUgYXJlIG1hbnkgcjFiaW8ncyB3 aXRoIGRpZmZlcm5ldCBzdGFydF9uZXh0X3dpbmRvdywNCmZvciB0aGUgcmVsZXZhbnQgYmlvLCBp dCBkZXBlbnQgb24gdGhlIGxhc3QgdmFsdWUgb2YgcjFiaW8uDQpJdCB3aWxsIGNhdXNlIGVycm9y LlRvIGF2b2lkIHRoaXMsIHdlIG11c3Qgd2FpdCBwcmV2aW91cyByMWJpb3MNCnRvIGNvbXBsZXRl Lg0KDQpTaWduZWQtb2ZmLWJ5OiBKaWFucGVuZyBNYSA8bWFqaWFucGVuZ0BnbWFpbC5jb20+DQot LS0NCiBkcml2ZXJzL21kL3JhaWQxLmMgfCAxMjIgKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKystLS0tLS0NCiBkcml2ZXJzL21kL3JhaWQxLmggfCAgMTQgKysr KysrDQogMiBmaWxlcyBjaGFuZ2VkLCAxMjQgaW5zZXJ0aW9ucygrKSwgMTIgZGVsZXRpb25zKC0p DQoNCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQxLmMgYi9kcml2ZXJzL21kL3JhaWQxLmMN CmluZGV4IGI0YTZkY2QuLjViMzExYzAgMTAwNjQ0DQotLS0gYS9kcml2ZXJzL21kL3JhaWQxLmMN CisrKyBiL2RyaXZlcnMvbWQvcmFpZDEuYw0KQEAgLTY2LDcgKzY2LDggQEANCiAgKi8NCiBzdGF0 aWMgaW50IG1heF9xdWV1ZWRfcmVxdWVzdHMgPSAxMDI0Ow0KIA0KLXN0YXRpYyB2b2lkIGFsbG93 X2JhcnJpZXIoc3RydWN0IHIxY29uZiAqY29uZik7DQorc3RhdGljIHZvaWQgYWxsb3dfYmFycmll cihzdHJ1Y3QgcjFjb25mICpjb25mLCBzZWN0b3JfdCBzdGFydF9uZXh0X3dpbmRvdywNCisJCQkJ c2VjdG9yX3QgYmlfc2VjdG9yKTsNCiBzdGF0aWMgdm9pZCBsb3dlcl9iYXJyaWVyKHN0cnVjdCBy MWNvbmYgKmNvbmYpOw0KIA0KIHN0YXRpYyB2b2lkICogcjFiaW9fcG9vbF9hbGxvYyhnZnBfdCBn ZnBfZmxhZ3MsIHZvaWQgKmRhdGEpDQpAQCAtMjI3LDYgKzIyOCw4IEBAIHN0YXRpYyB2b2lkIGNh bGxfYmlvX2VuZGlvKHN0cnVjdCByMWJpbyAqcjFfYmlvKQ0KIAlzdHJ1Y3QgYmlvICpiaW8gPSBy MV9iaW8tPm1hc3Rlcl9iaW87DQogCWludCBkb25lOw0KIAlzdHJ1Y3QgcjFjb25mICpjb25mID0g cjFfYmlvLT5tZGRldi0+cHJpdmF0ZTsNCisJc2VjdG9yX3Qgc3RhcnRfbmV4dF93aW5kb3cgPSBy MV9iaW8tPnN0YXJ0X25leHRfd2luZG93Ow0KKwlzZWN0b3JfdCBiaV9zZWN0b3IgPSBiaW8tPmJp X3NlY3RvcjsNCiANCiAJaWYgKGJpby0+YmlfcGh5c19zZWdtZW50cykgew0KIAkJdW5zaWduZWQg bG9uZyBmbGFnczsNCkBAIC0yMzQsNiArMjM3LDExIEBAIHN0YXRpYyB2b2lkIGNhbGxfYmlvX2Vu ZGlvKHN0cnVjdCByMWJpbyAqcjFfYmlvKQ0KIAkJYmlvLT5iaV9waHlzX3NlZ21lbnRzLS07DQog CQlkb25lID0gKGJpby0+YmlfcGh5c19zZWdtZW50cyA9PSAwKTsNCiAJCXNwaW5fdW5sb2NrX2ly cXJlc3RvcmUoJmNvbmYtPmRldmljZV9sb2NrLCBmbGFncyk7DQorCQkvKg0KKwkJICogbWFrZV9y ZXF1ZXN0KCkgbWlnaHQgYmUgd2FpdGluZyBmb3INCisJCSAqIGJpX3BoeXNfc2VnbWVudHMgdG8g ZGVjcmVhc2UNCisJCSAqLw0KKwkJd2FrZV91cCgmY29uZi0+d2FpdF9iYXJyaWVyKTsNCiAJfSBl bHNlDQogCQlkb25lID0gMTsNCiANCkBAIC0yNDUsNyArMjUzLDcgQEAgc3RhdGljIHZvaWQgY2Fs bF9iaW9fZW5kaW8oc3RydWN0IHIxYmlvICpyMV9iaW8pDQogCQkgKiBXYWtlIHVwIGFueSBwb3Nz aWJsZSByZXN5bmMgdGhyZWFkIHRoYXQgd2FpdHMgZm9yIHRoZSBkZXZpY2UNCiAJCSAqIHRvIGdv IGlkbGUuDQogCQkgKi8NCi0JCWFsbG93X2JhcnJpZXIoY29uZik7DQorCQlhbGxvd19iYXJyaWVy KGNvbmYsIHN0YXJ0X25leHRfd2luZG93LCBiaV9zZWN0b3IpOw0KIAl9DQogfQ0KIA0KQEAgLTgy NywxMCArODM1LDE4IEBAIHN0YXRpYyB2b2lkIHJhaXNlX2JhcnJpZXIoc3RydWN0IHIxY29uZiAq Y29uZikNCiAJLyogYmxvY2sgYW55IG5ldyBJTyBmcm9tIHN0YXJ0aW5nICovDQogCWNvbmYtPmJh cnJpZXIrKzsNCiANCi0JLyogTm93IHdhaXQgZm9yIGFsbCBwZW5kaW5nIElPIHRvIGNvbXBsZXRl ICovDQorCS8qIEZvciB0aG9zZSBjb25kaXRpb25zIHdlIG11c3Qgd2FpdDoNCisJICogQTp3aGls ZSB0aGUgYXJyYXkgaXMgaW4gZnJvemVuIHN0YXRlDQorCSAqIEI6d2hpbGUgYmFycmllciA+PSBS RVNZTkNfREVQVEgsIG1lYW5pbmcgcmVzeW5jIHJlYWNoDQorCSAqICAgdGhlIG1heCBjb3VudCB3 aGljaCBhbGxvd2VkLg0KKwkgKiBDOm5leHRfcmVzeW5jICsgUkVTWU5DX1NFQ1RPUlMgPiBzdGFy dF9uZXh0X3dpbmRvdywgbWVhbmluZw0KKwkgKiAgIG5leHQgcmVzeW5jIHdpbGwgcmVhY2ggdG8g d2luZG93IHdoaWNoIG5vcm1hbCBiaW9zIGFyZSBoYW5kbGluZy4NCisJICovDQogCXdhaXRfZXZl bnRfbG9ja19pcnEoY29uZi0+d2FpdF9iYXJyaWVyLA0KIAkJCSAgICAhY29uZi0+YXJyYXlfZnJv emVuICYmDQotCQkJICAgICFjb25mLT5ucl9wZW5kaW5nICYmIGNvbmYtPmJhcnJpZXIgPCBSRVNZ TkNfREVQVEgsDQorCQkJICAgIGNvbmYtPmJhcnJpZXIgPCBSRVNZTkNfREVQVEggJiYNCisJCQkg ICAgKGNvbmYtPnN0YXJ0X25leHRfd2luZG93ID49DQorCQkJICAgICBjb25mLT5uZXh0X3Jlc3lu YyArIFJFU1lOQ19TRUNUT1JTKSwNCiAJCQkgICAgY29uZi0+cmVzeW5jX2xvY2spOw0KIA0KIAlz cGluX3VubG9ja19pcnEoJmNvbmYtPnJlc3luY19sb2NrKTsNCkBAIC04NDYsMTAgKzg2MiwzMyBA QCBzdGF0aWMgdm9pZCBsb3dlcl9iYXJyaWVyKHN0cnVjdCByMWNvbmYgKmNvbmYpDQogCXdha2Vf dXAoJmNvbmYtPndhaXRfYmFycmllcik7DQogfQ0KIA0KLXN0YXRpYyB2b2lkIHdhaXRfYmFycmll cihzdHJ1Y3QgcjFjb25mICpjb25mKQ0KK3N0YXRpYyBib29sIG5lZWRfdG9fd2FpdF9mb3Jfc3lu YyhzdHJ1Y3QgcjFjb25mICpjb25mLCBzdHJ1Y3QgYmlvICpiaW8pDQorew0KKwlib29sIHdhaXQg PSBmYWxzZTsNCisNCisJaWYgKGNvbmYtPmFycmF5X2Zyb3plbiB8fCAhYmlvKQ0KKwkJd2FpdCA9 IHRydWU7DQorCWVsc2UgaWYgKGNvbmYtPmJhcnJpZXIgJiYgYmlvX2RhdGFfZGlyKGJpbykgPT0g V1JJVEUpIHsNCisJCWlmIChjb25mLT5uZXh0X3Jlc3luYyA8IFJFU1lOQ19XSU5ET1dfU0VDVE9S UykNCisJCQl3YWl0ID0gdHJ1ZTsNCisJCWVsc2UgaWYgKChjb25mLT5uZXh0X3Jlc3luYyAtIFJF U1lOQ19XSU5ET1dfU0VDVE9SUw0KKwkJCQk+PSBiaW9fZW5kX3NlY3RvcihiaW8pKSB8fA0KKwkJ CSAoY29uZi0+bmV4dF9yZXN5bmMgKyBORVhUX05PUk1BTElPX0RJU1RBTkNFDQorCQkJCTw9IGJp by0+Ymlfc2VjdG9yKSkNCisJCQl3YWl0ID0gZmFsc2U7DQorCQllbHNlDQorCQkJd2FpdCA9IHRy dWU7DQorCX0NCisNCisJcmV0dXJuIHdhaXQ7DQorfQ0KKw0KK3N0YXRpYyBzZWN0b3JfdCB3YWl0 X2JhcnJpZXIoc3RydWN0IHIxY29uZiAqY29uZiwgc3RydWN0IGJpbyAqYmlvKQ0KIHsNCisJc2Vj dG9yX3Qgc2VjdG9yID0gMDsNCisNCiAJc3Bpbl9sb2NrX2lycSgmY29uZi0+cmVzeW5jX2xvY2sp Ow0KLQlpZiAoY29uZi0+YmFycmllcikgew0KKwlpZiAobmVlZF90b193YWl0X2Zvcl9zeW5jKGNv bmYsIGJpbykpIHsNCiAJCWNvbmYtPm5yX3dhaXRpbmcrKzsNCiAJCS8qIFdhaXQgZm9yIHRoZSBi YXJyaWVyIHRvIGRyb3AuDQogCQkgKiBIb3dldmVyIGlmIHRoZXJlIGFyZSBhbHJlYWR5IHBlbmRp bmcNCkBAIC04NjgsMTYgKzkwNyw1NyBAQCBzdGF0aWMgdm9pZCB3YWl0X2JhcnJpZXIoc3RydWN0 IHIxY29uZiAqY29uZikNCiAJCQkJICAgICAhYmlvX2xpc3RfZW1wdHkoY3VycmVudC0+YmlvX2xp c3QpKSksDQogCQkJCSAgICBjb25mLT5yZXN5bmNfbG9jayk7DQogCQljb25mLT5ucl93YWl0aW5n LS07DQorCX0gZWxzZSBpZiAoYmlvX2RhdGFfZGlyKGJpbykgPT0gV1JJVEUpIHsNCisJCWlmIChj b25mLT5uZXh0X3Jlc3luYyArIE5FWFRfTk9STUFMSU9fRElTVEFOQ0UNCisJCQkJPD0gYmlvLT5i aV9zZWN0b3IpIHsNCisJCQlpZiAoY29uZi0+c3RhcnRfbmV4dF93aW5kb3cgPT0gTWF4U2VjdG9y KQ0KKwkJCQljb25mLT5zdGFydF9uZXh0X3dpbmRvdyA9DQorCQkJCQljb25mLT5uZXh0X3Jlc3lu YyArDQorCQkJCQkJTkVYVF9OT1JNQUxJT19ESVNUQU5DRTsNCisNCisJCQlpZiAoKGNvbmYtPnN0 YXJ0X25leHRfd2luZG93ICsgTkVYVF9OT1JNQUxJT19ESVNUQU5DRSkNCisJCQkJPD0gYmlvLT5i aV9zZWN0b3IpDQorCQkJCWNvbmYtPm5leHRfd2luZG93X3JlcXVlc3RzKys7DQorCQkJZWxzZQ0K KwkJCQljb25mLT5jdXJyZW50X3dpbmRvd19yZXF1ZXN0cysrOw0KKwkJfQ0KKwkJaWYgKGJpby0+ Ymlfc2VjdG9yID49IGNvbmYtPnN0YXJ0X25leHRfd2luZG93KQ0KKwkJCXNlY3RvciA9IGNvbmYt PnN0YXJ0X25leHRfd2luZG93Ow0KIAl9DQorDQogCWNvbmYtPm5yX3BlbmRpbmcrKzsNCiAJc3Bp bl91bmxvY2tfaXJxKCZjb25mLT5yZXN5bmNfbG9jayk7DQorCXJldHVybiBzZWN0b3I7DQogfQ0K IA0KLXN0YXRpYyB2b2lkIGFsbG93X2JhcnJpZXIoc3RydWN0IHIxY29uZiAqY29uZikNCitzdGF0 aWMgdm9pZCBhbGxvd19iYXJyaWVyKHN0cnVjdCByMWNvbmYgKmNvbmYsIHNlY3Rvcl90IHN0YXJ0 X25leHRfd2luZG93LA0KKwkJCQlzZWN0b3JfdCBiaV9zZWN0b3IpDQogew0KIAl1bnNpZ25lZCBs b25nIGZsYWdzOw0KKw0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmY29uZi0+cmVzeW5jX2xvY2ssIGZs YWdzKTsNCiAJY29uZi0+bnJfcGVuZGluZy0tOw0KKwlpZiAoc3RhcnRfbmV4dF93aW5kb3cpIHsN CisJCWlmIChzdGFydF9uZXh0X3dpbmRvdyA9PSBjb25mLT5zdGFydF9uZXh0X3dpbmRvdykgew0K KwkJCWlmIChjb25mLT5zdGFydF9uZXh0X3dpbmRvdyArIE5FWFRfTk9STUFMSU9fRElTVEFOQ0UN CisJCQkJPD0gYmlfc2VjdG9yKQ0KKwkJCQljb25mLT5uZXh0X3dpbmRvd19yZXF1ZXN0cy0tOw0K KwkJCWVsc2UNCisJCQkJY29uZi0+Y3VycmVudF93aW5kb3dfcmVxdWVzdHMtLTsNCisJCX0gZWxz ZQ0KKwkJCWNvbmYtPmN1cnJlbnRfd2luZG93X3JlcXVlc3RzLS07DQorDQorCQlpZiAoIWNvbmYt PmN1cnJlbnRfd2luZG93X3JlcXVlc3RzKSB7DQorCQkJaWYgKGNvbmYtPm5leHRfd2luZG93X3Jl cXVlc3RzKSB7DQorCQkJCWNvbmYtPmN1cnJlbnRfd2luZG93X3JlcXVlc3RzID0NCisJCQkJCWNv bmYtPm5leHRfd2luZG93X3JlcXVlc3RzOw0KKwkJCQljb25mLT5uZXh0X3dpbmRvd19yZXF1ZXN0 cyA9IDA7DQorCQkJCWNvbmYtPnN0YXJ0X25leHRfd2luZG93ICs9DQorCQkJCQlORVhUX05PUk1B TElPX0RJU1RBTkNFOw0KKwkJCX0gZWxzZQ0KKwkJCQljb25mLT5zdGFydF9uZXh0X3dpbmRvdyA9 IE1heFNlY3RvcjsNCisJCX0NCisJfQ0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb25mLT5y ZXN5bmNfbG9jaywgZmxhZ3MpOw0KIAl3YWtlX3VwKCZjb25mLT53YWl0X2JhcnJpZXIpOw0KIH0N CkBAIC0xMDEyLDYgKzEwOTIsNyBAQCBzdGF0aWMgdm9pZCBtYWtlX3JlcXVlc3Qoc3RydWN0IG1k ZGV2ICptZGRldiwgc3RydWN0IGJpbyAqIGJpbykNCiAJaW50IGZpcnN0X2Nsb25lOw0KIAlpbnQg c2VjdG9yc19oYW5kbGVkOw0KIAlpbnQgbWF4X3NlY3RvcnM7DQorCXNlY3Rvcl90IHN0YXJ0X25l eHRfd2luZG93Ow0KIA0KIAkvKg0KIAkgKiBSZWdpc3RlciB0aGUgbmV3IHJlcXVlc3QgYW5kIHdh aXQgaWYgdGhlIHJlY29uc3RydWN0aW9uDQpAQCAtMTA0MSw3ICsxMTIyLDcgQEAgc3RhdGljIHZv aWQgbWFrZV9yZXF1ZXN0KHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBiaW8gKiBiaW8pDQog CQlmaW5pc2hfd2FpdCgmY29uZi0+d2FpdF9iYXJyaWVyLCAmdyk7DQogCX0NCiANCi0Jd2FpdF9i YXJyaWVyKGNvbmYpOw0KKwlzdGFydF9uZXh0X3dpbmRvdyA9IHdhaXRfYmFycmllcihjb25mLCBi aW8pOw0KIA0KIAliaXRtYXAgPSBtZGRldi0+Yml0bWFwOw0KIA0KQEAgLTExNjIsNiArMTI0Myw3 IEBAIHJlYWRfYWdhaW46DQogDQogCWRpc2tzID0gY29uZi0+cmFpZF9kaXNrcyAqIDI7DQogIHJl dHJ5X3dyaXRlOg0KKwlyMV9iaW8tPnN0YXJ0X25leHRfd2luZG93ID0gc3RhcnRfbmV4dF93aW5k b3c7DQogCWJsb2NrZWRfcmRldiA9IE5VTEw7DQogCXJjdV9yZWFkX2xvY2soKTsNCiAJbWF4X3Nl Y3RvcnMgPSByMV9iaW8tPnNlY3RvcnM7DQpAQCAtMTIzMCwxNCArMTMxMiwyNCBAQCByZWFkX2Fn YWluOg0KIAlpZiAodW5saWtlbHkoYmxvY2tlZF9yZGV2KSkgew0KIAkJLyogV2FpdCBmb3IgdGhp cyBkZXZpY2UgdG8gYmVjb21lIHVuYmxvY2tlZCAqLw0KIAkJaW50IGo7DQorCQlzZWN0b3JfdCBv bGQgPSBzdGFydF9uZXh0X3dpbmRvdzsNCiANCiAJCWZvciAoaiA9IDA7IGogPCBpOyBqKyspDQog CQkJaWYgKHIxX2Jpby0+Ymlvc1tqXSkNCiAJCQkJcmRldl9kZWNfcGVuZGluZyhjb25mLT5taXJy b3JzW2pdLnJkZXYsIG1kZGV2KTsNCiAJCXIxX2Jpby0+c3RhdGUgPSAwOw0KLQkJYWxsb3dfYmFy cmllcihjb25mKTsNCisJCWFsbG93X2JhcnJpZXIoY29uZiwgc3RhcnRfbmV4dF93aW5kb3csIGJp by0+Ymlfc2VjdG9yKTsNCiAJCW1kX3dhaXRfZm9yX2Jsb2NrZWRfcmRldihibG9ja2VkX3JkZXYs IG1kZGV2KTsNCi0JCXdhaXRfYmFycmllcihjb25mKTsNCisJCXN0YXJ0X25leHRfd2luZG93ID0g d2FpdF9iYXJyaWVyKGNvbmYsIGJpbyk7DQorCQkvKg0KKwkJICogV2UgbXVzdCBtYWtlIHN1cmUg dGhlIG11bHRpIHIxYmlvcyBvZiBiaW8gaGF2ZQ0KKwkJICogdGhlIHNhbWUgdmFsdWUgb2YgYmlf cGh5c19zZWdtZW50cw0KKwkJICovDQorCQlpZiAoYmlvLT5iaV9waHlzX3NlZ21lbnRzICYmIG9s ZCAmJg0KKwkJCW9sZCAhPSBzdGFydF9uZXh0X3dpbmRvdykNCisJCQkvKndhaXQgdGhlIGZvcm1l ciByMWJpbyhzKSBjb21wbGV0ZWQqLw0KKwkJCXdhaXRfZXZlbnQoY29uZi0+d2FpdF9iYXJyaWVy LA0KKwkJCQkJYmlvLT5iaV9waHlzX3NlZ21lbnRzID09IDEpOw0KIAkJZ290byByZXRyeV93cml0 ZTsNCiAJfQ0KIA0KQEAgLTE0MzcsMTEgKzE1MjksMTQgQEAgc3RhdGljIHZvaWQgcHJpbnRfY29u ZihzdHJ1Y3QgcjFjb25mICpjb25mKQ0KIA0KIHN0YXRpYyB2b2lkIGNsb3NlX3N5bmMoc3RydWN0 IHIxY29uZiAqY29uZikNCiB7DQotCXdhaXRfYmFycmllcihjb25mKTsNCi0JYWxsb3dfYmFycmll cihjb25mKTsNCisJd2FpdF9iYXJyaWVyKGNvbmYsIE5VTEwpOw0KKwlhbGxvd19iYXJyaWVyKGNv bmYsIDAsIDApOw0KIA0KIAltZW1wb29sX2Rlc3Ryb3koY29uZi0+cjFidWZfcG9vbCk7DQogCWNv bmYtPnIxYnVmX3Bvb2wgPSBOVUxMOw0KKw0KKwljb25mLT5uZXh0X3Jlc3luYyA9IDA7DQorCWNv bmYtPnN0YXJ0X25leHRfd2luZG93ID0gTWF4U2VjdG9yOw0KIH0NCiANCiBzdGF0aWMgaW50IHJh aWQxX3NwYXJlX2FjdGl2ZShzdHJ1Y3QgbWRkZXYgKm1kZGV2KQ0KQEAgLTI3MTMsNiArMjgwOCw5 IEBAIHN0YXRpYyBzdHJ1Y3QgcjFjb25mICpzZXR1cF9jb25mKHN0cnVjdCBtZGRldiAqbWRkZXYp DQogCWNvbmYtPnBlbmRpbmdfY291bnQgPSAwOw0KIAljb25mLT5yZWNvdmVyeV9kaXNhYmxlZCA9 IG1kZGV2LT5yZWNvdmVyeV9kaXNhYmxlZCAtIDE7DQogDQorCWNvbmYtPnN0YXJ0X25leHRfd2lu ZG93ID0gTWF4U2VjdG9yOw0KKwljb25mLT5jdXJyZW50X3dpbmRvd19yZXF1ZXN0cyA9IGNvbmYt Pm5leHRfd2luZG93X3JlcXVlc3RzID0gMDsNCisNCiAJZXJyID0gLUVJTzsNCiAJZm9yIChpID0g MDsgaSA8IGNvbmYtPnJhaWRfZGlza3MgKiAyOyBpKyspIHsNCiANCmRpZmYgLS1naXQgYS9kcml2 ZXJzL21kL3JhaWQxLmggYi9kcml2ZXJzL21kL3JhaWQxLmgNCmluZGV4IDMzMWE5OGEuLjA3NDI1 YTEgMTAwNjQ0DQotLS0gYS9kcml2ZXJzL21kL3JhaWQxLmgNCisrKyBiL2RyaXZlcnMvbWQvcmFp ZDEuaA0KQEAgLTQxLDYgKzQxLDE5IEBAIHN0cnVjdCByMWNvbmYgew0KIAkgKi8NCiAJc2VjdG9y X3QJCW5leHRfcmVzeW5jOw0KIA0KKwkvKndoZW4gcmFpZDEgc3RhcnQgcmVzeW5jLHdlIGRpdmlk ZSByYWlkIGludG8gZm91ciBwYXJ0aXRpb25zDQorCSAqIHwtLS0tLS0tLS18LS0tLS0tLS0tLS0t LS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS18DQorCSAqICAgICAgICBuZXh0 X3Jlc3luYyAgIHN0YXJ0X25leHRfd2luZG93ICAgICAgICBQYw0KKwkgKiBOb3cgc3RhcnRfbmV4 dF93aW5kb3cgPSBuZXh0X3Jlc3luYyArIE5FWFRfTk9STUFMSU9fRElTVEFOQ0UNCisJICogUGMg PSBzdGFydF9uZXh0X3dpbmRvdyArIE5FWFRfTk9STUFMSU9fRElTVEFOQ0UNCisJICogY3VycmVu dF93aW5kb3dfcmVxdWVzdHMgbWVhbnMgdGhlIGNvdW50IG9mIG5vcm1hbElPIGJldHdlZW4NCisJ ICogc3RhcnRfbmV4dF93aW5kb3cgYW5kIFBjLg0KKwkgKiBuZXh0X3dpbmRvd19yZXF1ZXN0cyBt ZWFucyB0aGUgY291bnQgb2Ygbm9ybmFsSU8gYWZ0ZXIgUGMuDQorCSAqICovDQorCXNlY3Rvcl90 CQlzdGFydF9uZXh0X3dpbmRvdzsNCisJaW50CQkJY3VycmVudF93aW5kb3dfcmVxdWVzdHM7DQor CWludAkJCW5leHRfd2luZG93X3JlcXVlc3RzOw0KKw0KIAlzcGlubG9ja190CQlkZXZpY2VfbG9j azsNCiANCiAJLyogbGlzdCBvZiAnc3RydWN0IHIxYmlvJyB0aGF0IG5lZWQgdG8gYmUgcHJvY2Vz c2VkIGJ5IHJhaWQxZCwNCkBAIC0xMTIsNiArMTI1LDcgQEAgc3RydWN0IHIxYmlvIHsNCiAJCQkJ CQkgKiBpbiB0aGlzIEJlaGluZElPIHJlcXVlc3QNCiAJCQkJCQkgKi8NCiAJc2VjdG9yX3QJCXNl Y3RvcjsNCisJc2VjdG9yX3QJCXN0YXJ0X25leHRfd2luZG93Ow0KIAlpbnQJCQlzZWN0b3JzOw0K IAl1bnNpZ25lZCBsb25nCQlzdGF0ZTsNCiAJc3RydWN0IG1kZGV2CQkqbWRkZXY7DQotLSANCjEu OC40DQo=