From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Kim, Jonathan" Subject: [PATCH] drm/amdgpu: add pmu counters Date: Mon, 3 Jun 2019 21:51:02 +0000 Message-ID: <20190603215050.10317-1-jonathan.kim@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Language: en-US List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: "amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org" Cc: "Kim, Jonathan" YWRkIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcgdW5pdCAocG11KSBjb3VudGVycy4NCg0KQ2hhbmdl LUlkOiBJNGQwNDgwYjhhYWE4MDg2YTI4YjZhNzlhNjAzMjJiMDYwZTFhYTczZQ0KU2lnbmVkLW9m Zi1ieTogSm9uYXRoYW4gS2ltIDxKb25hdGhhbi5LaW1AYW1kLmNvbT4NCi0tLQ0KIGRyaXZlcnMv Z3B1L2RybS9hbWQvYW1kZ3B1L01ha2VmaWxlICAgICAgICB8ICAgMiArLQ0KIGRyaXZlcnMvZ3B1 L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9kZXZpY2UuYyB8ICAgNiArDQogZHJpdmVycy9ncHUvZHJt L2FtZC9hbWRncHUvYW1kZ3B1X3BtdS5jICAgIHwgMzUzICsrKysrKysrKysrKysrKysrKysrKw0K IGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9wbXUuaCAgICB8ICA1MSArKysNCiA0 IGZpbGVzIGNoYW5nZWQsIDQxMSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pDQogY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9wbXUuYw0KIGNy ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfcG11LmgN Cg0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L01ha2VmaWxlIGIvZHJp dmVycy9ncHUvZHJtL2FtZC9hbWRncHUvTWFrZWZpbGUNCmluZGV4IDU3Y2U0NGNjMzIyNi4uNGM5 ZmQyNjQ1ZjY0IDEwMDY0NA0KLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvTWFrZWZp bGUNCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L01ha2VmaWxlDQpAQCAtNTQsNyAr NTQsNyBAQCBhbWRncHUteSArPSBhbWRncHVfZGV2aWNlLm8gYW1kZ3B1X2ttcy5vIFwNCiAJYW1k Z3B1X2d0dF9tZ3IubyBhbWRncHVfdnJhbV9tZ3IubyBhbWRncHVfdmlydC5vIGFtZGdwdV9hdG9t ZmlybXdhcmUubyBcDQogCWFtZGdwdV92Zl9lcnJvci5vIGFtZGdwdV9zY2hlZC5vIGFtZGdwdV9k ZWJ1Z2ZzLm8gYW1kZ3B1X2lkcy5vIFwNCiAJYW1kZ3B1X2dtYy5vIGFtZGdwdV94Z21pLm8gYW1k Z3B1X2NzYS5vIGFtZGdwdV9yYXMubyBhbWRncHVfdm1fY3B1Lm8gXA0KLQlhbWRncHVfdm1fc2Rt YS5vDQorCWFtZGdwdV92bV9zZG1hLm8gYW1kZ3B1X3BtdS5vDQogDQogIyBhZGQgYXNpYyBzcGVj aWZpYyBibG9jaw0KIGFtZGdwdS0kKENPTkZJR19EUk1fQU1ER1BVX0NJSykrPSBjaWsubyBjaWtf aWgubyBrdl9zbWMubyBrdl9kcG0ubyBcDQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2Ft ZC9hbWRncHUvYW1kZ3B1X2RldmljZS5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1k Z3B1X2RldmljZS5jDQppbmRleCAwMDMzNTBhMmQyOTkuLmJjZmFiZDAyNWY1ZCAxMDA2NDQNCi0t LSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9kZXZpY2UuYw0KKysrIGIvZHJp dmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2RldmljZS5jDQpAQCAtNjEsNiArNjEsNyBA QA0KIA0KICNpbmNsdWRlICJhbWRncHVfeGdtaS5oIg0KICNpbmNsdWRlICJhbWRncHVfcmFzLmgi DQorI2luY2x1ZGUgImFtZGdwdV9wbXUuaCINCiANCiBNT0RVTEVfRklSTVdBUkUoImFtZGdwdS92 ZWdhMTBfZ3B1X2luZm8uYmluIik7DQogTU9EVUxFX0ZJUk1XQVJFKCJhbWRncHUvdmVnYTEyX2dw dV9pbmZvLmJpbiIpOw0KQEAgLTI3NTcsNiArMjc1OCwxMCBAQCBpbnQgYW1kZ3B1X2RldmljZV9p bml0KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LA0KIAkJcmV0dXJuIHI7DQogCX0NCiANCisJ ciA9IGFtZGdwdV9wbXVfaW5pdChhZGV2KTsNCisJaWYgKHIpDQorCQlkZXZfZXJyKGFkZXYtPmRl diwgImFtZGdwdV9wbXVfaW5pdCBmYWlsZWRcbiIpOw0KKw0KIAlyZXR1cm4gMDsNCiANCiBmYWls ZWQ6DQpAQCAtMjgyMiw2ICsyODI3LDcgQEAgdm9pZCBhbWRncHVfZGV2aWNlX2Zpbmkoc3RydWN0 IGFtZGdwdV9kZXZpY2UgKmFkZXYpDQogCWFtZGdwdV9kZWJ1Z2ZzX3JlZ3NfY2xlYW51cChhZGV2 KTsNCiAJZGV2aWNlX3JlbW92ZV9maWxlKGFkZXYtPmRldiwgJmRldl9hdHRyX3BjaWVfcmVwbGF5 X2NvdW50KTsNCiAJYW1kZ3B1X3Vjb2RlX3N5c2ZzX2ZpbmkoYWRldik7DQorCWFtZGdwdV9wbXVf ZmluaShhZGV2KTsNCiB9DQogDQogDQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9h bWRncHUvYW1kZ3B1X3BtdS5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3Bt dS5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMDAwLi5mZTMxODkxNGIw N2ENCi0tLSAvZGV2L251bGwNCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdw dV9wbXUuYw0KQEAgLTAsMCArMSwzNTMgQEANCisvKg0KKyAqIENvcHlyaWdodCAyMDE5IEFkdmFu Y2VkIE1pY3JvIERldmljZXMsIEluYy4NCisgKg0KKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdy YW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhDQorICogY29w eSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRo ZSAiU29mdHdhcmUiKSwNCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3Ry aWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uDQorICogdGhlIHJpZ2h0cyB0byB1 c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2Us DQorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBw ZXJzb25zIHRvIHdob20gdGhlDQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBz dWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoNCisgKg0KKyAqIFRoZSBhYm92ZSBj b3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1 ZGVkIGluDQorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29m dHdhcmUuDQorICoNCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9V VCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUg0KKyAqIElNUExJRUQsIElOQ0xVRElO RyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLA0K KyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQu ICBJTiBOTyBFVkVOVCBTSEFMTA0KKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhP UihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUg0KKyAqIE9USEVSIExJQUJJ TElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNF LA0KKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09G VFdBUkUgT1IgVEhFIFVTRSBPUg0KKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4N CisgKg0KKyAqIEF1dGhvcjogSm9uYXRoYW4gS2ltIDxqb25hdGhhbi5raW1AYW1kLmNvbT4NCisg Kg0KKyAqLw0KKw0KKyNpbmNsdWRlIDxsaW51eC9wZXJmX2V2ZW50Lmg+DQorI2luY2x1ZGUgPGxp bnV4L2luaXQuaD4NCisjaW5jbHVkZSAiYW1kZ3B1LmgiDQorI2luY2x1ZGUgImFtZGdwdV9wbXUu aCINCisjaW5jbHVkZSAiZGZfdjNfNi5oIg0KKw0KKyNkZWZpbmUgUE1VX05BTUVfU0laRSAzMg0K Kw0KKy8qIHJlY29yZCB0byBrZWVwIHRyYWNrIG9mIHBtdSBlbnRyeSBwZXIgcG11IHR5cGUgcGVy IGRldmljZSAqLw0KK3N0cnVjdCBhbWRncHVfcG11X2VudHJ5IHsNCisJc3RydWN0IGxpc3RfaGVh ZCBlbnRyeTsNCisJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXY7DQorCXN0cnVjdCBwbXUgcG11 Ow0KKwl1bnNpZ25lZCBpbnQgcG11X3BlcmZfdHlwZTsNCit9Ow0KKw0KK3N0YXRpYyBMSVNUX0hF QUQoYW1kZ3B1X3BtdV9saXN0KTsNCisNCisvKiB2ZWdhMjAgYXR0cmlidXRlIGdyb3VwcyAqLw0K Kw0KKy8qIGRhdGEgZmFicmljIChkZikgKi8NCisNCisvKiBpbml0IHZlZ2EyMCBkZiBmb3JtYXQg YXR0cnMgKi8NCitQTVVfRk9STUFUX0FUVFIoZXZlbnQsCQkiY29uZmlnOjAtNyIpOw0KK1BNVV9G T1JNQVRfQVRUUihpbnN0YW5jZSwJImNvbmZpZzo4LTE1Iik7DQorUE1VX0ZPUk1BVF9BVFRSKHVt YXNrLAkJImNvbmZpZzoxNi0yMyIpOw0KKw0KKy8qIHZlZ2EyMCBkZiBmb3JtYXQgYXR0cmlidXRl cyAgKi8NCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYW1kZ3B1X3ZlZ2EyMF9kZl9mb3JtYXRf YXR0cnNbXSA9IHsNCisJJmZvcm1hdF9hdHRyX2V2ZW50LmF0dHIsDQorCSZmb3JtYXRfYXR0cl9p bnN0YW5jZS5hdHRyLA0KKwkmZm9ybWF0X2F0dHJfdW1hc2suYXR0ciwNCisJTlVMTA0KK307DQor DQorLyogdmVnYTIwIGRmIGZvcm1hdCBhdHRyaWJ1dGUgZ3JvdXAgKi8NCitzdGF0aWMgc3RydWN0 IGF0dHJpYnV0ZV9ncm91cCBhbWRncHVfdmVnYTIwX2RmX2Zvcm1hdF9hdHRyX2dyb3VwID0gew0K KwkubmFtZSA9ICJmb3JtYXQiLA0KKwkuYXR0cnMgPSBhbWRncHVfdmVnYTIwX2RmX2Zvcm1hdF9h dHRycywNCit9Ow0KKw0KKy8qIGluaXQgdmVnYTIwIGRmIGV2ZW50IGF0dHJzICovDQorQU1ER1BV X1BNVV9FVkVOVF9BVFRSKGNha2UwX3Bjc291dF90eGRhdGEsDQorCQkgICAgICAiZXZlbnQ9MHg3 LGluc3RhbmNlPTB4NDYsdW1hc2s9MHgyIik7DQorQU1ER1BVX1BNVV9FVkVOVF9BVFRSKGNha2Ux X3Bjc291dF90eGRhdGEsDQorCQkgICAgICAiZXZlbnQ9MHg3LGluc3RhbmNlPTB4NDcsdW1hc2s9 MHgyIik7DQorQU1ER1BVX1BNVV9FVkVOVF9BVFRSKGNha2UwX3Bjc291dF90eG1ldGEsDQorCQkg ICAgICAiZXZlbnQ9MHg3LGluc3RhbmNlPTB4NDYsdW1hc2s9MHg0Iik7DQorQU1ER1BVX1BNVV9F VkVOVF9BVFRSKGNha2UxX3Bjc291dF90eG1ldGEsDQorCQkgICAgICAiZXZlbnQ9MHg3LGluc3Rh bmNlPTB4NDcsdW1hc2s9MHg0Iik7DQorQU1ER1BVX1BNVV9FVkVOVF9BVFRSKGNha2UwX2Z0aWlu c3RhdF9yZXFhbGxvYywNCisJCSAgICAgICJldmVudD0weGIsaW5zdGFuY2U9MHg0Nix1bWFzaz0w eDQiKTsNCitBTURHUFVfUE1VX0VWRU5UX0FUVFIoY2FrZTFfZnRpaW5zdGF0X3JlcWFsbG9jLA0K KwkJICAgICAgImV2ZW50PTB4YixpbnN0YW5jZT0weDQ3LHVtYXNrPTB4NCIpOw0KK0FNREdQVV9Q TVVfRVZFTlRfQVRUUihjYWtlMF9mdGlpbnN0YXRfcnNwYWxsb2MsDQorCQkgICAgICAiZXZlbnQ9 MHhiLGluc3RhbmNlPTB4NDYsdW1hc2s9MHg4Iik7DQorQU1ER1BVX1BNVV9FVkVOVF9BVFRSKGNh a2UxX2Z0aWluc3RhdF9yc3BhbGxvYywNCisJCSAgICAgICJldmVudD0weGIsaW5zdGFuY2U9MHg0 Nyx1bWFzaz0weDgiKTsNCisNCisvKiB2ZWdhMjAgZGYgZXZlbnQgYXR0cmlidXRlcyAgKi8NCitz dGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYW1kZ3B1X3ZlZ2EyMF9kZl9ldmVudF9hdHRyc1tdID0g ew0KKwkmZXZlbnRfYXR0cl9jYWtlMF9wY3NvdXRfdHhkYXRhLmF0dHIsDQorCSZldmVudF9hdHRy X2Nha2UxX3Bjc291dF90eGRhdGEuYXR0ciwNCisJJmV2ZW50X2F0dHJfY2FrZTBfcGNzb3V0X3R4 bWV0YS5hdHRyLA0KKwkmZXZlbnRfYXR0cl9jYWtlMV9wY3NvdXRfdHhtZXRhLmF0dHIsDQorCSZl dmVudF9hdHRyX2Nha2UwX2Z0aWluc3RhdF9yZXFhbGxvYy5hdHRyLA0KKwkmZXZlbnRfYXR0cl9j YWtlMV9mdGlpbnN0YXRfcmVxYWxsb2MuYXR0ciwNCisJJmV2ZW50X2F0dHJfY2FrZTBfZnRpaW5z dGF0X3JzcGFsbG9jLmF0dHIsDQorCSZldmVudF9hdHRyX2Nha2UxX2Z0aWluc3RhdF9yc3BhbGxv Yy5hdHRyLA0KKwlOVUxMDQorfTsNCisNCisvKiB2ZWdhMjAgZGYgZXZlbnQgYXR0cmlidXRlIGdy b3VwICovDQorc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgYW1kZ3B1X3ZlZ2EyMF9kZl9l dmVudF9hdHRyX2dyb3VwID0gew0KKwkubmFtZSA9ICJldmVudHMiLA0KKwkuYXR0cnMgPSBhbWRn cHVfdmVnYTIwX2RmX2V2ZW50X2F0dHJzDQorfTsNCisNCisvKiB2ZWdhMjAgZGYgZXZlbnQgYXR0 ciBncm91cCAgKi8NCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqYW1kZ3B1 X3ZlZ2EyMF9kZl9hdHRyX2dyb3Vwc1tdID0gew0KKwkmYW1kZ3B1X3ZlZ2EyMF9kZl9mb3JtYXRf YXR0cl9ncm91cCwNCisJJmFtZGdwdV92ZWdhMjBfZGZfZXZlbnRfYXR0cl9ncm91cCwNCisJTlVM TA0KK307DQorDQorDQorLyogaW5pdGlhbGl6ZSBwZXJmIGNvdW50ZXIgKi8NCitzdGF0aWMgaW50 IGFtZGdwdV9wZXJmX2V2ZW50X2luaXQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQ0KK3sNCisJ c3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7DQorDQorCS8qIHRlc3QgdGhl IGV2ZW50IGF0dHIgdHlwZSBjaGVjayBmb3IgUE1VIGVudW1lcmF0aW9uICovDQorCWlmIChldmVu dC0+YXR0ci50eXBlICE9IGV2ZW50LT5wbXUtPnR5cGUpDQorCQlyZXR1cm4gLUVOT0VOVDsNCisN CisJLyogdXBkYXRlIHRoZSBod19wZXJmX2V2ZW50IHN0cnVjdCB3aXRoIGNvbmZpZyBkYXRhICov DQorCWh3Yy0+Y29uZiA9IGV2ZW50LT5hdHRyLmNvbmZpZzsNCisNCisJcmV0dXJuIDA7DQorfQ0K Kw0KKy8qIHN0YXJ0IHBlcmYgY291bnRlciAqLw0KK3N0YXRpYyB2b2lkIGFtZGdwdV9wZXJmX3N0 YXJ0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgaW50IGZsYWdzKQ0KK3sNCisJc3RydWN0IGh3 X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7DQorCXN0cnVjdCBhbWRncHVfcG11X2VudHJ5 ICpwZSA9IGNvbnRhaW5lcl9vZihldmVudC0+cG11LA0KKwkJCQkJCSAgc3RydWN0IGFtZGdwdV9w bXVfZW50cnksDQorCQkJCQkJICBwbXUpOw0KKw0KKwlpZiAoV0FSTl9PTl9PTkNFKCEoaHdjLT5z dGF0ZSAmIFBFUkZfSEVTX1NUT1BQRUQpKSkNCisJCXJldHVybjsNCisNCisJV0FSTl9PTl9PTkNF KCEoaHdjLT5zdGF0ZSAmIFBFUkZfSEVTX1VQVE9EQVRFKSk7DQorCWh3Yy0+c3RhdGUgPSAwOw0K Kw0KKwlpZiAoIShmbGFncyAmIFBFUkZfRUZfUkVMT0FEKSkNCisJCXBlLT5hZGV2LT5kZl9mdW5j cy0+cG1jX3N0YXJ0KHBlLT5hZGV2LCBod2MtPmNvbmYsIDEpOw0KKw0KKwlwZS0+YWRldi0+ZGZf ZnVuY3MtPnBtY19zdGFydChwZS0+YWRldiwgaHdjLT5jb25mLCAwKTsNCisNCisJcGVyZl9ldmVu dF91cGRhdGVfdXNlcnBhZ2UoZXZlbnQpOw0KKw0KK30NCisNCisvKiByZWFkIHBlcmYgY291bnRl ciAqLw0KK3N0YXRpYyB2b2lkIGFtZGdwdV9wZXJmX3JlYWQoc3RydWN0IHBlcmZfZXZlbnQgKmV2 ZW50KQ0KK3sNCisJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7DQorCXN0 cnVjdCBhbWRncHVfcG11X2VudHJ5ICpwZSA9IGNvbnRhaW5lcl9vZihldmVudC0+cG11LA0KKwkJ CQkJCSAgc3RydWN0IGFtZGdwdV9wbXVfZW50cnksDQorCQkJCQkJICBwbXUpOw0KKw0KKwl1NjQg Y291bnQsIHByZXY7DQorDQorCXN3aXRjaCAocGUtPnBtdV9wZXJmX3R5cGUpIHsNCisJY2FzZSBQ RVJGX1RZUEVfQU1ER1BVX0RGOg0KKwkJcGUtPmFkZXYtPmRmX2Z1bmNzLT5wbWNfZ2V0X2NvdW50 KHBlLT5hZGV2LCBod2MtPmNvbmYsICZjb3VudCk7DQorCWRlZmF1bHQ6DQorCQljb3VudCA9IDA7 DQorCQlicmVhazsNCisJfTsNCisNCisJcHJldiA9IGxvY2FsNjRfcmVhZCgmaHdjLT5wcmV2X2Nv dW50KTsNCisJaWYgKGxvY2FsNjRfY21weGNoZygmaHdjLT5wcmV2X2NvdW50LCBwcmV2LCBjb3Vu dCkgIT0gcHJldikNCisJCXJldHVybjsNCisNCisJbG9jYWw2NF9hZGQoY291bnQgLSBwcmV2LCAm ZXZlbnQtPmNvdW50KTsNCit9DQorDQorLyogc3RvcCBwZXJmIGNvdW50ZXIgKi8NCitzdGF0aWMg dm9pZCBhbWRncHVfcGVyZl9zdG9wKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgaW50IGZsYWdz KQ0KK3sNCisJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7DQorCXN0cnVj dCBhbWRncHVfcG11X2VudHJ5ICpwZSA9IGNvbnRhaW5lcl9vZihldmVudC0+cG11LA0KKwkJCQkJ CSAgc3RydWN0IGFtZGdwdV9wbXVfZW50cnksDQorCQkJCQkJICBwbXUpOw0KKw0KKwlpZiAoaHdj LT5zdGF0ZSAmIFBFUkZfSEVTX1VQVE9EQVRFKQ0KKwkJcmV0dXJuOw0KKw0KKwlzd2l0Y2ggKHBl LT5wbXVfcGVyZl90eXBlKSB7DQorCWNhc2UgUEVSRl9UWVBFX0FNREdQVV9ERjoNCisJCXBlLT5h ZGV2LT5kZl9mdW5jcy0+cG1jX3N0b3AocGUtPmFkZXYsIGh3Yy0+Y29uZiwgMCk7DQorCQlicmVh azsNCisJZGVmYXVsdDoNCisJCWJyZWFrOw0KKwl9Ow0KKw0KKwlXQVJOX09OX09OQ0UoaHdjLT5z dGF0ZSAmIFBFUkZfSEVTX1NUT1BQRUQpOw0KKwlod2MtPnN0YXRlIHw9IFBFUkZfSEVTX1NUT1BQ RUQ7DQorDQorCWlmIChod2MtPnN0YXRlICYgUEVSRl9IRVNfVVBUT0RBVEUpDQorCQlyZXR1cm47 DQorDQorCWFtZGdwdV9wZXJmX3JlYWQoZXZlbnQpOw0KKwlod2MtPnN0YXRlIHw9IFBFUkZfSEVT X1VQVE9EQVRFOw0KK30NCisNCisvKiBhZGQgcGVyZiBjb3VudGVyICAqLw0KK3N0YXRpYyBpbnQg YW1kZ3B1X3BlcmZfYWRkKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgaW50IGZsYWdzKQ0KK3sN CisNCisJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7DQorCWludCByZXR2 YWw7DQorDQorCXN0cnVjdCBhbWRncHVfcG11X2VudHJ5ICpwZSA9IGNvbnRhaW5lcl9vZihldmVu dC0+cG11LA0KKwkJCQkJCSAgc3RydWN0IGFtZGdwdV9wbXVfZW50cnksDQorCQkJCQkJICBwbXUp Ow0KKw0KKwlldmVudC0+aHcuc3RhdGUgPSBQRVJGX0hFU19VUFRPREFURSB8IFBFUkZfSEVTX1NU T1BQRUQ7DQorDQorCXN3aXRjaCAocGUtPnBtdV9wZXJmX3R5cGUpIHsNCisJY2FzZSBQRVJGX1RZ UEVfQU1ER1BVX0RGOg0KKwkJcmV0dmFsID0gcGUtPmFkZXYtPmRmX2Z1bmNzLT5wbWNfc3RhcnQo cGUtPmFkZXYsIGh3Yy0+Y29uZiwgMSk7DQorCQlicmVhazsNCisJZGVmYXVsdDoNCisJCXJldHVy biAwOw0KKwl9Ow0KKw0KKwlpZiAocmV0dmFsKQ0KKwkJcmV0dXJuIHJldHZhbDsNCisNCisJaWYg KGZsYWdzICYgUEVSRl9FRl9TVEFSVCkNCisJCWFtZGdwdV9wZXJmX3N0YXJ0KGV2ZW50LCBQRVJG X0VGX1JFTE9BRCk7DQorDQorCXJldHVybiByZXR2YWw7DQorDQorfQ0KKw0KKy8qIGRlbGV0ZSBw ZXJmIGNvdW50ZXIgICovDQorc3RhdGljIHZvaWQgYW1kZ3B1X3BlcmZfZGVsKHN0cnVjdCBwZXJm X2V2ZW50ICpldmVudCwgaW50IGZsYWdzKQ0KK3sNCisJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3 YyA9ICZldmVudC0+aHc7DQorDQorCXN0cnVjdCBhbWRncHVfcG11X2VudHJ5ICpwZSA9IGNvbnRh aW5lcl9vZihldmVudC0+cG11LA0KKwkJCQkJCSAgc3RydWN0IGFtZGdwdV9wbXVfZW50cnksDQor CQkJCQkJICBwbXUpOw0KKw0KKwlhbWRncHVfcGVyZl9zdG9wKGV2ZW50LCBQRVJGX0VGX1VQREFU RSk7DQorDQorCXN3aXRjaCAocGUtPnBtdV9wZXJmX3R5cGUpIHsNCisJY2FzZSBQRVJGX1RZUEVf QU1ER1BVX0RGOg0KKwkJcGUtPmFkZXYtPmRmX2Z1bmNzLT5wbWNfc3RvcChwZS0+YWRldiwgaHdj LT5jb25mLCAxKTsNCisJCWJyZWFrOw0KKwlkZWZhdWx0Og0KKwkJYnJlYWs7DQorCX07DQorDQor CXBlcmZfZXZlbnRfdXBkYXRlX3VzZXJwYWdlKGV2ZW50KTsNCit9DQorDQorLyogdmVnYTIwIHBt dXMgKi8NCisNCisvKiBkZiBwbXUgKi8NCitzdGF0aWMgY29uc3Qgc3RydWN0IHBtdSBhbWRncHVf dmVnYTIwX2RmX3BtdSBfX2luaXRjb25zdCA9IHsNCisJLmV2ZW50X2luaXQgPSBhbWRncHVfcGVy Zl9ldmVudF9pbml0LA0KKwkuYWRkID0gYW1kZ3B1X3BlcmZfYWRkLA0KKwkuZGVsID0gYW1kZ3B1 X3BlcmZfZGVsLA0KKwkuc3RhcnQgPSBhbWRncHVfcGVyZl9zdGFydCwNCisJLnN0b3AgPSBhbWRn cHVfcGVyZl9zdG9wLA0KKwkucmVhZCA9IGFtZGdwdV9wZXJmX3JlYWQsDQorCS50YXNrX2N0eF9u ciA9IHBlcmZfaW52YWxpZF9jb250ZXh0LA0KKwkuYXR0cl9ncm91cHMgPSBhbWRncHVfdmVnYTIw X2RmX2F0dHJfZ3JvdXBzLA0KK307DQorDQorLyogaW5pdCBwbXUgdHJhY2tpbmcgcGVyIHBtdSB0 eXBlICovDQoraW50IGluaXRfcG11X2J5X3R5cGUoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYs DQorCQkgIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKiphdHRyX2dyb3VwcywNCisJCSAg Y2hhciAqcG11X3R5cGVfbmFtZSwgY2hhciAqcG11X2ZpbGVfcHJlZml4LA0KKwkJICB1bnNpZ25l ZCBpbnQgcG11X3BlcmZfdHlwZSkNCit7DQorCWNoYXIgcG11X25hbWVbUE1VX05BTUVfU0laRV07 DQorCXN0cnVjdCBhbWRncHVfcG11X2VudHJ5ICpwbXVfZW50cnk7DQorCWludCByZXQgPSAwOw0K Kw0KKwlwbXVfZW50cnkgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYW1kZ3B1X3BtdV9lbnRyeSks IEdGUF9LRVJORUwpOw0KKw0KKwlpZiAoIXBtdV9lbnRyeSkNCisJCXJldHVybiAtRU5PTUVNOw0K Kw0KKwlwbXVfZW50cnktPmFkZXYgPSBhZGV2Ow0KKwlwbXVfZW50cnktPnBtdSA9IChzdHJ1Y3Qg cG11KXsNCisJCS5ldmVudF9pbml0ID0gYW1kZ3B1X3BlcmZfZXZlbnRfaW5pdCwNCisJCS5hZGQg PSBhbWRncHVfcGVyZl9hZGQsDQorCQkuZGVsID0gYW1kZ3B1X3BlcmZfZGVsLA0KKwkJLnN0YXJ0 ID0gYW1kZ3B1X3BlcmZfc3RhcnQsDQorCQkuc3RvcCA9IGFtZGdwdV9wZXJmX3N0b3AsDQorCQku cmVhZCA9IGFtZGdwdV9wZXJmX3JlYWQsDQorCQkudGFza19jdHhfbnIgPSBwZXJmX2ludmFsaWRf Y29udGV4dCwNCisJfTsNCisNCisJcG11X2VudHJ5LT5wbXUuYXR0cl9ncm91cHMgPSBhdHRyX2dy b3VwczsNCisJcG11X2VudHJ5LT5wbXVfcGVyZl90eXBlID0gcG11X3BlcmZfdHlwZTsNCisJc25w cmludGYocG11X25hbWUsIFBNVV9OQU1FX1NJWkUsICIlc18lZCIsDQorCQkJCXBtdV9maWxlX3By ZWZpeCwgYWRldi0+ZGRldi0+cHJpbWFyeS0+aW5kZXgpOw0KKw0KKwlyZXQgPSBwZXJmX3BtdV9y ZWdpc3RlcigmcG11X2VudHJ5LT5wbXUsIHBtdV9uYW1lLCAtMSk7DQorDQorCWlmIChyZXQpIHsN CisJCWtmcmVlKHBtdV9lbnRyeSk7DQorCQlwcl93YXJuKCJFcnJvciBpbml0aWFsaXppbmcgQU1E R1BVICVzIFBNVXMuXG4iLCBwbXVfdHlwZV9uYW1lKTsNCisJCXJldHVybiByZXQ7DQorCX0NCisN CisJcHJfaW5mbygiRGV0ZWN0ZWQgQU1ER1BVICVzIENvdW50ZXJzLiAjIG9mIENvdW50ZXJzID0g JWQuXG4iLA0KKwkJCXBtdV90eXBlX25hbWUsIEFNREdQVV9ERl9NQVhfQ09VTlRFUlMpOw0KKw0K KwlsaXN0X2FkZF90YWlsKCZwbXVfZW50cnktPmVudHJ5LCAmYW1kZ3B1X3BtdV9saXN0KTsNCisN CisJcmV0dXJuIDA7DQorfQ0KKw0KKy8qIGluaXQgYW1kZ3B1X3BtdSAqLw0KK2ludCBhbWRncHVf cG11X2luaXQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpDQorew0KKw0KKwlpbnQgcmV0ID0g MDsNCisNCisJc3dpdGNoIChhZGV2LT5hc2ljX3R5cGUpIHsNCisJY2FzZSBDSElQX1ZFR0EyMDoN CisJCS8qIGluaXQgZGYgKi8NCisJCXJldCA9IGluaXRfcG11X2J5X3R5cGUoYWRldiwgYW1kZ3B1 X3ZlZ2EyMF9kZl9hdHRyX2dyb3VwcywNCisJCQkJIkRGIiwgImFtZGdwdV9kZiIsIFBFUkZfVFlQ RV9BTURHUFVfREYpOw0KKw0KKwkJLyogb3RoZXIgcG11IHR5cGVzIGdvIGhlcmUqLw0KKwkJYnJl YWs7DQorCWRlZmF1bHQ6DQorCQlyZXR1cm4gMDsNCisJfQ0KKw0KKwlyZXR1cm4gMDsNCisNCit9 DQorDQorDQorLyogZGVzdHJveSBhbGwgcG11IGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRhcmdldCBk ZXZpY2UgKi8NCit2b2lkIGFtZGdwdV9wbXVfZmluaShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRl dikNCit7DQorCXN0cnVjdCBhbWRncHVfcG11X2VudHJ5ICpwZSwgKnRlbXA7DQorDQorCWxpc3Rf Zm9yX2VhY2hfZW50cnlfc2FmZShwZSwgdGVtcCwgJmFtZGdwdV9wbXVfbGlzdCwgZW50cnkpIHsN CisJCWlmIChwZS0+YWRldiA9PSBhZGV2KSB7DQorCQkJbGlzdF9kZWwoJnBlLT5lbnRyeSk7DQor CQkJcGVyZl9wbXVfdW5yZWdpc3RlcigmdGVtcC0+cG11KTsNCisJCQlrZnJlZSh0ZW1wKTsNCisJ CX0NCisJfQ0KK30NCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRn cHVfcG11LmggYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfcG11LmgNCm5ldyBm aWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwMDAuLjQ2ODgzYThjN2M4Ng0KLS0tIC9k ZXYvbnVsbA0KKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3BtdS5oDQpA QCAtMCwwICsxLDUxIEBADQorLyoNCisgKiBDb3B5cmlnaHQgMjAxOSBBZHZhbmNlZCBNaWNybyBE ZXZpY2VzLCBJbmMuDQorICoNCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVl IG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQ0KKyAqIGNvcHkgb2YgdGhpcyBz b2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJl IiksDQorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5j bHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbg0KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBt b2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLA0KKyAqIGFuZC9v ciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3 aG9tIHRoZQ0KKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0 aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6DQorICoNCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5v dGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbg0KKyAq IGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLg0KKyAq DQorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkg T0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1INCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBM SU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwNCisgKiBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZF TlQgU0hBTEwNCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElB QkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1INCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRI RVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwNCisgKiBBUklT SU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRI RSBVU0UgT1INCisgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuDQorICoNCisgKiBB dXRob3I6IEpvbmF0aGFuIEtpbSA8am9uYXRoYW4ua2ltQGFtZC5jb20+DQorICoNCisgKi8NCisN CisjaWZuZGVmIF9BTURHUFVfUE1VX0hfDQorI2RlZmluZSBfQU1ER1BVX1BNVV9IXw0KKw0KK2Vu dW0gYW1kZ3B1X3BtdV9wZXJmX3R5cGUgew0KKwlQRVJGX1RZUEVfQU1ER1BVX0RGID0gMCwNCisJ UEVSRl9UWVBFX0FNREdQVV9NQVgNCit9Ow0KKw0KKyNkZWZpbmUgQU1ER1BVX1BNVV9FVkVOVF9B VFRSKF9uYW1lLCBfZXZlbnQpCQkJCVwNCisJCQkJCQkJCQlcDQorc3RhdGljIHNzaXplX3QJCQkJ CQkJCVwNCitfbmFtZSMjX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosCQkJCQlcDQorCQkJICAg ICAgIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQlcDQorewkJCQkJCQkJ CVwNCisJQlVJTERfQlVHX09OKHNpemVvZihfZXZlbnQpID49IFBBR0VfU0laRSk7CQkJXA0KKwly ZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgX2V2ZW50KTsJCQkJXA0KK30JCQkJCQkJCQlcDQor CQkJCQkJCQkJXA0KK3N0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZXZlbnRfYXR0cl8jI19u YW1lID0JCQlcDQorCQkJCQlfX0FUVFIoX25hbWUsIDA0NDQsIF9uYW1lIyNfc2hvdywgTlVMTCkN CisNCisNCitpbnQgYW1kZ3B1X3BtdV9pbml0KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KTsN Cit2b2lkIGFtZGdwdV9wbXVfZmluaShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldik7DQorDQor I2VuZGlmIC8qIF9BTURHUFVfUE1VX0hfICovDQotLSANCjIuMTcuMQ0KDQpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwphbWQtZ2Z4IG1haWxpbmcgbGlzdAph bWQtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2FtZC1nZng=