From mboxrd@z Thu Jan 1 00:00:00 1970 From: Maxim Syrchin Subject: Re: [PATCH] i2c: imx: add slave support. v2 status Date: Thu, 27 Oct 2016 22:38:42 +0300 Message-ID: <2404b260-4bd6-8ff6-3898-c9c63aaf6855@dev.rtsoft.ru> References: <1e9f10a4-6ea2-3dd9-159e-fd70f7c40224@mentor.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------AE117607ABA56B006F081594" Return-path: Received: from mail.dev.rtsoft.ru ([213.79.90.226]:57820 "EHLO mail.dev.rtsoft.ru" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S934857AbcJ0UHf (ORCPT ); Thu, 27 Oct 2016 16:07:35 -0400 In-Reply-To: <1e9f10a4-6ea2-3dd9-159e-fd70f7c40224@mentor.com> Sender: linux-i2c-owner@vger.kernel.org List-Id: linux-i2c@vger.kernel.org To: "Frkuska, Joshua" , linux-i2c@vger.kernel.org Cc: wsa@the-dreams.de, peda@axentia.se, Jiada_Wang@mentor.com, linux-kernel@vger.kernel.org, "Zapolskiy, Vladimir" , "Baxter, Jim" This is a multi-part message in MIME format. --------------AE117607ABA56B006F081594 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Hi, Sorry for huge delay in answering. Unfortunately we don't have enough resources now to prepare clean enough patch to be accepted by community. Please find the latest version attached. Driver has passed stress tests, but looks like it need seriuos refactoring (it is unnecessarily complicated). We still have polling in slave code. Since imx doesn't generate interrupt on "bus busy"/"bus free" events we have to test IBB bit in polling loop. Comparing to v2 version several race conditions were fixed (bus locking by slave, breaking slave transaction by starting master xfer). v2 is working pretty good in slave-only or master-only mode. It is reasonable to add slave locking test - sometimes imx6 hw doesn't release data line. As workaround we use dummy reading of IMX_I2C_I2DR if driver is in slave mode and IBB bit is set for a long time. Thanks, Maxim Syrchin 27.10.2016 10:31, Frkuska, Joshua пишет: > Hi Maxim, Dmitriy, Wolfram, > > If there is no immediate plan for a third release of the below patch > set, would it be possible to continue with merging v2 after addressing > the remaining concerns? > > > Thank you and regards, > > Joshua >> Hi Maxim, >> >> On 2016-03-04 11:06:10 in the thread "Re: [PATCH] i2c: imx: add slave >> support. v2" >> referenced here: https://patchwork.ozlabs.org/patch/573353/ you said: >>> Hi Wolfram, >>> I'm now working on creating new driver version. I think I'll be able to >>> sent it soon. >> Do you still plan to release a driver update for an i2c imx driver >> slave support? >> >> Best regards, >> Jim Baxter >> --------------AE117607ABA56B006F081594 Content-Type: text/plain; charset=UTF-8; name="0001-i2c-imx-add-slave-support.-v3.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="0001-i2c-imx-add-slave-support.-v3.patch" RnJvbSA2MWFlMzQyNjhkNzhlYjI4NGJmOGVlMGNiZThmOWYwYzVlN2RmMDc0IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbSBTeXJjaGluIDxtc3lyY2hpbkBkZXYucnRz b2Z0LnJ1PgpEYXRlOiBUaHUsIDI3IE9jdCAyMDE2IDE3OjM3OjU2ICswMzAwClN1YmplY3Q6 IFtQQVRDSF0gaTJjOiBpbXg6IGFkZCBzbGF2ZSBzdXBwb3J0LiB2MwoKQWRkIEkyQyBzbGF2 ZSBwcm92aWRlciB1c2luZyB0aGUgZ2VuZXJpYyBzbGF2ZSBpbnRlcmZhY2UuCkl0IGFsc28g c3VwcG9ydHMgbWFzdGVyIHRyYW5zYWN0aW9ucyB3aGVuIHRoZSBzbGF2ZSBpbiB0aGUgaWRs ZSBtb2RlLgoKU2lnbmVkLW9mZi1ieTogTWF4aW0gU3lyY2hpbiA8bXN5cmNoaW5AZGV2LnJ0 c29mdC5ydT4KLS0tCiBkcml2ZXJzL2kyYy9idXNzZXMvaTJjLWlteC5jIHwgNjgyICsrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0KIDEgZmlsZSBjaGFuZ2Vk LCA2NTMgaW5zZXJ0aW9ucygrKSwgMjkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJp dmVycy9pMmMvYnVzc2VzL2kyYy1pbXguYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaW14 LmMKaW5kZXggNTkyYThmMi4uMTFhMjI5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVz c2VzL2kyYy1pbXguYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWlteC5jCkBAIC01 Myw2ICs1Myw3IEBACiAjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgogI2luY2x1ZGUg PGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxp bnV4L2t0aHJlYWQuaD4KIAogLyogVGhpcyB3aWxsIGJlIHRoZSBkcml2ZXIgbmFtZSB0aGUg a2VybmVsIHJlcG9ydHMgKi8KICNkZWZpbmUgRFJJVkVSX05BTUUgImlteC1pMmMiCkBAIC0x NzEsNiArMTcyLDgyIEBAIGVudW0gaW14X2kyY190eXBlIHsKIAlWRjYxMF9JMkMsCiB9Owog CitlbnVtIGkyY19pbXhfc3RhdGUgeworCVNUQVRFX0lETEUgPSAwLAorCVNUQVRFX1NMQVZF LAorCVNUQVRFX01BU1RFUiwKKwlTVEFURV9TUAorfTsKKworI2RlZmluZSBNQVhfRVZFTlRT ICgxPDw0KQorI2RlZmluZSBFVU5ERUZJTkVEIDQwMDAKKworZW51bSBpMmNfaW14X2V2ZW50 cyB7CisJRVZUX0FMID0gMCwKKwlFVlRfU0ksCisJRVZUX1NUQVJULAorCUVWVF9TVE9QLAor CUVWVF9QT0xMLAorCUVWVF9JTlZBTElELAorCUVWVF9FTlRSWQorfTsKKwordHlwZWRlZiBz dHJ1Y3QgZXZ0X3F1ZXVlIHsKKwlhdG9taWNfdCBjb3VudDsKKwlhdG9taWNfdCBpcjsKKwlh dG9taWNfdCBpdzsKKwl1bnNpZ25lZCBpbnQgZXZ0W01BWF9FVkVOVFNdOworfSBldnRfcXVl dWU7CisKK3N0YXRpYyBpbmxpbmUgaW50IGV2dF9maW5kX25leHRfaWR4KGF0b21pY190ICp2 KQoreworCXJldHVybiBhdG9taWNfaW5jX3JldHVybih2KSAmIChNQVhfRVZFTlRTIC0gMSk7 Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZXZ0X3B1dChldnRfcXVldWUgKnN0aywgdW5z aWduZWQgaW50IGV2dCkKK3sKKwlpbnQgY291bnQgPSBhdG9taWNfaW5jX3JldHVybigmc3Rr LT5jb3VudCk7CisJaW50IGlkeDsKKwlpZiAoY291bnQgPCBNQVhfRVZFTlRTKQorCXsKKwkJ aWR4ID0gZXZ0X2ZpbmRfbmV4dF9pZHgoJnN0ay0+aXcpOworCQlzdGstPmV2dFtpZHhdID0g ZXZ0OworCisJCXJldHVybiAwOworCX0gZWxzZSB7CisJCWF0b21pY19kZWMoJnN0ay0+Y291 bnQpOworCQlyZXR1cm4gRVZUX0lOVkFMSUQ7CisJfQorfQorCitzdGF0aWMgdW5zaWduZWQg aW50IGV2dF9nZXQoZXZ0X3F1ZXVlICpzdGspCit7CisJaW50IGNvdW50ID0gYXRvbWljX2Rl Y19yZXR1cm4oJnN0ay0+Y291bnQpOworCWludCBpZHg7CisKKwlpZiAoY291bnQgPj0gMCkK Kwl7CisJCWlkeCA9IGV2dF9maW5kX25leHRfaWR4KCZzdGstPmlyKTsKKwkJcmV0dXJuIHN0 ay0+ZXZ0W2lkeF07CisJfSBlbHNlIHsKKwkJYXRvbWljX2luYygmc3RrLT5jb3VudCk7CisJ CXJldHVybiBFVlRfSU5WQUxJRDsKKwl9Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZXZ0 X2lzX2VtcHR5KGV2dF9xdWV1ZSAqc3RrKQoreworCWludCByZXQgPSBhdG9taWNfcmVhZCgm c3RrLT5jb3VudCk7CisJcmV0dXJuIChyZXQgPD0gMCk7Cit9CisKK3N0YXRpYyB2b2lkIGV2 dF9pbml0KGV2dF9xdWV1ZSAqc3RrKQoreworCWF0b21pY19zZXQoJnN0ay0+Y291bnQsMCk7 CisJYXRvbWljX3NldCgmc3RrLT5pdywwKTsKKwlhdG9taWNfc2V0KCZzdGstPmlyLDApOwor fQorCiBzdHJ1Y3QgaW14X2kyY19od2RhdGEgewogCWVudW0gaW14X2kyY190eXBlCWRldnR5 cGU7CiAJdW5zaWduZWQJCXJlZ3NoaWZ0OwpAQCAtMTkzLDYgKzI3MCw3IEBAIHN0cnVjdCBp bXhfaTJjX2RtYSB7CiAKIHN0cnVjdCBpbXhfaTJjX3N0cnVjdCB7CiAJc3RydWN0IGkyY19h ZGFwdGVyCWFkYXB0ZXI7CisJc3RydWN0IGkyY19jbGllbnQJKnNsYXZlOwogCXN0cnVjdCBj bGsJCSpjbGs7CiAJdm9pZCBfX2lvbWVtCQkqYmFzZTsKIAl3YWl0X3F1ZXVlX2hlYWRfdAlx dWV1ZTsKQEAgLTIxMCw2ICsyODgsMTggQEAgc3RydWN0IGlteF9pMmNfc3RydWN0IHsKIAlz dHJ1Y3QgcGluY3RybF9zdGF0ZSAqcGluY3RybF9waW5zX2dwaW87CiAKIAlzdHJ1Y3QgaW14 X2kyY19kbWEJKmRtYTsKKworCXVuc2lnbmVkIGludAkJc3RhdGU7CisJZXZ0X3F1ZXVlCQll dmVudHM7CisJYXRvbWljX3QJCWxhc3RfZXJyb3I7CisKKwlpbnQJCQltYXN0ZXJfaW50ZXJy dXB0OworCWludAkJCXN0YXJ0X3JldHJ5X2NudDsKKwlpbnQJCQlzbGF2ZV9wb2xsX2NudDsK KworCXN0cnVjdCB0YXNrX3N0cnVjdAkqc2xhdmVfdGFzazsKKwl3YWl0X3F1ZXVlX2hlYWRf dAlzdGF0ZV9xdWV1ZTsKKwogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpbXhfaTJjX2h3 ZGF0YSBpbXgxX2kyY19od2RhdGEgPSB7CkBAIC00MTQsMTcgKzUwNCwzMSBAQCBzdGF0aWMg dm9pZCBpMmNfaW14X2RtYV9mcmVlKHN0cnVjdCBpbXhfaTJjX3N0cnVjdCAqaTJjX2lteCkK IHN0YXRpYyBpbnQgaTJjX2lteF9idXNfYnVzeShzdHJ1Y3QgaW14X2kyY19zdHJ1Y3QgKmky Y19pbXgsIGludCBmb3JfYnVzeSkKIHsKIAl1bnNpZ25lZCBsb25nIG9yaWdfamlmZmllcyA9 IGppZmZpZXM7Ci0JdW5zaWduZWQgaW50IHRlbXA7CisJdW5zaWduZWQgaW50IHRlbXAsIGN0 bDsKKwogCiAJZGV2X2RiZygmaTJjX2lteC0+YWRhcHRlci5kZXYsICI8JXM+XG4iLCBfX2Z1 bmNfXyk7CiAKIAl3aGlsZSAoMSkgewogCQl0ZW1wID0gaW14X2kyY19yZWFkX3JlZyhpMmNf aW14LCBJTVhfSTJDX0kyU1IpOworCQljdGwgPSBpbXhfaTJjX3JlYWRfcmVnKGkyY19pbXgs IElNWF9JMkNfSTJDUik7CiAKLQkJLyogY2hlY2sgZm9yIGFyYml0cmF0aW9uIGxvc3QgKi8K LQkJaWYgKHRlbXAgJiBJMlNSX0lBTCkgewotCQkJdGVtcCAmPSB+STJTUl9JQUw7Ci0JCQlp bXhfaTJjX3dyaXRlX3JlZyh0ZW1wLCBpMmNfaW14LCBJTVhfSTJDX0kyU1IpOworCQkvKgor CQkJQ2hlY2sgZm9yIGFyYml0cmF0aW9uIGxvc3QuIERhdGFzaGVldCByZWNvbW1lbmRzIHRv CisJCQljbGVhbiBJQUwgYml0IGluIGludGVycnVwdCBoYW5kbGVyIGJlZm9yZSBhbnkgb3Ro ZXIgYWN0aW9uLgorCQkJU28sIHdlIGNhbm5vdCBoYW5kbGUgSUFMIGhlcmUgbGlrZSB0aGlz OgorCQkJaWYgKHRlbXAgJiBJMlNSX0lBTCkgeworCQkJCXRlcG0gJj0gfkkyU1JfSUFMOwor CQkJCWlteF9pMmNfd3JpdGVfcmVnKHRlbXAsIGkyY19pbXgsIElNWF9JMkNfSTJTUik7CisJ CQl9CisKKwkJCUJ1dCB3ZSBjYW4gZGV0ZWN0IGlmIGNvbnRyb2xsZXIgcmVzZXRzIE1TVEEg Yml0LCBiZWNhdXNlCisJCQloYXJkd2FyZSBpcyBzd2l0Y2hlZCB0byBzbGF2ZSBtb2RlIGlm IGFyYml0cmF0aW9uIHdhcyBsb3N0LgorCQkqLworCisJCWlmIChmb3JfYnVzeSAmJiAhKGN0 bCAmIEkyQ1JfTVNUQSkpIHsKKwkJCWRldl9kYmcoJmkyY19pbXgtPmFkYXB0ZXIuZGV2LAor CQkJCSI8JXM+IExvc3QgYXJiaXRyYXRpb24gKFNSID0gJTAyeCwgQ1IgPSAlMDJ4KVxuIiwg X19mdW5jX18sIHRlbXAsIGN0bCk7CiAJCQlyZXR1cm4gLUVBR0FJTjsKIAkJfQogCkBAIC00 NDUsMTQgKzU0OSwxNCBAQCBzdGF0aWMgaW50IGkyY19pbXhfYnVzX2J1c3koc3RydWN0IGlt eF9pMmNfc3RydWN0ICppMmNfaW14LCBpbnQgZm9yX2J1c3kpCiAKIHN0YXRpYyBpbnQgaTJj X2lteF90cnhfY29tcGxldGUoc3RydWN0IGlteF9pMmNfc3RydWN0ICppMmNfaW14KQogewot CXdhaXRfZXZlbnRfdGltZW91dChpMmNfaW14LT5xdWV1ZSwgaTJjX2lteC0+aTJjc3IgJiBJ MlNSX0lJRiwgSFogLyAxMCk7CisJd2FpdF9ldmVudF90aW1lb3V0KGkyY19pbXgtPnF1ZXVl LCBpMmNfaW14LT5tYXN0ZXJfaW50ZXJydXB0LCBIWiAvIDEwKTsKIAotCWlmICh1bmxpa2Vs eSghKGkyY19pbXgtPmkyY3NyICYgSTJTUl9JSUYpKSkgeworCWlmICh1bmxpa2VseSghKGky Y19pbXgtPm1hc3Rlcl9pbnRlcnJ1cHQpKSkgewogCQlkZXZfZGJnKCZpMmNfaW14LT5hZGFw dGVyLmRldiwgIjwlcz4gVGltZW91dFxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVUSU1F RE9VVDsKIAl9CiAJZGV2X2RiZygmaTJjX2lteC0+YWRhcHRlci5kZXYsICI8JXM+IFRSWCBj b21wbGV0ZVxuIiwgX19mdW5jX18pOwotCWkyY19pbXgtPmkyY3NyID0gMDsKKwlpMmNfaW14 LT5tYXN0ZXJfaW50ZXJydXB0ID0gMDsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTEwLDYgKzYx NCw0NCBAQCBzdGF0aWMgdm9pZCBpMmNfaW14X3NldF9jbGsoc3RydWN0IGlteF9pMmNfc3Ry dWN0ICppMmNfaW14KQogI2VuZGlmCiB9CiAKK3N0YXRpYyBpbnQgaTJjX2lteF9jb25maWd1 cmVfY2xvY2soc3RydWN0IGlteF9pMmNfc3RydWN0ICppMmNfaW14KQoreworCWludCByZXN1 bHQ7CisKKwlpMmNfaW14X3NldF9jbGsoaTJjX2lteCk7CisKKwlyZXN1bHQgPSBjbGtfcHJl cGFyZV9lbmFibGUoaTJjX2lteC0+Y2xrKTsKKwlpZiAocmVzdWx0ID09IDApCisJCWlteF9p MmNfd3JpdGVfcmVnKGkyY19pbXgtPmlmZHIsIGkyY19pbXgsIElNWF9JMkNfSUZEUik7CisK KwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCBpMmNfaW14X2VuYWJsZV9pMmNf Y29udHJvbGxlcihzdHJ1Y3QgaW14X2kyY19zdHJ1Y3QgKmkyY19pbXgpCit7CisJaW14X2ky Y193cml0ZV9yZWcoaTJjX2lteC0+aHdkYXRhLT5pMnNyX2Nscl9vcGNvZGUsIGkyY19pbXgs CisJCUlNWF9JMkNfSTJTUik7CisJaW14X2kyY193cml0ZV9yZWcoaTJjX2lteC0+aHdkYXRh LT5pMmNyX2llbl9vcGNvZGUsIGkyY19pbXgsCisJCUlNWF9JMkNfSTJDUik7CisKKwkvKiBX YWl0IGNvbnRyb2xsZXIgdG8gYmUgc3RhYmxlICovCisJdWRlbGF5KDUwKTsKK30KKworc3Rh dGljIGludCBpMmNfaW14X2h3X3N0YXJ0KHN0cnVjdCBpbXhfaTJjX3N0cnVjdCAqaTJjX2lt eCkKK3sKKwlpbnQgcmVzdWx0OworCisJZGV2X2RiZygmaTJjX2lteC0+YWRhcHRlci5kZXYs ICI8JXM+XG4iLCBfX2Z1bmNfXyk7CisKKwlyZXN1bHQgPSBpMmNfaW14X2NvbmZpZ3VyZV9j bG9jayhpMmNfaW14KTsKKwlpZiAocmVzdWx0ICE9IDApCisJCXJldHVybiByZXN1bHQ7CisJ aTJjX2lteF9lbmFibGVfaTJjX2NvbnRyb2xsZXIoaTJjX2lteCk7CisJcmV0dXJuIDA7Cit9 CisKKwogc3RhdGljIGludCBpMmNfaW14X3N0YXJ0KHN0cnVjdCBpbXhfaTJjX3N0cnVjdCAq aTJjX2lteCkKIHsKIAl1bnNpZ25lZCBpbnQgdGVtcCA9IDA7CkBAIC01MTcsMjAgKzY1OSw0 OSBAQCBzdGF0aWMgaW50IGkyY19pbXhfc3RhcnQoc3RydWN0IGlteF9pMmNfc3RydWN0ICpp MmNfaW14KQogCiAJZGV2X2RiZygmaTJjX2lteC0+YWRhcHRlci5kZXYsICI8JXM+XG4iLCBf X2Z1bmNfXyk7CiAKLQlpMmNfaW14X3NldF9jbGsoaTJjX2lteCk7CisJaWYgKGkyY19pbXgt PnNsYXZlX3Rhc2sgIT0gTlVMTCkKKwl7CisJCWludCBjbnQgPSAwOworCQlhdG9taWNfc2V0 KCZpMmNfaW14LT5sYXN0X2Vycm9yLCBFVU5ERUZJTkVEKTsKKwkJaWYgKGV2dF9wdXQoJmky Y19pbXgtPmV2ZW50cywgRVZUX1NUQVJUKSAhPSAwKQorCQl7CisJCQlkZXZfZXJyKCZpMmNf aW14LT5hZGFwdGVyLmRldiwgIkV2ZW50IGJ1ZmZlciBvdmVyZmxvd1xuIik7CisJCQlyZXR1 cm4gLUVCVVNZOworCQl9CiAKLQlpbXhfaTJjX3dyaXRlX3JlZyhpMmNfaW14LT5pZmRyLCBp MmNfaW14LCBJTVhfSTJDX0lGRFIpOwotCS8qIEVuYWJsZSBJMkMgY29udHJvbGxlciAqLwot CWlteF9pMmNfd3JpdGVfcmVnKGkyY19pbXgtPmh3ZGF0YS0+aTJzcl9jbHJfb3Bjb2RlLCBp MmNfaW14LCBJTVhfSTJDX0kyU1IpOwotCWlteF9pMmNfd3JpdGVfcmVnKGkyY19pbXgtPmh3 ZGF0YS0+aTJjcl9pZW5fb3Bjb2RlLCBpMmNfaW14LCBJTVhfSTJDX0kyQ1IpOworCQl3YWtl X3VwKCZpMmNfaW14LT5zdGF0ZV9xdWV1ZSk7CiAKLQkvKiBXYWl0IGNvbnRyb2xsZXIgdG8g YmUgc3RhYmxlICovCi0JdXNsZWVwX3JhbmdlKDUwLCAxNTApOworCQl3aGlsZSggKHJlc3Vs dCA9IGF0b21pY19yZWFkKCZpMmNfaW14LT5sYXN0X2Vycm9yKSkgPT0gRVVOREVGSU5FRCkK KwkJeworCQkJc2NoZWR1bGUoKTsKKworCQkvKiBUT0RPOiBkZWJ1ZyB3b3JrYXJvdW5kIC0g c3RhcnQgaHVuZyBtb25pdG9yaW5nICovCisJCQljbnQrKzsKKwkJCWlmIChjbnQgPT0gNTAw MDAwKQorCQkJeworCQkJCWRldl9lcnIoJmkyY19pbXgtPmFkYXB0ZXIuZGV2LCAiVG9vIG1h bnkgc3RhcnQgbG9vcHNcbiIpOworCQkJCWlteF9pMmNfd3JpdGVfcmVnKGkyY19pbXgtPmh3 ZGF0YS0+aTJjcl9pZW5fb3Bjb2RlIF4gSTJDUl9JRU4sCisJCQkJCQlpMmNfaW14LCBJTVhf STJDX0kyQ1IpOworCQkJCWkyY19pbXhfZW5hYmxlX2kyY19jb250cm9sbGVyKGkyY19pbXgp OworCQkJCWlteF9pMmNfd3JpdGVfcmVnKGkyY19pbXgtPmh3ZGF0YS0+aTJjcl9pZW5fb3Bj b2RlIHwgSTJDUl9JSUVOLAorCQkJCQkJaTJjX2lteCxJTVhfSTJDX0kyQ1IpOworCisJCQkJ cmV0dXJuIC1FVElNRURPVVQ7CisJCQl9CisKKwkJfTsKKwkJcmV0dXJuIHJlc3VsdDsKKwl9 CisKKwlyZXN1bHQgPSBpMmNfaW14X2h3X3N0YXJ0KGkyY19pbXgpOworCWlmIChyZXN1bHQg IT0gMCkKKwkJcmV0dXJuIHJlc3VsdDsKIAogCS8qIFN0YXJ0IEkyQyB0cmFuc2FjdGlvbiAq LwogCXRlbXAgPSBpbXhfaTJjX3JlYWRfcmVnKGkyY19pbXgsIElNWF9JMkNfSTJDUik7CiAJ dGVtcCB8PSBJMkNSX01TVEE7CiAJaW14X2kyY193cml0ZV9yZWcodGVtcCwgaTJjX2lteCwg SU1YX0kyQ19JMkNSKTsKKwogCXJlc3VsdCA9IGkyY19pbXhfYnVzX2J1c3koaTJjX2lteCwg MSk7CiAJaWYgKHJlc3VsdCkKIAkJcmV0dXJuIHJlc3VsdDsKQEAgLTU0MiwxMCArNzEzLDIz IEBAIHN0YXRpYyBpbnQgaTJjX2lteF9zdGFydChzdHJ1Y3QgaW14X2kyY19zdHJ1Y3QgKmky Y19pbXgpCiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIHZvaWQgaTJjX2lteF9zdG9w KHN0cnVjdCBpbXhfaTJjX3N0cnVjdCAqaTJjX2lteCkKK3N0YXRpYyB2b2lkIGkyY19pbXhf c2xhdmVfaW5pdChzdHJ1Y3QgaW14X2kyY19zdHJ1Y3QgKmkyY19pbXgpCiB7Ci0JdW5zaWdu ZWQgaW50IHRlbXAgPSAwOworCXVuc2lnbmVkIGludCB0ZW1wOworCisJZGV2X2RiZygmaTJj X2lteC0+YWRhcHRlci5kZXYsICI8JXM+XG4iLCBfX2Z1bmNfXyk7CisKKwlpMmNfaW14X2Vu YWJsZV9pMmNfY29udHJvbGxlcihpMmNfaW14KTsKKworCS8qIFNldCBTbGF2ZSBtb2RlIHdp dGggaW50ZXJydXB0IGVuYWJsZSAqLworCXRlbXAgPSBpMmNfaW14LT5od2RhdGEtPmkyY3Jf aWVuX29wY29kZSB8IEkyQ1JfSUlFTjsKKwlpbXhfaTJjX3dyaXRlX3JlZyh0ZW1wLCBpMmNf aW14LCBJTVhfSTJDX0kyQ1IpOworfQogCisKK3N0YXRpYyB2b2lkIGkyY19pbXhfaHdfc3Rv cChzdHJ1Y3QgaW14X2kyY19zdHJ1Y3QgKmkyY19pbXgpCit7CisJdW5zaWduZWQgaW50IHRl bXAgPSAwOwogCWlmICghaTJjX2lteC0+c3RvcHBlZCkgewogCQkvKiBTdG9wIEkyQyB0cmFu c2FjdGlvbiAqLwogCQlkZXZfZGJnKCZpMmNfaW14LT5hZGFwdGVyLmRldiwgIjwlcz5cbiIs IF9fZnVuY19fKTsKQEAgLTU1NSw2ICs3MzksNyBAQCBzdGF0aWMgdm9pZCBpMmNfaW14X3N0 b3Aoc3RydWN0IGlteF9pMmNfc3RydWN0ICppMmNfaW14KQogCQkJdGVtcCAmPSB+STJDUl9E TUFFTjsKIAkJaW14X2kyY193cml0ZV9yZWcodGVtcCwgaTJjX2lteCwgSU1YX0kyQ19JMkNS KTsKIAl9CisKIAlpZiAoaXNfaW14MV9pMmMoaTJjX2lteCkpIHsKIAkJLyoKIAkJICogVGhp cyBkZWxheSBjYXVzZWQgYnkgYW4gaS5NWEwgaGFyZHdhcmUgYnVnLgpAQCAtNTY4LDI0ICs3 NTMsMzg4IEBAIHN0YXRpYyB2b2lkIGkyY19pbXhfc3RvcChzdHJ1Y3QgaW14X2kyY19zdHJ1 Y3QgKmkyY19pbXgpCiAJCWkyY19pbXgtPnN0b3BwZWQgPSAxOwogCX0KIAotCS8qIERpc2Fi bGUgSTJDIGNvbnRyb2xsZXIgKi8KLQl0ZW1wID0gaTJjX2lteC0+aHdkYXRhLT5pMmNyX2ll bl9vcGNvZGUgXiBJMkNSX0lFTiwKKwl0ZW1wID0gaTJjX2lteC0+aHdkYXRhLT5pMmNyX2ll bl9vcGNvZGUgXiBJMkNSX0lFTjsKIAlpbXhfaTJjX3dyaXRlX3JlZyh0ZW1wLCBpMmNfaW14 LCBJTVhfSTJDX0kyQ1IpOworCisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGkyY19pbXgtPmNs ayk7CisKK30KKworc3RhdGljIHZvaWQgaTJjX2lteF9zdG9wKHN0cnVjdCBpbXhfaTJjX3N0 cnVjdCAqaTJjX2lteCkKK3sKKwlpZiAoaTJjX2lteC0+c2xhdmUgPT0gTlVMTCkgeworCQlp MmNfaW14X2h3X3N0b3AoaTJjX2lteCk7CisJfSBlbHNlIHsKKworCQlkZXZfZGJnKCZpMmNf aW14LT5hZGFwdGVyLmRldiwgIjwlcz5cbiIsIF9fZnVuY19fKTsKKworCQlldnRfcHV0KCZp MmNfaW14LT5ldmVudHMsIEVWVF9TVE9QKTsKKwkJd2FrZV91cCgmaTJjX2lteC0+c3RhdGVf cXVldWUpOworCX0KK30KKworc3RhdGljIHZvaWQgaTJjX2lteF9jbGVhcl9pc3JfYml0KHN0 cnVjdCBpbXhfaTJjX3N0cnVjdCAqaTJjX2lteCwKKwl1bnNpZ25lZCBpbnQgc3RhdHVzKQor eworCXN0YXR1cyAmPSB+STJTUl9JSUY7CisJc3RhdHVzIHw9IChpMmNfaW14LT5od2RhdGEt Pmkyc3JfY2xyX29wY29kZSAmIEkyU1JfSUlGKTsKKwlpbXhfaTJjX3dyaXRlX3JlZyhzdGF0 dXMsIGkyY19pbXgsIElNWF9JMkNfSTJTUik7Cit9CisKK3N0YXRpYyB2b2lkIGkyY19pbXhf Y2xlYXJfaWFsX2JpdChzdHJ1Y3QgaW14X2kyY19zdHJ1Y3QgKmkyY19pbXgpCit7CisJdW5z aWduZWQgaW50IHN0YXR1czsKKwlzdGF0dXMgPSBpbXhfaTJjX3JlYWRfcmVnKGkyY19pbXgs IElNWF9JMkNfSTJTUik7CisJc3RhdHVzICY9IH5JMlNSX0lBTDsKKwlpbXhfaTJjX3dyaXRl X3JlZyhzdGF0dXMsIGkyY19pbXgsIElNWF9JMkNfSTJTUik7Cit9CisKK3N0YXRpYyB2b2lk IHNldF9zdGF0ZSAoc3RydWN0IGlteF9pMmNfc3RydWN0ICppMmNfaW14LCB1bnNpZ25lZCBp bnQgbmV3KTsKKworc3RhdGljIHZvaWQgaTJjX2lteF9zbGF2ZV9wcm9jZXNzX2lycShzdHJ1 Y3QgaW14X2kyY19zdHJ1Y3QgKmkyY19pbXgpCit7CisJdW5zaWduZWQgaW50IHN0YXR1cywg Y3RsOworCXU4IGRhdGE7CisKKwlzdGF0dXMgPSBpbXhfaTJjX3JlYWRfcmVnKGkyY19pbXgs IElNWF9JMkNfSTJTUik7CisJY3RsID0gaW14X2kyY19yZWFkX3JlZyhpMmNfaW14LCBJTVhf STJDX0kyQ1IpOworCisJaWYgKHN0YXR1cyAmIEkyU1JfSUFBUykgeworCQlpZiAoc3RhdHVz ICYgSTJTUl9TUlcpIHsKKwkJCS8qIG1hc3RlciB3YW50cyB0byByZWFkIGZyb20gdXMgKi8K KwkJCWkyY19zbGF2ZV9ldmVudChpMmNfaW14LT5zbGF2ZSwKKwkJCQlJMkNfU0xBVkVfUkVB RF9SRVFVRVNURUQsICZkYXRhKTsKKwkJCWN0bCB8PSBJMkNSX01UWDsKKwkJCWlteF9pMmNf d3JpdGVfcmVnKGN0bCwgaTJjX2lteCwgSU1YX0kyQ19JMkNSKTsKKworCQkJLypzZW5kIGRh dGEgKi8KKwkJCWlteF9pMmNfd3JpdGVfcmVnKGRhdGEsIGkyY19pbXgsIElNWF9JMkNfSTJE Uik7CisJCX0gZWxzZSB7CisJCQlkZXZfZGJnKCZpMmNfaW14LT5hZGFwdGVyLmRldiwgIndy aXRlIHJlcXVlc3RlZCIpOworCQkJaTJjX3NsYXZlX2V2ZW50KGkyY19pbXgtPnNsYXZlLAor CQkJCUkyQ19TTEFWRV9XUklURV9SRVFVRVNURUQsICZkYXRhKTsKKwkJCS8qc2xhdmUgcmVj ZWl2ZSAqLworCQkJY3RsICY9IH5JMkNSX01UWDsKKwkJCWlteF9pMmNfd3JpdGVfcmVnKGN0 bCwgaTJjX2lteCwgSU1YX0kyQ19JMkNSKTsKKworCQkJLypkdW1teSByZWFkICovCisJCQlk YXRhID0gaW14X2kyY19yZWFkX3JlZyhpMmNfaW14LCBJTVhfSTJDX0kyRFIpOworCQl9CisJ fSBlbHNlIHsKKwkJLyogc2xhdmUgc2VuZCAqLworCQlpZiAoY3RsICYgSTJDUl9NVFgpIHsK KwkJCWlmICghKHN0YXR1cyAmIEkyU1JfUlhBSykpIHsJLypBQ0sgcmVjZWl2ZWQgKi8KKwkJ CQlpMmNfc2xhdmVfZXZlbnQoaTJjX2lteC0+c2xhdmUsCisJCQkJCUkyQ19TTEFWRV9SRUFE X1BST0NFU1NFRCwgJmRhdGEpOworCQkJCWN0bCB8PSBJMkNSX01UWDsKKwkJCQlpbXhfaTJj X3dyaXRlX3JlZyhjdGwsIGkyY19pbXgsIElNWF9JMkNfSTJDUik7CisJCQkJLypzZW5kIGRh dGEgKi8KKwkJCQlpbXhfaTJjX3dyaXRlX3JlZyhkYXRhLCBpMmNfaW14LCBJTVhfSTJDX0ky RFIpOworCQkJfSBlbHNlIHsKKwkJCQkvKm5vIEFDSy4gKi8KKwkJCQkvKmR1bW15IHJlYWQg Ki8KKwkJCQlkZXZfZGJnKCZpMmNfaW14LT5hZGFwdGVyLmRldiwgInJlYWQgcmVxdWVzdGVk Iik7CisJCQkJaTJjX3NsYXZlX2V2ZW50KGkyY19pbXgtPnNsYXZlLAorCQkJCQlJMkNfU0xB VkVfUkVBRF9SRVFVRVNURUQsICZkYXRhKTsKKworCQkJCWN0bCAmPSB+STJDUl9NVFg7CisJ CQkJaW14X2kyY193cml0ZV9yZWcoY3RsLCBpMmNfaW14LCBJTVhfSTJDX0kyQ1IpOworCQkJ CWlteF9pMmNfcmVhZF9yZWcoaTJjX2lteCwgSU1YX0kyQ19JMkRSKTsKKwkJCX0KKwkJfSBl bHNlIHsJLypyZWFkICovCisJCQljdGwgJj0gfkkyQ1JfTVRYOworCQkJaW14X2kyY193cml0 ZV9yZWcoY3RsLCBpMmNfaW14LCBJTVhfSTJDX0kyQ1IpOworCisJCQkvKnJlYWQgKi8KKwkJ CWRhdGEgPSBpbXhfaTJjX3JlYWRfcmVnKGkyY19pbXgsIElNWF9JMkNfSTJEUik7CisJCQlk ZXZfZGJnKCZpMmNfaW14LT5hZGFwdGVyLmRldiwgInJlY2VpdmVkICV4IiwKKwkJCQkodW5z aWduZWQgaW50KSBkYXRhKTsKKwkJCWkyY19zbGF2ZV9ldmVudChpMmNfaW14LT5zbGF2ZSwK KwkJCQlJMkNfU0xBVkVfV1JJVEVfUkVDRUlWRUQsICZkYXRhKTsKKwkJfQorCX0KK30KKwor CitzdGF0aWMgdm9pZCBpZGxlX2V2dF9oYW5kbGVyIChzdHJ1Y3QgaW14X2kyY19zdHJ1Y3Qg KmkyY19pbXgsIHVuc2lnbmVkIGludCBldmVudCkKK3sKKwl1OCByZWcsIGRhdGE7CisJc3dp dGNoIChldmVudCkgeworCQljYXNlIEVWVF9FTlRSWToKKwkJCWlteF9pMmNfd3JpdGVfcmVn KGkyY19pbXgtPmh3ZGF0YS0+aTJjcl9pZW5fb3Bjb2RlIF4gSTJDUl9JRU4sCisJCQkJCWky Y19pbXgsIElNWF9JMkNfSTJDUik7CisJCQlpMmNfaW14X2VuYWJsZV9pMmNfY29udHJvbGxl cihpMmNfaW14KTsKKwkJCWlteF9pMmNfd3JpdGVfcmVnKGkyY19pbXgtPmh3ZGF0YS0+aTJj cl9pZW5fb3Bjb2RlIHwgSTJDUl9JSUVOLAorCQkJCQlpMmNfaW14LElNWF9JMkNfSTJDUik7 CisJCQlpZiAoYXRvbWljX3JlYWQoJmkyY19pbXgtPmxhc3RfZXJyb3IpID09IEVVTkRFRklO RUQpCisJCQl7CisJCQkJZGV2X2RiZygmaTJjX2lteC0+YWRhcHRlci5kZXYsICJSZXNldCBs b3N0IFNUQVJUIGV2ZW50XG4iKTsKKwkJCQlhdG9taWNfc2V0KCZpMmNfaW14LT5sYXN0X2Vy cm9yLCAtRUJVU1kpOworCQkJfQorCQkJaTJjX2lteC0+c3RhcnRfcmV0cnlfY250ID0gMCA7 CisJCQlyZXR1cm47CisJCWNhc2UgRVZUX0FMOgorCQkJaTJjX2lteF9jbGVhcl9pYWxfYml0 KGkyY19pbXgpOworCQkJYnJlYWs7CisJCWNhc2UgRVZUX1NJOgorCQkJc2V0X3N0YXRlKGky Y19pbXgsIFNUQVRFX1NMQVZFKTsKKwkJCWkyY19pbXhfc2xhdmVfcHJvY2Vzc19pcnEoaTJj X2lteCk7CisJCQlicmVhazsKKwkJY2FzZSBFVlRfU1RBUlQ6CisJCQlyZWcgPSBpbXhfaTJj X3JlYWRfcmVnKGkyY19pbXgsIElNWF9JMkNfSTJTUik7CisJCQlpZiAoKHJlZyAmIEkyU1Jf SUJCKSAhPSAwKSB7CisJCQkJYXRvbWljX3NldCgmaTJjX2lteC0+bGFzdF9lcnJvciwgLUVC VVNZKTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJcmVnID0gaW14X2kyY19yZWFkX3JlZyhp MmNfaW14LCBJTVhfSTJDX0kyQ1IpOworCQkJcmVnIHw9IEkyQ1JfTVNUQTsKKwkJCWlteF9p MmNfd3JpdGVfcmVnKHJlZywgaTJjX2lteCwgSU1YX0kyQ19JMkNSKTsKKwkJCXNldF9zdGF0 ZShpMmNfaW14LFNUQVRFX1NQKTsKKwkJCWkyY19pbXgtPnN0YXJ0X3JldHJ5X2NudCA9IDA7 CisJCQlyZXR1cm47CisJCQlicmVhazsKKwkJY2FzZSBFVlRfU1RPUDoKKwkJCWJyZWFrOwor CQljYXNlIEVWVF9QT0xMOgorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwl9 CisKKwl3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChpMmNfaW14LT5zdGF0ZV9x dWV1ZSwoZXZ0X2lzX2VtcHR5KCZpMmNfaW14LT5ldmVudHMpID09IDApLEhaLzEwKTsKKwor fQorCitzdGF0aWMgdm9pZCBtYXN0ZXJfZXZ0X2hhbmRsZXIgKHN0cnVjdCBpbXhfaTJjX3N0 cnVjdCAqaTJjX2lteCwgdW5zaWduZWQgaW50IGV2ZW50KQoreworCXN3aXRjaCAoZXZlbnQp IHsKKwkJY2FzZSBFVlRfRU5UUlk6CisJCQlpMmNfaW14LT5zdGFydF9yZXRyeV9jbnQgPSAw IDsKKwkJCXJldHVybjsKKwkJY2FzZSBFVlRfQUw6CisJCQlzZXRfc3RhdGUoaTJjX2lteCwg U1RBVEVfSURMRSk7CisJCQlicmVhazsKKwkJY2FzZSBFVlRfU0k6CisJCQlicmVhazsKKwkJ Y2FzZSBFVlRfU1RBUlQ6CisJCQlhdG9taWNfc2V0KCZpMmNfaW14LT5sYXN0X2Vycm9yLCAt RUJVU1kpOworCQkJYnJlYWs7CisJCWNhc2UgRVZUX1NUT1A6CisJCQlpbXhfaTJjX3dyaXRl X3JlZyhpMmNfaW14LT5od2RhdGEtPmkyc3JfY2xyX29wY29kZSwgaTJjX2lteCwKKwkJCQkJ SU1YX0kyQ19JMlNSKTsKKwkJCWlteF9pMmNfd3JpdGVfcmVnKGkyY19pbXgtPmh3ZGF0YS0+ aTJjcl9pZW5fb3Bjb2RlIHwgSTJDUl9JSUVOLAorCQkJCQlpMmNfaW14LElNWF9JMkNfSTJD Uik7CisKKwkJCWkyY19pbXgtPnN0b3BwZWQgPSAxOworCQkJdWRlbGF5KDUwKTsKKwkJCXNl dF9zdGF0ZShpMmNfaW14LCBTVEFURV9JRExFKTsKKwkJCXJldHVybjsKKwkJY2FzZSBFVlRf UE9MTDoKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCX0KKworCXdhaXRfZXZlbnRfaW50ZXJy dXB0aWJsZV90aW1lb3V0KGkyY19pbXgtPnN0YXRlX3F1ZXVlLChldnRfaXNfZW1wdHkoJmky Y19pbXgtPmV2ZW50cykgPT0gMCksIEhaIC8gMTApOworfQorCitzdGF0aWMgdm9pZCBzbGF2 ZV9ldnRfaGFuZGxlciAoc3RydWN0IGlteF9pMmNfc3RydWN0ICppMmNfaW14LCB1bnNpZ25l ZCBpbnQgZXZlbnQpCit7CisJdTggcmVnLGRhdGE7CisJc3dpdGNoIChldmVudCkgeworCQlj YXNlIEVWVF9FTlRSWToKKwkJCWlmIChhdG9taWNfcmVhZCgmaTJjX2lteC0+bGFzdF9lcnJv cikgPT0gRVVOREVGSU5FRCkKKwkJCXsKKwkJCQlkZXZfZGJnKCZpMmNfaW14LT5hZGFwdGVy LmRldiwgIlJlc2V0IGxvc3QgU1RBUlQgZXZlbnRcbiIpOworCQkJCWF0b21pY19zZXQoJmky Y19pbXgtPmxhc3RfZXJyb3IsIC1FQlVTWSk7CisJCQl9CisJCQlpMmNfaW14LT5zdGFydF9y ZXRyeV9jbnQgPSAwIDsKKwkJCWkyY19pbXgtPnNsYXZlX3BvbGxfY250ID0gMCA7CisJCQly ZXR1cm47CisJCWNhc2UgRVZUX0FMOgorCQkJc2V0X3N0YXRlKGkyY19pbXgsIFNUQVRFX0lE TEUpOworCQkJYnJlYWs7CisJCWNhc2UgRVZUX1NUQVJUOgorCQkJcmVnID0gaW14X2kyY19y ZWFkX3JlZyhpMmNfaW14LCBJTVhfSTJDX0kyQ1IpOworCQkJYXRvbWljX3NldCgmaTJjX2lt eC0+bGFzdF9lcnJvciwgLUVCVVNZKTsKKwkJCWJyZWFrOworCQljYXNlIEVWVF9TVE9QOgor CQkJYnJlYWs7CisJCWNhc2UgRVZUX1NJOgorCQkJaTJjX2lteF9zbGF2ZV9wcm9jZXNzX2ly cShpMmNfaW14KTsKKwkJCXJlZyA9IGlteF9pMmNfcmVhZF9yZWcoaTJjX2lteCwgSU1YX0ky Q19JMlNSKTsKKwkJCWlmICgocmVnICYgSTJTUl9JQkIpID09IDApIHsKKwkJCQlkYXRhID0g MDsKKwkJCQlzZXRfc3RhdGUoaTJjX2lteCwgIFNUQVRFX0lETEUpOworCQkJCWRldl9kYmco JmkyY19pbXgtPmFkYXB0ZXIuZGV2LCAiZW5kIG9mIHBhY2thZ2UiKTsKKwkJCQlpMmNfc2xh dmVfZXZlbnQoaTJjX2lteC0+c2xhdmUsIEkyQ19TTEFWRV9TVE9QLCAmZGF0YSk7CisJCQl9 CisJCQlpZiAoaTJjX2lteC0+c2xhdmVfcG9sbF9jbnQgPiAxMCApCisJCQl7CisJCQkJZGV2 X2VycigmaTJjX2lteC0+YWRhcHRlci5kZXYsIlRvbyBtdWNoIHNsYXZlIGxvb3BzICglaSlc biIsaTJjX2lteC0+c2xhdmVfcG9sbF9jbnQpOworCQkJfQorCisJCQlpMmNfaW14LT5zbGF2 ZV9wb2xsX2NudCA9IDAgOworCQkJYnJlYWs7CisJCWNhc2UgRVZUX1BPTEw6CisJCQlyZWcg PSBpbXhfaTJjX3JlYWRfcmVnKGkyY19pbXgsIElNWF9JMkNfSTJTUik7CisJCQlpZiAoKHJl ZyAmIEkyU1JfSUJCKSA9PSAwKSB7CisJCQkJZGF0YSA9IDA7CisJCQkJc2V0X3N0YXRlKGky Y19pbXgsICBTVEFURV9JRExFKTsKKwkJCQlkZXZfZGJnKCZpMmNfaW14LT5hZGFwdGVyLmRl diwgImVuZCBvZiBwYWNrYWdlIik7CisJCQkJaTJjX3NsYXZlX2V2ZW50KGkyY19pbXgtPnNs YXZlLCBJMkNfU0xBVkVfU1RPUCwgJmRhdGEpOworCQkJCWlmIChpMmNfaW14LT5zbGF2ZV9w b2xsX2NudCA+IDEwICkKKwkJCQl7CisJCQkJCWRldl9lcnIoJmkyY19pbXgtPmFkYXB0ZXIu ZGV2LCJUb28gbXVjaCBzbGF2ZSBsb29wcyAoJWkpXG4iLGkyY19pbXgtPnNsYXZlX3BvbGxf Y250KTsKKwkJCQl9CisKKwkJCQlpMmNfaW14LT5zbGF2ZV9wb2xsX2NudCA9IDAgOworCQkJ fQorCisJCQkvKlRPRE86IGRvICJkdW1teSByZWFkIiBpZiBubyBpbnRlcnJ1cHRzIG9yIHN0 b3AgY29uZGl0aW9uIGZvciBtb3JlIHRoZW4gMTAgd2FpdCBsb29wcyovCisJCQlpMmNfaW14 LT5zbGF2ZV9wb2xsX2NudCArPSAxIDsKKwkJCWlmIChpMmNfaW14LT5zbGF2ZV9wb2xsX2Nu dCAlIDEwID09IDApCisJCQl7CisJCQkJaW14X2kyY19yZWFkX3JlZyhpMmNfaW14LCBJTVhf STJDX0kyRFIpOworCQkJfQorCisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOwor CX0KKworCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KGkyY19pbXgtPnN0YXRl X3F1ZXVlLChldnRfaXNfZW1wdHkoJmkyY19pbXgtPmV2ZW50cykgPT0gMCksIDEpOworfQor CitzdGF0aWMgdm9pZCBzcF9ldnRfaGFuZGxlciAoc3RydWN0IGlteF9pMmNfc3RydWN0ICpp MmNfaW14LCB1bnNpZ25lZCBpbnQgZXZlbnQpCit7CisJdTggcmVnOworCisJc3dpdGNoIChl dmVudCkgeworCQljYXNlIEVWVF9BTDoKKwkJCWRldl9kYmcoJmkyY19pbXgtPmFkYXB0ZXIu ZGV2LCAiTG9zdCBhcmJpdHJhdGlvbiBvbiBTVEFSVCIpOworCQkJYXRvbWljX3NldCgmaTJj X2lteC0+bGFzdF9lcnJvciwgLUVBR0FJTik7CisJCQlzZXRfc3RhdGUoaTJjX2lteCwgU1RB VEVfSURMRSk7CisJCQlyZXR1cm47CisJCWNhc2UgRVZUX1NJOgorCQkJc2V0X3N0YXRlKGky Y19pbXgsIFNUQVRFX0lETEUpOworCQkJZXZ0X3B1dCgmaTJjX2lteC0+ZXZlbnRzLCBFVlRf U0kgKTsKKwkJY2FzZSBFVlRfU1RBUlQ6CisJCQlhdG9taWNfc2V0KCZpMmNfaW14LT5sYXN0 X2Vycm9yLCAtRUJVU1kpOworCQljYXNlIEVWVF9TVE9QOgorCQkJYnJlYWs7CisKKwkJY2Fz ZSBFVlRfRU5UUlk6CisJCQlyZXR1cm47CisJCWNhc2UgRVZUX1BPTEw6CisJCQlyZWcgPSBp bXhfaTJjX3JlYWRfcmVnKGkyY19pbXgsIElNWF9JMkNfSTJTUik7CisJCQlpZiAoKHJlZyAm IEkyU1JfSUJCKSAmJiAhKHJlZyAmIEkyU1JfSUFMKSkgeworCisJCQkJc2V0X3N0YXRlKGky Y19pbXgsICBTVEFURV9NQVNURVIpOworCQkJCXJlZyA9IGlteF9pMmNfcmVhZF9yZWcoaTJj X2lteCwgSU1YX0kyQ19JMkNSKTsKKworCQkJCWkyY19pbXgtPnN0b3BwZWQgPSAwOworCQkJ CXJlZyB8PSBJMkNSX0lJRU4gfCBJMkNSX01UWCB8IEkyQ1JfVFhBSzsKKwkJCQlyZWcgJj0g fkkyQ1JfRE1BRU47CisJCQkJaW14X2kyY193cml0ZV9yZWcocmVnLCBpMmNfaW14LCBJTVhf STJDX0kyQ1IpOworCQkJCWF0b21pY19zZXQoJmkyY19pbXgtPmxhc3RfZXJyb3IsMCk7CisJ CQkJaTJjX2lteC0+c3RhcnRfcmV0cnlfY250ID0gMCA7CisJCQkJcmV0dXJuOworCQkJfQor CQlkZWZhdWx0OgorCQkJYnJlYWs7CisKKwl9CisJaWYgKGkyY19pbXgtPnN0YXJ0X3JldHJ5 X2NudCArKyAgPCAxMDApCisJeworCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91 dChpMmNfaW14LT5zdGF0ZV9xdWV1ZSwoZXZ0X2lzX2VtcHR5KCZpMmNfaW14LT5ldmVudHMp ID09IDApLDEpOworCQlkZXZfZGJnKCZpMmNfaW14LT5hZGFwdGVyLmRldiwgIndhaXQgZm9y IGJ1c3kgY250ID0gJWkgZXZ0ID0gJWkiLCBpMmNfaW14LT5zdGFydF9yZXRyeV9jbnQsZXZl bnQpOworCX0gZWxzZSB7CisKKwkJZGV2X2RiZygmaTJjX2lteC0+YWRhcHRlci5kZXYsICJz dGFydCB0aW1lb3V0Iik7CisJCWkyY19pbXgtPnN0YXJ0X3JldHJ5X2NudCA9IDAgOworCQlh dG9taWNfc2V0KCZpMmNfaW14LT5sYXN0X2Vycm9yLC1FVElNRURPVVQpOworCQlzZXRfc3Rh dGUoaTJjX2lteCwgU1RBVEVfSURMRSk7CisJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90 aW1lb3V0KGkyY19pbXgtPnN0YXRlX3F1ZXVlLChldnRfaXNfZW1wdHkoJmkyY19pbXgtPmV2 ZW50cykgPT0gMCksIEhaIC8gMTApOworCX0KK30KKworc3RhdGljIHZvaWQgc2V0X3N0YXRl IChzdHJ1Y3QgaW14X2kyY19zdHJ1Y3QgKmkyY19pbXgsIHVuc2lnbmVkIGludCBuZXcpCit7 CisJaTJjX2lteC0+c3RhdGUgPSBuZXc7CisJc3dpdGNoIChuZXcpIHsKKwkJY2FzZSBTVEFU RV9JRExFOgorCQkJaWRsZV9ldnRfaGFuZGxlcihpMmNfaW14LCBFVlRfRU5UUlkpOworCQkJ YnJlYWs7CisJCWNhc2UgU1RBVEVfU0xBVkU6CisJCQlzbGF2ZV9ldnRfaGFuZGxlcihpMmNf aW14LCBFVlRfRU5UUlkpOworCQkJYnJlYWs7CisJCWNhc2UgU1RBVEVfU1A6CisJCQlzcF9l dnRfaGFuZGxlcihpMmNfaW14LCBFVlRfRU5UUlkpOworCQkJYnJlYWs7CisJCWNhc2UgU1RB VEVfTUFTVEVSOgorCQkJbWFzdGVyX2V2dF9oYW5kbGVyKGkyY19pbXgsIEVWVF9FTlRSWSk7 CisJCQlicmVhazsKKwl9Cit9CisKKworc3RhdGljIGludCBpMmNfaW14X3NsYXZlX3RocmVh ZGZuKHZvaWQgKnBkYXRhKQoreworCXVuc2lnbmVkIGludCBldmVudDsKKwlzdHJ1Y3QgaW14 X2kyY19zdHJ1Y3QgKmkyY19pbXggPSAoc3RydWN0IGlteF9pMmNfc3RydWN0ICopIHBkYXRh OworCisJZG8geworCisJCWV2ZW50ID0gZXZ0X2dldCgmaTJjX2lteC0+ZXZlbnRzKTsKKwkJ aWYgKGV2ZW50ID09IEVWVF9JTlZBTElEKQorCQkJZXZlbnQgPSBFVlRfUE9MTDsKKworCQlz d2l0Y2ggKGkyY19pbXgtPnN0YXRlKSB7CisJCQljYXNlIFNUQVRFX0lETEU6CisJCQkJaWRs ZV9ldnRfaGFuZGxlcihpMmNfaW14LCBldmVudCk7CisJCQkJYnJlYWs7CisJCQljYXNlIFNU QVRFX1NMQVZFOgorCQkJCXNsYXZlX2V2dF9oYW5kbGVyKGkyY19pbXgsIGV2ZW50KTsKKwkJ CQlicmVhazsKKwkJCWNhc2UgU1RBVEVfU1A6CisJCQkJc3BfZXZ0X2hhbmRsZXIoaTJjX2lt eCwgZXZlbnQpOworCQkJCWJyZWFrOworCQkJY2FzZSBTVEFURV9NQVNURVI6CisJCQkJbWFz dGVyX2V2dF9oYW5kbGVyKGkyY19pbXgsIGV2ZW50KTsKKwkJCQlicmVhazsKKwkJCWRlZmF1 bHQ6CisJCQkJYnJlYWs7CisKKwkJfQorCisJfSB3aGlsZSAoa3RocmVhZF9zaG91bGRfc3Rv cCgpID09IDApOworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBpMmNf aW14X2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CiAJc3RydWN0IGlteF9pMmNfc3Ry dWN0ICppMmNfaW14ID0gZGV2X2lkOwotCXVuc2lnbmVkIGludCB0ZW1wOworCXVuc2lnbmVk IGludCBzdGF0dXMsIGN0bDsKKworCXN0YXR1cyA9IGlteF9pMmNfcmVhZF9yZWcoaTJjX2lt eCwgSU1YX0kyQ19JMlNSKTsKKwljdGwgPSBpbXhfaTJjX3JlYWRfcmVnKGkyY19pbXgsIElN WF9JMkNfSTJDUik7CisJaWYgKHN0YXR1cyAmIEkyU1JfSUlGKSB7CisJCWkyY19pbXhfY2xl YXJfaXNyX2JpdChpMmNfaW14LCBzdGF0dXMpOworCisJCWlmIChjdGwgJiBJMkNSX01TVEEp IHsKKwkJCWRldl9kYmcoJmkyY19pbXgtPmFkYXB0ZXIuZGV2LCAibWFzdGVyIGludGVycnVw dCIpOworCQkJaTJjX2lteC0+bWFzdGVyX2ludGVycnVwdCA9IDE7CisJCQl3YWtlX3VwKCZp MmNfaW14LT5xdWV1ZSk7CisJCX0gZWxzZSAJaWYgKHN0YXR1cyAmIEkyU1JfSUFMKSB7CisJ CQlldnRfcHV0KCZpMmNfaW14LT5ldmVudHMsIEVWVF9BTCApOworCQl9IGVsc2UgIHsKKwkJ CWRldl9kYmcoJmkyY19pbXgtPmFkYXB0ZXIuZGV2LCAic2xhdmUgaW50ZXJydXB0Iik7CisJ CQlldnRfcHV0KCZpMmNfaW14LT5ldmVudHMsIEVWVF9TSSApOworCQkJd2FrZV91cCgmaTJj X2lteC0+c3RhdGVfcXVldWUpOworCQl9CiAKLQl0ZW1wID0gaW14X2kyY19yZWFkX3JlZyhp MmNfaW14LCBJTVhfSTJDX0kyU1IpOwotCWlmICh0ZW1wICYgSTJTUl9JSUYpIHsKLQkJLyog c2F2ZSBzdGF0dXMgcmVnaXN0ZXIgKi8KLQkJaTJjX2lteC0+aTJjc3IgPSB0ZW1wOwotCQl0 ZW1wICY9IH5JMlNSX0lJRjsKLQkJdGVtcCB8PSAoaTJjX2lteC0+aHdkYXRhLT5pMnNyX2Ns cl9vcGNvZGUgJiBJMlNSX0lJRik7Ci0JCWlteF9pMmNfd3JpdGVfcmVnKHRlbXAsIGkyY19p bXgsIElNWF9JMkNfSTJTUik7Ci0JCXdha2VfdXAoJmkyY19pbXgtPnF1ZXVlKTsKIAkJcmV0 dXJuIElSUV9IQU5ETEVEOwogCX0KIApAQCAtODk1LDcgKzE0NDQsMTMgQEAgc3RhdGljIGlu dCBpMmNfaW14X3hmZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLAogCiAJLyogU3Rh cnQgSTJDIHRyYW5zZmVyICovCiAJcmVzdWx0ID0gaTJjX2lteF9zdGFydChpMmNfaW14KTsK LQlpZiAocmVzdWx0KSB7CisJaWYgKHJlc3VsdCA9PSAtRVRJTUVET1VUKSB7CisJCS8qCisJ CQlSZWNvdmVyeSBpcyBub3Qgc3RhcnRlZCBvbiBhcmJpdHJhdGlvbiBsb3N0LCBzaW5jZSBp dCBjYW4gYnJlYWsKKwkJCXNsYXZlIHRyYW5zZmVyLiBCdXQgaW4gY2FzZSBvZiAiYnVzIHRp bWVvdXQiIHJlY292ZXJ5IGl0CisJCQljb3VsZCBiZSB1c2VmdWwgdG8gYnJpbmcgY29udHJv bGxlciBvdXQgb2YgInN0cmFuZ2Ugc3RhdGUiLgorCQkqLworCQlkZXZfZGJnKCZpMmNfaW14 LT5hZGFwdGVyLmRldiwgImNhbGwgYnVzIHJlY292ZXJ5Iik7CiAJCWlmIChpMmNfaW14LT5h ZGFwdGVyLmJ1c19yZWNvdmVyeV9pbmZvKSB7CiAJCQlpMmNfcmVjb3Zlcl9idXMoJmkyY19p bXgtPmFkYXB0ZXIpOwogCQkJcmVzdWx0ID0gaTJjX2lteF9zdGFydChpMmNfaW14KTsKQEAg LTEwMjQsNiArMTU3OSw2MCBAQCBzdGF0aWMgaW50IGkyY19pbXhfaW5pdF9yZWNvdmVyeV9p bmZvKHN0cnVjdCBpbXhfaTJjX3N0cnVjdCAqaTJjX2lteCwKIAlyaW5mby0+dW5wcmVwYXJl X3JlY292ZXJ5ID0gaTJjX2lteF91bnByZXBhcmVfcmVjb3Zlcnk7CiAJcmluZm8tPnJlY292 ZXJfYnVzID0gaTJjX2dlbmVyaWNfZ3Bpb19yZWNvdmVyeTsKIAlpMmNfaW14LT5hZGFwdGVy LmJ1c19yZWNvdmVyeV9pbmZvID0gcmluZm87Cit9CisKK3N0YXRpYyBpbnQgaTJjX2lteF9y ZWdfc2xhdmUoc3RydWN0IGkyY19jbGllbnQgKnNsYXZlKQoreworCXN0cnVjdCBpbXhfaTJj X3N0cnVjdCAqaTJjX2lteCA9IGkyY19nZXRfYWRhcGRhdGEoc2xhdmUtPmFkYXB0ZXIpOwor CWludCByZXN1bHQ7CisJc3RydWN0IHNjaGVkX3BhcmFtIHBhcmFtID0geyAuc2NoZWRfcHJp b3JpdHkgPSBNQVhfUlRfUFJJTyAtIDEgfTsKKworCWRldl9kYmcoJmkyY19pbXgtPmFkYXB0 ZXIuZGV2LCAiPCVzPlxuIiwgX19mdW5jX18pOworCisJaWYgKGkyY19pbXgtPnNsYXZlKQor CQlyZXR1cm4gLUVCVVNZOworCisJaWYgKHNsYXZlLT5mbGFncyAmIEkyQ19DTElFTlRfVEVO KQorCQlyZXR1cm4gLUVBRk5PU1VQUE9SVDsKKworCWkyY19pbXgtPnNsYXZlID0gc2xhdmU7 CisKKwkvKiBTZXQgdGhlIFNsYXZlIGFkZHJlc3MgKi8KKwlpbXhfaTJjX3dyaXRlX3JlZygo aTJjX2lteC0+c2xhdmUtPmFkZHIgPDwgMSksIGkyY19pbXgsIElNWF9JMkNfSUFEUik7CisK KwlyZXN1bHQgPSBpMmNfaW14X2h3X3N0YXJ0KGkyY19pbXgpOworCWlmIChyZXN1bHQgIT0g MCkKKwkJcmV0dXJuIHJlc3VsdDsKKworCWkyY19pbXgtPnNsYXZlX3Rhc2sgPSBrdGhyZWFk X3J1bihpMmNfaW14X3NsYXZlX3RocmVhZGZuLAorCQkodm9pZCAqKSBpMmNfaW14LCAiaTJj LXNsYXZlLSVzIiwgaTJjX2lteC0+YWRhcHRlci5uYW1lKTsKKworCXNjaGVkX3NldHNjaGVk dWxlcihpMmNfaW14LT5zbGF2ZV90YXNrLCBTQ0hFRF9GSUZPLCAmcGFyYW0pOworCisJaWYg KElTX0VSUihpMmNfaW14LT5zbGF2ZV90YXNrKSkKKwkJcmV0dXJuIFBUUl9FUlIoaTJjX2lt eC0+c2xhdmVfdGFzayk7CisKKwlpMmNfaW14X3NsYXZlX2luaXQoaTJjX2lteCk7CisKKwly ZXR1cm4gMDsKKworfQorCitzdGF0aWMgaW50IGkyY19pbXhfdW5yZWdfc2xhdmUoc3RydWN0 IGkyY19jbGllbnQgKnNsYXZlKQoreworCXN0cnVjdCBpbXhfaTJjX3N0cnVjdCAqaTJjX2lt eCA9IGkyY19nZXRfYWRhcGRhdGEoc2xhdmUtPmFkYXB0ZXIpOworCisJZGV2X2RiZygmaTJj X2lteC0+YWRhcHRlci5kZXYsICI8JXM+XG4iLCBfX2Z1bmNfXyk7CisJaWYgKGkyY19pbXgt PnNsYXZlX3Rhc2sgIT0gTlVMTCkKKwkJa3RocmVhZF9zdG9wKGkyY19pbXgtPnNsYXZlX3Rh c2spOworCisJd2FrZV91cCgmaTJjX2lteC0+c3RhdGVfcXVldWUpOworCisJaTJjX2lteC0+ c2xhdmVfdGFzayA9IE5VTEw7CisKKwlpMmNfaW14LT5zbGF2ZSA9IE5VTEw7CisKKwlpMmNf aW14X3N0b3AoaTJjX2lteCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEwMzcsNiArMTY0Niw4 IEBAIHN0YXRpYyB1MzIgaTJjX2lteF9mdW5jKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRl cikKIHN0YXRpYyBzdHJ1Y3QgaTJjX2FsZ29yaXRobSBpMmNfaW14X2FsZ28gPSB7CiAJLm1h c3Rlcl94ZmVyCT0gaTJjX2lteF94ZmVyLAogCS5mdW5jdGlvbmFsaXR5CT0gaTJjX2lteF9m dW5jLAorCS5yZWdfc2xhdmUJCT0gaTJjX2lteF9yZWdfc2xhdmUsCisJLnVucmVnX3NsYXZl CT0gaTJjX2lteF91bnJlZ19zbGF2ZSwKIH07CiAKIHN0YXRpYyBpbnQgaTJjX2lteF9wcm9i ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQpAQCAtMTA5Niw2ICsxNzA3LDEyIEBA IHN0YXRpYyBpbnQgaTJjX2lteF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2 KQogCQlyZXR1cm4gcmV0OwogCX0KIAorCWkyY19pbXgtPnBpbmN0cmwgPSBkZXZtX3BpbmN0 cmxfZ2V0KCZwZGV2LT5kZXYpOworCWlmIChJU19FUlIoaTJjX2lteC0+cGluY3RybCkpIHsK KwkJcmV0ID0gUFRSX0VSUihpMmNfaW14LT5waW5jdHJsKTsKKwkJZ290byBjbGtfZGlzYWJs ZTsKKwl9CisKIAkvKiBSZXF1ZXN0IElSUSAqLwogCXJldCA9IGRldm1fcmVxdWVzdF9pcnEo JnBkZXYtPmRldiwgaXJxLCBpMmNfaW14X2lzciwgMCwKIAkJCQlwZGV2LT5uYW1lLCBpMmNf aW14KTsKQEAgLTExMDYsNiArMTcyMyw3IEBAIHN0YXRpYyBpbnQgaTJjX2lteF9wcm9iZShz dHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogCiAJLyogSW5pdCBxdWV1ZSAqLwogCWlu aXRfd2FpdHF1ZXVlX2hlYWQoJmkyY19pbXgtPnF1ZXVlKTsKKwlpbml0X3dhaXRxdWV1ZV9o ZWFkKCZpMmNfaW14LT5zdGF0ZV9xdWV1ZSk7CiAKIAkvKiBTZXQgdXAgYWRhcHRlciBkYXRh ICovCiAJaTJjX3NldF9hZGFwZGF0YSgmaTJjX2lteC0+YWRhcHRlciwgaTJjX2lteCk7CkBA IC0xMTU3LDYgKzE3NzUsOSBAQCBzdGF0aWMgaW50IGkyY19pbXhfcHJvYmUoc3RydWN0IHBs YXRmb3JtX2RldmljZSAqcGRldikKIAkvKiBJbml0IERNQSBjb25maWcgaWYgc3VwcG9ydGVk ICovCiAJaTJjX2lteF9kbWFfcmVxdWVzdChpMmNfaW14LCBwaHlfYWRkcik7CiAKKwkvKiBp bml0IHNsYXZlX3N0YXRlIHRvIElETEUgKi8KKwlpMmNfaW14LT5zdGF0ZSA9IFNUQVRFX0lE TEU7CisJZXZ0X2luaXQoJmkyY19pbXgtPmV2ZW50cyk7CiAJcmV0dXJuIDA7ICAgLyogUmV0 dXJuIE9LICovCiAKIHJwbV9kaXNhYmxlOgpAQCAtMTE4Myw2ICsxODA0LDkgQEAgc3RhdGlj IGludCBpMmNfaW14X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogCWRl dl9kYmcoJmkyY19pbXgtPmFkYXB0ZXIuZGV2LCAiYWRhcHRlciByZW1vdmVkXG4iKTsKIAlp MmNfZGVsX2FkYXB0ZXIoJmkyY19pbXgtPmFkYXB0ZXIpOwogCisJaWYgKGkyY19pbXgtPnNs YXZlX3Rhc2sgIT0gTlVMTCkKKwkJa3RocmVhZF9zdG9wKGkyY19pbXgtPnNsYXZlX3Rhc2sp OworCiAJaWYgKGkyY19pbXgtPmRtYSkKIAkJaTJjX2lteF9kbWFfZnJlZShpMmNfaW14KTsK IAotLSAKMi4xLjQKCg== --------------AE117607ABA56B006F081594--