From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH v3] drm/i915: Eliminate vmap overhead for cmd parser Date: Wed, 25 Nov 2015 21:51:08 +0200 Message-ID: <20151125195108.GY4437@intel.com> References: <20151120144153.GL4437@intel.com> <1448033483-3884-1-git-send-email-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTP id A003E6E0D1 for ; Wed, 25 Nov 2015 11:51:11 -0800 (PST) Content-Disposition: inline In-Reply-To: <1448033483-3884-1-git-send-email-chris@chris-wilson.co.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gRnJpLCBOb3YgMjAsIDIwMTUgYXQgMDM6MzE6MjNQTSArMDAwMCwgQ2hyaXMgV2lsc29uIHdy b3RlOgo+IFdpdGggYSBsaXR0bGUgY29tcGxleGl0eSB0byBoYW5kbGUgY21kcyBzdHJhZGRsaW5n IHBhZ2UgYm91bmRhcmllcywgd2UKPiBjYW4gY29tcGxldGVseSBhdm9pZGluZyBoYXZpbmcgdG8g dm1hcCB0aGUgYmF0Y2ggYW5kIHRoZSBzaGFkb3cgYmF0Y2gKPiBvYmplY3RzIHdoaWxzdCBydW5u aW5nIHRoZSBjb21tYW5kIHBhcnNlci4KPiAKPiBPbiBpdmIgaTctMzcyME1ROgo+IAo+IHgxMXBl cmYgLWRvdCBiZWZvcmUgNTQuM00sIGFmdGVyIDUzLjJNIChtYXggMjAzTSkKPiBnbHhnZWFycyBi ZWZvcmUgNzExMCBmcHMsIGFmdGVyIDczMDAgZnBzIChtYXggNzg2MCBmcHMpCj4gCj4gQmVmb3Jl Ogo+IFRpbWUgdG8gYmx0IDE2Mzg0IGJ5dGVzIHggICAgICAxOgkgMTIuNDAwwrVzLCAxLjJHaUIv cwo+IFRpbWUgdG8gYmx0IDE2Mzg0IGJ5dGVzIHggICA0MDk2OgkgIDMuMDU1wrVzLCA1LjBHaUIv cwo+IAo+IEFmdGVyOgo+IFRpbWUgdG8gYmx0IDE2Mzg0IGJ5dGVzIHggICAgICAxOgkgIDguNjAw wrVzLCAxLjhHaUIvcwo+IFRpbWUgdG8gYmx0IDE2Mzg0IGJ5dGVzIHggICA0MDk2OgkgIDIuNDU2 wrVzLCA2LjJHaUIvcwo+IAo+IFJlbW92aW5nIHRoZSB2bWFwIGlzIG1vc3RseSBhIHdpbiwgZXhj ZXB0IHdlIGxvc2UgaW4gYSBmZXcgY2FzZXMgd2hlcmUKPiB0aGUgYmF0Y2ggc2l6ZSBpcyBncmVh dGVyIHRoYW4gYSBwYWdlIGR1ZSB0byB0aGUgZXh0cmEgY29tcGxleGl0eSAobG9zcwo+IG9mIGEg c2ltcGxlIGNhY2hlIGVmZmljaWVudCBsYXJnZSBjb3B5LCBhbmQgYm91bmRhcnkgaGFuZGxpbmcp Lgo+IAo+IHYyOiBSZW9yZGVyIHNvIHRoYXQgd2UgZG8gY2hlY2sgb2Fjb250cm9sIHJlbWFpbmlu ZyBzZXQgYXQgZW5kLW9mLWJhdGNoCj4gdjM6IFN0YWdlIHRoZSBjb3B5IHRocm91Z2ggYSB0ZW1w b3JhcnkgcGFnZSBzbyB0aGF0IHdlIG9ubHkgY29weSBpbnRvCj4gZHN0IGNvbW1hbmRzIHRoYXQg aGF2ZSBiZWVuIHZlcmlmaWVkLgo+IHY0OiBNb3ZlIHRoZSBiYXRjaCBvZmZzZXQvbGVuZ3RoIHZh bGlkYXRpb24gdG8gZXhlY2J1Zi4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBDaHJpcyBXaWxzb24gPGNo cmlzQGNocmlzLXdpbHNvbi5jby51az4KPiBDYzogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJq YWxhQGxpbnV4LmludGVsLmNvbT4KPiAtLS0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9j bWRfcGFyc2VyLmMgfCAyNTggKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tCj4gIDEg ZmlsZSBjaGFuZ2VkLCAxMjcgaW5zZXJ0aW9ucygrKSwgMTMxIGRlbGV0aW9ucygtKQo+IAo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2NtZF9wYXJzZXIuYyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfY21kX3BhcnNlci5jCj4gaW5kZXggODE0ZDg5NGVkOTI1Li44 NjkxMGUxNzUwNWEgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9jbWRf cGFyc2VyLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2NtZF9wYXJzZXIuYwo+ IEBAIC04NjAsMTAwICs4NjAsNiBAQCBmaW5kX3JlZyhjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfcmVn X2Rlc2NyaXB0b3IgKnRhYmxlLAo+ICAJcmV0dXJuIE5VTEw7Cj4gIH0KPiAgCj4gLXN0YXRpYyB1 MzIgKnZtYXBfYmF0Y2goc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPiAtCQkgICAg ICAgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGxlbikKPiAtewo+IC0JaW50IGk7Cj4gLQl2b2lk ICphZGRyID0gTlVMTDsKPiAtCXN0cnVjdCBzZ19wYWdlX2l0ZXIgc2dfaXRlcjsKPiAtCWludCBm aXJzdF9wYWdlID0gc3RhcnQgPj4gUEFHRV9TSElGVDsKPiAtCWludCBsYXN0X3BhZ2UgPSAobGVu ICsgc3RhcnQgKyA0MDk1KSA+PiBQQUdFX1NISUZUOwo+IC0JaW50IG5wYWdlcyA9IGxhc3RfcGFn ZSAtIGZpcnN0X3BhZ2U7Cj4gLQlzdHJ1Y3QgcGFnZSAqKnBhZ2VzOwo+IC0KPiAtCXBhZ2VzID0g ZHJtX21hbGxvY19hYihucGFnZXMsIHNpemVvZigqcGFnZXMpKTsKPiAtCWlmIChwYWdlcyA9PSBO VUxMKSB7Cj4gLQkJRFJNX0RFQlVHX0RSSVZFUigiRmFpbGVkIHRvIGdldCBzcGFjZSBmb3IgcGFn ZXNcbiIpOwo+IC0JCWdvdG8gZmluaXNoOwo+IC0JfQo+IC0KPiAtCWkgPSAwOwo+IC0JZm9yX2Vh Y2hfc2dfcGFnZShvYmotPnBhZ2VzLT5zZ2wsICZzZ19pdGVyLCBvYmotPnBhZ2VzLT5uZW50cywg Zmlyc3RfcGFnZSkgewo+IC0JCXBhZ2VzW2krK10gPSBzZ19wYWdlX2l0ZXJfcGFnZSgmc2dfaXRl cik7Cj4gLQkJaWYgKGkgPT0gbnBhZ2VzKQo+IC0JCQlicmVhazsKPiAtCX0KPiAtCj4gLQlhZGRy ID0gdm1hcChwYWdlcywgaSwgMCwgUEFHRV9LRVJORUwpOwo+IC0JaWYgKGFkZHIgPT0gTlVMTCkg ewo+IC0JCURSTV9ERUJVR19EUklWRVIoIkZhaWxlZCB0byB2bWFwIHBhZ2VzXG4iKTsKPiAtCQln b3RvIGZpbmlzaDsKPiAtCX0KPiAtCj4gLWZpbmlzaDoKPiAtCWlmIChwYWdlcykKPiAtCQlkcm1f ZnJlZV9sYXJnZShwYWdlcyk7Cj4gLQlyZXR1cm4gKHUzMiopYWRkcjsKPiAtfQo+IC0KPiAtLyog UmV0dXJucyBhIHZtYXAnZCBwb2ludGVyIHRvIGRlc3Rfb2JqLCB3aGljaCB0aGUgY2FsbGVyIG11 c3QgdW5tYXAgKi8KPiAtc3RhdGljIHUzMiAqY29weV9iYXRjaChzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCAqZGVzdF9vYmosCj4gLQkJICAgICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 ICpzcmNfb2JqLAo+IC0JCSAgICAgICB1MzIgYmF0Y2hfc3RhcnRfb2Zmc2V0LAo+IC0JCSAgICAg ICB1MzIgYmF0Y2hfbGVuKQo+IC17Cj4gLQlpbnQgbmVlZHNfY2xmbHVzaCA9IDA7Cj4gLQl2b2lk ICpzcmNfYmFzZSwgKnNyYzsKPiAtCXZvaWQgKmRzdCA9IE5VTEw7Cj4gLQlpbnQgcmV0Owo+IC0K PiAtCWlmIChiYXRjaF9sZW4gPiBkZXN0X29iai0+YmFzZS5zaXplIHx8Cj4gLQkgICAgYmF0Y2hf bGVuICsgYmF0Y2hfc3RhcnRfb2Zmc2V0ID4gc3JjX29iai0+YmFzZS5zaXplKQo+IC0JCXJldHVy biBFUlJfUFRSKC1FMkJJRyk7Cj4gLQo+IC0JaWYgKFdBUk5fT04oZGVzdF9vYmotPnBhZ2VzX3Bp bl9jb3VudCA9PSAwKSkKPiAtCQlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKPiAtCj4gLQlyZXQg PSBpOTE1X2dlbV9vYmpfcHJlcGFyZV9zaG1lbV9yZWFkKHNyY19vYmosICZuZWVkc19jbGZsdXNo KTsKPiAtCWlmIChyZXQpIHsKPiAtCQlEUk1fREVCVUdfRFJJVkVSKCJDTUQ6IGZhaWxlZCB0byBw cmVwYXJlIHNoYWRvdyBiYXRjaFxuIik7Cj4gLQkJcmV0dXJuIEVSUl9QVFIocmV0KTsKPiAtCX0K PiAtCj4gLQlzcmNfYmFzZSA9IHZtYXBfYmF0Y2goc3JjX29iaiwgYmF0Y2hfc3RhcnRfb2Zmc2V0 LCBiYXRjaF9sZW4pOwo+IC0JaWYgKCFzcmNfYmFzZSkgewo+IC0JCURSTV9ERUJVR19EUklWRVIo IkNNRDogRmFpbGVkIHRvIHZtYXAgYmF0Y2hcbiIpOwo+IC0JCXJldCA9IC1FTk9NRU07Cj4gLQkJ Z290byB1bnBpbl9zcmM7Cj4gLQl9Cj4gLQo+IC0JcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3NldF90 b19jcHVfZG9tYWluKGRlc3Rfb2JqLCB0cnVlKTsKPiAtCWlmIChyZXQpIHsKPiAtCQlEUk1fREVC VUdfRFJJVkVSKCJDTUQ6IEZhaWxlZCB0byBzZXQgc2hhZG93IGJhdGNoIHRvIENQVVxuIik7Cj4g LQkJZ290byB1bm1hcF9zcmM7Cj4gLQl9Cj4gLQo+IC0JZHN0ID0gdm1hcF9iYXRjaChkZXN0X29i aiwgMCwgYmF0Y2hfbGVuKTsKPiAtCWlmICghZHN0KSB7Cj4gLQkJRFJNX0RFQlVHX0RSSVZFUigi Q01EOiBGYWlsZWQgdG8gdm1hcCBzaGFkb3cgYmF0Y2hcbiIpOwo+IC0JCXJldCA9IC1FTk9NRU07 Cj4gLQkJZ290byB1bm1hcF9zcmM7Cj4gLQl9Cj4gLQo+IC0Jc3JjID0gc3JjX2Jhc2UgKyBvZmZz ZXRfaW5fcGFnZShiYXRjaF9zdGFydF9vZmZzZXQpOwo+IC0JaWYgKG5lZWRzX2NsZmx1c2gpCj4g LQkJZHJtX2NsZmx1c2hfdmlydF9yYW5nZShzcmMsIGJhdGNoX2xlbik7Cj4gLQo+IC0JbWVtY3B5 KGRzdCwgc3JjLCBiYXRjaF9sZW4pOwo+IC0KPiAtdW5tYXBfc3JjOgo+IC0JdnVubWFwKHNyY19i YXNlKTsKPiAtdW5waW5fc3JjOgo+IC0JaTkxNV9nZW1fb2JqZWN0X3VucGluX3BhZ2VzKHNyY19v YmopOwo+IC0KPiAtCXJldHVybiByZXQgPyBFUlJfUFRSKHJldCkgOiBkc3Q7Cj4gLX0KPiAtCj4g IC8qKgo+ICAgKiBpOTE1X25lZWRzX2NtZF9wYXJzZXIoKSAtIHNob3VsZCBhIGdpdmVuIHJpbmcg dXNlIHNvZnR3YXJlIGNvbW1hbmQgcGFyc2luZz8KPiAgICogQHJpbmc6IHRoZSByaW5nIGluIHF1 ZXN0aW9uCj4gQEAgLTEwOTcsNiArMTAwMyw3IEBAIHN0YXRpYyBib29sIGNoZWNrX2NtZChjb25z dCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nLAo+ICB9Cj4gIAo+ICAjZGVmaW5lIExFTkdU SF9CSUFTIDIKPiArI2RlZmluZSBNQVhfUEFSVElBTCAyNTYKClRoZXJlIHNlZW1zIHRvIHNvbWUg Y29uZnVzaW9uIHdoZXRoZXIgdGhpcyBpcyBieXRlcyBvciBkd29yZHMuCgpBbHNvIEkgZ3Vlc3Mg d2UgYWxyZWFkeSBlbmQgdXAgYWxsb2NhdGluZyB0d28gcGFnZXMgYW55d2F5LCBzbwptYXliZSBN QVhfUEFSVElBTCBzaG91bGQganVzdCBiZSBvbmUgcGFnZT8gSXQncyBzdGlsbCBub3QgYmlnCmVu b3VnaCB0byBjb3ZlciB0aGUgbWF4IGxlZ2FsIGNtZCBsZW5ndGggQUZBSUNTLCBzbyBJIHRoaW5r CnRoZSBXQVJOIGluIHRoZSBjaGVjayBuZWVkcyB0byBiZSByZW1vdmVkLgoKPiAgCj4gIC8qKgo+ ICAgKiBpOTE1X3BhcnNlX2NtZHMoKSAtIHBhcnNlIGEgc3VibWl0dGVkIGJhdGNoIGJ1ZmZlciBm b3IgcHJpdmlsZWdlIHZpb2xhdGlvbnMKPiBAQCAtMTEyMCwzOSArMTAyNyw5MSBAQCBpbnQgaTkx NV9wYXJzZV9jbWRzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcsCj4gIAkJICAgIHUzMiBi YXRjaF9sZW4sCj4gIAkJICAgIGJvb2wgaXNfbWFzdGVyKQo+ICB7Cj4gLQl1MzIgKmNtZCwgKmJh dGNoX2Jhc2UsICpiYXRjaF9lbmQ7Cj4gKwljb25zdCBzdHJ1Y3QgZHJtX2k5MTVfY21kX2Rlc2Ny aXB0b3IgKmRlc2M7Cj4gKwl1bnNpZ25lZCBkc3RfaXRlciwgc3JjX2l0ZXI7Cj4gKwlpbnQgbmVl ZHNfY2xmbHVzaCA9IDA7Cj4gKwlzdHJ1Y3QgZ2V0X3BhZ2UgcmV3aW5kOwo+ICsJdm9pZCAqc3Jj LCAqZHN0LCAqdG1wOwo+ICsJdTMyIHBhcnRpYWwsIGxlbmd0aDsKPiArCXVuc2lnbmVkIGluLCBv dXQ7Cj4gIAlzdHJ1Y3QgZHJtX2k5MTVfY21kX2Rlc2NyaXB0b3IgZGVmYXVsdF9kZXNjID0geyAw IH07Cj4gIAlib29sIG9hY29udHJvbF9zZXQgPSBmYWxzZTsgLyogT0FDT05UUk9MIHRyYWNraW5n LiBTZWUgY2hlY2tfY21kKCkgKi8KPiAtCWludCByZXQgPSAwOwo+ICsJaW50IHJldDsKPiAgCj4g LQliYXRjaF9iYXNlID0gY29weV9iYXRjaChzaGFkb3dfYmF0Y2hfb2JqLCBiYXRjaF9vYmosCj4g LQkJCQliYXRjaF9zdGFydF9vZmZzZXQsIGJhdGNoX2xlbik7Cj4gLQlpZiAoSVNfRVJSKGJhdGNo X2Jhc2UpKSB7Cj4gLQkJRFJNX0RFQlVHX0RSSVZFUigiQ01EOiBGYWlsZWQgdG8gY29weSBiYXRj aFxuIik7Cj4gLQkJcmV0dXJuIFBUUl9FUlIoYmF0Y2hfYmFzZSk7Cj4gKwlpZiAoV0FSTl9PTihz aGFkb3dfYmF0Y2hfb2JqLT5wYWdlc19waW5fY291bnQgPT0gMCkpCj4gKwkJcmV0dXJuIC1FTk9E RVY7Cj4gKwo+ICsJcmV0ID0gaTkxNV9nZW1fb2JqX3ByZXBhcmVfc2htZW1fcmVhZChiYXRjaF9v YmosICZuZWVkc19jbGZsdXNoKTsKPiArCWlmIChyZXQpIHsKPiArCQlEUk1fREVCVUdfRFJJVkVS KCJDTUQ6IGZhaWxlZCB0byBwcmVwYXJlIHNoYWRvdyBiYXRjaFxuIik7Cj4gKwkJcmV0dXJuIHJl dDsKPiAgCX0KPiAgCj4gLQkvKgo+IC0JICogV2UgdXNlIHRoZSBiYXRjaCBsZW5ndGggYXMgc2l6 ZSBiZWNhdXNlIHRoZSBzaGFkb3cgb2JqZWN0IGlzIGFzCj4gLQkgKiBsYXJnZSBvciBsYXJnZXIg YW5kIGNvcHlfYmF0Y2goKSB3aWxsIHdyaXRlIE1JX05PUHMgdG8gdGhlIGV4dHJhCj4gLQkgKiBz cGFjZS4gUGFyc2luZyBzaG91bGQgYmUgZmFzdGVyIGluIHNvbWUgY2FzZXMgdGhpcyB3YXkuCj4g KwlyZXQgPSBpOTE1X2dlbV9vYmplY3Rfc2V0X3RvX2NwdV9kb21haW4oc2hhZG93X2JhdGNoX29i aiwgdHJ1ZSk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJRFJNX0RFQlVHX0RSSVZFUigiQ01EOiBGYWls ZWQgdG8gc2V0IHNoYWRvdyBiYXRjaCB0byBDUFVcbiIpOwo+ICsJCWdvdG8gdW5waW47Cj4gKwl9 Cj4gKwo+ICsJdG1wID0ga21hbGxvYyhQQUdFX1NJWkUgKyBNQVhfUEFSVElBTCwgR0ZQX1RFTVBP UkFSWSk7Cj4gKwlpZiAodG1wID09IE5VTEwpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJ LyogS2VlcCB0aGUgb3JpZ2luYWwgY2FjaGVkIGl0ZXJhdG9yIGFyb3VuZCBhcyB0aGF0IGlzIGxp a2VseQo+ICsJICogdG8gYmUgbW9yZSB1c2VmdWwgaW4gZnV0dXJlIGlvY3Rscy4KPiAgCSAqLwo+ IC0JYmF0Y2hfZW5kID0gYmF0Y2hfYmFzZSArIChiYXRjaF9sZW4gLyBzaXplb2YoKmJhdGNoX2Vu ZCkpOwo+ICsJcmV3aW5kID0gYmF0Y2hfb2JqLT5nZXRfcGFnZTsKPiAgCj4gLQljbWQgPSBiYXRj aF9iYXNlOwo+IC0Jd2hpbGUgKGNtZCA8IGJhdGNoX2VuZCkgewo+IC0JCWNvbnN0IHN0cnVjdCBk cm1faTkxNV9jbWRfZGVzY3JpcHRvciAqZGVzYzsKPiAtCQl1MzIgbGVuZ3RoOwo+ICsJcmV0ID0g LUVJTlZBTDsKPiArCj4gKwlkc3RfaXRlciA9IDA7Cj4gKwlkc3QgPSBrbWFwX2F0b21pYyhpOTE1 X2dlbV9vYmplY3RfZ2V0X3BhZ2Uoc2hhZG93X2JhdGNoX29iaiwgZHN0X2l0ZXIpKTsKPiArCW91 dCA9IDA7Cj4gKwo+ICsJaW4gPSBvZmZzZXRfaW5fcGFnZShiYXRjaF9zdGFydF9vZmZzZXQpOwo+ ICsJcGFydGlhbCA9IDA7Cj4gKwlmb3IgKHNyY19pdGVyID0gYmF0Y2hfc3RhcnRfb2Zmc2V0ID4+ IFBBR0VfU0hJRlQ7Cj4gKwkgICAgIHNyY19pdGVyIDwgYmF0Y2hfb2JqLT5iYXNlLnNpemUgPj4g UEFHRV9TSElGVDsKPiArCSAgICAgc3JjX2l0ZXIrKykgewoKU28gd2UncmUgaXRlcmF0aW5nIG92 ZXIgYWxsIHRoZSBwYWdlcy4gU2hvdWxkIGJlIGVub3VnaCB0byBpdGVyYXRlCnVudGlsIGJhdGNo X3N0YXJ0X29mZnNldCtiYXRjaF9sZW4gSSBzdXBwb3NlLCBidXQgYXMgbG9uZyBhcyB3ZSBiYWls Cm91dCB3aGVuIHdlIHJ1biBvdXQgb2YgYmF0Y2ggaXQgc2hvdWxkIGJlIGZpbmUuCgpJIHNlZSB0 aGVyZSdzIGEgYmF0Y2hfbGVuIGNoZWNrIGF0IHRoZSBlbmQsIGJ1dCBJIGRvbid0IHNlZSB1cyBo YW5kbGluZwp0aGUgY2FzZSB3aGVuIHRoZSB1c2VyIGFscmVhZHkgZ2l2ZXMgdXMgc29tZXRoaW5n IHdpdGggYmF0Y2hfbGVuPT0wLgpNYXliZSB0aGF0IHNob3VsZCBiZSByZWplY3RlZCBzb21ld2hl cmUgaGlnaGVyIHVwPwoKQWxzbyB3aGF0IGhhcHBlbnMgaWYgd2UgZG9uJ3QgZmluZCBNSV9CQVRD SF9CVUZGRVJfRU5EIGJlZm9yZSBydW5uaW5nCm91dCBvZiBiYXRjaD8gT2gsIEkgc2VlLCB3ZSBz ZXQgcmV0PS1FSU5WQUwsIGFuZCBjbGVhciBpdCB0byAwIHdoZW4gd2UKZmluZCBNSV9CQVRDSF9C VUZGRVJfRU5ELiBTbyB0aGF0IHBhcnQgc2VlbXMgdG8gYmUgZmluZS4KCj4gKwkJdTMyICpjbWQs ICpwYWdlX2VuZCwgKmJhdGNoX2VuZDsKPiArCQl1MzIgdGhpczsKPiArCj4gKwkJdGhpcyA9IGJh dGNoX2xlbjsKCkkgd2FzIGEgYml0IGNvbmNlcm5lZCBhYm91dCBiYXRjaF9sZW4gJiAzLCBidXQg d2UgYWxyZWFkeSBjaGVjayBmb3IKYmF0Y2hfbGVuJjc9PTAgaW4gaTkxNV9nZW1fY2hlY2tfZXhl Y2J1ZmZlcigpLCBzbyBpdCBzaG91bGQgYmUgZ29vZCBoZXJlLgoKPiArCQlpZiAodGhpcyA+IFBB R0VfU0laRSAtIGluKQo+ICsJCQl0aGlzID0gUEFHRV9TSVpFIC0gaW47Cj4gIAo+IC0JCWlmICgq Y21kID09IE1JX0JBVENIX0JVRkZFUl9FTkQpCj4gKwkJc3JjID0ga21hcF9hdG9taWMoaTkxNV9n ZW1fb2JqZWN0X2dldF9wYWdlKGJhdGNoX29iaiwgc3JjX2l0ZXIpKTsKPiArCQlpZiAobmVlZHNf Y2xmbHVzaCkKPiArCQkJZHJtX2NsZmx1c2hfdmlydF9yYW5nZShzcmMgKyBpbiwgdGhpcyk7Cj4g Kwo+ICsJCWlmICh0aGlzID09IFBBR0VfU0laRSAmJiBwYXJ0aWFsID09IDApCj4gKwkJCWNvcHlf cGFnZSh0bXAsIHNyYyk7Cj4gKwkJZWxzZQo+ICsJCQltZW1jcHkodG1wK3BhcnRpYWwsIHNyYytp biwgdGhpcyk7Cj4gKwo+ICsJCWNtZCA9IHRtcDsKPiArCQlwYWdlX2VuZCA9IHRtcCArIHRoaXMg KyBwYXJ0aWFsOwo+ICsJCWJhdGNoX2VuZCA9IHRtcCArIGJhdGNoX2xlbiArIHBhcnRpYWw7Cj4g KwkJcGFydGlhbCA9IDA7Cj4gKwo+ICsJCWRvIHsKPiArCQkJaWYgKCpjbWQgPT0gTUlfQkFUQ0hf QlVGRkVSX0VORCkgewo+ICsJCQkJaWYgKG9hY29udHJvbF9zZXQpIHsKPiArCQkJCQlEUk1fREVC VUdfRFJJVkVSKCJDTUQ6IGJhdGNoIHNldCBPQUNPTlRST0wgYnV0IGRpZCBub3QgY2xlYXIgaXRc biIpOwo+ICsJCQkJCWdvdG8gdW5tYXA7Cj4gKwkJCQl9Cj4gKwo+ICsJCQkJY21kKys7IC8qIGNv cHkgdGhpcyBjbWQgdG8gZHN0ICovCj4gKwkJCQliYXRjaF9sZW4gPSB0aGlzOyAvKiBubyBtb3Jl IHNyYyAqLwo+ICsJCQkJcmV0ID0gMDsKPiAgCQkJCWJyZWFrOwo+ICsJCQl9Cj4gIAo+ICAJCQlk ZXNjID0gZmluZF9jbWQocmluZywgKmNtZCwgJmRlZmF1bHRfZGVzYyk7Cj4gIAkJCWlmICghZGVz Yykgewo+ICAJCQkJRFJNX0RFQlVHX0RSSVZFUigiQ01EOiBVbnJlY29nbml6ZWQgY29tbWFuZDog MHglMDhYXG4iLAo+ICAJCQkJCQkgKmNtZCk7Cj4gLQkJCXJldCA9IC1FSU5WQUw7Cj4gLQkJCWJy ZWFrOwo+ICsJCQkJZ290byB1bm1hcDsKPiAgCQkJfQo+ICAKPiAgCQkJLyoKPiBAQCAtMTE2Miw3 ICsxMTIxLDcgQEAgaW50IGk5MTVfcGFyc2VfY21kcyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpy aW5nLAo+ICAJCQkgKi8KPiAgCQkJaWYgKGRlc2MtPmNtZC52YWx1ZSA9PSBNSV9CQVRDSF9CVUZG RVJfU1RBUlQpIHsKPiAgCQkJCXJldCA9IC1FQUNDRVM7CgpCbGVoLiBJIHdvbmRlciB3aHkgd2Ug ZXZlbiBib3RoZXIgd2l0aCB0aGlzIHRoaW5nIG9uIFZMVi9JVkIgd2hlbgppdCdzIHRoYXQgZWFz eSB0byBieXBhc3MuLi4KCj4gLQkJCWJyZWFrOwo+ICsJCQkJZ290byB1bm1hcDsKPiAgCQkJfQo+ ICAKPiAgCQkJaWYgKGRlc2MtPmZsYWdzICYgQ01EX0RFU0NfRklYRUQpCj4gQEAgLTExNzAsMzYg KzExMjksNzMgQEAgaW50IGk5MTVfcGFyc2VfY21kcyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpy aW5nLAo+ICAJCQllbHNlCj4gIAkJCQlsZW5ndGggPSAoKCpjbWQgJiBkZXNjLT5sZW5ndGgubWFz aykgKyBMRU5HVEhfQklBUyk7Cj4gIAo+IC0JCWlmICgoYmF0Y2hfZW5kIC0gY21kKSA8IGxlbmd0 aCkgewo+ICsJCQlpZiAodW5saWtlbHkoY21kICsgbGVuZ3RoID4gcGFnZV9lbmQpKSB7Cj4gKwkJ CQlpZiAodW5saWtlbHkoY21kICsgbGVuZ3RoID4gYmF0Y2hfZW5kKSkgewo+ICAJCQkJCURSTV9E RUJVR19EUklWRVIoIkNNRDogQ29tbWFuZCBsZW5ndGggZXhjZWVkcyBiYXRjaCBsZW5ndGg6IDB4 JTA4WCBsZW5ndGg9JXUgYmF0Y2hsZW49JXRkXG4iLAo+IC0JCQkJCSAqY21kLAo+IC0JCQkJCSBs ZW5ndGgsCj4gLQkJCQkJIGJhdGNoX2VuZCAtIGNtZCk7Cj4gLQkJCXJldCA9IC1FSU5WQUw7Cj4g LQkJCWJyZWFrOwo+ICsJCQkJCQkJICpjbWQsIGxlbmd0aCwgYmF0Y2hfZW5kIC0gY21kKTsKPiAr CQkJCQlnb3RvIHVubWFwOwo+ICAJCQkJfQo+ICAKPiAtCQlpZiAoIWNoZWNrX2NtZChyaW5nLCBk ZXNjLCBjbWQsIGxlbmd0aCwgaXNfbWFzdGVyLAo+IC0JCQkgICAgICAgJm9hY29udHJvbF9zZXQp KSB7Cj4gLQkJCXJldCA9IC1FSU5WQUw7Cj4gKwkJCQlpZiAoV0FSTl9PTihsZW5ndGggPiBNQVhf UEFSVElBTCkpIHsKPiArCQkJCQlyZXQgPSAtRU5PREVWOwo+ICsJCQkJCWdvdG8gdW5tYXA7Cj4g KwkJCQl9Cj4gKwo+ICsJCQkJcGFydGlhbCA9IDQqKHBhZ2VfZW5kIC0gY21kKTsKPiAgCQkJCWJy ZWFrOwo+ICAJCQl9Cj4gIAo+ICsJCQlpZiAoIWNoZWNrX2NtZChyaW5nLCBkZXNjLCBjbWQsIGxl bmd0aCwgaXNfbWFzdGVyLAo+ICsJCQkJICAgICAgICZvYWNvbnRyb2xfc2V0KSkKPiArCQkJCWdv dG8gdW5tYXA7Cj4gKwo+ICAJCQljbWQgKz0gbGVuZ3RoOwo+IC0JfQo+ICsJCX0gd2hpbGUgKGNt ZCA8IHBhZ2VfZW5kKTsKPiAgCj4gLQlpZiAob2Fjb250cm9sX3NldCkgewo+IC0JCURSTV9ERUJV R19EUklWRVIoIkNNRDogYmF0Y2ggc2V0IE9BQ09OVFJPTCBidXQgZGlkIG5vdCBjbGVhciBpdFxu Iik7Cj4gLQkJcmV0ID0gLUVJTlZBTDsKPiArCQkvKiBDb3B5IHRoZSB2YWxpZGF0ZWQgcGFnZSB0 byB0aGUgR1BVIGJhdGNoICovCj4gKwkJewo+ICsJCQkvKiBleGNsdWRlIHBhcnRpYWwgY21kLCB3 ZSBjb3B5IGl0IG5leHQgdGltZSAqLwo+ICsJCQl1bnNpZ25lZCBkc3RfbGVuZ3RoID0gKHZvaWQg KiljbWQgLSB0bXA7Cj4gKwkJCWluID0gMDsKPiArCQkJZG8gewo+ICsJCQkJaW50IGxlbjsKPiAr Cj4gKwkJCQlpZiAob3V0ID09IFBBR0VfU0laRSkgewo+ICsJCQkJCWt1bm1hcF9hdG9taWMoZHN0 KTsKPiArCQkJCQlkc3QgPSBrbWFwX2F0b21pYyhpOTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2Uoc2hh ZG93X2JhdGNoX29iaiwgKytkc3RfaXRlcikpOwo+ICsJCQkJCW91dCA9IDA7Cj4gIAkJCQl9Cj4g IAo+IC0JaWYgKGNtZCA+PSBiYXRjaF9lbmQpIHsKPiAtCQlEUk1fREVCVUdfRFJJVkVSKCJDTUQ6 IEdvdCB0byB0aGUgZW5kIG9mIHRoZSBidWZmZXIgdy9vIGEgQkJFIGNtZCFcbiIpOwo+IC0JCXJl dCA9IC1FSU5WQUw7Cj4gKwkJCQlsZW4gPSBkc3RfbGVuZ3RoOwo+ICsJCQkJaWYgKGxlbiArIG91 dCA+IFBBR0VfU0laRSkKPiArCQkJCQlsZW4gPSBQQUdFX1NJWkUgLSBvdXQ7Cj4gKwkJCQlpZiAo bGVuID09IFBBR0VfU0laRSkKPiArCQkJCQljb3B5X3BhZ2UoZHN0LCB0bXAgKyBpbik7Cj4gKwkJ CQllbHNlCj4gKwkJCQkJbWVtY3B5KGRzdCArIG91dCwgdG1wICsgaW4sIGxlbik7Cj4gKwkJCQlp biArPSBsZW47Cj4gKwkJCQlvdXQgKz0gbGVuOwo+ICsJCQkJZHN0X2xlbmd0aCAtPSBsZW47Cj4g KwkJCX0gd2hpbGUgKGRzdF9sZW5ndGgpOwo+ICAJCX0KPiAgCj4gLQl2dW5tYXAoYmF0Y2hfYmFz ZSk7Cj4gKwkJYmF0Y2hfbGVuIC09IHRoaXM7Cj4gKwkJaWYgKGJhdGNoX2xlbiA9PSAwKQo+ICsJ CQlicmVhazsKPiAgCj4gKwkJaWYgKHBhcnRpYWwpCj4gKwkJCW1lbW1vdmUodG1wLCBjbWQsIHBh cnRpYWwpOwo+ICsKPiArCQlrdW5tYXBfYXRvbWljKHNyYyk7Cj4gKwkJaW4gPSAwOwo+ICsJfQo+ ICt1bm1hcDoKPiArCWt1bm1hcF9hdG9taWMoc3JjKTsKPiArCWt1bm1hcF9hdG9taWMoZHN0KTsK PiArCWJhdGNoX29iai0+Z2V0X3BhZ2UgPSByZXdpbmQ7Cj4gKwlrZnJlZSh0bXApOwo+ICt1bnBp bjoKPiArCWk5MTVfZ2VtX29iamVjdF91bnBpbl9wYWdlcyhiYXRjaF9vYmopOwo+ICAJcmV0dXJu IHJldDsKPiAgfQo+ICAKPiAtLSAKPiAyLjYuMgoKLS0gClZpbGxlIFN5cmrDpGzDpApJbnRlbCBP VEMKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwt Z2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9s aXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK