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 10:46:29 +0800 Message-ID: <20181220024627.GA10247@gao-cwp> References: <1545144218-6463-1-git-send-email-chao.gao@intel.com> <20181219085751.ljboh5qqzaqh6etb@mac> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from all-amaz-eas1.inumbo.com ([34.197.232.57] helo=us1-amaz-eas2.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1gZoIX-0002Aq-T1 for xen-devel@lists.xenproject.org; Thu, 20 Dec 2018 02:42:53 +0000 Content-Disposition: inline In-Reply-To: <20181219085751.ljboh5qqzaqh6etb@mac> 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 T24gV2VkLCBEZWMgMTksIDIwMTggYXQgMDk6NTc6NTFBTSArMDEwMCwgUm9nZXIgUGF1IE1vbm7D qSB3cm90ZToKPk9uIFR1ZSwgRGVjIDE4LCAyMDE4IGF0IDEwOjQzOjM3UE0gKzA4MDAsIENoYW8g R2FvIHdyb3RlOgo+PiBJIGZpbmQgc29tZSBwYXNzLXRocnUgZGV2aWNlcyBkb24ndCB3b3JrIGFu eSBtb3JlIGFjcm9zcyBndWVzdAo+PiByZWJvb3QuIEFzc2lnbmluZyBpdCB0byBhbm90aGVyIGRv bWFpbiBhbHNvIG1lZXRzIHRoZSBzYW1lIGlzc3VlLiBBbmQKPj4gdGhlIG9ubHkgd2F5IHRvIG1h a2UgaXQgd29yayBhZ2FpbiBpcyB1bi1iaW5kaW5nIGFuZCBiaW5kaW5nIGl0IHRvCj4+IHBjaWJh Y2suIFNvbWVvbmUgcmVwb3J0ZWQgdGhpcyBpc3N1ZSBvbmUgeWVhciBhZ28gWzFdLgo+PiAKPj4g SWYgdGhlIGRldmljZSdzIGRyaXZlciBkb2Vzbid0IGRpc2FibGUgTVNJLVggZHVyaW5nIHNodXRk b3duIG9yIHFlbXUgaXMKPj4ga2lsbGVkL2NyYXNoZWQgYmVmb3JlIHRoZSBkb21haW4gc2h1dGRv d24sIHRoaXMgZG9tYWluJ3MgcGlycSB3b24ndCBiZQo+PiB1bm1hcHBlZC4gVGhlbiB4ZW4gdGFr ZXMgb3ZlciB0aGlzIHdvcmssIHVubWFwcGluZyBhbGwgcGlycS1zLCB3aGVuCj4+IGRlc3Ryb3lp bmcgZ3Vlc3QuIEJ1dCBhcyBwY2liYWNrIGhhcyBhbHJlYWR5IGRpc2FibGVkIG1lb3J5IGRlY29k aW5nIGJlZm9yZQo+PiB4ZW4gdW5tYXBwaW5nIHBpcnEsIFhlbiBoYXMgdG8gc2V0cyB0aGUgaG9z dF9tYXNrYWxsIGZsYWcgYW5kIG1hc2thbGwgYml0Cj4+IHRvIG1hc2sgYSBNU0kgcmF0aGVyIHRo YW4gc2V0cyBtYXNrYml0IGluIE1TSS14IHRhYmxlLiBUaGUgY2FsbCB0cmFjZSBvZgo+PiB0aGlz IHByb2Nlc3MgaXM6Cj4+IAo+PiAtPmFyY2hfZG9tYWluX2Rlc3Ryb3kKPj4gICAgIC0+ZnJlZV9k b21haW5fcGlycXMKPj4gICAgICAgICAtPnVubWFwX2RvbWFpbl9waXJxIChpZiBwaXJxIGlzbid0 IHVubWFwcGVkIGJ5IHFlbXUpCj4+ICAgICAgICAgICAgIC0+cGlycV9ndWVzdF9mb3JjZV91bmJp bmQKPj4gICAgICAgICAgICAgICAgIC0+X19waXJxX2d1ZXN0X3VuYmluZAo+PiAgICAgICAgICAg ICAgICAgICAgIC0+bWFza19tc2lfaXJxKD1kZXNjLT5oYW5kbGVyLT5kaXNhYmxlKCkpCj4+ICAg ICAgICAgICAgICAgICAgICAgICAgIC0+dGhlIHdhcm5pbmcgaW4gbXNpX3NldF9tYXNrX2JpdCgp Cj4+IAo+PiBUaGUgaG9zdF9tYXNrYWxsIGJpdCB3aWxsIHByZXZlbnQgZ3Vlc3RzIGZyb20gY2xl YXJpbmcgdGhlIG1hc2thbGwgYml0Cj4+IGV2ZW4gdGhlIGRldmljZSBpcyBhc3NpZ25lZCB0byBh bm90aGVyIGd1ZXN0IGxhdGVyLiBUaGVuIGd1ZXN0cyBjYW5ub3QKPj4gcmVjZWl2ZSBNU0lzIGZy b20gdGhpcyBkZXZpY2UuCj4+IAo+PiBUbyBmaXggdGhpcyBpc3N1ZSwgYSBwaXJxIGlzIHVubWFw cGVkIGJlZm9yZSBtZW1vcnkgZGVjb2RpbmcgaXMgZGlzYWJsZWQgYnkKPj4gcGNpYmFjay4gU3Bl Y2lmaWNhbGx5LCB3aGVuIGEgZGV2aWNlIGlzIGRldGFjaGVkIGZyb20gYSBndWVzdCwgYWxsIGVz dGFibGlzaGVkCj4+IG1hcHBpbmdzIGJldHdlZW4gcGlycSBhbmQgbXNpIGFyZSBkZXN0cm95aW5n IGJlZm9yZSBjaGFuZ2luZyB0aGUgb3duZXJzaGlwLgo+PiAKPj4gWzFdOiBodHRwczovL2xpc3Rz LnhlbnByb2plY3Qub3JnL2FyY2hpdmVzL2h0bWwveGVuLWRldmVsLzIwMTctMDkvbXNnMDI1MjAu aHRtbAo+PiAKPj4gU2lnbmVkLW9mZi1ieTogQ2hhbyBHYW8gPGNoYW8uZ2FvQGludGVsLmNvbT4K Pj4gLS0tCj4+IEFwcGxpZWQgdGhpcyBwYXRjaCwgcWVtdSB3b3VsZCByZXBvcnQgdGhlIGVycm9y IGJlbG93Ogo+PiAgICAgWzAwOjA1LjBdIG1zaV9tc2l4X2Rpc2FibGU6IEVycm9yOiBVbmJpbmRp bmcgb2YgTVNJLVggZmFpbGVkLiAoZXJyOiAxLCBwaXJxOiAzMDIsIGd2ZWM6IDB4ZDUpCj4+ICAg ICBbMDA6MDUuMF0gbXNpX21zaXhfZGlzYWJsZTogRXJyb3I6IFVuYmluZGluZyBvZiBNU0ktWCBm YWlsZWQuIChlcnI6IDEsIHBpcnE6IDMwMSwgZ3ZlYzogMHhlNSkKPj4gICAgIFswMDowNC4wXSBt c2lfbXNpeF9kaXNhYmxlOiBFcnJvcjogVW5iaW5kaW5nIG9mIE1TSS1YIGZhaWxlZC4gKGVycjog MSwgcGlycTogMzU5LCBndmVjOiAweDQxKQo+PiAgICAgWzAwOjA0LjBdIG1zaV9tc2l4X2Rpc2Fi bGU6IEVycm9yOiBVbmJpbmRpbmcgb2YgTVNJLVggZmFpbGVkLiAoZXJyOiAxLCBwaXJxOiAzNTgs IGd2ZWM6IDB4NTEpCj4+IAo+PiBEZXNwaXRlIG9mIHRoZSBlcnJvciwgZ3Vlc3Qgc2h1dGRvd24g b3IgZGV2aWNlIGhvdHBsdWcgZmluaXNocyBzbW9vdGhseS4KPj4gSXQgc2VlbXMgdG8gbWUgdGhh dCBxZW11IHRyaWVzIHRvIHVuYmluZCBhIG1zaSB3aGljaCBpcyBhbHJlYWR5IHVuYm91bmQgYnkK Pj4gdGhlIGNvZGUgYWRkZWQgYnkgdGhpcyBwYXRjaC4gSSBhbSBub3Qgc3VyZSB3aGV0aGVyIGl0 IGlzIGFjY2VwdGFibGUgdG8KPj4gbGVhdmUgdGhpcyBlcnJvciB0aGVyZS4KPgo+U28gUUVNVSB3 b3VsZCB0cnkgdG8gdW5tYXAgSVJRcyBhZnRlciB1bmJpbmRpbmcgdGhlIGRldmljZT8gSSB0aGlu awoKSXQgc2VlbXMgdG8gbWUgeWVzLiBJIGRvbid0IGtub3cgdGhlIHJlYXNvbiByaWdodCBub3cu IG1heWJlIGJlY2F1c2UgaXQKaXMgYW4gYXN5bmNocm9ub3VzIHByb2Nlc3M/Cgo+UUVNVSBzaG91 bGQgYmUgZml4ZWQgdG8gZmlyc3QgdW5tYXAgdGhlIElSUXMgYW5kIHRoZW4gdW5iaW5kIHRoZQo+ ZGV2aWNlLgoKWWVzLiBBZ3JlZS4KCj4KPkFzIGxvbmcgYXMgdGhpcyBkb2Vzbid0IGFmZmVjdCBR RU1VIGZ1bmN0aW9uYWxpdHkgSSBndWVzcyB0aGUgWGVuIHNpZGUKPmNhbiBiZSBjb21taXR0ZWQs IGJ1dCBpZGVhbGx5IGEgUUVNVSBwYXRjaCB0byBhdm9pZCB0aG9zZSBlcnJvcgo+bWVzc2FnZXMg c2hvdWxkIGJlIGNvbW1pdHRlZCBhdCB0aGUgc2FtZSB0aW1lLgo+Cj4+IC0tLQo+PiAgeGVuL2Ry aXZlcnMvcGFzc3Rocm91Z2gvaW8uYyAgfCA1NyArKysrKysrKysrKysrKysrKysrKysrKysrKysr Ky0tLS0tLS0tLS0tLS0tCj4+ICB4ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC9wY2kuYyB8IDQ5ICsr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPj4gIHhlbi9pbmNsdWRlL3hlbi9p b21tdS5oICAgICAgIHwgIDEgKwo+PiAgMyBmaWxlcyBjaGFuZ2VkLCA4OSBpbnNlcnRpb25zKCsp LCAxOCBkZWxldGlvbnMoLSkKPj4gCj4+IGRpZmYgLS1naXQgYS94ZW4vZHJpdmVycy9wYXNzdGhy b3VnaC9pby5jIGIveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvaW8uYwo+PiBpbmRleCBhNmViOGE0 Li41NmVlMWVmIDEwMDY0NAo+PiAtLS0gYS94ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC9pby5jCj4+ ICsrKyBiL3hlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL2lvLmMKPj4gQEAgLTYxOSw2ICs2MTksNDIg QEAgaW50IHB0X2lycV9jcmVhdGVfYmluZCgKPj4gICAgICByZXR1cm4gMDsKPj4gIH0KPj4gIAo+ PiArc3RhdGljIHZvaWQgcHRfaXJxX2Rlc3Ryb3lfYmluZF9jb21tb24oc3RydWN0IGRvbWFpbiAq ZCwgc3RydWN0IHBpcnEgKnBpcnEpCj4+ICt7Cj4+ICsgICAgc3RydWN0IGh2bV9waXJxX2RwY2kg KnBpcnFfZHBjaSA9IHBpcnFfZHBjaShwaXJxKTsKPj4gKwo+PiArICAgIEFTU0VSVChzcGluX2lz X2xvY2tlZCgmZC0+ZXZlbnRfbG9jaykpOwo+PiArCj4+ICsgICAgaWYgKCBwaXJxX2RwY2kgJiYg KHBpcnFfZHBjaS0+ZmxhZ3MgJiBIVk1fSVJRX0RQQ0lfTUFQUEVEKSAmJgo+PiArICAgICAgICAg bGlzdF9lbXB0eSgmcGlycV9kcGNpLT5kaWdsX2xpc3QpICkKPj4gKyAgICB7Cj4+ICsgICAgICAg IHBpcnFfZ3Vlc3RfdW5iaW5kKGQsIHBpcnEpOwo+PiArICAgICAgICBtc2l4dGJsX3B0X3VucmVn aXN0ZXIoZCwgcGlycSk7Cj4+ICsgICAgICAgIGlmICggcHRfaXJxX25lZWRfdGltZXIocGlycV9k cGNpLT5mbGFncykgKQo+PiArICAgICAgICAgICAga2lsbF90aW1lcigmcGlycV9kcGNpLT50aW1l cik7Cj4+ICsgICAgICAgIHBpcnFfZHBjaS0+ZmxhZ3MgPSAwOwo+PiArICAgICAgICAvKgo+PiAr ICAgICAgICAgKiBTZWUgY29tbWVudCBpbiBwdF9pcnFfY3JlYXRlX2JpbmQncyBQVF9JUlFfVFlQ RV9NU0kgYmVmb3JlIHRoZQo+PiArICAgICAgICAgKiBjYWxsIHRvIHB0X3BpcnFfc29mdGlycV9y ZXNldC4KPj4gKyAgICAgICAgICovCj4+ICsgICAgICAgIHB0X3BpcnFfc29mdGlycV9yZXNldChw aXJxX2RwY2kpOwo+PiArCj4+ICsgICAgICAgIHBpcnFfY2xlYW51cF9jaGVjayhwaXJxLCBkKTsK Pj4gKyAgICB9Cj4+ICt9Cj4+ICsKPj4gK3ZvaWQgcHRfaXJxX2Rlc3Ryb3lfYmluZF9tc2koc3Ry dWN0IGRvbWFpbiAqZCwgc3RydWN0IHBpcnEgKnBpcnEpCj4+ICt7Cj4+ICsgICAgc3RydWN0IGh2 bV9waXJxX2RwY2kgKnBpcnFfZHBjaSA9IHBpcnFfZHBjaShwaXJxKTsKPj4gKwo+PiArICAgIEFT U0VSVChzcGluX2lzX2xvY2tlZCgmZC0+ZXZlbnRfbG9jaykpOwo+PiArCj4+ICsgICAgaWYgKCBw aXJxX2RwY2kgJiYgcGlycV9kcGNpLT5nbXNpLnBvc3RlZCApCj4+ICsgICAgICAgIHBpX3VwZGF0 ZV9pcnRlKE5VTEwsIHBpcnEsIDApOwo+PiArCj4+ICsgICAgcHRfaXJxX2Rlc3Ryb3lfYmluZF9j b21tb24oZCwgcGlycSk7Cj4+ICt9Cj4+ICsKPj4gIGludCBwdF9pcnFfZGVzdHJveV9iaW5kKAo+ PiAgICAgIHN0cnVjdCBkb21haW4gKmQsIGNvbnN0IHN0cnVjdCB4ZW5fZG9tY3RsX2JpbmRfcHRf aXJxICpwdF9pcnFfYmluZCkKPj4gIHsKPj4gQEAgLTcyNywyNiArNzYzLDExIEBAIGludCBwdF9p cnFfZGVzdHJveV9iaW5kKAo+PiAgICAgICAgICB9Cj4+ICAgICAgICAgIGVsc2UKPj4gICAgICAg ICAgICAgIHdoYXQgPSAiYm9ndXMiOwo+PiAtICAgIH0KPj4gLSAgICBlbHNlIGlmICggcGlycV9k cGNpICYmIHBpcnFfZHBjaS0+Z21zaS5wb3N0ZWQgKQo+PiAtICAgICAgICBwaV91cGRhdGVfaXJ0 ZShOVUxMLCBwaXJxLCAwKTsKPj4gLQo+PiAtICAgIGlmICggcGlycV9kcGNpICYmIChwaXJxX2Rw Y2ktPmZsYWdzICYgSFZNX0lSUV9EUENJX01BUFBFRCkgJiYKPj4gLSAgICAgICAgIGxpc3RfZW1w dHkoJnBpcnFfZHBjaS0+ZGlnbF9saXN0KSApCj4+IC0gICAgewo+PiAtICAgICAgICBwaXJxX2d1 ZXN0X3VuYmluZChkLCBwaXJxKTsKPj4gLSAgICAgICAgbXNpeHRibF9wdF91bnJlZ2lzdGVyKGQs IHBpcnEpOwo+PiAtICAgICAgICBpZiAoIHB0X2lycV9uZWVkX3RpbWVyKHBpcnFfZHBjaS0+Zmxh Z3MpICkKPj4gLSAgICAgICAgICAgIGtpbGxfdGltZXIoJnBpcnFfZHBjaS0+dGltZXIpOwo+PiAt ICAgICAgICBwaXJxX2RwY2ktPmZsYWdzID0gMDsKPj4gLSAgICAgICAgLyoKPj4gLSAgICAgICAg ICogU2VlIGNvbW1lbnQgaW4gcHRfaXJxX2NyZWF0ZV9iaW5kJ3MgUFRfSVJRX1RZUEVfTVNJIGJl Zm9yZSB0aGUKPj4gLSAgICAgICAgICogY2FsbCB0byBwdF9waXJxX3NvZnRpcnFfcmVzZXQuCj4+ IC0gICAgICAgICAqLwo+PiAtICAgICAgICBwdF9waXJxX3NvZnRpcnFfcmVzZXQocGlycV9kcGNp KTsKPj4gIAo+PiAtICAgICAgICBwaXJxX2NsZWFudXBfY2hlY2socGlycSwgZCk7Cj4+ICsgICAg ICAgIHB0X2lycV9kZXN0cm95X2JpbmRfY29tbW9uKGQsIHBpcnEpOwo+PiAgICAgIH0KPj4gKyAg ICBlbHNlCj4+ICsgICAgICAgIHB0X2lycV9kZXN0cm95X2JpbmRfbXNpKGQsIHBpcnEpOwo+PiAg Cj4+ICAgICAgc3Bpbl91bmxvY2soJmQtPmV2ZW50X2xvY2spOwo+PiAgCj4+IGRpZmYgLS1naXQg YS94ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC9wY2kuYyBiL3hlbi9kcml2ZXJzL3Bhc3N0aHJvdWdo L3BjaS5jCj4+IGluZGV4IDEyNzdjZTIuLjg4YTgwMDcgMTAwNjQ0Cj4+IC0tLSBhL3hlbi9kcml2 ZXJzL3Bhc3N0aHJvdWdoL3BjaS5jCj4+ICsrKyBiL3hlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL3Bj aS5jCj4+IEBAIC0zNjgsNiArMzY4LDcgQEAgc3RhdGljIHN0cnVjdCBwY2lfZGV2ICphbGxvY19w ZGV2KHN0cnVjdCBwY2lfc2VnICpwc2VnLCB1OCBidXMsIHU4IGRldmZuKQo+PiAgICAgICAgICAg ICAgcmV0dXJuIE5VTEw7Cj4+ICAgICAgICAgIH0KPj4gICAgICAgICAgc3Bpbl9sb2NrX2luaXQo Jm1zaXgtPnRhYmxlX2xvY2spOwo+PiArICAgICAgICBtc2l4LT53YXJuZWQgPSBET01JRF9JTlZB TElEOwo+PiAgICAgICAgICBwZGV2LT5tc2l4ID0gbXNpeDsKPj4gICAgICB9Cj4+ICAKPj4gQEAg LTE1MTQsNiArMTUxNSw1MiBAQCBzdGF0aWMgaW50IGFzc2lnbl9kZXZpY2Uoc3RydWN0IGRvbWFp biAqZCwgdTE2IHNlZywgdTggYnVzLCB1OCBkZXZmbiwgdTMyIGZsYWcpCj4+ICAgICAgcmV0dXJu IHJjOwo+PiAgfQo+PiAgCj4+ICsvKgo+PiArICogVW5tYXAgZXN0YWJsaXNoZWQgbWFwcGluZ3Mg YmV0d2VlbiBkb21haW4ncyBwaXJxIGFuZCBkZXZpY2UncyBNU0kuCj4+ICsgKiBUaGVzZSBtYXBw aW5ncyB3ZXJlIHNldCB1cCBieSBxZW11L2d1ZXN0IGFuZCBhcmUgZXhwZWN0ZWQgdG8gYmUKPj4g KyAqIGRlc3Ryb3llZCB3aGVuIGNoYW5naW5nIHRoZSBkZXZpY2UncyBvd25lcnNoaXAuCj4+ICsg Ki8KPj4gK3N0YXRpYyB2b2lkIHBjaV91bm1hcF9tc2koc3RydWN0IHBjaV9kZXYgKnBkZXYpCj4+ ICt7Cj4+ICsgICAgc3RydWN0IG1zaV9kZXNjICplbnRyeSwgKnRtcDsKPj4gKwo+PiArICAgIEFT U0VSVChwY2lkZXZzX2xvY2tlZCgpKTsKPj4gKwo+PiArICAgIGlmICggIXBkZXYtPmRvbWFpbiAp Cj4+ICsgICAgICAgIHJldHVybjsKPj4gKwo+PiArICAgIHNwaW5fbG9jaygmcGRldi0+ZG9tYWlu LT5ldmVudF9sb2NrKTsKPj4gKyAgICBsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoIGVudHJ5LCB0 bXAsICZwZGV2LT5tc2lfbGlzdCwgbGlzdCApCj4KPkRvIHlvdSByZWFsbHkgbmVlZCB0aGUgX3Nh ZmUgdmVyc2lvbiBoZXJlPyBDb3VsZG4ndCB5b3UgZXZlbiB1c2U6CgpEb24ndCBuZWVkIHRoZSBf c2FmZSB2ZXJzaW9uLgoKPgo+d2hpbGUgKCAoZW50cnkgPSBsaXN0X2ZpcnN0X2VudHJ5X29yX251 bGwoLi4uKSkgIT0gTlVMTCApCj4uLi4KCkkgdGhpbmsgaXQgaXMgdGhlIHNhbWUgd2l0aCBsaXN0 X2Zvcl9lYWNoX2VudHJ5KCkuIEFueSByZWFzb24gbWFrZXMgeW91IHRoaW5rCnRoaXMgb25lIHdv dWxkIGJlIGJldHRlcj8KCj4KPj4gKyAgICB7Cj4+ICsgICAgICAgIHN0cnVjdCBwaXJxICppbmZv Owo+PiArICAgICAgICBzdHJ1Y3QgaHZtX3BpcnFfZHBjaSAqcGlycV9kcGNpOwo+PiArICAgICAg ICBpbnQgcGlycSA9IGRvbWFpbl9pcnFfdG9fcGlycShwZGV2LT5kb21haW4sIGVudHJ5LT5pcnEp LCBwaXJxX29yaWc7Cj4+ICsKPj4gKyAgICAgICAgcGlycV9vcmlnID0gcGlycTsKPj4gKwo+PiAr ICAgICAgICBpZiAoICFwaXJxICkKPj4gKyAgICAgICAgICAgIGNvbnRpbnVlOwo+PiArCj4+ICsg ICAgICAgIC8qIEZvciBmb3JjaWJseSB1bm1hcHBlZCBwaXJxLCBsb29rdXAgcmFkaXggdHJlZSB3 aXRoIGFic29sdXRlIHZhbHVlICovCj4+ICsgICAgICAgIGlmICggcGlycSA8IDApCj4+ICsgICAg ICAgICAgICBwaXJxID0gLXBpcnE7Cj4KPkknbSBub3Qgc3VyZSBJIGZvbGxvdywgdGhlIHBpcnEg aGFzbid0IGJlZW4gdW5tYXBwZWQgYXQgdGhpcyBwb2ludAo+eWV0PwoKUWVtdSAoaS5lLiBjb21w cm9taXNlZCBxZW11KSBoYXMgdGhlIGFiaWxpdHkgdG8gZG8gdGhpcy4gUmlnaHQ/IHdlIGNhbid0 CmFzc2VydCB0aGUgcGlycSBoYXNuJ3QgYmVlbiB1bm1hcHBlZCBoZXJlLgoKPgo+PiArCj4+ICsg ICAgICAgIGluZm8gPSBwaXJxX2luZm8ocGRldi0+ZG9tYWluLCBwaXJxKTsKPj4gKyAgICAgICAg aWYgKCAhaW5mbyApCj4+ICsgICAgICAgICAgICBjb250aW51ZTsKPj4gKyAgICAgICAgcGlycV9k cGNpID0gcGlycV9kcGNpKGluZm8pOwo+PiArCj4+ICsgICAgICAgIGlmICggcGlycV9kcGNpICYm Cj4+ICsgICAgICAgICAgICAgKHBpcnFfZHBjaS0+ZmxhZ3MgJiBIVk1fSVJRX0RQQ0lfTUFDSF9N U0kpICYmCj4+ICsgICAgICAgICAgICAgKHBpcnFfZHBjaS0+ZmxhZ3MgJiBIVk1fSVJRX0RQQ0lf R1VFU1RfTVNJKSApCj4+ICsgICAgICAgICAgICBwdF9pcnFfZGVzdHJveV9iaW5kX21zaShwZGV2 LT5kb21haW4sIGluZm8pOwo+Cj5JIHRoaW5rIHRoaXMgaXMgbWlzc2luZyB1bmJpbmRpbmcgZm9y IGdyb3VwIE1TSSBpbnRlcnJ1cHRzLCB5b3Ugc2hvdWxkCj5jaGVjayB0aGUgdHlwZSBhbmQgaWYg aXQncyBNU0kgKG5vdCBNU0lYKSBpdGVyYXRlIG92ZXIgdGhlIG51bWJlciBvZgo+dmVjdG9ycyBp biBtc2kubnZlYyBpbiBvcmRlciB0byB1bmJpbmQgdGhlbT8KCkdvb2QgY2F0Y2guCgpUaGFua3MK Q2hhbwoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVu LWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6 Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL3hlbi1kZXZlbA==