From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Wang, Zhi A" Subject: Re: [RFCv5 2/2] drm/i915: Introduce private PAT management Date: Tue, 29 Aug 2017 11:18:47 +0000 Message-ID: References: <1503993651-25665-1-git-send-email-zhi.a.wang@intel.com> <1503993651-25665-2-git-send-email-zhi.a.wang@intel.com> <1503999441.5001.42.camel@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1503999441.5001.42.camel@linux.intel.com> 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: Joonas Lahtinen , "intel-gfx@lists.freedesktop.org" , "intel-gvt-dev@lists.freedesktop.org" Cc: "Vivi, Rodrigo" , "Widawsky, Benjamin" List-Id: intel-gfx@lists.freedesktop.org VGhhbmtzIEpvb25hcyEgOikNCg0KLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCkZyb206IEpv b25hcyBMYWh0aW5lbiBbbWFpbHRvOmpvb25hcy5sYWh0aW5lbkBsaW51eC5pbnRlbC5jb21dIA0K U2VudDogVHVlc2RheSwgQXVndXN0IDI5LCAyMDE3IDEyOjM3IFBNDQpUbzogV2FuZywgWmhpIEEg PHpoaS5hLndhbmdAaW50ZWwuY29tPjsgaW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZzsg aW50ZWwtZ3Z0LWRldkBsaXN0cy5mcmVlZGVza3RvcC5vcmcNCkNjOiBjaHJpc0BjaHJpcy13aWxz b24uY28udWs7IHpoZW55dXdAbGludXguaW50ZWwuY29tOyBXaWRhd3NreSwgQmVuamFtaW4gPGJl bmphbWluLndpZGF3c2t5QGludGVsLmNvbT47IFZpdmksIFJvZHJpZ28gPHJvZHJpZ28udml2aUBp bnRlbC5jb20+DQpTdWJqZWN0OiBSZTogW1JGQ3Y1IDIvMl0gZHJtL2k5MTU6IEludHJvZHVjZSBw cml2YXRlIFBBVCBtYW5hZ2VtZW50DQoNCk9uIFR1ZSwgMjAxNy0wOC0yOSBhdCAxNjowMCArMDgw MCwgWmhpIFdhbmcgd3JvdGU6DQo+IFRoZSBwcml2YXRlIFBBVCBtYW5hZ2VtZW50IGlzIHRvIHN1 cHBvcnQgUFBBVCBlbnRyeSBtYW5pcHVsYXRpb24uIFR3byANCj4gQVBJcyBhcmUgaW50cm9kdWNl ZCBmb3IgZHluYW1pY2FsbHkgbWFuYWdpbmcgUFBBVCBlbnRyaWVzOiANCj4gaW50ZWxfcHBhdF9n ZXQgYW5kIGludGVsX3BwYXRfcHV0Lg0KPiANCj4gaW50ZWxfcHBhdF9nZXQgd2lsbCBzZWFyY2gg Zm9yIGFuIGV4aXN0aW5nIFBQQVQgZW50cnkgd2hpY2ggcGVyZmVjdGx5IA0KPiBtYXRjaGVzIHRo ZSByZXF1aXJlZCBQUEFUIHZhbHVlLiBJZiBub3QsIGl0IHdpbGwgdHJ5IHRvIGFsbG9jYXRlIG9y IA0KPiByZXR1cm4gYSBwYXJ0aWFsbHkgbWF0Y2hlZCBQUEFUIGVudHJ5IGlmIHRoZXJlIGlzIGFu eSBhdmFpbGFibGUgUFBBVCANCj4gaW5kZXhlcyBvciBub3QuDQo+IA0KPiBpbnRlbF9wcGF0X3B1 dCB3aWxsIHB1dCBiYWNrIHRoZSBQUEFUIGVudHJ5IHdoaWNoIGNvbWVzIGZyb20gDQo+IGludGVs X3BwYXRfZ2V0LiBJZiBpdCdzIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCwgdGhlIHJlZmVyZW5jZSBj b3VudCANCj4gd2lsbCBiZSBkZWNyZWFzZWQuIElmIHRoZSByZWZlcmVuY2UgY291bnQgdHVybnMg aW50byB6ZXJvLCB0aGUgUFBBVCANCj4gaW5kZXggaXMgZnJlZWQgYWdhaW4uDQo+IA0KPiBCZXNp ZGVzLCBhbm90aGVyIHR3byBjYWxsYmFja3MgYXJlIGludHJvZHVjZWQgdG8gc3VwcG9ydCB0aGUg cHJpdmF0ZSANCj4gUEFUIG1hbmFnZW1lbnQgZnJhbWV3b3JrLiBPbmUgaXMgcHBhdC0+dXBkYXRl KCksIHdoaWNoIHdyaXRlcyB0aGUgUFBBVCANCj4gY29uZmlndXJhdGlvbnMgaW4gcHBhdC0+ZW50 cmllcyBpbnRvIEhXLiBBbm90aGVyIG9uZSBpcyBwcGF0LT5tYXRjaCwgDQo+IHdoaWNoIHdpbGwg cmV0dXJuIGEgc2NvcmUgdG8gc2hvdyBob3cgdHdvIFBQQVQgdmFsdWVzIG1hdGNoIHdpdGggZWFj aCBvdGhlci4NCj4gDQo+IHY1Og0KPiANCj4gLSBBZGQgY2hlY2sgYW5kIHdhcm5uaW5ncyBmb3Ig dGhvc2UgcGxhdGZvcm1zIHdoaWNoIGRvbid0IGhhdmUgUFBBVC4NCj4gDQo+IHYzOg0KPiANCj4g LSBJbnRyb2R1Y2UgZGlydHkgYml0bWFwIGZvciBQUEFUIHJlZ2lzdGVycy4gKENocmlzKQ0KPiAt IENoYW5nZSB0aGUgbmFtZSBvZiB0aGUgcG9pbnRlciAiZGV2X3ByaXYiIHRvICJpOTE1Ii4gKENo cmlzKQ0KPiAtIGludGVsX3BwYXRfe2dldCwgcHV0fSByZXR1cm5zL3Rha2VzIGEgY29uc3QgaW50 ZWxfcHBhdF9lbnRyeSAqLiANCj4gKENocmlzKQ0KPiANCj4gdjI6DQo+IA0KPiAtIEFQSSByZS1k ZXNpZ24uIChDaHJpcykNCj4gDQo+IENjOiBCZW4gV2lkYXdza3kgPGJlbmphbWluLndpZGF3c2t5 QGludGVsLmNvbT4NCj4gQ2M6IFJvZHJpZ28gVml2aSA8cm9kcmlnby52aXZpQGludGVsLmNvbT4N Cj4gQ2M6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPg0KPiBDYzogSm9v bmFzIExhaHRpbmVuIDxqb29uYXMubGFodGluZW5AbGludXguaW50ZWwuY29tPg0KPiBTaWduZWQt b2ZmLWJ5OiBaaGkgV2FuZyA8emhpLmEud2FuZ0BpbnRlbC5jb20+DQoNCjxTTklQPg0KDQo+IC1z dGF0aWMgdm9pZCBjbmxfc2V0dXBfcHJpdmF0ZV9wcGF0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdikNCj4gK3N0YXRpYyBzdHJ1Y3QgaW50ZWxfcHBhdF9lbnRyeSAqYWxsb2NfcHBh dF9lbnRyeShzdHJ1Y3QgaW50ZWxfcHBhdCAqcHBhdCwNCj4gKwkJCQkJCSB1bnNpZ25lZCBpbnQg aW5kZXgsDQo+ICsJCQkJCQkgdTggdmFsdWUpDQo+ICB7DQo+ICsJc3RydWN0IGludGVsX3BwYXRf ZW50cnkgKmVudHJ5ID0gJnBwYXQtPmVudHJpZXNbaW5kZXhdOw0KPiArDQo+ICsJZW50cnktPnBw YXQgPSBwcGF0Ow0KPiArCWVudHJ5LT52YWx1ZSA9IHZhbHVlOw0KPiArCWtyZWZfaW5pdCgmZW50 cnktPnJlZl9jb3VudCk7DQo+ICsJc2V0X2JpdChpbmRleCwgcHBhdC0+dXNlZCk7DQo+ICsJc2V0 X2JpdChpbmRleCwgcHBhdC0+ZGlydHkpOw0KPiArDQo+ICsJcmV0dXJuIGVudHJ5Ow0KPiArfQ0K PiArDQo+ICtzdGF0aWMgdm9pZCBmcmVlX3BwYXRfZW50cnkoc3RydWN0IGludGVsX3BwYXRfZW50 cnkgKmVudHJ5KSB7DQo+ICsJc3RydWN0IGludGVsX3BwYXQgKnBwYXQgPSBlbnRyeS0+cHBhdDsN Cj4gKwlpbnQgaW5kZXggPSBlbnRyeSAtIHBwYXQtPmVudHJpZXM7DQo+ICsNCj4gKwllbnRyeS0+ dmFsdWUgPSBwcGF0LT5kdW1teV92YWx1ZTsNCj4gKwljbGVhcl9iaXQoaW5kZXgsIHBwYXQtPnVz ZWQpOw0KPiArCXNldF9iaXQoaW5kZXgsIHBwYXQtPmRpcnR5KTsNCj4gK30NCg0KQWJvdmUgZnVu Y3Rpb25zIHNob3VsZCBiZSBfXyBwcmVmaXhlZCBhcyB0aGV5IGRvIG5vIGNoZWNraW5nIGlmIHRo ZXkgb3ZlcnJpZGUgZXhpc3RpbmcgZGF0YS4gVGhlIHN1aXRhYmxlIG5hbWVzIG1pZ2h0IGJlIF9f cHBhdF9nZXQgYW5kIF9fcHBhdF9wdXQuDQoNCj4gKw0KPiArLyoqDQo+ICsgKiBpbnRlbF9wcGF0 X2dldCAtIGdldCBhIHVzYWJsZSBQUEFUIGVudHJ5DQo+ICsgKiBAaTkxNTogaTkxNSBkZXZpY2Ug aW5zdGFuY2UNCj4gKyAqIEB2YWx1ZTogdGhlIFBQQVQgdmFsdWUgcmVxdWlyZWQgYnkgdGhlIGNh bGxlcg0KPiArICoNCj4gKyAqIFRoZSBmdW5jdGlvbiB0cmllcyB0byBzZWFyY2ggaWYgdGhlcmUg aXMgYW4gZXhpc3RpbmcgUFBBVCBlbnRyeSANCj4gK3doaWNoDQo+ICsgKiBtYXRjaGVzIHdpdGgg dGhlIHJlcXVpcmVkIHZhbHVlLiBJZiBwZXJmZWN0bHkgbWF0Y2hlZCwgdGhlIA0KPiArZXhpc3Rp bmcgUFBBVA0KPiArICogZW50cnkgd2lsbCBiZSB1c2VkLiBJZiBvbmx5IHBhcnRpYWxseSBtYXRj aGVkLCBpdCB3aWxsIHRyeSB0byANCj4gK2NoZWNrIGlmDQo+ICsgKiB0aGVyZSBpcyBhbnkgYXZh aWxhYmxlIFBQQVQgaW5kZXguIElmIHllcywgaXQgd2lsbCBhbGxvY2F0ZSBhIG5ldyANCj4gK1BQ QVQNCj4gKyAqIGluZGV4IGZvciB0aGUgcmVxdWlyZWQgZW50cnkgYW5kIHVwZGF0ZSB0aGUgSFcu IElmIG5vdCwgdGhlIA0KPiArcGFydGlhbGx5DQo+ICsgKiBtYXRjaGVkIGVudHJ5IHdpbGwgYmUg dXNlZC4NCj4gKyAqLw0KPiArY29uc3Qgc3RydWN0IGludGVsX3BwYXRfZW50cnkgKmludGVsX3Bw YXRfZ2V0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlIA0KPiArKmk5MTUsDQoNCk1heWJlIHNwbGl0 IHRoZSBmdW5jdGlvbiB0eXBlIGFuZCBuYW1lIHRvIGF2b2lkIGV4Y2VlZGluZyA4MCBjaGFycyBv biBuZXh0IGxpbmUuDQoNCj4gKwkJCQkJICAgICAgdTggdmFsdWUpDQo+ICt7DQo+ICsJc3RydWN0 IGludGVsX3BwYXQgKnBwYXQgPSAmaTkxNS0+cHBhdDsNCj4gKwlzdHJ1Y3QgaW50ZWxfcHBhdF9l bnRyeSAqZW50cnk7DQo+ICsJaW50IGksIHVzZWQ7DQo+ICsJdW5zaWduZWQgaW50IHNjb3JlLCBi ZXN0X3Njb3JlOw0KPiArDQo+ICsJaWYgKFdBUk5fT04oIXBwYXQtPm1heF9lbnRyaWVzKSkNCj4g KwkJcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7DQoNCk5vIG5lZWQgZm9yIGV4dHJhIGNoZWNrIGxp a2UgdGhpcywgdGhpcyB3aWxsIGp1c3QgbGVhZCB0byBFTk9TUEMuDQoNCj4gKw0KPiArCXNjb3Jl ID0gYmVzdF9zY29yZSA9IDA7DQo+ICsJdXNlZCA9IDA7DQoNClRoaXMgdmFyaWFibGUgYmVoYXZl cyBtb3JlIGxpa2Ugc2Nhbm5lZC4NCg0KPiArDQo+ICsJLyogRmlyc3QsIGZpbmQgYSBzdWl0YWJs ZSB2YWx1ZSBmcm9tIGF2YWlsYWJsZSBlbnRyaWVzICovDQoNClRoZSBuZXh0IHR3byBsaW5lcyBy ZXBlYXQgdGhpcyBpbmZvcm1hdGlvbiwgbm8gbmVlZCB0byBkb2N1bWVudCAid2hhdCIuDQoNCj4g Kwlmb3JfZWFjaF9zZXRfYml0KGksIHBwYXQtPnVzZWQsIHBwYXQtPm1heF9lbnRyaWVzKSB7DQoN CgkJc2NvcmUgY291bGQgYmUgZGVjbGFyZWQgaW4gdGhpcyBzY29wZS4NCg0KPiArCQlzY29yZSA9 IHBwYXQtPm1hdGNoKHBwYXQtPmVudHJpZXNbaV0udmFsdWUsIHZhbHVlKTsNCj4gKwkJLyogUGVy ZmVjdCBtYXRjaCAqLw0KDQpUaGlzIGNvbW1lbnQgaXMgbGl0ZXJhbGx5IHJlcGVhdGluZyB3aGF0 IGNvZGUgc2F5cy4NCg0KPiArCQlpZiAoc2NvcmUgPT0gSU5URUxfUFBBVF9QRVJGRUNUX01BVENI KSB7DQo+ICsJCQllbnRyeSA9ICZwcGF0LT5lbnRyaWVzW2ldOw0KPiArCQkJa3JlZl9nZXQoJmVu dHJ5LT5yZWZfY291bnQpOw0KPiArCQkJcmV0dXJuIGVudHJ5Ow0KPiArCQl9DQo+ICsNCj4gKwkJ aWYgKHNjb3JlID4gYmVzdF9zY29yZSkgew0KPiArCQkJZW50cnkgPSAmcHBhdC0+ZW50cmllc1tp XTsNCg0KQWJvdmUgY291bGQgYmUgc2ltcGxpZmllZDoNCg0KCQkJaWYgKHNjb3JlID09IElOVEVM X1BQQVRfUEVSRkVDVF9NQVRDSCkgew0KCQkJCWtyZWZfZ2V0KCZlbnRyeS0+cmVmKTsNCgkJCQly ZXR1cm4gZW50cnk7DQoJCQl9DQoNCj4gKwkJCWJlc3Rfc2NvcmUgPSBzY29yZTsNCj4gKwkJfQ0K PiArCQl1c2VkKys7DQo+ICsJfQ0KPiArDQo+ICsJLyogTm8gbWF0Y2hlZCBlbnRyeSBhbmQgd2Ug Y2FuJ3QgYWxsb2NhdGUgYSBuZXcgZW50cnkuICovDQoNCkRSTV9FUlJPUiByZXBsaWNhdGVzIHRo aXMgY29tbWVudCdzIGluZm9ybWF0aW9uLg0KDQo+ICsJaWYgKCFiZXN0X3Njb3JlICYmIHVzZWQg PT0gcHBhdC0+bWF4X2VudHJpZXMpIHsNCj4gKwkJRFJNX0VSUk9SKCJGYWlsIHRvIGdldCBQUEFU IGVudHJ5XG4iKTsNCg0KRFJNX0RFQlVHX0RSSVZFUiBhdCBtb3N0Lg0KDQo+ICsJCXJldHVybiBF UlJfUFRSKC1FTk9TUEMpOw0KPiArCX0NCj4gKw0KPiArCS8qDQo+ICsJICogRm91bmQgYSBtYXRj aGVkIGVudHJ5IHdoaWNoIGlzIG5vdCBwZXJmZWN0LA0KPiArCSAqIGFuZCB3ZSBjYW4ndCBhbGxv Y2F0ZSBhIG5ldyBlbnRyeS4NCj4gKwkgKi8NCj4gKwlpZiAoYmVzdF9zY29yZSAmJiB1c2VkID09 IHBwYXQtPm1heF9lbnRyaWVzKSB7DQo+ICsJCWtyZWZfZ2V0KCZlbnRyeS0+cmVmX2NvdW50KTsN Cj4gKwkJcmV0dXJuIGVudHJ5Ow0KPiArCX0NCg0KQWJvdmUgY29kZSBjb3VsZCBiZSBjb21iaW5l ZDoNCg0KCWlmIChzY2FubmVkID09IHBwYXQtPm1heF9lbnRyaWVzKSB7DQoJCWlmKCFiZXN0X3Nj b3JlKQ0KCQkJcmV0dXJuIEVSUl9QVFIoLUVOT1NQQyk7DQoJCWtyZWZfZ2V0KCZlbnRyeS0+cmVm KTsNCgkJcmV0dXJuIGVudHJ5Ow0KCX0NCg0KPiArDQo+ICsJLyogQWxsb2NhdGUgYSBuZXcgZW50 cnkgKi8NCg0KVGhpcyBjb21tZW50IGlzIGFsc28ganVzdCB0ZWxsaW5nICJ3aGF0Iiwgd2hpY2gg d2UgY2FuIHNlZSBmcm9tIGNvZGUuDQoNCj4gKwlpID0gZmluZF9maXJzdF96ZXJvX2JpdChwcGF0 LT51c2VkLCBwcGF0LT5tYXhfZW50cmllcyk7DQo+ICsJZW50cnkgPSBhbGxvY19wcGF0X2VudHJ5 KHBwYXQsIGksIHZhbHVlKTsNCj4gKwlwcGF0LT51cGRhdGUoaTkxNSk7DQo+ICsJcmV0dXJuIGVu dHJ5Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBwdXRfcHBhdChzdHJ1Y3Qga3JlZiAqa3Jl ZikNCg0KcHBhdF9yZWxlYXNlIG1pZ2h0IGNhdXNlIGxlc3MgY29uZnVzaW9uLCBvdGhlcndpc2Ug dGhlcmUgd2lsbCBiZSAzIHB1dCBmdW5jdGlvbnMuDQoNCj4gK3sNCj4gKwlzdHJ1Y3QgaW50ZWxf cHBhdF9lbnRyeSAqZW50cnkgPQ0KPiArCQljb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IGludGVs X3BwYXRfZW50cnksIHJlZl9jb3VudCk7DQo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5 MTUgPSBlbnRyeS0+cHBhdC0+aTkxNTsNCj4gKw0KPiArCWZyZWVfcHBhdF9lbnRyeShlbnRyeSk7 DQo+ICsJZW50cnktPnBwYXQtPnVwZGF0ZShpOTE1KTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsg KiBpbnRlbF9wcGF0X3B1dCAtIHB1dCBiYWNrIHRoZSBQUEFUIGVudHJ5IGdvdCBmcm9tIGludGVs X3BwYXRfZ2V0KCkNCj4gKyAqIEBlbnRyeTogYW4gaW50ZWwgUFBBVCBlbnRyeQ0KPiArICoNCj4g KyAqIFB1dCBiYWNrIHRoZSBQUEFUIGVudHJ5IGdvdCBmcm9tIGludGVsX3BwYXRfZ2V0KCkuIElm IHRoZSBQUEFUIA0KPiAraW5kZXggb2YgdGhlDQo+ICsgKiBlbnRyeSBpcyBkeW5hbWljYWxseSBh bGxvY2F0ZWQsIGl0cyByZWZlcmVuY2UgY291bnQgd2lsbCBiZSANCj4gK2RlY3JlYXNlZC4gT25j ZQ0KPiArICogdGhlIHJlZmVyZW5jZSBjb3VudCBiZWNvbWVzIGludG8gemVybywgdGhlIFBQQVQg aW5kZXggYmVjb21lcyBmcmVlIGFnYWluLg0KPiArICovDQo+ICt2b2lkIGludGVsX3BwYXRfcHV0 KGNvbnN0IHN0cnVjdCBpbnRlbF9wcGF0X2VudHJ5ICplbnRyeSkgew0KPiArCXN0cnVjdCBpbnRl bF9wcGF0ICpwcGF0ID0gZW50cnktPnBwYXQ7DQo+ICsJaW50IGluZGV4ID0gZW50cnkgLSBwcGF0 LT5lbnRyaWVzOw0KPiArDQo+ICsJaWYgKFdBUk5fT04oIXBwYXQtPm1heF9lbnRyaWVzKSkNCj4g KwkJcmV0dXJuOw0KDQpUaGlzIGlzIGNsZWFybHkgYSBrZXJuZWwgcHJvZ3JhbW1lciBlcnJvciAo YW5kIGEgc2VyaW91cyBvbmUsIHNvIGNvdWxkIGJlIEdFTV9CVUdfT04pLg0KDQo+ICsNCj4gKwlr cmVmX3B1dCgmcHBhdC0+ZW50cmllc1tpbmRleF0ucmVmX2NvdW50LCBwdXRfcHBhdCk7IH0NCj4g Kw0KPiArc3RhdGljIHZvaWQgY25sX3ByaXZhdGVfcGF0X3VwZGF0ZShzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYpIA0KPiArew0KPiArCXN0cnVjdCBpbnRlbF9wcGF0ICpwcGF0ID0g JmRldl9wcml2LT5wcGF0Ow0KPiArCWludCBpOw0KPiArDQo+ICsJZm9yX2VhY2hfc2V0X2JpdChp LCBwcGF0LT5kaXJ0eSwgcHBhdC0+bWF4X2VudHJpZXMpIHsNCj4gKwkJY2xlYXJfYml0KGksIHBw YXQtPmRpcnR5KTsNCj4gKwkJSTkxNV9XUklURShHRU4xMF9QQVRfSU5ERVgoaSksIHBwYXQtPmVu dHJpZXNbaV0udmFsdWUpOw0KDQpDbGVhcmluZyB0aGUgYml0IGFmdGVyIHdyaXRlIGlzIHRoZSBs b2dpY2FsIHRoaW5nIHRvIGRvLg0KDQo+ICsJfQ0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBi ZHdfcHJpdmF0ZV9wYXRfdXBkYXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikg DQo+ICt7DQo+ICsJc3RydWN0IGludGVsX3BwYXQgKnBwYXQgPSAmZGV2X3ByaXYtPnBwYXQ7DQo+ ICsJdTY0IHBhdCA9IDA7DQo+ICsJaW50IGk7DQo+ICsNCj4gKwlmb3IgKGkgPSAwOyBpIDwgcHBh dC0+bWF4X2VudHJpZXM7IGkrKykNCj4gKwkJcGF0IHw9IEdFTjhfUFBBVChpLCBwcGF0LT5lbnRy aWVzW2ldLnZhbHVlKTsNCj4gKw0KPiArCWJpdG1hcF9jbGVhcihwcGF0LT5kaXJ0eSwgMCwgcHBh dC0+bWF4X2VudHJpZXMpOw0KPiArDQo+ICsJSTkxNV9XUklURShHRU44X1BSSVZBVEVfUEFUX0xP LCBwYXQpOw0KPiArCUk5MTVfV1JJVEUoR0VOOF9QUklWQVRFX1BBVF9ISSwgcGF0ID4+IDMyKTsN Cg0KV2hpbGUgbW92aW5nIHRoZSBjb2RlLCBsb3dlcl8zMl9iaXRzIGFuZCB1cHBlcl8zMl9iaXRz LCBpdCBzaG91bGQgcmVhbGx5IHdhcm4gd2l0aG91dCB0aGVtPw0KDQo+ICt9DQo+ICsNCj4gKyNk ZWZpbmUgZ2VuOF9wYXRfY2EodikgKCh2KSAmIDB4MykNCj4gKyNkZWZpbmUgZ2VuOF9wYXRfdGMo dikgKCgodikgPj4gMikgJiAweDMpICNkZWZpbmUgZ2VuOF9wYXRfYWdlKHYpIA0KPiArKCgodikg Pj4gNCkgJiAweDMpDQoNCk1hZ2ljIG51bWJlcnMuIEknbSBhbHNvIG5vdCAxMDAlIHN1cmUgaWYg S01EIHdpbGwgd2FudCBwYXJ0aWFsIG1hdGNoZXMsIG9yIGlmIEdWVCBzaG91bGQgcGFzcyBpbiBh IHNjb3JpbmcgZnVuY3Rpb24uDQoNCj4gKw0KPiArc3RhdGljIHVuc2lnbmVkIGludCBiZHdfcHJp dmF0ZV9wYXRfbWF0Y2godTggc3JjLCB1OCBkc3QpIHsNCj4gKwl1bnNpZ25lZCBpbnQgc2NvcmUg PSAwOw0KPiArDQo+ICsJLyogQ2FjaGUgYXR0cmlidXRlIGhhcyB0byBiZSBtYXRjaGVkLiAqLw0K PiArCWlmIChnZW44X3BhdF9jYShzcmMpICE9IGdlbjhfcGF0X2NhKGRzdCkpDQo+ICsJCXJldHVy biAwOw0KPiArDQo+ICsJaWYgKGdlbjhfcGF0X2FnZShzcmMpID09IGdlbjhfcGF0X2FnZShkc3Qp KQ0KPiArCQlzY29yZSArPSAxOw0KPiArDQo+ICsJaWYgKGdlbjhfcGF0X3RjKHNyYykgPT0gZ2Vu OF9wYXRfdGMoZHN0KSkNCj4gKwkJc2NvcmUgKz0gMjsNCg0KSSdkIGxpZnQgdGhpcyBjaGVjayB0 byBoYXZlIHRoZW0gYWxsIGluIGltcG9ydGFuY2Ugb3JkZXIuDQoNCj4gKw0KPiArCWlmIChzY29y ZSA9PSAzKQ0KPiArCQlyZXR1cm4gSU5URUxfUFBBVF9QRVJGRUNUX01BVENIOw0KPiArDQo+ICsJ cmV0dXJuIHNjb3JlOw0KPiArfQ0KPiArDQo+ICsjZGVmaW5lIGNodl9nZXRfc25vb3AodikgKCgo dikgPj4gNikgJiAweDEpDQoNCk1hZ2ljIG51bWJlcnMsIHdoaWNoIG5lZWQgdG8gYmUgaW4gaTkx NV9yZWcuaCB3aXRoICNkZWZpbmUuIFNob3VsZCBhbHNvIGJlIGNodl9wYXRfc25vb3AoKTsNCg0K PiArDQo+ICtzdGF0aWMgdW5zaWduZWQgaW50IGNodl9wcml2YXRlX3BhdF9tYXRjaCh1OCBzcmMs IHU4IGRzdCkgew0KPiArCWlmIChjaHZfZ2V0X3Nub29wKHNyYykgPT0gY2h2X2dldF9zbm9vcChk c3QpKQ0KPiArCQlyZXR1cm4gSU5URUxfUFBBVF9QRVJGRUNUX01BVENIOw0KPiArDQo+ICsJcmV0 dXJuIDA7DQoNCglyZXR1cm4gY2h2X3BhdF9zbm9vcChzcmMpID09IGNodl9wYXRfc25vb3AoZHN0 KSA/DQoJICAgICAgIElOVEVMX1BQQVRfUEVSRkVDVF9NQVRDSCA6IDA7DQoNCj4gK30NCj4gKw0K PiArc3RhdGljIHZvaWQgY25sX3NldHVwX3ByaXZhdGVfcHBhdChzdHJ1Y3QgaW50ZWxfcHBhdCAq cHBhdCkgew0KPiArCXBwYXQtPm1heF9lbnRyaWVzID0gODsNCj4gKwlwcGF0LT51cGRhdGUgPSBj bmxfcHJpdmF0ZV9wYXRfdXBkYXRlOw0KPiArCXBwYXQtPm1hdGNoID0gYmR3X3ByaXZhdGVfcGF0 X21hdGNoOw0KPiArCXBwYXQtPmR1bW15X3ZhbHVlID0gR0VOOF9QUEFUX0xMQ0VMTEMgfCBHRU44 X1BQQVRfQUdFKDMpOw0KDQoiZHVtbXlfdmFsdWUiIGlzIG5vdCBhIHZlcnkgZGVzY3JpcHRpdmUg bmFtZS4NCg0KPiArDQo+ICAJLyogWFhYOiBzcGVjIGlzIHVuY2xlYXIgaWYgdGhpcyBpcyBzdGls bCBuZWVkZWQgZm9yIENOTCsgKi8NCj4gLQlpZiAoIVVTRVNfUFBHVFQoZGV2X3ByaXYpKSB7DQo+ IC0JCUk5MTVfV1JJVEUoR0VOMTBfUEFUX0lOREVYKDApLCBHRU44X1BQQVRfVUMpOw0KPiArCWlm ICghVVNFU19QUEdUVChwcGF0LT5pOTE1KSkgew0KPiArCQlhbGxvY19wcGF0X2VudHJ5KHBwYXQs IDAsIEdFTjhfUFBBVF9VQyk7DQo+ICAJCXJldHVybjsNCj4gIAl9DQo+ICANCj4gLQlJOTE1X1dS SVRFKEdFTjEwX1BBVF9JTkRFWCgwKSwgR0VOOF9QUEFUX1dCIHwgR0VOOF9QUEFUX0xMQyk7DQo+ IC0JSTkxNV9XUklURShHRU4xMF9QQVRfSU5ERVgoMSksIEdFTjhfUFBBVF9XQyB8IEdFTjhfUFBB VF9MTENFTExDKTsNCj4gLQlJOTE1X1dSSVRFKEdFTjEwX1BBVF9JTkRFWCgyKSwgR0VOOF9QUEFU X1dUIHwgR0VOOF9QUEFUX0xMQ0VMTEMpOw0KPiAtCUk5MTVfV1JJVEUoR0VOMTBfUEFUX0lOREVY KDMpLCBHRU44X1BQQVRfVUMpOw0KPiAtCUk5MTVfV1JJVEUoR0VOMTBfUEFUX0lOREVYKDQpLCBH RU44X1BQQVRfTExDRUxMQyB8IEdFTjhfUFBBVF9BR0UoMCkpOw0KPiAtCUk5MTVfV1JJVEUoR0VO MTBfUEFUX0lOREVYKDUpLCBHRU44X1BQQVRfTExDRUxMQyB8IEdFTjhfUFBBVF9BR0UoMSkpOw0K PiAtCUk5MTVfV1JJVEUoR0VOMTBfUEFUX0lOREVYKDYpLCBHRU44X1BQQVRfTExDRUxMQyB8IEdF TjhfUFBBVF9BR0UoMikpOw0KPiAtCUk5MTVfV1JJVEUoR0VOMTBfUEFUX0lOREVYKDcpLCBHRU44 X1BQQVRfTExDRUxMQyB8IEdFTjhfUFBBVF9BR0UoMykpOw0KPiArCWFsbG9jX3BwYXRfZW50cnko cHBhdCwgMCwgR0VOOF9QUEFUX1dCIHwgR0VOOF9QUEFUX0xMQyk7DQo+ICsJYWxsb2NfcHBhdF9l bnRyeShwcGF0LCAyLCBHRU44X1BQQVRfV1QgfCBHRU44X1BQQVRfTExDRUxMQyk7DQo+ICsJYWxs b2NfcHBhdF9lbnRyeShwcGF0LCAzLCBHRU44X1BQQVRfVUMpOw0KPiArCWFsbG9jX3BwYXRfZW50 cnkocHBhdCwgNCwgR0VOOF9QUEFUX0xMQ0VMTEMgfCBHRU44X1BQQVRfQUdFKDApKTsNCg0KTWF5 YmUgSSdtIG5vdCBmb2xsb3dpbmcgYXQgYWxsLCBidXQgdGhpcyBzZWVtcyBsaWtlIHF1aXRlIGEg Y2hhbmdlIHRvIG1lPyAwLTMgdXNlZCB0byBiZSBXQiwgV0MsIFdULCBVQywgbm93IDEgaXMgdW5z ZXQsIGxpa2UgaXMgNS03Lg0KDQpJJ2QgbGVhdmUgYWxsIGNoYW5nZXMgdG8gcmVnaXN0ZXJzIHRv IGEgbGF0ZXIgcGF0Y2ggYW5kIGxlYXZlIHRoaXMgcGF0Y2ggdG8gZG8gd2hhdCB0aGUgdGl0bGUg c2F5cywgIkludHJvZHVjZSBwcml2YXRlIFBBVCBtYW5hZ2VtZW50Ii4NCg0KPiAgc3RhdGljIHZv aWQgc2V0dXBfcHJpdmF0ZV9wYXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KSAg ew0KPiArCXN0cnVjdCBpbnRlbF9wcGF0ICpwcGF0ID0gJmRldl9wcml2LT5wcGF0Ow0KPiArCWlu dCBpOw0KPiArDQo+ICsJcHBhdC0+aTkxNSA9IGRldl9wcml2Ow0KPiArDQo+ICsJLyogTG9hZCBw ZXItcGxhdGZvcm0gUFBBVCBjb25maWd1cmF0aW9ucyAqLw0KDQpUaGlzIGNvbW1lbnQgaXMgYWdh aW4ganVzdCB0YWtpbmcgc3BhY2UuDQoNCj4gIAlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAx MCkNCj4gLQkJY25sX3NldHVwX3ByaXZhdGVfcHBhdChkZXZfcHJpdik7DQo+ICsJCWNubF9zZXR1 cF9wcml2YXRlX3BwYXQocHBhdCk7DQo+ICAJZWxzZSBpZiAoSVNfQ0hFUlJZVklFVyhkZXZfcHJp dikgfHwgSVNfR0VOOV9MUChkZXZfcHJpdikpDQo+IC0JCWNodl9zZXR1cF9wcml2YXRlX3BwYXQo ZGV2X3ByaXYpOw0KPiArCQljaHZfc2V0dXBfcHJpdmF0ZV9wcGF0KHBwYXQpOw0KPiAgCWVsc2UN Cj4gLQkJYmR3X3NldHVwX3ByaXZhdGVfcHBhdChkZXZfcHJpdik7DQo+ICsJCWJkd19zZXR1cF9w cml2YXRlX3BwYXQocHBhdCk7DQo+ICsNCj4gKwlHRU1fQlVHX09OKHBwYXQtPm1heF9lbnRyaWVz ID4gSU5URUxfTUFYX1BQQVRfRU5UUklFUyk7DQo+ICsNCj4gKwlpZiAoIXBwYXQtPm1heF9lbnRy aWVzKQ0KPiArCQlyZXR1cm47DQoNCkknbSBub3Qgc3VyZSB3aHkgd2UgaGF2ZSAiIW1heF9lbnRy aWVzIiBjaGVja3MgZ29pbmcsIHdlIHNob3VsZCBoYXZlIG9uZSBHRU1fQlVHX09OIGF0IHRoaXMg cG9pbnQgYW5kIGluIHRoZSByZXN0IHlvdSBjYW4gYXNzdW1lIGl0IHRvIGJlIG5vbnplcm8uDQoN Cj4gKw0KPiArCS8qIEZpbGwgdW51c2VkIFBQQVQgZW50cmllcyB3aXRoIGR1bW15IFBQQVQgdmFs dWUgKi8NCj4gKwlmb3JfZWFjaF9jbGVhcl9iaXQoaSwgcHBhdC0+dXNlZCwgcHBhdC0+bWF4X2Vu dHJpZXMpIHsNCj4gKwkJcHBhdC0+ZW50cmllc1tpXS52YWx1ZSA9IHBwYXQtPmR1bW15X3ZhbHVl Ow0KPiArCQlwcGF0LT5lbnRyaWVzW2ldLnBwYXQgPSBwcGF0Ow0KPiArCQlzZXRfYml0KGksIHBw YXQtPmRpcnR5KTsNCj4gKwl9DQo+ICsNCj4gKwkvKiBXcml0ZSB0aGUgSFcgKi8NCg0KSWYgdGhl IGNhbGxiYWNrIHdhcyBuYW1lZCB1cGRhdGVfaHcoKSwgdGhpcyBjb21tZW50IHdvdWxkIGJlIHVu bmVjZXNzYXJ5Lg0KDQo+ICsJcHBhdC0+dXBkYXRlKGRldl9wcml2KTsNCj4gIH0NCg0KPFNOSVA+ DQoNCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmgNCj4gQEAgLTUz Niw2ICs1MzYsNDAgQEAgaTkxNV92bV90b19nZ3R0KHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2Ug KnZtKQ0KPiAgCXJldHVybiBjb250YWluZXJfb2Yodm0sIHN0cnVjdCBpOTE1X2dndHQsIGJhc2Up OyAgfQ0KPiAgDQo+ICsjZGVmaW5lIElOVEVMX01BWF9QUEFUX0VOVFJJRVMgOA0KPiArI2RlZmlu ZSBJTlRFTF9QUEFUX1BFUkZFQ1RfTUFUQ0ggKH4wVSkNCj4gKw0KPiArc3RydWN0IGludGVsX3Bw YXQ7DQo+ICsNCj4gK3N0cnVjdCBpbnRlbF9wcGF0X2VudHJ5IHsNCj4gKwlzdHJ1Y3QgaW50ZWxf cHBhdCAqcHBhdDsNCj4gKwlzdHJ1Y3Qga3JlZiByZWZfY291bnQ7DQoNCglKdXN0ICJyZWYiLCBs aWtlIGVsc2V3aGVyZSBpbiBjb2RlLg0KDQo+ICsJdTggdmFsdWU7DQo+ICt9Ow0KPiArDQo+ICtz dHJ1Y3QgaW50ZWxfcHBhdCB7DQo+ICsJc3RydWN0IGludGVsX3BwYXRfZW50cnkgZW50cmllc1tJ TlRFTF9NQVhfUFBBVF9FTlRSSUVTXTsNCj4gKwlERUNMQVJFX0JJVE1BUCh1c2VkLCBJTlRFTF9N QVhfUFBBVF9FTlRSSUVTKTsNCj4gKwlERUNMQVJFX0JJVE1BUChkaXJ0eSwgSU5URUxfTUFYX1BQ QVRfRU5UUklFUyk7DQo+ICsNCg0KVGhpcyByZWFsbHkgZ29lcyB3aXRoIHRoZSBwcmV2aW91cyBn cm91cCBvZiB2YXJpYWJsZS4gU28gbm8gbmV3bGluZS4NCg0KPiArCXVuc2lnbmVkIGludCBtYXhf ZW50cmllczsNCj4gKw0KPiArCXU4IGR1bW15X3ZhbHVlOw0KDQpCZXR0ZXIgbmFtZSwgbGlrZSAi Y2xlYXJfdmFsdWUiIGFuZCBzaG9ydCBkZXNjcmlwdGlvbiBtYXkgYmUgdXNlZnVsLg0KDQo+ICsJ LyoNCj4gKwkgKiBSZXR1cm4gYSBzY29yZSB0byBzaG93IGhvdyB0d28gUFBBVCB2YWx1ZXMgbWF0 Y2gsDQo+ICsJICogYSBJTlRFTF9QUEFUX1BFUkZFQ1RfTUFUQ0ggaW5kaWNhdGVzIGEgcGVyZmVj dCBtYXRjaA0KPiArCSAqLw0KPiArCXVuc2lnbmVkIGludCAoKm1hdGNoKSh1OCBzcmMsIHU4IGRz dCk7DQo+ICsJLyogV3JpdGUgdGhlIFBQQVQgY29uZmlndXJhdGlvbiBpbnRvIEhXLiAqLw0KPiAr CXZvaWQgKCp1cGRhdGUpKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KTsNCj4gKw0KPiAr CXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1Ow0KPiArfTsNCj4gKw0KPiArY29uc3Qgc3Ry dWN0IGludGVsX3BwYXRfZW50cnkgKmludGVsX3BwYXRfZ2V0KHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlIA0KPiArKmk5MTUsDQoNClNhbWUgaGVyZSB3aXRoIHR5cGUgdnMgbmFtZS4NCg0KPiArCQkJ CQkgICAgICB1OCB2YWx1ZSk7DQo+ICt2b2lkIGludGVsX3BwYXRfcHV0KGNvbnN0IHN0cnVjdCBp bnRlbF9wcGF0X2VudHJ5ICplbnRyeSk7DQoNClJlZ2FyZHMsIGpvb25hcw0KLS0NCkpvb25hcyBM YWh0aW5lbg0KT3BlbiBTb3VyY2UgVGVjaG5vbG9neSBDZW50ZXINCkludGVsIENvcnBvcmF0aW9u DQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1n ZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9s aXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK