From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [3/3] EDAC, ghes: Make it a proper module From: Mauro Carvalho Chehab Message-Id: <20170726072404.3cb283c5@vento.lan> Date: Wed, 26 Jul 2017 07:24:04 -0300 To: Borislav Petkov Cc: linux-edac , Tony Luck , Toshimitsu Kani , "Rafael J. Wysocki" , LKML List-ID: RW0gV2VkLCAyNiBKdWwgMjAxNyAxMDo0ODoyNyArMDIwMApCb3Jpc2xhdiBQZXRrb3YgPGJwQGFs aWVuOC5kZT4gZXNjcmV2ZXU6Cgo+IEZyb206IEJvcmlzbGF2IFBldGtvdiA8YnBAc3VzZS5kZT4K PiAKPiBSZWdpc3RlciB3aXRoIHRoZSBHSEVTIG5vdGlmaWVyIGNoYWluIHNvIHRoYXQgdGhlcmUn cyBubyBuZWVkIHRvIGNhbGwKPiBpbnRvIHRoZSBtb2R1bGUgd2l0aCBnaGVzX2VkYWNfcmVwb3J0 X21lbV9lcnJvcigpLgoKSG1tLi4uIEknbSBub3Qgc2VlaW5nIGFueSBpbXBsZW1lbnRhdGlvbiB0 aGF0IHdvdWxkIGFsbG93IHNldHRpbmcKYmV0d2VlbiBmaXJtd2FyZSBmaXJzdCwgaGFyZHdhcmUg Zmlyc3Qgb3IgImF1dG8iLCBhcyB3ZSd2ZSBkaXNjdXNzZWQuCgo+IAo+IFNpZ25lZC1vZmYtYnk6 IEJvcmlzbGF2IFBldGtvdiA8YnBAc3VzZS5kZT4KPiAtLS0KPiAgZHJpdmVycy9hY3BpL2FwZWkv Z2hlcy5jIHwgIDE4ICsrKy0tLS0KPiAgZHJpdmVycy9lZGFjL0tjb25maWcgICAgIHwgICA0ICst Cj4gIGRyaXZlcnMvZWRhYy9naGVzX2VkYWMuYyB8IDEyOSArKysrKysrKysrKysrKysrKysrKysr KystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+ICBpbmNsdWRlL2FjcGkvZ2hlcy5oICAgICAgfCAg MjUgLS0tLS0tLS0tCj4gIDQgZmlsZXMgY2hhbmdlZCwgNzQgaW5zZXJ0aW9ucygrKSwgMTAyIGRl bGV0aW9ucygtKQo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYXBlaS9naGVzLmMgYi9k cml2ZXJzL2FjcGkvYXBlaS9naGVzLmMKPiBpbmRleCAzZjA1ZjVmZjM0NjEuLjM3Y2Q2OThjYWNk MiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2FjcGkvYXBlaS9naGVzLmMKPiArKysgYi9kcml2ZXJz L2FjcGkvYXBlaS9naGVzLmMKPiBAQCAtNDc1LDExICs0NzUsMTEgQEAgc3RhdGljIHZvaWQgZ2hl c19oYW5kbGVfbWVtb3J5X2ZhaWx1cmUoc3RydWN0IGFjcGlfaGVzdF9nZW5lcmljX2RhdGEgKmdk YXRhLCBpbnQKPiAgc3RhdGljIHZvaWQgZ2hlc19kb19wcm9jKHN0cnVjdCBnaGVzICpnaGVzLAo+ ICAJCQkgY29uc3Qgc3RydWN0IGFjcGlfaGVzdF9nZW5lcmljX3N0YXR1cyAqZXN0YXR1cykKPiAg ewo+IC0JaW50IHNldiwgc2VjX3NldjsKPiAgCXN0cnVjdCBhY3BpX2hlc3RfZ2VuZXJpY19kYXRh ICpnZGF0YTsKPiAgCWd1aWRfdCAqc2VjX3R5cGU7Cj4gIAlndWlkX3QgKmZydV9pZCA9ICZOVUxM X1VVSURfTEU7Cj4gIAljaGFyICpmcnVfdGV4dCA9ICIiOwo+ICsJaW50IHNldiwgc2VjX3NldjsK PiAgCj4gIAlzZXYgPSBnaGVzX3NldmVyaXR5KGVzdGF0dXMtPmVycm9yX3NldmVyaXR5KTsKPiAg CWFwZWlfZXN0YXR1c19mb3JfZWFjaF9zZWN0aW9uKGVzdGF0dXMsIGdkYXRhKSB7Cj4gQEAgLTQ5 NCw3ICs0OTQsOCBAQCBzdGF0aWMgdm9pZCBnaGVzX2RvX3Byb2Moc3RydWN0IGdoZXMgKmdoZXMs Cj4gIAkJaWYgKGd1aWRfZXF1YWwoc2VjX3R5cGUsICZDUEVSX1NFQ19QTEFURk9STV9NRU0pKSB7 Cj4gIAkJCXN0cnVjdCBjcGVyX3NlY19tZW1fZXJyICptZW1fZXJyID0gYWNwaV9oZXN0X2dldF9w YXlsb2FkKGdkYXRhKTsKPiAgCj4gLQkJCWdoZXNfZWRhY19yZXBvcnRfbWVtX2Vycm9yKGdoZXMs IHNldiwgbWVtX2Vycik7Cj4gKwo+ICsJCQlhdG9taWNfbm90aWZpZXJfY2FsbF9jaGFpbigmZ2hl c19lZGFjX2NoYWluLCBzZXYsICZtZW1fZXJyKTsKPiAgCj4gIAkJCWFyY2hfYXBlaV9yZXBvcnRf bWVtX2Vycm9yKHNldiwgbWVtX2Vycik7Cj4gIAkJCWdoZXNfaGFuZGxlX21lbW9yeV9mYWlsdXJl KGdkYXRhLCBzZXYpOwo+IEBAIC0xMTUzLDEwICsxMTU0LDYgQEAgc3RhdGljIGludCBnaGVzX3By b2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmdoZXNfZGV2KQo+ICAJCWdvdG8gZXJyOwo+ICAJ fQo+ICAKPiAtCXJjID0gZ2hlc19lZGFjX3JlZ2lzdGVyKGdoZXMsICZnaGVzX2Rldi0+ZGV2KTsK PiAtCWlmIChyYyA8IDApCj4gLQkJZ290byBlcnI7Cj4gLQo+ICAJc3dpdGNoIChnZW5lcmljLT5u b3RpZnkudHlwZSkgewo+ICAJY2FzZSBBQ1BJX0hFU1RfTk9USUZZX1BPTExFRDoKPiAgCQlzZXR1 cF9kZWZlcnJhYmxlX3RpbWVyKCZnaGVzLT50aW1lciwgZ2hlc19wb2xsX2Z1bmMsCj4gQEAgLTEx NjksMTMgKzExNjYsMTMgQEAgc3RhdGljIGludCBnaGVzX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9k ZXZpY2UgKmdoZXNfZGV2KQo+ICAJCWlmIChyYykgewo+ICAJCQlwcl9lcnIoR0hFU19QRlggIkZh aWxlZCB0byBtYXAgR1NJIHRvIElSUSBmb3IgZ2VuZXJpYyBoYXJkd2FyZSBlcnJvciBzb3VyY2U6 ICVkXG4iLAo+ICAJCQkgICAgICAgZ2VuZXJpYy0+aGVhZGVyLnNvdXJjZV9pZCk7Cj4gLQkJCWdv dG8gZXJyX2VkYWNfdW5yZWc7Cj4gKwkJCWdvdG8gZXJyOwo+ICAJCX0KPiAgCQlyYyA9IHJlcXVl c3RfaXJxKGdoZXMtPmlycSwgZ2hlc19pcnFfZnVuYywgMCwgIkdIRVMgSVJRIiwgZ2hlcyk7Cj4g IAkJaWYgKHJjKSB7Cj4gIAkJCXByX2VycihHSEVTX1BGWCAiRmFpbGVkIHRvIHJlZ2lzdGVyIElS USBmb3IgZ2VuZXJpYyBoYXJkd2FyZSBlcnJvciBzb3VyY2U6ICVkXG4iLAo+ICAJCQkgICAgICAg Z2VuZXJpYy0+aGVhZGVyLnNvdXJjZV9pZCk7Cj4gLQkJCWdvdG8gZXJyX2VkYWNfdW5yZWc7Cj4g KwkJCWdvdG8gZXJyOwo+ICAJCX0KPiAgCQlicmVhazsKPiAgCj4gQEAgLTEyMDQsOCArMTIwMSw3 IEBAIHN0YXRpYyBpbnQgZ2hlc19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpnaGVzX2Rl dikKPiAgCWdoZXNfcHJvYyhnaGVzKTsKPiAgCj4gIAlyZXR1cm4gMDsKPiAtZXJyX2VkYWNfdW5y ZWc6Cj4gLQlnaGVzX2VkYWNfdW5yZWdpc3RlcihnaGVzKTsKPiArCj4gIGVycjoKPiAgCWlmIChn aGVzKSB7Cj4gIAkJZ2hlc19maW5pKGdoZXMpOwo+IEBAIC0xMjU1LDggKzEyNTEsNiBAQCBzdGF0 aWMgaW50IGdoZXNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmdoZXNfZGV2KQo+ICAK PiAgCWdoZXNfZmluaShnaGVzKTsKPiAgCj4gLQlnaGVzX2VkYWNfdW5yZWdpc3RlcihnaGVzKTsK PiAtCj4gIAlrZnJlZShnaGVzKTsKPiAgCj4gIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShnaGVzX2Rl diwgTlVMTCk7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9LY29uZmlnIGIvZHJpdmVycy9l ZGFjL0tjb25maWcKPiBpbmRleCA5NmFmYjJhZWVkMTguLmZkZDgyNzhjYTg5YSAxMDA2NDQKPiAt LS0gYS9kcml2ZXJzL2VkYWMvS2NvbmZpZwo+ICsrKyBiL2RyaXZlcnMvZWRhYy9LY29uZmlnCj4g QEAgLTUzLDggKzUzLDggQEAgY29uZmlnIEVEQUNfREVDT0RFX01DRQo+ICAJICBoYXMgYmVlbiBp bml0aWFsaXplZC4KPiAgCj4gIGNvbmZpZyBFREFDX0dIRVMKPiAtCWJvb2wgIk91dHB1dCBBQ1BJ IEFQRUkvR0hFUyBCSU9TIGRldGVjdGVkIGVycm9ycyB2aWEgRURBQyIKPiAtCWRlcGVuZHMgb24g QUNQSV9BUEVJX0dIRVMgJiYgKEVEQUM9eSkKPiArCXRyaXN0YXRlICJPdXRwdXQgQUNQSSBBUEVJ L0dIRVMgQklPUyBkZXRlY3RlZCBlcnJvcnMgdmlhIEVEQUMiCj4gKwlkZXBlbmRzIG9uIEFDUElf QVBFSV9HSEVTCj4gIAloZWxwCj4gIAkgIE5vdCBhbGwgbWFjaGluZXMgc3VwcG9ydCBoYXJkd2Fy ZS1kcml2ZW4gZXJyb3IgcmVwb3J0LiBTb21lIG9mIHRob3NlCj4gIAkgIHByb3ZpZGUgYSBCSU9T LWRyaXZlbiBlcnJvciByZXBvcnQgbWVjaGFuaXNtIHZpYSBBQ1BJLCB1c2luZyB0aGUKPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9lZGFjL2doZXNfZWRhYy5jIGIvZHJpdmVycy9lZGFjL2doZXNfZWRh Yy5jCj4gaW5kZXggNmY4MGViNjVjMjZjLi5lY2QzNGI4YmQyN2UgMTAwNjQ0Cj4gLS0tIGEvZHJp dmVycy9lZGFjL2doZXNfZWRhYy5jCj4gKysrIGIvZHJpdmVycy9lZGFjL2doZXNfZWRhYy5jCj4g QEAgLTUsNiArNSw5IEBACj4gICAqIExpY2Vuc2UgdmVyc2lvbiAyLgo+ICAgKgo+ICAgKiBDb3B5 cmlnaHQgKGMpIDIwMTMgYnkgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiCj4gKyAqCSAgICAgKGMpIDIw MTcgQm9yaXNsYXYgUGV0a292Cj4gKyAqCj4gKyAqIEJvcmlzbGF2IFBldGtvdjogdHVybiBpdCBp bnRvIGEgcHJvcGVyIG1vZHVsZS4KPiAgICoKPiAgICogUmVkIEhhdCBJbmMuIGh0dHA6Ly93d3cu cmVkaGF0LmNvbQo+ICAgKi8KPiBAQCAtMjgsMTAgKzMxLDEwIEBAIHN0cnVjdCBnaGVzX2VkYWNf cHZ0IHsKPiAgCWNoYXIgbXNnWzgwXTsKPiAgfTsKPiAgCj4gLXN0YXRpYyBMSVNUX0hFQUQoZ2hl c19yZWdsaXN0KTsKPiAtc3RhdGljIERFRklORV9NVVRFWChnaGVzX2VkYWNfbG9jayk7Cj4gLXN0 YXRpYyBpbnQgZ2hlc19lZGFjX21jX251bTsKPiArc3RhdGljIHN0cnVjdCBnaGVzX2VkYWNfcHZ0 ICpnaGVzX3B2dDsKPiAgCj4gKy8qIEhhbmQgaXQgaW50byBFREFDJ3MgY29yZSBzbyB0aGF0IHdl IGhhdmUgYSBkZXZpY2UgdG8gb3BlcmF0ZSBvbi4gKi8KPiArc3RhdGljIHN0cnVjdCBkZXZpY2Ug ZHVtbXlfZGV2Owo+ICAKPiAgLyogTWVtb3J5IERldmljZSAtIFR5cGUgMTcgb2YgU01CSU9TIHNw ZWMgKi8KPiAgc3RydWN0IG1lbWRldl9kbWlfZW50cnkgewo+IEBAIC0xNjMsMjQgKzE2NiwyMSBA QCBzdGF0aWMgdm9pZCBnaGVzX2VkYWNfZG1pZGVjb2RlKGNvbnN0IHN0cnVjdCBkbWlfaGVhZGVy ICpkaCwgdm9pZCAqYXJnKQo+ICAJfQo+ICB9Cj4gIAo+IC12b2lkIGdoZXNfZWRhY19yZXBvcnRf bWVtX2Vycm9yKHN0cnVjdCBnaGVzICpnaGVzLCBpbnQgc2V2LAo+IC0JCQkJc3RydWN0IGNwZXJf c2VjX21lbV9lcnIgKm1lbV9lcnIpCj4gK3N0YXRpYyBpbnQgcmVwb3J0X21lbV9lcnJvcihzdHJ1 Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIHNldiwgdm9pZCAqZGF0YSkKPiAg ewo+ICsJc3RydWN0IGNwZXJfc2VjX21lbV9lcnIgKm1lbV9lcnIgPSBkYXRhOwo+ICAJZW51bSBo d19ldmVudF9tY19lcnJfdHlwZSB0eXBlOwo+ICAJc3RydWN0IGVkYWNfcmF3X2Vycm9yX2Rlc2Mg KmU7Cj4gIAlzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2k7Cj4gLQlzdHJ1Y3QgZ2hlc19lZGFjX3B2 dCAqcHZ0ID0gTlVMTDsKPiAtCWNoYXIgKnA7Cj4gKwlzdHJ1Y3QgZ2hlc19lZGFjX3B2dCAqcHZ0 ID0gZ2hlc19wdnQ7Cj4gIAl1OCBncmFpbl9iaXRzOwo+ICsJY2hhciAqcDsKPiAgCj4gLQlsaXN0 X2Zvcl9lYWNoX2VudHJ5KHB2dCwgJmdoZXNfcmVnbGlzdCwgbGlzdCkgewo+IC0JCWlmIChnaGVz ID09IHB2dC0+Z2hlcykKPiAtCQkJYnJlYWs7Cj4gLQl9Cj4gIAlpZiAoIXB2dCkgewo+IC0JCXBy X2VycigiSW50ZXJuYWwgZXJyb3I6IENhbid0IGZpbmQgRURBQyBzdHJ1Y3R1cmVcbiIpOwo+IC0J CXJldHVybjsKPiArCQllZGFjX3ByX2VycigiSW50ZXJuYWwgZXJyb3I6IENhbid0IGZpbmQgRURB QyBzdHJ1Y3R1cmVcbiIpOwo+ICsJCXJldHVybiBOT1RJRllfRE9ORTsKPiAgCX0KPiArCj4gIAlt Y2kgPSBwdnQtPm1jaTsKPiAgCWUgPSAmbWNpLT5lcnJvcl9kZXNjOwo+ICAKPiBAQCAtNDAwLDIz ICs0MDAsNDAgQEAgdm9pZCBnaGVzX2VkYWNfcmVwb3J0X21lbV9lcnJvcihzdHJ1Y3QgZ2hlcyAq Z2hlcywgaW50IHNldiwKPiAgCj4gIAkvKiBSZXBvcnQgdGhlIGVycm9yIHZpYSBFREFDIEFQSSAq Lwo+ICAJZWRhY19yYXdfbWNfaGFuZGxlX2Vycm9yKHR5cGUsIG1jaSwgZSk7Cj4gKwo+ICsJcmV0 dXJuIE5PVElGWV9ET05FOwo+ICB9Cj4gLUVYUE9SVF9TWU1CT0xfR1BMKGdoZXNfZWRhY19yZXBv cnRfbWVtX2Vycm9yKTsKPiAgCj4gLWludCBnaGVzX2VkYWNfcmVnaXN0ZXIoc3RydWN0IGdoZXMg KmdoZXMsIHN0cnVjdCBkZXZpY2UgKmRldikKPiArc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9j ayBnaGVzX25iID0gewo+ICsJLm5vdGlmaWVyX2NhbGwgID0gcmVwb3J0X21lbV9lcnJvciwKPiAr fTsKPiArCj4gK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZmFrZV9tc2cgPQo+ICsiVGhpcyBF REFDIGRyaXZlciByZWxpZXMgb24gQklPUyB0byBlbnVtZXJhdGUgbWVtb3J5IGFuZCBnZXQgZXJy b3IgcmVwb3J0cy5cbiIKPiArIlVuZm9ydHVuYXRlbHksIG5vdCBhbGwgQklPU2VzIHJlZmxlY3Qg dGhlIG1lbW9yeSBsYXlvdXQgY29ycmVjdGx5LlxuIgo+ICsiU28sIHRoZSBlbmQgcmVzdWx0IG9m IHVzaW5nIHRoaXMgZHJpdmVyIHZhcmllcyBmcm9tIHZlbmRvciB0byB2ZW5kb3IuXG4iCj4gKyJJ ZiB5b3UgZmluZCBpbmNvcnJlY3QgcmVwb3J0cywgcGxlYXNlIGNvbnRhY3QgeW91ciBoYXJkd2Fy ZSB2ZW5kb3JcbiIKPiArInRvIGNvcnJlY3QgaXRzIEJJT1MuIjsKPiArCj4gK3N0YXRpYyBjb25z dCBjaGFyICogY29uc3Qgc3VwZXJfY3JhcF9tc2cgPQo+ICsiVGhpcyBzeXN0ZW0gaGFzIGEgdmVy eSBjcmFwcHkgQklPUzogSXQgZG9lc24ndCBldmVuIGxpc3QgdGhlIERJTU1TLlxuIgo+ICsiSXRz IFNNQklPUyBpbmZvIGlzIHdyb25nLiBJdCBpcyBkb3VidGZ1bCB0aGF0IHRoZSBlcnJvciByZXBv cnQgd291bGRcbiIKPiArIndvcmsgb24gc3VjaCBzeXN0ZW0uIFVzZSB0aGlzIGRyaXZlciB3aXRo IGNhdXRpb24uIjsKCkkgd291bGQgYWxzbyBhZGQgYSBub3RlIHNheWluZyB0aGF0IHRoZSBCSU9T IG1heSBiZSBtYXNraW5nIGVycm9ycy4KCj4gKwo+ICtzdGF0aWMgaW50IF9faW5pdCBnaGVzX2Vk YWNfcmVnaXN0ZXIodm9pZCkKPiAgewo+ICsJc3RydWN0IGdoZXNfZWRhY19wdnQgKnB2dCA9IGdo ZXNfcHZ0Owo+ICAJYm9vbCBmYWtlID0gZmFsc2U7Cj4gIAlpbnQgcmMsIG51bV9kaW1tID0gMDsK PiAgCXN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaTsKPiAgCXN0cnVjdCBlZGFjX21jX2xheWVyIGxh eWVyc1sxXTsKPiAtCXN0cnVjdCBnaGVzX2VkYWNfcHZ0ICpwdnQ7Cj4gIAlzdHJ1Y3QgZ2hlc19l ZGFjX2RpbW1fZmlsbCBkaW1tX2ZpbGw7Cj4gIAo+ICAJLyogR2V0IHRoZSBudW1iZXIgb2YgRElN TXMgKi8KPiAgCWRtaV93YWxrKGdoZXNfZWRhY19jb3VudF9kaW1tcywgJm51bV9kaW1tKTsKPiAg Cj4gIAkvKiBDaGVjayBpZiB3ZSd2ZSBnb3QgYSBib2d1cyBCSU9TICovCj4gLQlpZiAobnVtX2Rp bW0gPT0gMCkgewo+ICsJaWYgKCFudW1fZGltbSkgewo+ICAJCWZha2UgPSB0cnVlOwo+ICAJCW51 bV9kaW1tID0gMTsKPiAgCX0KPiBAQCAtNDI5LDIxICs0NDYsMTcgQEAgaW50IGdoZXNfZWRhY19y ZWdpc3RlcihzdHJ1Y3QgZ2hlcyAqZ2hlcywgc3RydWN0IGRldmljZSAqZGV2KQo+ICAJICogV2Ug bmVlZCB0byBzZXJpYWxpemUgZWRhY19tY19hbGxvYygpIGFuZCBlZGFjX21jX2FkZF9tYygpLAo+ ICAJICogdG8gYXZvaWQgZHVwbGljYXRlZCBtZW1vcnkgY29udHJvbGxlciBudW1iZXJzCj4gIAkg Ki8KPiAtCW11dGV4X2xvY2soJmdoZXNfZWRhY19sb2NrKTsKPiAtCW1jaSA9IGVkYWNfbWNfYWxs b2MoZ2hlc19lZGFjX21jX251bSwgQVJSQVlfU0laRShsYXllcnMpLCBsYXllcnMsCj4gLQkJCSAg ICBzaXplb2YoKnB2dCkpOwo+ICsJbWNpID0gZWRhY19tY19hbGxvYygxLCBBUlJBWV9TSVpFKGxh eWVycyksIGxheWVycywgc2l6ZW9mKCpwdnQpKTsKPiAgCWlmICghbWNpKSB7Cj4gLQkJcHJfaW5m bygiQ2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciBFREFDIGRhdGFcbiIpOwo+IC0JCW11dGV4X3Vu bG9jaygmZ2hlc19lZGFjX2xvY2spOwo+ICsJCWVkYWNfcHJfZXJyKCJDYW4ndCBhbGxvY2F0ZSBt ZW1vcnkgZm9yIEVEQUMgZGF0YVxuIik7Cj4gIAkJcmV0dXJuIC1FTk9NRU07Cj4gIAl9Cj4gIAo+ ICAJcHZ0ID0gbWNpLT5wdnRfaW5mbzsKPiAgCW1lbXNldChwdnQsIDAsIHNpemVvZigqcHZ0KSk7 Cj4gLQlsaXN0X2FkZF90YWlsKCZwdnQtPmxpc3QsICZnaGVzX3JlZ2xpc3QpOwo+IC0JcHZ0LT5n aGVzID0gZ2hlczsKPiAgCXB2dC0+bWNpICA9IG1jaTsKPiAtCW1jaS0+cGRldiA9IGRldjsKPiAr Cj4gKwltY2ktPnBkZXYgPSAmZHVtbXlfZGV2Owo+ICAKPiAgCW1jaS0+bXR5cGVfY2FwID0gTUVN X0ZMQUdfRU1QVFk7Cj4gIAltY2ktPmVkYWNfY3RsX2NhcCA9IEVEQUNfRkxBR19OT05FOwo+IEBA IC00NTIsMjEgKzQ2NSwxMiBAQCBpbnQgZ2hlc19lZGFjX3JlZ2lzdGVyKHN0cnVjdCBnaGVzICpn aGVzLCBzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gIAltY2ktPmN0bF9uYW1lID0gImdoZXNfZWRhYyI7 Cj4gIAltY2ktPmRldl9uYW1lID0gImdoZXMiOwo+ICAKPiAtCWlmICghZ2hlc19lZGFjX21jX251 bSkgewo+IC0JCWlmICghZmFrZSkgewo+IC0JCQlwcl9pbmZvKCJUaGlzIEVEQUMgZHJpdmVyIHJl bGllcyBvbiBCSU9TIHRvIGVudW1lcmF0ZSBtZW1vcnkgYW5kIGdldCBlcnJvciByZXBvcnRzLlxu Iik7Cj4gLQkJCXByX2luZm8oIlVuZm9ydHVuYXRlbHksIG5vdCBhbGwgQklPU2VzIHJlZmxlY3Qg dGhlIG1lbW9yeSBsYXlvdXQgY29ycmVjdGx5LlxuIik7Cj4gLQkJCXByX2luZm8oIlNvLCB0aGUg ZW5kIHJlc3VsdCBvZiB1c2luZyB0aGlzIGRyaXZlciB2YXJpZXMgZnJvbSB2ZW5kb3IgdG8gdmVu ZG9yLlxuIik7Cj4gLQkJCXByX2luZm8oIklmIHlvdSBmaW5kIGluY29ycmVjdCByZXBvcnRzLCBw bGVhc2UgY29udGFjdCB5b3VyIGhhcmR3YXJlIHZlbmRvclxuIik7Cj4gLQkJCXByX2luZm8oInRv IGNvcnJlY3QgaXRzIEJJT1MuXG4iKTsKPiAtCQkJcHJfaW5mbygiVGhpcyBzeXN0ZW0gaGFzICVk IERJTU0gc29ja2V0cy5cbiIsCj4gLQkJCQludW1fZGltbSk7Cj4gLQkJfSBlbHNlIHsKPiAtCQkJ cHJfaW5mbygiVGhpcyBzeXN0ZW0gaGFzIGEgdmVyeSBjcmFwcHkgQklPUzogSXQgZG9lc24ndCBl dmVuIGxpc3QgdGhlIERJTU1TLlxuIik7Cj4gLQkJCXByX2luZm8oIkl0cyBTTUJJT1MgaW5mbyBp cyB3cm9uZy4gSXQgaXMgZG91YnRmdWwgdGhhdCB0aGUgZXJyb3IgcmVwb3J0IHdvdWxkXG4iKTsK PiAtCQkJcHJfaW5mbygid29yayBvbiBzdWNoIHN5c3RlbS4gVXNlIHRoaXMgZHJpdmVyIHdpdGgg Y2F1dGlvblxuIik7Cj4gLQkJfQo+IC0JfQo+ICsJaWYgKCFmYWtlKQo+ICsJCWVkYWNfcHJfaW5m bygiJXNcbiIsIGZha2VfbXNnKTsKPiArCWVsc2UKPiArCQllZGFjX3ByX2luZm8oIiVzXG4iLCBz dXBlcl9jcmFwX21zZyk7Cj4gKwo+ICsJZWRhY19wcl9pbmZvKCJUaGlzIHN5c3RlbSBoYXMgJWQg RElNTSBzb2NrZXRzLlxuIiwgbnVtX2RpbW0pOwo+ICAKPiAgCWlmICghZmFrZSkgewo+ICAJCS8q Cj4gQEAgLTQ3NSwxMyArNDc5LDExIEBAIGludCBnaGVzX2VkYWNfcmVnaXN0ZXIoc3RydWN0IGdo ZXMgKmdoZXMsIHN0cnVjdCBkZXZpY2UgKmRldikKPiAgCQkgKiBLZWVwIGl0IGluIGJsYW5rIGZv ciB0aGUgb3RoZXIgbWVtb3J5IGNvbnRyb2xsZXJzLCBhcwo+ICAJCSAqIHRoZXJlJ3Mgbm8gcmVs aWFibGUgd2F5IHRvIHByb3Blcmx5IGNyZWRpdCBlYWNoIERJTU0gdG8KPiAgCQkgKiB0aGUgbWVt b3J5IGNvbnRyb2xsZXIsIGFzIGRpZmZlcmVudCBCSU9TZXMgZmlsbCB0aGUKPiAtCQkgKiBETUkg YmFuayBsb2NhdGlvbiBmaWVsZHMgb24gZGlmZmVyZW50IHdheXMKPiArCQkgKiBETUkgYmFuayBs b2NhdGlvbiBmaWVsZHMgaW4gZGlmZmVyZW50IHdheXMuCj4gIAkJICovCj4gLQkJaWYgKCFnaGVz X2VkYWNfbWNfbnVtKSB7Cj4gLQkJCWRpbW1fZmlsbC5jb3VudCA9IDA7Cj4gLQkJCWRpbW1fZmls bC5tY2kgPSBtY2k7Cj4gLQkJCWRtaV93YWxrKGdoZXNfZWRhY19kbWlkZWNvZGUsICZkaW1tX2Zp bGwpOwo+IC0JCX0KPiArCQlkaW1tX2ZpbGwuY291bnQgPSAwOwo+ICsJCWRpbW1fZmlsbC5tY2kg PSBtY2k7Cj4gKwkJZG1pX3dhbGsoZ2hlc19lZGFjX2RtaWRlY29kZSwgJmRpbW1fZmlsbCk7Cj4g IAl9IGVsc2Ugewo+ICAJCXN0cnVjdCBkaW1tX2luZm8gKmRpbW0gPSBFREFDX0RJTU1fUFRSKG1j aS0+bGF5ZXJzLCBtY2ktPmRpbW1zLAo+ICAJCQkJCQkgICAgICAgbWNpLT5uX2xheWVycywgMCwg MCwgMCk7Cj4gQEAgLTQ5NSwzMCArNDk3LDMxIEBAIGludCBnaGVzX2VkYWNfcmVnaXN0ZXIoc3Ry dWN0IGdoZXMgKmdoZXMsIHN0cnVjdCBkZXZpY2UgKmRldikKPiAgCj4gIAlyYyA9IGVkYWNfbWNf YWRkX21jKG1jaSk7Cj4gIAlpZiAocmMgPCAwKSB7Cj4gLQkJcHJfaW5mbygiQ2FuJ3QgcmVnaXN0 ZXIgYXQgRURBQyBjb3JlXG4iKTsKPiArCQllZGFjX3ByX2VycigiQ2FuJ3QgcmVnaXN0ZXIgd2l0 aCBFREFDIGNvcmVcbiIpOwo+ICAJCWVkYWNfbWNfZnJlZShtY2kpOwo+IC0JCW11dGV4X3VubG9j aygmZ2hlc19lZGFjX2xvY2spOwo+ICAJCXJldHVybiAtRU5PREVWOwo+ICAJfQo+ICAKPiAtCWdo ZXNfZWRhY19tY19udW0rKzsKPiAtCW11dGV4X3VubG9jaygmZ2hlc19lZGFjX2xvY2spOwo+ICsJ Z2hlc19yZWdpc3Rlcl9lZGFjX2NoYWluKCZnaGVzX25iKTsKPiArCj4gIAlyZXR1cm4gMDsKPiAg fQo+IC1FWFBPUlRfU1lNQk9MX0dQTChnaGVzX2VkYWNfcmVnaXN0ZXIpOwo+ICttb2R1bGVfaW5p dChnaGVzX2VkYWNfcmVnaXN0ZXIpOwo+ICAKPiAtdm9pZCBnaGVzX2VkYWNfdW5yZWdpc3Rlcihz dHJ1Y3QgZ2hlcyAqZ2hlcykKPiArc3RhdGljIHZvaWQgX19leGl0IGdoZXNfZWRhY191bnJlZ2lz dGVyKHZvaWQpCj4gIHsKPiAgCXN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaTsKPiAtCXN0cnVjdCBn aGVzX2VkYWNfcHZ0ICpwdnQsICp0bXA7Cj4gLQo+IC0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZl KHB2dCwgdG1wLCAmZ2hlc19yZWdsaXN0LCBsaXN0KSB7Cj4gLQkJaWYgKGdoZXMgPT0gcHZ0LT5n aGVzKSB7Cj4gLQkJCW1jaSA9IHB2dC0+bWNpOwo+IC0JCQllZGFjX21jX2RlbF9tYyhtY2ktPnBk ZXYpOwo+IC0JCQllZGFjX21jX2ZyZWUobWNpKTsKPiAtCQkJbGlzdF9kZWwoJnB2dC0+bGlzdCk7 Cj4gLQkJfQo+IC0JfQo+ICsKPiArCWdoZXNfdW5yZWdpc3Rlcl9lZGFjX2NoYWluKCZnaGVzX25i KTsKPiArCj4gKwltY2kgPSBmaW5kX21jaV9ieV9kZXYoJmR1bW15X2Rldik7Cj4gKwlXQVJOX09O KCFtY2kpOwo+ICsKPiArCWVkYWNfbWNfZGVsX21jKG1jaS0+cGRldik7Cj4gKwllZGFjX21jX2Zy ZWUobWNpKTsKPiArCj4gIH0KPiAtRVhQT1JUX1NZTUJPTF9HUEwoZ2hlc19lZGFjX3VucmVnaXN0 ZXIpOwo+ICttb2R1bGVfZXhpdChnaGVzX2VkYWNfdW5yZWdpc3Rlcik7Cj4gKwo+ICtNT0RVTEVf TElDRU5TRSgiR1BMIik7Cj4gK01PRFVMRV9ERVNDUklQVElPTigiR0hFUyBlcnJvciBkZWNvZGlu ZyBtb2R1bGUiKTsKPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL2doZXMuaCBiL2luY2x1ZGUv YWNwaS9naGVzLmgKPiBpbmRleCA1MDZiNmExOTc3MzguLmMwMmI4ZWI5MWJkNiAxMDA2NDQKPiAt LS0gYS9pbmNsdWRlL2FjcGkvZ2hlcy5oCj4gKysrIGIvaW5jbHVkZS9hY3BpL2doZXMuaAo+IEBA IC01MSwzMSArNTEsNiBAQCBlbnVtIHsKPiAgCUdIRVNfU0VWX1BBTklDID0gMHgzLAo+ICB9Owo+ ICAKPiAtLyogRnJvbSBkcml2ZXJzL2VkYWMvZ2hlc19lZGFjLmMgKi8KPiAtCj4gLSNpZmRlZiBD T05GSUdfRURBQ19HSEVTCj4gLXZvaWQgZ2hlc19lZGFjX3JlcG9ydF9tZW1fZXJyb3Ioc3RydWN0 IGdoZXMgKmdoZXMsIGludCBzZXYsCj4gLQkJCQlzdHJ1Y3QgY3Blcl9zZWNfbWVtX2VyciAqbWVt X2Vycik7Cj4gLQo+IC1pbnQgZ2hlc19lZGFjX3JlZ2lzdGVyKHN0cnVjdCBnaGVzICpnaGVzLCBz dHJ1Y3QgZGV2aWNlICpkZXYpOwo+IC0KPiAtdm9pZCBnaGVzX2VkYWNfdW5yZWdpc3RlcihzdHJ1 Y3QgZ2hlcyAqZ2hlcyk7Cj4gLQo+IC0jZWxzZQo+IC1zdGF0aWMgaW5saW5lIHZvaWQgZ2hlc19l ZGFjX3JlcG9ydF9tZW1fZXJyb3Ioc3RydWN0IGdoZXMgKmdoZXMsIGludCBzZXYsCj4gLQkJCQkg ICAgICAgc3RydWN0IGNwZXJfc2VjX21lbV9lcnIgKm1lbV9lcnIpCj4gLXsKPiAtfQo+IC0KPiAt c3RhdGljIGlubGluZSBpbnQgZ2hlc19lZGFjX3JlZ2lzdGVyKHN0cnVjdCBnaGVzICpnaGVzLCBz dHJ1Y3QgZGV2aWNlICpkZXYpCj4gLXsKPiAtCXJldHVybiAwOwo+IC19Cj4gLQo+IC1zdGF0aWMg aW5saW5lIHZvaWQgZ2hlc19lZGFjX3VucmVnaXN0ZXIoc3RydWN0IGdoZXMgKmdoZXMpCj4gLXsK PiAtfQo+IC0jZW5kaWYKPiAgdm9pZCBnaGVzX3JlZ2lzdGVyX2VkYWNfY2hhaW4oc3RydWN0IG5v dGlmaWVyX2Jsb2NrICpuYik7Cj4gIHZvaWQgZ2hlc191bnJlZ2lzdGVyX2VkYWNfY2hhaW4oc3Ry dWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7Cj4gIAoKCgpUaGFua3MsCk1hdXJvCi0tLQpUbyB1bnN1 YnNjcmliZSBmcm9tIHRoaXMgbGlzdDogc2VuZCB0aGUgbGluZSAidW5zdWJzY3JpYmUgbGludXgt ZWRhYyIgaW4KdGhlIGJvZHkgb2YgYSBtZXNzYWdlIHRvIG1ham9yZG9tb0B2Z2VyLmtlcm5lbC5v cmcKTW9yZSBtYWpvcmRvbW8gaW5mbyBhdCAgaHR0cDovL3ZnZXIua2VybmVsLm9yZy9tYWpvcmRv bW8taW5mby5odG1sCg==