From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH v5 4/5] drm: Add library for shmem backed GEM objects Date: Tue, 23 Oct 2018 15:50:48 +0200 Message-ID: <20181023135048.GS324@phenom.ffwll.local> References: <20181017130454.44292-1-noralf@tronnes.org> <20181017130454.44292-5-noralf@tronnes.org> <20181017154621.GP31561@phenom.ffwll.local> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Noralf =?iso-8859-1?Q?Tr=F8nnes?= Cc: intel-gfx@lists.freedesktop.org, sam@ravnborg.org, dri-devel@lists.freedesktop.org, david@lechnology.com List-Id: dri-devel@lists.freedesktop.org T24gTW9uLCBPY3QgMjIsIDIwMTggYXQgMDQ6MTU6NDhQTSArMDIwMCwgTm9yYWxmIFRyw7hubmVz IHdyb3RlOgo+IAo+IERlbiAxNy4xMC4yMDE4IDE3LjQ2LCBza3JldiBEYW5pZWwgVmV0dGVyOgo+ ID4gT24gV2VkLCBPY3QgMTcsIDIwMTggYXQgMDM6MDQ6NTNQTSArMDIwMCwgTm9yYWxmIFRyw7hu bmVzIHdyb3RlOgo+ID4gPiBUaGlzIGFkZHMgYSBsaWJyYXJ5IGZvciBzaG1lbSBiYWNrZWQgR0VN IG9iamVjdHMuCj4gPiA+IAo+ID4gPiB2NToKPiA+ID4gLSBEcm9wIGRybV9nZW1fc2htZW1fcHJp bWVfbW1hcCgpIChEYW5pZWwgVmV0dGVyKQo+ID4gPiAtIGRybV9nZW1fc2htZW1fbW1hcCgpOiBT dWJ0cmFjdCBkcm1fdm1hX25vZGVfc3RhcnQoKSB0byBnZXQgdGhlIHJlYWwKPiA+ID4gICAgdm1h LT52bV9wZ29mZgo+ID4gPiAtIGRybV9nZW1fc2htZW1fZmF1bHQoKTogVXNlIHZtZi0+cGdvZmYg bm93IHRoYXQgdm1hLT52bV9wZ29mZiBpcyBjb3JyZWN0Cj4gPiA+IAo+ID4gPiB2NDoKPiA+ID4g LSBEcm9wIGNhY2hlIG1vZGVzIChUaG9tYXMgSGVsbHN0cm9tKQo+ID4gPiAtIEFkZCBhIEdFTSBh dHRhY2hlZCB2dGFibGUKPiA+ID4gCj4gPiA+IHYzOgo+ID4gPiAtIEdyYW1tYXIgKFNhbSBSYXZu Ym9yZykKPiA+ID4gLSBzL2RybV9nZW1fc2htZW1fcHV0X3BhZ2VzX3VubG9ja2VkL2RybV9nZW1f c2htZW1fcHV0X3BhZ2VzX2xvY2tlZC8KPiA+ID4gICAgKFNhbSBSYXZuYm9yZykKPiA+ID4gLSBB ZGQgZGVidWcgb3V0cHV0IGluIGVycm9yIHBhdGggKFNhbSBSYXZuYm9yZykKPiA+ID4gCj4gPiA+ IFNpZ25lZC1vZmYtYnk6IE5vcmFsZiBUcsO4bm5lcyA8bm9yYWxmQHRyb25uZXMub3JnPgo+ID4g PiAtLS0KPiA+ID4gICBEb2N1bWVudGF0aW9uL2dwdS9kcm0ta21zLWhlbHBlcnMucnN0ICB8ICAx MiArCj4gPiA+ICAgZHJpdmVycy9ncHUvZHJtL0tjb25maWcgICAgICAgICAgICAgICAgfCAgIDYg Kwo+ID4gPiAgIGRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSAgICAgICAgICAgICAgIHwgICAxICsK PiA+ID4gICBkcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuYyB8IDU1MSArKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiA+ID4gICBpbmNsdWRlL2RybS9kcm1fZ2Vt X3NobWVtX2hlbHBlci5oICAgICB8IDE1MyArKysrKysrKysKPiA+ID4gICA1IGZpbGVzIGNoYW5n ZWQsIDcyMyBpbnNlcnRpb25zKCspCj4gPiA+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv Z3B1L2RybS9kcm1fZ2VtX3NobWVtX2hlbHBlci5jCj4gPiA+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0 IGluY2x1ZGUvZHJtL2RybV9nZW1fc2htZW1faGVscGVyLmgKPiA+ID4gCj4gCj4gPHNuaXA+Cj4g Cj4gPiA+ICtzdGF0aWMgdm1fZmF1bHRfdCBkcm1fZ2VtX3NobWVtX2ZhdWx0KHN0cnVjdCB2bV9m YXVsdCAqdm1mKQo+ID4gPiArewo+ID4gPiArCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0g dm1mLT52bWE7Cj4gPiA+ICsJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmogPSB2bWEtPnZtX3By aXZhdGVfZGF0YTsKPiA+ID4gKwlzdHJ1Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKnNobWVtID0g dG9fZHJtX2dlbV9zaG1lbV9vYmoob2JqKTsKPiA+ID4gKwlsb2ZmX3QgbnVtX3BhZ2VzID0gb2Jq LT5zaXplID4+IFBBR0VfU0hJRlQ7Cj4gPiA+ICsJc3RydWN0IHBhZ2UgKnBhZ2U7Cj4gPiA+ICsK PiA+ID4gKwlpZiAodm1mLT5wZ29mZiA+IG51bV9wYWdlcyB8fCBXQVJOX09OX09OQ0UoIXNobWVt LT5wYWdlcykpCj4gPiA+ICsJCXJldHVybiBWTV9GQVVMVF9TSUdCVVM7Cj4gPiA+ICsKPiA+ID4g KwlwYWdlID0gc2htZW0tPnBhZ2VzW3ZtZi0+cGdvZmZdOwo+ID4gPiArCj4gPiA+ICsJcmV0dXJu IHZtZl9pbnNlcnRfcGFnZSh2bWEsIHZtZi0+YWRkcmVzcywgcGFnZSk7Cj4gPiA+ICt9Cj4gPiA+ ICsKPiA+ID4gK3N0YXRpYyB2b2lkIGRybV9nZW1fc2htZW1fdm1fY2xvc2Uoc3RydWN0IHZtX2Fy ZWFfc3RydWN0ICp2bWEpCj4gPiA+ICt7Cj4gPiA+ICsJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpv YmogPSB2bWEtPnZtX3ByaXZhdGVfZGF0YTsKPiA+ID4gKwlzdHJ1Y3QgZHJtX2dlbV9zaG1lbV9v YmplY3QgKnNobWVtID0gdG9fZHJtX2dlbV9zaG1lbV9vYmoob2JqKTsKPiA+ID4gKwo+ID4gPiAr CWRybV9nZW1fc2htZW1fcHV0X3BhZ2VzKHNobWVtKTsKPiA+IEltYmFsYW5jZSBnZXQvcHV0X3Bh Z2VzIGhlcmUsIGlmIHNvbWVvbmUgZm9ya3MgKHdoaWNoIGlzIHdoYXQgY2FsbHMKPiA+IHZtX29w cy0+b3BlbiBvbiBhbiBleGlzdGluZyB2bWEpLgo+ID4gCj4gPiA+ICsJZHJtX2dlbV92bV9jbG9z ZSh2bWEpOwo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICtjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9u c19zdHJ1Y3QgZHJtX2dlbV9zaG1lbV92bV9vcHMgPSB7Cj4gPiA+ICsJLmZhdWx0ID0gZHJtX2dl bV9zaG1lbV9mYXVsdCwKPiA+ID4gKwkub3BlbiA9IGRybV9nZW1fdm1fb3BlbiwKPiA+ID4gKwku Y2xvc2UgPSBkcm1fZ2VtX3NobWVtX3ZtX2Nsb3NlLAo+ID4gPiArfTsKPiA+ID4gK0VYUE9SVF9T WU1CT0xfR1BMKGRybV9nZW1fc2htZW1fdm1fb3BzKTsKPiA+ID4gKwo+ID4gPiArLyoqCj4gPiA+ ICsgKiBkcm1fZ2VtX3NobWVtX21tYXAgLSBNZW1vcnktbWFwIGEgc2htZW0gR0VNIG9iamVjdAo+ ID4gPiArICogQGZpbHA6IEZpbGUgb2JqZWN0Cj4gPiA+ICsgKiBAdm1hOiBWTUEgZm9yIHRoZSBh cmVhIHRvIGJlIG1hcHBlZAo+ID4gPiArICoKPiA+ID4gKyAqIFRoaXMgZnVuY3Rpb24gaW1wbGVt ZW50cyBhbiBhdWdtZW50ZWQgdmVyc2lvbiBvZiB0aGUgR0VNIERSTSBmaWxlIG1tYXAKPiA+ID4g KyAqIG9wZXJhdGlvbiBmb3Igc2htZW0gb2JqZWN0cy4gRHJpdmVycyB3aGljaCBlbXBsb3kgdGhl IHNobWVtIGhlbHBlcnMgc2hvdWxkCj4gPiA+ICsgKiB1c2UgdGhpcyBmdW5jdGlvbiBhcyB0aGVp ciAmZmlsZV9vcGVyYXRpb25zLm1tYXAgaGFuZGxlciBpbiB0aGUgRFJNIGRldmljZSBmaWxlJ3MK PiA+ID4gKyAqIGZpbGVfb3BlcmF0aW9ucyBzdHJ1Y3R1cmUuCj4gPiA+ICsgKgo+ID4gPiArICog SW5zdGVhZCBvZiBkaXJlY3RseSByZWZlcmVuY2luZyB0aGlzIGZ1bmN0aW9uLCBkcml2ZXJzIHNo b3VsZCB1c2UgdGhlCj4gPiA+ICsgKiBERUZJTkVfRFJNX0dFTV9TSE1FTV9GT1BTKCkgbWFjcm8u Cj4gPiA+ICsgKgo+ID4gPiArICogUmV0dXJuczoKPiA+ID4gKyAqIDAgb24gc3VjY2VzcyBvciBh IG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KPiA+ID4gKyAqLwo+ID4gQmV0d2VlbiBj bWEgaGVscGVycywgZ2VtIHNobWVtIGhlbHBlcnMgYW5kIHRoZSBkcm1fZ2VtX21tYXAgd2Ugbm93 IGhhdmUKPiA+IHF1aXRlIGEgYml0IGEgY29uZnVzaW9uIG9mIG1tYXAgZnVuY3Rpb25zLiBJIHRo aW5rIGl0J2QgYmUgZ29vZCB0byB1cGRhdGUKPiA+IHRoZSBrZXJuZWxkb2MgZm9yIGRybV9nZW1f bW1hcCgpIHRvIHBvaW50IGF0IHRoZXNlIGhlcmUgKGJvdGggdGhlIHNobWVtCj4gPiBhbmQgY21h IHZlcnNpb24pLCBzbyB0aGF0IHBlb3BsZSBwcmVmZXIgdG8gdXNlIHRoZXNlIGhlbHBlcnMgaGVy ZS4gRGlyZWN0Cj4gPiBjYWxsIHRvIGRybV9nZW1fbW1hcCB3b3VsZCBvbmx5IGJlIG5lZWRlZCBp ZiB5b3Ugd2FudCB0byB1c2UgeW91ciBvd24KPiA+IHZtX29wcy4KPiA+IAo+ID4gPiAraW50IGRy bV9nZW1fc2htZW1fbW1hcChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IHZtX2FyZWFfc3RydWN0 ICp2bWEpCj4gPiA+ICt7Cj4gPiA+ICsJc3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpzaG1l bTsKPiA+ID4gKwlpbnQgcmV0Owo+ID4gPiArCj4gPiA+ICsJcmV0ID0gZHJtX2dlbV9tbWFwKGZp bHAsIHZtYSk7Cj4gPiA+ICsJaWYgKHJldCkKPiA+ID4gKwkJcmV0dXJuIHJldDsKPiA+ID4gKwo+ ID4gPiArCXNobWVtID0gdG9fZHJtX2dlbV9zaG1lbV9vYmoodm1hLT52bV9wcml2YXRlX2RhdGEp Owo+ID4gPiArCj4gPiA+ICsJcmV0ID0gZHJtX2dlbV9zaG1lbV9nZXRfcGFnZXMoc2htZW0pOwo+ ID4gPiArCWlmIChyZXQpIHsKPiA+ID4gKwkJZHJtX2dlbV92bV9jbG9zZSh2bWEpOwo+ID4gPiAr CQlyZXR1cm4gcmV0Owo+ID4gPiArCX0KPiA+ID4gKwo+ID4gPiArCS8qIFZNX1BGTk1BUCB3YXMg c2V0IGJ5IGRybV9nZW1fbW1hcCgpICovCj4gPiA+ICsJdm1hLT52bV9mbGFncyAmPSB+Vk1fUEZO TUFQOwo+ID4gPiArCXZtYS0+dm1fZmxhZ3MgfD0gVk1fTUlYRURNQVA7Cj4gPiA+ICsJdm1hLT52 bV9wYWdlX3Byb3QgPSB2bV9nZXRfcGFnZV9wcm90KHZtYS0+dm1fZmxhZ3MpOwo+ID4gPiArCj4g PiA+ICsJZnB1dCh2bWEtPnZtX2ZpbGUpOwo+ID4gPiArCXZtYS0+dm1fZmlsZSA9IGdldF9maWxl KHNobWVtLT5iYXNlLmZpbHApOwo+ID4gPiArCS8qIFJlbW92ZSB0aGUgZmFrZSBvZmZzZXQgKi8K PiA+ID4gKwl2bWEtPnZtX3Bnb2ZmIC09IGRybV92bWFfbm9kZV9zdGFydCgmc2htZW0tPmJhc2Uu dm1hX25vZGUpOwo+ID4gPiArCj4gPiA+ICsJcmV0dXJuIDA7Cj4gPiA+ICt9Cj4gPiA+ICtFWFBP UlRfU1lNQk9MX0dQTChkcm1fZ2VtX3NobWVtX21tYXApOwo+ID4gTG9va2luZyB0aHJvdWdoIHlv dXIgbW1hcCBjb2RlIHRoZXJlJ3MgMiBiaXRzOgo+ID4gLSBzaG1lbSBpc24ndCBjb2hlcmVudCwK PiAKPiBZb3Ugc2F2ZWQgbWUgaW4gdGhlIGxhc3QgbWludXRlIHdpdGggdGhhdCBjb21tZW50IERh bmllbC4KPiAKPiBJIGp1c3QgcmVtZW1iZXJlZCB0aGF0IG9uIHRoZSBSYXNwYmVycnkgUGkgSSBu ZWVkIHRvIHN3YXAgdGhlIGJ5dGVzIChSR0I1NjUsCj4gU1BJIGJpZyBlbmRpYW4pIGJlZm9yZSB0 cmFuc2ZlciBiZWNhdXNlIGl0cyBTUEkgY2FuJ3QgZG8gMTYtYml0IHRyYW5zZmVycy4KPiBTbyBJ IHJlbW92ZWQgdGhlIHN3YXBwaW5nIGFuZCBzZW50IHRoZSBzaG1lbSBidWZmZXIgc3RyYWlnaHQg dGhyb3VnaCB0byBTUEkuCj4gVGhpcyByZXN1bHRlZCBpbiBmYmNvbiBsb29raW5nIGVycmF0aWMg YW5kICJkaXN0b3J0ZWQiLCBzbyBpdCBkaWRuJ3Qgd29yawo+IHdpdGggdGhlIGdlbmVyaWMgZmJk ZXYgZW11bGF0aW9uIHNoYWRvdyBidWZmZXIgYmVpbmcgY29waWVkIGJ5IHRoZSBjcHUgdG8KPiB0 aGUgc2htZW0gYnVmZmVyIHdoaWNoIGlzIERNQSdlZCBvdXQgb3ZlciBTUEkuIEV2ZW4gdGhvdWdo IHRoZSBTUEkgY29yZSBpcwo+IHVzaW5nIHRoZSBzdHJlYW1pbmcgRE1BIEFQSS4KPiAoYXBwYXJl bnRseSBJJ3ZlIHdvcmtlZCBzbyBtdWNoIG9uIERSTSBoZWxwZXIgcmVmYWN0b3JpbmcgdGhhdCBJ J3ZlCj4gZm9yZ290dGVuIGhvdyB0aGUgdGlueWRybSBkcml2ZXJzIHdvcmsuLi4pCj4gCj4gU28g aXQgbG9va3MgbGlrZSBJIGNhbid0IHVzZSBzaG1lbSBmb3IgdGhlIGN1cnJlbnQgdGlueWRybSBk cml2ZXJzLCB3aGljaAo+IGFsbCB1c2UgU1BJLiBVbmxlc3MgdGhlcmUncyBhIHNvbHV0aW9uIHRv IG15IHByb2JsZW0sIEkgZ3Vlc3MgSSdsbCBJIGhhdmUKPiB0byBwb3N0cG9uZSB0aGlzIHNobWVt IHdvcmsgdW50aWwgSSBjYW4gdXNlIGl0IGluIGEgZHJpdmVyIHRoYXQgSSdtIHBsYW5uaW5nCj4g dG8gZG8gZnVydGhlciBkb3duIHRoZSByb2FkLiBJdCB3aWxsIGNvbXByZXNzIHRoZSBmcmFtZWJ1 ZmZlciBiZWZvcmUKPiB0cmFuc2ZlciBvdmVyIFVTQiBzbyBubyBETUEgb24gdGhlIHNobWVtIGJ1 ZmZlci4KPiAKPiBEbyB5b3Ugd2FudCBtZSB0byBhcHBseSB0aGUgZmlyc3QgMyBwYXRjaGVzIGFu eXdheSwgZXZlbiB0aG91Z2ggdGhlIHNobWVtCj4gc3R1ZmYgaGFzIHRvIHdhaXQ/CgpZZWFoIEkg Z3Vlc3MgYmFjayB0byBkcmF3aW5nIGJvYXJkLgoKSXQgbG9va3MgbGlrZSB0aGVyZSdzIGludGVy ZXN0cyBmcm9tIG90aGVycyAoQ2hyaXN0aWFuIGZyb20gQU1EKSBvbiB0aGUKdnRhYmxlcyBzdHVm Zi4gU28ganVzdCBwdXNoaW5nIHRoYXQsIGluY2x1ZGluZyBhIHRvZG8ucnN0IGVudHJ5IHRvIGNv bnZlcnQKZHJpdmVycyBvdmVyLCBzb3VuZHMgbGlrZSBhIGdvb2QgaWRlYS4KCj4gCj4gPiBpZiB5 b3UgdHJ5IHRvIGFjdHVhbGx5IGJ1ZmZlciBzaGFyZSB0aGlzIHdpdGgKPiA+ICAgIHByaW1lIEkg ZXhwZWN0IGl0J2xsIGZhaWwgYmFkbHkuIFdlJ2QgbmVlZCBiZWdpbi9lbmRfY3B1X2FjY2Vzcwo+ ID4gICAgY2FsbGJhY2tzIGluIGRtYV9idWZfb3BzIHRvIG1ha2UgdGhpcyB3b3JrLiBTbyBub3Qg ZW50aXJlbHkgc3VyZSBob3cKPiA+ICAgIG11Y2ggdmFsdWUgdGhlcmUgaXMgaW4gaW1wbGVtZW50 aW5nIHRoZSBwcmltZSBtbWFwIHN0dWZmIChidXQgZG9lc24ndAo+ID4gICAgaHVydCB0byBoYXZl IGl0KS4KPiAKPiBUaGUgZ2VuZXJpYyBmYmRldiBlbXVsYXRpb24gdXNlcyBQUklNRSBtbWFwLgoK T29wcy4gV29ya3MgZm9yIENNQSwgZG9lc24ndCB3b3JrIHNvIHdlbGwgZm9yIHNobWVtIChhc3N1 bWluZyB3ZSBoYXZlCm5vbi1jb2hlcmVudCBkbWEgc29tZXdoZXJlKS4KCk1heWJlIHdlIGNhbiBh c3N1bWUgdGhhdCBhbGwgc2htZW0gdXNpbmcgZHJpdmVycyB3aWxsIGVtcGxveSBzb21lIGtpbmQg b2YKbWFudWFsIHVwbG9hZCAoaS5lLiBkaXJ0eSksIGFuZCB0aGVuIHdlIGNvdWxkIGNhbGwgdGhl IGZsdXNoIGZ1bmN0aW9ucwpmcm9tIHRoZXJlPwoKPiA+IC0gc2htZW0gYWxyZWFkeSBoYXMgYW4g bW1hcCBpbXBsZW10YXRpb24sIHlvdSBjYW4ganVzdCB1c2UgdGhhdC4gTmVlZHMgYQo+ID4gICAg c2ltaWxhciBtbWFwIGZvcndhcmRpbmcgdHJpY2sgYXMgeW91J3ZlIGRvbmUgZm9yIHByaW1lIG1t YXAsIGJ1dCBpbnN0ZWFkCj4gPiAgICB5b3UgZm9yd2FyZCB0byBvYmotPmJhc2UuZmlscC4gVGhh dCBhbGxvd3MgeW91IHRvIGN1dCBhd2F5IGFsbCB0aGUKPiA+ICAgIHZtX29wcyBhbmQgZXZlcnl0 aGluZy4gSSBndWVzcyB3ZSBjb3VsZCBjbGVhbiB0aGlzIHVwIGluIGEgZm9sbG93LXVwLAo+ID4g ICAgc2luY2UgaXQgZG9lc24ndCBoYXZlIGFuIGVmZmVjdCBvbiB0aGUgaW50ZXJmYWNlcyBleHBv c2VkIHRvIGRyaXZlcnMuIEF0Cj4gPiAgICBsZWFzdCBub3QgYSBiaWcgb25lLCBkcm1fZ2VtX3No bWVtX3ZtX29wcyB3b3VsZCBkaXNhcHBlYXIuCj4gCj4gVGhpcyBhcHByb2FjaCB1c2luZyB0aGUg c2htZW0gbW1hcCBzZWVtZWQgdG8gd29yaywgbm90IHN1cmUgaWYgdGhlIHZtX2ZsYWdzCj4gbmVl ZHMgdG8gYmUgdG91Y2hlZCB0aG91Z2guCj4gKEknbSBwdXR0aW5nIGl0IHVwIGhlcmUgZm9yIHRo ZSByZWNvcmQsIGluY3JlYXNlcyB0aGUgY2hhbmNlIG9mIG1lIGZpbmRpbmcKPiBpdCB3aGVuIEkg cGljayB1cCB0aGUgc2htZW0gaGVscGVyIGZ1cnRoZXIgZG93biB0aGUgcm9hZCkKCnZtX2ZsYWdz IHRvdWNoaW5nIHNob3VsZG4ndCBiZSBuZWNlc3NhcnkgYW55bW9yZSwgeW91IGRvbid0IHVzZQp2 bV9pbnNlcnRfcGZuLiBXaGljaCBpcyB3aGF0IHJlcXVpcmVzIHRoZSBWTV9QRk5NQVAvTUlYRURN QVAgc3R1ZmYsCmRlcGVuZGluZyB1cG9uIHdoaWNoIHZtX2luc2VydCogZnVuY3Rpb24geW91J3Jl IHVzaW5nLiBBZmFpdWkgYXQgbGVhc3QsCm5vdCBhIGNvcmUgLW1tIGV4cGVydCBhdCBhbGwuCgpC dXQgeWVzLCB0aGlzIGlzIHdoYXQgSSBoYWQgaW4gbWluZC4KLURhbmllbAoKPiAKPiBpbnQgZHJt X2dlbV9zaG1lbV9tbWFwKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Qg KnZtYSkKPiB7Cj4gwqDCoMKgIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOwo+IMKgwqDCoCBp bnQgcmV0Owo+IAo+IMKgwqDCoCByZXQgPSBkcm1fZ2VtX21tYXAoZmlscCwgdm1hKTsKPiDCoMKg wqAgaWYgKHJldCkKPiDCoMKgwqAgwqDCoMKgIHJldHVybiByZXQ7Cj4gCj4gwqDCoMKgIG9iaiA9 IHZtYS0+dm1fcHJpdmF0ZV9kYXRhOwo+IAo+IMKgwqDCoCAvKiBSZW1vdmUgdGhlIGZha2Ugb2Zm c2V0ICovCj4gwqDCoMKgIHZtYS0+dm1fcGdvZmYgLT0gZHJtX3ZtYV9ub2RlX3N0YXJ0KCZvYmot PnZtYV9ub2RlKTsKPiAKPiDCoMKgwqAgLyogVk1fUEZOTUFQIHdhcyBzZXQgYnkgZHJtX2dlbV9t bWFwKCkgKi8KPiDCoMKgwqAgdm1hLT52bV9mbGFncyAmPSB+Vk1fUEZOTUFQOwo+IMKgwqDCoCB2 bWEtPnZtX2ZsYWdzIHw9IFZNX01JWEVETUFQOwo+IMKgwqDCoCB2bWEtPnZtX3BhZ2VfcHJvdCA9 IHBncHJvdF9kZWNyeXB0ZWQodm1fZ2V0X3BhZ2VfcHJvdCh2bWEtPnZtX2ZsYWdzKSk7Cj4gCj4g wqDCoMKgIGZwdXQodm1hLT52bV9maWxlKTsKPiDCoMKgwqAgdm1hLT52bV9maWxlID0gZ2V0X2Zp bGUob2JqLT5maWxwKTsKPiAKPiDCoMKgwqAgZHJtX2dlbV9vYmplY3RfcHV0X3VubG9ja2VkKG9i aik7Cj4gCj4gwqDCoMKgIHJldHVybiBjYWxsX21tYXAodm1hLT52bV9maWxlLCB2bWEpOwo+IH0K PiAKPiAKPiBOb3JhbGYuCj4gCj4gCj4gPiA+ICsKPiA+ID4gKy8qKgo+ID4gPiArICogZHJtX2dl bV9zaG1lbV9wcmludF9pbmZvKCkgLSBQcmludCAmZHJtX2dlbV9zaG1lbV9vYmplY3QgaW5mbyBm b3IgZGVidWdmcwo+ID4gPiArICogQHA6IERSTSBwcmludGVyCj4gPiA+ICsgKiBAaW5kZW50OiBU YWIgaW5kZW50YXRpb24gbGV2ZWwKPiA+ID4gKyAqIEBvYmo6IEdFTSBvYmplY3QKPiA+IFdvdWxk IGJlIGdvb2QgdG8gcmVmZXJlbmNlIHRoZSBob29rIHRoaXMgaXMgbWVhbnQgZm9yOgo+ID4gJmRy bV9nZW1fb2JqZWN0X2Z1bmNzLnByaW50X2luZm8sIHNhbWUgZm9yIGFsbCB0aGUgb3RoZXJzLiBG b3IgdGhvc2UKPiA+IGRyaXZlcnMgdGhhdCB3YW50IHRvIHBpY2smY2hvb3NlLgo+ID4gCj4gPiBD aGVlcnMsIERhbmllbAo+ID4gCj4gPiA+ICsgKi8KPiA+ID4gK3ZvaWQgZHJtX2dlbV9zaG1lbV9w cmludF9pbmZvKHN0cnVjdCBkcm1fcHJpbnRlciAqcCwgdW5zaWduZWQgaW50IGluZGVudCwKPiA+ ID4gKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQo+ID4gPiArewo+ ID4gPiArCWNvbnN0IHN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2htZW0gPSB0b19kcm1f Z2VtX3NobWVtX29iaihvYmopOwo+ID4gPiArCj4gPiA+ICsJZHJtX3ByaW50Zl9pbmRlbnQocCwg aW5kZW50LCAicGFnZXNfdXNlX2NvdW50PSV1XG4iLCBzaG1lbS0+cGFnZXNfdXNlX2NvdW50KTsK PiA+ID4gKwlkcm1fcHJpbnRmX2luZGVudChwLCBpbmRlbnQsICJ2bWFwX3VzZV9jb3VudD0ldVxu Iiwgc2htZW0tPnZtYXBfdXNlX2NvdW50KTsKPiA+ID4gKwlkcm1fcHJpbnRmX2luZGVudChwLCBp bmRlbnQsICJ2YWRkcj0lcFxuIiwgc2htZW0tPnZhZGRyKTsKPiA+ID4gK30KPiA+ID4gK0VYUE9S VF9TWU1CT0woZHJtX2dlbV9zaG1lbV9wcmludF9pbmZvKTsKPiA+ID4gKwo+ID4gPiArLyoqCj4g PiA+ICsgKiBkcm1fZ2VtX3NobWVtX2dldF9zZ190YWJsZSAtIFByb3ZpZGUgYSBzY2F0dGVyL2dh dGhlciB0YWJsZSBvZiBwaW5uZWQKPiA+ID4gKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcGFnZXMgZm9yIGEgc2htZW0gR0VNIG9iamVjdAo+ID4gPiArICogQG9iajogR0VNIG9iamVj dAo+ID4gPiArICoKPiA+ID4gKyAqIFRoaXMgZnVuY3Rpb24gZXhwb3J0cyBhIHNjYXR0ZXIvZ2F0 aGVyIHRhYmxlIHN1aXRhYmxlIGZvciBQUklNRSB1c2FnZSBieQo+ID4gPiArICogY2FsbGluZyB0 aGUgc3RhbmRhcmQgRE1BIG1hcHBpbmcgQVBJLgo+ID4gPiArICoKPiA+ID4gKyAqIFJldHVybnM6 Cj4gPiA+ICsgKiBBIHBvaW50ZXIgdG8gdGhlIHNjYXR0ZXIvZ2F0aGVyIHRhYmxlIG9mIHBpbm5l ZCBwYWdlcyBvciBOVUxMIG9uIGZhaWx1cmUuCj4gPiA+ICsgKi8KPiA+ID4gK3N0cnVjdCBzZ190 YWJsZSAqZHJtX2dlbV9zaG1lbV9nZXRfc2dfdGFibGUoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpv YmopCj4gPiA+ICt7Cj4gPiA+ICsJc3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpzaG1lbSA9 IHRvX2RybV9nZW1fc2htZW1fb2JqKG9iaik7Cj4gPiA+ICsKPiA+ID4gKwlyZXR1cm4gZHJtX3By aW1lX3BhZ2VzX3RvX3NnKHNobWVtLT5wYWdlcywgb2JqLT5zaXplID4+IFBBR0VfU0hJRlQpOwo+ ID4gPiArfQo+ID4gPiArRVhQT1JUX1NZTUJPTF9HUEwoZHJtX2dlbV9zaG1lbV9nZXRfc2dfdGFi bGUpOwo+ID4gPiArCj4gPiA+ICsvKioKPiA+ID4gKyAqIGRybV9nZW1fc2htZW1fcHJpbWVfaW1w b3J0X3NnX3RhYmxlIC0gUHJvZHVjZSBhIHNobWVtIEdFTSBvYmplY3QgZnJvbQo+ID4gPiArICog ICAgICAgICAgICAgICAgIGFub3RoZXIgZHJpdmVyJ3Mgc2NhdHRlci9nYXRoZXIgdGFibGUgb2Yg cGlubmVkIHBhZ2VzCj4gPiA+ICsgKiBAZGV2OiBEZXZpY2UgdG8gaW1wb3J0IGludG8KPiA+ID4g KyAqIEBhdHRhY2g6IERNQS1CVUYgYXR0YWNobWVudAo+ID4gPiArICogQHNndDogU2NhdHRlci9n YXRoZXIgdGFibGUgb2YgcGlubmVkIHBhZ2VzCj4gPiA+ICsgKgo+ID4gPiArICogVGhpcyBmdW5j dGlvbiBpbXBvcnRzIGEgc2NhdHRlci9nYXRoZXIgdGFibGUgZXhwb3J0ZWQgdmlhIERNQS1CVUYg YnkKPiA+ID4gKyAqIGFub3RoZXIgZHJpdmVyLiBEcml2ZXJzIHRoYXQgdXNlIHRoZSBzaG1lbSBo ZWxwZXJzIHNob3VsZCBzZXQgdGhpcyBhcyB0aGVpcgo+ID4gPiArICogJmRybV9kcml2ZXIuZ2Vt X3ByaW1lX2ltcG9ydF9zZ190YWJsZSBjYWxsYmFjay4KPiA+ID4gKyAqCj4gPiA+ICsgKiBSZXR1 cm5zOgo+ID4gPiArICogQSBwb2ludGVyIHRvIGEgbmV3bHkgY3JlYXRlZCBHRU0gb2JqZWN0IG9y IGFuIEVSUl9QVFItZW5jb2RlZCBuZWdhdGl2ZQo+ID4gPiArICogZXJyb3IgY29kZSBvbiBmYWls dXJlLgo+ID4gPiArICovCj4gPiA+ICtzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKgo+ID4gPiArZHJt X2dlbV9zaG1lbV9wcmltZV9pbXBvcnRfc2dfdGFibGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwK PiA+ID4gKwkJCQkgICAgc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoLAo+ID4gPiAr CQkJCSAgICBzdHJ1Y3Qgc2dfdGFibGUgKnNndCkKPiA+ID4gK3sKPiA+ID4gKwlzaXplX3Qgc2l6 ZSA9IFBBR0VfQUxJR04oYXR0YWNoLT5kbWFidWYtPnNpemUpOwo+ID4gPiArCXNpemVfdCBucGFn ZXMgPSBzaXplID4+IFBBR0VfU0hJRlQ7Cj4gPiA+ICsJc3RydWN0IGRybV9nZW1fc2htZW1fb2Jq ZWN0ICpzaG1lbTsKPiA+ID4gKwlpbnQgcmV0Owo+ID4gPiArCj4gPiA+ICsJc2htZW0gPSBkcm1f Z2VtX3NobWVtX2NyZWF0ZShkZXYsIHNpemUpOwo+ID4gPiArCWlmIChJU19FUlIoc2htZW0pKQo+ ID4gPiArCQlyZXR1cm4gRVJSX0NBU1Qoc2htZW0pOwo+ID4gPiArCj4gPiA+ICsJc2htZW0tPnBh Z2VzID0ga3ZtYWxsb2NfYXJyYXkobnBhZ2VzLCBzaXplb2Yoc3RydWN0IHBhZ2UgKiksIEdGUF9L RVJORUwpOwo+ID4gPiArCWlmICghc2htZW0tPnBhZ2VzKSB7Cj4gPiA+ICsJCXJldCA9IC1FTk9N RU07Cj4gPiA+ICsJCWdvdG8gZXJyX2ZyZWVfZ2VtOwo+ID4gPiArCX0KPiA+ID4gKwo+ID4gPiAr CXJldCA9IGRybV9wcmltZV9zZ190b19wYWdlX2FkZHJfYXJyYXlzKHNndCwgc2htZW0tPnBhZ2Vz LCBOVUxMLCBucGFnZXMpOwo+ID4gPiArCWlmIChyZXQgPCAwKQo+ID4gPiArCQlnb3RvIGVycl9m cmVlX2FycmF5Owo+ID4gPiArCj4gPiA+ICsJc2htZW0tPnNndCA9IHNndDsKPiA+ID4gKwlzaG1l bS0+cGFnZXNfdXNlX2NvdW50ID0gMTsgLyogUGVybWFuZW50bHkgcGlubmVkIGZyb20gb3VyIHBv aW50IG9mIHZpZXcgKi8KPiA+ID4gKwo+ID4gPiArCURSTV9ERUJVR19QUklNRSgic2l6ZSA9ICV6 dVxuIiwgc2l6ZSk7Cj4gPiA+ICsKPiA+ID4gKwlyZXR1cm4gJnNobWVtLT5iYXNlOwo+ID4gPiAr Cj4gPiA+ICtlcnJfZnJlZV9hcnJheToKPiA+ID4gKwlrdmZyZWUoc2htZW0tPnBhZ2VzKTsKPiA+ ID4gK2Vycl9mcmVlX2dlbToKPiA+ID4gKwlkcm1fZ2VtX29iamVjdF9wdXRfdW5sb2NrZWQoJnNo bWVtLT5iYXNlKTsKPiA+ID4gKwo+ID4gPiArCXJldHVybiBFUlJfUFRSKHJldCk7Cj4gPiA+ICt9 Cj4gPiA+ICtFWFBPUlRfU1lNQk9MX0dQTChkcm1fZ2VtX3NobWVtX3ByaW1lX2ltcG9ydF9zZ190 YWJsZSk7Cj4gPiA+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fZ2VtX3NobWVtX2hlbHBl ci5oIGIvaW5jbHVkZS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuaAo+ID4gPiBuZXcgZmlsZSBt b2RlIDEwMDY0NAo+ID4gPiBpbmRleCAwMDAwMDAwMDAwMDAuLjI2YjA1ZTA2NDA3ZAo+ID4gPiAt LS0gL2Rldi9udWxsCj4gPiA+ICsrKyBiL2luY2x1ZGUvZHJtL2RybV9nZW1fc2htZW1faGVscGVy LmgKPiA+ID4gQEAgLTAsMCArMSwxNTMgQEAKPiA+ID4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlm aWVyOiBHUEwtMi4wICovCj4gPiA+ICsKPiA+ID4gKyNpZm5kZWYgX19EUk1fR0VNX1NITUVNX0hF TFBFUl9IX18KPiA+ID4gKyNkZWZpbmUgX19EUk1fR0VNX1NITUVNX0hFTFBFUl9IX18KPiA+ID4g Kwo+ID4gPiArI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Cj4gPiA+ICsjaW5jbHVkZSA8bGludXgvbW0u aD4KPiA+ID4gKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgo+ID4gPiArCj4gPiA+ICsjaW5jbHVk ZSA8ZHJtL2RybV9maWxlLmg+Cj4gPiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9nZW0uaD4KPiA+ID4g KyNpbmNsdWRlIDxkcm0vZHJtX2lvY3RsLmg+Cj4gPiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9wcmlt ZS5oPgo+ID4gPiArCj4gPiA+ICtzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50Owo+ID4gPiArc3Ry dWN0IGRybV9tb2RlX2NyZWF0ZV9kdW1iOwo+ID4gPiArc3RydWN0IGRybV9wcmludGVyOwo+ID4g PiArc3RydWN0IHNnX3RhYmxlOwo+ID4gPiArCj4gPiA+ICsvKioKPiA+ID4gKyAqIHN0cnVjdCBk cm1fZ2VtX3NobWVtX29iamVjdCAtIEdFTSBvYmplY3QgYmFja2VkIGJ5IHNobWVtCj4gPiA+ICsg Ki8KPiA+ID4gK3N0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCB7Cj4gPiA+ICsJLyoqCj4gPiA+ ICsJICogQGJhc2U6IEJhc2UgR0VNIG9iamVjdAo+ID4gPiArCSAqLwo+ID4gPiArCXN0cnVjdCBk cm1fZ2VtX29iamVjdCBiYXNlOwo+ID4gPiArCj4gPiA+ICsJLyoqCj4gPiA+ICsJICogQHBhZ2Vz X2xvY2s6IFByb3RlY3RzIHRoZSBwYWdlIHRhYmxlIGFuZCB1c2UgY291bnQKPiA+ID4gKwkgKi8K PiA+ID4gKwlzdHJ1Y3QgbXV0ZXggcGFnZXNfbG9jazsKPiA+ID4gKwo+ID4gPiArCS8qKgo+ID4g PiArCSAqIEBwYWdlczogUGFnZSB0YWJsZQo+ID4gPiArCSAqLwo+ID4gPiArCXN0cnVjdCBwYWdl ICoqcGFnZXM7Cj4gPiA+ICsKPiA+ID4gKwkvKioKPiA+ID4gKwkgKiBAcGFnZXNfdXNlX2NvdW50 Ogo+ID4gPiArCSAqCj4gPiA+ICsJICogUmVmZXJlbmNlIGNvdW50IG9uIHRoZSBwYWdlcyB0YWJs ZS4KPiA+ID4gKwkgKiBUaGUgcGFnZXMgYXJlIHB1dCB3aGVuIHRoZSBjb3VudCByZWFjaGVzIHpl cm8uCj4gPiA+ICsJICovCj4gPiA+ICsJdW5zaWduZWQgaW50IHBhZ2VzX3VzZV9jb3VudDsKPiA+ ID4gKwo+ID4gPiArCS8qKgo+ID4gPiArCSAqIEBwYWdlc19tYXJrX2RpcnR5X29uX3B1dDoKPiA+ ID4gKwkgKgo+ID4gPiArCSAqIE1hcmsgcGFnZXMgYXMgZGlydHkgd2hlbiB0aGV5IGFyZSBwdXQu Cj4gPiA+ICsJICovCj4gPiA+ICsJdW5zaWduZWQgaW50IHBhZ2VzX21hcmtfZGlydHlfb25fcHV0 ICAgIDogMTsKPiA+ID4gKwo+ID4gPiArCS8qKgo+ID4gPiArCSAqIEBwYWdlc19tYXJrX2FjY2Vz c2VkX29uX3B1dDoKPiA+ID4gKwkgKgo+ID4gPiArCSAqIE1hcmsgcGFnZXMgYXMgYWNjZXNzZWQg d2hlbiB0aGV5IGFyZSBwdXQuCj4gPiA+ICsJICovCj4gPiA+ICsJdW5zaWduZWQgaW50IHBhZ2Vz X21hcmtfYWNjZXNzZWRfb25fcHV0IDogMTsKPiA+ID4gKwo+ID4gPiArCS8qKgo+ID4gPiArCSAq IEBzZ3Q6IFNjYXR0ZXIvZ2F0aGVyIHRhYmxlIGZvciBpbXBvcnRlZCBQUklNRSBidWZmZXJzCj4g PiA+ICsJICovCj4gPiA+ICsJc3RydWN0IHNnX3RhYmxlICpzZ3Q7Cj4gPiA+ICsKPiA+ID4gKwkv KioKPiA+ID4gKwkgKiBAdm1hcF9sb2NrOiBQcm90ZWN0cyB0aGUgdm1hcCBhZGRyZXNzIGFuZCB1 c2UgY291bnQKPiA+ID4gKwkgKi8KPiA+ID4gKwlzdHJ1Y3QgbXV0ZXggdm1hcF9sb2NrOwo+ID4g PiArCj4gPiA+ICsJLyoqCj4gPiA+ICsJICogQHZhZGRyOiBLZXJuZWwgdmlydHVhbCBhZGRyZXNz IG9mIHRoZSBiYWNraW5nIG1lbW9yeQo+ID4gPiArCSAqLwo+ID4gPiArCXZvaWQgKnZhZGRyOwo+ ID4gPiArCj4gPiA+ICsJLyoqCj4gPiA+ICsJICogQHZtYXBfdXNlX2NvdW50Ogo+ID4gPiArCSAq Cj4gPiA+ICsJICogUmVmZXJlbmNlIGNvdW50IG9uIHRoZSB2aXJ0dWFsIGFkZHJlc3MuCj4gPiA+ ICsJICogVGhlIGFkZHJlc3MgYXJlIHVuLW1hcHBlZCB3aGVuIHRoZSBjb3VudCByZWFjaGVzIHpl cm8uCj4gPiA+ICsJICovCj4gPiA+ICsJdW5zaWduZWQgaW50IHZtYXBfdXNlX2NvdW50Owo+ID4g PiArfTsKPiA+ID4gKwo+ID4gPiArI2RlZmluZSB0b19kcm1fZ2VtX3NobWVtX29iaihvYmopIFwK PiA+ID4gKwljb250YWluZXJfb2Yob2JqLCBzdHJ1Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QsIGJh c2UpCj4gPiA+ICsKPiA+ID4gKy8qKgo+ID4gPiArICogREVGSU5FX0RSTV9HRU1fU0hNRU1fRk9Q UygpIC0gTWFjcm8gdG8gZ2VuZXJhdGUgZmlsZSBvcGVyYXRpb25zIGZvciBzaG1lbSBkcml2ZXJz Cj4gPiA+ICsgKiBAbmFtZTogbmFtZSBmb3IgdGhlIGdlbmVyYXRlZCBzdHJ1Y3R1cmUKPiA+ID4g KyAqCj4gPiA+ICsgKiBUaGlzIG1hY3JvIGF1dG9nZW5lcmF0ZXMgYSBzdWl0YWJsZSAmc3RydWN0 IGZpbGVfb3BlcmF0aW9ucyBmb3Igc2htZW0gYmFzZWQKPiA+ID4gKyAqIGRyaXZlcnMsIHdoaWNo IGNhbiBiZSBhc3NpZ25lZCB0byAmZHJtX2RyaXZlci5mb3BzLiBOb3RlIHRoYXQgdGhpcyBzdHJ1 Y3R1cmUKPiA+ID4gKyAqIGNhbm5vdCBiZSBzaGFyZWQgYmV0d2VlbiBkcml2ZXJzLCBiZWNhdXNl IGl0IGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZQo+ID4gPiArICogY3VycmVudCBtb2R1bGUg dXNpbmcgVEhJU19NT0RVTEUuCj4gPiA+ICsgKgo+ID4gPiArICogTm90ZSB0aGF0IHRoZSBkZWNs YXJhdGlvbiBpcyBhbHJlYWR5IG1hcmtlZCBhcyBzdGF0aWMgLSBpZiB5b3UgbmVlZCBhCj4gPiA+ ICsgKiBub24tc3RhdGljIHZlcnNpb24gb2YgdGhpcyB5b3UncmUgcHJvYmFibHkgZG9pbmcgaXQg d3JvbmcgYW5kIHdpbGwgYnJlYWsgdGhlCj4gPiA+ICsgKiBUSElTX01PRFVMRSByZWZlcmVuY2Ug YnkgYWNjaWRlbnQuCj4gPiA+ICsgKi8KPiA+ID4gKyNkZWZpbmUgREVGSU5FX0RSTV9HRU1fU0hN RU1fRk9QUyhuYW1lKSBcCj4gPiA+ICsJc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlv bnMgbmFtZSA9IHtcCj4gPiA+ICsJCS5vd25lcgkJPSBUSElTX01PRFVMRSxcCj4gPiA+ICsJCS5v cGVuCQk9IGRybV9vcGVuLFwKPiA+ID4gKwkJLnJlbGVhc2UJPSBkcm1fcmVsZWFzZSxcCj4gPiA+ ICsJCS51bmxvY2tlZF9pb2N0bAk9IGRybV9pb2N0bCxcCj4gPiA+ICsJCS5jb21wYXRfaW9jdGwJ PSBkcm1fY29tcGF0X2lvY3RsLFwKPiA+ID4gKwkJLnBvbGwJCT0gZHJtX3BvbGwsXAo+ID4gPiAr CQkucmVhZAkJPSBkcm1fcmVhZCxcCj4gPiA+ICsJCS5sbHNlZWsJCT0gbm9vcF9sbHNlZWssXAo+ ID4gPiArCQkubW1hcAkJPSBkcm1fZ2VtX3NobWVtX21tYXAsIFwKPiA+ID4gKwl9Cj4gPiA+ICsK PiA+ID4gK3N0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqZHJtX2dlbV9zaG1lbV9jcmVhdGUo c3RydWN0IGRybV9kZXZpY2UgKmRldiwgc2l6ZV90IHNpemUpOwo+ID4gPiArdm9pZCBkcm1fZ2Vt X3NobWVtX2ZyZWVfb2JqZWN0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKPiA+ID4gKwo+ ID4gPiAraW50IGRybV9nZW1fc2htZW1fZ2V0X3BhZ2VzKHN0cnVjdCBkcm1fZ2VtX3NobWVtX29i amVjdCAqc2htZW0pOwo+ID4gPiArdm9pZCBkcm1fZ2VtX3NobWVtX3B1dF9wYWdlcyhzdHJ1Y3Qg ZHJtX2dlbV9zaG1lbV9vYmplY3QgKnNobWVtKTsKPiA+ID4gK2ludCBkcm1fZ2VtX3NobWVtX3Bp bihzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7Cj4gPiA+ICt2b2lkIGRybV9nZW1fc2htZW1f dW5waW4oc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwo+ID4gPiArdm9pZCAqZHJtX2dlbV9z aG1lbV92bWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKPiA+ID4gK3ZvaWQgZHJtX2dl bV9zaG1lbV92dW5tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHZvaWQgKnZhZGRyKTsK PiA+ID4gKwo+ID4gPiAraW50IGRybV9nZW1fc2htZW1fZHVtYl9jcmVhdGUoc3RydWN0IGRybV9m aWxlICpmaWxlLCBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ID4gPiArCQkJICAgICAgc3RydWN0 IGRybV9tb2RlX2NyZWF0ZV9kdW1iICphcmdzKTsKPiA+ID4gKwo+ID4gPiAraW50IGRybV9nZW1f c2htZW1fbW1hcChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEp Owo+ID4gPiArCj4gPiA+ICtleHRlcm4gY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0 IGRybV9nZW1fc2htZW1fdm1fb3BzOwo+ID4gPiArCj4gPiA+ICt2b2lkIGRybV9nZW1fc2htZW1f cHJpbnRfaW5mbyhzdHJ1Y3QgZHJtX3ByaW50ZXIgKnAsIHVuc2lnbmVkIGludCBpbmRlbnQsCj4g PiA+ICsJCQkgICAgICBjb25zdCBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7Cj4gPiA+ICsK PiA+ID4gK3N0cnVjdCBzZ190YWJsZSAqZHJtX2dlbV9zaG1lbV9nZXRfc2dfdGFibGUoc3RydWN0 IGRybV9nZW1fb2JqZWN0ICpvYmopOwo+ID4gPiArc3RydWN0IGRybV9nZW1fb2JqZWN0ICoKPiA+ ID4gK2RybV9nZW1fc2htZW1fcHJpbWVfaW1wb3J0X3NnX3RhYmxlKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsCj4gPiA+ICsJCQkJICAgIHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCwK PiA+ID4gKwkJCQkgICAgc3RydWN0IHNnX3RhYmxlICpzZ3QpOwo+ID4gPiArCj4gPiA+ICsvKioK PiA+ID4gKyAqIERSTV9HRU1fU0hNRU1fRFJJVkVSX09QUyAtIERlZmF1bHQgc2htZW0gR0VNIG9w ZXJhdGlvbnMKPiA+ID4gKyAqCj4gPiA+ICsgKiBUaGlzIG1hY3JvIHByb3ZpZGVzIGEgc2hvcnRj dXQgZm9yIHNldHRpbmcgdGhlIHNobWVtIEdFTSBvcGVyYXRpb25zIGluCj4gPiA+ICsgKiB0aGUg JmRybV9kcml2ZXIgc3RydWN0dXJlLgo+ID4gPiArICovCj4gPiA+ICsjZGVmaW5lIERSTV9HRU1f U0hNRU1fRFJJVkVSX09QUyBcCj4gPiA+ICsJLnByaW1lX2hhbmRsZV90b19mZAk9IGRybV9nZW1f cHJpbWVfaGFuZGxlX3RvX2ZkLCBcCj4gPiA+ICsJLnByaW1lX2ZkX3RvX2hhbmRsZQk9IGRybV9n ZW1fcHJpbWVfZmRfdG9faGFuZGxlLCBcCj4gPiA+ICsJLmdlbV9wcmltZV9pbXBvcnRfc2dfdGFi bGUgPSBkcm1fZ2VtX3NobWVtX3ByaW1lX2ltcG9ydF9zZ190YWJsZSwgXAo+ID4gPiArCS5nZW1f cHJpbWVfbW1hcAkJPSBkcm1fZ2VtX3ByaW1lX21tYXAsIFwKPiA+ID4gKwkuZHVtYl9jcmVhdGUJ CT0gZHJtX2dlbV9zaG1lbV9kdW1iX2NyZWF0ZQo+ID4gPiArCj4gPiA+ICsjZW5kaWYgLyogX19E Uk1fR0VNX1NITUVNX0hFTFBFUl9IX18gKi8KPiA+ID4gLS0gCj4gPiA+IDIuMTUuMQo+ID4gPiAK PiA+ID4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPiA+ ID4gZHJpLWRldmVsIG1haWxpbmcgbGlzdAo+ID4gPiBkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0 b3Aub3JnCj4gPiA+IGh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGlu Zm8vZHJpLWRldmVsCj4gCgotLSAKRGFuaWVsIFZldHRlcgpTb2Z0d2FyZSBFbmdpbmVlciwgSW50 ZWwgQ29ycG9yYXRpb24KaHR0cDovL2Jsb2cuZmZ3bGwuY2gKX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1n ZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21h aWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==