From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Liu Subject: Re: [PATCH 5/6] libxl: add HVM usb passthrough support Date: Thu, 15 Sep 2016 16:38:20 +0100 Message-ID: <20160915153820.GQ15958@citrix.com> References: <1473319226-27221-1-git-send-email-jgross@suse.com> <1473319226-27221-6-git-send-email-jgross@suse.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <1473319226-27221-6-git-send-email-jgross@suse.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Juergen Gross Cc: George.Dunlap@eu.citrix.com, wei.liu2@citrix.com, ian.jackson@eu.citrix.com, xen-devel@lists.xen.org List-Id: xen-devel@lists.xenproject.org T24gVGh1LCBTZXAgMDgsIDIwMTYgYXQgMDk6MjA6MjVBTSArMDIwMCwgSnVlcmdlbiBHcm9zcyB3 cm90ZToKPiBBZGQgSFZNIHVzYiBwYXNzdGhyb3VnaCBzdXBwb3J0IHRvIGxpYnhsIGJ5IHVzaW5n IHFlbXUncyBjYXBhYmlsaXR5Cj4gdG8gZW11bGF0ZSBzdGFuZGFyZCBVU0IgY29udHJvbGxlcnMu Cj4gCj4gQSBVU0IgY29udHJvbGxlciBpcyBhZGRlZCB2aWEgcW1wIGNvbW1hbmQgdG8gdGhlIGVt dWxhdGVkIGhhcmR3YXJlCj4gd2hlbiBhIHVzYmN0cmwgZGV2aWNlIG9mIHR5cGUgREVWSUNFTU9E RUwgaXMgcmVxdWVzdGVkLiBEZXBlbmRpbmcgb24KPiB0aGUgcmVxdWVzdGVkIHNwZWVkIHRoZSBh cHByb3ByaWF0ZSBoYXJkd2FyZSB0eXBlIGlzIHNlbGVjdGVkLiBBIGhvc3QKPiBVU0IgZGV2aWNl IGNhbiB0aGVuIGJlIGFkZGVkIHRvIHRoZSBlbXVsYXRlZCBVU0IgY29udHJvbGxlciB2aWEgcW1w Cj4gY29tbWFuZC4KPiAKPiBSZW1vdmluZyBvZiB0aGUgZGV2aWNlcyBpcyBkb25lIHZpYSBxbXAg Y29tbWFuZHMsIHRvby4KCk92ZXJhbGwgdGhlIGNvZGUgbG9va3MgcGxhdXNpYmxlLiBCdXQgdGhl IGNvZGUgc2VlbXMgdG8gZG8gbW9yZSB0aGFuCndoYXQgaXMgc3RhdGVkIGluIGNvbW1pdCBtZXNz YWdlLiBTb21lIGNvbW1lbnRzIGJlbG93LgoKPiAKPiBTaWduZWQtb2ZmLWJ5OiBKdWVyZ2VuIEdy b3NzIDxqZ3Jvc3NAc3VzZS5jb20+Cj4gLS0tCj4gIHRvb2xzL2xpYnhsL2xpYnhsX2RldmljZS5j IHwgICAzICstCj4gIHRvb2xzL2xpYnhsL2xpYnhsX3VzYi5jICAgIHwgNDE3ICsrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLQo+ICB0b29scy9saWJ4bC94bF9jbWRp bXBsLmMgICB8ICAgNCArLQo+ICAzIGZpbGVzIGNoYW5nZWQsIDMzMSBpbnNlcnRpb25zKCspLCA5 MyBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEvdG9vbHMvbGlieGwvbGlieGxfZGV2aWNl LmMgYi90b29scy9saWJ4bC9saWJ4bF9kZXZpY2UuYwo+IGluZGV4IDUyMTFmMjAuLmM2ZjE1ZGIg MTAwNjQ0Cj4gLS0tIGEvdG9vbHMvbGlieGwvbGlieGxfZGV2aWNlLmMKPiArKysgYi90b29scy9s aWJ4bC9saWJ4bF9kZXZpY2UuYwo+IEBAIC03ODIsOCArNzgyLDcgQEAgdm9pZCBsaWJ4bF9fZGV2 aWNlc19kZXN0cm95KGxpYnhsX19lZ2MgKmVnYywgbGlieGxfX2RldmljZXNfcmVtb3ZlX3N0YXRl ICpkcnMpCj4gICAgICAgICAgICAgICAgICBhb2Rldi0+YWN0aW9uID0gTElCWExfX0RFVklDRV9B Q1RJT05fUkVNT1ZFOwo+ICAgICAgICAgICAgICAgICAgYW9kZXYtPmRldiA9IGRldjsKPiAgICAg ICAgICAgICAgICAgIGFvZGV2LT5mb3JjZSA9IGRycy0+Zm9yY2U7Cj4gLSAgICAgICAgICAgICAg ICBpZiAoZGV2LT5iYWNrZW5kX2tpbmQgPT0gTElCWExfX0RFVklDRV9LSU5EX1ZVU0IgfHwKPiAt ICAgICAgICAgICAgICAgICAgICBkZXYtPmJhY2tlbmRfa2luZCA9PSBMSUJYTF9fREVWSUNFX0tJ TkRfUVVTQikKPiArICAgICAgICAgICAgICAgIGlmIChkZXYtPmtpbmQgPT0gTElCWExfX0RFVklD RV9LSU5EX1ZVU0IpCgpUaGlzIGxvb2tzIGEgYml0IHN1c3BpY2lvdXMgdG8gbWUuIFRoaXMgY291 bGQgYmUgcmF0aGVyIG9idmlvdXMgYnV0IEknbQpub3Qgc3VyZSBiZWNhdXNlIEkgZGlkbid0IGZv bGxvdyBjbG9zZWx5IG9uIHRoZSBvdmVyYWxsIGRlc2lnbiBvZiBQViAvCkhWTSBVU0IgcGFzc3Ro cm91Z2guCgpBSVVJOgoKVlVTQiAtPiBQViBVU0Igd2l0aCBpbi1rZXJuZWwgYmFja2VuZApRVVNC IC0+IFBWIFVTQiB3aXRoIFFFTVUgYmFja2VuZAoKV2h5IGlzIFFVU0IgZGVsZXRlZCBoZXJlPwoK SWYgdGhlcmUgaXMgcmVmYWN0b3JpbmcgaW52b2x2ZWQsIGNhbiB0aGF0IGJlIHNlcGFyYXRlZCBv dXQ/Cgo+ICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX19pbml0aWF0ZV9kZXZpY2VfdXNiY3Ry bF9yZW1vdmUoZWdjLCBhb2Rldik7Cj4gICAgICAgICAgICAgICAgICBlbHNlCj4gICAgICAgICAg ICAgICAgICAgICAgbGlieGxfX2luaXRpYXRlX2RldmljZV9nZW5lcmljX3JlbW92ZShlZ2MsIGFv ZGV2KTsKPiBkaWZmIC0tZ2l0IGEvdG9vbHMvbGlieGwvbGlieGxfdXNiLmMgYi90b29scy9saWJ4 bC9saWJ4bF91c2IuYwo+IGluZGV4IDZiMzBlMGYuLjQwYzVhODQgMTAwNjQ0Cj4gLS0tIGEvdG9v bHMvbGlieGwvbGlieGxfdXNiLmMKPiArKysgYi90b29scy9saWJ4bC9saWJ4bF91c2IuYwo+IEBA IC0xNyw2ICsxNyw3IEBACj4gIAo+ICAjaW5jbHVkZSAibGlieGxfaW50ZXJuYWwuaCIKPiAgI2lu Y2x1ZGUgPGludHR5cGVzLmg+Cj4gKyNpbmNsdWRlIDx4ZW4vaW8vdXNiaWYuaD4KPiAgCj4gICNk ZWZpbmUgVVNCQkFDS19JTkZPX1BBVEggIi9saWJ4bC91c2JiYWNrIgo+ICAKPiBAQCAtNDMsMTIg KzQ0LDYgQEAgc3RhdGljIGludCBsaWJ4bF9fZGV2aWNlX3VzYmN0cmxfc2V0ZGVmYXVsdChsaWJ4 bF9fZ2MgKmdjLCB1aW50MzJfdCBkb21pZCwKPiAgICAgIGludCByYzsKPiAgICAgIGxpYnhsX2Rv bWFpbl90eXBlIGRvbXR5cGUgPSBsaWJ4bF9fZG9tYWluX3R5cGUoZ2MsIGRvbWlkKTsKPiAgCj4g LSAgICBpZiAoIXVzYmN0cmwtPnZlcnNpb24pCj4gLSAgICAgICAgdXNiY3RybC0+dmVyc2lvbiA9 IDI7Cj4gLQo+IC0gICAgaWYgKCF1c2JjdHJsLT5wb3J0cykKPiAtICAgICAgICB1c2JjdHJsLT5w b3J0cyA9IDg7Cj4gLQo+ICAgICAgaWYgKHVzYmN0cmwtPnR5cGUgPT0gTElCWExfVVNCQ1RSTF9U WVBFX0FVVE8pIHsKPiAgICAgICAgICBpZiAoZG9tdHlwZSA9PSBMSUJYTF9ET01BSU5fVFlQRV9Q Vikgewo+ICAgICAgICAgICAgICByYyA9IHVzYmJhY2tfaXNfbG9hZGVkKGdjKTsKPiBAQCAtNjIs NiArNTcsNjcgQEAgc3RhdGljIGludCBsaWJ4bF9fZGV2aWNlX3VzYmN0cmxfc2V0ZGVmYXVsdChs aWJ4bF9fZ2MgKmdjLCB1aW50MzJfdCBkb21pZCwKPiAgICAgICAgICB9Cj4gICAgICB9Cj4gIAo+ ICsgICAgc3dpdGNoICh1c2JjdHJsLT50eXBlKSB7Cj4gKyAgICBjYXNlIExJQlhMX1VTQkNUUkxf VFlQRV9QVjoKPiArICAgIGNhc2UgTElCWExfVVNCQ1RSTF9UWVBFX1FVU0I6Cj4gKyAgICAgICAg aWYgKCF1c2JjdHJsLT52ZXJzaW9uKQo+ICsgICAgICAgICAgICB1c2JjdHJsLT52ZXJzaW9uID0g MjsKPiArICAgICAgICBpZiAodXNiY3RybC0+dmVyc2lvbiA8IDEgfHwgdXNiY3RybC0+dmVyc2lv biA+IDIpIHsKPiArICAgICAgICAgICAgTE9HKEVSUk9SLCAiVVNCIHZlcnNpb24gZm9yIHBhcmF2 aXJ0dWFsaXplZCBkZXZpY2VzIG11c3QgYmUgMSBvciAyIik7Cj4gKyAgICAgICAgICAgIHJjID0g RVJST1JfSU5WQUw7Cj4gKyAgICAgICAgICAgIGdvdG8gb3V0Owo+ICsgICAgICAgIH0KPiArICAg ICAgICBpZiAoIXVzYmN0cmwtPnBvcnRzKQo+ICsgICAgICAgICAgICB1c2JjdHJsLT5wb3J0cyA9 IDg7Cj4gKyAgICAgICAgaWYgKHVzYmN0cmwtPnBvcnRzIDwgMSB8fCB1c2JjdHJsLT5wb3J0cyA+ IFVTQklGX01BWF9QT1JUTlIpIHsKPiArICAgICAgICAgICAgTE9HKEVSUk9SLCAiTnVtYmVyIG9m IHBvcnRzIGZvciBVU0IgY29udHJvbGxlciBpcyBsaW1pdGVkIHRvICV1IiwKPiArICAgICAgICAg ICAgICAgIFVTQklGX01BWF9QT1JUTlIpOwo+ICsgICAgICAgICAgICByYyA9IEVSUk9SX0lOVkFM Owo+ICsgICAgICAgICAgICBnb3RvIG91dDsKPiArICAgICAgICB9Cj4gKyAgICAgICAgYnJlYWs7 Cj4gKyAgICBjYXNlIExJQlhMX1VTQkNUUkxfVFlQRV9ERVZJQ0VNT0RFTDoKPiArICAgICAgICBp ZiAoIXVzYmN0cmwtPnZlcnNpb24pCj4gKyAgICAgICAgICAgIHVzYmN0cmwtPnZlcnNpb24gPSAy Owo+ICsgICAgICAgIHN3aXRjaCAodXNiY3RybC0+dmVyc2lvbikgewo+ICsgICAgICAgIGNhc2Ug MToKPiArICAgICAgICAgICAgLyogdWhjaSBjb250cm9sbGVyIGluIHFlbXUgaGFzIGZpeGVkIG51 bWJlciBvZiBwb3J0cy4gKi8KPiArICAgICAgICAgICAgaWYgKHVzYmN0cmwtPnBvcnRzICYmIHVz YmN0cmwtPnBvcnRzICE9IDIpIHsKPiArICAgICAgICAgICAgICAgIExPRyhFUlJPUiwgIk51bWJl ciBvZiBwb3J0cyBmb3IgVVNCIGNvbnRyb2xsZXIgb2YgdmVyc2lvbiAxIGlzIGFsd2F5cyAyIik7 CgpQbGVhc2Ugd3JhcCBsb25nIGxpbmUgaWYgcG9zc2libGUuCgo+ICsgICAgICAgICAgICAgICAg cmMgPSBFUlJPUl9JTlZBTDsKPiArICAgICAgICAgICAgICAgIGdvdG8gb3V0Owo+ICsgICAgICAg ICAgICB9Cj4gKyAgICAgICAgICAgIHVzYmN0cmwtPnBvcnRzID0gMjsKPiArICAgICAgICAgICAg YnJlYWs7Cj4gKyAgICAgICAgY2FzZSAyOgo+ICsgICAgICAgICAgICAvKiBlaGNpIGNvbnRyb2xs ZXIgaW4gcWVtdSBoYXMgZml4ZWQgbnVtYmVyIG9mIHBvcnRzLiAqLwo+ICsgICAgICAgICAgICBp ZiAodXNiY3RybC0+cG9ydHMgJiYgdXNiY3RybC0+cG9ydHMgIT0gNikgewo+ICsgICAgICAgICAg ICAgICAgTE9HKEVSUk9SLCAiTnVtYmVyIG9mIHBvcnRzIGZvciBVU0IgY29udHJvbGxlciBvZiB2 ZXJzaW9uIDIgaXMgYWx3YXlzIDYiKTsKPiArICAgICAgICAgICAgICAgIHJjID0gRVJST1JfSU5W QUw7Cj4gKyAgICAgICAgICAgICAgICBnb3RvIG91dDsKPiArICAgICAgICAgICAgfQo+ICsgICAg ICAgICAgICB1c2JjdHJsLT5wb3J0cyA9IDY7Cj4gKyAgICAgICAgICAgIGJyZWFrOwo+ICsgICAg ICAgIGNhc2UgMzoKPiArICAgICAgICAgICAgaWYgKCF1c2JjdHJsLT5wb3J0cykKPiArICAgICAg ICAgICAgICAgIHVzYmN0cmwtPnBvcnRzID0gODsKPiArICAgICAgICAgICAgLyogeGhjaSBjb250 cm9sbGVyIGluIHFlbXUgc3VwcG9ydHMgdXAgdG8gMTUgcG9ydHMuICovCj4gKyAgICAgICAgICAg IGlmICh1c2JjdHJsLT5wb3J0cyA+IDE1KSB7Cj4gKyAgICAgICAgICAgICAgICBMT0coRVJST1Is ICJOdW1iZXIgb2YgcG9ydHMgZm9yIFVTQiBjb250cm9sbGVyIG9mIHZlcnNpb24gMyBpcyBsaW1p dGVkIHRvIDE1Iik7Cj4gKyAgICAgICAgICAgICAgICByYyA9IEVSUk9SX0lOVkFMOwo+ICsgICAg ICAgICAgICAgICAgZ290byBvdXQ7Cj4gKyAgICAgICAgICAgIH0KPiArICAgICAgICAgICAgYnJl YWs7Cj4gKyAgICAgICAgZGVmYXVsdDoKPiArICAgICAgICAgICAgTE9HKEVSUk9SLCAiSWxsZWdh bCBVU0IgdmVyc2lvbiIpOwo+ICsgICAgICAgICAgICByYyA9IEVSUk9SX0lOVkFMOwo+ICsgICAg ICAgICAgICBnb3RvIG91dDsKPiArICAgICAgICB9Cj4gKyAgICAgICAgYnJlYWs7Cj4gKyAgICBk ZWZhdWx0Ogo+ICsgICAgICAgIGJyZWFrOwo+ICsgICAgfQo+ICsKPiAgICAgIHJjID0gbGlieGxf X3Jlc29sdmVfZG9taWQoZ2MsIHVzYmN0cmwtPmJhY2tlbmRfZG9tbmFtZSwKPiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJnVzYmN0cmwtPmJhY2tlbmRfZG9taWQpOwo+ICAKPiBAQCAt NzUsOSArMTMxLDE5IEBAIHN0YXRpYyBpbnQgbGlieGxfX2RldmljZV9mcm9tX3VzYmN0cmwobGli eGxfX2djICpnYywgdWludDMyX3QgZG9taWQsCj4gIHsKPiAgICAgIGRldmljZS0+YmFja2VuZF9k ZXZpZCAgID0gdXNiY3RybC0+ZGV2aWQ7Cj4gICAgICBkZXZpY2UtPmJhY2tlbmRfZG9taWQgICA9 IHVzYmN0cmwtPmJhY2tlbmRfZG9taWQ7Cj4gLSAgICBkZXZpY2UtPmJhY2tlbmRfa2luZCAgICA9 ICh1c2JjdHJsLT50eXBlID09IExJQlhMX1VTQkNUUkxfVFlQRV9QVikKPiAtICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgPyBMSUJYTF9fREVWSUNFX0tJTkRfVlVTQgo+IC0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA6IExJQlhMX19ERVZJQ0VfS0lORF9RVVNCOwo+ICsgICAgc3dp dGNoICh1c2JjdHJsLT50eXBlKSB7Cj4gKyAgICBjYXNlIExJQlhMX1VTQkNUUkxfVFlQRV9QVjoK PiArICAgICAgICBkZXZpY2UtPmJhY2tlbmRfa2luZCA9IExJQlhMX19ERVZJQ0VfS0lORF9WVVNC Owo+ICsgICAgICAgIGJyZWFrOwo+ICsgICAgY2FzZSBMSUJYTF9VU0JDVFJMX1RZUEVfUVVTQjoK PiArICAgICAgICBkZXZpY2UtPmJhY2tlbmRfa2luZCA9IExJQlhMX19ERVZJQ0VfS0lORF9RVVNC Owo+ICsgICAgICAgIGJyZWFrOwo+ICsgICAgY2FzZSBMSUJYTF9VU0JDVFJMX1RZUEVfREVWSUNF TU9ERUw6Cj4gKyAgICAgICAgZGV2aWNlLT5iYWNrZW5kX2tpbmQgPSBMSUJYTF9fREVWSUNFX0tJ TkRfTk9ORTsKPiArICAgICAgICBicmVhazsKPiArICAgIGRlZmF1bHQ6Cj4gKyAgICAgICAgYnJl YWs7CgpTaG91bGRuJ3Qgd2UgcmV0dXJuIHNvbWUgc29ydCBvZiBlcnJvciBoZXJlPwoKPiArICAg IH0KPiAgICAgIGRldmljZS0+ZGV2aWQgICAgICAgICAgID0gdXNiY3RybC0+ZGV2aWQ7Cj4gICAg ICBkZXZpY2UtPmRvbWlkICAgICAgICAgICA9IGRvbWlkOwo+ICAgICAgZGV2aWNlLT5raW5kICAg ICAgICAgICAgPSBMSUJYTF9fREVWSUNFX0tJTkRfVlVTQjsKPiBAQCAtODUsNiArMTUxLDMxIEBA IHN0YXRpYyBpbnQgbGlieGxfX2RldmljZV9mcm9tX3VzYmN0cmwobGlieGxfX2djICpnYywgdWlu dDMyX3QgZG9taWQsCj4gICAgICByZXR1cm4gMDsKPiAgfQo+ICAKPiArc3RhdGljIGNvbnN0IGNo YXIgKnZ1c2JfYmVfZnJvbV94c19saWJ4bF90eXBlKGxpYnhsX19nYyAqZ2MsCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpsaWJ4bF9w YXRoLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGli eGxfdXNiY3RybF90eXBlIHR5cGUpCj4gK3sKPiArICAgIGNvbnN0IGNoYXIgKmJlX3BhdGgsICp0 bXA7Cj4gKyAgICBpbnQgcjsKPiArCj4gKyAgICBpZiAodHlwZSA9PSBMSUJYTF9VU0JDVFJMX1RZ UEVfQVVUTykgewo+ICsgICAgICAgIHIgPSBsaWJ4bF9feHNfcmVhZF9jaGVja2VkKGdjLCBYQlRf TlVMTCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ1NQUklOVEYoIiVz L3R5cGUiLCBsaWJ4bF9wYXRoKSwgJnRtcCk7Cj4gKyAgICAgICAgaWYgKHIgfHwgbGlieGxfdXNi Y3RybF90eXBlX2Zyb21fc3RyaW5nKHRtcCwgJnR5cGUpKQo+ICsgICAgICAgICAgICByZXR1cm4g TlVMTDsKPiArICAgIH0KPiArCj4gKyAgICBpZiAodHlwZSA9PSBMSUJYTF9VU0JDVFJMX1RZUEVf REVWSUNFTU9ERUwpCj4gKyAgICAgICAgcmV0dXJuIGxpYnhsX3BhdGg7Cj4gKwo+ICsgICAgciA9 IGxpYnhsX194c19yZWFkX2NoZWNrZWQoZ2MsIFhCVF9OVUxMLAo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgR0NTUFJJTlRGKCIlcy9iYWNrZW5kIiwgbGlieGxfcGF0aCksCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYmVfcGF0aCk7Cj4gKyAgICBpZiAociB8fCAh YmVfcGF0aCkgcmV0dXJuIE5VTEw7Cj4gKwo+ICsgICAgcmV0dXJuIGJlX3BhdGg7CgpQbGVhc2Ug dXNlIGdvdG8gc3R5bGUgZXJyb3IgaGFuZGxpbmcuCgo+ICt9Cj4gKwo+ICAvKiBBZGQgdXNiY3Ry bCBpbmZvcm1hdGlvbiB0byB4ZW5zdG9yZS4KPiAgICoKPiAgICogQWRkaW5nIGEgdXNiIGNvbnRy b2xsZXIgd2lsbCBhZGQgYSBuZXcgJ3F1c2InIG9yICd2dXNiJyBkZXZpY2UgaW4geGVuc3RvcmUs Cj4gQEAgLTk2LDcgKzE4Nyw3IEBAIHN0YXRpYyBpbnQgbGlieGxfX2RldmljZV91c2JjdHJsX2Fk ZF94ZW5zdG9yZShsaWJ4bF9fZ2MgKmdjLCB1aW50MzJfdCBkb21pZCwKPiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdXBkYXRlX2pzb24pCj4gIHsK PiAgICAgIGxpYnhsX19kZXZpY2UgKmRldmljZTsKPiAtICAgIGZsZXhhcnJheV90ICpmcm9udDsK PiArICAgIGZsZXhhcnJheV90ICpmcm9udCA9IE5VTEw7Cj4gICAgICBmbGV4YXJyYXlfdCAqYmFj azsKPiAgICAgIHhzX3RyYW5zYWN0aW9uX3QgdCA9IFhCVF9OVUxMOwo+ICAgICAgaW50IGksIHJj Owo+IEBAIC0xMTIsMTMgKzIwMywyMSBAQCBzdGF0aWMgaW50IGxpYnhsX19kZXZpY2VfdXNiY3Ry bF9hZGRfeGVuc3RvcmUobGlieGxfX2djICpnYywgdWludDMyX3QgZG9taWQsCj4gICAgICByYyA9 IGxpYnhsX19kZXZpY2VfZnJvbV91c2JjdHJsKGdjLCBkb21pZCwgdXNiY3RybCwgZGV2aWNlKTsK PiAgICAgIGlmIChyYykgZ290byBvdXQ7Cj4gIAo+IC0gICAgZnJvbnQgPSBmbGV4YXJyYXlfbWFr ZShnYywgNCwgMSk7Cj4gICAgICBiYWNrID0gZmxleGFycmF5X21ha2UoZ2MsIDEyLCAxKTsKPiAg Cj4gLSAgICBmbGV4YXJyYXlfYXBwZW5kX3BhaXIoYmFjaywgImZyb250ZW5kLWlkIiwgR0NTUFJJ TlRGKCIlZCIsIGRvbWlkKSk7Cj4gLSAgICBmbGV4YXJyYXlfYXBwZW5kX3BhaXIoYmFjaywgIm9u bGluZSIsICIxIik7Cj4gLSAgICBmbGV4YXJyYXlfYXBwZW5kX3BhaXIoYmFjaywgInN0YXRlIiwK PiAtICAgICAgICAgICAgICAgICAgICAgICAgICBHQ1NQUklOVEYoIiVkIiwgWGVuYnVzU3RhdGVJ bml0aWFsaXNpbmcpKTsKPiArICAgIGlmIChkZXZpY2UtPmJhY2tlbmRfa2luZCAhPSBMSUJYTF9f REVWSUNFX0tJTkRfTk9ORSkgewo+ICsgICAgICAgIGZyb250ID0gZmxleGFycmF5X21ha2UoZ2Ms IDQsIDEpOwo+ICsKPiArICAgICAgICBmbGV4YXJyYXlfYXBwZW5kX3BhaXIoYmFjaywgImZyb250 ZW5kLWlkIiwgR0NTUFJJTlRGKCIlZCIsIGRvbWlkKSk7Cj4gKyAgICAgICAgZmxleGFycmF5X2Fw cGVuZF9wYWlyKGJhY2ssICJvbmxpbmUiLCAiMSIpOwo+ICsgICAgICAgIGZsZXhhcnJheV9hcHBl bmRfcGFpcihiYWNrLCAic3RhdGUiLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH Q1NQUklOVEYoIiVkIiwgWGVuYnVzU3RhdGVJbml0aWFsaXNpbmcpKTsKPiArICAgICAgICBmbGV4 YXJyYXlfYXBwZW5kX3BhaXIoZnJvbnQsICJiYWNrZW5kLWlkIiwKPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgR0NTUFJJTlRGKCIlZCIsIHVzYmN0cmwtPmJhY2tlbmRfZG9taWQpKTsK PiArICAgICAgICBmbGV4YXJyYXlfYXBwZW5kX3BhaXIoZnJvbnQsICJzdGF0ZSIsCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEdDU1BSSU5URigiJWQiLCBYZW5idXNTdGF0ZUluaXRp YWxpc2luZykpOwo+ICsgICAgfQo+ICsKPiAgICAgIGZsZXhhcnJheV9hcHBlbmRfcGFpcihiYWNr LCAidHlwZSIsCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKilsaWJ4bF91c2Jj dHJsX3R5cGVfdG9fc3RyaW5nKHVzYmN0cmwtPnR5cGUpKTsKPiAgICAgIGZsZXhhcnJheV9hcHBl bmRfcGFpcihiYWNrLCAidXNiLXZlciIsIEdDU1BSSU5URigiJWQiLCB1c2JjdHJsLT52ZXJzaW9u KSk7Cj4gQEAgLTEyNywxMSArMjI2LDYgQEAgc3RhdGljIGludCBsaWJ4bF9fZGV2aWNlX3VzYmN0 cmxfYWRkX3hlbnN0b3JlKGxpYnhsX19nYyAqZ2MsIHVpbnQzMl90IGRvbWlkLAo+ICAgICAgZm9y IChpID0gMDsgaSA8IHVzYmN0cmwtPnBvcnRzOyBpKyspCj4gICAgICAgICAgZmxleGFycmF5X2Fw cGVuZF9wYWlyKGJhY2ssIEdDU1BSSU5URigicG9ydC8lZCIsIGkgKyAxKSwgIiIpOwo+ICAKPiAt ICAgIGZsZXhhcnJheV9hcHBlbmRfcGFpcihmcm9udCwgImJhY2tlbmQtaWQiLAo+IC0gICAgICAg ICAgICAgICAgICAgICAgICAgIEdDU1BSSU5URigiJWQiLCB1c2JjdHJsLT5iYWNrZW5kX2RvbWlk KSk7Cj4gLSAgICBmbGV4YXJyYXlfYXBwZW5kX3BhaXIoZnJvbnQsICJzdGF0ZSIsCj4gLSAgICAg ICAgICAgICAgICAgICAgICAgICAgR0NTUFJJTlRGKCIlZCIsIFhlbmJ1c1N0YXRlSW5pdGlhbGlz aW5nKSk7Cj4gLQo+ICAgICAgaWYgKHVwZGF0ZV9qc29uKSB7Cj4gICAgICAgICAgbG9jayA9IGxp YnhsX19sb2NrX2RvbWFpbl91c2VyZGF0YShnYywgZG9taWQpOwo+ICAgICAgICAgIGlmICghbG9j aykgewo+IEBAIC0xOTQsNiArMjg4LDM0IEBAIG91dDoKPiAgICAgIHJldHVybiByYzsKPiAgfQo+ ICAKPiArc3RhdGljIHZvaWQgbGlieGxfX2RldmljZV91c2JjdHJsX2RlbF94ZW5zdG9yZShsaWJ4 bF9fZ2MgKmdjLCB1aW50MzJfdCBkb21pZCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdXNiY3RybCAqdXNiY3RybCkKPiArewo+ ICsgICAgY29uc3QgY2hhciAqbGlieGxfcGF0aCwgKmJlX3BhdGg7Cj4gKyAgICB4c190cmFuc2Fj dGlvbl90IHQgPSBYQlRfTlVMTDsKPiArICAgIGludCByYzsKPiArCj4gKyAgICBsaWJ4bF9wYXRo ID0gR0NTUFJJTlRGKCIlcy9kZXZpY2UvdnVzYi8lZCIsCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIGxpYnhsX194c19saWJ4bF9wYXRoKGdjLCBkb21pZCksIHVzYmN0cmwtPmRldmlkKTsK PiArICAgIGJlX3BhdGggPSB2dXNiX2JlX2Zyb21feHNfbGlieGxfdHlwZShnYywgbGlieGxfcGF0 aCwgdXNiY3RybC0+dHlwZSk7Cj4gKwo+ICsgICAgZm9yICg7Oykgewo+ICsgICAgICAgIHJjID0g bGlieGxfX3hzX3RyYW5zYWN0aW9uX3N0YXJ0KGdjLCAmdCk7Cj4gKyAgICAgICAgaWYgKHJjKSBn b3RvIG91dDsKPiArCj4gKyAgICAgICAgbGlieGxfX3hzX3BhdGhfY2xlYW51cChnYywgdCwgYmVf cGF0aCk7Cj4gKwo+ICsgICAgICAgIHJjID0gbGlieGxfX3hzX3RyYW5zYWN0aW9uX2NvbW1pdChn YywgJnQpOwo+ICsgICAgICAgIGlmICghcmMpIGJyZWFrOwo+ICsgICAgICAgIGlmIChyYyA8IDAp IGdvdG8gb3V0Owo+ICsgICAgfQo+ICsKPiArICAgIHJldHVybjsKPiArCj4gK291dDoKPiArICAg IGxpYnhsX194c190cmFuc2FjdGlvbl9hYm9ydChnYywgJnQpOwo+ICt9Cj4gKwoKSXQgc2VlbXMg dGhhdCB0aGUgbmVlZCBmb3IgdGhpcyBmdW5jdGlvbiBpcyBiZWNhdXNlIHdlIGRpZG4ndCBhZGQg b25lIGluCnByZXZpb3VzIHZlcnNpb24uIElmIHRoYXQncyB0aGUgY2FzZSwgaXMgaXQgcG9zc2li bGUgdG8gaGF2ZSBhIHNlcGFyYXRlCnBhdGNoIGZvciBpdCBzbyB0aGF0IHdlIGNhbiBiYWNrcG9y dCBpdD8KCj4gIHN0YXRpYyBjaGFyICpwdnVzYl9nZXRfZGV2aWNlX3R5cGUobGlieGxfdXNiY3Ry bF90eXBlIHR5cGUpCj4gIHsKPiAgICAgIHN3aXRjaCAodHlwZSkgewo+IEBAIC0yMDYsNiArMzI4 LDkyIEBAIHN0YXRpYyBjaGFyICpwdnVzYl9nZXRfZGV2aWNlX3R5cGUobGlieGxfdXNiY3RybF90 eXBlIHR5cGUpCj4gICAgICB9Cj4gIH0KPiAgCj4gKy8qIFNlbmQgcW1wIGNvbW1hbmRzIHRvIGNy ZWF0ZSBhIHVzYiBjb250cm9sbGVyIGluIHFlbXUuCj4gKyAqCj4gKyAqIERlcGVuZGluZyBvbiB0 aGUgc3BlZWQgKHVzYmN0cmwtPnZlcnNpb24pIHdlIGNyZWF0ZToKPiArICogLSBwaWl4My11c2It dWhjaSAodmVyc2lvbj0xKSwgYWx3YXlzIDIgcG9ydHMKPiArICogLSB1c2ItZWhjaSAgICAgICAo dmVyc2lvbj0yKSwgYWx3YXlzIDYgcG9ydHMKPiArICogLSBuZWMtdXNiLXhoY2kgICAodmVyc2lv bj0zKSwgdXAgdG8gMTUgcG9ydHMKPiArICovCj4gK3N0YXRpYyBpbnQgbGlieGxfX2RldmljZV91 c2JjdHJsX2FkZF9odm0obGlieGxfX2djICpnYywgdWludDMyX3QgZG9taWQsCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX3VzYmN0cmwgKnVz YmN0cmwpCj4gK3sKPiArICAgIGZsZXhhcnJheV90ICpxbXBfYXJnczsKPiArCj4gKyAgICBxbXBf YXJncyA9IGZsZXhhcnJheV9tYWtlKGdjLCA4LCAxKTsKPiArCj4gKyAgICBzd2l0Y2ggKHVzYmN0 cmwtPnZlcnNpb24pIHsKPiArICAgIGNhc2UgMToKPiArICAgICAgICBmbGV4YXJyYXlfYXBwZW5k X3BhaXIocW1wX2FyZ3MsICJkcml2ZXIiLCAicGlpeDMtdXNiLXVoY2kiKTsKPiArICAgICAgICBi cmVhazsKPiArICAgIGNhc2UgMjoKPiArICAgICAgICBmbGV4YXJyYXlfYXBwZW5kX3BhaXIocW1w X2FyZ3MsICJkcml2ZXIiLCAidXNiLWVoY2kiKTsKPiArICAgICAgICBicmVhazsKPiArICAgIGNh c2UgMzoKPiArICAgICAgICBmbGV4YXJyYXlfYXBwZW5kX3BhaXIocW1wX2FyZ3MsICJkcml2ZXIi LCAibmVjLXVzYi14aGNpIik7Cj4gKyAgICAgICAgZmxleGFycmF5X2FwcGVuZF9wYWlyKHFtcF9h cmdzLCAicDIiLCBHQ1NQUklOVEYoIiVkIiwgdXNiY3RybC0+cG9ydHMpKTsKPiArICAgICAgICBm bGV4YXJyYXlfYXBwZW5kX3BhaXIocW1wX2FyZ3MsICJwMyIsIEdDU1BSSU5URigiJWQiLCB1c2Jj dHJsLT5wb3J0cykpOwo+ICsgICAgICAgIGJyZWFrOwo+ICsgICAgZGVmYXVsdDoKPiArICAgICAg ICBicmVhazsKClJldHVybiBFUlJPUl9JTlZBTD8KCldlaS4KCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRl dmVsQGxpc3RzLnhlbi5vcmcKaHR0cHM6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=