From mboxrd@z Thu Jan 1 00:00:00 1970 From: Joonas Lahtinen Subject: Re: [PATCH 20/33] drm/i915: Use VMA for ringbuffer tracking Date: Thu, 11 Aug 2016 12:32:50 +0300 Message-ID: <1470907970.4722.14.camel@linux.intel.com> References: <1470581141-14432-1-git-send-email-chris@chris-wilson.co.uk> <1470581141-14432-21-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 mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTP id 635266E1E5 for ; Thu, 11 Aug 2016 09:33:00 +0000 (UTC) In-Reply-To: <1470581141-14432-21-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 , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gc3UsIDIwMTYtMDgtMDcgYXQgMTU6NDUgKzAxMDAsIENocmlzIFdpbHNvbiB3cm90ZToKPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ndWNfc3VibWlzc2lvbi5jIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ndWNfc3VibWlzc2lvbi5jCj4gaW5kZXggMDNhNGQy YWU3MWRiLi43NjEyMDFmZjZiMzQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9ndWNfc3VibWlzc2lvbi5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9n dWNfc3VibWlzc2lvbi5jCj4gQEAgLTM0Myw3ICszNDMsNyBAQCBzdGF0aWMgdm9pZCBndWNfaW5p dF9jdHhfZGVzYyhzdHJ1Y3QgaW50ZWxfZ3VjICpndWMsCj4gwqAJZm9yX2VhY2hfZW5naW5lKGVu Z2luZSwgZGV2X3ByaXYpIHsKPiDCoAkJc3RydWN0IGludGVsX2NvbnRleHQgKmNlID0gJmN0eC0+ ZW5naW5lW2VuZ2luZS0+aWRdOwo+IMKgCQlzdHJ1Y3QgZ3VjX2V4ZWNsaXN0X2NvbnRleHQgKmxy YyA9ICZkZXNjLmxyY1tlbmdpbmUtPmd1Y19pZF07Cj4gLQkJc3RydWN0IGRybV9pOTE1X2dlbV9v YmplY3QgKm9iajsKPiArCQlzdHJ1Y3QgaTkxNV92bWEgKnZtYTsKPiDCoAo+IMKgCQkvKiBUT0RP OiBXZSBoYXZlIGEgZGVzaWduIGlzc3VlIHRvIGJlIHNvbHZlZCBoZXJlLiBPbmx5IHdoZW4gd2UK PiDCoAkJwqAqIHJlY2VpdmUgdGhlIGZpcnN0IGJhdGNoLCB3ZSBrbm93IHdoaWNoIGVuZ2luZSBp cyB1c2VkIGJ5IHRoZQo+IEBAIC0zNTgsMTcgKzM1OCwxNSBAQCBzdGF0aWMgdm9pZCBndWNfaW5p dF9jdHhfZGVzYyhzdHJ1Y3QgaW50ZWxfZ3VjICpndWMsCj4gwqAJCWxyYy0+Y29udGV4dF9kZXNj ID0gbG93ZXJfMzJfYml0cyhjZS0+bHJjX2Rlc2MpOwo+IMKgCj4gwqAJCS8qIFRoZSBzdGF0ZSBw YWdlIGlzIGFmdGVyIFBQSFdTUCAqLwo+IC0JCWdmeF9hZGRyID0gY2UtPnN0YXRlLT5ub2RlLnN0 YXJ0Owo+IC0JCWxyYy0+cmluZ19sY3JhID0gZ2Z4X2FkZHIgKyBMUkNfU1RBVEVfUE4gKiBQQUdF X1NJWkU7Cj4gKwkJdm1hID0gY2UtPnN0YXRlOwo+ICsJCWxyYy0+cmluZ19sY3JhID0gdm1hLT5u b2RlLnN0YXJ0ICsgTFJDX1NUQVRFX1BOICogUEFHRV9TSVpFOwoKQW4gYWxpYXMganVzdCBmb3Ig dGhpcyBsaW5lPyBNYXliZSBub3QuCgo+IMKgCQlscmMtPmNvbnRleHRfaWQgPSAoY2xpZW50LT5j dHhfaW5kZXggPDwgR1VDX0VMQ19DVFhJRF9PRkZTRVQpIHwKPiDCoAkJCQkoZW5naW5lLT5ndWNf aWQgPDwgR1VDX0VMQ19FTkdJTkVfT0ZGU0VUKTsKPiDCoAo+IC0JCW9iaiA9IGNlLT5yaW5nLT5v Ymo7Cj4gLQkJZ2Z4X2FkZHIgPSBpOTE1X2dlbV9vYmpfZ2d0dF9vZmZzZXQob2JqKTsKPiAtCj4g LQkJbHJjLT5yaW5nX2JlZ2luID0gZ2Z4X2FkZHI7Cj4gLQkJbHJjLT5yaW5nX2VuZCA9IGdmeF9h ZGRyICsgb2JqLT5iYXNlLnNpemUgLSAxOwo+IC0JCWxyYy0+cmluZ19uZXh0X2ZyZWVfbG9jYXRp b24gPSBnZnhfYWRkcjsKPiArCQl2bWEgPSBjZS0+cmluZy0+dm1hOwo+ICsJCWxyYy0+cmluZ19i ZWdpbiA9IHZtYS0+bm9kZS5zdGFydDsKPiArCQlscmMtPnJpbmdfZW5kID0gdm1hLT5ub2RlLnN0 YXJ0ICsgdm1hLT5ub2RlLnNpemUgLSAxOwo+ICsJCWxyYy0+cmluZ19uZXh0X2ZyZWVfbG9jYXRp b24gPSBscmMtPnJpbmdfYmVnaW47CgpBZ2FpbiwgYW4gYWxpYXMgZm9yIHRocmVlIGxpbmVzPyBB bmQgaXQncyBhIG11bHRpcHVycG9zZSBhbGlhcyB0b28sIHNvCmRvdWJsZSBub3BlLgoKPiBAQCAt MTc0NCwxNiArMTc0NCwxNyBAQCBsb2dpY2FsX3JpbmdfZGVmYXVsdF9pcnFzKHN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKmVuZ2luZSkKPiDCoHN0YXRpYyBpbnQKPiDCoGxyY19zZXR1cF9od3Moc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLCBzdHJ1Y3QgaTkxNV92bWEgKnZtYSkKPiDCoHsK PiArI2RlZmluZSBIV1NfT0ZGU0VUIChMUkNfUFBIV1NQX1BOICogUEFHRV9TSVpFKQoKV291bGRu J3QgdGhpcyBnbyBuZXh0IHRvIExSQ19QUEhXU1BfUE4/Cgo+IEBAIC0xODUzLDc5ICsxODUyLDc4 IEBAIHN0YXRpYyB2b2lkIGNsZWFudXBfcGh5c19zdGF0dXNfcGFnZShzdHJ1Y3QgaW50ZWxfZW5n aW5lX2NzICplbmdpbmUpCj4gwqAKPiDCoHN0YXRpYyB2b2lkIGNsZWFudXBfc3RhdHVzX3BhZ2Uo c3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+IMKgewo+IC0Jc3RydWN0IGRybV9pOTE1 X2dlbV9vYmplY3QgKm9iajsKPiArCXN0cnVjdCBpOTE1X3ZtYSAqdm1hOwo+IMKgCj4gLQlvYmog PSBlbmdpbmUtPnN0YXR1c19wYWdlLm9iajsKPiAtCWlmIChvYmogPT0gTlVMTCkKPiArCXZtYSA9 IG51bGxpZnkoJmVuZ2luZS0+c3RhdHVzX3BhZ2Uudm1hKTsKPiArCWlmICghdm1hKQo+IMKgCQly ZXR1cm47Cj4gwqAKPiAtCWt1bm1hcChzZ19wYWdlKG9iai0+cGFnZXMtPnNnbCkpOwo+IC0JaTkx NV9nZW1fb2JqZWN0X2dndHRfdW5waW4ob2JqKTsKPiAtCWk5MTVfZ2VtX29iamVjdF9wdXQob2Jq KTsKPiAtCWVuZ2luZS0+c3RhdHVzX3BhZ2Uub2JqID0gTlVMTDsKPiArCWk5MTVfdm1hX3VucGlu KHZtYSk7Cj4gKwlpOTE1X2dlbV9vYmplY3RfdW5waW5fbWFwKHZtYS0+b2JqKTsKPiArCWk5MTVf Z2VtX29iamVjdF9wdXQodm1hLT5vYmopOwoKVGhpcyBsb29rcyB0YWQgc3RyYW5nZSwgYmVjYXVz ZSB1c3VhbGx5IG9uZSBmaXJzdCBkb2VzIGFsbCAnZm9vLT5iYXInCnJlbGVhc2VzIGFuZCB0aGVu ICdmb28nLiBKdXN0IGNvbW1lbnRpbmcgaGVyZS4KCjxTTklQPgoKPiAtCWVuZ2luZS0+c3RhdHVz X3BhZ2UuZ2Z4X2FkZHIgPSBpOTE1X2dlbV9vYmpfZ2d0dF9vZmZzZXQob2JqKTsKPiAtCWVuZ2lu ZS0+c3RhdHVzX3BhZ2UucGFnZV9hZGRyID0ga21hcChzZ19wYWdlKG9iai0+cGFnZXMtPnNnbCkp Owo+IC0JbWVtc2V0KGVuZ2luZS0+c3RhdHVzX3BhZ2UucGFnZV9hZGRyLCAwLCBQQUdFX1NJWkUp Owo+ICsJZmxhZ3MgPSBQSU5fR0xPQkFMOwo+ICsJaWYgKCFIQVNfTExDKGVuZ2luZS0+aTkxNSkp Cj4gKwkJLyogT24gZzMzLCB3ZSBjYW5ub3QgcGxhY2UgSFdTIGFib3ZlIDI1Nk1pQiwgc28KPiAr CQnCoCogcmVzdHJpY3QgaXRzIHBpbm5pbmcgdG8gdGhlIGxvdyBtYXBwYWJsZSBhcmVuYS4KPiAr CQnCoCogVGhvdWdoIHRoaXMgcmVzdHJpY3Rpb24gaXMgbm90IGRvY3VtZW50ZWQgZm9yCj4gKwkJ wqAqIGdlbjQsIGdlbjUsIG9yIGJ5dCwgdGhleSBhbHNvIGJlaGF2ZSBzaW1pbGFybHkKPiArCQnC oCogYW5kIGhhbmcgaWYgdGhlIEhXUyBpcyBwbGFjZWQgYXQgdGhlIHRvcCBvZiB0aGUKPiArCQnC oCogR1RULiBUbyBnZW5lcmFsaXNlLCBpdCBhcHBlYXJzIHRoYXQgYWxsICFsbGMKPiArCQnCoCog cGxhdGZvcm1zIGhhdmUgaXNzdWVzIHdpdGggdXMgcGxhY2luZyB0aGUgSFdTCj4gKwkJwqAqIGFi b3ZlIHRoZSBtYXBwYWJsZSByZWdpb24gKGV2ZW4gdGhvdWdoIHdlIG5ldmVyCj4gKwkJwqAqIGFj dHVhbHkgbWFwIGl0KS4KPiArCQnCoCovCj4gKwkJZmxhZ3MgfD0gUElOX01BUFBBQkxFOwoKRm9y IHJlYWRhYmlsaXR5LCBJJ2QgbW92ZSB0aGUgY29tbWVudCBvbmUgbGV2ZWwgdXAgYW5kIGJlZm9y ZSB0aGUgaWYuCsKgCj4gKwlEUk1fREVCVUdfRFJJVkVSKCIlcyBod3Mgb2Zmc2V0OiAweCUwOGxs eFxuIiwKPiArCQkJwqBlbmdpbmUtPm5hbWUsIHZtYS0+bm9kZS5zdGFydCk7Cj4gwqAJcmV0dXJu IDA7Cj4gKwo+ICtlcnJfdW5yZWY6CgpTb2xlIGVycm9yIGxhYmVsLCBjb3VsZCBiZSBlcnIuCgo+ IMKgCj4gwqBpbnQgaW50ZWxfcmluZ19waW4oc3RydWN0IGludGVsX3JpbmcgKnJpbmcpCj4gwqB7 Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSByaW5nLT5lbmdpbmUtPmk5 MTU7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqID0gcmluZy0+b2JqOwo+IMKg CS8qIFJpbmcgd3JhcGFyb3VuZCBhdCBvZmZzZXQgMCBzb21ldGltZXMgaGFuZ3MuIE5vIGlkZWEg d2h5LiAqLwo+IC0JdW5zaWduZWQgZmxhZ3MgPSBQSU5fT0ZGU0VUX0JJQVMgfCA0MDk2Owo+ICsJ dW5zaWduZWQgaW50IGZsYWdzID0gUElOX0dMT0JBTCB8IFBJTl9PRkZTRVRfQklBUyB8IDQwOTY7 Cj4gwqAJdm9pZCAqYWRkcjsKPiDCoAlpbnQgcmV0Owo+IMKgCj4gLQlpZiAoSEFTX0xMQyhkZXZf cHJpdikgJiYgIW9iai0+c3RvbGVuKSB7Cj4gLQkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X2dndHRf cGluKG9iaiwgTlVMTCwgMCwgUEFHRV9TSVpFLCBmbGFncyk7Cj4gLQkJaWYgKHJldCkKPiAtCQkJ cmV0dXJuIHJldDsKPiAtCj4gLQkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3NldF90b19jcHVfZG9t YWluKG9iaiwgdHJ1ZSk7Cj4gLQkJaWYgKHJldCkKPiAtCQkJZ290byBlcnJfdW5waW47Cj4gLQo+ IC0JCWFkZHIgPSBpOTE1X2dlbV9vYmplY3RfcGluX21hcChvYmopOwo+IC0JCWlmIChJU19FUlIo YWRkcikpIHsKPiAtCQkJcmV0ID0gUFRSX0VSUihhZGRyKTsKPiAtCQkJZ290byBlcnJfdW5waW47 Cj4gLQkJfQo+IC0JfSBlbHNlIHsKPiAtCQlyZXQgPSBpOTE1X2dlbV9vYmplY3RfZ2d0dF9waW4o b2JqLCBOVUxMLCAwLCBQQUdFX1NJWkUsCj4gLQkJCQkJwqDCoMKgwqDCoMKgwqBmbGFncyB8IFBJ Tl9NQVBQQUJMRSk7Cj4gLQkJaWYgKHJldCkKPiAtCQkJcmV0dXJuIHJldDsKPiArCUdFTV9CVUdf T04ocmluZy0+dmFkZHIpOwo+IMKgCj4gLQkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3NldF90b19n dHRfZG9tYWluKG9iaiwgdHJ1ZSk7Cj4gLQkJaWYgKHJldCkKPiAtCQkJZ290byBlcnJfdW5waW47 Cj4gKwlpZiAocmluZy0+dm1hcCkKPiArCQlmbGFncyB8PSBQSU5fTUFQUEFCTEU7Cj4gwqAKPiAt CQkvKiBBY2Nlc3MgdGhyb3VnaCB0aGUgR1RUIHJlcXVpcmVzIHRoZSBkZXZpY2UgdG8gYmUgYXdh a2UuICovCj4gLQkJYXNzZXJ0X3JwbV93YWtlbG9ja19oZWxkKGRldl9wcml2KTsKClRoaXMgd2Fr ZWxvY2sgZGlzYXBwZWFycyBpbiB0aGlzIHBhdGNoLgoKPiArCXJldCA9IGk5MTVfdm1hX3Bpbihy aW5nLT52bWEsIDAsIFBBR0VfU0laRSwgZmxhZ3MpOwo+ICsJaWYgKHVubGlrZWx5KHJldCkpCj4g KwkJcmV0dXJuIHJldDsKPiDCoAo+IC0JCWFkZHIgPSAodm9pZCBfX2ZvcmNlICopCj4gLQkJCWk5 MTVfdm1hX3Bpbl9pb21hcChpOTE1X2dlbV9vYmpfdG9fZ2d0dChvYmopKTsKPiAtCQlpZiAoSVNf RVJSKGFkZHIpKSB7Cj4gLQkJCXJldCA9IFBUUl9FUlIoYWRkcik7Cj4gLQkJCWdvdG8gZXJyX3Vu cGluOwo+IC0JCX0KPiArCWlmIChyaW5nLT52bWFwKQo+ICsJCWFkZHIgPSBpOTE1X2dlbV9vYmpl Y3RfcGluX21hcChyaW5nLT52bWEtPm9iaik7Cj4gKwllbHNlCj4gKwkJYWRkciA9ICh2b2lkIF9f Zm9yY2UgKilpOTE1X3ZtYV9waW5faW9tYXAocmluZy0+dm1hKTsKCldha2Vsb2NrIG5lZWRlZCBp biB0aGlzIHBhdGg/Cgo+ICsJaWYgKElTX0VSUihhZGRyKSkgewo+ICsJCWk5MTVfdm1hX3VucGlu KHJpbmctPnZtYSk7Cj4gKwkJcmV0dXJuIFBUUl9FUlIoYWRkcik7CgpLZWVwIHRoZSBnb29kIG9s JyB0ZWFyZG93biBwYXRoLgoKCj4gwqAJfQo+IMKgCj4gwqAJcmluZy0+dmFkZHIgPSBhZGRyOwo+ IC0JcmluZy0+dm1hID0gaTkxNV9nZW1fb2JqX3RvX2dndHQob2JqKTsKPiDCoAlyZXR1cm4gMDsK PiAtCj4gLWVycl91bnBpbjoKPiAtCWk5MTVfZ2VtX29iamVjdF9nZ3R0X3VucGluKG9iaik7Cj4g LQlyZXR1cm4gcmV0Owo+IMKgfQo+IMKgCj4gLXN0YXRpYyBpbnQgaW50ZWxfYWxsb2NfcmluZ2J1 ZmZlcl9vYmooc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAtCQkJCcKgwqDCoMKgwqDCoHN0cnVj dCBpbnRlbF9yaW5nICpyaW5nKQo+ICtzdGF0aWMgc3RydWN0IGk5MTVfdm1hICoKPiAraW50ZWxf cmluZ19jcmVhdGVfdm1hKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgaW50IHNp emUpCj4gwqB7Cj4gwqAJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKPiArCXN0cnVj dCBpOTE1X3ZtYSAqdm1hOwo+ICsJaW50IHJldDsKPiDCoAo+IC0Jb2JqID0gTlVMTDsKPiAtCWlm ICghSEFTX0xMQyhkZXYpKQo+IC0JCW9iaiA9IGk5MTVfZ2VtX29iamVjdF9jcmVhdGVfc3RvbGVu KGRldiwgcmluZy0+c2l6ZSk7Cj4gLQlpZiAob2JqID09IE5VTEwpCj4gLQkJb2JqID0gaTkxNV9n ZW1fb2JqZWN0X2NyZWF0ZShkZXYsIHJpbmctPnNpemUpOwo+ICsJb2JqID0gRVJSX1BUUigtRU5P REVWKTsKPiArCWlmICghSEFTX0xMQyhkZXZfcHJpdikpCj4gKwkJb2JqID0gaTkxNV9nZW1fb2Jq ZWN0X2NyZWF0ZV9zdG9sZW4oJmRldl9wcml2LT5kcm0sIHNpemUpOwo+IMKgCWlmIChJU19FUlIo b2JqKSkKPiAtCQlyZXR1cm4gUFRSX0VSUihvYmopOwo+ICsJCW9iaiA9IGk5MTVfZ2VtX29iamVj dF9jcmVhdGUoJmRldl9wcml2LT5kcm0sIHNpemUpOwo+ICsJaWYgKElTX0VSUihvYmopKQo+ICsJ CXJldHVybiBFUlJfQ0FTVChvYmopOwo+IMKgCj4gwqAJLyogbWFyayByaW5nIGJ1ZmZlcnMgYXMg cmVhZC1vbmx5IGZyb20gR1BVIHNpZGUgYnkgZGVmYXVsdCAqLwo+IMKgCW9iai0+Z3Rfcm8gPSAx Owo+IMKgCj4gLQlyaW5nLT5vYmogPSBvYmo7Cj4gKwlpZiAoSEFTX0xMQyhkZXZfcHJpdikgJiYg IW9iai0+c3RvbGVuKQo+ICsJCXJldCA9IGk5MTVfZ2VtX29iamVjdF9zZXRfdG9fY3B1X2RvbWFp bihvYmosIHRydWUpOwo+ICsJZWxzZQo+ICsJCXJldCA9IGk5MTVfZ2VtX29iamVjdF9zZXRfdG9f Z3R0X2RvbWFpbihvYmosIHRydWUpOwo+ICsJaWYgKHJldCkgewo+ICsJCXZtYSA9IEVSUl9QVFIo cmV0KTsKPiArCQlnb3RvIGVycjsKPiArCX0KCk1pZ2h0IGJlIHdvcnRoIG1lbnRpb25pbmcgdGhh dCB0aGUgcmluZyBvYmplY3RzIGFyZSBub3cgbW92ZWQgdG8gdGhlaXIKZG9tYWluIGF0IHRoZSB0 aW1lIGNyZWF0aW9uLCBub3QgcGlubmluZy4gQW55IHNwZWNpZmljIHJlYXNvbiBmb3IgdGhlCmNo YW5nZT8KCkFsc28gbWVudGlvbiB0aGF0IHlvdSdyZSBzaWxlbmNpbmcgcXVpdGUgYSBmZXcgZGVi dWdzIGFuZCBvbmUKRFJNX0VSUk9SLgoKPiBAQCAtMjA2MCwyMiArMjA0MCwyMyBAQCBpbnRlbF9l bmdpbmVfY3JlYXRlX3Jpbmcoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLCBpbnQgc2l6 ZSkKPiDCoAlyaW5nLT5sYXN0X3JldGlyZWRfaGVhZCA9IC0xOwo+IMKgCWludGVsX3JpbmdfdXBk YXRlX3NwYWNlKHJpbmcpOwo+IMKgCj4gLQlyZXQgPSBpbnRlbF9hbGxvY19yaW5nYnVmZmVyX29i aigmZW5naW5lLT5pOTE1LT5kcm0sIHJpbmcpOwo+IC0JaWYgKHJldCkgewo+IC0JCURSTV9ERUJV R19EUklWRVIoIkZhaWxlZCB0byBhbGxvY2F0ZSByaW5nYnVmZmVyICVzOiAlZFxuIiwKPiAtCQkJ CcKgZW5naW5lLT5uYW1lLCByZXQpOwo+IC0JCWxpc3RfZGVsKCZyaW5nLT5saW5rKTsKPiArCXZt YSA9IGludGVsX3JpbmdfY3JlYXRlX3ZtYShlbmdpbmUtPmk5MTUsIHNpemUpOwo+ICsJaWYgKElT X0VSUih2bWEpKSB7Cj4gwqAJCWtmcmVlKHJpbmcpOwo+IC0JCXJldHVybiBFUlJfUFRSKHJldCk7 Cj4gKwkJcmV0dXJuIEVSUl9DQVNUKHZtYSk7Cj4gwqAJfQo+ICsJcmluZy0+dm1hID0gdm1hOwo+ ICsJaWYgKEhBU19MTEMoZW5naW5lLT5pOTE1KSAmJiAhdm1hLT5vYmotPnN0b2xlbikKPiArCQly aW5nLT52bWFwID0gdHJ1ZTsKCnVzZV92bWFwL25lZWRfdm1hcCBvciBzb21ldGhpbmc/ICd2bWFw JyBzb3VuZHMgbGlrZSB0aGUgYWN0dWFsIG1hcHBpbmcuCgo+IMKgCQlyZXQgPSBpbml0X3N0YXR1 c19wYWdlKGVuZ2luZSk7Cj4gQEAgLTIxODQsMTEgKzIxNjQsMTAgQEAgc3RhdGljIGludCBpbnRl bF9pbml0X3JpbmdfYnVmZmVyKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiDCoAo+ IMKgCXJldCA9IGludGVsX3JpbmdfcGluKHJpbmcpOwo+IMKgCWlmIChyZXQpIHsKPiAtCQlEUk1f RVJST1IoIkZhaWxlZCB0byBwaW4gYW5kIG1hcCByaW5nYnVmZmVyICVzOiAlZFxuIiwKPiAtCQkJ CWVuZ2luZS0+bmFtZSwgcmV0KTsKPiAtCQlpbnRlbF9kZXN0cm95X3JpbmdidWZmZXJfb2JqKHJp bmcpOwo+ICsJCWludGVsX3JpbmdfZnJlZShyaW5nKTsKClNob3VsZG4ndCB0aGlzIGJlIGxpa2Ug Z290byBlcnJfcmluZz8KCj4gwqAJCWdvdG8gZXJyb3I7Cj4gwqAJfQo+ICsJZW5naW5lLT5idWZm ZXIgPSByaW5nOwo+IMKgCj4gwqAJcmV0dXJuIDA7Cj4gwqDCoAo+IMKgCXN0cnVjdCBpbnRlbF9l bmdpbmVfY3MgKmVuZ2luZTsKPiDCoAlzdHJ1Y3QgbGlzdF9oZWFkIGxpbms7Cj4gQEAgLTk3LDYg Kzk2LDcgQEAgc3RydWN0IGludGVsX3Jpbmcgewo+IMKgCWludCBzcGFjZTsKPiDCoAlpbnQgc2l6 ZTsKPiDCoAlpbnQgZWZmZWN0aXZlX3NpemU7Cj4gKwlib29sIHZtYXA7CgpSZW5hbWluZyBzdWdn ZXN0ZWQgYWJvdmUuCgpSZWdhcmRzLCBKb29uYXMKLS0gCkpvb25hcyBMYWh0aW5lbgpPcGVuIFNv dXJjZSBUZWNobm9sb2d5IENlbnRlcgpJbnRlbCBDb3Jwb3JhdGlvbgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0Cklu dGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5v cmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK