From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH v2 10/24] drm/i915: Track GEN6 page table usage Date: Mon, 5 Jan 2015 15:29:13 +0100 Message-ID: <20150105142913.GZ2711@phenom.ffwll.local> References: <1418922621-25818-1-git-send-email-michel.thierry@intel.com> <1419354987-4622-1-git-send-email-michel.thierry@intel.com> <1419354987-4622-11-git-send-email-michel.thierry@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wg0-f50.google.com (mail-wg0-f50.google.com [74.125.82.50]) by gabe.freedesktop.org (Postfix) with ESMTP id B1BDD6E455 for ; Mon, 5 Jan 2015 06:29:17 -0800 (PST) Received: by mail-wg0-f50.google.com with SMTP id a1so27822871wgh.9 for ; Mon, 05 Jan 2015 06:29:16 -0800 (PST) Content-Disposition: inline In-Reply-To: <1419354987-4622-11-git-send-email-michel.thierry@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Michel Thierry Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gVHVlLCBEZWMgMjMsIDIwMTQgYXQgMDU6MTY6MTNQTSArMDAwMCwgTWljaGVsIFRoaWVycnkg d3JvdGU6Cj4gRnJvbTogQmVuIFdpZGF3c2t5IDxiZW5qYW1pbi53aWRhd3NreUBpbnRlbC5jb20+ Cj4gCj4gSW5zdGVhZCBvZiBpbXBsZW1lbnRpbmcgdGhlIGZ1bGwgdHJhY2tpbmcgKyBkeW5hbWlj IGFsbG9jYXRpb24sIHRoaXMKPiBwYXRjaCBkb2VzIGEgYml0IGxlc3MgdGhhbiBoYWxmIG9mIHRo ZSB3b3JrLCBieSB0cmFja2luZyBhbmQgd2FybmluZyBvbgo+IHVuZXhwZWN0ZWQgY29uZGl0aW9u cy4gVGhlIHRyYWNraW5nIGl0c2VsZiBmb2xsb3dzIHdoaWNoIFBURXMgd2l0aGluIGEKPiBwYWdl IHRhYmxlIGFyZSBjdXJyZW50bHkgYmVpbmcgdXNlZCBmb3Igb2JqZWN0cy4gVGhlIG5leHQgcGF0 Y2ggd2lsbAo+IG1vZGlmeSB0aGlzIHRvIGFjdHVhbGx5IGFsbG9jYXRlIHRoZSBwYWdlIHRhYmxl cyBvbmx5IHdoZW4gbmVjZXNzYXJ5Lgo+IAo+IFdpdGggdGhlIGN1cnJlbnQgcGF0Y2ggdGhlcmUg aXNuJ3QgbXVjaCBpbiB0aGUgd2F5IG9mIG1ha2luZyBhIGdlbgo+IGFnbm9zdGljIHJhbmdlIGFs bG9jYXRpb24gZnVuY3Rpb24uIEhvd2V2ZXIsIGluIHRoZSBuZXh0IHBhdGNoIHdlJ2xsIGFkZAo+ IG1vcmUgc3BlY2lmaWNpdHkgd2hpY2ggbWFrZXMgaGF2aW5nIHNlcGFyYXRlIGZ1bmN0aW9ucyBh IGJpdCBlYXNpZXIgdG8KPiBtYW5hZ2UuCj4gCj4gT25lIGltcG9ydGFudCBjaGFuZ2UgaW50cm9k dWNlZCBoZXJlIGlzIHRoYXQgRE1BIG1hcHBpbmdzIGFyZQo+IGNyZWF0ZWQvZGVzdHJveWVkIGF0 IHRoZSBzYW1lIHBhZ2UgZGlyZWN0b3JpZXMvdGFibGVzIGFyZQo+IGFsbG9jYXRlZC9kZWFsbG9j YXRlZC4KPiAKPiBOb3RpY2UgdGhhdCBhbGlhc2luZyBQUEdUVCBpcyBub3QgbWFuYWdlZCBoZXJl LiBUaGUgcGF0Y2ggd2hpY2ggYWN0dWFsbHkKPiBiZWdpbnMgZHluYW1pYyBhbGxvY2F0aW9uL3Rl YXJkb3duIGV4cGxhaW5zIHRoZSByZWFzb25pbmcgZm9yIHRoaXMuCj4gCj4gdjI6IHMvcGRwLnBh Z2VkaXIvcGRwLnBhZ2VkaXJzCj4gTWFrZSBhIHNjcmF0Y2ggcGFnZSBhbGxvY2F0aW9uIGhlbHBl cgo+IAo+IHYzOiBSZWJhc2UgYW5kIGV4cGFuZCBjb21taXQgbWVzc2FnZS4KPiAKPiB2NDogQWxs b2NhdGUgcmVxdWlyZWQgcGFnZXRhYmxlcyBvbmx5IHdoZW4gaXQgaXMgbmVlZGVkLCBfYmluZF90 b192bQo+IGluc3RlYWQgb2YgYmluZF92bWEgKERhbmllbCkuCj4gCj4gQ2M6IERhbmllbCBWZXR0 ZXIgPGRhbmllbEBmZndsbC5jaD4KPiBTaWduZWQtb2ZmLWJ5OiBCZW4gV2lkYXdza3kgPGJlbkBi d2lkYXdzay5uZXQ+Cj4gU2lnbmVkLW9mZi1ieTogTWljaGVsIFRoaWVycnkgPG1pY2hlbC50aGll cnJ5QGludGVsLmNvbT4gKHYzKykKCkltbyBzdGlsbCBhIGJpdCB0b28gbXVjaCByZWJhc2UgZmx1 ZmYgaW4gdGhpcyBwYXRjaC4gSSB0aGluayBpdCB3b3VsZCBoZWxwCnRoZSBwYXRjaCBjbGFyaXR5 IGEgbG90IG9mIHdlJ2Qgc3BsaXQgdGhlIGNoYW5nZXMgdG8gbW92ZSBhcm91bmQgdGhlCmRtYV9t YXAvdW5tYXAgY2FsbHMgZnJvbSB0aGUgb3RoZXIgcGFydHMgb2YgdGhlIHBhdGNoIHRvIGR5bmFt aWNhbGx5CmFsbG9jYXRlIHBhZ2V0YWJsZXMuCgpCdW5jaCBtb3JlIGNvbW1lbnRzIGJlbG93Lgot RGFuaWVsCgo+IC0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jICAgICB8ICAg OSArKwo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYyB8IDI3NyArKysrKysr KysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9nZW1fZ3R0LmggfCAxNDkgKysrKysrKysrKysrKystLS0tLQo+ICAzIGZpbGVzIGNoYW5nZWQs IDMyMiBpbnNlcnRpb25zKCspLCAxMTMgZGVsZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2dlbS5jCj4gaW5kZXggMmI2ZWNmZC4uNWQ1Mjk5MCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2dlbS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9n ZW0uYwo+IEBAIC0zNTk3LDYgKzM1OTcsMTUgQEAgc2VhcmNoX2ZyZWU6Cj4gIAlpZiAocmV0KQo+ ICAJCWdvdG8gZXJyX3JlbW92ZV9ub2RlOwo+ICAKPiArCS8qICBhbGxvY2F0ZSBiZWZvcmUgaW5z ZXJ0IC8gYmluZCAqLwo+ICsJaWYgKHZtYS0+dm0tPmFsbG9jYXRlX3ZhX3JhbmdlKSB7Cj4gKwkJ cmV0ID0gdm1hLT52bS0+YWxsb2NhdGVfdmFfcmFuZ2Uodm1hLT52bSwKPiArCQkJCQkJdm1hLT5u b2RlLnN0YXJ0LAo+ICsJCQkJCQl2bWEtPm5vZGUuc2l6ZSk7Cj4gKwkJaWYgKHJldCkKPiArCQkJ Z290byBlcnJfcmVtb3ZlX25vZGU7Cj4gKwl9CgpJcyB0aGlzIHJlYWxseSB0aGUgcmlnaHQgcGF0 Y2ggZm9yIHRoaXMgaHVuaz8gVGhlIGNvbW1pdCBtZXNzYWdlIHNvdW5kcwpsaWtlIGR5bmFtaWMg cGFnZXRhYmxlIGFsbG9jIGlzIG9ubHkgcGFydGlhbGx5IGltcGxlbWVudGVkIGhlcmUgLi4uCgo+ ICsKPiAgCXRyYWNlX2k5MTVfdm1hX2JpbmQodm1hLCBmbGFncyk7Cj4gIAlyZXQgPSBpOTE1X3Zt YV9iaW5kKHZtYSwgb2JqLT5jYWNoZV9sZXZlbCwKPiAgCQkJICAgIGZsYWdzICYgUElOX0dMT0JB TCA/IEdMT0JBTF9CSU5EIDogMCk7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZ2VtX2d0dC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMKPiBp bmRleCA1MmJkZGU3Li4zMTM0MzJlIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZ2VtX2d0dC5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0 LmMKPiBAQCAtMTM4LDEwICsxMzgsOSBAQCBzdGF0aWMgaW50IHNhbml0aXplX2VuYWJsZV9wcGd0 dChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgZW5hYmxlX3BwZ3R0KQo+ICAJCXJldHVybiBo YXNfYWxpYXNpbmdfcHBndHQgPyAxIDogMDsKPiAgfQo+ICAKPiAtCj4gIHN0YXRpYyB2b2lkIHBw Z3R0X2JpbmRfdm1hKHN0cnVjdCBpOTE1X3ZtYSAqdm1hLAo+IC0JCQkgICBlbnVtIGk5MTVfY2Fj aGVfbGV2ZWwgY2FjaGVfbGV2ZWwsCj4gLQkJCSAgIHUzMiBmbGFncyk7Cj4gKwkJCSAgZW51bSBp OTE1X2NhY2hlX2xldmVsIGNhY2hlX2xldmVsLAo+ICsJCQkgIHUzMiBmbGFncyk7Cj4gIHN0YXRp YyB2b2lkIHBwZ3R0X3VuYmluZF92bWEoc3RydWN0IGk5MTVfdm1hICp2bWEpOwo+ICAKPiAgc3Rh dGljIGlubGluZSBnZW44X2d0dF9wdGVfdCBnZW44X3B0ZV9lbmNvZGUoZG1hX2FkZHJfdCBhZGRy LAo+IEBAIC0yNzUsMjcgKzI3NCw5OSBAQCBzdGF0aWMgZ2VuNl9ndHRfcHRlX3QgaXJpc19wdGVf ZW5jb2RlKGRtYV9hZGRyX3QgYWRkciwKPiAgCXJldHVybiBwdGU7Cj4gIH0KPiAgCj4gLXN0YXRp YyB2b2lkIGZyZWVfcHRfc2luZ2xlKHN0cnVjdCBpOTE1X3BhZ2V0YWIgKnB0KQo+IC17Cj4gKyNk ZWZpbmUgaTkxNV9kbWFfdW5tYXBfc2luZ2xlKHB4LCBkZXYpIGRvIHsgXAo+ICsJcGNpX3VubWFw X3BhZ2UoKGRldiktPnBkZXYsIChweCktPmRhZGRyLCA0MDk2LCBQQ0lfRE1BX0JJRElSRUNUSU9O QUwpOyBcCj4gK30gd2hpbGUgKDApOwo+ICsKPiArLyoqCj4gKyAqIGk5MTVfZG1hX21hcF9weF9z aW5nbGUoKSAtIENyZWF0ZSBhIGRtYSBtYXBwaW5nIGZvciBhIHBhZ2UgdGFibGUvZGlyL2V0Yy4K PiArICogQHB4OgkJUGFnZSB0YWJsZS9kaXIvZXRjIHRvIGdldCBhIERNQSBtYXAgZm9yCj4gKyAq IEBkZXY6CWRybSBkZXZpY2UKPiArICoKPiArICogUGFnZSB0YWJsZSBhbGxvY2F0aW9ucyBhcmUg dW5pZmllZCBhY3Jvc3MgYWxsIGdlbnMuIFRoZXkgYWx3YXlzIHJlcXVpcmUgYQo+ICsgKiBzaW5n bGUgNGsgYWxsb2NhdGlvbiwgYXMgd2VsbCBhcyBhIERNQSBtYXBwaW5nLiBJZiB3ZSBrZWVwIHRo ZSBzdHJ1Y3RzCj4gKyAqIHN5bW1ldHJpYyBoZXJlLCB0aGUgc2ltcGxlIG1hY3JvIGNvdmVycyB1 cyBmb3IgZXZlcnkgcGFnZSB0YWJsZSB0eXBlLgo+ICsgKgo+ICsgKiBSZXR1cm46IDAgaWYgc3Vj Y2Vzcy4KPiArICovCj4gKyNkZWZpbmUgaTkxNV9kbWFfbWFwX3B4X3NpbmdsZShweCwgZGV2KSBc Cj4gKwlwY2lfZG1hX21hcHBpbmdfZXJyb3IoKGRldiktPnBkZXYsIFwKPiArCQkJICAgICAgKHB4 KS0+ZGFkZHIgPSBwY2lfbWFwX3BhZ2UoKGRldiktPnBkZXYsIFwKPiArCQkJCQkJCSAocHgpLT5w YWdlLCAwLCA0MDk2LCBcCj4gKwkJCQkJCQkgUENJX0RNQV9CSURJUkVDVElPTkFMKSkKCkxpbnV4 IGNvZGluZyBzdHlsZSBkaXNjb3VyYWdlcyBtYWNybyBhYnVzZSBsaWtlIHRoaXMsIHBsZWFzZSBt YWtlIHRoaXMgYQpzdGF0aWMgaW5saW5lIGluc3RlYWQuIE90b2ggSSBkb24ndCByZWFsbHkgc2Vl IHRoZSB2YWx1ZSBpbiBoaWRpbmcgdGhlCnBjaV9tYXBfcGFnZSBjYWxsLCBpbW8gb3Blbi1jb2Rl aW5nIHRoaXMgaXMgdG90YWxseSBvay4KCkJ1dCB3aGlsZSB5b3UgdG91Y2ggdGhlIGNvZGUgcGxl YXNlIHN3aXRjaCBhd2F5IGZyb20gdGhlIHBjaV9tYXAgd3JhcHBlcnMKYW5kIHVzZSB0aGUgZG1h X21hcCBmdW5jdGlvbnMgZGlyZWN0bHkuCgo+ICsKPiArc3RhdGljIHZvaWQgX19mcmVlX3B0X3Np bmdsZShzdHJ1Y3QgaTkxNV9wYWdldGFiICpwdCwgc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAr CQkJICAgICBpbnQgc2NyYXRjaCkKPiArewo+ICsJaWYgKFdBUk4oc2NyYXRjaCBeIHB0LT5zY3Jh dGNoLAo+ICsJCSAiVHJpZWQgdG8gZnJlZSBzY3JhdGNoID0gJWQuIElzIHNjcmF0Y2ggPSAlZFxu IiwKPiArCQkgc2NyYXRjaCwgcHQtPnNjcmF0Y2gpKQo+ICsJCXJldHVybjsKPiArCj4gIAlpZiAo V0FSTl9PTighcHQtPnBhZ2UpKQo+ICAJCXJldHVybjsKPiArCj4gKwlpZiAoIXNjcmF0Y2gpIHsK PiArCQljb25zdCBzaXplX3QgY291bnQgPSBJTlRFTF9JTkZPKGRldiktPmdlbiA+PSA4ID8KPiAr CQkJR0VOOF9QVEVTX1BFUl9QQUdFIDogSTkxNV9QUEdUVF9QVF9FTlRSSUVTOwo+ICsJCVdBUk4o IWJpdG1hcF9lbXB0eShwdC0+dXNlZF9wdGVzLCBjb3VudCksCj4gKwkJICAgICAiRnJlZSBwYWdl IHRhYmxlIHdpdGggJWQgdXNlZCBwYWdlc1xuIiwKPiArCQkgICAgIGJpdG1hcF93ZWlnaHQocHQt PnVzZWRfcHRlcywgY291bnQpKTsKPiArCX0KPiArCj4gKwlpOTE1X2RtYV91bm1hcF9zaW5nbGUo cHQsIGRldik7Cj4gIAlfX2ZyZWVfcGFnZShwdC0+cGFnZSk7Cj4gKwlrZnJlZShwdC0+dXNlZF9w dGVzKTsKPiAgCWtmcmVlKHB0KTsKPiAgfQo+ICAKPiAtc3RhdGljIHN0cnVjdCBpOTE1X3BhZ2V0 YWIgKmFsbG9jX3B0X3NpbmdsZSh2b2lkKQo+ICsjZGVmaW5lIGZyZWVfcHRfc2luZ2xlKHB0LCBk ZXYpIFwKPiArCV9fZnJlZV9wdF9zaW5nbGUocHQsIGRldiwgZmFsc2UpCj4gKyNkZWZpbmUgZnJl ZV9wdF9zY3JhdGNoKHB0LCBkZXYpIFwKPiArCV9fZnJlZV9wdF9zaW5nbGUocHQsIGRldiwgdHJ1 ZSkKCkltbyB0aGUgZGlzZGluY3Rpb24gYmV0d2VlbiBfc2luZ2xlIGFuZCBfc2NyYWN0aCBpcyBj b25mdXNpbmcuIEluc3RlYWQKYWRkaW5nIGEgbmV3IGZ1bmN0aW9ucyB1bm1hcF9hbmRfZnJlZV9w dCB3aGljaCBjYWxscyBkbWFfdW5tYXBfcGFnZSBhbmQKZnJlZV9wdF9zaW5nbGUgd291bGQgbWFr ZSBtb3JlIHNlbnNlLiBUaGVuIHRoZXJlJ3MgYWxzbyBubyBuZWVkIGZvciB0aGUgX18KdmVyc2lv biBvZiB0aGUgZnVuY3Rpb24gYW5kIHRoZSBzY3JhdGNoIHBhcmFtZXRlci4KCkl0IG1lYW5zIHRo YXQgd2UnbGwgbmVlZCB0byBraWxsIHRoZSBzZWxmY2hlY2tzIGZvciBzY3JhdGNoLCBidXQgYnkK dW5jbHV0dGVyaW5nIHRoZSBpbmRpcmVjdGlvbnMgaGVyZSBhIGJpdCBhcyBwcm9wb3NlZCBhbnkg c3VjaCBidWdzIHNob3VsZApiZSBvYnZpb3VzLiBBbGwgdGhlIG90aGVycyB3aWxsIGJlIGNhdWdo dCBieSB0aGUgZG1hIG1hcHBpbmcgZGVidWdnaW5nCmNvZGUgKHdoaWNoIGlzIHN1cGVyLXBhcmFu b2lkIGFmYWlrKS4KCj4gKwo+ICtzdGF0aWMgc3RydWN0IGk5MTVfcGFnZXRhYiAqYWxsb2NfcHRf c2luZ2xlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gIHsKPiAgCXN0cnVjdCBpOTE1X3BhZ2V0 YWIgKnB0Owo+ICsJY29uc3Qgc2l6ZV90IGNvdW50ID0gSU5URUxfSU5GTyhkZXYpLT5nZW4gPj0g OCA/Cj4gKwkJR0VOOF9QVEVTX1BFUl9QQUdFIDogSTkxNV9QUEdUVF9QVF9FTlRSSUVTOwo+ICsJ aW50IHJldCA9IC1FTk9NRU07Cj4gIAo+ICAJcHQgPSBremFsbG9jKHNpemVvZigqcHQpLCBHRlBf S0VSTkVMKTsKPiAgCWlmICghcHQpCj4gIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cj4gIAo+ ICsJcHQtPnVzZWRfcHRlcyA9IGtjYWxsb2MoQklUU19UT19MT05HUyhjb3VudCksIHNpemVvZigq cHQtPnVzZWRfcHRlcyksCj4gKwkJCQlHRlBfS0VSTkVMKTsKPiArCgpJIGRvbid0IHNlZSB0aGUg dmFsdWUgaW4gdHJhY2tpbmcgdXNlZF9wdGVzLiBGb3IgZGVidWdnaW5nIHdlIGNhbiBqdXN0Cmxv b2sgYXQgdGhlIHB0ZSB2YWx1ZSBpdHNlbGYgKHdoaWNoIHNob3VsZCBiZSBpbiBjYWNoZWQgbWVt b3J5LCBzbyBkaXJ0CmNoZWFwKS4gQW5kIHNpbmNlIHBhZ2V0YWJsZXMgYXJlIHRoZSBsb3dlc3Qg bGV2ZWwgd2UgY2FuJ3Qgc2NyZXcgdXAgdGhlCmFsbG9jYXRpb25zL2ZyZWVpbmcuIFdoYXQgZG8g SSBtaXNzPwoKPiArCWlmICghcHQtPnVzZWRfcHRlcykKPiArCQlnb3RvIGZhaWxfYml0bWFwOwo+ ICsKPiAgCXB0LT5wYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7Cj4g LQlpZiAoIXB0LT5wYWdlKSB7Cj4gLQkJa2ZyZWUocHQpOwo+IC0JCXJldHVybiBFUlJfUFRSKC1F Tk9NRU0pOwo+IC0JfQo+ICsJaWYgKCFwdC0+cGFnZSkKPiArCQlnb3RvIGZhaWxfcGFnZTsKPiAr Cj4gKwlyZXQgPSBpOTE1X2RtYV9tYXBfcHhfc2luZ2xlKHB0LCBkZXYpOwo+ICsJaWYgKHJldCkK PiArCQlnb3RvIGZhaWxfZG1hOwo+ICsKPiArCXJldHVybiBwdDsKPiArCj4gK2ZhaWxfZG1hOgo+ ICsJX19mcmVlX3BhZ2UocHQtPnBhZ2UpOwo+ICtmYWlsX3BhZ2U6Cj4gKwlrZnJlZShwdC0+dXNl ZF9wdGVzKTsKPiArZmFpbF9iaXRtYXA6Cj4gKwlrZnJlZShwdCk7Cj4gKwo+ICsJcmV0dXJuIEVS Ul9QVFIocmV0KTsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSBzdHJ1Y3QgaTkxNV9wYWdldGFi ICphbGxvY19wdF9zY3JhdGNoKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gK3sKPiArCXN0cnVj dCBpOTE1X3BhZ2V0YWIgKnB0ID0gYWxsb2NfcHRfc2luZ2xlKGRldik7Cj4gKwlpZiAoIUlTX0VS UihwdCkpCj4gKwkJcHQtPnNjcmF0Y2ggPSAxOwoKU2hvdWxkbid0IHdlIGZpbGwgdGhlIHNjcmF0 Y2ggcHQgd2l0aCBzY3JhdGNoIHB0ZSBlbnRyaWVzPyBPciBkbyBJIG1pc3MKdGhlIHBvaW50IG9m IHRoaXM/IEhhcmQgdG8gdGVsbCB3aXRob3V0IGhhdmluZyB1c2VycyBvZiBzY3JhdGNoX3B0IGlu IHRoZQpzYW1lIHBhdGNoIGFzIHRoZSBwYXRjaCBhcyB0aGUgb25lIHRoYXQgYWRkcyB0aGVtLiBN aWdodCBiZSBnb29kIHRvIHNwbGl0CnRoaXMgaW4geWV0IGFub3RoZXIgcGF0Yy4KCj4gIAo+ICAJ cmV0dXJuIHB0Owo+ICB9Cj4gQEAgLTMxMyw3ICszODQsOSBAQCBzdGF0aWMgc3RydWN0IGk5MTVf cGFnZXRhYiAqYWxsb2NfcHRfc2luZ2xlKHZvaWQpCj4gICAqCj4gICAqIFJldHVybjogMCBpZiBh bGxvY2F0aW9uIHN1Y2NlZWRlZC4KPiAgICovCj4gLXN0YXRpYyBpbnQgYWxsb2NfcHRfcmFuZ2Uo c3RydWN0IGk5MTVfcGFnZWRpciAqcGQsIHVpbnQxNl90IHBkZSwgc2l6ZV90IGNvdW50KQo+ICtz dGF0aWMgaW50IGFsbG9jX3B0X3JhbmdlKHN0cnVjdCBpOTE1X3BhZ2VkaXIgKnBkLCB1aW50MTZf dCBwZGUsIHNpemVfdCBjb3VudCwKPiArCQkgIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCgpBc2lk ZTogVGhlIHJlYXNvbiBJJ3ZlIHN1Z2dlc3RlZCB0byBzcGxpdCB0aGUgcGF0Y2hlcyBpcyBzbyB0 aGF0IHdlIGNhbgpnZXQgYWxsIHRoZSBhZGRlZCAqZGV2IHBhcmFtZXRlcnMgb3V0IG9mIHRoZSBk aWZmLiBUaGF0IHNob3VsZCBoZWxwIHBhdGNoCnJlYWRhYmxpdHkgYSBsb3QuCgo+ICsKPiAgewo+ ICAJaW50IGksIHJldDsKPiAgCj4gQEAgLTMyMyw3ICszOTYsNyBAQCBzdGF0aWMgaW50IGFsbG9j X3B0X3JhbmdlKHN0cnVjdCBpOTE1X3BhZ2VkaXIgKnBkLCB1aW50MTZfdCBwZGUsIHNpemVfdCBj b3VudCkKPiAgCUJVR19PTihwZGUgKyBjb3VudCA+IEdFTjZfUFBHVFRfUERfRU5UUklFUyk7Cj4g IAo+ICAJZm9yIChpID0gcGRlOyBpIDwgcGRlICsgY291bnQ7IGkrKykgewo+IC0JCXN0cnVjdCBp OTE1X3BhZ2V0YWIgKnB0ID0gYWxsb2NfcHRfc2luZ2xlKCk7Cj4gKwkJc3RydWN0IGk5MTVfcGFn ZXRhYiAqcHQgPSBhbGxvY19wdF9zaW5nbGUoZGV2KTsKPiAgCQlpZiAoSVNfRVJSKHB0KSkgewo+ ICAJCQlyZXQgPSBQVFJfRVJSKHB0KTsKPiAgCQkJZ290byBlcnJfb3V0Owo+IEBAIC0zMzgsNyAr NDExLDcgQEAgc3RhdGljIGludCBhbGxvY19wdF9yYW5nZShzdHJ1Y3QgaTkxNV9wYWdlZGlyICpw ZCwgdWludDE2X3QgcGRlLCBzaXplX3QgY291bnQpCj4gIAo+ICBlcnJfb3V0Ogo+ICAJd2hpbGUg KGktLSkKPiAtCQlmcmVlX3B0X3NpbmdsZShwZC0+cGFnZV90YWJsZXNbaV0pOwo+ICsJCWZyZWVf cHRfc2luZ2xlKHBkLT5wYWdlX3RhYmxlc1tpXSwgZGV2KTsKPiAgCXJldHVybiByZXQ7Cj4gIH0K PiAgCj4gQEAgLTUwNiw3ICs1NzksNyBAQCBzdGF0aWMgdm9pZCBnZW44X3BwZ3R0X2luc2VydF9l bnRyaWVzKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAo+ICAJfQo+ICB9Cj4gIAo+IC1z dGF0aWMgdm9pZCBnZW44X2ZyZWVfcGFnZV90YWJsZXMoc3RydWN0IGk5MTVfcGFnZWRpciAqcGQp Cj4gK3N0YXRpYyB2b2lkIGdlbjhfZnJlZV9wYWdlX3RhYmxlcyhzdHJ1Y3QgaTkxNV9wYWdlZGly ICpwZCwgc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiAgewo+ICAJaW50IGk7Cj4gIAo+IEBAIC01 MTQsNyArNTg3LDcgQEAgc3RhdGljIHZvaWQgZ2VuOF9mcmVlX3BhZ2VfdGFibGVzKHN0cnVjdCBp OTE1X3BhZ2VkaXIgKnBkKQo+ICAJCXJldHVybjsKPiAgCj4gIAlmb3IgKGkgPSAwOyBpIDwgR0VO OF9QREVTX1BFUl9QQUdFOyBpKyspIHsKPiAtCQlmcmVlX3B0X3NpbmdsZShwZC0+cGFnZV90YWJs ZXNbaV0pOwo+ICsJCWZyZWVfcHRfc2luZ2xlKHBkLT5wYWdlX3RhYmxlc1tpXSwgZGV2KTsKPiAg CQlwZC0+cGFnZV90YWJsZXNbaV0gPSBOVUxMOwo+ICAJfQo+ICB9Cj4gQEAgLTUyNCw3ICs1OTcs NyBAQCBzdGF0aWMgdm9pZCBnZW44X3BwZ3R0X2ZyZWUoc3RydWN0IGk5MTVfaHdfcHBndHQgKnBw Z3R0KQo+ICAJaW50IGk7Cj4gIAo+ICAJZm9yIChpID0gMDsgaSA8IHBwZ3R0LT5udW1fcGRfcGFn ZXM7IGkrKykgewo+IC0JCWdlbjhfZnJlZV9wYWdlX3RhYmxlcyhwcGd0dC0+cGRwLnBhZ2VkaXJb aV0pOwo+ICsJCWdlbjhfZnJlZV9wYWdlX3RhYmxlcyhwcGd0dC0+cGRwLnBhZ2VkaXJbaV0sIHBw Z3R0LT5iYXNlLmRldik7Cj4gIAkJZnJlZV9wZF9zaW5nbGUocHBndHQtPnBkcC5wYWdlZGlyW2ld KTsKPiAgCX0KPiAgfQo+IEBAIC01NjksNyArNjQyLDcgQEAgc3RhdGljIGludCBnZW44X3BwZ3R0 X2FsbG9jYXRlX3BhZ2VfdGFibGVzKHN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpwcGd0dCkKPiAgCj4g IAlmb3IgKGkgPSAwOyBpIDwgcHBndHQtPm51bV9wZF9wYWdlczsgaSsrKSB7Cj4gIAkJcmV0ID0g YWxsb2NfcHRfcmFuZ2UocHBndHQtPnBkcC5wYWdlZGlyW2ldLAo+IC0JCQkJICAgICAwLCBHRU44 X1BERVNfUEVSX1BBR0UpOwo+ICsJCQkJICAgICAwLCBHRU44X1BERVNfUEVSX1BBR0UsIHBwZ3R0 LT5iYXNlLmRldik7Cj4gIAkJaWYgKHJldCkKPiAgCQkJZ290byB1bndpbmRfb3V0Owo+ICAJfQo+ IEBAIC01NzgsNyArNjUxLDcgQEAgc3RhdGljIGludCBnZW44X3BwZ3R0X2FsbG9jYXRlX3BhZ2Vf dGFibGVzKHN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpwcGd0dCkKPiAgCj4gIHVud2luZF9vdXQ6Cj4g IAl3aGlsZSAoaS0tKQo+IC0JCWdlbjhfZnJlZV9wYWdlX3RhYmxlcyhwcGd0dC0+cGRwLnBhZ2Vk aXJbaV0pOwo+ICsJCWdlbjhfZnJlZV9wYWdlX3RhYmxlcyhwcGd0dC0+cGRwLnBhZ2VkaXJbaV0s IHBwZ3R0LT5iYXNlLmRldik7Cj4gIAo+ICAJcmV0dXJuIC1FTk9NRU07Cj4gIH0KPiBAQCAtODA4 LDI2ICs4ODEsMzYgQEAgc3RhdGljIHZvaWQgZ2VuNl9kdW1wX3BwZ3R0KHN0cnVjdCBpOTE1X2h3 X3BwZ3R0ICpwcGd0dCwgc3RydWN0IHNlcV9maWxlICptKQo+ICAJfQo+ICB9Cj4gIAo+IC1zdGF0 aWMgdm9pZCBnZW42X3dyaXRlX3BkZXMoc3RydWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0KQo+ICsv KiBXcml0ZSBwZGUgKGluZGV4KSBmcm9tIHRoZSBwYWdlIGRpcmVjdG9yeSBAcGQgdG8gdGhlIHBh Z2UgdGFibGUgQHB0ICovCj4gK3N0YXRpYyB2b2lkIGdlbjZfd3JpdGVfcGRlcyhzdHJ1Y3QgaTkx NV9wYWdlZGlyICpwZCwKPiArCQkJICAgIGNvbnN0IGludCBwZGUsIHN0cnVjdCBpOTE1X3BhZ2V0 YWIgKnB0KQo+ICB7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBwcGd0 dC0+YmFzZS5kZXYtPmRldl9wcml2YXRlOwo+IC0JZ2VuNl9ndHRfcHRlX3QgX19pb21lbSAqcGRf YWRkcjsKPiAtCXVpbnQzMl90IHBkX2VudHJ5Owo+IC0JaW50IGk7Cj4gKwlzdHJ1Y3QgaTkxNV9o d19wcGd0dCAqcHBndHQgPQo+ICsJCWNvbnRhaW5lcl9vZihwZCwgc3RydWN0IGk5MTVfaHdfcHBn dHQsIHBkKTsKPiArCXUzMiBwZF9lbnRyeTsKPiAgCj4gLQlXQVJOX09OKHBwZ3R0LT5wZC5wZF9v ZmZzZXQgJiAweDNmKTsKPiAtCXBkX2FkZHIgPSAoZ2VuNl9ndHRfcHRlX3QgX19pb21lbSopZGV2 X3ByaXYtPmd0dC5nc20gKwo+IC0JCXBwZ3R0LT5wZC5wZF9vZmZzZXQgLyBzaXplb2YoZ2VuNl9n dHRfcHRlX3QpOwo+IC0JZm9yIChpID0gMDsgaSA8IHBwZ3R0LT5udW1fcGRfZW50cmllczsgaSsr KSB7Cj4gLQkJZG1hX2FkZHJfdCBwdF9hZGRyOwo+ICsJcGRfZW50cnkgPSBHRU42X1BERV9BRERS X0VOQ09ERShwdC0+ZGFkZHIpOwo+ICsJcGRfZW50cnkgfD0gR0VONl9QREVfVkFMSUQ7Cj4gIAo+ IC0JCXB0X2FkZHIgPSBwcGd0dC0+cGQucGFnZV90YWJsZXNbaV0tPmRhZGRyOwo+IC0JCXBkX2Vu dHJ5ID0gR0VONl9QREVfQUREUl9FTkNPREUocHRfYWRkcik7Cj4gLQkJcGRfZW50cnkgfD0gR0VO Nl9QREVfVkFMSUQ7Cj4gKwl3cml0ZWwocGRfZW50cnksIHBwZ3R0LT5wZF9hZGRyICsgcGRlKTsK PiAgCj4gLQkJd3JpdGVsKHBkX2VudHJ5LCBwZF9hZGRyICsgaSk7Cj4gLQl9Cj4gLQlyZWFkbChw ZF9hZGRyKTsKPiArCS8qIFhYWDogQ2FsbGVyIG5lZWRzIHRvIG1ha2Ugc3VyZSB0aGUgd3JpdGUg Y29tcGxldGVzIGlmIG5lY2Vzc2FyeSAqLwoKUGxlYXNlIHRha2UgY2FyZSBvZiBzdWNoIFhYWCBj b21tZW50cy4gVGhhdCdzIHRoZSBzdHVmZiBJJ3ZlIG1lYW50IHdoZW4KSSd2ZSBzYWlkIHRoYXQg dGhlIG92ZXJhbGwgcGF0Y2ggc2VyaWVzIG5lZWRzIGEgZnVsbCBwYXNzIHdpdGggYSBjcml0aWNh bApleWUgdG8gY2F0Y2ggZGV2ZWxvcG1lbnQvcmViYXNlIGxlZnRvdmVycy4KCj4gK30KPiArCj4g Ky8qIFdyaXRlIGFsbCB0aGUgcGFnZSB0YWJsZXMgZm91bmQgaW4gdGhlIHBwZ3R0IHN0cnVjdHVy ZSB0byBpbmNyZW1lbnRpbmcgcGFnZQo+ICsgKiBkaXJlY3Rvcmllcy4gKi8KPiArc3RhdGljIHZv aWQgZ2VuNl93cml0ZV9wYWdlX3JhbmdlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diwKPiArCQkJCXN0cnVjdCBpOTE1X3BhZ2VkaXIgKnBkLCB1aW50MzJfdCBzdGFydCwgdWludDMy X3QgbGVuZ3RoKQo+ICt7Cj4gKwlzdHJ1Y3QgaTkxNV9wYWdldGFiICpwdDsKPiArCXVpbnQzMl90 IHBkZSwgdGVtcDsKPiArCj4gKwlnZW42X2Zvcl9lYWNoX3BkZShwdCwgcGQsIHN0YXJ0LCBsZW5n dGgsIHRlbXAsIHBkZSkKPiArCQlnZW42X3dyaXRlX3BkZXMocGQsIHBkZSwgcHQpOwo+ICsKPiAr CS8qIE1ha2Ugc3VyZSB3cml0ZSBpcyBjb21wbGV0ZSBiZWZvcmUgb3RoZXIgY29kZSBjYW4gdXNl IHRoaXMgcGFnZQo+ICsJICogdGFibGUuIEFsc28gcmVxdWlyZSBmb3IgV0MgbWFwcGVkIFBURXMg Ki8KPiArCXJlYWRsKGRldl9wcml2LT5ndHQuZ3NtKTsKPiAgfQo+ICAKPiAgc3RhdGljIHVpbnQz Ml90IGdldF9wZF9vZmZzZXQoc3RydWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0KQo+IEBAIC0xMDQz LDEzICsxMTI2LDU5IEBAIHN0YXRpYyB2b2lkIGdlbjZfcHBndHRfdW5tYXBfcGFnZXMoc3RydWN0 IGk5MTVfaHdfcHBndHQgKnBwZ3R0KQo+ICAJCQkgICAgICAgNDA5NiwgUENJX0RNQV9CSURJUkVD VElPTkFMKTsKPiAgfQo+ICAKPiArc3RhdGljIGludCBnZW42X2FsbG9jX3ZhX3JhbmdlKHN0cnVj dCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAo+ICsJCQkgICAgICAgdWludDY0X3Qgc3RhcnQsIHVp bnQ2NF90IGxlbmd0aCkKPiArewo+ICsJc3RydWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0ID0KPiAr CQkJCWNvbnRhaW5lcl9vZih2bSwgc3RydWN0IGk5MTVfaHdfcHBndHQsIGJhc2UpOwo+ICsJc3Ry dWN0IGk5MTVfcGFnZXRhYiAqcHQ7Cj4gKwl1aW50MzJfdCBwZGUsIHRlbXA7Cj4gKwo+ICsJZ2Vu Nl9mb3JfZWFjaF9wZGUocHQsICZwcGd0dC0+cGQsIHN0YXJ0LCBsZW5ndGgsIHRlbXAsIHBkZSkg ewo+ICsJCWludCBqOwo+ICsKPiArCQlERUNMQVJFX0JJVE1BUCh0bXBfYml0bWFwLCBJOTE1X1BQ R1RUX1BUX0VOVFJJRVMpOwo+ICsJCWJpdG1hcF96ZXJvKHRtcF9iaXRtYXAsIEk5MTVfUFBHVFRf UFRfRU5UUklFUyk7Cj4gKwkJYml0bWFwX3NldCh0bXBfYml0bWFwLCBnZW42X3B0ZV9pbmRleChz dGFydCksCj4gKwkJCSAgIGdlbjZfcHRlX2NvdW50KHN0YXJ0LCBsZW5ndGgpKTsKPiArCj4gKwkJ LyogVE9ETzogVG8gYmUgZG9uZSBpbiB0aGUgbmV4dCBwYXRjaC4gTWFwIHRoZSBwYWdlL2luc2Vy dAo+ICsJCSAqIGVudHJpZXMgaGVyZSAqLwo+ICsJCWZvcl9lYWNoX3NldF9iaXQoaiwgdG1wX2Jp dG1hcCwgSTkxNV9QUEdUVF9QVF9FTlRSSUVTKSB7Cj4gKwkJCWlmICh0ZXN0X2JpdChqLCBwdC0+ dXNlZF9wdGVzKSkgewo+ICsJCQkJLyogQ2hlY2sgdGhhdCB3ZSdyZSBjaGFuZ2luZyBjYWNoZSBs ZXZlbHMgKi8KCkFnYWluIHNvbWV0aGluZyBvbmx5IHZhbGlkIGZyb20gb2xkZXIgcmV2aXNpb25z IHNpbmNlIHdlJ3ZlIHRha2VuIGNhcmUgb2YKdGhlIGNhY2hlX2xldmVsIGNoYW5nZXMgYnkgb25s eSBleHRlbmRlZGluZyBwYWdldGFibGVzIHdoZXJlIGFjdHVhbGx5Cm5lZWRlZCAoaW4gdGhlIGJp bmQgZnVuY3Rpb25zKS4gRnVydGhlcm1vcmUgd2l0aCB0aGUgdXNlZF9wdGVzIGJpdG1hc2sKZ29u ZSB0aGlzIHdvdWxkIGFsbCBkaXNhcHBlYXIgYW55d2F5LgoKR2l2ZW4gdGhhdCB0aGUgcGF0Y2gg anVzdGlmaWVzIGl0c2VsZiBieSBhZGRpbmcgdGhlIGR5bmFtaWMgYWxsb2NhdGlvbiBhbmQKdHJh Y2tpbmcgZmlyc3QgdG8gZGVidWcgaXQsIGJ1dCBkb2Vzbid0IGFkZCBhbnkgc2VsZi1jaGVja3Mg aW4gdGhlIHB0ZQp3cml0aW5nIGZ1bmNzIChhZmFpY3MgYXQgbGVhc3QpIEkgZG9uJ3QgdGhpbmsg dGhpcyBpcyBhbGwgdGhhdCB1c2VmdWwgYW55Cm1vcmUuCgo+ICsJCQl9Cj4gKwkJfQo+ICsKPiAr CQliaXRtYXBfb3IocHQtPnVzZWRfcHRlcywgcHQtPnVzZWRfcHRlcywgdG1wX2JpdG1hcCwKPiAr CQkJCUk5MTVfUFBHVFRfUFRfRU5UUklFUyk7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30K PiArCj4gK3N0YXRpYyB2b2lkIGdlbjZfdGVhcmRvd25fdmFfcmFuZ2Uoc3RydWN0IGk5MTVfYWRk cmVzc19zcGFjZSAqdm0sCj4gKwkJCQkgICB1aW50NjRfdCBzdGFydCwgdWludDY0X3QgbGVuZ3Ro KQo+ICt7Cj4gKwlzdHJ1Y3QgaTkxNV9od19wcGd0dCAqcHBndHQgPQo+ICsJCQkJY29udGFpbmVy X29mKHZtLCBzdHJ1Y3QgaTkxNV9od19wcGd0dCwgYmFzZSk7Cj4gKwlzdHJ1Y3QgaTkxNV9wYWdl dGFiICpwdDsKPiArCXVpbnQzMl90IHBkZSwgdGVtcDsKPiArCj4gKwlnZW42X2Zvcl9lYWNoX3Bk ZShwdCwgJnBwZ3R0LT5wZCwgc3RhcnQsIGxlbmd0aCwgdGVtcCwgcGRlKSB7Cj4gKwkJYml0bWFw X2NsZWFyKHB0LT51c2VkX3B0ZXMsIGdlbjZfcHRlX2luZGV4KHN0YXJ0KSwKPiArCQkJICAgICBn ZW42X3B0ZV9jb3VudChzdGFydCwgbGVuZ3RoKSk7Cj4gKwl9Cj4gK30KPiArCj4gIHN0YXRpYyB2 b2lkIGdlbjZfcHBndHRfZnJlZShzdHJ1Y3QgaTkxNV9od19wcGd0dCAqcHBndHQpCj4gIHsKPiAg CWludCBpOwo+ICAKPiAgCWZvciAoaSA9IDA7IGkgPCBwcGd0dC0+bnVtX3BkX2VudHJpZXM7IGkr KykKPiAtCQlmcmVlX3B0X3NpbmdsZShwcGd0dC0+cGQucGFnZV90YWJsZXNbaV0pOwo+ICsJCWZy ZWVfcHRfc2luZ2xlKHBwZ3R0LT5wZC5wYWdlX3RhYmxlc1tpXSwgcHBndHQtPmJhc2UuZGV2KTsK PiAgCj4gKwlmcmVlX3B0X3NjcmF0Y2gocHBndHQtPnNjcmF0Y2hfcHQsIHBwZ3R0LT5iYXNlLmRl dik7Cj4gIAlmcmVlX3BkX3NpbmdsZSgmcHBndHQtPnBkKTsKPiAgfQo+ICAKPiBAQCAtMTA3Niw2 ICsxMjA1LDkgQEAgc3RhdGljIGludCBnZW42X3BwZ3R0X2FsbG9jYXRlX3BhZ2VfZGlyZWN0b3Jp ZXMoc3RydWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0KQo+ICAJICogc2l6ZS4gV2UgYWxsb2NhdGUg YXQgdGhlIHRvcCBvZiB0aGUgR1RUIHRvIGF2b2lkIGZyYWdtZW50YXRpb24uCj4gIAkgKi8KPiAg CUJVR19PTighZHJtX21tX2luaXRpYWxpemVkKCZkZXZfcHJpdi0+Z3R0LmJhc2UubW0pKTsKPiAr CXBwZ3R0LT5zY3JhdGNoX3B0ID0gYWxsb2NfcHRfc2NyYXRjaChwcGd0dC0+YmFzZS5kZXYpOwo+ ICsJaWYgKElTX0VSUihwcGd0dC0+c2NyYXRjaF9wdCkpCj4gKwkJcmV0dXJuIFBUUl9FUlIocHBn dHQtPnNjcmF0Y2hfcHQpOwo+ICBhbGxvYzoKPiAgCXJldCA9IGRybV9tbV9pbnNlcnRfbm9kZV9p bl9yYW5nZV9nZW5lcmljKCZkZXZfcHJpdi0+Z3R0LmJhc2UubW0sCj4gIAkJCQkJCSAgJnBwZ3R0 LT5ub2RlLCBHRU42X1BEX1NJWkUsCj4gQEAgLTEwODksMjAgKzEyMjEsMjUgQEAgYWxsb2M6Cj4g IAkJCQkJICAgICAgIDAsIGRldl9wcml2LT5ndHQuYmFzZS50b3RhbCwKPiAgCQkJCQkgICAgICAg MCk7Cj4gIAkJaWYgKHJldCkKPiAtCQkJcmV0dXJuIHJldDsKPiArCQkJZ290byBlcnJfb3V0Owo+ ICAKPiAgCQlyZXRyaWVkID0gdHJ1ZTsKPiAgCQlnb3RvIGFsbG9jOwo+ICAJfQo+ICAKPiAgCWlm IChyZXQpCj4gLQkJcmV0dXJuIHJldDsKPiArCQlnb3RvIGVycl9vdXQ7Cj4gKwo+ICAKPiAgCWlm IChwcGd0dC0+bm9kZS5zdGFydCA8IGRldl9wcml2LT5ndHQubWFwcGFibGVfZW5kKQo+ICAJCURS TV9ERUJVRygiRm9yY2VkIHRvIHVzZSBhcGVydHVyZSBmb3IgUERFc1xuIik7Cj4gIAo+ICAJcHBn dHQtPm51bV9wZF9lbnRyaWVzID0gR0VONl9QUEdUVF9QRF9FTlRSSUVTOwo+ICAJcmV0dXJuIDA7 Cj4gKwo+ICtlcnJfb3V0Ogo+ICsJZnJlZV9wdF9zY3JhdGNoKHBwZ3R0LT5zY3JhdGNoX3B0LCBw cGd0dC0+YmFzZS5kZXYpOwo+ICsJcmV0dXJuIHJldDsKPiAgfQo+ICAKPiAgc3RhdGljIGludCBn ZW42X3BwZ3R0X2FsbG9jKHN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpwcGd0dCkKPiBAQCAtMTExMyw3 ICsxMjUwLDkgQEAgc3RhdGljIGludCBnZW42X3BwZ3R0X2FsbG9jKHN0cnVjdCBpOTE1X2h3X3Bw Z3R0ICpwcGd0dCkKPiAgCWlmIChyZXQpCj4gIAkJcmV0dXJuIHJldDsKPiAgCj4gLQlyZXQgPSBh bGxvY19wdF9yYW5nZSgmcHBndHQtPnBkLCAwLCBwcGd0dC0+bnVtX3BkX2VudHJpZXMpOwo+ICsJ cmV0ID0gYWxsb2NfcHRfcmFuZ2UoJnBwZ3R0LT5wZCwgMCwgcHBndHQtPm51bV9wZF9lbnRyaWVz LAo+ICsJCQlwcGd0dC0+YmFzZS5kZXYpOwo+ICsKPiAgCWlmIChyZXQpIHsKPiAgCQlkcm1fbW1f cmVtb3ZlX25vZGUoJnBwZ3R0LT5ub2RlKTsKPiAgCQlyZXR1cm4gcmV0Owo+IEBAIC0xMTIyLDMw ICsxMjYxLDYgQEAgc3RhdGljIGludCBnZW42X3BwZ3R0X2FsbG9jKHN0cnVjdCBpOTE1X2h3X3Bw Z3R0ICpwcGd0dCkKPiAgCXJldHVybiAwOwo+ICB9Cj4gIAo+IC1zdGF0aWMgaW50IGdlbjZfcHBn dHRfc2V0dXBfcGFnZV90YWJsZXMoc3RydWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0KQo+IC17Cj4g LQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcHBndHQtPmJhc2UuZGV2Owo+IC0JaW50IGk7Cj4g LQo+IC0JZm9yIChpID0gMDsgaSA8IHBwZ3R0LT5udW1fcGRfZW50cmllczsgaSsrKSB7Cj4gLQkJ c3RydWN0IHBhZ2UgKnBhZ2U7Cj4gLQkJZG1hX2FkZHJfdCBwdF9hZGRyOwo+IC0KPiAtCQlwYWdl ID0gcHBndHQtPnBkLnBhZ2VfdGFibGVzW2ldLT5wYWdlOwo+IC0JCXB0X2FkZHIgPSBwY2lfbWFw X3BhZ2UoZGV2LT5wZGV2LCBwYWdlLCAwLCA0MDk2LAo+IC0JCQkJICAgICAgIFBDSV9ETUFfQklE SVJFQ1RJT05BTCk7Cj4gLQo+IC0JCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3IoZGV2LT5wZGV2 LCBwdF9hZGRyKSkgewo+IC0JCQlnZW42X3BwZ3R0X3VubWFwX3BhZ2VzKHBwZ3R0KTsKPiAtCQkJ cmV0dXJuIC1FSU87Cj4gLQkJfQo+IC0KPiAtCQlwcGd0dC0+cGQucGFnZV90YWJsZXNbaV0tPmRh ZGRyID0gcHRfYWRkcjsKPiAtCX0KPiAtCj4gLQlyZXR1cm4gMDsKPiAtfQo+IC0KPiAgc3RhdGlj IGludCBnZW42X3BwZ3R0X2luaXQoc3RydWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0KQo+ICB7Cj4g IAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcHBndHQtPmJhc2UuZGV2Owo+IEBAIC0xMTY2LDEy ICsxMjgxLDggQEAgc3RhdGljIGludCBnZW42X3BwZ3R0X2luaXQoc3RydWN0IGk5MTVfaHdfcHBn dHQgKnBwZ3R0KQo+ICAJaWYgKHJldCkKPiAgCQlyZXR1cm4gcmV0Owo+ICAKPiAtCXJldCA9IGdl bjZfcHBndHRfc2V0dXBfcGFnZV90YWJsZXMocHBndHQpOwo+IC0JaWYgKHJldCkgewo+IC0JCWdl bjZfcHBndHRfZnJlZShwcGd0dCk7Cj4gLQkJcmV0dXJuIHJldDsKPiAtCX0KPiAtCj4gKwlwcGd0 dC0+YmFzZS5hbGxvY2F0ZV92YV9yYW5nZSA9IGdlbjZfYWxsb2NfdmFfcmFuZ2U7Cj4gKwlwcGd0 dC0+YmFzZS50ZWFyZG93bl92YV9yYW5nZSA9IGdlbjZfdGVhcmRvd25fdmFfcmFuZ2U7Cj4gIAlw cGd0dC0+YmFzZS5jbGVhcl9yYW5nZSA9IGdlbjZfcHBndHRfY2xlYXJfcmFuZ2U7Cj4gIAlwcGd0 dC0+YmFzZS5pbnNlcnRfZW50cmllcyA9IGdlbjZfcHBndHRfaW5zZXJ0X2VudHJpZXM7Cj4gIAlw cGd0dC0+YmFzZS5jbGVhbnVwID0gZ2VuNl9wcGd0dF9jbGVhbnVwOwo+IEBAIC0xMTgyLDExICsx MjkzLDE1IEBAIHN0YXRpYyBpbnQgZ2VuNl9wcGd0dF9pbml0KHN0cnVjdCBpOTE1X2h3X3BwZ3R0 ICpwcGd0dCkKPiAgCXBwZ3R0LT5wZC5wZF9vZmZzZXQgPQo+ICAJCXBwZ3R0LT5ub2RlLnN0YXJ0 IC8gUEFHRV9TSVpFICogc2l6ZW9mKGdlbjZfZ3R0X3B0ZV90KTsKPiAgCj4gKwlwcGd0dC0+cGRf YWRkciA9IChnZW42X2d0dF9wdGVfdCBfX2lvbWVtICopZGV2X3ByaXYtPmd0dC5nc20gKwo+ICsJ CXBwZ3R0LT5wZC5wZF9vZmZzZXQgLyBzaXplb2YoZ2VuNl9ndHRfcHRlX3QpOwo+ICsKPiArCWdl bjZfd3JpdGVfcGFnZV9yYW5nZShkZXZfcHJpdiwgJnBwZ3R0LT5wZCwgMCwgcHBndHQtPmJhc2Uu dG90YWwpOwo+ICsKPiAgCURSTV9ERUJVR19EUklWRVIoIkFsbG9jYXRlZCBwZGUgc3BhY2UgKCVs ZE0pIGF0IEdUVCBlbnRyeTogJWx4XG4iLAo+ICAJCQkgcHBndHQtPm5vZGUuc2l6ZSA+PiAyMCwK PiAgCQkJIHBwZ3R0LT5ub2RlLnN0YXJ0IC8gUEFHRV9TSVpFKTsKPiAgCj4gLQlnZW42X3dyaXRl X3BkZXMocHBndHQpOwo+ICAJRFJNX0RFQlVHKCJBZGRpbmcgUFBHVFQgYXQgb2Zmc2V0ICV4XG4i LAo+ICAJCSAgcHBndHQtPnBkLnBkX29mZnNldCA8PCAxMCk7Cj4gIAo+IEBAIC0xMzE4LDYgKzE0 MzMsOSBAQCBzdGF0aWMgdm9pZCBwcGd0dF91bmJpbmRfdm1hKHN0cnVjdCBpOTE1X3ZtYSAqdm1h KQo+ICAJCQkgICAgIHZtYS0+bm9kZS5zdGFydCwKPiAgCQkJICAgICB2bWEtPm9iai0+YmFzZS5z aXplLAo+ICAJCQkgICAgIHRydWUpOwo+ICsJaWYgKHZtYS0+dm0tPnRlYXJkb3duX3ZhX3Jhbmdl KQo+ICsJCXZtYS0+dm0tPnRlYXJkb3duX3ZhX3JhbmdlKHZtYS0+dm0sCj4gKwkJCQkJICAgdm1h LT5ub2RlLnN0YXJ0LCB2bWEtPm5vZGUuc2l6ZSk7CgpJZiB3ZSBkaXRjaCB1bnNlZF9wdGVzIHdl IGNhbiBkaXRjaCB0aGlzIGhlcmUgdG9vLiBBcyBwZXIgbXkgaXJjCmRpc2N1c3Npb24gd2l0aCBD aHJpcyBXaWxzb24gSSB0aGluayB0aGUgYmVzdCB3YXkgdG8gYWN0dWFsbHkgZnJlZQpwYWdldGFi bGVzIGlzIGluIG91ciBzaHJpbmtlciwgYnkgc2ltcGx5IGZyZWVpbmcgdGhlbSBhbGwgd2hlbiBh IHZtCmNvbnRhaW5zIG5vIGJvdW5kIGJ1ZmZlciBhdCBhbGwuIE11Y2ggbGVzcyBmdXp6IGFuZCBh dm9pZHMgYWxsIHRoZQpjb21wbGljYXRpb25zIHRoYXQgcmlwcGluZyBvdXQgcGFnZXRhYmxlcyBm cm9tIHVuZGVybmVhdGggYWN0aXZlIHVzZXJzCm1pZ2h0IGVudGFpbC4gT24gdGhlIGNwdSBzaWRl IHRoZSBjb3JlIHZtIGRvZXNuJ3QgZXZlbiBib3RoZXIgd2l0aCB0aGF0LApzbyBJIGV4cGVjdCB3 ZSBjYW4gZm9yZ29lIHRoYXQgY29tcGxleGl0eSBvbiB0aGUgZ3B1IHNpZGUsIHRvby4KCj4gIH0K PiAgCj4gIGV4dGVybiBpbnQgaW50ZWxfaW9tbXVfZ2Z4X21hcHBlZDsKPiBAQCAtMTQ2MSwxMyAr MTU3OSwxNCBAQCB2b2lkIGk5MTVfZ2VtX3Jlc3RvcmVfZ3R0X21hcHBpbmdzKHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYpCj4gIAo+ICAJbGlzdF9mb3JfZWFjaF9lbnRyeSh2bSwgJmRldl9wcml2LT52 bV9saXN0LCBnbG9iYWxfbGluaykgewo+ICAJCS8qIFRPRE86IFBlcmhhcHMgaXQgc2hvdWxkbid0 IGJlIGdlbjYgc3BlY2lmaWMgKi8KPiAtCQlpZiAoaTkxNV9pc19nZ3R0KHZtKSkgewo+IC0JCQlp ZiAoZGV2X3ByaXYtPm1tLmFsaWFzaW5nX3BwZ3R0KQo+IC0JCQkJZ2VuNl93cml0ZV9wZGVzKGRl dl9wcml2LT5tbS5hbGlhc2luZ19wcGd0dCk7Cj4gLQkJCWNvbnRpbnVlOwo+IC0JCX0KPiAgCj4g LQkJZ2VuNl93cml0ZV9wZGVzKGNvbnRhaW5lcl9vZih2bSwgc3RydWN0IGk5MTVfaHdfcHBndHQs IGJhc2UpKTsKPiArCQlzdHJ1Y3QgaTkxNV9od19wcGd0dCAqcHBndHQgPQo+ICsJCQljb250YWlu ZXJfb2Yodm0sIHN0cnVjdCBpOTE1X2h3X3BwZ3R0LCBiYXNlKTsKPiArCj4gKwkJaWYgKGk5MTVf aXNfZ2d0dCh2bSkpCj4gKwkJCXBwZ3R0ID0gZGV2X3ByaXYtPm1tLmFsaWFzaW5nX3BwZ3R0Owo+ ICsKPiArCQlnZW42X3dyaXRlX3BhZ2VfcmFuZ2UoZGV2X3ByaXYsICZwcGd0dC0+cGQsIDAsIHBw Z3R0LT5udW1fcGRfZW50cmllcyk7Cj4gIAl9Cj4gIAo+ICAJaTkxNV9nZ3R0X2ZsdXNoKGRldl9w cml2KTsKPiBAQCAtMTYzMyw4ICsxNzUyLDggQEAgc3RhdGljIHZvaWQgZ2VuNl9nZ3R0X2NsZWFy X3JhbmdlKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAo+ICAKPiAgCj4gIHN0YXRpYyB2 b2lkIGk5MTVfZ2d0dF9iaW5kX3ZtYShzdHJ1Y3QgaTkxNV92bWEgKnZtYSwKPiAtCQkJICAgICAg IGVudW0gaTkxNV9jYWNoZV9sZXZlbCBjYWNoZV9sZXZlbCwKPiAtCQkJICAgICAgIHUzMiB1bnVz ZWQpCj4gKwkJCSAgICAgIGVudW0gaTkxNV9jYWNoZV9sZXZlbCBjYWNoZV9sZXZlbCwKPiArCQkJ ICAgICAgdTMyIHVudXNlZCkKPiAgewo+ICAJY29uc3QgdW5zaWduZWQgbG9uZyBlbnRyeSA9IHZt YS0+bm9kZS5zdGFydCA+PiBQQUdFX1NISUZUOwo+ICAJdW5zaWduZWQgaW50IGZsYWdzID0gKGNh Y2hlX2xldmVsID09IEk5MTVfQ0FDSEVfTk9ORSkgPwo+IEBAIC0xNjY2LDggKzE3ODUsOCBAQCBz dGF0aWMgdm9pZCBpOTE1X2dndHRfdW5iaW5kX3ZtYShzdHJ1Y3QgaTkxNV92bWEgKnZtYSkKPiAg fQo+ICAKPiAgc3RhdGljIHZvaWQgZ2d0dF9iaW5kX3ZtYShzdHJ1Y3QgaTkxNV92bWEgKnZtYSwK PiAtCQkJICBlbnVtIGk5MTVfY2FjaGVfbGV2ZWwgY2FjaGVfbGV2ZWwsCj4gLQkJCSAgdTMyIGZs YWdzKQo+ICsJCQkgZW51bSBpOTE1X2NhY2hlX2xldmVsIGNhY2hlX2xldmVsLAo+ICsJCQkgdTMy IGZsYWdzKQo+ICB7Cj4gIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gdm1hLT52bS0+ZGV2Owo+ ICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsK PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmggYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuaAo+IGluZGV4IGMwOGZlOGIuLmQ1NzlmNzQg MTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmgKPiArKysg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuaAo+IEBAIC01NCw3ICs1NCwxMCBA QCB0eXBlZGVmIGdlbjhfZ3R0X3B0ZV90IGdlbjhfcHBndHRfcGRlX3Q7Cj4gICNkZWZpbmUgR0VO Nl9QUEdUVF9QRF9FTlRSSUVTCQk1MTIKPiAgI2RlZmluZSBHRU42X1BEX1NJWkUJCQkoR0VONl9Q UEdUVF9QRF9FTlRSSUVTICogUEFHRV9TSVpFKQo+ICAjZGVmaW5lIEdFTjZfUERfQUxJR04JCQko UEFHRV9TSVpFICogMTYpCj4gKyNkZWZpbmUgR0VONl9QREVfU0hJRlQgICAgICAgICAgMjIKPiAg I2RlZmluZSBHRU42X1BERV9WQUxJRAkJCSgxIDw8IDApCj4gKyNkZWZpbmUgR0VONl9QREVfTUFT SwkJCShHRU42X1BQR1RUX1BEX0VOVFJJRVMtMSkKPiArI2RlZmluZSBOVU1fUFRFKHBkZV9zaGlm dCkJCSgxIDw8IChwZGVfc2hpZnQgLSBQQUdFX1NISUZUKSkKPiAgCj4gICNkZWZpbmUgR0VON19Q VEVfQ0FDSEVfTDNfTExDCQkoMyA8PCAxKQo+ICAKPiBAQCAtMTgzLDggKzE4NiwzMiBAQCBzdHJ1 Y3QgaTkxNV92bWEgewo+ICAJdm9pZCAoKnVuYmluZF92bWEpKHN0cnVjdCBpOTE1X3ZtYSAqdm1h KTsKPiAgCS8qIE1hcCBhbiBvYmplY3QgaW50byBhbiBhZGRyZXNzIHNwYWNlIHdpdGggdGhlIGdp dmVuIGNhY2hlIGZsYWdzLiAqLwo+ICAJdm9pZCAoKmJpbmRfdm1hKShzdHJ1Y3QgaTkxNV92bWEg KnZtYSwKPiAtCQkJIGVudW0gaTkxNV9jYWNoZV9sZXZlbCBjYWNoZV9sZXZlbCwKPiAtCQkJIHUz MiBmbGFncyk7Cj4gKwkJCWVudW0gaTkxNV9jYWNoZV9sZXZlbCBjYWNoZV9sZXZlbCwKPiArCQkJ dTMyIGZsYWdzKTsKPiArfTsKPiArCj4gKwo+ICtzdHJ1Y3QgaTkxNV9wYWdldGFiIHsKPiArCXN0 cnVjdCBwYWdlICpwYWdlOwo+ICsJZG1hX2FkZHJfdCBkYWRkcjsKPiArCj4gKwl1bnNpZ25lZCBs b25nICp1c2VkX3B0ZXM7Cj4gKwl1bnNpZ25lZCBpbnQgc2NyYXRjaDoxOwo+ICt9OwoKdGhlcmUn cyBhIGJpdCBvZiBub2lzZSBpbiB0aGUgZGlmZiBiZWNhdXNlIHlvdSBtb3ZlIGFyb3VuZCBzdHJ1 Y3R1cmVzLiBJbW8KanVzdCB1c2luZyBmb3J3YXJkIGRlY2xzIGlzIGJldHRlciwgb3IgcmVvcmRl ciB0aGUgZGVmaW5pdGlvbnMgaW4gdGhlCnBhdGNoIHRoYXQgYWRkcyB0aGVtLgoKPiArCj4gK3N0 cnVjdCBpOTE1X3BhZ2VkaXIgewo+ICsJc3RydWN0IHBhZ2UgKnBhZ2U7IC8qIE5VTEwgZm9yIEdF TjYtR0VONyAqLwo+ICsJdW5pb24gewo+ICsJCXVpbnQzMl90IHBkX29mZnNldDsKPiArCQlkbWFf YWRkcl90IGRhZGRyOwo+ICsJfTsKPiArCj4gKwlzdHJ1Y3QgaTkxNV9wYWdldGFiICpwYWdlX3Rh Ymxlc1tHRU42X1BQR1RUX1BEX0VOVFJJRVNdOwo+ICt9Owo+ICsKPiArc3RydWN0IGk5MTVfcGFn ZWRpcnBvIHsKPiArCS8qIHN0cnVjdCBwYWdlICpwYWdlOyAqLwo+ICsJc3RydWN0IGk5MTVfcGFn ZWRpciAqcGFnZWRpcltHRU44X0xFR0FDWV9QRFBFU107Cj4gIH07Cj4gIAo+ICBzdHJ1Y3QgaTkx NV9hZGRyZXNzX3NwYWNlIHsKPiBAQCAtMjI2LDYgKzI1MywxMiBAQCBzdHJ1Y3QgaTkxNV9hZGRy ZXNzX3NwYWNlIHsKPiAgCWdlbjZfZ3R0X3B0ZV90ICgqcHRlX2VuY29kZSkoZG1hX2FkZHJfdCBh ZGRyLAo+ICAJCQkJICAgICBlbnVtIGk5MTVfY2FjaGVfbGV2ZWwgbGV2ZWwsCj4gIAkJCQkgICAg IGJvb2wgdmFsaWQsIHUzMiBmbGFncyk7IC8qIENyZWF0ZSBhIHZhbGlkIFBURSAqLwo+ICsJaW50 ICgqYWxsb2NhdGVfdmFfcmFuZ2UpKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAo+ICsJ CQkJIHVpbnQ2NF90IHN0YXJ0LAo+ICsJCQkJIHVpbnQ2NF90IGxlbmd0aCk7Cj4gKwl2b2lkICgq dGVhcmRvd25fdmFfcmFuZ2UpKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAo+ICsJCQkJ ICB1aW50NjRfdCBzdGFydCwKPiArCQkJCSAgdWludDY0X3QgbGVuZ3RoKTsKPiAgCXZvaWQgKCpj bGVhcl9yYW5nZSkoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0sCj4gIAkJCSAgICB1aW50 NjRfdCBzdGFydCwKPiAgCQkJICAgIHVpbnQ2NF90IGxlbmd0aCwKPiBAQCAtMjM3LDYgKzI3MCwy OSBAQCBzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlIHsKPiAgCXZvaWQgKCpjbGVhbnVwKShzdHJ1 Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSk7Cj4gIH07Cj4gIAo+ICtzdHJ1Y3QgaTkxNV9od19w cGd0dCB7Cj4gKwlzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlIGJhc2U7Cj4gKwlzdHJ1Y3Qga3Jl ZiByZWY7Cj4gKwlzdHJ1Y3QgZHJtX21tX25vZGUgbm9kZTsKPiArCXVuc2lnbmVkIG51bV9wZF9l bnRyaWVzOwo+ICsJdW5zaWduZWQgbnVtX3BkX3BhZ2VzOyAvKiBnZW44KyAqLwo+ICsJdW5pb24g ewo+ICsJCXN0cnVjdCBpOTE1X3BhZ2VkaXJwbyBwZHA7Cj4gKwkJc3RydWN0IGk5MTVfcGFnZWRp ciBwZDsKPiArCX07Cj4gKwo+ICsJc3RydWN0IGk5MTVfcGFnZXRhYiAqc2NyYXRjaF9wdDsKPiAr Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZmlsZV9wcml2YXRlICpmaWxlX3ByaXY7Cj4gKwo+ICsJZ2Vu Nl9ndHRfcHRlX3QgX19pb21lbSAqcGRfYWRkcjsKPiArCj4gKwlpbnQgKCplbmFibGUpKHN0cnVj dCBpOTE1X2h3X3BwZ3R0ICpwcGd0dCk7Cj4gKwlpbnQgKCpzd2l0Y2hfbW0pKHN0cnVjdCBpOTE1 X2h3X3BwZ3R0ICpwcGd0dCwKPiArCQkJIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcpOwo+ ICsJdm9pZCAoKmRlYnVnX2R1bXApKHN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpwcGd0dCwgc3RydWN0 IHNlcV9maWxlICptKTsKPiArfTsKPiArCj4gIC8qIFRoZSBHcmFwaGljcyBUcmFuc2xhdGlvbiBU YWJsZSBpcyB0aGUgd2F5IGluIHdoaWNoIEdFTiBoYXJkd2FyZSB0cmFuc2xhdGVzIGEKPiAgICog R3JhcGhpY3MgVmlydHVhbCBBZGRyZXNzIGludG8gYSBQaHlzaWNhbCBBZGRyZXNzLiBJbiBhZGRp dGlvbiB0byB0aGUgbm9ybWFsCj4gICAqIGNvbGxhdGVyYWwgYXNzb2NpYXRlZCB3aXRoIGFueSB2 YS0+cGEgdHJhbnNsYXRpb25zIEdFTiBoYXJkd2FyZSBhbHNvIGhhcyBhCj4gQEAgLTI2NSw0NCAr MzIxLDY5IEBAIHN0cnVjdCBpOTE1X2d0dCB7Cj4gIAkJCSAgdW5zaWduZWQgbG9uZyAqbWFwcGFi bGVfZW5kKTsKPiAgfTsKPiAgCj4gLXN0cnVjdCBpOTE1X3BhZ2V0YWIgewo+IC0Jc3RydWN0IHBh Z2UgKnBhZ2U7Cj4gLQlkbWFfYWRkcl90IGRhZGRyOwo+IC19Owo+ICsvKiBGb3IgZWFjaCBwZGUg aXRlcmF0ZXMgb3ZlciBldmVyeSBwZGUgYmV0d2VlbiBmcm9tIHN0YXJ0IHVudGlsIHN0YXJ0ICsg bGVuZ3RoLgo+ICsgKiBJZiBzdGFydCwgYW5kIHN0YXJ0K2xlbmd0aCBhcmUgbm90IHBlcmZlY3Rs eSBkaXZpc2libGUsIHRoZSBtYWNybyB3aWxsIHJvdW5kCj4gKyAqIGRvd24sIGFuZCB1cCBhcyBu ZWVkZWQuIFRoZSBtYWNybyBtb2RpZmllcyBwZGUsIHN0YXJ0LCBhbmQgbGVuZ3RoLiBEZXYgaXMK PiArICogb25seSB1c2VkIHRvIGRpZmZlcmVudGlhdGUgc2hpZnQgdmFsdWVzLiBUZW1wIGlzIHRl bXAuICBPbiBnZW42LzcsIHN0YXJ0ID0gMCwKPiArICogYW5kIGxlbmd0aCA9IDJHIGVmZmVjdGl2 ZWx5IGl0ZXJhdGVzIG92ZXIgZXZlcnkgUERFIGluIHRoZSBzeXN0ZW0uIE9uIGdlbjgrCj4gKyAq IGl0IHNpbXBseSBpdGVyYXRlcyBvdmVyIGV2ZXJ5IHBhZ2UgZGlyZWN0b3J5IGVudHJ5IGluIGEg cGFnZSBkaXJlY3RvcnkuCj4gKyAqCj4gKyAqIFhYWDogdGVtcCBpcyBub3QgYWN0dWFsbHkgbmVl ZGVkLCBidXQgaXQgc2F2ZXMgZG9pbmcgdGhlIEFMSUdOIG9wZXJhdGlvbi4KPiArICovCj4gKyNk ZWZpbmUgZ2VuNl9mb3JfZWFjaF9wZGUocHQsIHBkLCBzdGFydCwgbGVuZ3RoLCB0ZW1wLCBpdGVy KSBcCj4gKwlmb3IgKGl0ZXIgPSBnZW42X3BkZV9pbmRleChzdGFydCksIHB0ID0gKHBkKS0+cGFn ZV90YWJsZXNbaXRlcl07IFwKPiArCSAgICAgbGVuZ3RoID4gMCAmJiBpdGVyIDwgR0VONl9QUEdU VF9QRF9FTlRSSUVTOyBcCj4gKwkgICAgIHB0ID0gKHBkKS0+cGFnZV90YWJsZXNbKytpdGVyXSwg XAo+ICsJICAgICB0ZW1wID0gQUxJR04oc3RhcnQrMSwgMSA8PCBHRU42X1BERV9TSElGVCkgLSBz dGFydCwgXAo+ICsJICAgICB0ZW1wID0gbWluKHRlbXAsICh1bnNpZ25lZClsZW5ndGgpLCBcCj4g KwkgICAgIHN0YXJ0ICs9IHRlbXAsIGxlbmd0aCAtPSB0ZW1wKQo+ICsKPiArc3RhdGljIGlubGlu ZSB1aW50MzJfdCBpOTE1X3B0ZV9pbmRleCh1aW50NjRfdCBhZGRyZXNzLCB1aW50MzJfdCBwZGVf c2hpZnQpCj4gK3sKPiArCWNvbnN0IHVpbnQzMl90IG1hc2sgPSBOVU1fUFRFKHBkZV9zaGlmdCkg LSAxOwo+ICsJcmV0dXJuIChhZGRyZXNzID4+IFBBR0VfU0hJRlQpICYgbWFzazsKPiArfQo+ICAK PiAtc3RydWN0IGk5MTVfcGFnZWRpciB7Cj4gLQlzdHJ1Y3QgcGFnZSAqcGFnZTsgLyogTlVMTCBm b3IgR0VONi1HRU43ICovCj4gLQl1bmlvbiB7Cj4gLQkJdWludDMyX3QgcGRfb2Zmc2V0Owo+IC0J CWRtYV9hZGRyX3QgZGFkZHI7Cj4gLQl9Owo+ICsvKiBIZWxwZXIgdG8gY291bnRzIHRoZSBudW1i ZXIgb2YgUFRFcyB3aXRoaW4gdGhlIGdpdmVuIGxlbmd0aC4gVGhpcyBjb3VudCBkb2VzCj4gKyog bm90IGNyb3NzIGEgcGFnZSB0YWJsZSBib3VuZGFyeSwgc28gdGhlIG1heCB2YWx1ZSB3b3VsZCBi ZQo+ICsqIEk5MTVfUFBHVFRfUFRfRU5UUklFUyBmb3IgR0VONiwgYW5kIEdFTjhfUFRFU19QRVJf UEFHRSBmb3IgR0VOOC4KPiArKi8KPiArc3RhdGljIGlubGluZSBzaXplX3QgaTkxNV9wdGVfY291 bnQodWludDY0X3QgYWRkciwgc2l6ZV90IGxlbmd0aCwKPiArCQkJCQl1aW50MzJfdCBwZGVfc2hp ZnQpCj4gK3sKPiArCWNvbnN0IHVpbnQ2NF90IG1hc2sgPSB+KCgxIDw8IHBkZV9zaGlmdCkgLSAx KTsKPiArCXVpbnQ2NF90IGVuZDsKPiAgCj4gLQlzdHJ1Y3QgaTkxNV9wYWdldGFiICpwYWdlX3Rh Ymxlc1tHRU42X1BQR1RUX1BEX0VOVFJJRVNdOyAvKiBQREVzICovCj4gLX07Cj4gKwlCVUdfT04o bGVuZ3RoID09IDApOwo+ICsJQlVHX09OKG9mZnNldF9pbl9wYWdlKGFkZHJ8bGVuZ3RoKSk7Cj4g IAo+IC1zdHJ1Y3QgaTkxNV9wYWdlZGlycG8gewo+IC0JLyogc3RydWN0IHBhZ2UgKnBhZ2U7ICov Cj4gLQlzdHJ1Y3QgaTkxNV9wYWdlZGlyICpwYWdlZGlyW0dFTjhfTEVHQUNZX1BEUEVTXTsKPiAt fTsKPiArCWVuZCA9IGFkZHIgKyBsZW5ndGg7Cj4gIAo+IC1zdHJ1Y3QgaTkxNV9od19wcGd0dCB7 Cj4gLQlzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlIGJhc2U7Cj4gLQlzdHJ1Y3Qga3JlZiByZWY7 Cj4gLQlzdHJ1Y3QgZHJtX21tX25vZGUgbm9kZTsKPiAtCXVuc2lnbmVkIG51bV9wZF9lbnRyaWVz Owo+IC0JdW5zaWduZWQgbnVtX3BkX3BhZ2VzOyAvKiBnZW44KyAqLwo+IC0JdW5pb24gewo+IC0J CXN0cnVjdCBpOTE1X3BhZ2VkaXJwbyBwZHA7Cj4gLQkJc3RydWN0IGk5MTVfcGFnZWRpciBwZDsK PiAtCX07Cj4gKwlpZiAoKGFkZHIgJiBtYXNrKSAhPSAoZW5kICYgbWFzaykpCj4gKwkJcmV0dXJu IE5VTV9QVEUocGRlX3NoaWZ0KSAtIGk5MTVfcHRlX2luZGV4KGFkZHIsIHBkZV9zaGlmdCk7Cj4g IAo+IC0Jc3RydWN0IGRybV9pOTE1X2ZpbGVfcHJpdmF0ZSAqZmlsZV9wcml2Owo+ICsJcmV0dXJu IGk5MTVfcHRlX2luZGV4KGVuZCwgcGRlX3NoaWZ0KSAtIGk5MTVfcHRlX2luZGV4KGFkZHIsIHBk ZV9zaGlmdCk7Cj4gK30KPiAgCj4gLQlpbnQgKCplbmFibGUpKHN0cnVjdCBpOTE1X2h3X3BwZ3R0 ICpwcGd0dCk7Cj4gLQlpbnQgKCpzd2l0Y2hfbW0pKHN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpwcGd0 dCwKPiAtCQkJIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcpOwo+IC0Jdm9pZCAoKmRlYnVn X2R1bXApKHN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpwcGd0dCwgc3RydWN0IHNlcV9maWxlICptKTsK PiAtfTsKPiArc3RhdGljIGlubGluZSB1aW50MzJfdCBpOTE1X3BkZV9pbmRleCh1aW50NjRfdCBh ZGRyLCB1aW50MzJfdCBzaGlmdCkKClNob3VsZG4ndCB0aGlzIGhhdmUgYSBnZW42IHByZWZpeCwg dG9vPwoKPiArewo+ICsJcmV0dXJuIChhZGRyID4+IHNoaWZ0KSAmIEdFTjZfUERFX01BU0s7Cj4g K30KPiArCj4gK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgZ2VuNl9wdGVfaW5kZXgodWludDMyX3Qg YWRkcikKPiArewo+ICsJcmV0dXJuIGk5MTVfcHRlX2luZGV4KGFkZHIsIEdFTjZfUERFX1NISUZU KTsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSBzaXplX3QgZ2VuNl9wdGVfY291bnQodWludDMy X3QgYWRkciwgdWludDMyX3QgbGVuZ3RoKQo+ICt7Cj4gKwlyZXR1cm4gaTkxNV9wdGVfY291bnQo YWRkciwgbGVuZ3RoLCBHRU42X1BERV9TSElGVCk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUg dWludDMyX3QgZ2VuNl9wZGVfaW5kZXgodWludDMyX3QgYWRkcikKPiArewo+ICsJcmV0dXJuIGk5 MTVfcGRlX2luZGV4KGFkZHIsIEdFTjZfUERFX1NISUZUKTsKPiArfQo+ICAKPiAgaW50IGk5MTVf Z2VtX2d0dF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwo+ICB2b2lkIGk5MTVfZ2VtX2lu aXRfZ2xvYmFsX2d0dChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKPiAtLSAKPiAyLjEuMQo+IAo+ IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gSW50ZWwt Z2Z4IG1haWxpbmcgbGlzdAo+IEludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPiBodHRw Oi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4CgotLSAK RGFuaWVsIFZldHRlcgpTb2Z0d2FyZSBFbmdpbmVlciwgSW50ZWwgQ29ycG9yYXRpb24KKzQxICgw KSA3OSAzNjUgNTcgNDggLSBodHRwOi8vYmxvZy5mZndsbC5jaApfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVs LWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=