From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chao Gao Subject: Re: [PATCH v3 1/2] xen/pt: fix some pass-thru devices don't work across reboot Date: Thu, 20 Dec 2018 22:20:53 +0800 Message-ID: <20181220142051.GA21974@gao-cwp> References: <1545144218-6463-1-git-send-email-chao.gao@intel.com> <20181219085751.ljboh5qqzaqh6etb@mac> <20181220024627.GA10247@gao-cwp> <20181220092914.civo25c7zsvqdtk5@mac.citrite.net> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1gZz8T-0000oV-Qn for xen-devel@lists.xenproject.org; Thu, 20 Dec 2018 14:17:13 +0000 Content-Disposition: inline In-Reply-To: <20181220092914.civo25c7zsvqdtk5@mac.citrite.net> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Roger Pau =?iso-8859-1?Q?Monn=E9?= Cc: xen-devel@lists.xenproject.org, Jan Beulich List-Id: xen-devel@lists.xenproject.org T24gVGh1LCBEZWMgMjAsIDIwMTggYXQgMTA6Mjk6MTRBTSArMDEwMCwgUm9nZXIgUGF1IE1vbm7D qSB3cm90ZToKPk9uIFRodSwgRGVjIDIwLCAyMDE4IGF0IDEwOjQ2OjI5QU0gKzA4MDAsIENoYW8g R2FvIHdyb3RlOgo+PiBPbiBXZWQsIERlYyAxOSwgMjAxOCBhdCAwOTo1Nzo1MUFNICswMTAwLCBS b2dlciBQYXUgTW9ubsOpIHdyb3RlOgo+PiA+T24gVHVlLCBEZWMgMTgsIDIwMTggYXQgMTA6NDM6 MzdQTSArMDgwMCwgQ2hhbyBHYW8gd3JvdGU6Cj4+ID4+IEkgZmluZCBzb21lIHBhc3MtdGhydSBk ZXZpY2VzIGRvbid0IHdvcmsgYW55IG1vcmUgYWNyb3NzIGd1ZXN0Cj4+ID4+IHJlYm9vdC4gQXNz aWduaW5nIGl0IHRvIGFub3RoZXIgZG9tYWluIGFsc28gbWVldHMgdGhlIHNhbWUgaXNzdWUuIEFu ZAo+PiA+PiB0aGUgb25seSB3YXkgdG8gbWFrZSBpdCB3b3JrIGFnYWluIGlzIHVuLWJpbmRpbmcg YW5kIGJpbmRpbmcgaXQgdG8KPj4gPj4gcGNpYmFjay4gU29tZW9uZSByZXBvcnRlZCB0aGlzIGlz c3VlIG9uZSB5ZWFyIGFnbyBbMV0uCj4+ID4+IAo+PiA+PiBJZiB0aGUgZGV2aWNlJ3MgZHJpdmVy IGRvZXNuJ3QgZGlzYWJsZSBNU0ktWCBkdXJpbmcgc2h1dGRvd24gb3IgcWVtdSBpcwo+PiA+PiBr aWxsZWQvY3Jhc2hlZCBiZWZvcmUgdGhlIGRvbWFpbiBzaHV0ZG93biwgdGhpcyBkb21haW4ncyBw aXJxIHdvbid0IGJlCj4+ID4+IHVubWFwcGVkLiBUaGVuIHhlbiB0YWtlcyBvdmVyIHRoaXMgd29y aywgdW5tYXBwaW5nIGFsbCBwaXJxLXMsIHdoZW4KPj4gPj4gZGVzdHJveWluZyBndWVzdC4gQnV0 IGFzIHBjaWJhY2sgaGFzIGFscmVhZHkgZGlzYWJsZWQgbWVvcnkgZGVjb2RpbmcgYmVmb3JlCj4+ ID4+IHhlbiB1bm1hcHBpbmcgcGlycSwgWGVuIGhhcyB0byBzZXRzIHRoZSBob3N0X21hc2thbGwg ZmxhZyBhbmQgbWFza2FsbCBiaXQKPj4gPj4gdG8gbWFzayBhIE1TSSByYXRoZXIgdGhhbiBzZXRz IG1hc2tiaXQgaW4gTVNJLXggdGFibGUuIFRoZSBjYWxsIHRyYWNlIG9mCj4+ID4+IHRoaXMgcHJv Y2VzcyBpczoKPj4gPj4gCj4+ID4+IC0+YXJjaF9kb21haW5fZGVzdHJveQo+PiA+PiAgICAgLT5m cmVlX2RvbWFpbl9waXJxcwo+PiA+PiAgICAgICAgIC0+dW5tYXBfZG9tYWluX3BpcnEgKGlmIHBp cnEgaXNuJ3QgdW5tYXBwZWQgYnkgcWVtdSkKPj4gPj4gICAgICAgICAgICAgLT5waXJxX2d1ZXN0 X2ZvcmNlX3VuYmluZAo+PiA+PiAgICAgICAgICAgICAgICAgLT5fX3BpcnFfZ3Vlc3RfdW5iaW5k Cj4+ID4+ICAgICAgICAgICAgICAgICAgICAgLT5tYXNrX21zaV9pcnEoPWRlc2MtPmhhbmRsZXIt PmRpc2FibGUoKSkKPj4gPj4gICAgICAgICAgICAgICAgICAgICAgICAgLT50aGUgd2FybmluZyBp biBtc2lfc2V0X21hc2tfYml0KCkKPj4gPj4gCj4+ID4+IFRoZSBob3N0X21hc2thbGwgYml0IHdp bGwgcHJldmVudCBndWVzdHMgZnJvbSBjbGVhcmluZyB0aGUgbWFza2FsbCBiaXQKPj4gPj4gZXZl biB0aGUgZGV2aWNlIGlzIGFzc2lnbmVkIHRvIGFub3RoZXIgZ3Vlc3QgbGF0ZXIuIFRoZW4gZ3Vl c3RzIGNhbm5vdAo+PiA+PiByZWNlaXZlIE1TSXMgZnJvbSB0aGlzIGRldmljZS4KPj4gPj4gCj4+ ID4+IFRvIGZpeCB0aGlzIGlzc3VlLCBhIHBpcnEgaXMgdW5tYXBwZWQgYmVmb3JlIG1lbW9yeSBk ZWNvZGluZyBpcyBkaXNhYmxlZCBieQo+PiA+PiBwY2liYWNrLiBTcGVjaWZpY2FsbHksIHdoZW4g YSBkZXZpY2UgaXMgZGV0YWNoZWQgZnJvbSBhIGd1ZXN0LCBhbGwgZXN0YWJsaXNoZWQKPj4gPj4g bWFwcGluZ3MgYmV0d2VlbiBwaXJxIGFuZCBtc2kgYXJlIGRlc3Ryb3lpbmcgYmVmb3JlIGNoYW5n aW5nIHRoZSBvd25lcnNoaXAuCj4+ID4+IAo+PiA+PiBbMV06IGh0dHBzOi8vbGlzdHMueGVucHJv amVjdC5vcmcvYXJjaGl2ZXMvaHRtbC94ZW4tZGV2ZWwvMjAxNy0wOS9tc2cwMjUyMC5odG1sCj4+ ID4+IAo+PiA+PiBTaWduZWQtb2ZmLWJ5OiBDaGFvIEdhbyA8Y2hhby5nYW9AaW50ZWwuY29tPgo+ PiA+PiAtLS0KPj4gPj4gQXBwbGllZCB0aGlzIHBhdGNoLCBxZW11IHdvdWxkIHJlcG9ydCB0aGUg ZXJyb3IgYmVsb3c6Cj4+ID4+ICAgICBbMDA6MDUuMF0gbXNpX21zaXhfZGlzYWJsZTogRXJyb3I6 IFVuYmluZGluZyBvZiBNU0ktWCBmYWlsZWQuIChlcnI6IDEsIHBpcnE6IDMwMiwgZ3ZlYzogMHhk NSkKPj4gPj4gICAgIFswMDowNS4wXSBtc2lfbXNpeF9kaXNhYmxlOiBFcnJvcjogVW5iaW5kaW5n IG9mIE1TSS1YIGZhaWxlZC4gKGVycjogMSwgcGlycTogMzAxLCBndmVjOiAweGU1KQo+PiA+PiAg ICAgWzAwOjA0LjBdIG1zaV9tc2l4X2Rpc2FibGU6IEVycm9yOiBVbmJpbmRpbmcgb2YgTVNJLVgg ZmFpbGVkLiAoZXJyOiAxLCBwaXJxOiAzNTksIGd2ZWM6IDB4NDEpCj4+ID4+ICAgICBbMDA6MDQu MF0gbXNpX21zaXhfZGlzYWJsZTogRXJyb3I6IFVuYmluZGluZyBvZiBNU0ktWCBmYWlsZWQuIChl cnI6IDEsIHBpcnE6IDM1OCwgZ3ZlYzogMHg1MSkKPj4gPj4gCj4+ID4+IERlc3BpdGUgb2YgdGhl IGVycm9yLCBndWVzdCBzaHV0ZG93biBvciBkZXZpY2UgaG90cGx1ZyBmaW5pc2hzIHNtb290aGx5 Lgo+PiA+PiBJdCBzZWVtcyB0byBtZSB0aGF0IHFlbXUgdHJpZXMgdG8gdW5iaW5kIGEgbXNpIHdo aWNoIGlzIGFscmVhZHkgdW5ib3VuZCBieQo+PiA+PiB0aGUgY29kZSBhZGRlZCBieSB0aGlzIHBh dGNoLiBJIGFtIG5vdCBzdXJlIHdoZXRoZXIgaXQgaXMgYWNjZXB0YWJsZSB0bwo+PiA+PiBsZWF2 ZSB0aGlzIGVycm9yIHRoZXJlLgo+PiA+Cj4+ID5TbyBRRU1VIHdvdWxkIHRyeSB0byB1bm1hcCBJ UlFzIGFmdGVyIHVuYmluZGluZyB0aGUgZGV2aWNlPyBJIHRoaW5rCj4+IAo+PiBJdCBzZWVtcyB0 byBtZSB5ZXMuIEkgZG9uJ3Qga25vdyB0aGUgcmVhc29uIHJpZ2h0IG5vdy4gbWF5YmUgYmVjYXVz ZSBpdAo+PiBpcyBhbiBhc3luY2hyb25vdXMgcHJvY2Vzcz8KPj4gCj4+ID5RRU1VIHNob3VsZCBi ZSBmaXhlZCB0byBmaXJzdCB1bm1hcCB0aGUgSVJRcyBhbmQgdGhlbiB1bmJpbmQgdGhlCj4+ID5k ZXZpY2UuCj4+IAo+PiBZZXMuIEFncmVlLgo+PiAKPj4gPgo+PiA+QXMgbG9uZyBhcyB0aGlzIGRv ZXNuJ3QgYWZmZWN0IFFFTVUgZnVuY3Rpb25hbGl0eSBJIGd1ZXNzIHRoZSBYZW4gc2lkZQo+PiA+ Y2FuIGJlIGNvbW1pdHRlZCwgYnV0IGlkZWFsbHkgYSBRRU1VIHBhdGNoIHRvIGF2b2lkIHRob3Nl IGVycm9yCj4+ID5tZXNzYWdlcyBzaG91bGQgYmUgY29tbWl0dGVkIGF0IHRoZSBzYW1lIHRpbWUu Cj4+ID4KPj4gPj4gLS0tCj4+ID4+ICB4ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC9pby5jICB8IDU3 ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0KPj4gPj4gIHhlbi9k cml2ZXJzL3Bhc3N0aHJvdWdoL3BjaS5jIHwgNDkgKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKwo+PiA+PiAgeGVuL2luY2x1ZGUveGVuL2lvbW11LmggICAgICAgfCAgMSArCj4+ ID4+ICAzIGZpbGVzIGNoYW5nZWQsIDg5IGluc2VydGlvbnMoKyksIDE4IGRlbGV0aW9ucygtKQo+ PiA+PiAKPj4gPj4gZGlmZiAtLWdpdCBhL3hlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL2lvLmMgYi94 ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC9pby5jCj4+ID4+IGluZGV4IGE2ZWI4YTQuLjU2ZWUxZWYg MTAwNjQ0Cj4+ID4+IC0tLSBhL3hlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL2lvLmMKPj4gPj4gKysr IGIveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvaW8uYwo+PiA+PiBAQCAtNjE5LDYgKzYxOSw0MiBA QCBpbnQgcHRfaXJxX2NyZWF0ZV9iaW5kKAo+PiA+PiAgICAgIHJldHVybiAwOwo+PiA+PiAgfQo+ PiA+PiAgCj4+ID4+ICtzdGF0aWMgdm9pZCBwdF9pcnFfZGVzdHJveV9iaW5kX2NvbW1vbihzdHJ1 Y3QgZG9tYWluICpkLCBzdHJ1Y3QgcGlycSAqcGlycSkKPj4gPj4gK3sKPj4gPj4gKyAgICBzdHJ1 Y3QgaHZtX3BpcnFfZHBjaSAqcGlycV9kcGNpID0gcGlycV9kcGNpKHBpcnEpOwo+PiA+PiArCj4+ ID4+ICsgICAgQVNTRVJUKHNwaW5faXNfbG9ja2VkKCZkLT5ldmVudF9sb2NrKSk7Cj4+ID4+ICsK Pj4gPj4gKyAgICBpZiAoIHBpcnFfZHBjaSAmJiAocGlycV9kcGNpLT5mbGFncyAmIEhWTV9JUlFf RFBDSV9NQVBQRUQpICYmCj4+ID4+ICsgICAgICAgICBsaXN0X2VtcHR5KCZwaXJxX2RwY2ktPmRp Z2xfbGlzdCkgKQo+PiA+PiArICAgIHsKPj4gPj4gKyAgICAgICAgcGlycV9ndWVzdF91bmJpbmQo ZCwgcGlycSk7Cj4+ID4+ICsgICAgICAgIG1zaXh0YmxfcHRfdW5yZWdpc3RlcihkLCBwaXJxKTsK Pj4gPj4gKyAgICAgICAgaWYgKCBwdF9pcnFfbmVlZF90aW1lcihwaXJxX2RwY2ktPmZsYWdzKSAp Cj4+ID4+ICsgICAgICAgICAgICBraWxsX3RpbWVyKCZwaXJxX2RwY2ktPnRpbWVyKTsKPj4gPj4g KyAgICAgICAgcGlycV9kcGNpLT5mbGFncyA9IDA7Cj4+ID4+ICsgICAgICAgIC8qCj4+ID4+ICsg ICAgICAgICAqIFNlZSBjb21tZW50IGluIHB0X2lycV9jcmVhdGVfYmluZCdzIFBUX0lSUV9UWVBF X01TSSBiZWZvcmUgdGhlCj4+ID4+ICsgICAgICAgICAqIGNhbGwgdG8gcHRfcGlycV9zb2Z0aXJx X3Jlc2V0Lgo+PiA+PiArICAgICAgICAgKi8KPj4gPj4gKyAgICAgICAgcHRfcGlycV9zb2Z0aXJx X3Jlc2V0KHBpcnFfZHBjaSk7Cj4+ID4+ICsKPj4gPj4gKyAgICAgICAgcGlycV9jbGVhbnVwX2No ZWNrKHBpcnEsIGQpOwo+PiA+PiArICAgIH0KPj4gPj4gK30KPj4gPj4gKwo+PiA+PiArdm9pZCBw dF9pcnFfZGVzdHJveV9iaW5kX21zaShzdHJ1Y3QgZG9tYWluICpkLCBzdHJ1Y3QgcGlycSAqcGly cSkKPj4gPj4gK3sKPj4gPj4gKyAgICBzdHJ1Y3QgaHZtX3BpcnFfZHBjaSAqcGlycV9kcGNpID0g cGlycV9kcGNpKHBpcnEpOwo+PiA+PiArCj4+ID4+ICsgICAgQVNTRVJUKHNwaW5faXNfbG9ja2Vk KCZkLT5ldmVudF9sb2NrKSk7Cj4+ID4+ICsKPj4gPj4gKyAgICBpZiAoIHBpcnFfZHBjaSAmJiBw aXJxX2RwY2ktPmdtc2kucG9zdGVkICkKPj4gPj4gKyAgICAgICAgcGlfdXBkYXRlX2lydGUoTlVM TCwgcGlycSwgMCk7Cj4+ID4+ICsKPj4gPj4gKyAgICBwdF9pcnFfZGVzdHJveV9iaW5kX2NvbW1v bihkLCBwaXJxKTsKPj4gPj4gK30KPj4gPj4gKwo+PiA+PiAgaW50IHB0X2lycV9kZXN0cm95X2Jp bmQoCj4+ID4+ICAgICAgc3RydWN0IGRvbWFpbiAqZCwgY29uc3Qgc3RydWN0IHhlbl9kb21jdGxf YmluZF9wdF9pcnEgKnB0X2lycV9iaW5kKQo+PiA+PiAgewo+PiA+PiBAQCAtNzI3LDI2ICs3NjMs MTEgQEAgaW50IHB0X2lycV9kZXN0cm95X2JpbmQoCj4+ID4+ICAgICAgICAgIH0KPj4gPj4gICAg ICAgICAgZWxzZQo+PiA+PiAgICAgICAgICAgICAgd2hhdCA9ICJib2d1cyI7Cj4+ID4+IC0gICAg fQo+PiA+PiAtICAgIGVsc2UgaWYgKCBwaXJxX2RwY2kgJiYgcGlycV9kcGNpLT5nbXNpLnBvc3Rl ZCApCj4+ID4+IC0gICAgICAgIHBpX3VwZGF0ZV9pcnRlKE5VTEwsIHBpcnEsIDApOwo+PiA+PiAt Cj4+ID4+IC0gICAgaWYgKCBwaXJxX2RwY2kgJiYgKHBpcnFfZHBjaS0+ZmxhZ3MgJiBIVk1fSVJR X0RQQ0lfTUFQUEVEKSAmJgo+PiA+PiAtICAgICAgICAgbGlzdF9lbXB0eSgmcGlycV9kcGNpLT5k aWdsX2xpc3QpICkKPj4gPj4gLSAgICB7Cj4+ID4+IC0gICAgICAgIHBpcnFfZ3Vlc3RfdW5iaW5k KGQsIHBpcnEpOwo+PiA+PiAtICAgICAgICBtc2l4dGJsX3B0X3VucmVnaXN0ZXIoZCwgcGlycSk7 Cj4+ID4+IC0gICAgICAgIGlmICggcHRfaXJxX25lZWRfdGltZXIocGlycV9kcGNpLT5mbGFncykg KQo+PiA+PiAtICAgICAgICAgICAga2lsbF90aW1lcigmcGlycV9kcGNpLT50aW1lcik7Cj4+ID4+ IC0gICAgICAgIHBpcnFfZHBjaS0+ZmxhZ3MgPSAwOwo+PiA+PiAtICAgICAgICAvKgo+PiA+PiAt ICAgICAgICAgKiBTZWUgY29tbWVudCBpbiBwdF9pcnFfY3JlYXRlX2JpbmQncyBQVF9JUlFfVFlQ RV9NU0kgYmVmb3JlIHRoZQo+PiA+PiAtICAgICAgICAgKiBjYWxsIHRvIHB0X3BpcnFfc29mdGly cV9yZXNldC4KPj4gPj4gLSAgICAgICAgICovCj4+ID4+IC0gICAgICAgIHB0X3BpcnFfc29mdGly cV9yZXNldChwaXJxX2RwY2kpOwo+PiA+PiAgCj4+ID4+IC0gICAgICAgIHBpcnFfY2xlYW51cF9j aGVjayhwaXJxLCBkKTsKPj4gPj4gKyAgICAgICAgcHRfaXJxX2Rlc3Ryb3lfYmluZF9jb21tb24o ZCwgcGlycSk7Cj4+ID4+ICAgICAgfQo+PiA+PiArICAgIGVsc2UKPj4gPj4gKyAgICAgICAgcHRf aXJxX2Rlc3Ryb3lfYmluZF9tc2koZCwgcGlycSk7Cj4+ID4+ICAKPj4gPj4gICAgICBzcGluX3Vu bG9jaygmZC0+ZXZlbnRfbG9jayk7Cj4+ID4+ICAKPj4gPj4gZGlmZiAtLWdpdCBhL3hlbi9kcml2 ZXJzL3Bhc3N0aHJvdWdoL3BjaS5jIGIveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvcGNpLmMKPj4g Pj4gaW5kZXggMTI3N2NlMi4uODhhODAwNyAxMDA2NDQKPj4gPj4gLS0tIGEveGVuL2RyaXZlcnMv cGFzc3Rocm91Z2gvcGNpLmMKPj4gPj4gKysrIGIveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvcGNp LmMKPj4gPj4gQEAgLTM2OCw2ICszNjgsNyBAQCBzdGF0aWMgc3RydWN0IHBjaV9kZXYgKmFsbG9j X3BkZXYoc3RydWN0IHBjaV9zZWcgKnBzZWcsIHU4IGJ1cywgdTggZGV2Zm4pCj4+ID4+ICAgICAg ICAgICAgICByZXR1cm4gTlVMTDsKPj4gPj4gICAgICAgICAgfQo+PiA+PiAgICAgICAgICBzcGlu X2xvY2tfaW5pdCgmbXNpeC0+dGFibGVfbG9jayk7Cj4+ID4+ICsgICAgICAgIG1zaXgtPndhcm5l ZCA9IERPTUlEX0lOVkFMSUQ7Cj4+ID4+ICAgICAgICAgIHBkZXYtPm1zaXggPSBtc2l4Owo+PiA+ PiAgICAgIH0KPj4gPj4gIAo+PiA+PiBAQCAtMTUxNCw2ICsxNTE1LDUyIEBAIHN0YXRpYyBpbnQg YXNzaWduX2RldmljZShzdHJ1Y3QgZG9tYWluICpkLCB1MTYgc2VnLCB1OCBidXMsIHU4IGRldmZu LCB1MzIgZmxhZykKPj4gPj4gICAgICByZXR1cm4gcmM7Cj4+ID4+ICB9Cj4+ID4+ICAKPj4gPj4g Ky8qCj4+ID4+ICsgKiBVbm1hcCBlc3RhYmxpc2hlZCBtYXBwaW5ncyBiZXR3ZWVuIGRvbWFpbidz IHBpcnEgYW5kIGRldmljZSdzIE1TSS4KPj4gPj4gKyAqIFRoZXNlIG1hcHBpbmdzIHdlcmUgc2V0 IHVwIGJ5IHFlbXUvZ3Vlc3QgYW5kIGFyZSBleHBlY3RlZCB0byBiZQo+PiA+PiArICogZGVzdHJv eWVkIHdoZW4gY2hhbmdpbmcgdGhlIGRldmljZSdzIG93bmVyc2hpcC4KPj4gPj4gKyAqLwo+PiA+ PiArc3RhdGljIHZvaWQgcGNpX3VubWFwX21zaShzdHJ1Y3QgcGNpX2RldiAqcGRldikKPj4gPj4g K3sKPj4gPj4gKyAgICBzdHJ1Y3QgbXNpX2Rlc2MgKmVudHJ5LCAqdG1wOwo+PiA+PiArCj4+ID4+ ICsgICAgQVNTRVJUKHBjaWRldnNfbG9ja2VkKCkpOwo+PiA+PiArCj4+ID4+ICsgICAgaWYgKCAh cGRldi0+ZG9tYWluICkKPj4gPj4gKyAgICAgICAgcmV0dXJuOwo+PiA+PiArCj4+ID4+ICsgICAg c3Bpbl9sb2NrKCZwZGV2LT5kb21haW4tPmV2ZW50X2xvY2spOwo+PiA+PiArICAgIGxpc3RfZm9y X2VhY2hfZW50cnlfc2FmZSggZW50cnksIHRtcCwgJnBkZXYtPm1zaV9saXN0LCBsaXN0ICkKPj4g Pgo+PiA+RG8geW91IHJlYWxseSBuZWVkIHRoZSBfc2FmZSB2ZXJzaW9uIGhlcmU/IENvdWxkbid0 IHlvdSBldmVuIHVzZToKPj4gCj4+IERvbid0IG5lZWQgdGhlIF9zYWZlIHZlcnNpb24uCj4+IAo+ PiA+Cj4+ID53aGlsZSAoIChlbnRyeSA9IGxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbCguLi4pKSAh PSBOVUxMICkKPj4gPi4uLgo+PiAKPj4gSSB0aGluayBpdCBpcyB0aGUgc2FtZSB3aXRoIGxpc3Rf Zm9yX2VhY2hfZW50cnkoKS4gQW55IHJlYXNvbiBtYWtlcyB5b3UgdGhpbmsKPj4gdGhpcyBvbmUg d291bGQgYmUgYmV0dGVyPwo+Cj5Eb2Vzbid0ICdlbnRyeScgZ2V0IGZyZWVkIHdoZW4geW91IGNh bGwgdW5tYXBfZG9tYWluX3BpcnE/IEluIHdoaWNoCj5jYXNlIHVzaW5nIHRoZSBsaXN0IHBvaW50 ZXIgZnJvbSB0aGF0IHN0cnVjdCB3b3VsZCBiZSBhCj51c2UtYWZ0ZXItZnJlZS4KPgo+VXNpbmcg bGlzdF9maXJzdF9lbnRyeV9vcl9udWxsIHlvdSBkb24ndCBuZWVkIHRoZSBwcmV2aW91cyBlbnRy eSBpbgo+b3JkZXIgdG8gZ2V0IHRoZSBuZXh0IG9uZSwgc2luY2UgeW91IGFsd2F5cyBwaWNrIHRo ZSBmaXJzdCBvbmUgdW50aWwKPnRoZSBsaXN0IGlzIGVtcHR5LgoKQWdyZWUuIGhlcmUgSSBzaG91 bGQgdXNlIF9zYWZlIHZlcnNpb24gYW5kIHdpbGwgdGFrZSB5b3UgYWR2aWNlLgoKPgo+PiA+Cj4+ ID4+ICsgICAgewo+PiA+PiArICAgICAgICBzdHJ1Y3QgcGlycSAqaW5mbzsKPj4gPj4gKyAgICAg ICAgc3RydWN0IGh2bV9waXJxX2RwY2kgKnBpcnFfZHBjaTsKPj4gPj4gKyAgICAgICAgaW50IHBp cnEgPSBkb21haW5faXJxX3RvX3BpcnEocGRldi0+ZG9tYWluLCBlbnRyeS0+aXJxKSwgcGlycV9v cmlnOwo+PiA+PiArCj4+ID4+ICsgICAgICAgIHBpcnFfb3JpZyA9IHBpcnE7Cj4+ID4+ICsKPj4g Pj4gKyAgICAgICAgaWYgKCAhcGlycSApCj4+ID4+ICsgICAgICAgICAgICBjb250aW51ZTsKPj4g Pj4gKwo+PiA+PiArICAgICAgICAvKiBGb3IgZm9yY2libHkgdW5tYXBwZWQgcGlycSwgbG9va3Vw IHJhZGl4IHRyZWUgd2l0aCBhYnNvbHV0ZSB2YWx1ZSAqLwo+PiA+PiArICAgICAgICBpZiAoIHBp cnEgPCAwKQo+PiA+PiArICAgICAgICAgICAgcGlycSA9IC1waXJxOwo+PiA+Cj4+ID5JJ20gbm90 IHN1cmUgSSBmb2xsb3csIHRoZSBwaXJxIGhhc24ndCBiZWVuIHVubWFwcGVkIGF0IHRoaXMgcG9p bnQKPj4gPnlldD8KPj4gCj4+IFFlbXUgKGkuZS4gY29tcHJvbWlzZWQgcWVtdSkgaGFzIHRoZSBh YmlsaXR5IHRvIGRvIHRoaXMuIFJpZ2h0PyB3ZSBjYW4ndAo+PiBhc3NlcnQgdGhlIHBpcnEgaGFz bid0IGJlZW4gdW5tYXBwZWQgaGVyZS4KPgo+SWYgdGhlIFBJUlEgaXMgdW5tYXBwZWQgdGhlbiB0 aGUgJ2VudHJ5JyB3b3VsZCBhbHNvIGJlIGdvbmUgKGZyZWVkKQo+QUZBSUNUIChzZWUgdW5tYXBf ZG9tYWluX3BpcnEgd2hpY2ggY2FsbHMgbXNpX2ZyZWVfaXJxKT8KPgo+SSB0aGluayB0aGF0IGFu eSBlbnRyeSBpbiBwZGV2LT5tc2lfbGlzdCB3aWxsIGFsd2F5cyBoYXZlIGVudHJ5LT5pcnEKPiA+ PSAwLCBidXQgbWF5YmUgSSdtIG1pc3Npbmcgc29tZXRoaW5nLiBBRkFJQ1QgbWFwX2RvbWFpbl9w aXJxIHdpbGwgbm90Cj5hZGQgYW4gZW50cnkgd2l0aCBpcnEgPCAwLgoKWWVzLCB5b3UgYXJlIHJp Z2h0LiBJIHdpbGwgYWRkIGEgIldBUk5fT04iIHdoZW4gcGlycSA8IDAuCgpUaGFua3MKQ2hhbwoK X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVs IG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0 cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL3hlbi1kZXZlbA==