From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: [acooks@gmail.com: Re: [RFC PATCH v2 1/2] pci: Create PCIe requester ID interface] Date: Wed, 24 Jul 2013 12:26:48 -0400 Message-ID: <20130724162648.GD5804@phenom.dumpdata.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: xen-devel@lists.xensource.com, andrew.cooper3@citrix.com, jbeulich@suse.com List-Id: xen-devel@lists.xenproject.org RG9lcyBpdCBtYWtlIHNlbnNlIHRvIGludGVncmF0ZSB0aGVzZSBQQ0kgaWRzIGFzIHBhcnQgb2Yg dGhlCnBoYW50b20gZGV2aWNlPyBSaWdodCBub3cgd2UgaGF2ZSBhIHBhcmFtZXRlciB3aGVyZSBv bmUKY2FuIHNwZWNpZnkgdGhlbSwgYnV0IHRoaXMgaXMgYSBuaWNlIGNvbXBsZXRlIGxpc3Qgb2Yg dGhlCmFjdHVhbCBkZXZpY2VzLgoKCi0tLS0tIEZvcndhcmRlZCBtZXNzYWdlIGZyb20gQW5kcmV3 IENvb2tzIDxhY29va3NAZ21haWwuY29tPiAtLS0tLQoKRGF0ZTogV2VkLCAyNCBKdWwgMjAxMyAy MzowMzozNyArMDgwMApGcm9tOiBBbmRyZXcgQ29va3MgPGFjb29rc0BnbWFpbC5jb20+ClRvOiBB bGV4IFdpbGxpYW1zb24gPGFsZXgud2lsbGlhbXNvbkByZWRoYXQuY29tPgpDYzogIm9wZW4gbGlz dDpQQ0kgU1VCU1lTVEVNIiA8bGludXgtcGNpQHZnZXIua2VybmVsLm9yZz4sICJvcGVuIGxpc3Q6 SU5URUwgSU9NTVUgKFZULWQpIiA8aW9tbXVAbGlzdHMubGludXgtZm91bmRhdGlvbi5vcmc+LCBC am9ybiBIZWxnYWFzIDxiaGVsZ2Fhc0Bnb29nbGUuY29tPiwgRGF2aWQgV29vZGhvdXNlCgk8ZHdt dzJAaW5mcmFkZWFkLm9yZz4KU3ViamVjdDogUmU6IFtSRkMgUEFUQ0ggdjIgMS8yXSBwY2k6IENy ZWF0ZSBQQ0llIHJlcXVlc3RlciBJRCBpbnRlcmZhY2UKCk9uIFdlZCwgSnVsIDI0LCAyMDEzIGF0 IDc6MjEgQU0sIEFsZXggV2lsbGlhbXNvbgo8YWxleC53aWxsaWFtc29uQHJlZGhhdC5jb20+IHdy b3RlOgo+IE9uIFR1ZSwgMjAxMy0wNy0yMyBhdCAxNjozNSAtMDYwMCwgQmpvcm4gSGVsZ2FhcyB3 cm90ZToKPj4gT24gVGh1LCBKdWwgMTEsIDIwMTMgYXQgMDM6MDM6MjdQTSAtMDYwMCwgQWxleCBX aWxsaWFtc29uIHdyb3RlOgo+PiA+IFRoaXMgcHJvdmlkZXMgaW50ZXJmYWNlcyBmb3IgZHJpdmVy cyB0byBkaXNjb3ZlciB0aGUgdmlzaWJsZSBQQ0llCj4+ID4gcmVxdWVzdGVyIElEIGZvciBhIGRl dmljZSwgZm9yIHRoaW5ncyBsaWtlIElPTU1VIHNldHVwLCBhbmQgaXRlcmF0ZQo+Pgo+PiBJRHMg KHBsdXJhbCkKPgo+IEhvdyBkb2VzIGEgZGV2aWNlIGNhbid0IGhhdmUgbXVsdGlwbGUgcmVxdWVz dGVyIElEcz8gIFJlYWRpbmcgYmVsb3csIEknbQo+IG5vdCBzdXJlIHdlJ3JlIG9uIHRoZSBzYW1l IHBhZ2UgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgcGF0Y2guCj4KPj4gPiBvdmVyIHRoZSBkZXZp Y2UgY2hhaW4gZnJvbSByZXF1ZXN0ZWUgdG8gcmVxdWVzdGVyLCBpbmNsdWRpbmcgRE1BCj4+ID4g cXVpcmtzIGF0IGVhY2ggc3RlcC4KPj4KPj4gInJlcXVlc3RlZSIgZG9lc24ndCBtYWtlIHNlbnNl IHRvIG1lLiAgVGhlICItZWUiIHN1ZmZpeCBhZGRlZCB0byBhIHZlcmIKPj4gbm9ybWFsbHkgbWFr ZXMgYSBub3VuIHRoYXQgcmVmZXJzIHRvIHRoZSBvYmplY3Qgb2YgdGhlIGFjdGlvbi4gIFNvCj4+ ICJyZXF1ZXN0ZWUiIHNvdW5kcyBsaWtlIGl0IG1lYW5zIHNvbWV0aGluZyBsaWtlICJ0YXJnZXQi IG9yICJyZXNwb25kZXIsIgo+PiBidXQgdGhhdCdzIG5vdCB3aGF0IHlvdSBtZWFuIGhlcmUuCj4K PiBIbW0sIG9rLiAgSSBmaWd1cmVkIGEgcmVxdWVzdC1lciBtYWtlcyBhIHJlcXVlc3Qgb24gYmVo YWxmIG9mIGEKPiByZXF1ZXN0LWVlLiAgU3VnZ2VzdGlvbnM/Cj4KPj4gPiBTdWdnZXN0ZWQtYnk6 IEJqb3JuIEhlbGdhYXMgPGJoZWxnYWFzQGdvb2dsZS5jb20+Cj4+ID4gU2lnbmVkLW9mZi1ieTog QWxleCBXaWxsaWFtc29uIDxhbGV4LndpbGxpYW1zb25AcmVkaGF0LmNvbT4KPj4gPiAtLS0KPj4g PiAgZHJpdmVycy9wY2kvc2VhcmNoLmMgfCAgMTk4ICsrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrCj4+ID4gIGluY2x1ZGUvbGludXgvcGNpLmggIHwgICAg NyArKwo+PiA+ICAyIGZpbGVzIGNoYW5nZWQsIDIwNSBpbnNlcnRpb25zKCspCj4+ID4KPj4gPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvc2VhcmNoLmMgYi9kcml2ZXJzL3BjaS9zZWFyY2guYwo+ PiA+IGluZGV4IGQwNjI3ZmEuLjQ3NTljMDIgMTAwNjQ0Cj4+ID4gLS0tIGEvZHJpdmVycy9wY2kv c2VhcmNoLmMKPj4gPiArKysgYi9kcml2ZXJzL3BjaS9zZWFyY2guYwo+PiA+IEBAIC0xOCw2ICsx OCwyMDQgQEAgREVDTEFSRV9SV1NFTShwY2lfYnVzX3NlbSk7Cj4+ID4gIEVYUE9SVF9TWU1CT0xf R1BMKHBjaV9idXNfc2VtKTsKPj4gPgo+PiA+ICAvKgo+PiA+ICsgKiBwY2lfaGFzX3BjaWVfcmVx dWVzdGVyX2lkIC0gRG9lcyBAZGV2IGhhdmUgYSBQQ0llIHJlcXVlc3RlciBJRAo+PiA+ICsgKiBA ZGV2OiBkZXZpY2UgdG8gdGVzdAo+PiA+ICsgKi8KPj4gPiArc3RhdGljIGJvb2wgcGNpX2hhc19w Y2llX3JlcXVlc3Rlcl9pZChzdHJ1Y3QgcGNpX2RldiAqZGV2KQo+PiA+ICt7Cj4+ID4gKyAgIC8q Cj4+ID4gKyAgICAqIFhYWCBUaGVyZSdzIG5vIGluZGljYXRvciBvZiB0aGUgYnVzIHR5cGUsIGNv bnZlbnRpb25hbCBQQ0kgdnMKPj4gPiArICAgICogUENJLVggdnMgUENJLWUsIGJ1dCB3ZSBhc3N1 bWUgdGhhdCBhIGNhbGxlciBsb29raW5nIGZvciBhIFBDSWUKPj4gPiArICAgICogcmVxdWVzdGVy IElEIGlzIGEgbmF0aXZlIFBDSWUgYmFzZWQgc3lzdGVtIChzdWNoIGFzIFZULWQgb3IKPj4gPiAr ICAgICogQU1ELVZpKS4gIEl0J3MgY29tbW9uIHRoYXQgUENJZSByb290IGNvbXBsZXggZGV2aWNl cyBkbyBub3QKPj4gPiArICAgICogaW5jbHVkZSBhIFBDSWUgY2FwYWJpbGl0eSwgYnV0IHdlIGNh biBhc3N1bWUgdGhleSBhcmUgUENJZQo+PiA+ICsgICAgKiBkZXZpY2VzIGJhc2VkIG9uIHRoZWly IHRvcG9sb2d5Lgo+PiA+ICsgICAgKi8KPj4gPiArICAgaWYgKHBjaV9pc19wY2llKGRldikgfHwg cGNpX2lzX3Jvb3RfYnVzKGRldi0+YnVzKSkKPj4gPiArICAgICAgICAgICByZXR1cm4gdHJ1ZTsK Pj4gPiArCj4+ID4gKyAgIC8qCj4+ID4gKyAgICAqIFBDSS1YIGRldmljZXMgaGF2ZSBhIHJlcXVl c3RlciBJRCwgYnV0IHRoZSBicmlkZ2UgbWF5IHN0aWxsIHRha2UKPj4gPiArICAgICogb3duZXJz aGlwIG9mIHRyYW5zYWN0aW9ucyBhbmQgY3JlYXRlIGEgcmVxdWVzdGVyIElELiAgV2UgdGhlcmVm b3JlCj4+ID4gKyAgICAqIGFzc3VtZSB0aGF0IHRoZSBQQ0ktWCByZXF1ZXN0ZXIgSUQgaXMgbm90 IHRoZSBzYW1lIG9uZSB1c2VkIG9uIFBDSWUuCj4+ID4gKyAgICAqLwo+PiA+ICsKPj4gPiArI2lm ZGVmIENPTkZJR19QQ0lfUVVJUktTCj4+ID4gKyAgIC8qCj4+ID4gKyAgICAqIFF1aXJrIGZvciBQ Q0llLXRvLVBDSSBicmlkZ2VzIHdoaWNoIGRvIG5vdCBleHBvc2UgYSBQQ0llIGNhcGFiaWxpdHku Cj4+ID4gKyAgICAqIElmIHRoZSBkZXZpY2UgaXMgYSBicmlkZ2UsIGxvb2sgdG8gdGhlIG5leHQg ZGV2aWNlIHVwc3RyZWFtIG9mIGl0Lgo+PiA+ICsgICAgKiBJZiB0aGF0IGRldmljZSBpcyBQQ0ll IGFuZCBub3QgYSBQQ0llLXRvLVBDSSBicmlkZ2UsIHRoZW4gYnkKPj4gPiArICAgICogZGVkdWN0 aW9uLCB0aGUgZGV2aWNlIG11c3QgYmUgUENJZSBhbmQgdGhlcmVmb3JlIGhhcyBhIHJlcXVlc3Rl ciBJRC4KPj4gPiArICAgICovCj4+ID4gKyAgIGlmIChkZXYtPnN1Ym9yZGluYXRlKSB7Cj4+ID4g KyAgICAgICAgICAgc3RydWN0IHBjaV9kZXYgKnBhcmVudCA9IGRldi0+YnVzLT5zZWxmOwo+PiA+ ICsKPj4gPiArICAgICAgICAgICBpZiAocGNpX2lzX3BjaWUocGFyZW50KSAmJgo+PiA+ICsgICAg ICAgICAgICAgICBwY2lfcGNpZV90eXBlKHBhcmVudCkgIT0gUENJX0VYUF9UWVBFX1BDSV9CUklE R0UpCj4+ID4gKyAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKPj4gPiArICAgfQo+PiA+ ICsjZW5kaWYKPj4gPiArCj4+ID4gKyAgIHJldHVybiBmYWxzZTsKPj4gPiArfQo+PiA+ICsKPj4g PiArLyoKPj4gPiArICogcGNpX2hhc192aXNpYmxlX3BjaWVfcmVxdWVzdGVyX2lkIC0gQ2FuIEBi cmlkZ2Ugc2VlIEBkZXYncyByZXF1ZXN0ZXIgSUQ/Cj4+ID4gKyAqIEBkZXY6IHJlcXVlc3RlciBk ZXZpY2UKPj4gPiArICogQGJyaWRnZTogdXBzdHJlYW0gYnJpZGdlIChvciBOVUxMIGZvciByb290 IGJ1cykKPj4gPiArICovCj4+ID4gK3N0YXRpYyBib29sIHBjaV9oYXNfdmlzaWJsZV9wY2llX3Jl cXVlc3Rlcl9pZChzdHJ1Y3QgcGNpX2RldiAqZGV2LAo+PiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwY2lfZGV2ICpicmlkZ2UpCj4+ID4gK3sKPj4g PiArICAgLyoKPj4gPiArICAgICogVGhlIGVudGlyZSBwYXRoIG11c3QgYmUgdGVzdGVkLCBpZiBh bnkgc3RlcCBkb2VzIG5vdCBoYXZlIGEKPj4gPiArICAgICogcmVxdWVzdGVyIElELCB0aGUgY2hh aW4gaXMgYnJva2VuLiAgVGhpcyBhbGxvd3MgdXMgdG8gc3VwcG9ydAo+PiA+ICsgICAgKiB0b3Bv bG9naWVzIHdpdGggUENJZSByZXF1ZXN0ZXIgSUQgZ2FwcywgZXg6IFBDSWUtUENJLVBDSWUKPj4g PiArICAgICovCj4+ID4gKyAgIHdoaWxlIChkZXYgIT0gYnJpZGdlKSB7Cj4+ID4gKyAgICAgICAg ICAgaWYgKCFwY2lfaGFzX3BjaWVfcmVxdWVzdGVyX2lkKGRldikpCj4+ID4gKyAgICAgICAgICAg ICAgICAgICByZXR1cm4gZmFsc2U7Cj4+ID4gKwo+PiA+ICsgICAgICAgICAgIGlmIChwY2lfaXNf cm9vdF9idXMoZGV2LT5idXMpKQo+PiA+ICsgICAgICAgICAgICAgICAgICAgcmV0dXJuICFicmlk Z2U7IC8qIGZhbHNlIGlmIHdlIGRvbid0IGhpdCBAYnJpZGdlICovCj4+ID4gKwo+PiA+ICsgICAg ICAgICAgIGRldiA9IGRldi0+YnVzLT5zZWxmOwo+PiA+ICsgICB9Cj4+ID4gKwo+PiA+ICsgICBy ZXR1cm4gdHJ1ZTsKPj4gPiArfQo+PiA+ICsKPj4gPiArLyoKPj4gPiArICogTGVnYWN5IFBDSSBi cmlkZ2VzIHdpdGhpbiBhIHJvb3QgY29tcGxleCAoZXguIEludGVsIDgyODAxKSByZXBvcnQKPj4g PiArICogYSBkaWZmZXJlbnQgcmVxdWVzdGVyIElEIHRoYW4gYSBzdGFuZGFyZCBQQ0llLXRvLVBD SSBicmlkZ2UuICBJbnN0ZWFkCj4+ID4gKyAqIG9mIHVzaW5nIChzdWJvcmRpbmF0ZSA8PCA4IHwg MCkgdGhlIHVzZSAoYnVzIDw8IDggfCBkZXZmbiksIGxpa2UgYQo+Pgo+PiBzL3RoZS90aGV5Lwo+ Pgo+PiBEaWQgeW91IGxlYXJuIGFib3V0IHRoaXMgZW1waXJpY2FsbHk/ICBJbnRlbCBzcGVjPyAg SSB3b25kZXIgaWYgdGhlcmUncwo+PiBzb21lIHdheSB0byBkZXJpdmUgdGhpcyBmcm9tIHRoZSBQ Q0llIHNwZWNzLgo+Cj4gSXQncyBpbiB0aGUgY3VycmVudCBpbnRlbC1pb21tdSBsb2dpYywgcHJl dHR5IG11Y2ggYW55d2hlcmUgaXQgdXNlcwo+IHBjaV9maW5kX3Vwc3RyZWFtX3BjaWVfYnJpZGdl KCkgaXQgZm9sbG93cyB0aGF0IHVwIHdpdGggYSBwY2lfaXNfcGNpZSgpCj4gY2hlY2suICBJZiBp dCdzIFBDSWUsIGl0IHVzZXMgYSB0cmFkaXRpb25hbCBQQ0llLXRvLVBDSSBicmlkZ2UgSUQuICBJ Zgo+IGl0J3MgYSBsZWdhY3kgUENJIGJyaWRnZSBpdCB1c2VzIHRoZSBicmlkZ2UgSUQgaXRzZWxm Lgo+Cj4gc3RhdGljIGludAo+IGRvbWFpbl9jb250ZXh0X21hcHBpbmcoc3RydWN0IGRtYXJfZG9t YWluICpkb21haW4sIHN0cnVjdCBwY2lfZGV2ICpwZGV2LAo+ICAgICAgICAgICAgICAgICAgICAg ICAgIGludCB0cmFuc2xhdGlvbikKPiB7Cj4gLi4uCj4gICAgICAgICAvKiBkZXBlbmRlbnQgZGV2 aWNlIG1hcHBpbmcgKi8KPiAgICAgICAgIHRtcCA9IHBjaV9maW5kX3Vwc3RyZWFtX3BjaWVfYnJp ZGdlKHBkZXYpOwo+ICAgICAgICAgaWYgKCF0bXApCj4gICAgICAgICAgICAgICAgIHJldHVybiAw Owo+IC4uLgo+ICAgICAgICAgaWYgKHBjaV9pc19wY2llKHRtcCkpIC8qIHRoaXMgaXMgYSBQQ0ll LXRvLVBDSSBicmlkZ2UgKi8KPiAgICAgICAgICAgICAgICAgcmV0dXJuIGRvbWFpbl9jb250ZXh0 X21hcHBpbmdfb25lKGRvbWFpbiwKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcGNpX2RvbWFpbl9ucih0bXAtPnN1Ym9yZGluYXRlKSwKPiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdG1wLT5zdWJvcmRpbmF0ZS0+bnVtYmVyLCAwLAo+ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGlvbik7Cj4gICAg ICAgICBlbHNlIC8qIHRoaXMgaXMgYSBsZWdhY3kgUENJIGJyaWRnZSAqLwo+ICAgICAgICAgICAg ICAgICByZXR1cm4gZG9tYWluX2NvbnRleHRfbWFwcGluZ19vbmUoZG9tYWluLAo+ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNpX2RvbWFpbl9ucih0 bXAtPmJ1cyksCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB0bXAtPmJ1cy0+bnVtYmVyLAo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdG1wLT5kZXZmbiwKPiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uKTsKPgo+IFRoZSA4MjgwMSByZWZl cmVuY2UgaXMgZnJvbSBsb29raW5nIGF0IHdoZW4gdGhpcyB3b3VsZCBhY3R1YWxseSBoYXBwZW4K PiBvbiBvbmUgb2YgbXkgb3duIHN5c3RlbXMuCj4KPgo+PiA+ICsgKiBzdGFuZGFyZCBQQ0llIGVu ZHBvaW50LiAgVGhpcyBmdW5jdGlvbiBkZXRlY3RzIHRoZW0uCj4+ID4gKyAqCj4+ID4gKyAqIFhY WCBJcyB0aGlzIEludGVsIHZlbmRvciBJRCBzcGVjaWZpYz8KPj4gPiArICovCj4+ID4gK3N0YXRp YyBib29sIHBjaV9icmlkZ2VfdXNlc19lbmRwb2ludF9yZXF1ZXN0ZXIoc3RydWN0IHBjaV9kZXYg KmJyaWRnZSkKPj4gPiArewo+PiA+ICsgICBpZiAoIXBjaV9pc19wY2llKGJyaWRnZSkgJiYgcGNp X2lzX3Jvb3RfYnVzKGJyaWRnZS0+YnVzKSkKPj4gPiArICAgICAgICAgICByZXR1cm4gdHJ1ZTsK Pj4gPiArCj4+ID4gKyAgIHJldHVybiBmYWxzZTsKPj4gPiArfQo+PiA+ICsKPj4gPiArI2RlZmlu ZSBQQ0lfUkVRVUVTVEVSX0lEKGRldikgICAgICAoKChkZXYpLT5idXMtPm51bWJlciA8PCA4KSB8 IChkZXYpLT5kZXZmbikKPj4gPiArI2RlZmluZSBQQ0lfQlJJREdFX1JFUVVFU1RFUl9JRChkZXYp ICAgICAgICgoZGV2KS0+c3Vib3JkaW5hdGUtPm51bWJlciA8PCA4KQo+PiA+ICsKPj4gPiArLyoK Pj4gPiArICogcGNpX2dldF92aXNpYmxlX3BjaWVfcmVxdWVzdGVyIC0gR2V0IHJlcXVlc3RlciBh bmQgcmVxdWVzdGVyIElEIGZvcgo+PiA+ICsgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBAcmVxdWVzdGVlIGJlbG93IEBicmlkZ2UKPj4gPiArICogQHJlcXVlc3RlZTogcmVxdWVz dGVyIGRldmljZQo+PiA+ICsgKiBAYnJpZGdlOiB1cHN0cmVhbSBicmlkZ2UgKG9yIE5VTEwgZm9y IHJvb3QgYnVzKQo+PiA+ICsgKiBAcmVxdWVzdGVyX2lkOiBsb2NhdGlvbiB0byBzdG9yZSByZXF1 ZXN0ZXIgSUQgb3IgTlVMTAo+PiA+ICsgKi8KPj4gPiArc3RydWN0IHBjaV9kZXYgKnBjaV9nZXRf dmlzaWJsZV9wY2llX3JlcXVlc3RlcihzdHJ1Y3QgcGNpX2RldiAqcmVxdWVzdGVlLAo+PiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcGNpX2RldiAq YnJpZGdlLAo+PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1 MTYgKnJlcXVlc3Rlcl9pZCkKPj4KPj4gSSdtIG5vdCBzdXJlIGl0IG1ha2VzIHNlbnNlIHRvIHJl dHVybiBhIHN0cnVjdCBwY2lfZGV2IGhlcmUgYmVjYXVzZQo+PiB0aGVyZSdzIG5vIHJlcXVpcmVt ZW50IHRoYXQgYSByZXF1ZXN0ZXIgSUQgY29ycmVzcG9uZCB0byBhbiBhY3R1YWwKPj4gcGNpX2Rl di4KPgo+IFRoYXQncyB3aHkgdGhpcyBmdW5jdGlvbiBpcyBuYW1lZCBnZXRfLi5fcmVxdWVzdGVy IGluc3RlYWQgb2YgcmVxdWVzdGVyCj4gSUQuICBJIGJlbGlldmUgdGhlcmUgc3RpbGwgaGFzIHRv IGJlIGEgc3RydWN0IHBjaV9kZXYgdGhhdCBkb2VzIHRoZQo+IHJlcXVlc3QsIGJ1dCB0aGUgcmVx dWVzdGVyIElEIGZvciB0aGF0IGRldmljZSBtYXkgbm90IGFjdHVhbGx5IG1hdGNoLgo+IFNvIEkg cmV0dXJuIGJvdGguICBJbiBhIFBDSWUtdG8tUENJIGJyaWRnZSBjYXNlLCB0aGUgcGNpX2RldiBp cyB0aGUKPiBicmlkZ2UsIGJ1dCB0aGUgcmVxdWVzdGVyIElEIGlzIGVpdGhlciB0aGUgYnJpZGdl IGJ1c3xkZXZmbiBvcgo+IHN1Ym9yZGluYXRlfDAgZGVwZW5kaW5nIG9uIHRoZSB0b3BvbG9neS4g IElmIHdlIHdhbnQgdG8gc3VwcG9ydCAiZ2hvc3QKPiBmdW5jdGlvbnMiLCB3ZSBjYW4gcmV0dXJu IHRoZSByZWFsIHBjaV9kZXYgYW5kIGEgZ2hvc3QgcmVxdWVzdGVyIElELgo+Cj4gSSB0aGluayBp ZiB3ZSB1c2VkIGp1c3QgYSByZXF1ZXN0ZXIgSUQsIGl0IGVuZHMgdXAgYmVpbmcgZXh0cmVtZWx5 Cj4gZGlmZmljdWx0IHRvIHBhc3MgdGhhdCBpbnRvIGFueXRoaW5nIGVsc2Ugc2luY2Ugd2UgdGhl biBoYXZlIHRvIHNlYXJjaAo+IGFnYWluIGZvciB3aGVyZSB0aGF0IHJlcXVlc3RlciBJRCBpcyBy b290ZWQuCj4KPj4gPiArewo+PiA+ICsgICBzdHJ1Y3QgcGNpX2RldiAqcmVxdWVzdGVyID0gcmVx dWVzdGVlOwo+PiA+ICsKPj4gPiArICAgd2hpbGUgKHJlcXVlc3RlciAhPSBicmlkZ2UpIHsKPj4g PiArICAgICAgICAgICByZXF1ZXN0ZXIgPSBwY2lfZ2V0X2RtYV9zb3VyY2UocmVxdWVzdGVyKTsK Pj4gPiArICAgICAgICAgICBwY2lfZGV2X3B1dChyZXF1ZXN0ZXIpOyAvKiBYWFggc2tpcCByZWYg Y250ICovCj4+ID4gKwo+PiA+ICsgICAgICAgICAgIGlmIChwY2lfaGFzX3Zpc2libGVfcGNpZV9y ZXF1ZXN0ZXJfaWQocmVxdWVzdGVyLCBicmlkZ2UpKQo+Pgo+PiBJZiB3ZSBhY3F1aXJlIHRoZSAi cmVxdWVzdGVyIiBwb2ludGVyIHZpYSBhIHJlZi1jb3VudGluZyBpbnRlcmZhY2UsCj4+IGl0J3Mg aWxsZWdhbCB0byB1c2UgdGhlIHBvaW50ZXIgYWZ0ZXIgZHJvcHBpbmcgdGhlIHJlZmVyZW5jZSwg aXNuJ3QgaXQ/Cj4+IE1heWJlIHRoYXQncyB3aGF0IHlvdSBtZWFuIGJ5IHRoZSAiWFhYIiBjb21t ZW50Lgo+Cj4KPiBZZXMsIEkgd2FzIGp1c3QgZm9sbG93aW5nIHlvdXIgUkZDIGxlYWQgYW5kIGRp ZG4ndCB3YW50IHRvIGRlYWwgd2l0aAo+IHJlZmVyZW5jZSBjb3VudGluZyB1bnRpbCB0aGlzIGFw cHJvYWNoIGhhZCBlbm91Z2ggdHJhY3Rpb24uCj4KPgo+PiA+ICsgICAgICAgICAgICAgICAgICAg YnJlYWs7Cj4+ID4gKwo+PiA+ICsgICAgICAgICAgIGlmIChwY2lfaXNfcm9vdF9idXMocmVxdWVz dGVyLT5idXMpKQo+PiA+ICsgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7IC8qIEBicmlk Z2Ugbm90IHBhcmVudCB0byBAcmVxdWVzdGVlICovCj4+ID4gKwo+PiA+ICsgICAgICAgICAgIHJl cXVlc3RlciA9IHJlcXVlc3Rlci0+YnVzLT5zZWxmOwo+PiA+ICsgICB9Cj4+ID4gKwo+PiA+ICsg ICBpZiAocmVxdWVzdGVyX2lkKSB7Cj4+ID4gKyAgICAgICAgICAgaWYgKHJlcXVlc3Rlci0+YnVz ICE9IHJlcXVlc3RlZS0+YnVzICYmCj4+ID4gKyAgICAgICAgICAgICAgICFwY2lfYnJpZGdlX3Vz ZXNfZW5kcG9pbnRfcmVxdWVzdGVyKHJlcXVlc3RlcikpCj4+ID4gKyAgICAgICAgICAgICAgICAg ICAqcmVxdWVzdGVyX2lkID0gUENJX0JSSURHRV9SRVFVRVNURVJfSUQocmVxdWVzdGVyKTsKPj4g PiArICAgICAgICAgICBlbHNlCj4+ID4gKyAgICAgICAgICAgICAgICAgICAqcmVxdWVzdGVyX2lk ID0gUENJX1JFUVVFU1RFUl9JRChyZXF1ZXN0ZXIpOwo+PiA+ICsgICB9Cj4+ID4gKwo+PiA+ICsg ICByZXR1cm4gcmVxdWVzdGVyOwo+PiA+ICt9Cj4+ID4gKwo+PiA+ICtzdGF0aWMgaW50IHBjaV9k b19yZXF1ZXN0ZXJfY2FsbGJhY2soc3RydWN0IHBjaV9kZXYgKipkZXYsCj4+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqZm4pKHN0cnVjdCBwY2lfZGV2ICosCj4+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiBpZCwgdm9pZCAq KSwKPj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpkYXRhKQo+PiA+ ICt7Cj4+ID4gKyAgIHN0cnVjdCBwY2lfZGV2ICpkbWFfZGV2Owo+PiA+ICsgICBpbnQgcmV0Owo+ PiA+ICsKPj4gPiArICAgcmV0ID0gZm4oKmRldiwgUENJX1JFUVVFU1RFUl9JRCgqZGV2KSwgZGF0 YSk7Cj4+ID4gKyAgIGlmIChyZXQpCj4+ID4gKyAgICAgICAgICAgcmV0dXJuIHJldDsKPj4gPiAr Cj4+ID4gKyAgIGRtYV9kZXYgPSBwY2lfZ2V0X2RtYV9zb3VyY2UoKmRldik7Cj4+ID4gKyAgIHBj aV9kZXZfcHV0KGRtYV9kZXYpOyAvKiBYWFggc2tpcCByZWYgY250ICovCj4+ID4gKyAgIGlmIChk bWFfZGV2ID09ICpkZXYpCj4+Cj4+IFNhbWUgcmVmIGNvdW50IHF1ZXN0aW9uIGFzIGFib3ZlLgo+ Pgo+PiA+ICsgICAgICAgICAgIHJldHVybiAwOwo+PiA+ICsKPj4gPiArICAgcmV0ID0gZm4oZG1h X2RldiwgUENJX1JFUVVFU1RFUl9JRChkbWFfZGV2KSwgZGF0YSk7Cj4+ID4gKyAgIGlmIChyZXQp Cj4+ID4gKyAgICAgICAgICAgcmV0dXJuIHJldDsKPj4gPiArCj4+ID4gKyAgICpkZXYgPSBkbWFf ZGV2Owo+PiA+ICsgICByZXR1cm4gMDsKPj4gPiArfQo+PiA+ICsKPj4gPiArLyoKPj4gPiArICog cGNpZV9mb3JfZWFjaF9yZXF1ZXN0ZXIgLSBDYWxsIGNhbGxiYWNrIEBmbiBvbiBlYWNoIGRldmlj ZXMgYW5kIERNQSBzb3VyY2UKPj4gPiArICogICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9t IEByZXF1ZXN0ZWUgdG8gdGhlIFBDSWUgcmVxdWVzdGVyIElEIHZpc2libGUKPj4gPiArICogICAg ICAgICAgICAgICAgICAgICAgICAgICB0byBAYnJpZGdlLgo+Pgo+PiBUcmFuc2FjdGlvbnMgZnJv bSBhIGRldmljZSBtYXkgYXBwZWFyIHdpdGggb25lIG9mIHNldmVyYWwgcmVxdWVzdGVyIElEcywK Pj4gYnV0IHRoZXJlJ3Mgbm90IG5lY2Vzc2FyaWx5IGFuIGFjdHVhbCBwY2lfZGV2IGZvciBlYWNo IElELCBzbyBJIHRoaW5rIHRoZQo+PiBjYWxsZXIgcmVhZHMgYmV0dGVyIGlmIGl0J3MgIi4uLmZv cl9lYWNoX3JlcXVlc3Rlcl9pZCgpIgo+Cj4gV291bGRuJ3QgeW91IGV4cGVjdCB0byBwYXNzIGEg cmVxdWVzdGVyIElEIGludG8gYSBmdW5jdGlvbiB3aXRoIHRoYXQKPiBuYW1lPyAgSSdtIHByZXR0 eSBzdXJlIEkgaGFkIGl0IG5hbWVkIHRoYXQgYXQgb25lIHBvaW50IGJ1dCB0aG91Z2h0IHRoZQo+ IHBhcmFtZXRlcnMgbWFkZSBtb3JlIHNlbnNlIHRoaXMgd2F5LiAgSSdsbCBzZWUgaWYgSSBjYW4g dGhpbmsgb2YgYQo+IGJldHRlciBuYW1lLgo+Cj4+IFRoZSAiQ2FsbCBYIG9uIGVhY2ggZGV2aWNl cyBhbmQgRE1BIHNvdXJjZSBmcm9tIFkgdG8gdGhlIHJlcXVlc3RlciBJRCIKPj4gcGFydCBkb2Vz bid0IHF1aXRlIG1ha2UgYSBzZW50ZW5jZS4KPgo+Cj4gT2sKPgo+PiA+ICsgKiBAcmVxdWVzdGVl OiBTdGFydGluZyBkZXZpY2UKPj4gPiArICogQGJyaWRnZTogdXBzdHJlYW0gYnJpZGdlIChvciBO VUxMIGZvciByb290IGJ1cykKPj4KPj4gWW91IHNob3VsZCBzYXkgc29tZXRoaW5nIGFib3V0IHRo ZSBzaWduaWZpY2FuY2Ugb2YgQGJyaWRnZS4gIEkgdGhpbmsgdGhlCj4+IHBvaW50IGlzIHRvIGNh bGwgQGZuIGZvciBldmVyeSBwb3NzaWJsZSByZXF1ZXN0ZXIgSUQgQGJyaWRnZSBjb3VsZCBzZWUg Zm9yCj4+IHRyYW5zYWN0aW9ucyBmcm9tIEByZXF1ZXN0ZWUuICBUaGlzIGlzIGEgd2F5IHRvIGxl YXJuIHRoZSByZXF1ZXN0ZXIgSURzIGFuCj4+IElPTU1VIGF0IEBicmlkZ2UgbmVlZHMgdG8gYmUg cHJlcGFyZWQgZm9yLgo+Cj4gSSBjYW4gYWRkIHNvbWV0aGluZy4gIEBicmlkZ2UgaXMgc3VwcG9z ZWQgdG8gYmUgZm9yIGJyaWRnZS1iYXNlZCBJT01NVXMuCj4gRXNzZW50aWFsbHkgaXQncyBqdXN0 IGEgc3RvcHBpbmcgcG9pbnQuICBUaGVyZSBtaWdodCBiZSBQQ0kgdG9wb2xvZ3kKPiB1cHN0cmVh bSBvZiBAYnJpZGdlLCBidXQgaWYgeW91IG9ubHkgd2FudCB0aGUgcmVxdWVzdGVyIElEIHNlZW4g YnkgdGhlCj4gYnJpZGdlLCB5b3UgZG9uJ3QgY2FyZS4KPgo+PiA+ICsgKiBAZm46IGNhbGxiYWNr IGZ1bmN0aW9uCj4+ID4gKyAqIEBkYXRhOiBkYXRhIHRvIHBhc3MgdG8gY2FsbGJhY2sKPj4gPiAr ICovCj4+ID4gK2ludCBwY2llX2Zvcl9lYWNoX3JlcXVlc3RlcihzdHJ1Y3QgcGNpX2RldiAqcmVx dWVzdGVlLCBzdHJ1Y3QgcGNpX2RldiAqYnJpZGdlLAo+PiA+ICsgICAgICAgICAgICAgICAgICAg ICAgIGludCAoKmZuKShzdHJ1Y3QgcGNpX2RldiAqLCB1MTYgaWQsIHZvaWQgKiksCj4+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZGF0YSkKPj4gPiArewo+PiA+ICsgICBzdHJ1Y3Qg cGNpX2RldiAqcmVxdWVzdGVyOwo+PiA+ICsgICBzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gcmVxdWVz dGVlOwo+PiA+ICsgICBpbnQgcmV0ID0gMDsKPj4gPiArCj4+ID4gKyAgIHJlcXVlc3RlciA9IHBj aV9nZXRfdmlzaWJsZV9wY2llX3JlcXVlc3RlcihyZXF1ZXN0ZWUsIGJyaWRnZSwgTlVMTCk7Cj4+ ID4gKyAgIGlmICghcmVxdWVzdGVyKQo+PiA+ICsgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwo+ PiA+ICsKPj4gPiArICAgZG8gewo+PiA+ICsgICAgICAgICAgIHJldCA9IHBjaV9kb19yZXF1ZXN0 ZXJfY2FsbGJhY2soJmRldiwgZm4sIGRhdGEpOwo+PiA+ICsgICAgICAgICAgIGlmIChyZXQpCj4+ ID4gKyAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0Owo+PiA+ICsKPj4gPiArICAgICAgICAg ICBpZiAoZGV2ID09IHJlcXVlc3RlcikKPj4gPiArICAgICAgICAgICAgICAgICAgIHJldHVybiAw Owo+PiA+ICsKPj4gPiArICAgICAgICAgICAvKgo+PiA+ICsgICAgICAgICAgICAqIFdlIGFsd2F5 cyBjb25zaWRlciByb290IGJ1cyBkZXZpY2VzIHRvIGhhdmUgYSB2aXNpYmxlCj4+ID4gKyAgICAg ICAgICAgICogcmVxdWVzdGVyIElELCB0aGVyZWZvcmUgdGhpcyBzaG91bGQgbmV2ZXIgYmUgdHJ1 ZS4KPj4gPiArICAgICAgICAgICAgKi8KPj4gPiArICAgICAgICAgICBCVUdfT04ocGNpX2lzX3Jv b3RfYnVzKGRldi0+YnVzKSk7Cj4+Cj4+IFdoYXQgYXJlIHdlIGdvaW5nIHRvIGRvIGlmIHNvbWVi b2R5IGhpdHMgdGhpcyBCVUdfT04oKT8gIElmIGl0J3MgaW1wb3NzaWJsZQo+PiB0byBoaXQsIHdl IHNob3VsZCBqdXN0IHJlbW92ZSBpdC4gIElmIGl0J3MgcG9zc2libGUgdG8gaGl0IGl0IGluIHNv bWUgd2VpcmQKPj4gdG9wb2xvZ3kgeW91IGRpZG4ndCBjb25zaWRlciwgd2Ugc2hvdWxkIHNlZSBJ T01NVSBmYXVsdHMgZm9yIGFueSByZXF1ZXN0ZXIKPj4gSUQgd2UgbmVnbGVjdGVkIHRvIG1hcCwg YW5kIHRoYXQgZmF1bHQgd291bGQgYmUgYSBiZXR0ZXIgZGVidWdnaW5nIGhpbnQKPj4gdGhhbiBh IEJVR19PTigpIGhlcmUuCj4KPiBJdCdzIG1vc3RseSBmb3IgcmVhZGFiaWxpdHkuICBJJ3ZlIGxl YXJuZWQgdGhhdCB3ZSBuZXZlciB3aGF0IHRvIGxvb2sgYXQKPiBkZXYtPmJ1cy0+c2VsZiB3aXRo b3V0IGZpcnN0IHRlc3RpbmcgcGNpX2lzX3Jvb3RfYnVzKGRldi0+YnVzKSwgc28gaWYgSQo+IHdh cyByZWFkaW5nIHRoaXMgY29kZSBJJ2Qgc3R1bWJsZSB3aGVuIEkgZ290IGhlcmUgYW5kIHNwZW5k IHRvbyBsb25nCj4gbG9va2luZyBhcm91bmQgZm9yIHRoZSBhc3N1bXB0aW9uIHRoYXQgbWFrZXMg aXQgbm90IG5lZWRlZC4gIEkgc3VwcG9zZSBJCj4gY291bGQganVzdCBtYWtlIGl0IGEgY29tbWVu dCwgYnV0IEkgdGhvdWdodCB3aHkgbm90IG1ha2UgaXQgb2ZmaWNpYWwgdy8KPiBhIEJVRy4KPgo+ PiA+ICsKPj4gPiArICAgICAgICAgICBkZXYgPSBkZXYtPmJ1cy0+c2VsZjsKPj4gPiArCj4+ID4g KyAgIH0gd2hpbGUgKGRldiAhPSByZXF1ZXN0ZXIpOwo+PiA+ICsKPj4gPiArICAgLyoKPj4gPiAr ICAgICogSWYgd2UndmUgbWFkZSBpdCBoZXJlLCBAcmVxdWVzdGVyIGlzIGEgYnJpZGdlIHVwc3Ry ZWFtIGZyb20KPj4gPiArICAgICogQHJlcXVlc3RlZS4KPj4gPiArICAgICovCj4+ID4gKyAgIGlm IChwY2lfYnJpZGdlX3VzZXNfZW5kcG9pbnRfcmVxdWVzdGVyKHJlcXVlc3RlcikpCj4+ID4gKyAg ICAgICAgICAgcmV0dXJuIHBjaV9kb19yZXF1ZXN0ZXJfY2FsbGJhY2soJnJlcXVlc3RlciwgZm4s IGRhdGEpOwo+PiA+ICsKPj4gPiArICAgcmV0dXJuIGZuKHJlcXVlc3RlciwgUENJX0JSSURHRV9S RVFVRVNURVJfSUQocmVxdWVzdGVyKSwgZGF0YSk7Cj4+ID4gK30KPj4gPiArCj4+ID4gKy8qCj4+ ID4gICAqIGZpbmQgdGhlIHVwc3RyZWFtIFBDSWUtdG8tUENJIGJyaWRnZSBvZiBhIFBDSSBkZXZp Y2UKPj4gPiAgICogaWYgdGhlIGRldmljZSBpcyBQQ0lFLCByZXR1cm4gTlVMTAo+PiA+ICAgKiBp ZiB0aGUgZGV2aWNlIGlzbid0IGNvbm5lY3RlZCB0byBhIFBDSWUgYnJpZGdlICh0aGF0IGlzIGl0 cyBwYXJlbnQgaXMgYQo+PiA+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaS5oIGIvaW5j bHVkZS9saW51eC9wY2kuaAo+PiA+IGluZGV4IDNhMjRlNGYuLjk0ZTgxZDEgMTAwNjQ0Cj4+ID4g LS0tIGEvaW5jbHVkZS9saW51eC9wY2kuaAo+PiA+ICsrKyBiL2luY2x1ZGUvbGludXgvcGNpLmgK Pj4gPiBAQCAtMTg3Myw2ICsxODczLDEzIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGVlaF9kZXYg KnBjaV9kZXZfdG9fZWVoX2RldihzdHJ1Y3QgcGNpX2RldiAqcGRldikKPj4gPiAgfQo+PiA+ICAj ZW5kaWYKPj4gPgo+PiA+ICtzdHJ1Y3QgcGNpX2RldiAqcGNpX2dldF92aXNpYmxlX3BjaWVfcmVx dWVzdGVyKHN0cnVjdCBwY2lfZGV2ICpyZXF1ZXN0ZWUsCj4+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwY2lfZGV2ICpicmlkZ2UsCj4+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiAqcmVxdWVzdGVyX2lk KTsKPj4KPj4gVGhlIHN0cnVjdHVyZSBvZiB0aGlzIGludGVyZmFjZSBpbXBsaWVzIHRoYXQgdGhl cmUgaXMgb25seSBvbmUgdmlzaWJsZQo+PiByZXF1ZXN0ZXIgSUQsIGJ1dCB0aGUgd2hvbGUgcG9p bnQgb2YgdGhpcyBwYXRjaCBpcyB0aGF0IGEgdHJhbnNhY3Rpb24gZnJvbQo+PiBAcmVxdWVzdGVl IG1heSBhcHBlYXIgd2l0aCBvbmUgb2Ygc2V2ZXJhbCByZXF1ZXN0ZXIgSURzLiAgU28gd2hpY2gg b25lIHdpbGwKPj4gdGhpcyByZXR1cm4/Cj4KPiBJIHRob3VnaHQgdGhlIHBvaW50IG9mIHRoaXMg cGF0Y2ggd2FzIHRvIGhhdmUgYW4gaW50ZWdyYXRlZCBpbnRlcmZhY2UKPiBmb3IgZmluZGluZyB0 aGUgcmVxdWVzdGVyIElEIGFuZCBkb2luZyBzb21ldGhpbmcgYWNyb3NzIGFsbCBkZXZpY2VzIHdp dGgKPiB0aGF0IHJlcXVlc3RlciBJRCBhbmQgdGhlcmVieSByZW1vdmUgcGNpX2ZpbmRfdXBzdHJl YW1fcGNpZV9icmlkZ2UoKSwKPiBwcm92aWRlIGEgd2F5IHRvIHF1aXJrIGJyb2tlbiBQQ0llLXRv LVBDSSBicmlkZ2UgYW5kIHF1aXJrIGRtYV9vcHMgZm9yCj4gZGV2aWNlcyB0aGF0IHVzZSB0aGUg d3JvbmcgcmVxdWVzdGVyIElELiAgSW4gd2hhdCBjYXNlIGRvZXMgYSBkZXZpY2UKPiBhcHBlYXIg dG8gaGF2ZSBtdWx0aXBsZSByZXF1ZXN0ZXIgSURzPyAgV2UgaGF2ZSBjYXNlcyB3aGVyZSBkZXZp Y2VzIHVzZQo+IHRoZSB3cm9uZyByZXF1ZXN0ZXIgSUQsIGJ1dCBBRkFJSyB0aGV5IG9ubHkgdXNl IGEgc2luZ2xlIHdyb25nIHJlcXVlc3Rlcgo+IElELiAgVGhhbmtzLAo+CgpUaGUgY2FzZXMgSSd2 ZSBmb3VuZCB3aGVyZSBtdWx0aXBsZSByZXF1ZXN0ZXIgSURzIHdlcmUgdXNlZCBhcmUgYWxsIHJl bGF0ZWQKdG8gTWFydmVsbCBTYXRhIGNvbnRyb2xsZXJzLgoKSGVyZSdzIGEgdGFibGUgb2YgYWZm ZWN0ZWQgZGV2aWNlcyB3aXRoIGxpbmtzIHRvIHRoZQpidWcgcmVwb3J0cy4gSW4gZWFjaCBjYXNl IGJvdGggZnVuY3Rpb25zIDAgYW5kIDEgYXJlIHVzZWQuCgpzdGF0aWMgY29uc3Qgc3RydWN0IHBj aV9kZXZfZG1hX211bHRpX3NvdXJjZV9tYXAgewogICAgICAgdTE2IHZlbmRvcjsKICAgICAgIHUx NiBkZXZpY2U7Cn0gcGNpX2Rldl9kbWFfbXVsdGlfc291cmNlX21hcFtdID0gewogICAgICAgIC8q IFJlcG9ydGVkIGJ5IFBhdHJpY2sgQnJlZ21hbgogICAgICAgICAqIGh0dHBzOi8vYnVnemlsbGEu cmVkaGF0LmNvbS9zaG93X2J1Zy5jZ2k/aWQ9ODYzNjUzICovCiAgICAgICB7IFBDSV9WRU5ET1Jf SURfTUFSVkVMTF9FWFQsIDB4OTEyMH0sCgogICAgICAgLyogUmVwb3J0ZWQgYnkgIFBhd2XFgiDF u2FrLCBLb3JuZWxpdXN6IEphcnrEmWJza2ksIERhbmllbCBNYXllcgogICAgICAgICogaHR0cHM6 Ly9idWd6aWxsYS5rZXJuZWwub3JnL3Nob3dfYnVnLmNnaT9pZD00MjY3OSBhbmQgYnkKICAgICAg ICAqIEp1c3RpbiBQaXN6Y3ogIGh0dHBzOi8vbGttbC5vcmcvbGttbC8yMDEyLzExLzI0Lzk0ICov CiAgICAgICB7IFBDSV9WRU5ET1JfSURfTUFSVkVMTF9FWFQsIDB4OTEyM30sCgogICAgICAgLyog UmVwb3J0ZWQgYnkgUm9iZXJ0IENpY2NvbmV0dGkKICAgICAgICAqIGh0dHBzOi8vYnVnemlsbGEu a2VybmVsLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDI2NzkgYW5kIGJ5CiAgICAgICAgKiBGZXJuYW5k byBodHRwczovL2J1Z3ppbGxhLnJlZGhhdC5jb20vc2hvd19idWcuY2dpP2lkPTc1NzE2NiAqLwog ICAgICAgeyBQQ0lfVkVORE9SX0lEX01BUlZFTExfRVhULCAweDkxMjh9LAoKICAgICAgIC8qIFJl cG9ydGVkIGJ5IFN0aWpuIFRpbnRlbAogICAgICAgICogaHR0cHM6Ly9idWd6aWxsYS5rZXJuZWwu b3JnL3Nob3dfYnVnLmNnaT9pZD00MjY3OSAqLwogICAgICAgeyBQQ0lfVkVORE9SX0lEX01BUlZF TExfRVhULCAweDkxMzB9LAoKICAgICAgIC8qIFJlcG9ydGVkIGJ5IEdhdWRlbnogU3RlaW5saW4K ICAgICAgICAqIGh0dHBzOi8vbGttbC5vcmcvbGttbC8yMDEzLzMvNS8yODggKi8KICAgICAgIHsg UENJX1ZFTkRPUl9JRF9NQVJWRUxMX0VYVCwgMHg5MTQzfSwKCiAgICAgICAvKiBSZXBvcnRlZCBi eSBBbmRyZXcgQ29va3MKICAgICAgICAqIGh0dHBzOi8vYnVnemlsbGEua2VybmVsLm9yZy9zaG93 X2J1Zy5jZ2k/aWQ9NDI2NzkgKi8KICAgICAgIHsgUENJX1ZFTkRPUl9JRF9NQVJWRUxMX0VYVCwg MHg5MTcyfQp9OwoKCj4gQWxleAo+Cj4+ID4gK2ludCBwY2llX2Zvcl9lYWNoX3JlcXVlc3Rlcihz dHJ1Y3QgcGNpX2RldiAqcmVxdWVzdGVlLCBzdHJ1Y3QgcGNpX2RldiAqYnJpZGdlLAo+PiA+ICsg ICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZuKShzdHJ1Y3QgcGNpX2RldiAqLCB1MTYgaWQs IHZvaWQgKiksCj4+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZGF0YSk7Cj4+ID4g Kwo+PiA+ICAvKioKPj4gPiAgICogcGNpX2ZpbmRfdXBzdHJlYW1fcGNpZV9icmlkZ2UgLSBmaW5k IHVwc3RyZWFtIFBDSWUtdG8tUENJIGJyaWRnZSBvZiBhIGRldmljZQo+PiA+ICAgKiBAcGRldjog dGhlIFBDSSBkZXZpY2UKPj4gPgo+Cj4KPgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwppb21tdSBtYWlsaW5nIGxpc3QKaW9tbXVAbGlzdHMubGludXgtZm91 bmRhdGlvbi5vcmcKaHR0cHM6Ly9saXN0cy5saW51eGZvdW5kYXRpb24ub3JnL21haWxtYW4vbGlz dGluZm8vaW9tbXUKCgotLS0tLSBFbmQgZm9yd2FyZGVkIG1lc3NhZ2UgLS0tLS0KCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5n IGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cDovL2xpc3RzLnhlbi5vcmcveGVuLWRl dmVsCg==