From mboxrd@z Thu Jan 1 00:00:00 1970 From: Joonas Lahtinen Subject: Re: [RFCv5 2/2] drm/i915: Introduce private PAT management Date: Tue, 29 Aug 2017 12:37:21 +0300 Message-ID: <1503999441.5001.42.camel@linux.intel.com> References: <1503993651-25665-1-git-send-email-zhi.a.wang@intel.com> <1503993651-25665-2-git-send-email-zhi.a.wang@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1503993651-25665-2-git-send-email-zhi.a.wang@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Zhi Wang , intel-gfx@lists.freedesktop.org, intel-gvt-dev@lists.freedesktop.org Cc: Rodrigo Vivi , Ben Widawsky List-Id: intel-gfx@lists.freedesktop.org T24gVHVlLCAyMDE3LTA4LTI5IGF0IDE2OjAwICswODAwLCBaaGkgV2FuZyB3cm90ZToKPiBUaGUg cHJpdmF0ZSBQQVQgbWFuYWdlbWVudCBpcyB0byBzdXBwb3J0IFBQQVQgZW50cnkgbWFuaXB1bGF0 aW9uLiBUd28KPiBBUElzIGFyZSBpbnRyb2R1Y2VkIGZvciBkeW5hbWljYWxseSBtYW5hZ2luZyBQ UEFUIGVudHJpZXM6IGludGVsX3BwYXRfZ2V0Cj4gYW5kIGludGVsX3BwYXRfcHV0Lgo+IAo+IGlu dGVsX3BwYXRfZ2V0IHdpbGwgc2VhcmNoIGZvciBhbiBleGlzdGluZyBQUEFUIGVudHJ5IHdoaWNo IHBlcmZlY3RseQo+IG1hdGNoZXMgdGhlIHJlcXVpcmVkIFBQQVQgdmFsdWUuIElmIG5vdCwgaXQg d2lsbCB0cnkgdG8gYWxsb2NhdGUgb3IKPiByZXR1cm4gYSBwYXJ0aWFsbHkgbWF0Y2hlZCBQUEFU IGVudHJ5IGlmIHRoZXJlIGlzIGFueSBhdmFpbGFibGUgUFBBVAo+IGluZGV4ZXMgb3Igbm90Lgo+ IAo+IGludGVsX3BwYXRfcHV0IHdpbGwgcHV0IGJhY2sgdGhlIFBQQVQgZW50cnkgd2hpY2ggY29t ZXMgZnJvbQo+IGludGVsX3BwYXRfZ2V0LiBJZiBpdCdzIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCwg dGhlIHJlZmVyZW5jZSBjb3VudCB3aWxsCj4gYmUgZGVjcmVhc2VkLiBJZiB0aGUgcmVmZXJlbmNl IGNvdW50IHR1cm5zIGludG8gemVybywgdGhlIFBQQVQgaW5kZXggaXMKPiBmcmVlZCBhZ2Fpbi4K PiAKPiBCZXNpZGVzLCBhbm90aGVyIHR3byBjYWxsYmFja3MgYXJlIGludHJvZHVjZWQgdG8gc3Vw cG9ydCB0aGUgcHJpdmF0ZSBQQVQKPiBtYW5hZ2VtZW50IGZyYW1ld29yay4gT25lIGlzIHBwYXQt PnVwZGF0ZSgpLCB3aGljaCB3cml0ZXMgdGhlIFBQQVQKPiBjb25maWd1cmF0aW9ucyBpbiBwcGF0 LT5lbnRyaWVzIGludG8gSFcuIEFub3RoZXIgb25lIGlzIHBwYXQtPm1hdGNoLCB3aGljaAo+IHdp bGwgcmV0dXJuIGEgc2NvcmUgdG8gc2hvdyBob3cgdHdvIFBQQVQgdmFsdWVzIG1hdGNoIHdpdGgg ZWFjaCBvdGhlci4KPiAKPiB2NToKPiAKPiAtIEFkZCBjaGVjayBhbmQgd2Fybm5pbmdzIGZvciB0 aG9zZSBwbGF0Zm9ybXMgd2hpY2ggZG9uJ3QgaGF2ZSBQUEFULgo+IAo+IHYzOgo+IAo+IC0gSW50 cm9kdWNlIGRpcnR5IGJpdG1hcCBmb3IgUFBBVCByZWdpc3RlcnMuIChDaHJpcykKPiAtIENoYW5n ZSB0aGUgbmFtZSBvZiB0aGUgcG9pbnRlciAiZGV2X3ByaXYiIHRvICJpOTE1Ii4gKENocmlzKQo+ IC0gaW50ZWxfcHBhdF97Z2V0LCBwdXR9IHJldHVybnMvdGFrZXMgYSBjb25zdCBpbnRlbF9wcGF0 X2VudHJ5ICouIChDaHJpcykKPiAKPiB2MjoKPiAKPiAtIEFQSSByZS1kZXNpZ24uIChDaHJpcykK PiAKPiBDYzogQmVuIFdpZGF3c2t5IDxiZW5qYW1pbi53aWRhd3NreUBpbnRlbC5jb20+Cj4gQ2M6 IFJvZHJpZ28gVml2aSA8cm9kcmlnby52aXZpQGludGVsLmNvbT4KPiBDYzogQ2hyaXMgV2lsc29u IDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+Cj4gQ2M6IEpvb25hcyBMYWh0aW5lbiA8am9vbmFz LmxhaHRpbmVuQGxpbnV4LmludGVsLmNvbT4KPiBTaWduZWQtb2ZmLWJ5OiBaaGkgV2FuZyA8emhp LmEud2FuZ0BpbnRlbC5jb20+Cgo8U05JUD4KCj4gLXN0YXRpYyB2b2lkIGNubF9zZXR1cF9wcml2 YXRlX3BwYXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICtzdGF0aWMgc3Ry dWN0IGludGVsX3BwYXRfZW50cnkgKmFsbG9jX3BwYXRfZW50cnkoc3RydWN0IGludGVsX3BwYXQg KnBwYXQsCj4gKwkJCQkJCSB1bnNpZ25lZCBpbnQgaW5kZXgsCj4gKwkJCQkJCSB1OCB2YWx1ZSkK PiAgewo+ICsJc3RydWN0IGludGVsX3BwYXRfZW50cnkgKmVudHJ5ID0gJnBwYXQtPmVudHJpZXNb aW5kZXhdOwo+ICsKPiArCWVudHJ5LT5wcGF0ID0gcHBhdDsKPiArCWVudHJ5LT52YWx1ZSA9IHZh bHVlOwo+ICsJa3JlZl9pbml0KCZlbnRyeS0+cmVmX2NvdW50KTsKPiArCXNldF9iaXQoaW5kZXgs IHBwYXQtPnVzZWQpOwo+ICsJc2V0X2JpdChpbmRleCwgcHBhdC0+ZGlydHkpOwo+ICsKPiArCXJl dHVybiBlbnRyeTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZnJlZV9wcGF0X2VudHJ5KHN0cnVj dCBpbnRlbF9wcGF0X2VudHJ5ICplbnRyeSkKPiArewo+ICsJc3RydWN0IGludGVsX3BwYXQgKnBw YXQgPSBlbnRyeS0+cHBhdDsKPiArCWludCBpbmRleCA9IGVudHJ5IC0gcHBhdC0+ZW50cmllczsK PiArCj4gKwllbnRyeS0+dmFsdWUgPSBwcGF0LT5kdW1teV92YWx1ZTsKPiArCWNsZWFyX2JpdChp bmRleCwgcHBhdC0+dXNlZCk7Cj4gKwlzZXRfYml0KGluZGV4LCBwcGF0LT5kaXJ0eSk7Cj4gK30K CkFib3ZlIGZ1bmN0aW9ucyBzaG91bGQgYmUgX18gcHJlZml4ZWQgYXMgdGhleSBkbyBubyBjaGVj a2luZyBpZiB0aGV5Cm92ZXJyaWRlIGV4aXN0aW5nIGRhdGEuIFRoZSBzdWl0YWJsZSBuYW1lcyBt aWdodCBiZSBfX3BwYXRfZ2V0IGFuZApfX3BwYXRfcHV0LgoKPiArCj4gKy8qKgo+ICsgKiBpbnRl bF9wcGF0X2dldCAtIGdldCBhIHVzYWJsZSBQUEFUIGVudHJ5Cj4gKyAqIEBpOTE1OiBpOTE1IGRl dmljZSBpbnN0YW5jZQo+ICsgKiBAdmFsdWU6IHRoZSBQUEFUIHZhbHVlIHJlcXVpcmVkIGJ5IHRo ZSBjYWxsZXIKPiArICoKPiArICogVGhlIGZ1bmN0aW9uIHRyaWVzIHRvIHNlYXJjaCBpZiB0aGVy ZSBpcyBhbiBleGlzdGluZyBQUEFUIGVudHJ5IHdoaWNoCj4gKyAqIG1hdGNoZXMgd2l0aCB0aGUg cmVxdWlyZWQgdmFsdWUuIElmIHBlcmZlY3RseSBtYXRjaGVkLCB0aGUgZXhpc3RpbmcgUFBBVAo+ ICsgKiBlbnRyeSB3aWxsIGJlIHVzZWQuIElmIG9ubHkgcGFydGlhbGx5IG1hdGNoZWQsIGl0IHdp bGwgdHJ5IHRvIGNoZWNrIGlmCj4gKyAqIHRoZXJlIGlzIGFueSBhdmFpbGFibGUgUFBBVCBpbmRl eC4gSWYgeWVzLCBpdCB3aWxsIGFsbG9jYXRlIGEgbmV3IFBQQVQKPiArICogaW5kZXggZm9yIHRo ZSByZXF1aXJlZCBlbnRyeSBhbmQgdXBkYXRlIHRoZSBIVy4gSWYgbm90LCB0aGUgcGFydGlhbGx5 Cj4gKyAqIG1hdGNoZWQgZW50cnkgd2lsbCBiZSB1c2VkLgo+ICsgKi8KPiArY29uc3Qgc3RydWN0 IGludGVsX3BwYXRfZW50cnkgKmludGVsX3BwYXRfZ2V0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICppOTE1LAoKTWF5YmUgc3BsaXQgdGhlIGZ1bmN0aW9uIHR5cGUgYW5kIG5hbWUgdG8gYXZvaWQg ZXhjZWVkaW5nIDgwIGNoYXJzIG9uCm5leHQgbGluZS4KCj4gKwkJCQkJICAgICAgdTggdmFsdWUp Cj4gK3sKPiArCXN0cnVjdCBpbnRlbF9wcGF0ICpwcGF0ID0gJmk5MTUtPnBwYXQ7Cj4gKwlzdHJ1 Y3QgaW50ZWxfcHBhdF9lbnRyeSAqZW50cnk7Cj4gKwlpbnQgaSwgdXNlZDsKPiArCXVuc2lnbmVk IGludCBzY29yZSwgYmVzdF9zY29yZTsKPiArCj4gKwlpZiAoV0FSTl9PTighcHBhdC0+bWF4X2Vu dHJpZXMpKQo+ICsJCXJldHVybiBFUlJfUFRSKC1FTk9ERVYpOwoKTm8gbmVlZCBmb3IgZXh0cmEg Y2hlY2sgbGlrZSB0aGlzLCB0aGlzIHdpbGwganVzdCBsZWFkIHRvIEVOT1NQQy4KCj4gKwo+ICsJ c2NvcmUgPSBiZXN0X3Njb3JlID0gMDsKPiArCXVzZWQgPSAwOwoKVGhpcyB2YXJpYWJsZSBiZWhh dmVzIG1vcmUgbGlrZSBzY2FubmVkLgoKPiArCj4gKwkvKiBGaXJzdCwgZmluZCBhIHN1aXRhYmxl IHZhbHVlIGZyb20gYXZhaWxhYmxlIGVudHJpZXMgKi8KClRoZSBuZXh0IHR3byBsaW5lcyByZXBl YXQgdGhpcyBpbmZvcm1hdGlvbiwgbm8gbmVlZCB0byBkb2N1bWVudCAid2hhdCIuCgo+ICsJZm9y X2VhY2hfc2V0X2JpdChpLCBwcGF0LT51c2VkLCBwcGF0LT5tYXhfZW50cmllcykgewoKCQlzY29y ZSBjb3VsZCBiZSBkZWNsYXJlZCBpbiB0aGlzIHNjb3BlLgoKPiArCQlzY29yZSA9IHBwYXQtPm1h dGNoKHBwYXQtPmVudHJpZXNbaV0udmFsdWUsIHZhbHVlKTsKPiArCQkvKiBQZXJmZWN0IG1hdGNo ICovCgpUaGlzIGNvbW1lbnQgaXMgbGl0ZXJhbGx5IHJlcGVhdGluZyB3aGF0IGNvZGUgc2F5cy4K Cj4gKwkJaWYgKHNjb3JlID09IElOVEVMX1BQQVRfUEVSRkVDVF9NQVRDSCkgewo+ICsJCQllbnRy eSA9ICZwcGF0LT5lbnRyaWVzW2ldOwo+ICsJCQlrcmVmX2dldCgmZW50cnktPnJlZl9jb3VudCk7 Cj4gKwkJCXJldHVybiBlbnRyeTsKPiArCQl9Cj4gKwo+ICsJCWlmIChzY29yZSA+IGJlc3Rfc2Nv cmUpIHsKPiArCQkJZW50cnkgPSAmcHBhdC0+ZW50cmllc1tpXTsKCkFib3ZlIGNvdWxkIGJlIHNp bXBsaWZpZWQ6CgoJCQlpZiAoc2NvcmUgPT0gSU5URUxfUFBBVF9QRVJGRUNUX01BVENIKSB7CgkJ CQlrcmVmX2dldCgmZW50cnktPnJlZik7CgkJCQlyZXR1cm4gZW50cnk7CgkJCX0KCj4gKwkJCWJl c3Rfc2NvcmUgPSBzY29yZTsKPiArCQl9Cj4gKwkJdXNlZCsrOwo+ICsJfQo+ICsKPiArCS8qIE5v IG1hdGNoZWQgZW50cnkgYW5kIHdlIGNhbid0IGFsbG9jYXRlIGEgbmV3IGVudHJ5LiAqLwoKRFJN X0VSUk9SIHJlcGxpY2F0ZXMgdGhpcyBjb21tZW50J3MgaW5mb3JtYXRpb24uCgo+ICsJaWYgKCFi ZXN0X3Njb3JlICYmIHVzZWQgPT0gcHBhdC0+bWF4X2VudHJpZXMpIHsKPiArCQlEUk1fRVJST1Io IkZhaWwgdG8gZ2V0IFBQQVQgZW50cnlcbiIpOwoKRFJNX0RFQlVHX0RSSVZFUiBhdCBtb3N0LgoK PiArCQlyZXR1cm4gRVJSX1BUUigtRU5PU1BDKTsKPiArCX0KPiArCj4gKwkvKgo+ICsJICogRm91 bmQgYSBtYXRjaGVkIGVudHJ5IHdoaWNoIGlzIG5vdCBwZXJmZWN0LAo+ICsJICogYW5kIHdlIGNh bid0IGFsbG9jYXRlIGEgbmV3IGVudHJ5Lgo+ICsJICovCj4gKwlpZiAoYmVzdF9zY29yZSAmJiB1 c2VkID09IHBwYXQtPm1heF9lbnRyaWVzKSB7Cj4gKwkJa3JlZl9nZXQoJmVudHJ5LT5yZWZfY291 bnQpOwo+ICsJCXJldHVybiBlbnRyeTsKPiArCX0KCkFib3ZlIGNvZGUgY291bGQgYmUgY29tYmlu ZWQ6CgoJaWYgKHNjYW5uZWQgPT0gcHBhdC0+bWF4X2VudHJpZXMpIHsKCQlpZighYmVzdF9zY29y ZSkKCQkJcmV0dXJuIEVSUl9QVFIoLUVOT1NQQyk7CgkJa3JlZl9nZXQoJmVudHJ5LT5yZWYpOwoJ CXJldHVybiBlbnRyeTsKCX0KCj4gKwo+ICsJLyogQWxsb2NhdGUgYSBuZXcgZW50cnkgKi8KClRo aXMgY29tbWVudCBpcyBhbHNvIGp1c3QgdGVsbGluZyAid2hhdCIsIHdoaWNoIHdlIGNhbiBzZWUg ZnJvbSBjb2RlLgoKPiArCWkgPSBmaW5kX2ZpcnN0X3plcm9fYml0KHBwYXQtPnVzZWQsIHBwYXQt Pm1heF9lbnRyaWVzKTsKPiArCWVudHJ5ID0gYWxsb2NfcHBhdF9lbnRyeShwcGF0LCBpLCB2YWx1 ZSk7Cj4gKwlwcGF0LT51cGRhdGUoaTkxNSk7Cj4gKwlyZXR1cm4gZW50cnk7Cj4gK30KPiArCj4g K3N0YXRpYyB2b2lkIHB1dF9wcGF0KHN0cnVjdCBrcmVmICprcmVmKQoKcHBhdF9yZWxlYXNlIG1p Z2h0IGNhdXNlIGxlc3MgY29uZnVzaW9uLCBvdGhlcndpc2UgdGhlcmUgd2lsbCBiZSAzIHB1dApm dW5jdGlvbnMuCgo+ICt7Cj4gKwlzdHJ1Y3QgaW50ZWxfcHBhdF9lbnRyeSAqZW50cnkgPQo+ICsJ CWNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgaW50ZWxfcHBhdF9lbnRyeSwgcmVmX2NvdW50KTsK PiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gZW50cnktPnBwYXQtPmk5MTU7Cj4g Kwo+ICsJZnJlZV9wcGF0X2VudHJ5KGVudHJ5KTsKPiArCWVudHJ5LT5wcGF0LT51cGRhdGUoaTkx NSk7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBpbnRlbF9wcGF0X3B1dCAtIHB1dCBiYWNrIHRoZSBQ UEFUIGVudHJ5IGdvdCBmcm9tIGludGVsX3BwYXRfZ2V0KCkKPiArICogQGVudHJ5OiBhbiBpbnRl bCBQUEFUIGVudHJ5Cj4gKyAqCj4gKyAqIFB1dCBiYWNrIHRoZSBQUEFUIGVudHJ5IGdvdCBmcm9t IGludGVsX3BwYXRfZ2V0KCkuIElmIHRoZSBQUEFUIGluZGV4IG9mIHRoZQo+ICsgKiBlbnRyeSBp cyBkeW5hbWljYWxseSBhbGxvY2F0ZWQsIGl0cyByZWZlcmVuY2UgY291bnQgd2lsbCBiZSBkZWNy ZWFzZWQuIE9uY2UKPiArICogdGhlIHJlZmVyZW5jZSBjb3VudCBiZWNvbWVzIGludG8gemVybywg dGhlIFBQQVQgaW5kZXggYmVjb21lcyBmcmVlIGFnYWluLgo+ICsgKi8KPiArdm9pZCBpbnRlbF9w cGF0X3B1dChjb25zdCBzdHJ1Y3QgaW50ZWxfcHBhdF9lbnRyeSAqZW50cnkpCj4gK3sKPiArCXN0 cnVjdCBpbnRlbF9wcGF0ICpwcGF0ID0gZW50cnktPnBwYXQ7Cj4gKwlpbnQgaW5kZXggPSBlbnRy eSAtIHBwYXQtPmVudHJpZXM7Cj4gKwo+ICsJaWYgKFdBUk5fT04oIXBwYXQtPm1heF9lbnRyaWVz KSkKPiArCQlyZXR1cm47CgpUaGlzIGlzIGNsZWFybHkgYSBrZXJuZWwgcHJvZ3JhbW1lciBlcnJv ciAoYW5kIGEgc2VyaW91cyBvbmUsIHNvIGNvdWxkCmJlIEdFTV9CVUdfT04pLgoKPiArCj4gKwlr cmVmX3B1dCgmcHBhdC0+ZW50cmllc1tpbmRleF0ucmVmX2NvdW50LCBwdXRfcHBhdCk7Cj4gK30K PiArCj4gK3N0YXRpYyB2b2lkIGNubF9wcml2YXRlX3BhdF91cGRhdGUoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2KQo+ICt7Cj4gKwlzdHJ1Y3QgaW50ZWxfcHBhdCAqcHBhdCA9ICZk ZXZfcHJpdi0+cHBhdDsKPiArCWludCBpOwo+ICsKPiArCWZvcl9lYWNoX3NldF9iaXQoaSwgcHBh dC0+ZGlydHksIHBwYXQtPm1heF9lbnRyaWVzKSB7Cj4gKwkJY2xlYXJfYml0KGksIHBwYXQtPmRp cnR5KTsKPiArCQlJOTE1X1dSSVRFKEdFTjEwX1BBVF9JTkRFWChpKSwgcHBhdC0+ZW50cmllc1tp XS52YWx1ZSk7CgpDbGVhcmluZyB0aGUgYml0IGFmdGVyIHdyaXRlIGlzIHRoZSBsb2dpY2FsIHRo aW5nIHRvIGRvLgoKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIHZvaWQgYmR3X3ByaXZhdGVfcGF0 X3VwZGF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gK3sKPiArCXN0cnVj dCBpbnRlbF9wcGF0ICpwcGF0ID0gJmRldl9wcml2LT5wcGF0Owo+ICsJdTY0IHBhdCA9IDA7Cj4g KwlpbnQgaTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgcHBhdC0+bWF4X2VudHJpZXM7IGkrKykK PiArCQlwYXQgfD0gR0VOOF9QUEFUKGksIHBwYXQtPmVudHJpZXNbaV0udmFsdWUpOwo+ICsKPiAr CWJpdG1hcF9jbGVhcihwcGF0LT5kaXJ0eSwgMCwgcHBhdC0+bWF4X2VudHJpZXMpOwo+ICsKPiAr CUk5MTVfV1JJVEUoR0VOOF9QUklWQVRFX1BBVF9MTywgcGF0KTsKPiArCUk5MTVfV1JJVEUoR0VO OF9QUklWQVRFX1BBVF9ISSwgcGF0ID4+IDMyKTsKCldoaWxlIG1vdmluZyB0aGUgY29kZSwgbG93 ZXJfMzJfYml0cyBhbmQgdXBwZXJfMzJfYml0cywgaXQgc2hvdWxkCnJlYWxseSB3YXJuIHdpdGhv dXQgdGhlbT8KCj4gK30KPiArCj4gKyNkZWZpbmUgZ2VuOF9wYXRfY2EodikgKCh2KSAmIDB4MykK PiArI2RlZmluZSBnZW44X3BhdF90Yyh2KSAoKCh2KSA+PiAyKSAmIDB4MykKPiArI2RlZmluZSBn ZW44X3BhdF9hZ2UodikgKCgodikgPj4gNCkgJiAweDMpCgpNYWdpYyBudW1iZXJzLiBJJ20gYWxz byBub3QgMTAwJSBzdXJlIGlmIEtNRCB3aWxsIHdhbnQgcGFydGlhbCBtYXRjaGVzLApvciBpZiBH VlQgc2hvdWxkIHBhc3MgaW4gYSBzY29yaW5nIGZ1bmN0aW9uLgoKPiArCj4gK3N0YXRpYyB1bnNp Z25lZCBpbnQgYmR3X3ByaXZhdGVfcGF0X21hdGNoKHU4IHNyYywgdTggZHN0KQo+ICt7Cj4gKwl1 bnNpZ25lZCBpbnQgc2NvcmUgPSAwOwo+ICsKPiArCS8qIENhY2hlIGF0dHJpYnV0ZSBoYXMgdG8g YmUgbWF0Y2hlZC4gKi8KPiArCWlmIChnZW44X3BhdF9jYShzcmMpICE9IGdlbjhfcGF0X2NhKGRz dCkpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJaWYgKGdlbjhfcGF0X2FnZShzcmMpID09IGdlbjhf cGF0X2FnZShkc3QpKQo+ICsJCXNjb3JlICs9IDE7Cj4gKwo+ICsJaWYgKGdlbjhfcGF0X3RjKHNy YykgPT0gZ2VuOF9wYXRfdGMoZHN0KSkKPiArCQlzY29yZSArPSAyOwoKSSdkIGxpZnQgdGhpcyBj aGVjayB0byBoYXZlIHRoZW0gYWxsIGluIGltcG9ydGFuY2Ugb3JkZXIuCgo+ICsKPiArCWlmIChz Y29yZSA9PSAzKQo+ICsJCXJldHVybiBJTlRFTF9QUEFUX1BFUkZFQ1RfTUFUQ0g7Cj4gKwo+ICsJ cmV0dXJuIHNjb3JlOwo+ICt9Cj4gKwo+ICsjZGVmaW5lIGNodl9nZXRfc25vb3AodikgKCgodikg Pj4gNikgJiAweDEpCgpNYWdpYyBudW1iZXJzLCB3aGljaCBuZWVkIHRvIGJlIGluIGk5MTVfcmVn Lmggd2l0aCAjZGVmaW5lLiBTaG91bGQgYWxzbwpiZSBjaHZfcGF0X3Nub29wKCk7Cgo+ICsKPiAr c3RhdGljIHVuc2lnbmVkIGludCBjaHZfcHJpdmF0ZV9wYXRfbWF0Y2godTggc3JjLCB1OCBkc3Qp Cj4gK3sKPiArCWlmIChjaHZfZ2V0X3Nub29wKHNyYykgPT0gY2h2X2dldF9zbm9vcChkc3QpKQo+ ICsJCXJldHVybiBJTlRFTF9QUEFUX1BFUkZFQ1RfTUFUQ0g7Cj4gKwo+ICsJcmV0dXJuIDA7CgoJ cmV0dXJuIGNodl9wYXRfc25vb3Aoc3JjKSA9PSBjaHZfcGF0X3Nub29wKGRzdCkgPwoJICAgICAg IElOVEVMX1BQQVRfUEVSRkVDVF9NQVRDSCA6IDA7Cgo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBj bmxfc2V0dXBfcHJpdmF0ZV9wcGF0KHN0cnVjdCBpbnRlbF9wcGF0ICpwcGF0KQo+ICt7Cj4gKwlw cGF0LT5tYXhfZW50cmllcyA9IDg7Cj4gKwlwcGF0LT51cGRhdGUgPSBjbmxfcHJpdmF0ZV9wYXRf dXBkYXRlOwo+ICsJcHBhdC0+bWF0Y2ggPSBiZHdfcHJpdmF0ZV9wYXRfbWF0Y2g7Cj4gKwlwcGF0 LT5kdW1teV92YWx1ZSA9IEdFTjhfUFBBVF9MTENFTExDIHwgR0VOOF9QUEFUX0FHRSgzKTsKCiJk dW1teV92YWx1ZSIgaXMgbm90IGEgdmVyeSBkZXNjcmlwdGl2ZSBuYW1lLgoKPiArCj4gIAkvKiBY WFg6IHNwZWMgaXMgdW5jbGVhciBpZiB0aGlzIGlzIHN0aWxsIG5lZWRlZCBmb3IgQ05MKyAqLwo+ IC0JaWYgKCFVU0VTX1BQR1RUKGRldl9wcml2KSkgewo+IC0JCUk5MTVfV1JJVEUoR0VOMTBfUEFU X0lOREVYKDApLCBHRU44X1BQQVRfVUMpOwo+ICsJaWYgKCFVU0VTX1BQR1RUKHBwYXQtPmk5MTUp KSB7Cj4gKwkJYWxsb2NfcHBhdF9lbnRyeShwcGF0LCAwLCBHRU44X1BQQVRfVUMpOwo+ICAJCXJl dHVybjsKPiAgCX0KPiAgCj4gLQlJOTE1X1dSSVRFKEdFTjEwX1BBVF9JTkRFWCgwKSwgR0VOOF9Q UEFUX1dCIHwgR0VOOF9QUEFUX0xMQyk7Cj4gLQlJOTE1X1dSSVRFKEdFTjEwX1BBVF9JTkRFWCgx KSwgR0VOOF9QUEFUX1dDIHwgR0VOOF9QUEFUX0xMQ0VMTEMpOwo+IC0JSTkxNV9XUklURShHRU4x MF9QQVRfSU5ERVgoMiksIEdFTjhfUFBBVF9XVCB8IEdFTjhfUFBBVF9MTENFTExDKTsKPiAtCUk5 MTVfV1JJVEUoR0VOMTBfUEFUX0lOREVYKDMpLCBHRU44X1BQQVRfVUMpOwo+IC0JSTkxNV9XUklU RShHRU4xMF9QQVRfSU5ERVgoNCksIEdFTjhfUFBBVF9MTENFTExDIHwgR0VOOF9QUEFUX0FHRSgw KSk7Cj4gLQlJOTE1X1dSSVRFKEdFTjEwX1BBVF9JTkRFWCg1KSwgR0VOOF9QUEFUX0xMQ0VMTEMg fCBHRU44X1BQQVRfQUdFKDEpKTsKPiAtCUk5MTVfV1JJVEUoR0VOMTBfUEFUX0lOREVYKDYpLCBH RU44X1BQQVRfTExDRUxMQyB8IEdFTjhfUFBBVF9BR0UoMikpOwo+IC0JSTkxNV9XUklURShHRU4x MF9QQVRfSU5ERVgoNyksIEdFTjhfUFBBVF9MTENFTExDIHwgR0VOOF9QUEFUX0FHRSgzKSk7Cj4g KwlhbGxvY19wcGF0X2VudHJ5KHBwYXQsIDAsIEdFTjhfUFBBVF9XQiB8IEdFTjhfUFBBVF9MTEMp Owo+ICsJYWxsb2NfcHBhdF9lbnRyeShwcGF0LCAyLCBHRU44X1BQQVRfV1QgfCBHRU44X1BQQVRf TExDRUxMQyk7Cj4gKwlhbGxvY19wcGF0X2VudHJ5KHBwYXQsIDMsIEdFTjhfUFBBVF9VQyk7Cj4g KwlhbGxvY19wcGF0X2VudHJ5KHBwYXQsIDQsIEdFTjhfUFBBVF9MTENFTExDIHwgR0VOOF9QUEFU X0FHRSgwKSk7CgpNYXliZSBJJ20gbm90IGZvbGxvd2luZyBhdCBhbGwsIGJ1dCB0aGlzIHNlZW1z IGxpa2UgcXVpdGUgYSBjaGFuZ2UgdG8KbWU/IDAtMyB1c2VkIHRvIGJlIFdCLCBXQywgV1QsIFVD LCBub3cgMSBpcyB1bnNldCwgbGlrZSBpcyA1LTcuCgpJJ2QgbGVhdmUgYWxsIGNoYW5nZXMgdG8g cmVnaXN0ZXJzIHRvIGEgbGF0ZXIgcGF0Y2ggYW5kIGxlYXZlIHRoaXMKcGF0Y2ggdG8gZG8gd2hh dCB0aGUgdGl0bGUgc2F5cywgIkludHJvZHVjZSBwcml2YXRlIFBBVCBtYW5hZ2VtZW50Ii4KCj4g IHN0YXRpYyB2b2lkIHNldHVwX3ByaXZhdGVfcGF0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdikKPiAgewo+ICsJc3RydWN0IGludGVsX3BwYXQgKnBwYXQgPSAmZGV2X3ByaXYtPnBw YXQ7Cj4gKwlpbnQgaTsKPiArCj4gKwlwcGF0LT5pOTE1ID0gZGV2X3ByaXY7Cj4gKwo+ICsJLyog TG9hZCBwZXItcGxhdGZvcm0gUFBBVCBjb25maWd1cmF0aW9ucyAqLwoKVGhpcyBjb21tZW50IGlz IGFnYWluIGp1c3QgdGFraW5nIHNwYWNlLgoKPiAgCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49 IDEwKQo+IC0JCWNubF9zZXR1cF9wcml2YXRlX3BwYXQoZGV2X3ByaXYpOwo+ICsJCWNubF9zZXR1 cF9wcml2YXRlX3BwYXQocHBhdCk7Cj4gIAllbHNlIGlmIChJU19DSEVSUllWSUVXKGRldl9wcml2 KSB8fCBJU19HRU45X0xQKGRldl9wcml2KSkKPiAtCQljaHZfc2V0dXBfcHJpdmF0ZV9wcGF0KGRl dl9wcml2KTsKPiArCQljaHZfc2V0dXBfcHJpdmF0ZV9wcGF0KHBwYXQpOwo+ICAJZWxzZQo+IC0J CWJkd19zZXR1cF9wcml2YXRlX3BwYXQoZGV2X3ByaXYpOwo+ICsJCWJkd19zZXR1cF9wcml2YXRl X3BwYXQocHBhdCk7Cj4gKwo+ICsJR0VNX0JVR19PTihwcGF0LT5tYXhfZW50cmllcyA+IElOVEVM X01BWF9QUEFUX0VOVFJJRVMpOwo+ICsKPiArCWlmICghcHBhdC0+bWF4X2VudHJpZXMpCj4gKwkJ cmV0dXJuOwoKSSdtIG5vdCBzdXJlIHdoeSB3ZSBoYXZlICIhbWF4X2VudHJpZXMiIGNoZWNrcyBn b2luZywgd2Ugc2hvdWxkIGhhdmUKb25lIEdFTV9CVUdfT04gYXQgdGhpcyBwb2ludCBhbmQgaW4g dGhlIHJlc3QgeW91IGNhbiBhc3N1bWUgaXQgdG8gYmUKbm9uemVyby4KCj4gKwo+ICsJLyogRmls bCB1bnVzZWQgUFBBVCBlbnRyaWVzIHdpdGggZHVtbXkgUFBBVCB2YWx1ZSAqLwo+ICsJZm9yX2Vh Y2hfY2xlYXJfYml0KGksIHBwYXQtPnVzZWQsIHBwYXQtPm1heF9lbnRyaWVzKSB7Cj4gKwkJcHBh dC0+ZW50cmllc1tpXS52YWx1ZSA9IHBwYXQtPmR1bW15X3ZhbHVlOwo+ICsJCXBwYXQtPmVudHJp ZXNbaV0ucHBhdCA9IHBwYXQ7Cj4gKwkJc2V0X2JpdChpLCBwcGF0LT5kaXJ0eSk7Cj4gKwl9Cj4g Kwo+ICsJLyogV3JpdGUgdGhlIEhXICovCgpJZiB0aGUgY2FsbGJhY2sgd2FzIG5hbWVkIHVwZGF0 ZV9odygpLCB0aGlzIGNvbW1lbnQgd291bGQgYmUKdW5uZWNlc3NhcnkuCgo+ICsJcHBhdC0+dXBk YXRlKGRldl9wcml2KTsKPiAgfQoKPFNOSVA+Cgo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZ2VtX2d0dC5oCj4gQEAgLTUzNiw2ICs1MzYsNDAgQEAgaTkxNV92bV90b19nZ3R0KHN0 cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtKQo+ICAJcmV0dXJuIGNvbnRhaW5lcl9vZih2bSwg c3RydWN0IGk5MTVfZ2d0dCwgYmFzZSk7Cj4gIH0KPiAgCj4gKyNkZWZpbmUgSU5URUxfTUFYX1BQ QVRfRU5UUklFUyA4Cj4gKyNkZWZpbmUgSU5URUxfUFBBVF9QRVJGRUNUX01BVENIICh+MFUpCj4g Kwo+ICtzdHJ1Y3QgaW50ZWxfcHBhdDsKPiArCj4gK3N0cnVjdCBpbnRlbF9wcGF0X2VudHJ5IHsK PiArCXN0cnVjdCBpbnRlbF9wcGF0ICpwcGF0Owo+ICsJc3RydWN0IGtyZWYgcmVmX2NvdW50OwoK CUp1c3QgInJlZiIsIGxpa2UgZWxzZXdoZXJlIGluIGNvZGUuCgo+ICsJdTggdmFsdWU7Cj4gK307 Cj4gKwo+ICtzdHJ1Y3QgaW50ZWxfcHBhdCB7Cj4gKwlzdHJ1Y3QgaW50ZWxfcHBhdF9lbnRyeSBl bnRyaWVzW0lOVEVMX01BWF9QUEFUX0VOVFJJRVNdOwo+ICsJREVDTEFSRV9CSVRNQVAodXNlZCwg SU5URUxfTUFYX1BQQVRfRU5UUklFUyk7Cj4gKwlERUNMQVJFX0JJVE1BUChkaXJ0eSwgSU5URUxf TUFYX1BQQVRfRU5UUklFUyk7Cj4gKwoKVGhpcyByZWFsbHkgZ29lcyB3aXRoIHRoZSBwcmV2aW91 cyBncm91cCBvZiB2YXJpYWJsZS4gU28gbm8gbmV3bGluZS4KCj4gKwl1bnNpZ25lZCBpbnQgbWF4 X2VudHJpZXM7Cj4gKwo+ICsJdTggZHVtbXlfdmFsdWU7CgpCZXR0ZXIgbmFtZSwgbGlrZSAiY2xl YXJfdmFsdWUiIGFuZCBzaG9ydCBkZXNjcmlwdGlvbiBtYXkgYmUgdXNlZnVsLgoKPiArCS8qCj4g KwkgKiBSZXR1cm4gYSBzY29yZSB0byBzaG93IGhvdyB0d28gUFBBVCB2YWx1ZXMgbWF0Y2gsCj4g KwkgKiBhIElOVEVMX1BQQVRfUEVSRkVDVF9NQVRDSCBpbmRpY2F0ZXMgYSBwZXJmZWN0IG1hdGNo Cj4gKwkgKi8KPiArCXVuc2lnbmVkIGludCAoKm1hdGNoKSh1OCBzcmMsIHU4IGRzdCk7Cj4gKwkv KiBXcml0ZSB0aGUgUFBBVCBjb25maWd1cmF0aW9uIGludG8gSFcuICovCj4gKwl2b2lkICgqdXBk YXRlKShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSk7Cj4gKwo+ICsJc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmk5MTU7Cj4gK307Cj4gKwo+ICtjb25zdCBzdHJ1Y3QgaW50ZWxfcHBhdF9l bnRyeSAqaW50ZWxfcHBhdF9nZXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsCgpTYW1l IGhlcmUgd2l0aCB0eXBlIHZzIG5hbWUuCgo+ICsJCQkJCSAgICAgIHU4IHZhbHVlKTsKPiArdm9p ZCBpbnRlbF9wcGF0X3B1dChjb25zdCBzdHJ1Y3QgaW50ZWxfcHBhdF9lbnRyeSAqZW50cnkpOwoK UmVnYXJkcywgam9vbmFzCi0tIApKb29uYXMgTGFodGluZW4KT3BlbiBTb3VyY2UgVGVjaG5vbG9n eSBDZW50ZXIKSW50ZWwgQ29ycG9yYXRpb24KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMu ZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlz dGluZm8vaW50ZWwtZ2Z4Cg==