From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH 1/6] drm/i915: Eliminate vmap overhead for cmd parser Date: Thu, 1 Oct 2015 15:37:21 +0300 Message-ID: <20151001123721.GH26517@intel.com> References: <1443700635-4849-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 mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTP id 316126E1E5 for ; Thu, 1 Oct 2015 05:37:25 -0700 (PDT) Content-Disposition: inline In-Reply-To: <1443700635-4849-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 T24gVGh1LCBPY3QgMDEsIDIwMTUgYXQgMTI6NTc6MTBQTSArMDEwMCwgQ2hyaXMgV2lsc29uIHdy 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 ZyBzZXQgYXQgZW5kLW9mLWJhdGNoCj4gCj4gU2lnbmVkLW9mZi1ieTogQ2hyaXMgV2lsc29uIDxj aHJpc0BjaHJpcy13aWxzb24uY28udWs+Cj4gLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfY21kX3BhcnNlci5jIHwgMjk4ICsrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLQo+ ICAxIGZpbGUgY2hhbmdlZCwgMTQ2IGluc2VydGlvbnMoKyksIDE1MiBkZWxldGlvbnMoLSkKPiAK PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9jbWRfcGFyc2VyLmMgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2NtZF9wYXJzZXIuYwo+IGluZGV4IDIzN2ZmNjg4NGEy Mi4uOTFlNGJhYTBmMmI4IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf Y21kX3BhcnNlci5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9jbWRfcGFyc2Vy LmMKPiBAQCAtODUyLDEwMCArODUyLDYgQEAgZmluZF9yZWcoY29uc3Qgc3RydWN0IGRybV9pOTE1 X3JlZ19kZXNjcmlwdG9yICp0YWJsZSwKPiAgCXJldHVybiBOVUxMOwo+ICB9Cj4gIAo+IC1zdGF0 aWMgdTMyICp2bWFwX2JhdGNoKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4gLQkJ ICAgICAgIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW4pCj4gLXsKPiAtCWludCBpOwo+IC0J dm9pZCAqYWRkciA9IE5VTEw7Cj4gLQlzdHJ1Y3Qgc2dfcGFnZV9pdGVyIHNnX2l0ZXI7Cj4gLQlp bnQgZmlyc3RfcGFnZSA9IHN0YXJ0ID4+IFBBR0VfU0hJRlQ7Cj4gLQlpbnQgbGFzdF9wYWdlID0g KGxlbiArIHN0YXJ0ICsgNDA5NSkgPj4gUEFHRV9TSElGVDsKPiAtCWludCBucGFnZXMgPSBsYXN0 X3BhZ2UgLSBmaXJzdF9wYWdlOwo+IC0Jc3RydWN0IHBhZ2UgKipwYWdlczsKPiAtCj4gLQlwYWdl cyA9IGRybV9tYWxsb2NfYWIobnBhZ2VzLCBzaXplb2YoKnBhZ2VzKSk7Cj4gLQlpZiAocGFnZXMg PT0gTlVMTCkgewo+IC0JCURSTV9ERUJVR19EUklWRVIoIkZhaWxlZCB0byBnZXQgc3BhY2UgZm9y IHBhZ2VzXG4iKTsKPiAtCQlnb3RvIGZpbmlzaDsKPiAtCX0KPiAtCj4gLQlpID0gMDsKPiAtCWZv cl9lYWNoX3NnX3BhZ2Uob2JqLT5wYWdlcy0+c2dsLCAmc2dfaXRlciwgb2JqLT5wYWdlcy0+bmVu dHMsIGZpcnN0X3BhZ2UpIHsKPiAtCQlwYWdlc1tpKytdID0gc2dfcGFnZV9pdGVyX3BhZ2UoJnNn X2l0ZXIpOwo+IC0JCWlmIChpID09IG5wYWdlcykKPiAtCQkJYnJlYWs7Cj4gLQl9Cj4gLQo+IC0J YWRkciA9IHZtYXAocGFnZXMsIGksIDAsIFBBR0VfS0VSTkVMKTsKPiAtCWlmIChhZGRyID09IE5V TEwpIHsKPiAtCQlEUk1fREVCVUdfRFJJVkVSKCJGYWlsZWQgdG8gdm1hcCBwYWdlc1xuIik7Cj4g LQkJZ290byBmaW5pc2g7Cj4gLQl9Cj4gLQo+IC1maW5pc2g6Cj4gLQlpZiAocGFnZXMpCj4gLQkJ ZHJtX2ZyZWVfbGFyZ2UocGFnZXMpOwo+IC0JcmV0dXJuICh1MzIqKWFkZHI7Cj4gLX0KPiAtCj4g LS8qIFJldHVybnMgYSB2bWFwJ2QgcG9pbnRlciB0byBkZXN0X29iaiwgd2hpY2ggdGhlIGNhbGxl ciBtdXN0IHVubWFwICovCj4gLXN0YXRpYyB1MzIgKmNvcHlfYmF0Y2goc3RydWN0IGRybV9pOTE1 X2dlbV9vYmplY3QgKmRlc3Rfb2JqLAo+IC0JCSAgICAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29i amVjdCAqc3JjX29iaiwKPiAtCQkgICAgICAgdTMyIGJhdGNoX3N0YXJ0X29mZnNldCwKPiAtCQkg ICAgICAgdTMyIGJhdGNoX2xlbikKPiAtewo+IC0JaW50IG5lZWRzX2NsZmx1c2ggPSAwOwo+IC0J dm9pZCAqc3JjX2Jhc2UsICpzcmM7Cj4gLQl2b2lkICpkc3QgPSBOVUxMOwo+IC0JaW50IHJldDsK PiAtCj4gLQlpZiAoYmF0Y2hfbGVuID4gZGVzdF9vYmotPmJhc2Uuc2l6ZSB8fAo+IC0JICAgIGJh dGNoX2xlbiArIGJhdGNoX3N0YXJ0X29mZnNldCA+IHNyY19vYmotPmJhc2Uuc2l6ZSkKPiAtCQly ZXR1cm4gRVJSX1BUUigtRTJCSUcpOwo+IC0KPiAtCWlmIChXQVJOX09OKGRlc3Rfb2JqLT5wYWdl c19waW5fY291bnQgPT0gMCkpCj4gLQkJcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7Cj4gLQo+IC0J cmV0ID0gaTkxNV9nZW1fb2JqX3ByZXBhcmVfc2htZW1fcmVhZChzcmNfb2JqLCAmbmVlZHNfY2xm bHVzaCk7Cj4gLQlpZiAocmV0KSB7Cj4gLQkJRFJNX0RFQlVHX0RSSVZFUigiQ01EOiBmYWlsZWQg dG8gcHJlcGFyZSBzaGFkb3cgYmF0Y2hcbiIpOwo+IC0JCXJldHVybiBFUlJfUFRSKHJldCk7Cj4g LQl9Cj4gLQo+IC0Jc3JjX2Jhc2UgPSB2bWFwX2JhdGNoKHNyY19vYmosIGJhdGNoX3N0YXJ0X29m ZnNldCwgYmF0Y2hfbGVuKTsKPiAtCWlmICghc3JjX2Jhc2UpIHsKPiAtCQlEUk1fREVCVUdfRFJJ VkVSKCJDTUQ6IEZhaWxlZCB0byB2bWFwIGJhdGNoXG4iKTsKPiAtCQlyZXQgPSAtRU5PTUVNOwo+ IC0JCWdvdG8gdW5waW5fc3JjOwo+IC0JfQo+IC0KPiAtCXJldCA9IGk5MTVfZ2VtX29iamVjdF9z ZXRfdG9fY3B1X2RvbWFpbihkZXN0X29iaiwgdHJ1ZSk7Cj4gLQlpZiAocmV0KSB7Cj4gLQkJRFJN X0RFQlVHX0RSSVZFUigiQ01EOiBGYWlsZWQgdG8gc2V0IHNoYWRvdyBiYXRjaCB0byBDUFVcbiIp Owo+IC0JCWdvdG8gdW5tYXBfc3JjOwo+IC0JfQo+IC0KPiAtCWRzdCA9IHZtYXBfYmF0Y2goZGVz dF9vYmosIDAsIGJhdGNoX2xlbik7Cj4gLQlpZiAoIWRzdCkgewo+IC0JCURSTV9ERUJVR19EUklW RVIoIkNNRDogRmFpbGVkIHRvIHZtYXAgc2hhZG93IGJhdGNoXG4iKTsKPiAtCQlyZXQgPSAtRU5P TUVNOwo+IC0JCWdvdG8gdW5tYXBfc3JjOwo+IC0JfQo+IC0KPiAtCXNyYyA9IHNyY19iYXNlICsg b2Zmc2V0X2luX3BhZ2UoYmF0Y2hfc3RhcnRfb2Zmc2V0KTsKPiAtCWlmIChuZWVkc19jbGZsdXNo KQo+IC0JCWRybV9jbGZsdXNoX3ZpcnRfcmFuZ2Uoc3JjLCBiYXRjaF9sZW4pOwo+IC0KPiAtCW1l bWNweShkc3QsIHNyYywgYmF0Y2hfbGVuKTsKPiAtCj4gLXVubWFwX3NyYzoKPiAtCXZ1bm1hcChz cmNfYmFzZSk7Cj4gLXVucGluX3NyYzoKPiAtCWk5MTVfZ2VtX29iamVjdF91bnBpbl9wYWdlcyhz cmNfb2JqKTsKPiAtCj4gLQlyZXR1cm4gcmV0ID8gRVJSX1BUUihyZXQpIDogZHN0Owo+IC19Cj4g LQo+ICAvKioKPiAgICogaTkxNV9uZWVkc19jbWRfcGFyc2VyKCkgLSBzaG91bGQgYSBnaXZlbiBy aW5nIHVzZSBzb2Z0d2FyZSBjb21tYW5kIHBhcnNpbmc/Cj4gICAqIEByaW5nOiB0aGUgcmluZyBp biBxdWVzdGlvbgo+IEBAIC0xMTEyLDE2ICsxMDE4LDM1IEBAIGludCBpOTE1X3BhcnNlX2NtZHMo c3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZywKPiAgCQkgICAgdTMyIGJhdGNoX2xlbiwKPiAg CQkgICAgYm9vbCBpc19tYXN0ZXIpCj4gIHsKPiAtCXUzMiAqY21kLCAqYmF0Y2hfYmFzZSwgKmJh dGNoX2VuZDsKPiArCXUzMiB0bXBbMTI4XTsKPiArCWNvbnN0IHN0cnVjdCBkcm1faTkxNV9jbWRf ZGVzY3JpcHRvciAqZGVzYzsKPiArCXVuc2lnbmVkIGRzdF9pdGVyLCBzcmNfaXRlcjsKPiArCWlu dCBuZWVkc19jbGZsdXNoID0gMDsKPiArCXN0cnVjdCBnZXRfcGFnZSByZXdpbmQ7Cj4gKwl2b2lk ICpzcmMsICpkc3Q7Cj4gKwl1bnNpZ25lZCBpbiwgb3V0Owo+ICsJdTMyICpidWYsIHBhcnRpYWwg PSAwLCBsZW5ndGg7Cj4gIAlzdHJ1Y3QgZHJtX2k5MTVfY21kX2Rlc2NyaXB0b3IgZGVmYXVsdF9k ZXNjID0geyAwIH07Cj4gIAlib29sIG9hY29udHJvbF9zZXQgPSBmYWxzZTsgLyogT0FDT05UUk9M IHRyYWNraW5nLiBTZWUgY2hlY2tfY21kKCkgKi8KPiAgCWludCByZXQgPSAwOwo+ICAKPiAtCWJh dGNoX2Jhc2UgPSBjb3B5X2JhdGNoKHNoYWRvd19iYXRjaF9vYmosIGJhdGNoX29iaiwKPiAtCQkJ CWJhdGNoX3N0YXJ0X29mZnNldCwgYmF0Y2hfbGVuKTsKPiAtCWlmIChJU19FUlIoYmF0Y2hfYmFz ZSkpIHsKPiAtCQlEUk1fREVCVUdfRFJJVkVSKCJDTUQ6IEZhaWxlZCB0byBjb3B5IGJhdGNoXG4i KTsKPiAtCQlyZXR1cm4gUFRSX0VSUihiYXRjaF9iYXNlKTsKPiArCWlmIChiYXRjaF9sZW4gPiBz aGFkb3dfYmF0Y2hfb2JqLT5iYXNlLnNpemUgfHwKPiArCSAgICBiYXRjaF9sZW4gKyBiYXRjaF9z dGFydF9vZmZzZXQgPiBiYXRjaF9vYmotPmJhc2Uuc2l6ZSkKPiArCQlyZXR1cm4gLUUyQklHOwo+ ICsKPiArCWlmIChXQVJOX09OKHNoYWRvd19iYXRjaF9vYmotPnBhZ2VzX3Bpbl9jb3VudCA9PSAw KSkKPiArCQlyZXR1cm4gLUVOT0RFVjsKPiArCj4gKwlyZXQgPSBpOTE1X2dlbV9vYmpfcHJlcGFy ZV9zaG1lbV9yZWFkKGJhdGNoX29iaiwgJm5lZWRzX2NsZmx1c2gpOwo+ICsJaWYgKHJldCkgewo+ ICsJCURSTV9ERUJVR19EUklWRVIoIkNNRDogZmFpbGVkIHRvIHByZXBhcmUgc2hhZG93IGJhdGNo XG4iKTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCXJldCA9IGk5MTVfZ2VtX29iamVj dF9zZXRfdG9fY3B1X2RvbWFpbihzaGFkb3dfYmF0Y2hfb2JqLCB0cnVlKTsKPiArCWlmIChyZXQp IHsKPiArCQlEUk1fREVCVUdfRFJJVkVSKCJDTUQ6IEZhaWxlZCB0byBzZXQgc2hhZG93IGJhdGNo IHRvIENQVVxuIik7Cj4gKwkJZ290byB1bnBpbjsKPiAgCX0KPiAgCj4gIAkvKgo+IEBAIC0xMTI5 LDY5ICsxMDU0LDEzOCBAQCBpbnQgaTkxNV9wYXJzZV9jbWRzKHN0cnVjdCBpbnRlbF9lbmdpbmVf Y3MgKnJpbmcsCj4gIAkgKiBsYXJnZSBvciBsYXJnZXIgYW5kIGNvcHlfYmF0Y2goKSB3aWxsIHdy aXRlIE1JX05PUHMgdG8gdGhlIGV4dHJhCj4gIAkgKiBzcGFjZS4gUGFyc2luZyBzaG91bGQgYmUg ZmFzdGVyIGluIHNvbWUgY2FzZXMgdGhpcyB3YXkuCj4gIAkgKi8KPiAtCWJhdGNoX2VuZCA9IGJh dGNoX2Jhc2UgKyAoYmF0Y2hfbGVuIC8gc2l6ZW9mKCpiYXRjaF9lbmQpKTsKPiArCXJldCA9IC1F SU5WQUw7Cj4gKwlyZXdpbmQgPSBiYXRjaF9vYmotPmdldF9wYWdlOwo+ICsKPiArCWRzdF9pdGVy ID0gMDsKPiArCWRzdCA9IGttYXBfYXRvbWljKGk5MTVfZ2VtX29iamVjdF9nZXRfcGFnZShzaGFk b3dfYmF0Y2hfb2JqLCBkc3RfaXRlcikpOwo+ICsKPiArCWluID0gb2Zmc2V0X2luX3BhZ2UoYmF0 Y2hfc3RhcnRfb2Zmc2V0KTsKPiArCW91dCA9IDA7Cj4gKwlmb3IgKHNyY19pdGVyID0gYmF0Y2hf c3RhcnRfb2Zmc2V0ID4+IFBBR0VfU0hJRlQ7Cj4gKwkgICAgIHNyY19pdGVyIDwgYmF0Y2hfb2Jq LT5iYXNlLnNpemUgPj4gUEFHRV9TSElGVDsKPiArCSAgICAgc3JjX2l0ZXIrKykgewo+ICsJCXUz MiB0aGlzLCBpLCBqLCBrOwo+ICsJCXUzMiAqY21kLCAqcGFnZV9lbmQsICpiYXRjaF9lbmQ7Cj4g Kwo+ICsJCXRoaXMgPSBiYXRjaF9sZW47Cj4gKwkJaWYgKHRoaXMgPiBQQUdFX1NJWkUgLSBpbikK PiArCQkJdGhpcyA9IFBBR0VfU0laRSAtIGluOwo+ICsKPiArCQlzcmMgPSBrbWFwX2F0b21pYyhp OTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2UoYmF0Y2hfb2JqLCBzcmNfaXRlcikpOwo+ICsJCWlmIChu ZWVkc19jbGZsdXNoKQo+ICsJCQlkcm1fY2xmbHVzaF92aXJ0X3JhbmdlKHNyYyArIGluLCB0aGlz KTsKPiArCj4gKwkJaSA9IHRoaXM7Cj4gKwkJaiA9IGluOwo+ICsJCWRvIHsKPiArCQkJLyogV2Ug a2VlcCBkc3QgYXJvdW5kIHNvIHRoYXQgd2UgZG8gbm90IGJsb3cKPiArCQkJICogdGhlIENQVSBj YWNoZXMgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGNvcHkgKGR1ZQo+ICsJCQkgKiB0byB0aGUga3Vu bWFwX2F0b21pYyhkc3QpIGRvaW5nIGEgVExCIGZsdXNoLgo+ICsJCQkgKi8KPiArCQkJaWYgKG91 dCA9PSBQQUdFX1NJWkUpIHsKPiArCQkJCWt1bm1hcF9hdG9taWMoZHN0KTsKPiArCQkJCWRzdCA9 IGttYXBfYXRvbWljKGk5MTVfZ2VtX29iamVjdF9nZXRfcGFnZShzaGFkb3dfYmF0Y2hfb2JqLCAr K2RzdF9pdGVyKSk7Cj4gKwkJCQlvdXQgPSAwOwo+ICsJCQl9Cj4gIAo+IC0JY21kID0gYmF0Y2hf YmFzZTsKPiAtCXdoaWxlIChjbWQgPCBiYXRjaF9lbmQpIHsKPiAtCQljb25zdCBzdHJ1Y3QgZHJt X2k5MTVfY21kX2Rlc2NyaXB0b3IgKmRlc2M7Cj4gLQkJdTMyIGxlbmd0aDsKPiArCQkJayA9IGk7 Cj4gKwkJCWlmIChrID4gUEFHRV9TSVpFIC0gb3V0KQo+ICsJCQkJayA9IFBBR0VfU0laRSAtIG91 dDsKPiArCQkJaWYgKGsgPT0gUEFHRV9TSVpFKQo+ICsJCQkJY29weV9wYWdlKGRzdCwgc3JjKTsK PiArCQkJZWxzZQo+ICsJCQkJbWVtY3B5KGRzdCArIG91dCwgc3JjICsgaiwgayk7Cj4gKwo+ICsJ CQlvdXQgKz0gazsKPiArCQkJaiArPSBrOwo+ICsJCQlpIC09IGs7Cj4gKwkJfSB3aGlsZSAoaSk7 Cj4gKwo+ICsJCWNtZCA9IHNyYyArIGluOwoKU28geW91J3JlIG5vdyBjaGVja2luZyB0aGUgc3Jj IGJhdGNoPyBXaGF0IHByZXZlbnRzIHVzZXJzcGFjZSBmcm9tCm92ZXJ3cml0aW5nIGl0IHdpdGgg ZWcuIE5PUFMgYmV0d2VlbiB0aGUgdGltZSB5b3UgY29waWVkIGl0IGFuZCB0aGUKdGltZSB5b3Ug Y2hlY2sgaXQ/Cgo+ICsJCXBhZ2VfZW5kID0gKHZvaWQgKiljbWQgKyB0aGlzOwo+ICsJCWJhdGNo X2VuZCA9ICh2b2lkICopY21kICsgYmF0Y2hfbGVuOwo+ICsKPiArCQlpZiAocGFydGlhbCkgewo+ ICsJCQltZW1jcHkodG1wICsgcGFydGlhbCwgY21kLCAobGVuZ3RoIC0gcGFydGlhbCkqNCk7Cj4g KwkJCWNtZCAtPSBwYXJ0aWFsOwo+ICsJCQlwYXJ0aWFsID0gMDsKPiArCQkJYnVmID0gdG1wOwo+ ICsJCQlnb3RvIGNoZWNrOwo+ICsJCX0KPiAgCj4gLQkJaWYgKCpjbWQgPT0gTUlfQkFUQ0hfQlVG RkVSX0VORCkKPiAtCQkJYnJlYWs7Cj4gKwkJZG8gewo+ICsJCQlpZiAoKmNtZCA9PSBNSV9CQVRD SF9CVUZGRVJfRU5EKSB7Cj4gKwkJCQlpZiAob2Fjb250cm9sX3NldCkgewo+ICsJCQkJCURSTV9E RUJVR19EUklWRVIoIkNNRDogYmF0Y2ggc2V0IE9BQ09OVFJPTCBidXQgZGlkIG5vdCBjbGVhciBp dFxuIik7Cj4gKwkJCQkJcmV0ID0gLUVJTlZBTDsKPiArCQkJCX0gZWxzZQo+ICsJCQkJCXJldCA9 IDA7Cj4gKwkJCQlnb3RvIHVubWFwOwo+ICsJCQl9Cj4gIAo+IC0JCWRlc2MgPSBmaW5kX2NtZChy aW5nLCAqY21kLCAmZGVmYXVsdF9kZXNjKTsKPiAtCQlpZiAoIWRlc2MpIHsKPiAtCQkJRFJNX0RF QlVHX0RSSVZFUigiQ01EOiBVbnJlY29nbml6ZWQgY29tbWFuZDogMHglMDhYXG4iLAo+IC0JCQkJ CSAqY21kKTsKPiAtCQkJcmV0ID0gLUVJTlZBTDsKPiAtCQkJYnJlYWs7Cj4gLQkJfQo+ICsJCQlk ZXNjID0gZmluZF9jbWQocmluZywgKmNtZCwgJmRlZmF1bHRfZGVzYyk7Cj4gKwkJCWlmICghZGVz Yykgewo+ICsJCQkJRFJNX0RFQlVHX0RSSVZFUigiQ01EOiBVbnJlY29nbml6ZWQgY29tbWFuZDog MHglMDhYXG4iLAo+ICsJCQkJCQkgKmNtZCk7Cj4gKwkJCQlnb3RvIHVubWFwOwo+ICsJCQl9Cj4g IAo+IC0JCS8qCj4gLQkJICogSWYgdGhlIGJhdGNoIGJ1ZmZlciBjb250YWlucyBhIGNoYWluZWQg YmF0Y2gsIHJldHVybiBhbgo+IC0JCSAqIGVycm9yIHRoYXQgdGVsbHMgdGhlIGNhbGxlciB0byBh Ym9ydCBhbmQgZGlzcGF0Y2ggdGhlCj4gLQkJICogd29ya2xvYWQgYXMgYSBub24tc2VjdXJlIGJh dGNoLgo+IC0JCSAqLwo+IC0JCWlmIChkZXNjLT5jbWQudmFsdWUgPT0gTUlfQkFUQ0hfQlVGRkVS X1NUQVJUKSB7Cj4gLQkJCXJldCA9IC1FQUNDRVM7Cj4gLQkJCWJyZWFrOwo+IC0JCX0KPiArCQkJ LyoKPiArCQkJICogSWYgdGhlIGJhdGNoIGJ1ZmZlciBjb250YWlucyBhIGNoYWluZWQgYmF0Y2gs IHJldHVybiBhbgo+ICsJCQkgKiBlcnJvciB0aGF0IHRlbGxzIHRoZSBjYWxsZXIgdG8gYWJvcnQg YW5kIGRpc3BhdGNoIHRoZQo+ICsJCQkgKiB3b3JrbG9hZCBhcyBhIG5vbi1zZWN1cmUgYmF0Y2gu Cj4gKwkJCSAqLwo+ICsJCQlpZiAoZGVzYy0+Y21kLnZhbHVlID09IE1JX0JBVENIX0JVRkZFUl9T VEFSVCkgewo+ICsJCQkJcmV0ID0gLUVBQ0NFUzsKPiArCQkJCWdvdG8gdW5tYXA7Cj4gKwkJCX0K PiAgCj4gLQkJaWYgKGRlc2MtPmZsYWdzICYgQ01EX0RFU0NfRklYRUQpCj4gLQkJCWxlbmd0aCA9 IGRlc2MtPmxlbmd0aC5maXhlZDsKPiAtCQllbHNlCj4gLQkJCWxlbmd0aCA9ICgoKmNtZCAmIGRl c2MtPmxlbmd0aC5tYXNrKSArIExFTkdUSF9CSUFTKTsKPiAtCj4gLQkJaWYgKChiYXRjaF9lbmQg LSBjbWQpIDwgbGVuZ3RoKSB7Cj4gLQkJCURSTV9ERUJVR19EUklWRVIoIkNNRDogQ29tbWFuZCBs ZW5ndGggZXhjZWVkcyBiYXRjaCBsZW5ndGg6IDB4JTA4WCBsZW5ndGg9JXUgYmF0Y2hsZW49JXRk XG4iLAo+IC0JCQkJCSAqY21kLAo+IC0JCQkJCSBsZW5ndGgsCj4gLQkJCQkJIGJhdGNoX2VuZCAt IGNtZCk7Cj4gLQkJCXJldCA9IC1FSU5WQUw7Cj4gLQkJCWJyZWFrOwo+IC0JCX0KPiArCQkJaWYg KGRlc2MtPmZsYWdzICYgQ01EX0RFU0NfRklYRUQpCj4gKwkJCQlsZW5ndGggPSBkZXNjLT5sZW5n dGguZml4ZWQ7Cj4gKwkJCWVsc2UKPiArCQkJCWxlbmd0aCA9ICgoKmNtZCAmIGRlc2MtPmxlbmd0 aC5tYXNrKSArIExFTkdUSF9CSUFTKTsKPiAgCj4gLQkJaWYgKCFjaGVja19jbWQocmluZywgZGVz YywgY21kLCBsZW5ndGgsIGlzX21hc3RlciwKPiAtCQkJICAgICAgICZvYWNvbnRyb2xfc2V0KSkg ewo+IC0JCQlyZXQgPSAtRUlOVkFMOwo+IC0JCQlicmVhazsKPiAtCQl9Cj4gKwkJCWlmIChjbWQg KyBsZW5ndGggPiBwYWdlX2VuZCkgewo+ICsJCQkJaWYgKGxlbmd0aCArIGNtZCA+IGJhdGNoX2Vu ZCkgewo+ICsJCQkJCURSTV9ERUJVR19EUklWRVIoIkNNRDogQ29tbWFuZCBsZW5ndGggZXhjZWVk cyBiYXRjaCBsZW5ndGg6IDB4JTA4WCBsZW5ndGg9JXUgYmF0Y2hsZW49JXRkXG4iLAo+ICsJCQkJ CQkJICpjbWQsIGxlbmd0aCwgYmF0Y2hfZW5kIC0gY21kKTsKPiArCQkJCQlnb3RvIHVubWFwOwo+ ICsJCQkJfQo+ICAKPiAtCQljbWQgKz0gbGVuZ3RoOwo+IC0JfQo+ICsJCQkJaWYgKFdBUk5fT04o bGVuZ3RoID4gc2l6ZW9mKHRtcCkvNCkpIHsKPiArCQkJCQlyZXQgPSAtRU5PREVWOwo+ICsJCQkJ CWdvdG8gdW5tYXA7Cj4gKwkJCQl9Cj4gIAo+IC0JaWYgKG9hY29udHJvbF9zZXQpIHsKPiAtCQlE Uk1fREVCVUdfRFJJVkVSKCJDTUQ6IGJhdGNoIHNldCBPQUNPTlRST0wgYnV0IGRpZCBub3QgY2xl YXIgaXRcbiIpOwo+IC0JCXJldCA9IC1FSU5WQUw7Cj4gLQl9Cj4gKwkJCQlwYXJ0aWFsID0gcGFn ZV9lbmQgLSBjbWQ7Cj4gKwkJCQltZW1jcHkodG1wLCBjbWQsIHBhcnRpYWwqNCk7Cj4gKwkJCQli cmVhazsKPiArCQkJfQo+ICAKPiAtCWlmIChjbWQgPj0gYmF0Y2hfZW5kKSB7Cj4gLQkJRFJNX0RF QlVHX0RSSVZFUigiQ01EOiBHb3QgdG8gdGhlIGVuZCBvZiB0aGUgYnVmZmVyIHcvbyBhIEJCRSBj bWQhXG4iKTsKPiAtCQlyZXQgPSAtRUlOVkFMOwo+IC0JfQo+ICsJCQlidWYgPSBjbWQ7Cj4gK2No ZWNrOgo+ICsJCQlpZiAoIWNoZWNrX2NtZChyaW5nLCBkZXNjLCBidWYsIGxlbmd0aCwgaXNfbWFz dGVyLAo+ICsJCQkJICAgICAgICZvYWNvbnRyb2xfc2V0KSkKPiArCQkJCWdvdG8gdW5tYXA7Cj4g IAo+IC0JdnVubWFwKGJhdGNoX2Jhc2UpOwo+ICsJCQljbWQgKz0gbGVuZ3RoOwo+ICsJCX0gd2hp bGUgKGNtZCA8IHBhZ2VfZW5kKTsKPiArCj4gKwkJYmF0Y2hfbGVuIC09IHRoaXM7Cj4gKwkJaWYg KGJhdGNoX2xlbiA9PSAwKQo+ICsJCQlicmVhazsKPiArCj4gKwkJa3VubWFwX2F0b21pYyhzcmMp Owo+ICsJCWluID0gMDsKPiArCX0KPiAgCj4gK3VubWFwOgo+ICsJa3VubWFwX2F0b21pYyhzcmMp Owo+ICsJa3VubWFwX2F0b21pYyhkc3QpOwo+ICsJYmF0Y2hfb2JqLT5nZXRfcGFnZSA9IHJld2lu ZDsKPiArdW5waW46Cj4gKwlpOTE1X2dlbV9vYmplY3RfdW5waW5fcGFnZXMoYmF0Y2hfb2JqKTsK PiAgCXJldHVybiByZXQ7Cj4gIH0KPiAgCj4gLS0gCj4gMi42LjAKPiAKPiBfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+IEludGVsLWdmeCBtYWlsaW5nIGxp c3QKPiBJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4gaHR0cDovL2xpc3RzLmZyZWVk ZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAoKLS0gClZpbGxlIFN5cmrDpGzD pApJbnRlbCBPVEMKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3Jn Cmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK