From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH 22/26] drm/i915: Split out i915_gem_object_set_tiling() Date: Mon, 9 Jan 2017 15:43:46 +0000 Message-ID: References: <20161231120702.21204-1-chris@chris-wilson.co.uk> <20161231120702.21204-23-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTPS id E32A46E14D for ; Mon, 9 Jan 2017 15:43:49 +0000 (UTC) In-Reply-To: <20161231120702.21204-23-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 Ck9uIDMxLzEyLzIwMTYgMTI6MDYsIENocmlzIFdpbHNvbiB3cm90ZToKPiBFeHBvc2UgYW4gaW50 ZXJmYWNlIGZvciBjaGFuZ2luZyB0aGUgdGlsaW5nIGFuZCBzdHJpZGUgb24gYW4gb2JqZWN0LAo+ IHRoYXQgaW5jbHVkZXMgdGhlIGNvbXBsZXhpdHkgb2YgY2hlY2tpbmcgZm9yIGNvbmZsaWN0aW5n IGJpbmRpbmdzIGFuZAo+IGZlbmNlIHJlZ2lzdGVycy4KPgo+IFNpZ25lZC1vZmYtYnk6IENocmlz IFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgo+IC0tLQo+ICBkcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2dlbV9vYmplY3QuaCB8ICAgMyArCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZ2VtX3RpbGluZy5jIHwgMjM4ICsrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0t LQo+ICAyIGZpbGVzIGNoYW5nZWQsIDEyOCBpbnNlcnRpb25zKCspLCAxMTMgZGVsZXRpb25zKC0p Cj4KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fb2JqZWN0Lmgg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9vYmplY3QuaAo+IGluZGV4IDZhMzY4ZGU5 ZDgxZS4uNzg5YmI0NGM5MTQ5IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZ2VtX29iamVjdC5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fb2Jq ZWN0LmgKPiBAQCAtMzE3LDYgKzMxNyw5IEBAIGk5MTVfZ2VtX29iamVjdF9nZXRfc3RyaWRlKHN0 cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCj4gIAlyZXR1cm4gb2JqLT50aWxpbmdfYW5k X3N0cmlkZSAmIFNUUklERV9NQVNLOwo+ICB9Cj4KPiAraW50IGk5MTVfZ2VtX29iamVjdF9zZXRf dGlsaW5nKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4gKwkJCSAgICAgICB1bnNp Z25lZCBpbnQgdGlsaW5nLCB1bnNpZ25lZCBpbnQgc3RyaWRlKTsKPiArCj4gIHN0YXRpYyBpbmxp bmUgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqCj4gIGk5MTVfZ2VtX29iamVjdF9sYXN0X3dyaXRl X2VuZ2luZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQo+ICB7Cj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3RpbGluZy5jIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9nZW1fdGlsaW5nLmMKPiBpbmRleCA2YzViOGEwZTgzMjUuLjRlYzI2MjBi N2JmOSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV90aWxpbmcu Ywo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3RpbGluZy5jCj4gQEAgLTYw LDYxICs2MCw1NiBAQAo+Cj4gIC8qIENoZWNrIHBpdGNoIGNvbnN0cmlhbnRzIGZvciBhbGwgY2hp cHMgJiB0aWxpbmcgZm9ybWF0cyAqLwo+ICBzdGF0aWMgYm9vbAo+IC1pOTE1X3RpbGluZ19vayhz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gLQkgICAgICAgaW50IHN0cmlkZSwg aW50IHNpemUsIGludCB0aWxpbmdfbW9kZSkKPiAraTkxNV90aWxpbmdfb2soc3RydWN0IGRybV9p OTE1X2dlbV9vYmplY3QgKm9iaiwKPiArCSAgICAgICB1bnNpZ25lZCBpbnQgdGlsaW5nLCB1bnNp Z25lZCBpbnQgc3RyaWRlKQoKU2hvdWxkIGl0LCBvciBzaG91bGQgaXQgbm90IG5vdyBoYXZlIGFu IF9vYmooZWN0KV8gc29tZXdoZXJlIGluIHRoZSAKZnVuY3Rpb24gbmFtZT8gaTkxNV9nZW1fb2Jq ZWN0X3RpbGluZ19vaywgb3IgaTkxNV9nZW1fdGlsaW5nX29rX2Zvcl9vYmplY3Q/Cgo+ICB7Cj4g LQlpbnQgdGlsZV93aWR0aDsKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gdG9f aTkxNShvYmotPmJhc2UuZGV2KTsKPiArCXVuc2lnbmVkIGludCB0aWxlX3dpZHRoOwo+Cj4gIAkv KiBMaW5lYXIgaXMgYWx3YXlzIGZpbmUgKi8KPiAtCWlmICh0aWxpbmdfbW9kZSA9PSBJOTE1X1RJ TElOR19OT05FKQo+ICsJaWYgKHRpbGluZyA9PSBJOTE1X1RJTElOR19OT05FKQo+ICAJCXJldHVy biB0cnVlOwo+Cj4gLQlpZiAodGlsaW5nX21vZGUgPiBJOTE1X1RJTElOR19MQVNUKQo+ICsJaWYg KHRpbGluZyA+IEk5MTVfVElMSU5HX0xBU1QpCj4gIAkJcmV0dXJuIGZhbHNlOwo+Cj4gLQlpZiAo SVNfR0VOMihkZXZfcHJpdikgfHwKPiAtCSAgICAodGlsaW5nX21vZGUgPT0gSTkxNV9USUxJTkdf WSAmJiBIQVNfMTI4X0JZVEVfWV9USUxJTkcoZGV2X3ByaXYpKSkKPiAtCQl0aWxlX3dpZHRoID0g MTI4Owo+IC0JZWxzZQo+IC0JCXRpbGVfd2lkdGggPSA1MTI7Cj4gLQo+ICAJLyogY2hlY2sgbWF4 aW11bSBzdHJpZGUgJiBvYmplY3Qgc2l6ZSAqLwo+ICAJLyogaTk2NSsgc3RvcmVzIHRoZSBlbmQg YWRkcmVzcyBvZiB0aGUgZ3R0IG1hcHBpbmcgaW4gdGhlIGZlbmNlCj4gIAkgKiByZWcsIHNvIGRv bnQgYm90aGVyIHRvIGNoZWNrIHRoZSBzaXplICovCj4gLQlpZiAoSU5URUxfR0VOKGRldl9wcml2 KSA+PSA3KSB7Cj4gKwlpZiAoSU5URUxfR0VOKGk5MTUpID49IDcpIHsKPiAgCQlpZiAoc3RyaWRl IC8gMTI4ID4gR0VON19GRU5DRV9NQVhfUElUQ0hfVkFMKQo+ICAJCQlyZXR1cm4gZmFsc2U7Cj4g LQl9IGVsc2UgaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gNCkgewo+ICsJfSBlbHNlIGlmIChJ TlRFTF9HRU4oaTkxNSkgPj0gNCkgewo+ICAJCWlmIChzdHJpZGUgLyAxMjggPiBJOTY1X0ZFTkNF X01BWF9QSVRDSF9WQUwpCj4gIAkJCXJldHVybiBmYWxzZTsKPiAgCX0gZWxzZSB7Cj4gIAkJaWYg KHN0cmlkZSA+IDgxOTIpCj4gIAkJCXJldHVybiBmYWxzZTsKPgo+IC0JCWlmIChJU19HRU4zKGRl dl9wcml2KSkgewo+IC0JCQlpZiAoc2l6ZSA+IEk4MzBfRkVOQ0VfTUFYX1NJWkVfVkFMIDw8IDIw KQo+ICsJCWlmIChJU19HRU4zKGk5MTUpKSB7Cj4gKwkJCWlmIChvYmotPmJhc2Uuc2l6ZSA+IEk4 MzBfRkVOQ0VfTUFYX1NJWkVfVkFMIDw8IDIwKQo+ICAJCQkJcmV0dXJuIGZhbHNlOwo+ICAJCX0g ZWxzZSB7Cj4gLQkJCWlmIChzaXplID4gSTgzMF9GRU5DRV9NQVhfU0laRV9WQUwgPDwgMTkpCj4g KwkJCWlmIChvYmotPmJhc2Uuc2l6ZSA+IEk4MzBfRkVOQ0VfTUFYX1NJWkVfVkFMIDw8IDE5KQo+ ICAJCQkJcmV0dXJuIGZhbHNlOwo+ICAJCX0KPiAgCX0KPgo+IC0JaWYgKHN0cmlkZSA8IHRpbGVf d2lkdGgpCj4gKwlpZiAoSVNfR0VOMihpOTE1KSB8fAo+ICsJICAgICh0aWxpbmcgPT0gSTkxNV9U SUxJTkdfWSAmJiBIQVNfMTI4X0JZVEVfWV9USUxJTkcoaTkxNSkpKQo+ICsJCXRpbGVfd2lkdGgg PSAxMjg7Cj4gKwllbHNlCj4gKwkJdGlsZV93aWR0aCA9IDUxMjsKPiArCj4gKwlpZiAoc3RyaWRl ICYgKHRpbGVfd2lkdGggLSAxKSkKPiAgCQlyZXR1cm4gZmFsc2U7Cj4KPiAgCS8qIDk2NSsganVz dCBuZWVkcyBtdWx0aXBsZXMgb2YgdGlsZSB3aWR0aCAqLwo+IC0JaWYgKElOVEVMX0dFTihkZXZf cHJpdikgPj0gNCkgewo+IC0JCWlmIChzdHJpZGUgJiAodGlsZV93aWR0aCAtIDEpKQo+IC0JCQly ZXR1cm4gZmFsc2U7Cj4gKwlpZiAoSU5URUxfR0VOKGk5MTUpID49IDQpCj4gIAkJcmV0dXJuIHRy dWU7Cj4gLQl9Cj4KPiAgCS8qIFByZS05NjUgbmVlZHMgcG93ZXIgb2YgdHdvIHRpbGUgd2lkdGhz ICovCgpJcyB0aGlzIGNvbW1lbnQgYWN0dWFsbHkgcmVmZXJyaW5nIHRvIHRoZSBzdHJpZGU/IHRp bGVfd2lkdGggaXMgYWx3YXlzIGEgCnBvd2VyIG9mIHR3byBzaW5jZSBpdCBpcyBzZXQgYWJvdmUu Cgo+IC0JaWYgKHN0cmlkZSAmIChzdHJpZGUgLSAxKSkKPiAtCQlyZXR1cm4gZmFsc2U7Cj4gLQo+ IC0JcmV0dXJuIHRydWU7Cj4gKwlyZXR1cm4gaXNfcG93ZXJfb2ZfMihzdHJpZGUpOwo+ICB9CgpM b29rcyBPSywgYnV0IHdvdWxkIGhhdmUgYmVlbiBiZXR0ZXIgaWYgeW91IGxlZnQgdGhlIG9wdGlt aXNpbmcgYml0cyBvdXQgCmZyb20gdGhpcyBwYXRjaC4KCj4gIHN0YXRpYyBib29sIGk5MTVfdm1h X2ZlbmNlX3ByZXBhcmUoc3RydWN0IGk5MTVfdm1hICp2bWEsCj4gQEAgLTE2Myw2ICsxNTgsOTkg QEAgaTkxNV9nZW1fb2JqZWN0X2ZlbmNlX3ByZXBhcmUoc3RydWN0IGRybV9pOTE1X2dlbV9vYmpl Y3QgKm9iaiwKPiAgCXJldHVybiAwOwo+ICB9Cj4KPiAraW50Cj4gK2k5MTVfZ2VtX29iamVjdF9z ZXRfdGlsaW5nKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4gKwkJCSAgIHVuc2ln bmVkIGludCB0aWxpbmcsIHVuc2lnbmVkIGludCBzdHJpZGUpCj4gK3sKPiArCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICppOTE1ID0gdG9faTkxNShvYmotPmJhc2UuZGV2KTsKPiArCXN0cnVjdCBp OTE1X3ZtYSAqdm1hOwo+ICsJaW50IGVycjsKPiArCj4gKwkvKiBNYWtlIHN1cmUgd2UgZG9uJ3Qg Y3Jvc3MtY29udGFtaW5hdGUgb2JqLT50aWxpbmdfYW5kX3N0cmlkZSAqLwo+ICsJQlVJTERfQlVH X09OKEk5MTVfVElMSU5HX0xBU1QgJiBTVFJJREVfTUFTSyk7Cj4gKwo+ICsJR0VNX0JVR19PTigh aTkxNV90aWxpbmdfb2sob2JqLCB0aWxpbmcsIHN0cmlkZSkpOwo+ICsJR0VNX0JVR19PTighc3Ry aWRlIF4gKHRpbGluZyA9PSBJOTE1X1RJTElOR19OT05FKSk7CgpXaHkgaXMgaTkxNV90aWxpbmdf b2sgbm90IGNoZWNraW5nIGZvciB0aGlzIGFuZCBoYW5kbGluZyBpdCBncmFjZWZ1bGx5PyAKSXQg bWlnaHQgYmUgZXZlbiB1c2VyIHRyaWdnZXJhYmxlLCBub3Qgc3VyZSwgZG9uJ3Qgc2VlIHRoZSB3 aG9sZSAKZnVuY3Rpb24gaW4gdGhlIGRpZmYuCgo+ICsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmaTkx NS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gKwo+ICsJaWYgKCh0aWxpbmcgfCBzdHJpZGUpID09IG9i ai0+dGlsaW5nX2FuZF9zdHJpZGUpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJaWYgKG9iai0+cGlu X2Rpc3BsYXkgfHwgb2JqLT5mcmFtZWJ1ZmZlcl9yZWZlcmVuY2VzKQo+ICsJCXJldHVybiAtRUJV U1k7Cj4gKwo+ICsJLyogV2UgbmVlZCB0byByZWJpbmQgdGhlIG9iamVjdCBpZiBpdHMgY3VycmVu dCBhbGxvY2F0aW9uCj4gKwkgKiBubyBsb25nZXIgbWVldHMgdGhlIGFsaWdubWVudCByZXN0cmlj dGlvbnMgZm9yIGl0cyBuZXcKPiArCSAqIHRpbGluZyBtb2RlLiBPdGhlcndpc2Ugd2UgY2FuIGp1 c3QgbGVhdmUgaXQgYWxvbmUsIGJ1dAo+ICsJICogbmVlZCB0byBlbnN1cmUgdGhhdCBhbnkgZmVu Y2UgcmVnaXN0ZXIgaXMgdXBkYXRlZCBiZWZvcmUKPiArCSAqIHRoZSBuZXh0IGZlbmNlZCAoZWl0 aGVyIHRocm91Z2ggdGhlIEdUVCBvciBieSB0aGUgQkxUIHVuaXQKPiArCSAqIG9uIG9sZGVyIEdQ VXMpIGFjY2Vzcy4KPiArCSAqCj4gKwkgKiBBZnRlciB1cGRhdGluZyB0aGUgdGlsaW5nIHBhcmFt ZXRlcnMsIHdlIHRoZW4gZmxhZyB3aGV0aGVyCj4gKwkgKiB3ZSBuZWVkIHRvIHVwZGF0ZSBhbiBh c3NvY2lhdGVkIGZlbmNlIHJlZ2lzdGVyLiBOb3RlIHRoaXMKPiArCSAqIGhhcyB0byBhbHNvIGlu Y2x1ZGUgdGhlIHVuZmVuY2VkIHJlZ2lzdGVyIHRoZSBHUFUgdXNlcwo+ICsJICogd2hpbHN0IGV4 ZWN1dGluZyBhIGZlbmNlZCBjb21tYW5kIGZvciBhbiB1bnRpbGVkIG9iamVjdC4KPiArCSAqLwo+ ICsKPiArCWVyciA9IGk5MTVfZ2VtX29iamVjdF9mZW5jZV9wcmVwYXJlKG9iaiwgdGlsaW5nLCBz dHJpZGUpOwo+ICsJaWYgKGVycikKPiArCQlyZXR1cm4gZXJyOwo+ICsKPiArCS8qIElmIHRoZSBt ZW1vcnkgaGFzIHVua25vd24gKGkuZS4gdmFyeWluZykgc3dpenpsaW5nLCB3ZSBwaW4gdGhlCj4g KwkgKiBwYWdlcyB0byBwcmV2ZW50IHRoZW0gYmVpbmcgc3dhcHBlZCBvdXQgYW5kIGNhdXNpbmcg Y29ycnVwdGlvbgo+ICsJICogZHVlIHRvIHRoZSBjaGFuZ2UgaW4gc3dpenpsaW5nLgo+ICsJICov Cj4gKwltdXRleF9sb2NrKCZvYmotPm1tLmxvY2spOwo+ICsJaWYgKG9iai0+bW0ucGFnZXMgJiYK PiArCSAgICBvYmotPm1tLm1hZHYgPT0gSTkxNV9NQURWX1dJTExORUVEICYmCj4gKwkgICAgaTkx NS0+cXVpcmtzICYgUVVJUktfUElOX1NXSVpaTEVEX1BBR0VTKSB7Cj4gKwkJaWYgKHRpbGluZyA9 PSBJOTE1X1RJTElOR19OT05FKSB7Cj4gKwkJCUdFTV9CVUdfT04oIW9iai0+bW0ucXVpcmtlZCk7 Cj4gKwkJCV9faTkxNV9nZW1fb2JqZWN0X3VucGluX3BhZ2VzKG9iaik7Cj4gKwkJCW9iai0+bW0u cXVpcmtlZCA9IGZhbHNlOwo+ICsJCX0KPiArCQlpZiAoIWk5MTVfZ2VtX29iamVjdF9pc190aWxl ZChvYmopKSB7Cj4gKwkJCUdFTV9CVUdfT04oIW9iai0+bW0ucXVpcmtlZCk7Cj4gKwkJCV9faTkx NV9nZW1fb2JqZWN0X3Bpbl9wYWdlcyhvYmopOwo+ICsJCQlvYmotPm1tLnF1aXJrZWQgPSB0cnVl Owo+ICsJCX0KPiArCX0KPiArCW11dGV4X3VubG9jaygmb2JqLT5tbS5sb2NrKTsKPiArCj4gKwls aXN0X2Zvcl9lYWNoX2VudHJ5KHZtYSwgJm9iai0+dm1hX2xpc3QsIG9ial9saW5rKSB7Cj4gKwkJ aWYgKCFpOTE1X3ZtYV9pc19nZ3R0KHZtYSkpCj4gKwkJCWJyZWFrOwo+ICsKPiArCQl2bWEtPmZl bmNlX3NpemUgPQo+ICsJCQlpOTE1X2dlbV9nZXRfZ2d0dF9zaXplKGk5MTUsIHZtYS0+c2l6ZSwK PiArCQkJCQkgICAgICAgdGlsaW5nLCBzdHJpZGUpOwo+ICsJCXZtYS0+ZmVuY2VfYWxpZ25tZW50 ID0KPiArCQkJaTkxNV9nZW1fZ2V0X2dndHRfYWxpZ25tZW50KGk5MTUsIHZtYS0+c2l6ZSwKPiAr CQkJCQkJICAgIHRpbGluZywgc3RyaWRlKTsKPiArCj4gKwkJaWYgKHZtYS0+ZmVuY2UpCj4gKwkJ CXZtYS0+ZmVuY2UtPmRpcnR5ID0gdHJ1ZTsKPiArCX0KPiArCj4gKwlvYmotPnRpbGluZ19hbmRf c3RyaWRlID0gdGlsaW5nIHwgc3RyaWRlOwo+ICsKPiArCS8qIEZvcmNlIHRoZSBmZW5jZSB0byBi ZSByZWFjcXVpcmVkIGZvciBHVFQgYWNjZXNzICovCj4gKwlpOTE1X2dlbV9yZWxlYXNlX21tYXAo b2JqKTsKPiArCj4gKwkvKiBUcnkgdG8gcHJlYWxsb2NhdGUgbWVtb3J5IHJlcXVpcmVkIHRvIHNh dmUgc3dpenpsaW5nIG9uIHB1dC1wYWdlcyAqLwo+ICsJaWYgKGk5MTVfZ2VtX29iamVjdF9uZWVk c19iaXQxN19zd2l6emxlKG9iaikpIHsKPiArCQlpZiAoIW9iai0+Yml0XzE3KSB7Cj4gKwkJCW9i ai0+Yml0XzE3ID0ga2NhbGxvYyhCSVRTX1RPX0xPTkdTKG9iai0+YmFzZS5zaXplID4+IFBBR0Vf U0hJRlQpLAo+ICsJCQkJCSAgICAgIHNpemVvZihsb25nKSwgR0ZQX0tFUk5FTCk7Cj4gKwkJfQo+ ICsJfSBlbHNlIHsKPiArCQlrZnJlZShvYmotPmJpdF8xNyk7Cj4gKwkJb2JqLT5iaXRfMTcgPSBO VUxMOwo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICAvKioKPiAgICogaTkxNV9n ZW1fc2V0X3RpbGluZ19pb2N0bCAtIElPQ1RMIGhhbmRsZXIgdG8gc2V0IHRpbGluZyBtb2RlCj4g ICAqIEBkZXY6IERSTSBkZXZpY2UKPiBAQCAtMTgyLDI2ICsyNzAsMTUgQEAgaTkxNV9nZW1fc2V0 X3RpbGluZ19pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAo+ICAJCQkg IHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKPiAgewo+ICAJc3RydWN0IGRybV9pOTE1X2dlbV9zZXRf dGlsaW5nICphcmdzID0gZGF0YTsKPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diA9IHRvX2k5MTUoZGV2KTsKPiAgCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7Cj4g LQlpbnQgZXJyID0gMDsKPiAtCj4gLQkvKiBNYWtlIHN1cmUgd2UgZG9uJ3QgY3Jvc3MtY29udGFt aW5hdGUgb2JqLT50aWxpbmdfYW5kX3N0cmlkZSAqLwo+IC0JQlVJTERfQlVHX09OKEk5MTVfVElM SU5HX0xBU1QgJiBTVFJJREVfTUFTSyk7Cj4gKwlpbnQgZXJyOwo+Cj4gIAlvYmogPSBpOTE1X2dl bV9vYmplY3RfbG9va3VwKGZpbGUsIGFyZ3MtPmhhbmRsZSk7Cj4gIAlpZiAoIW9iaikKPiAgCQly ZXR1cm4gLUVOT0VOVDsKPgo+IC0JaWYgKCFpOTE1X3RpbGluZ19vayhkZXZfcHJpdiwKPiAtCQkJ ICAgIGFyZ3MtPnN0cmlkZSwgb2JqLT5iYXNlLnNpemUsIGFyZ3MtPnRpbGluZ19tb2RlKSkgewo+ IC0JCWk5MTVfZ2VtX29iamVjdF9wdXQob2JqKTsKPiAtCQlyZXR1cm4gLUVJTlZBTDsKPiAtCX0K PiAtCj4gLQltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Cj4gLQlpZiAob2JqLT5waW5f ZGlzcGxheSB8fCBvYmotPmZyYW1lYnVmZmVyX3JlZmVyZW5jZXMpIHsKPiAtCQllcnIgPSAtRUJV U1k7Cj4gKwlpZiAoIWk5MTVfdGlsaW5nX29rKG9iaiwgYXJncy0+dGlsaW5nX21vZGUsIGFyZ3Mt PnN0cmlkZSkpIHsKPiArCQllcnIgPSAtRUlOVkFMOwo+ICAJCWdvdG8gZXJyOwo+ICAJfQo+Cj4g QEAgLTIxMCw5ICsyODcsOSBAQCBpOTE1X2dlbV9zZXRfdGlsaW5nX2lvY3RsKHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCj4gIAkJYXJncy0+c3RyaWRlID0gMDsKPiAgCX0gZWxz ZSB7Cj4gIAkJaWYgKGFyZ3MtPnRpbGluZ19tb2RlID09IEk5MTVfVElMSU5HX1gpCj4gLQkJCWFy Z3MtPnN3aXp6bGVfbW9kZSA9IGRldl9wcml2LT5tbS5iaXRfNl9zd2l6emxlX3g7Cj4gKwkJCWFy Z3MtPnN3aXp6bGVfbW9kZSA9IHRvX2k5MTUoZGV2KS0+bW0uYml0XzZfc3dpenpsZV94Owo+ICAJ CWVsc2UKPiAtCQkJYXJncy0+c3dpenpsZV9tb2RlID0gZGV2X3ByaXYtPm1tLmJpdF82X3N3aXp6 bGVfeTsKPiArCQkJYXJncy0+c3dpenpsZV9tb2RlID0gdG9faTkxNShkZXYpLT5tbS5iaXRfNl9z d2l6emxlX3k7Cj4KPiAgCQkvKiBIaWRlIGJpdCAxNyBzd2l6emxpbmcgZnJvbSB0aGUgdXNlci4g IFRoaXMgcHJldmVudHMgb2xkIE1lc2EKPiAgCQkgKiBmcm9tIGFib3J0aW5nIHRoZSBhcHBsaWNh dGlvbiBvbiBzdyBmYWxsYmFja3MgdG8gYml0IDE3LAo+IEBAIC0yMzQsODQgKzMxMSwxOSBAQCBp OTE1X2dlbV9zZXRfdGlsaW5nX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRh dGEsCj4gIAkJfQo+ICAJfQo+Cj4gLQlpZiAoYXJncy0+dGlsaW5nX21vZGUgIT0gaTkxNV9nZW1f b2JqZWN0X2dldF90aWxpbmcob2JqKSB8fAo+IC0JICAgIGFyZ3MtPnN0cmlkZSAhPSBpOTE1X2dl bV9vYmplY3RfZ2V0X3N0cmlkZShvYmopKSB7Cj4gLQkJLyogV2UgbmVlZCB0byByZWJpbmQgdGhl IG9iamVjdCBpZiBpdHMgY3VycmVudCBhbGxvY2F0aW9uCj4gLQkJICogbm8gbG9uZ2VyIG1lZXRz IHRoZSBhbGlnbm1lbnQgcmVzdHJpY3Rpb25zIGZvciBpdHMgbmV3Cj4gLQkJICogdGlsaW5nIG1v ZGUuIE90aGVyd2lzZSB3ZSBjYW4ganVzdCBsZWF2ZSBpdCBhbG9uZSwgYnV0Cj4gLQkJICogbmVl ZCB0byBlbnN1cmUgdGhhdCBhbnkgZmVuY2UgcmVnaXN0ZXIgaXMgdXBkYXRlZCBiZWZvcmUKPiAt CQkgKiB0aGUgbmV4dCBmZW5jZWQgKGVpdGhlciB0aHJvdWdoIHRoZSBHVFQgb3IgYnkgdGhlIEJM VCB1bml0Cj4gLQkJICogb24gb2xkZXIgR1BVcykgYWNjZXNzLgo+IC0JCSAqCj4gLQkJICogQWZ0 ZXIgdXBkYXRpbmcgdGhlIHRpbGluZyBwYXJhbWV0ZXJzLCB3ZSB0aGVuIGZsYWcgd2hldGhlcgo+ IC0JCSAqIHdlIG5lZWQgdG8gdXBkYXRlIGFuIGFzc29jaWF0ZWQgZmVuY2UgcmVnaXN0ZXIuIE5v dGUgdGhpcwo+IC0JCSAqIGhhcyB0byBhbHNvIGluY2x1ZGUgdGhlIHVuZmVuY2VkIHJlZ2lzdGVy IHRoZSBHUFUgdXNlcwo+IC0JCSAqIHdoaWxzdCBleGVjdXRpbmcgYSBmZW5jZWQgY29tbWFuZCBm b3IgYW4gdW50aWxlZCBvYmplY3QuCj4gLQkJICovCj4gKwllcnIgPSBtdXRleF9sb2NrX2ludGVy cnVwdGlibGUoJmRldi0+c3RydWN0X211dGV4KTsKPiArCWlmIChlcnIpCj4gKwkJZ290byBlcnI7 Cj4KPiAtCQllcnIgPSBpOTE1X2dlbV9vYmplY3RfZmVuY2VfcHJlcGFyZShvYmosCj4gLQkJCQkJ CSAgICBhcmdzLT50aWxpbmdfbW9kZSwKPiAtCQkJCQkJICAgIGFyZ3MtPnN0cmlkZSk7Cj4gLQkJ aWYgKCFlcnIpIHsKPiAtCQkJc3RydWN0IGk5MTVfdm1hICp2bWE7Cj4gLQo+IC0JCQltdXRleF9s b2NrKCZvYmotPm1tLmxvY2spOwo+IC0JCQlpZiAob2JqLT5tbS5wYWdlcyAmJgo+IC0JCQkgICAg b2JqLT5tbS5tYWR2ID09IEk5MTVfTUFEVl9XSUxMTkVFRCAmJgo+IC0JCQkgICAgZGV2X3ByaXYt PnF1aXJrcyAmIFFVSVJLX1BJTl9TV0laWkxFRF9QQUdFUykgewo+IC0JCQkJaWYgKGFyZ3MtPnRp bGluZ19tb2RlID09IEk5MTVfVElMSU5HX05PTkUpIHsKPiAtCQkJCQlHRU1fQlVHX09OKCFvYmot Pm1tLnF1aXJrZWQpOwo+IC0JCQkJCV9faTkxNV9nZW1fb2JqZWN0X3VucGluX3BhZ2VzKG9iaik7 Cj4gLQkJCQkJb2JqLT5tbS5xdWlya2VkID0gZmFsc2U7Cj4gLQkJCQl9Cj4gLQkJCQlpZiAoIWk5 MTVfZ2VtX29iamVjdF9pc190aWxlZChvYmopKSB7Cj4gLQkJCQkJR0VNX0JVR19PTighb2JqLT5t bS5xdWlya2VkKTsKPiAtCQkJCQlfX2k5MTVfZ2VtX29iamVjdF9waW5fcGFnZXMob2JqKTsKPiAt CQkJCQlvYmotPm1tLnF1aXJrZWQgPSB0cnVlOwo+IC0JCQkJfQo+IC0JCQl9Cj4gLQkJCW11dGV4 X3VubG9jaygmb2JqLT5tbS5sb2NrKTsKPiAtCj4gLQkJCWxpc3RfZm9yX2VhY2hfZW50cnkodm1h LCAmb2JqLT52bWFfbGlzdCwgb2JqX2xpbmspIHsKPiAtCQkJCWlmICghaTkxNV92bWFfaXNfZ2d0 dCh2bWEpKQo+IC0JCQkJCWJyZWFrOwo+IC0KPiAtCQkJCXZtYS0+ZmVuY2Vfc2l6ZSA9IGk5MTVf Z2VtX2dldF9nZ3R0X3NpemUoZGV2X3ByaXYsIHZtYS0+c2l6ZSwKPiAtCQkJCQkJCQkJIGFyZ3Mt PnRpbGluZ19tb2RlLAo+IC0JCQkJCQkJCQkgYXJncy0+c3RyaWRlKTsKPiAtCQkJCXZtYS0+ZmVu Y2VfYWxpZ25tZW50ID0gaTkxNV9nZW1fZ2V0X2dndHRfYWxpZ25tZW50KGRldl9wcml2LCB2bWEt PnNpemUsCj4gLQkJCQkJCQkJCQkgICBhcmdzLT50aWxpbmdfbW9kZSwKPiAtCQkJCQkJCQkJCSAg IGFyZ3MtPnN0cmlkZSk7Cj4gLQo+IC0JCQkJaWYgKHZtYS0+ZmVuY2UpCj4gLQkJCQkJdm1hLT5m ZW5jZS0+ZGlydHkgPSB0cnVlOwo+IC0JCQl9Cj4gLQkJCW9iai0+dGlsaW5nX2FuZF9zdHJpZGUg PQo+IC0JCQkJYXJncy0+c3RyaWRlIHwgYXJncy0+dGlsaW5nX21vZGU7Cj4gLQo+IC0JCQkvKiBG b3JjZSB0aGUgZmVuY2UgdG8gYmUgcmVhY3F1aXJlZCBmb3IgR1RUIGFjY2VzcyAqLwo+IC0JCQlp OTE1X2dlbV9yZWxlYXNlX21tYXAob2JqKTsKPiAtCQl9Cj4gLQl9Cj4gLQkvKiB3ZSBoYXZlIHRv IG1haW50YWluIHRoaXMgZXhpc3RpbmcgQUJJLi4uICovCj4gKwllcnIgPSBpOTE1X2dlbV9vYmpl Y3Rfc2V0X3RpbGluZyhvYmosIGFyZ3MtPnRpbGluZ19tb2RlLCBhcmdzLT5zdHJpZGUpOwo+ICsJ bXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Cj4gKwo+ICsJLyogV2UgaGF2ZSB0byBt YWludGFpbiB0aGlzIGV4aXN0aW5nIEFCSS4uLiAqLwo+ICAJYXJncy0+c3RyaWRlID0gaTkxNV9n ZW1fb2JqZWN0X2dldF9zdHJpZGUob2JqKTsKPiAgCWFyZ3MtPnRpbGluZ19tb2RlID0gaTkxNV9n ZW1fb2JqZWN0X2dldF90aWxpbmcob2JqKTsKPgo+IC0JLyogVHJ5IHRvIHByZWFsbG9jYXRlIG1l bW9yeSByZXF1aXJlZCB0byBzYXZlIHN3aXp6bGluZyBvbiBwdXQtcGFnZXMgKi8KPiAtCWlmIChp OTE1X2dlbV9vYmplY3RfbmVlZHNfYml0MTdfc3dpenpsZShvYmopKSB7Cj4gLQkJaWYgKG9iai0+ Yml0XzE3ID09IE5VTEwpIHsKPiAtCQkJb2JqLT5iaXRfMTcgPSBrY2FsbG9jKEJJVFNfVE9fTE9O R1Mob2JqLT5iYXNlLnNpemUgPj4gUEFHRV9TSElGVCksCj4gLQkJCQkJICAgICAgc2l6ZW9mKGxv bmcpLCBHRlBfS0VSTkVMKTsKPiAtCQl9Cj4gLQl9IGVsc2Ugewo+IC0JCWtmcmVlKG9iai0+Yml0 XzE3KTsKPiAtCQlvYmotPmJpdF8xNyA9IE5VTEw7Cj4gLQl9Cj4gLQo+ICBlcnI6Cj4gIAlpOTE1 X2dlbV9vYmplY3RfcHV0KG9iaik7Cj4gLQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4 KTsKPiAtCj4gIAlyZXR1cm4gZXJyOwo+ICB9Cj4KPgoKUmVnYXJkcywKClR2cnRrbwpfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGlu ZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVl ZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK