From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH 08/32] drm/i915: Introduce struct intel_wakeref Date: Wed, 17 Apr 2019 10:45:15 +0100 Message-ID: References: <20190417075657.19456-1-chris@chris-wilson.co.uk> <20190417075657.19456-8-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 mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTPS id E7C8C89FC3 for ; Wed, 17 Apr 2019 09:45:17 +0000 (UTC) In-Reply-To: <20190417075657.19456-8-chris@chris-wilson.co.uk> Content-Language: en-US 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 Ck9uIDE3LzA0LzIwMTkgMDg6NTYsIENocmlzIFdpbHNvbiB3cm90ZToKPiBGb3IgY29udHJvbGxp bmcgcnVudGltZSBwbSBvZiB0aGUgR1QgYW5kIGVuZ2luZXMsIHdlIHdvdWxkIGxpa2UgdG8gaGF2 ZQo+IGEgY2FsbGJhY2sgdG8gZG8gZXh0cmEgd29yayB0aGUgZmlyc3QgdGltZSB3ZSB3YWtlIHVw IGFuZCB0aGUgbGFzdCB0aW1lCj4gd2UgZHJvcCB0aGUgd2FrZXJlZi4gVGhpcyBmaXJzdC9sYXN0 IGFjY2VzcyBuZWVkcyBzZXJpYWxpc2F0aW9uIGFuZCBzbwo+IHdlIGVuY29tcGFzcyBhIG11dGV4 IHdpdGggdGhlIHJlZ3VsYXIgaW50ZWxfd2FrZXJlZl90IHRyYWNrZXIuCj4gCj4gdjI6IERyb3Ag dGhlIF9vbmNlIG5hbWluZyBhbmQgcmVwb3J0IHRoZSBlcnJvcnMuCj4gCj4gU2lnbmVkLW9mZi1i eTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+Cj4gQ2M7IFR2cnRrbyBV cnN1bGluIDx0dnJ0a28udXJzdWxpbkBpbnRlbC5jb20+Cj4gLS0tCj4gICBkcml2ZXJzL2dwdS9k cm0vaTkxNS9NYWtlZmlsZSAgICAgICAgICAgICB8ICAgMSArCj4gICBkcml2ZXJzL2dwdS9kcm0v aTkxNS9NYWtlZmlsZS5oZWFkZXItdGVzdCB8ICAgMyArLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9kcnYuaCAgICAgICAgICAgfCAgIDMgKy0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX3dha2VyZWYuYyAgICAgIHwgIDYxICsrKysrKysrKysKPiAgIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX3dha2VyZWYuaCAgICAgIHwgMTMzICsrKysrKysrKysrKysrKysrKysrKysK PiAgIDUgZmlsZXMgY2hhbmdlZCwgMTk4IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCj4g ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfd2FrZXJlZi5j Cj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfd2FrZXJl Zi5oCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKPiBpbmRleCA0MDEzMGNmNWMwMDMuLjIzM2JhZDVl MzYxZiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQo+ICsrKyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCj4gQEAgLTUwLDYgKzUwLDcgQEAgaTkxNS15 ICs9IGk5MTVfZHJ2Lm8gXAo+ICAgCSAgaW50ZWxfZGV2aWNlX2luZm8ubyBcCj4gICAJICBpbnRl bF9wbS5vIFwKPiAgIAkgIGludGVsX3J1bnRpbWVfcG0ubyBcCj4gKwkgIGludGVsX3dha2VyZWYu byBcCj4gICAJICBpbnRlbF91bmNvcmUubwo+ICAgCj4gICAjIGNvcmUgbGlicmFyeSBjb2RlCj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlLmhlYWRlci10ZXN0IGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUuaGVhZGVyLXRlc3QKPiBpbmRleCA5NmE1ZDkw NjI5ZWMuLmU2YjNlNzU4ODg2MCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9N YWtlZmlsZS5oZWFkZXItdGVzdAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxl LmhlYWRlci10ZXN0Cj4gQEAgLTMxLDcgKzMxLDggQEAgaGVhZGVyX3Rlc3QgOj0gXAo+ICAgCWlu dGVsX3Bzci5oIFwKPiAgIAlpbnRlbF9zZHZvLmggXAo+ICAgCWludGVsX3Nwcml0ZS5oIFwKPiAt CWludGVsX3R2LmgKPiArCWludGVsX3R2LmggXAo+ICsJaW50ZWxfd2FrZXJlZi5oCj4gICAKPiAg IHF1aWV0X2NtZF9oZWFkZXJfdGVzdCA9IEhEUlRFU1QgJEAKPiAgICAgICAgIGNtZF9oZWFkZXJf dGVzdCA9IGVjaG8gIlwjaW5jbHVkZSBcIiQoPEYpXCIiID4gJEAKPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf ZHJ2LmgKPiBpbmRleCBmYWQ1MzA2ZjA3ZGEuLjYyYTdlOTFhY2Q3ZiAxMDA2NDQKPiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9kcnYuaAo+IEBAIC03NCw2ICs3NCw3IEBACj4gICAjaW5jbHVkZSAiaW50ZWxfb3By ZWdpb24uaCIKPiAgICNpbmNsdWRlICJpbnRlbF91Yy5oIgo+ICAgI2luY2x1ZGUgImludGVsX3Vu Y29yZS5oIgo+ICsjaW5jbHVkZSAiaW50ZWxfd2FrZXJlZi5oIgo+ICAgI2luY2x1ZGUgImludGVs X3dvcGNtLmgiCj4gICAKPiAgICNpbmNsdWRlICJpOTE1X2dlbS5oIgo+IEBAIC0xMzQsOCArMTM1 LDYgQEAgYm9vbCBpOTE1X2Vycm9yX2luamVjdGVkKHZvaWQpOwo+ICAgCV9faTkxNV9wcmludGso aTkxNSwgaTkxNV9lcnJvcl9pbmplY3RlZCgpID8gS0VSTl9ERUJVRyA6IEtFUk5fRVJSLCBcCj4g ICAJCSAgICAgIGZtdCwgIyNfX1ZBX0FSR1NfXykKPiAgIAo+IC10eXBlZGVmIGRlcG90X3N0YWNr X2hhbmRsZV90IGludGVsX3dha2VyZWZfdDsKPiAtCj4gICBlbnVtIGhwZF9waW4gewo+ICAgCUhQ RF9OT05FID0gMCwKPiAgIAlIUERfVFYgPSBIUERfTk9ORSwgICAgIC8qIFRWIGlzIGtub3duIHRv IGJlIHVucmVsaWFibGUgKi8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfd2FrZXJlZi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfd2FrZXJlZi5jCj4gbmV3 IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLjFmOTRiYzRmZjllNAo+IC0t LSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF93YWtlcmVmLmMK PiBAQCAtMCwwICsxLDYxIEBACj4gKy8qCj4gKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBN SVQKPiArICoKPiArICogQ29weXJpZ2h0IMKpIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24KPiArICov Cj4gKwo+ICsjaW5jbHVkZSAiaW50ZWxfZHJ2LmgiCj4gKyNpbmNsdWRlICJpbnRlbF93YWtlcmVm LmgiCj4gKwo+ICtpbnQgX19pbnRlbF93YWtlcmVmX2dldF9maXJzdChzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqaTkxNSwKPiArCQkJICAgICAgc3RydWN0IGludGVsX3dha2VyZWYgKndmLAo+ICsJ CQkgICAgICBpbnQgKCpmbikoc3RydWN0IGludGVsX3dha2VyZWYgKndmKSkKPiArewo+ICsJLyoK PiArCSAqIFRyZWF0IGdldC9wdXQgYXMgZGlmZmVyZW50IHN1YmNsYXNzZXMsIGFzIHdlIG1heSBu ZWVkIHRvIHJ1bgo+ICsJICogdGhlIHB1dCBjYWxsYmFjayBmcm9tIHVuZGVyIHRoZSBzaHJpbmtl ciBhbmQgZG8gbm90IHdhbnQgdG8KPiArCSAqIGNyb3NzLWNvbnRhbmltYXRlIHRoYXQgY2FsbGJh Y2sgd2l0aCBhbnkgZXh0cmEgd29yayBwZXJmb3JtZWQKPiArCSAqIHVwb24gYWNxdWlyaW5nIHRo ZSB3YWtlcmVmLgo+ICsJICovCj4gKwltdXRleF9sb2NrX25lc3RlZCgmd2YtPm11dGV4LCBTSU5H TEVfREVQVEhfTkVTVElORyk7Cj4gKwlpZiAoIWF0b21pY19yZWFkKCZ3Zi0+Y291bnQpKSB7Cj4g KwkJaW50IGVycjsKPiArCj4gKwkJd2YtPndha2VyZWYgPSBpbnRlbF9ydW50aW1lX3BtX2dldChp OTE1KTsKPiArCj4gKwkJZXJyID0gZm4od2YpOwo+ICsJCWlmICh1bmxpa2VseShlcnIpKSB7Cj4g KwkJCWludGVsX3J1bnRpbWVfcG1fcHV0KGk5MTUsIHdmLT53YWtlcmVmKTsKPiArCQkJbXV0ZXhf dW5sb2NrKCZ3Zi0+bXV0ZXgpOwo+ICsJCQlyZXR1cm4gZXJyOwo+ICsJCX0KPiArCj4gKwkJc21w X21iX19iZWZvcmVfYXRvbWljKCk7IC8qIHJlbGVhc2Ugd2YtPmNvdW50ICovCj4gKwl9Cj4gKwlh dG9taWNfaW5jKCZ3Zi0+Y291bnQpOwo+ICsJbXV0ZXhfdW5sb2NrKCZ3Zi0+bXV0ZXgpOwo+ICsK PiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtpbnQgX19pbnRlbF93YWtlcmVmX3B1dF9sYXN0KHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LAo+ICsJCQkgICAgIHN0cnVjdCBpbnRlbF93YWtl cmVmICp3ZiwKPiArCQkJICAgICBpbnQgKCpmbikoc3RydWN0IGludGVsX3dha2VyZWYgKndmKSkK PiArewo+ICsJaW50IGVycjsKPiArCj4gKwllcnIgPSBmbih3Zik7Cj4gKwlpZiAobGlrZWx5KCFl cnIpKQo+ICsJCWludGVsX3J1bnRpbWVfcG1fcHV0KGk5MTUsIHdmLT53YWtlcmVmKTsKPiArCWVs c2UKPiArCQlhdG9taWNfaW5jKCZ3Zi0+Y291bnQpOwo+ICsJbXV0ZXhfdW5sb2NrKCZ3Zi0+bXV0 ZXgpOwo+ICsKPiArCXJldHVybiBlcnI7Cj4gK30KPiArCj4gK3ZvaWQgX19pbnRlbF93YWtlcmVm X2luaXQoc3RydWN0IGludGVsX3dha2VyZWYgKndmLCBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgKmtl eSkKPiArewo+ICsJX19tdXRleF9pbml0KCZ3Zi0+bXV0ZXgsICJ3YWtlcmVmIiwga2V5KTsKPiAr CWF0b21pY19zZXQoJndmLT5jb3VudCwgMCk7Cj4gK30KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfd2FrZXJlZi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf d2FrZXJlZi5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLmE5 NzlkNjM4MzQ0Ygo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF93YWtlcmVmLmgKPiBAQCAtMCwwICsxLDEzMyBAQAo+ICsvKgo+ICsgKiBTUERYLUxpY2Vu c2UtSWRlbnRpZmllcjogTUlUCj4gKyAqCj4gKyAqIENvcHlyaWdodCDCqSAyMDE5IEludGVsIENv cnBvcmF0aW9uCj4gKyAqLwo+ICsKPiArI2lmbmRlZiBJTlRFTF9XQUtFUkVGX0gKPiArI2RlZmlu ZSBJTlRFTF9XQUtFUkVGX0gKPiArCj4gKyNpbmNsdWRlIDxsaW51eC9hdG9taWMuaD4KPiArI2lu Y2x1ZGUgPGxpbnV4L211dGV4Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9zdGFja2RlcG90Lmg+Cj4g Kwo+ICtzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZTsKPiArCj4gK3R5cGVkZWYgZGVwb3Rfc3RhY2tf aGFuZGxlX3QgaW50ZWxfd2FrZXJlZl90Owo+ICsKPiArc3RydWN0IGludGVsX3dha2VyZWYgewo+ ICsJYXRvbWljX3QgY291bnQ7Cj4gKwlzdHJ1Y3QgbXV0ZXggbXV0ZXg7Cj4gKwlpbnRlbF93YWtl cmVmX3Qgd2FrZXJlZjsKPiArfTsKPiArCj4gK3ZvaWQgX19pbnRlbF93YWtlcmVmX2luaXQoc3Ry dWN0IGludGVsX3dha2VyZWYgKndmLAo+ICsJCQkgIHN0cnVjdCBsb2NrX2NsYXNzX2tleSAqa2V5 KTsKPiArI2RlZmluZSBpbnRlbF93YWtlcmVmX2luaXQod2YpIGRvIHsJCQkJCVwKPiArCXN0YXRp YyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgX19rZXk7CQkJCVwKPiArCQkJCQkJCQkJXAo+ICsJX19p bnRlbF93YWtlcmVmX2luaXQoKHdmKSwgJl9fa2V5KTsJCQkJXAo+ICt9IHdoaWxlICgwKQo+ICsK PiAraW50IF9faW50ZWxfd2FrZXJlZl9nZXRfZmlyc3Qoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg Kmk5MTUsCj4gKwkJCSAgICAgIHN0cnVjdCBpbnRlbF93YWtlcmVmICp3ZiwKPiArCQkJICAgICAg aW50ICgqZm4pKHN0cnVjdCBpbnRlbF93YWtlcmVmICp3ZikpOwo+ICtpbnQgX19pbnRlbF93YWtl cmVmX3B1dF9sYXN0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LAo+ICsJCQkgICAgIHN0 cnVjdCBpbnRlbF93YWtlcmVmICp3ZiwKPiArCQkJICAgICBpbnQgKCpmbikoc3RydWN0IGludGVs X3dha2VyZWYgKndmKSk7Cj4gKwo+ICsvKioKPiArICogaW50ZWxfd2FrZXJlZl9nZXQ6IEFjcXVp cmUgdGhlIHdha2VyZWYKPiArICogQGk5MTU6IHRoZSBkcm1faTkxNV9wcml2YXRlIGRldmljZQo+ ICsgKiBAd2Y6IHRoZSB3YWtlcmVmCj4gKyAqIEBmbjogY2FsbGJhY2sgZm9yIGFjcXVpcmVkIHRo ZSB3YWtlcmVmLCBjYWxsZWQgb25seSBvbiBmaXJzdCBhY3F1aXJlLgo+ICsgKgo+ICsgKiBBY3F1 aXJlIGEgaG9sZCBvbiB0aGUgd2FrZXJlZi4gVGhlIGZpcnN0IHVzZXIgdG8gZG8gc28sIHdpbGwg YWNxdWlyZQo+ICsgKiB0aGUgcnVudGltZSBwbSB3YWtlcmVmIGFuZCB0aGVuIGNhbGwgdGhlIEBm biB1bmRlcm5lYXRoIHRoZSB3YWtlcmVmCj4gKyAqIG11dGV4Lgo+ICsgKgo+ICsgKiBOb3RlIHRo YXQgQGZuIGlzIGFsbG93ZWQgdG8gZmFpbCwgaW4gd2hpY2ggY2FzZSB0aGUgcnVudGltZS1wbSB3 YWtlcmVmCj4gKyAqIHdpbGwgYmUgcmVsZWFzZWQgYW5kIHRoZSBhY3F1aXNpdGlvbiB1bndvdW5k LCBhbmQgYW4gZXJyb3IgcmVwb3J0ZWQuCj4gKyAqCj4gKyAqIFJldHVybnM6IDAgaWYgdGhlIHdh a2VyZWYgd2FzIGFjcXVpcmVkIHN1Y2Nlc3NmdWxseSwgb3IgYSBuZWdhdGl2ZSBlcnJvcgo+ICsg KiBjb2RlIG90aGVyd2lzZS4KPiArICovCj4gK3N0YXRpYyBpbmxpbmUgaW50Cj4gK2ludGVsX3dh a2VyZWZfZ2V0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LAo+ICsJCSAgc3RydWN0IGlu dGVsX3dha2VyZWYgKndmLAo+ICsJCSAgaW50ICgqZm4pKHN0cnVjdCBpbnRlbF93YWtlcmVmICp3 ZikpCj4gK3sKPiArCWlmICh1bmxpa2VseSghYXRvbWljX2luY19ub3RfemVybygmd2YtPmNvdW50 KSkpCj4gKwkJcmV0dXJuIF9faW50ZWxfd2FrZXJlZl9nZXRfZmlyc3QoaTkxNSwgd2YsIGZuKTsK PiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArLyoqCj4gKyAqIGludGVsX3dha2VyZWZfcHV0 OiBSZWxlYXNlIHRoZSB3YWtlcmVmCj4gKyAqIEBpOTE1OiB0aGUgZHJtX2k5MTVfcHJpdmF0ZSBk ZXZpY2UKPiArICogQHdmOiB0aGUgd2FrZXJlZgo+ICsgKiBAZm46IGNhbGxiYWNrIGZvciByZWxl YXNpbmcgdGhlIHdha2VyZWYsIGNhbGxlZCBvbmx5IG9uIGZpbmFsIHJlbGVhc2UuCj4gKyAqCj4g KyAqIFJlbGVhc2Ugb3VyIGhvbGQgb24gdGhlIHdha2VyZWYuIFdoZW4gdGhlcmUgYXJlIG5vIG1v cmUgdXNlcnMsCj4gKyAqIHRoZSBydW50aW1lIHBtIHdha2VyZWYgd2lsbCBiZSByZWxlYXNlZCBh ZnRlciB0aGUgQGZuIGNhbGxiYWNrIGlzIGNhbGxlZAo+ICsgKiB1bmRlcm5lYXRoIHRoZSB3YWtl cmVmIG11dGV4Lgo+ICsgKgo+ICsgKiBOb3RlIHRoYXQgQGZuIGlzIGFsbG93ZWQgdG8gZmFpbCwg aW4gd2hpY2ggY2FzZSB0aGUgcnVudGltZS1wbSB3YWtlcmVmCj4gKyAqIGlzIHJldGFpbmVkIGFu ZCBhbiBlcnJvciByZXBvcnRlZC4KPiArICoKPiArICogUmV0dXJuczogMCBpZiB0aGUgd2FrZXJl ZiB3YXMgcmVsZWFzZWQgc3VjY2Vzc2Z1bGx5LCBvciBhIG5lZ2F0aXZlIGVycm9yCj4gKyAqIGNv ZGUgb3RoZXJ3aXNlLgo+ICsgKi8KPiArc3RhdGljIGlubGluZSBpbnQKPiAraW50ZWxfd2FrZXJl Zl9wdXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsCj4gKwkJICBzdHJ1Y3QgaW50ZWxf d2FrZXJlZiAqd2YsCj4gKwkJICBpbnQgKCpmbikoc3RydWN0IGludGVsX3dha2VyZWYgKndmKSkK PiArewo+ICsJaWYgKGF0b21pY19kZWNfYW5kX211dGV4X2xvY2soJndmLT5jb3VudCwgJndmLT5t dXRleCkpCj4gKwkJcmV0dXJuIF9faW50ZWxfd2FrZXJlZl9wdXRfbGFzdChpOTE1LCB3ZiwgZm4p Owo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICsvKioKPiArICogaW50ZWxfd2FrZXJlZl9s b2NrOiBMb2NrIHRoZSB3YWtlcmVmIChtdXRleCkKPiArICogQHdmOiB0aGUgd2FrZXJlZgo+ICsg Kgo+ICsgKiBMb2NrcyB0aGUgd2FrZXJlZiB0byBwcmV2ZW50IGl0IGJlaW5nIGFjcXVpcmVkIG9y IHJlbGVhc2VkLiBOZXcgdXNlcnMKPiArICogY2FuIHN0aWxsIGFkanVzdCB0aGUgY291bnRlciwg YnV0IHRoZSB3YWtlcmVmIGl0c2VsZiAoYW5kIGNhbGxiYWNrKQo+ICsgKiBjYW5ub3QgYmUgYWNx dWlyZWQgb3IgcmVsZWFzZWQuCj4gKyAqLwo+ICtzdGF0aWMgaW5saW5lIHZvaWQKPiAraW50ZWxf d2FrZXJlZl9sb2NrKHN0cnVjdCBpbnRlbF93YWtlcmVmICp3ZikKPiArCV9fYWNxdWlyZXMod2Yt Pm11dGV4KQo+ICt7Cj4gKwltdXRleF9sb2NrKCZ3Zi0+bXV0ZXgpOwo+ICt9Cj4gKwo+ICsvKioK PiArICogaW50ZWxfd2FrZXJlZl91bmxvY2s6IFVubG9jayB0aGUgd2FrZXJlZgo+ICsgKiBAd2Y6 IHRoZSB3YWtlcmVmCj4gKyAqCj4gKyAqIFJlbGVhc2VzIGEgcHJldmlvdXNseSBhY3F1aXJlZCBp bnRlbF93YWtlcmVmX2xvY2soKS4KPiArICovCj4gK3N0YXRpYyBpbmxpbmUgdm9pZAo+ICtpbnRl bF93YWtlcmVmX3VubG9jayhzdHJ1Y3QgaW50ZWxfd2FrZXJlZiAqd2YpCj4gKwlfX3JlbGVhc2Vz KHdmLT5tdXRleCkKPiArewo+ICsJbXV0ZXhfdW5sb2NrKCZ3Zi0+bXV0ZXgpOwo+ICt9Cj4gKwo+ ICsvKioKPiArICogaW50ZWxfd2FrZXJlZl9hY3RpdmU6IFF1ZXJ5IHdoZXRoZXIgdGhlIHdha2Vy ZWYgaXMgY3VycmVudGx5IGhlbGQKPiArICogQHdmOiB0aGUgd2FrZXJlZgo+ICsgKgo+ICsgKiBS ZXR1cm5zOiB0cnVlIGlmIHRoZSB3YWtlcmVmIGlzIGN1cnJlbnRseSBoZWxkLgo+ICsgKi8KPiAr c3RhdGljIGlubGluZSBib29sCj4gK2ludGVsX3dha2VyZWZfYWN0aXZlKHN0cnVjdCBpbnRlbF93 YWtlcmVmICp3ZikKPiArewo+ICsJcmV0dXJuIGF0b21pY19yZWFkKCZ3Zi0+Y291bnQpOwo+ICt9 Cj4gKwo+ICsjZW5kaWYgLyogSU5URUxfV0FLRVJFRl9IICovCj4gCgpSZXZpZXdlZC1ieTogVHZy dGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KClJlZ2FyZHMsCgpUdnJ0a28K X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4 IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlz dHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4