From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH v5 3/7] drm/i915: introduce and use i915_gem_object_vmap_range() Date: Mon, 29 Feb 2016 11:53:27 +0000 Message-ID: <56D43137.8070600@linux.intel.com> References: <1456744394-29831-1-git-send-email-david.s.gordon@intel.com> <1456744394-29831-4-git-send-email-david.s.gordon@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" 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 51B4389812 for ; Mon, 29 Feb 2016 11:53:29 +0000 (UTC) In-Reply-To: <1456744394-29831-4-git-send-email-david.s.gordon@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Dave Gordon , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org Ck9uIDI5LzAyLzE2IDExOjEzLCBEYXZlIEdvcmRvbiB3cm90ZToKPiBGcm9tOiBBbGV4IERhaSA8 eXUuZGFpQGludGVsLmNvbT4KPgo+IFRoZXJlIGFyZSBzZXZlcmFsIHBsYWNlcyBpbnNpZGUgZHJp dmVyIHdoZXJlIGEgR0VNIG9iamVjdCBpcyBtYXBwZWQKPiB0byBrZXJuZWwgdmlydHVhbCBzcGFj ZS4gVGhlIG1hcHBpbmcgbWF5IGJlIGRvbmUgZWl0aGVyIGZvciB0aGUgd2hvbGUKPiBvYmplY3Qg b3Igb25seSBhIHN1YnNldCBvZiBpdC4KPgo+IFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIGZ1bmN0 aW9uIGk5MTVfZ2VtX29iamVjdF92bWFwX3JhbmdlKCkgdG8KPiBpbXBsZW1lbnQgdGhlIGNvbW1v biBmdW5jdGlvbmFsaXR5LiBUaGUgY29kZSBpdHNlbGYgaXMgZXh0cmFjdGVkIGFuZAo+IGFkYXB0 ZWQgZnJvbSB0aGF0IGluIHZtYXBfYmF0Y2goKSwgYnV0IGFsc28gcmVwbGFjZXMgdm1hcF9vYmoo KSBhbmQgdGhlCj4gb3Blbi1jb2RlZCB2ZXJzaW9uIGluIGk5MTVfZ2VtX2RtYWJ1Zl92bWFwKCku Cj4KPiB2MjogVXNlIG9iai0+cGFnZXMtPm5lbnRzIGZvciBpdGVyYXRpb24gd2l0aGluIGk5MTVf Z2VtX29iamVjdF92bWFwOwo+ICAgICAgYnJlYWsgd2hlbiBpdCBmaW5pc2hlcyBhbGwgZGVzaXJl ZCBwYWdlcy4gVGhlIGNhbGxlciBtdXN0IHBhc3MgdGhlCj4gICAgICBhY3R1YWwgcGFnZSBjb3Vu dCByZXF1aXJlZC4gW1R2cnRrbyBVcnN1bGluXQo+Cj4gdjQ6IHJlbmFtZWQgdG8gaTkxNV9nZW1f b2JqZWN0X3ZtYXBfcmFuZ2UoKSB0byBtYWtlIGl0cyBmdW5jdGlvbgo+ICAgICAgY2xlYXJlci4g W0RhdmUgR29yZG9uXQo+Cj4gdjU6IHVzZSBDaHJpcyBXaWxzb24ncyBuZXcgZHJtX21hbGxvY19n ZnAoKSByYXRoZXIgdGhhbiBrbWFsbG9jKCkgb3IKPiAgICAgIGRybV9tYWxsb2NfYWIoKS4gW0Rh dmUgR29yZG9uXQo+Cj4gU2lnbmVkLW9mZi1ieTogQWxleCBEYWkgPHl1LmRhaUBpbnRlbC5jb20+ Cj4gU2lnbmVkLW9mZi1ieTogRGF2ZSBHb3Jkb24gPGRhdmlkLnMuZ29yZG9uQGludGVsLmNvbT4K PiBDYzogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KPiBDYzogQ2hy aXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+Cj4gLS0tCj4gICBkcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2NtZF9wYXJzZXIuYyAgfCAyOCArLS0tLS0tLS0tLS0tLS0tLS0tLQo+ ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCAgICAgICAgIHwgIDQgKysrCj4gICBk cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jICAgICAgICAgfCA0NyArKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysKPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2Rt YWJ1Zi5jICB8IDE2ICsrKy0tLS0tLS0tCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9y aW5nYnVmZmVyLmMgfCAyNCArKy0tLS0tLS0tLS0tLS0tLQo+ICAgNSBmaWxlcyBjaGFuZ2VkLCA1 NyBpbnNlcnRpb25zKCspLCA2MiBkZWxldGlvbnMoLSkKPgo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2NtZF9wYXJzZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfY21kX3BhcnNlci5jCj4gaW5kZXggODE0ZDg5NC4uMTE0YjU1ZiAxMDA2NDQKPiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2NtZF9wYXJzZXIuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfY21kX3BhcnNlci5jCj4gQEAgLTg2MywzNyArODYzLDExIEBAIHZvaWQg aTkxNV9jbWRfcGFyc2VyX2ZpbmlfcmluZyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nKQo+ ICAgc3RhdGljIHUzMiAqdm1hcF9iYXRjaChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2Jq LAo+ICAgCQkgICAgICAgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGxlbikKPiAgIHsKPiAtCWlu dCBpOwo+IC0Jdm9pZCAqYWRkciA9IE5VTEw7Cj4gLQlzdHJ1Y3Qgc2dfcGFnZV9pdGVyIHNnX2l0 ZXI7Cj4gICAJaW50IGZpcnN0X3BhZ2UgPSBzdGFydCA+PiBQQUdFX1NISUZUOwo+ICAgCWludCBs YXN0X3BhZ2UgPSAobGVuICsgc3RhcnQgKyA0MDk1KSA+PiBQQUdFX1NISUZUOwo+ICAgCWludCBu cGFnZXMgPSBsYXN0X3BhZ2UgLSBmaXJzdF9wYWdlOwo+IC0Jc3RydWN0IHBhZ2UgKipwYWdlczsK PiAtCj4gLQlwYWdlcyA9IGRybV9tYWxsb2NfYWIobnBhZ2VzLCBzaXplb2YoKnBhZ2VzKSk7Cj4g LQlpZiAocGFnZXMgPT0gTlVMTCkgewo+IC0JCURSTV9ERUJVR19EUklWRVIoIkZhaWxlZCB0byBn ZXQgc3BhY2UgZm9yIHBhZ2VzXG4iKTsKPiAtCQlnb3RvIGZpbmlzaDsKPiAtCX0KPiAtCj4gLQlp ID0gMDsKPiAtCWZvcl9lYWNoX3NnX3BhZ2Uob2JqLT5wYWdlcy0+c2dsLCAmc2dfaXRlciwgb2Jq LT5wYWdlcy0+bmVudHMsIGZpcnN0X3BhZ2UpIHsKPiAtCQlwYWdlc1tpKytdID0gc2dfcGFnZV9p dGVyX3BhZ2UoJnNnX2l0ZXIpOwo+IC0JCWlmIChpID09IG5wYWdlcykKPiAtCQkJYnJlYWs7Cj4g LQl9Cj4gLQo+IC0JYWRkciA9IHZtYXAocGFnZXMsIGksIDAsIFBBR0VfS0VSTkVMKTsKPiAtCWlm IChhZGRyID09IE5VTEwpIHsKPiAtCQlEUk1fREVCVUdfRFJJVkVSKCJGYWlsZWQgdG8gdm1hcCBw YWdlc1xuIik7Cj4gLQkJZ290byBmaW5pc2g7Cj4gLQl9Cj4KPiAtZmluaXNoOgo+IC0JaWYgKHBh Z2VzKQo+IC0JCWRybV9mcmVlX2xhcmdlKHBhZ2VzKTsKPiAtCXJldHVybiAodTMyKilhZGRyOwo+ ICsJcmV0dXJuIGk5MTVfZ2VtX29iamVjdF92bWFwX3JhbmdlKG9iaiwgZmlyc3RfcGFnZSwgbnBh Z2VzKTsKPiAgIH0KPgo+ICAgLyogUmV0dXJucyBhIHZtYXAnZCBwb2ludGVyIHRvIGRlc3Rfb2Jq LCB3aGljaCB0aGUgY2FsbGVyIG11c3QgdW5tYXAgKi8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgK PiBpbmRleCA5ZTc2YmZjLi45MThiMGJiIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZHJ2LmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4g QEAgLTI5ODMsNiArMjk4MywxMCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaTkxNV9nZW1fb2JqZWN0 X3VucGluX3BhZ2VzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCj4gICAJb2JqLT5w YWdlc19waW5fY291bnQtLTsKPiAgIH0KPgo+ICt2b2lkICpfX211c3RfY2hlY2sgaTkxNV9nZW1f b2JqZWN0X3ZtYXBfcmFuZ2Uoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPiArCQkJ CQkgICAgICB1bnNpZ25lZCBpbnQgZmlyc3QsCj4gKwkJCQkJICAgICAgdW5zaWduZWQgaW50IG5w YWdlcyk7Cj4gKwo+ICAgaW50IF9fbXVzdF9jaGVjayBpOTE1X211dGV4X2xvY2tfaW50ZXJydXB0 aWJsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKPiAgIGludCBpOTE1X2dlbV9vYmplY3Rfc3lu YyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+ICAgCQkJIHN0cnVjdCBpbnRlbF9l bmdpbmVfY3MgKnRvLAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dl bS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwo+IGluZGV4IGY2OGYzNDYuLmM2 MjFiM2UgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwo+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKPiBAQCAtMjQwMCw2ICsyNDAwLDUz IEBAIHN0YXRpYyB2b2lkIGk5MTVfZ2VtX29iamVjdF9mcmVlX21tYXBfb2Zmc2V0KHN0cnVjdCBk cm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCj4gICAJcmV0dXJuIDA7Cj4gICB9Cj4KPiArLyoqCj4g KyAqIGk5MTVfZ2VtX29iamVjdF92bWFwX3JhbmdlIC0gbWFwIHNvbWUgb3IgYWxsIG9mIGEgR0VN IG9iamVjdCBpbnRvIGtlcm5lbCBzcGFjZQo+ICsgKiBAb2JqOiB0aGUgR0VNIG9iamVjdCB0byBi ZSBtYXBwZWQKPiArICogQGZpcnN0OiBpbmRleCBvZiB0aGUgZmlyc3QgcGFnZSBvZiB0aGUgb2Jq ZWN0IHRvIGJlIG1hcHBlZAo+ICsgKiBAbnBhZ2VzOiBsZW5ndGggb2YgdGhlIG1hcHBpbmcgdG8g YmUgY3JlYXRlZCwgaW4gcGFnZXMKPiArICoKPiArICogTWFwIGEgZ2l2ZW4gcGFnZSByYW5nZSBv ZiBhIEdFTSBvYmplY3QgaW50byBrZXJuZWwgdmlydHVhbCBzcGFjZS4gVGhlIGNhbGxlcgo+ICsg KiBtdXN0IG1ha2Ugc3VyZSB0aGUgYXNzb2NpYXRlZCBwYWdlcyBhcmUgZ2F0aGVyZWQgYW5kIHBp bm5lZCBiZWZvcmUgY2FsbGluZwo+ICsgKiB0aGlzIGZ1bmN0aW9uLCBhbmQgaXMgcmVzcG9uc2li bGUgZm9yIHZ1bm1hcHBpbmcgdGhlIHJldHVybmVkIGFkZHJlc3MuCgpDb3VsZCBhZGQgYW4gYXNz ZXJ0IGludG8gdGhlIGNvZGUgZm9yIHRoZSBhYm92ZT8gKHBhZ2VzIGV4aXN0IGFuZCBhcmUgCnBp bm5lZCkKCj4gKyAqCj4gKyAqIFJldHVybnMgdGhlIGFkZHJlc3MgYXQgd2hpY2ggdGhlIG9iamVj dCBoYXMgYmVlbiBtYXBwZWQsIG9yIE5VTEwgb24gZmFpbHVyZS4KPiArICovCj4gK3ZvaWQgKmk5 MTVfZ2VtX29iamVjdF92bWFwX3JhbmdlKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmos Cj4gKwkJCQkgdW5zaWduZWQgaW50IGZpcnN0LAo+ICsJCQkJIHVuc2lnbmVkIGludCBucGFnZXMp Cj4gK3sKPiArCXN0cnVjdCBzZ19wYWdlX2l0ZXIgc2dfaXRlcjsKPiArCXN0cnVjdCBwYWdlICoq cGFnZXM7Cj4gKwl2b2lkICphZGRyOwo+ICsJaW50IGk7Cj4gKwo+ICsJaWYgKGZpcnN0ICsgbnBh Z2VzID4gb2JqLT5wYWdlcy0+bmVudHMpIHsKPiArCQlEUk1fREVCVUdfRFJJVkVSKCJJbnZhbGlk IHBhZ2UgY291bnRcbiIpOwoKVGhpcyBpcyBpbmNvcnJlY3QgSSB0aGluayBiZWNhdXNlIG5lbnRz IGlzIGxlc3Mgb3IgZXF1YWwgdG8gbnVtYmVyIG9mIApwYWdlcyBpbiBhbiBvYmplY3QuIFNvIGl0 IGNhbiBmYWlsIHRoZSBhdHRlbXB0IGluY29ycmVjdGx5LiBTaG91bGQgCnByb2JhYmx5IGNoZWNr IGFnYWluc3Qgb2JqLT5iYXNlLnNpemUgPj4gUEFHRV9TSElGVC4KCj4gKwkJcmV0dXJuIE5VTEw7 Cj4gKwl9Cj4gKwo+ICsJcGFnZXMgPSBkcm1fbWFsbG9jX2dmcChucGFnZXMsIHNpemVvZigqcGFn ZXMpLCBHRlBfVEVNUE9SQVJZKTsKPiArCWlmIChwYWdlcyA9PSBOVUxMKSB7Cj4gKwkJRFJNX0RF QlVHX0RSSVZFUigiRmFpbGVkIHRvIGdldCBzcGFjZSBmb3IgcGFnZXNcbiIpOwo+ICsJCXJldHVy biBOVUxMOwo+ICsJfQo+ICsKPiArCWkgPSAwOwo+ICsJZm9yX2VhY2hfc2dfcGFnZShvYmotPnBh Z2VzLT5zZ2wsICZzZ19pdGVyLCBvYmotPnBhZ2VzLT5uZW50cywgZmlyc3QpIHsKPiArCQlwYWdl c1tpKytdID0gc2dfcGFnZV9pdGVyX3BhZ2UoJnNnX2l0ZXIpOwo+ICsJCWlmIChpID09IG5wYWdl cykKPiArCQkJYnJlYWs7Cj4gKwl9Cj4gKwo+ICsJYWRkciA9IHZtYXAocGFnZXMsIG5wYWdlcywg MCwgUEFHRV9LRVJORUwpOwo+ICsJaWYgKGFkZHIgPT0gTlVMTCkKPiArCQlEUk1fREVCVUdfRFJJ VkVSKCJGYWlsZWQgdG8gdm1hcCBwYWdlc1xuIik7Cj4gKwlkcm1fZnJlZV9sYXJnZShwYWdlcyk7 Cj4gKwo+ICsJcmV0dXJuIGFkZHI7Cj4gK30KPiArCj4gICB2b2lkIGk5MTVfdm1hX21vdmVfdG9f YWN0aXZlKHN0cnVjdCBpOTE1X3ZtYSAqdm1hLAo+ICAgCQkJICAgICBzdHJ1Y3QgZHJtX2k5MTVf Z2VtX3JlcXVlc3QgKnJlcSkKPiAgIHsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9nZW1fZG1hYnVmLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9kbWFi dWYuYwo+IGluZGV4IDFmM2VlZjYuLmFlZTQxNDkgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9nZW1fZG1hYnVmLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2dlbV9kbWFidWYuYwo+IEBAIC0xMTAsOSArMTEwLDcgQEAgc3RhdGljIHZvaWQgKmk5MTVf Z2VtX2RtYWJ1Zl92bWFwKHN0cnVjdCBkbWFfYnVmICpkbWFfYnVmKQo+ICAgewo+ICAgCXN0cnVj dCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmogPSBkbWFfYnVmX3RvX29iaihkbWFfYnVmKTsKPiAg IAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gb2JqLT5iYXNlLmRldjsKPiAtCXN0cnVjdCBzZ19w YWdlX2l0ZXIgc2dfaXRlcjsKPiAtCXN0cnVjdCBwYWdlICoqcGFnZXM7Cj4gLQlpbnQgcmV0LCBp Owo+ICsJaW50IHJldDsKPgo+ICAgCXJldCA9IGk5MTVfbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxl KGRldik7Cj4gICAJaWYgKHJldCkKPiBAQCAtMTMxLDE2ICsxMjksOCBAQCBzdGF0aWMgdm9pZCAq aTkxNV9nZW1fZG1hYnVmX3ZtYXAoc3RydWN0IGRtYV9idWYgKmRtYV9idWYpCj4KPiAgIAlyZXQg PSAtRU5PTUVNOwo+Cj4gLQlwYWdlcyA9IGRybV9tYWxsb2NfYWIob2JqLT5iYXNlLnNpemUgPj4g UEFHRV9TSElGVCwgc2l6ZW9mKCpwYWdlcykpOwo+IC0JaWYgKHBhZ2VzID09IE5VTEwpCj4gLQkJ Z290byBlcnJfdW5waW47Cj4gLQo+IC0JaSA9IDA7Cj4gLQlmb3JfZWFjaF9zZ19wYWdlKG9iai0+ cGFnZXMtPnNnbCwgJnNnX2l0ZXIsIG9iai0+cGFnZXMtPm5lbnRzLCAwKQo+IC0JCXBhZ2VzW2kr K10gPSBzZ19wYWdlX2l0ZXJfcGFnZSgmc2dfaXRlcik7Cj4gLQo+IC0Jb2JqLT5kbWFfYnVmX3Zt YXBwaW5nID0gdm1hcChwYWdlcywgaSwgMCwgUEFHRV9LRVJORUwpOwo+IC0JZHJtX2ZyZWVfbGFy Z2UocGFnZXMpOwo+ICsJb2JqLT5kbWFfYnVmX3ZtYXBwaW5nID0gaTkxNV9nZW1fb2JqZWN0X3Zt YXBfcmFuZ2Uob2JqLCAwLAo+ICsJCQkJCQlkbWFfYnVmLT5zaXplID4+IFBBR0VfU0hJRlQpOwo+ Cj4gICAJaWYgKCFvYmotPmRtYV9idWZfdm1hcHBpbmcpCj4gICAJCWdvdG8gZXJyX3VucGluOwo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmMgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmMKPiBpbmRleCA0NWNlNDVhLi40 MzRhNDUyIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZm ZXIuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuYwo+IEBA IC0yMDY0LDI3ICsyMDY0LDYgQEAgdm9pZCBpbnRlbF91bnBpbl9yaW5nYnVmZmVyX29iaihzdHJ1 Y3QgaW50ZWxfcmluZ2J1ZmZlciAqcmluZ2J1ZikKPiAgIAlpOTE1X2dlbV9vYmplY3RfZ2d0dF91 bnBpbihyaW5nYnVmLT5vYmopOwo+ICAgfQo+Cj4gLXN0YXRpYyB1MzIgKnZtYXBfb2JqKHN0cnVj dCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCj4gLXsKPiAtCXN0cnVjdCBzZ19wYWdlX2l0ZXIg c2dfaXRlcjsKPiAtCXN0cnVjdCBwYWdlICoqcGFnZXM7Cj4gLQl2b2lkICphZGRyOwo+IC0JaW50 IGk7Cj4gLQo+IC0JcGFnZXMgPSBkcm1fbWFsbG9jX2FiKG9iai0+YmFzZS5zaXplID4+IFBBR0Vf U0hJRlQsIHNpemVvZigqcGFnZXMpKTsKPiAtCWlmIChwYWdlcyA9PSBOVUxMKQo+IC0JCXJldHVy biBOVUxMOwo+IC0KPiAtCWkgPSAwOwo+IC0JZm9yX2VhY2hfc2dfcGFnZShvYmotPnBhZ2VzLT5z Z2wsICZzZ19pdGVyLCBvYmotPnBhZ2VzLT5uZW50cywgMCkKPiAtCQlwYWdlc1tpKytdID0gc2df cGFnZV9pdGVyX3BhZ2UoJnNnX2l0ZXIpOwo+IC0KPiAtCWFkZHIgPSB2bWFwKHBhZ2VzLCBpLCAw LCBQQUdFX0tFUk5FTCk7Cj4gLQlkcm1fZnJlZV9sYXJnZShwYWdlcyk7Cj4gLQo+IC0JcmV0dXJu IGFkZHI7Cj4gLX0KPiAtCj4gICBpbnQgaW50ZWxfcGluX2FuZF9tYXBfcmluZ2J1ZmZlcl9vYmoo c3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAgIAkJCQkgICAgIHN0cnVjdCBpbnRlbF9yaW5nYnVm ZmVyICpyaW5nYnVmKQo+ICAgewo+IEBAIC0yMTAzLDcgKzIwODIsOCBAQCBpbnQgaW50ZWxfcGlu X2FuZF9tYXBfcmluZ2J1ZmZlcl9vYmooc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAgIAkJCXJl dHVybiByZXQ7Cj4gICAJCX0KPgo+IC0JCXJpbmdidWYtPnZpcnR1YWxfc3RhcnQgPSB2bWFwX29i aihvYmopOwo+ICsJCXJpbmdidWYtPnZpcnR1YWxfc3RhcnQgPSBpOTE1X2dlbV9vYmplY3Rfdm1h cF9yYW5nZShvYmosIDAsCj4gKwkJCQkJCXJpbmdidWYtPnNpemUgPj4gUEFHRV9TSElGVCk7Cj4g ICAJCWlmIChyaW5nYnVmLT52aXJ0dWFsX3N0YXJ0ID09IE5VTEwpIHsKPiAgIAkJCWk5MTVfZ2Vt X29iamVjdF9nZ3R0X3VucGluKG9iaik7Cj4gICAJCQlyZXR1cm4gLUVOT01FTTsKPgoKUmVzdCBs b29rcyBnb29kIHRvIG1lLgoKUmVnYXJkcywKClR2cnRrbwpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdm eEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFp bG1hbi9saXN0aW5mby9pbnRlbC1nZngK