From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chao Gao Subject: Re: [PATCH v5 1/3] xen/pt: fix some pass-thru devices don't work across reboot Date: Tue, 22 Jan 2019 13:50:20 +0800 Message-ID: <20190122055015.GA19297@gao-cwp> References: <1547626652-23384-1-git-send-email-chao.gao@intel.com> <20190116103823.2h5kjq77y2nmhfn4@mac> 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 1glou9-0002CI-Q4 for xen-devel@lists.xenproject.org; Tue, 22 Jan 2019 05:47:21 +0000 Content-Disposition: inline In-Reply-To: <20190116103823.2h5kjq77y2nmhfn4@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 T24gV2VkLCBKYW4gMTYsIDIwMTkgYXQgMTE6Mzg6MjNBTSArMDEwMCwgUm9nZXIgUGF1IE1vbm7D qSB3cm90ZToKPk9uIFdlZCwgSmFuIDE2LCAyMDE5IGF0IDA0OjE3OjMwUE0gKzA4MDAsIENoYW8g 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+Cj5UaGFua3MsIEkgdGhpbmsgdGhlIGFwcHJvYWNoIGlzIGZpbmUsIGp1c3QgYSBjb3Vw bGUgb2YgY29tbWVudHMuCj4KPj4gU2lnbmVkLW9mZi1ieTogQ2hhbyBHYW8gPGNoYW8uZ2FvQGlu dGVsLmNvbT4KPj4gLS0tCj4+IENoYW5nZXMgaW4gdjU6Cj4+ICAtIGZpeCB0aGUgcG90ZW50aWFs IGluZmluaXRlIGxvb3AKPj4gIC0gYXNzZXJ0IHRoYXQgdW5tYXBfZG9tYWluX3BpcnEoKSB3b24n dCBmYWlsCj4+ICAtIGFzc2VydCBtc2lfbGlzdCBpcyBlbXB0eSBhZnRlciB0aGUgbG9vcCBpbiBw Y2lfdW5tYXBfbXNpCj4+ICAtIHByb3ZpZGUgYSBzdHViIGZvciBwdF9pcnFfZGVzdHJveV9iaW5k X21zaSgpIGlmICFDT05GSUdfSFZNIHRvIGZpeCBhCj4+ICAgIGNvbXBpbGF0aW9uIGVycm9yIHdo ZW4gYnVpbGRpbmcgUFZTaGltCj4+IAo+PiBDaGFuZ2VzIGluIHY0Ogo+PiAgLSBzcGxpdCBvdXQg Y2hhbmdlIHRvICdtc2l4LT53YXJuZWQnIGZpZWxkCj4+ICAtIGhhbmRsZSBtdWx0aXBsZSBtc2kg Y2FzZXMKPj4gIC0gdXNlIGxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbCB0byB0cmF2ZXJzZSAncGRl di0+bXNpX2xpc3QnCj4+IC0tLQo+PiAgeGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvaW8uYyAgfCA1 NyArKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLQo+PiAgeGVuL2RyaXZlcnMv cGFzc3Rocm91Z2gvcGNpLmMgfCA2NCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrCj4+ICB4ZW4vaW5jbHVkZS94ZW4vaW9tbXUuaCAgICAgICB8ICA0ICsrKwo+PiAg MyBmaWxlcyBjaGFuZ2VkLCAxMDcgaW5zZXJ0aW9ucygrKSwgMTggZGVsZXRpb25zKC0pCj4+IAo+ PiBkaWZmIC0tZ2l0IGEveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvaW8uYyBiL3hlbi9kcml2ZXJz L3Bhc3N0aHJvdWdoL2lvLmMKPj4gaW5kZXggYTZlYjhhNC4uNTZlZTFlZiAxMDA2NDQKPj4gLS0t IGEveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvaW8uYwo+PiArKysgYi94ZW4vZHJpdmVycy9wYXNz dGhyb3VnaC9pby5jCj4+IEBAIC02MTksNiArNjE5LDQyIEBAIGludCBwdF9pcnFfY3JlYXRlX2Jp bmQoCj4+ICAgICAgcmV0dXJuIDA7Cj4+ICB9Cj4+ICAKPj4gK3N0YXRpYyB2b2lkIHB0X2lycV9k ZXN0cm95X2JpbmRfY29tbW9uKHN0cnVjdCBkb21haW4gKmQsIHN0cnVjdCBwaXJxICpwaXJxKQo+ PiArewo+PiArICAgIHN0cnVjdCBodm1fcGlycV9kcGNpICpwaXJxX2RwY2kgPSBwaXJxX2RwY2ko cGlycSk7Cj4+ICsKPj4gKyAgICBBU1NFUlQoc3Bpbl9pc19sb2NrZWQoJmQtPmV2ZW50X2xvY2sp KTsKPj4gKwo+PiArICAgIGlmICggcGlycV9kcGNpICYmIChwaXJxX2RwY2ktPmZsYWdzICYgSFZN X0lSUV9EUENJX01BUFBFRCkgJiYKPj4gKyAgICAgICAgIGxpc3RfZW1wdHkoJnBpcnFfZHBjaS0+ ZGlnbF9saXN0KSApCj4+ICsgICAgewo+PiArICAgICAgICBwaXJxX2d1ZXN0X3VuYmluZChkLCBw aXJxKTsKPj4gKyAgICAgICAgbXNpeHRibF9wdF91bnJlZ2lzdGVyKGQsIHBpcnEpOwo+PiArICAg ICAgICBpZiAoIHB0X2lycV9uZWVkX3RpbWVyKHBpcnFfZHBjaS0+ZmxhZ3MpICkKPj4gKyAgICAg ICAgICAgIGtpbGxfdGltZXIoJnBpcnFfZHBjaS0+dGltZXIpOwo+PiArICAgICAgICBwaXJxX2Rw Y2ktPmZsYWdzID0gMDsKPj4gKyAgICAgICAgLyoKPj4gKyAgICAgICAgICogU2VlIGNvbW1lbnQg aW4gcHRfaXJxX2NyZWF0ZV9iaW5kJ3MgUFRfSVJRX1RZUEVfTVNJIGJlZm9yZSB0aGUKPj4gKyAg ICAgICAgICogY2FsbCB0byBwdF9waXJxX3NvZnRpcnFfcmVzZXQuCj4+ICsgICAgICAgICAqLwo+ PiArICAgICAgICBwdF9waXJxX3NvZnRpcnFfcmVzZXQocGlycV9kcGNpKTsKPj4gKwo+PiArICAg ICAgICBwaXJxX2NsZWFudXBfY2hlY2socGlycSwgZCk7Cj4+ICsgICAgfQo+PiArfQo+PiArCj4+ ICt2b2lkIHB0X2lycV9kZXN0cm95X2JpbmRfbXNpKHN0cnVjdCBkb21haW4gKmQsIHN0cnVjdCBw aXJxICpwaXJxKQo+PiArewo+PiArICAgIHN0cnVjdCBodm1fcGlycV9kcGNpICpwaXJxX2RwY2kg PSBwaXJxX2RwY2kocGlycSk7Cj4KPmNvbnN0Cj4KPj4gKwo+PiArICAgIEFTU0VSVChzcGluX2lz X2xvY2tlZCgmZC0+ZXZlbnRfbG9jaykpOwo+PiArCj4+ICsgICAgaWYgKCBwaXJxX2RwY2kgJiYg cGlycV9kcGNpLT5nbXNpLnBvc3RlZCApCj4+ICsgICAgICAgIHBpX3VwZGF0ZV9pcnRlKE5VTEws IHBpcnEsIDApOwo+PiArCj4+ICsgICAgcHRfaXJxX2Rlc3Ryb3lfYmluZF9jb21tb24oZCwgcGly cSk7Cj4+ICt9Cj4+ICsKPj4gIGludCBwdF9pcnFfZGVzdHJveV9iaW5kKAo+PiAgICAgIHN0cnVj dCBkb21haW4gKmQsIGNvbnN0IHN0cnVjdCB4ZW5fZG9tY3RsX2JpbmRfcHRfaXJxICpwdF9pcnFf YmluZCkKPj4gIHsKPj4gQEAgLTcyNywyNiArNzYzLDExIEBAIGludCBwdF9pcnFfZGVzdHJveV9i aW5kKAo+PiAgICAgICAgICB9Cj4+ICAgICAgICAgIGVsc2UKPj4gICAgICAgICAgICAgIHdoYXQg PSAiYm9ndXMiOwo+PiAtICAgIH0KPj4gLSAgICBlbHNlIGlmICggcGlycV9kcGNpICYmIHBpcnFf ZHBjaS0+Z21zaS5wb3N0ZWQgKQo+PiAtICAgICAgICBwaV91cGRhdGVfaXJ0ZShOVUxMLCBwaXJx LCAwKTsKPj4gLQo+PiAtICAgIGlmICggcGlycV9kcGNpICYmIChwaXJxX2RwY2ktPmZsYWdzICYg SFZNX0lSUV9EUENJX01BUFBFRCkgJiYKPj4gLSAgICAgICAgIGxpc3RfZW1wdHkoJnBpcnFfZHBj aS0+ZGlnbF9saXN0KSApCj4+IC0gICAgewo+PiAtICAgICAgICBwaXJxX2d1ZXN0X3VuYmluZChk LCBwaXJxKTsKPj4gLSAgICAgICAgbXNpeHRibF9wdF91bnJlZ2lzdGVyKGQsIHBpcnEpOwo+PiAt ICAgICAgICBpZiAoIHB0X2lycV9uZWVkX3RpbWVyKHBpcnFfZHBjaS0+ZmxhZ3MpICkKPj4gLSAg ICAgICAgICAgIGtpbGxfdGltZXIoJnBpcnFfZHBjaS0+dGltZXIpOwo+PiAtICAgICAgICBwaXJx X2RwY2ktPmZsYWdzID0gMDsKPj4gLSAgICAgICAgLyoKPj4gLSAgICAgICAgICogU2VlIGNvbW1l bnQgaW4gcHRfaXJxX2NyZWF0ZV9iaW5kJ3MgUFRfSVJRX1RZUEVfTVNJIGJlZm9yZSB0aGUKPj4g LSAgICAgICAgICogY2FsbCB0byBwdF9waXJxX3NvZnRpcnFfcmVzZXQuCj4+IC0gICAgICAgICAq Lwo+PiAtICAgICAgICBwdF9waXJxX3NvZnRpcnFfcmVzZXQocGlycV9kcGNpKTsKPj4gIAo+PiAt ICAgICAgICBwaXJxX2NsZWFudXBfY2hlY2socGlycSwgZCk7Cj4+ICsgICAgICAgIHB0X2lycV9k ZXN0cm95X2JpbmRfY29tbW9uKGQsIHBpcnEpOwo+PiAgICAgIH0KPj4gKyAgICBlbHNlCj4+ICsg ICAgICAgIHB0X2lycV9kZXN0cm95X2JpbmRfbXNpKGQsIHBpcnEpOwo+PiAgCj4+ICAgICAgc3Bp bl91bmxvY2soJmQtPmV2ZW50X2xvY2spOwo+PiAgCj4+IGRpZmYgLS1naXQgYS94ZW4vZHJpdmVy cy9wYXNzdGhyb3VnaC9wY2kuYyBiL3hlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL3BjaS5jCj4+IGlu ZGV4IDkzYzIwYjkuLjRmMmJlMDIgMTAwNjQ0Cj4+IC0tLSBhL3hlbi9kcml2ZXJzL3Bhc3N0aHJv dWdoL3BjaS5jCj4+ICsrKyBiL3hlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL3BjaS5jCj4+IEBAIC0x NTE0LDYgKzE1MTQsNjggQEAgc3RhdGljIGludCBhc3NpZ25fZGV2aWNlKHN0cnVjdCBkb21haW4g KmQsIHUxNiBzZWcsIHU4IGJ1cywgdTggZGV2Zm4sIHUzMiBmbGFnKQo+PiAgICAgIHJldHVybiBy YzsKPj4gIH0KPj4gIAo+PiArLyoKPj4gKyAqIFVubWFwIGVzdGFibGlzaGVkIG1hcHBpbmdzIGJl dHdlZW4gZG9tYWluJ3MgcGlycSBhbmQgZGV2aWNlJ3MgTVNJLgo+PiArICogVGhlc2UgbWFwcGlu Z3Mgd2VyZSBzZXQgdXAgYnkgcWVtdS9ndWVzdCBhbmQgYXJlIGV4cGVjdGVkIHRvIGJlCj4+ICsg KiBkZXN0cm95ZWQgd2hlbiBjaGFuZ2luZyB0aGUgZGV2aWNlJ3Mgb3duZXJzaGlwLgo+PiArICov Cj4+ICtzdGF0aWMgdm9pZCBwY2lfdW5tYXBfbXNpKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQo+PiAr ewo+PiArICAgIHN0cnVjdCBtc2lfZGVzYyAqZW50cnksICp0bXA7Cj4+ICsgICAgc3RydWN0IGRv bWFpbiAqZCA9IHBkZXYtPmRvbWFpbjsKPj4gKwo+PiArICAgIEFTU0VSVChwY2lkZXZzX2xvY2tl ZCgpKTsKPj4gKyAgICBBU1NFUlQoZCk7Cj4+ICsKPj4gKyAgICBzcGluX2xvY2soJmQtPmV2ZW50 X2xvY2spOwo+PiArICAgIGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlbnRyeSwgdG1wLCAmcGRl di0+bXNpX2xpc3QsIGxpc3QpCj4+ICsgICAgewo+PiArICAgICAgICBzdHJ1Y3QgcGlycSAqaW5m bzsKPj4gKyAgICAgICAgaW50IHJldCwgcGlycSA9IDA7Cj4+ICsgICAgICAgIHVuc2lnbmVkIGlu dCBuciA9IGVudHJ5LT5tc2lfYXR0cmliLnR5cGUgIT0gUENJX0NBUF9JRF9NU0lYCj4+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgID8gZW50cnktPm1zaS5udmVjIDogMTsKPgo+SSB0aGluayB5 b3Ugc2hvdWxkIG1hc2sgdGhlIGVudHJ5LCBsaWtlIGl0J3MgZG9uZSBpbgo+cHRfaXJxX2Rlc3Ry b3lfYmluZCwgc2VlIHRoZSBjYWxsIHRvIGd1ZXN0X21hc2tfbXNpX2lycS4gVGhhdCBnaXZlcyBh Cj5jb25zaXN0ZW50IHN0YXRlIGJldHdlZW4gYmluZCBhbmQgdW5iaW5kLgo+Cj4+ICsKPj4gKyAg ICAgICAgd2hpbGUgKCBuci0tICkKPj4gKyAgICAgICAgewo+PiArICAgICAgICAgICAgc3RydWN0 IGh2bV9waXJxX2RwY2kgKnBpcnFfZHBjaTsKPgo+Tml0OiB5b3UgY291bGQgcmVkdWNlIHRoZSBz Y29wZSBvZiBpbmZvIGJ5IGRlY2xhcmluZyBpdCBoZXJlIEFGQUlDVC4KPgo+PiArCj4+ICsgICAg ICAgICAgICBwaXJxID0gZG9tYWluX2lycV90b19waXJxKGQsIGVudHJ5W25yXS5pcnEpOwo+PiAr ICAgICAgICAgICAgV0FSTl9PTihwaXJxIDwgMCk7Cj4+ICsgICAgICAgICAgICBpZiAoIHBpcnEg PD0gMCApCj4+ICsgICAgICAgICAgICAgICAgY29udGludWU7Cj4+ICsKPj4gKyAgICAgICAgICAg IGluZm8gPSBwaXJxX2luZm8oZCwgcGlycSk7Cj4+ICsgICAgICAgICAgICBpZiAoICFpbmZvICkK Pj4gKyAgICAgICAgICAgICAgICBjb250aW51ZTsKPj4gKwo+PiArICAgICAgICAgICAgcGlycV9k cGNpID0gcGlycV9kcGNpKGluZm8pOwo+PiArICAgICAgICAgICAgaWYgKCBwaXJxX2RwY2kgJiYK Pj4gKyAgICAgICAgICAgICAgICAgKHBpcnFfZHBjaS0+ZmxhZ3MgJiBIVk1fSVJRX0RQQ0lfTUFD SF9NU0kpICYmCj4+ICsgICAgICAgICAgICAgICAgIChwaXJxX2RwY2ktPmZsYWdzICYgSFZNX0lS UV9EUENJX0dVRVNUX01TSSkgKQo+PiArICAgICAgICAgICAgICAgIHB0X2lycV9kZXN0cm95X2Jp bmRfbXNpKGQsIGluZm8pOwo+PiArICAgICAgICB9Cj4+ICsKPj4gKyAgICAgICAgaWYgKCBwaXJx ID4gMCApCj4+ICsgICAgICAgIHsKPj4gKyAgICAgICAgICAgIC8qCj4+ICsgICAgICAgICAgICAg KiBUaGUgcGlycSBpcyBkZXJpdmVkIGZyb20gYW4gZW50cnkgaW4gbXNpX2xpc3QgcmF0aGVyIHRo YW4gYW4KPj4gKyAgICAgICAgICAgICAqIGFyYml0cmFyeSB2YWx1ZSBwYXNzZWQgZG93bi4gVGhl cmUgc2hvdWxkIGJlIGEgaXJxIChtc2kpIG1hcHBlZAo+PiArICAgICAgICAgICAgICogdG8gdGhp cyBwaXJxLiBJbiB0aGlzIGNhc2UsIHVubWFwcGluZyB0aGlzIHBpcnEgc2hvdWxkIHN1Y2NlZWQu Cj4+ICsgICAgICAgICAgICAgKiBPdGhlcndpc2UsIHNvbWV0aGluZyBnb2VzIHdyb25nLgo+PiAr ICAgICAgICAgICAgICovCj4+ICsgICAgICAgICAgICByZXQgPSB1bm1hcF9kb21haW5fcGlycShk LCBwaXJxKTsKPj4gKyAgICAgICAgICAgIEFTU0VSVCghcmV0KTsKPgo+dW5tYXBfZG9tYWluX3Bp cnEgY2FuIGZhaWwsIHdoeSBub3QgbWFrZSBwY2lfdW5tYXBfbXNpIHJldHVybiBhbiBpbnQKPmFu ZCBwcm9wYWdhdGUgdGhlIGVycm9yIHRvIHRoZSBjYWxsZXI/Cj4KPmRlYXNzaWduX2RldmljZSBy ZXR1cm5pbmcgYW4gZXJyb3Igc2hvdWxkIGFsc28gYmUgZmluZS4KPgo+PiArICAgICAgICB9Cj4+ ICsgICAgfQo+PiArICAgIC8qCj4+ICsgICAgICogQWxsIHBpcnEtcyBzaG91bGQgaGF2ZSBiZWVu IHVubWFwcGVkIGFuZCBjb3JyZXNwb25kaW5nIG1zaV9kZXNjCj4+ICsgICAgICogZW50cmllcyBz aG91bGQgaGF2ZSBiZWVuIHJlbW92ZWQgaW4gdGhlIGFib3ZlIGxvb3AuCj4+ICsgICAgICovCj4+ ICsgICAgQVNTRVJUKGxpc3RfZW1wdHkoJnBkZXYtPm1zaV9saXN0KSk7Cj4+ICsKPj4gKyAgICBz cGluX3VubG9jaygmZC0+ZXZlbnRfbG9jayk7Cj4+ICt9Cj4+ICsKPj4gIC8qIGNhbGxlciBzaG91 bGQgaG9sZCB0aGUgcGNpZGV2c19sb2NrICovCj4+ICBpbnQgZGVhc3NpZ25fZGV2aWNlKHN0cnVj dCBkb21haW4gKmQsIHUxNiBzZWcsIHU4IGJ1cywgdTggZGV2Zm4pCj4+ICB7Cj4+IEBAIC0xNTI5 LDYgKzE1OTEsOCBAQCBpbnQgZGVhc3NpZ25fZGV2aWNlKHN0cnVjdCBkb21haW4gKmQsIHUxNiBz ZWcsIHU4IGJ1cywgdTggZGV2Zm4pCj4+ICAgICAgaWYgKCAhcGRldiApCj4+ICAgICAgICAgIHJl dHVybiAtRU5PREVWOwo+PiAgCj4+ICsgICAgcGNpX3VubWFwX21zaShwZGV2KTsKPgo+SnVzdCB3 YW50IHRvIG1ha2Ugc3VyZSwgc2luY2UgZGVhc3NpZ25fZGV2aWNlIHdpbGwgYmUgY2FsbGVkIGZv ciBib3RoCj5QViBhbmQgSFZNIGRvbWFpbnMuIEFGQUlDVCBwY2lfdW5tYXBfbXNpIGlzIHNhZmUg dG8gY2FsbCB3aGVuIHRoZQo+ZGV2aWNlIGlzIGFzc2lnbmVkIHRvIGEgUFYgZ3Vlc3QsIGJ1dCB3 b3VsZCBsaWtlIHlvdXIgY29uZmlybWF0aW9uLgoKVGVzdGVkIHdpdGggYSBQViBndWVzdCBsb2Fk ZWQgYnkgUHlncnViLiBQViBndWVzdCBkb2Vzbid0IHN1ZmZlciB0aGUKbXNpLXggaXNzdWUgSSB3 YW50IHRvIGZpeC4KCldpdGggdGhlc2UgdGhyZWUgcGF0Y2hlcyBhcHBsaWVkLCBJIGdvdCBzb21l IGVycm9yIG1lc3NhZ2VzIGZyb20gWGVuCmFuZCBEb20wIGFzIGZvbGxvdzoKCihYRU4pIGlycS5j OjIxNzY6IGRvbTM6IGZvcmNpbmcgdW5iaW5kIG9mIHBpcnEgMzMyCihYRU4pIGlycS5jOjIxNzY6 IGRvbTM6IGZvcmNpbmcgdW5iaW5kIG9mIHBpcnEgMzMxCihYRU4pIGlycS5jOjIxNzY6IGRvbTM6 IGZvcmNpbmcgdW5iaW5kIG9mIHBpcnEgMzI4CihYRU4pIGlycS5jOjIxNDg6IGRvbTM6IHBpcnEg MzU5IG5vdCBtYXBwZWQKWyAyODg3LjA2NzY4NV0geGVuOmV2ZW50czogdW5tYXAgaXJxIGZhaWxl ZCAtMjIKKFhFTikgaXJxLmM6MjE0ODogZG9tMzogcGlycSAzNTggbm90IG1hcHBlZApbIDI4ODcu MDc1OTE3XSB4ZW46ZXZlbnRzOiB1bm1hcCBpcnEgZmFpbGVkIC0yMgooWEVOKSBpcnEuYzoyMTQ4 OiBkb20zOiBwaXJxIDM1NyBub3QgbWFwcGVkCgpJdCBzZWVtcywgdGhlIGNhdXNlIG9mIHN1Y2gg ZXJyb3IgaXMgdGhhdCBwaXJxLXMgYXJlIHVubWFwcGVkIGFuZCBmb3JjaWJseQp1bmJvdW5kIG9u IGRlYXNzaWdubWVudDsgc3Vic2VxdWVudCB1bm1hcHBpbmcgcGlycSBpc3N1ZWQgYnkgZG9tMCBm YWlsLgpGcm9tIHNvbWUgYXNwZWN0cywgdGhpcyBlcnJvciBpcyBleHBlY3RlZC4gQmVjYXVzZSB3 aXRoIHRoaXMgcGF0Y2gsCnBpcnEtcyBhcmUgZXhwZWN0ZWQgdG8gYmUgbWFwcGVkIGJ5IHFlbXUg b3IgZG9tMCBrZXJuZWwgKGZvciBwdiBjYXNlKSBiZWZvcmUKZGVhc3NpZ25tZW50IGFuZCBtYXBw aW5nL2JpbmRpbmcgcGlycSBhZnRlciBkZWFzc2lnbm1lbnQgc2hvdWxkIGZhaWwuCgpTbyB3aGF0 J3MgeW91ciBvcGluaW9uIG9uIGhhbmRsaW5nIHN1Y2ggZXJyb3I/IFdlIHNob3VsZCBmaWd1cmUg b3V0IGFub3RoZXIKbWV0aG9kIHRvIGZpeCBtc2kteCBpc3N1ZSB0byBhdm9pZCBzdWNoIGVycm9y IG9yIHN1cHByZXNzIHRoZXNlIGVycm9ycyBpbgpxZW11IGFuZCBsaW51eCBrZXJuZWw/CgpUaGFu a3MKQ2hhbwoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K WGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0 cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL3hlbi1kZXZlbA==