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: [4/7] dmaengine: stm32-dma: Improve memory burst management From: Joel Fernandes Message-Id: <20181009054752.145978-5-joel@joelfernandes.org> Date: Mon, 8 Oct 2018 22:47:49 -0700 To: stable@vger.kernel.org Cc: Pierre Yves MORDRET , M'boumba Cedric Madianga , Vinod Koul , gregkh@linuxfoundation.org, Alexandre Torgue , Dan Williams , dmaengine@vger.kernel.org, "Joel Fernandes (Google)" , "moderated list:ARM/STM32 ARCHITECTURE" , linux-kernel@vger.kernel.org, Maxime Coquelin List-ID: RnJvbTogUGllcnJlIFl2ZXMgTU9SRFJFVCA8cGllcnJlLXl2ZXMubW9yZHJldEBzdC5jb20+CgpU aGlzIHBhdGNoIGltcHJvdmVzIG1lbW9yeSBidXJzdCBjYXBhYmlsaXR5IHVzaW5nIGJlc3QgYnVy c3Qgc2l6ZQphY2NvcmRpbmcgdG8gdHJhbnNmZXJyZWQgYnVmZmVyIHNpemUgZnJvbS90byBtZW1v cnkuCgo+RnJvbSBub3cgb24sIG1lbW9yeSBidXJzdCBpcyBub3QgbmVjZXNzYXJpbHkgc2FtZSBh cyB3aXRoIHBlcmlwaGVyYWwKYnVyc3Qgb25lIGFuZCBmaWZvIHRocmVzaG9sZCBpcyBkaXJlY3Rs eSBtYW5hZ2VkIGJ5IHRoaXMgZHJpdmVyIGluIG9yZGVyCnRvIGZpdCB3aXRoIGNvbXB1dGVkIG1l bW9yeSBidXJzdC4KClNpZ25lZC1vZmYtYnk6IE0nYm91bWJhIENlZHJpYyBNYWRpYW5nYSA8Y2Vk cmljLm1hZGlhbmdhQGdtYWlsLmNvbT4KU2lnbmVkLW9mZi1ieTogUGllcnJlLVl2ZXMgTU9SRFJF VCA8cGllcnJlLXl2ZXMubW9yZHJldEBzdC5jb20+ClNpZ25lZC1vZmYtYnk6IFZpbm9kIEtvdWwg PHZpbm9kLmtvdWxAaW50ZWwuY29tPgotLS0KIGRyaXZlcnMvZG1hL3N0bTMyLWRtYS5jIHwgMjA0 ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0KIDEgZmlsZSBjaGFuZ2Vk LCAxNzUgaW5zZXJ0aW9ucygrKSwgMjkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9kbWEvc3RtMzItZG1hLmMgYi9kcml2ZXJzL2RtYS9zdG0zMi1kbWEuYwppbmRleCBiNjRlMTRh ODNkZWMuLjIxYWQzNTlhNWE1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvc3RtMzItZG1hLmMK KysrIGIvZHJpdmVycy9kbWEvc3RtMzItZG1hLmMKQEAgLTUsNiArNSw3IEBACiAgKgogICogQ29w eXJpZ2h0IChDKSBNJ2JvdW1iYSBDZWRyaWMgTWFkaWFuZ2EgMjAxNQogICogQXV0aG9yOiBNJ2Jv dW1iYSBDZWRyaWMgTWFkaWFuZ2EgPGNlZHJpYy5tYWRpYW5nYUBnbWFpbC5jb20+CisgKiAgICAg ICAgIFBpZXJyZS1ZdmVzIE1vcmRyZXQgPHBpZXJyZS15dmVzLm1vcmRyZXRAc3QuY29tPgogICoK ICAqIExpY2Vuc2UgdGVybXM6ICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSwgdmVy c2lvbiAyCiAgKi8KQEAgLTExNSw2ICsxMTYsOCBAQAogI2RlZmluZSBTVE0zMl9ETUFfTUFYX0NI QU5ORUxTCQkweDA4CiAjZGVmaW5lIFNUTTMyX0RNQV9NQVhfUkVRVUVTVF9JRAkweDA4CiAjZGVm aW5lIFNUTTMyX0RNQV9NQVhfREFUQV9QQVJBTQkweDAzCisjZGVmaW5lIFNUTTMyX0RNQV9GSUZP X1NJWkUJCTE2CS8qIEZJRk8gaXMgMTYgYnl0ZXMgKi8KKyNkZWZpbmUgU1RNMzJfRE1BX01JTl9C VVJTVAkJNAogI2RlZmluZSBTVE0zMl9ETUFfTUFYX0JVUlNUCQkxNgogCiAvKiBETUEgRmVhdHVy ZXMgKi8KQEAgLTE4NCw2ICsxODcsOCBAQCBzdHJ1Y3Qgc3RtMzJfZG1hX2NoYW4gewogCXN0cnVj dCBkbWFfc2xhdmVfY29uZmlnCWRtYV9zY29uZmlnOwogCXN0cnVjdCBzdG0zMl9kbWFfY2hhbl9y ZWcgY2hhbl9yZWc7CiAJdTMyIHRocmVzaG9sZDsKKwl1MzIgbWVtX2J1cnN0OworCXUzMiBtZW1f d2lkdGg7CiB9OwogCiBzdHJ1Y3Qgc3RtMzJfZG1hX2RldmljZSB7CkBAIC0yNDgsNiArMjUzLDg1 IEBAIHN0YXRpYyBpbnQgc3RtMzJfZG1hX2dldF93aWR0aChzdHJ1Y3Qgc3RtMzJfZG1hX2NoYW4g KmNoYW4sCiAJfQogfQogCitzdGF0aWMgZW51bSBkbWFfc2xhdmVfYnVzd2lkdGggc3RtMzJfZG1h X2dldF9tYXhfd2lkdGgodTMyIGJ1Zl9sZW4sCisJCQkJCQkgICAgICAgdTMyIHRocmVzaG9sZCkK K3sKKwllbnVtIGRtYV9zbGF2ZV9idXN3aWR0aCBtYXhfd2lkdGg7CisKKwlpZiAodGhyZXNob2xk ID09IFNUTTMyX0RNQV9GSUZPX1RIUkVTSE9MRF9GVUxMKQorCQltYXhfd2lkdGggPSBETUFfU0xB VkVfQlVTV0lEVEhfNF9CWVRFUzsKKwllbHNlCisJCW1heF93aWR0aCA9IERNQV9TTEFWRV9CVVNX SURUSF8yX0JZVEVTOworCisJd2hpbGUgKChidWZfbGVuIDwgbWF4X3dpZHRoICB8fCBidWZfbGVu ICUgbWF4X3dpZHRoKSAmJgorCSAgICAgICBtYXhfd2lkdGggPiBETUFfU0xBVkVfQlVTV0lEVEhf MV9CWVRFKQorCQltYXhfd2lkdGggPSBtYXhfd2lkdGggPj4gMTsKKworCXJldHVybiBtYXhfd2lk dGg7Cit9CisKK3N0YXRpYyBib29sIHN0bTMyX2RtYV9maWZvX3RocmVzaG9sZF9pc19hbGxvd2Vk KHUzMiBidXJzdCwgdTMyIHRocmVzaG9sZCwKKwkJCQkJCWVudW0gZG1hX3NsYXZlX2J1c3dpZHRo IHdpZHRoKQoreworCXUzMiByZW1haW5pbmc7CisKKwlpZiAod2lkdGggIT0gRE1BX1NMQVZFX0JV U1dJRFRIX1VOREVGSU5FRCkgeworCQlpZiAoYnVyc3QgIT0gMCkgeworCQkJLyoKKwkJCSAqIElm IG51bWJlciBvZiBiZWF0cyBmaXQgaW4gc2V2ZXJhbCB3aG9sZSBidXJzdHMKKwkJCSAqIHRoaXMg Y29uZmlndXJhdGlvbiBpcyBhbGxvd2VkLgorCQkJICovCisJCQlyZW1haW5pbmcgPSAoKFNUTTMy X0RNQV9GSUZPX1NJWkUgLyB3aWR0aCkgKgorCQkJCSAgICAgKHRocmVzaG9sZCArIDEpIC8gNCkg JSBidXJzdDsKKworCQkJaWYgKHJlbWFpbmluZyA9PSAwKQorCQkJCXJldHVybiB0cnVlOworCQl9 IGVsc2UgeworCQkJcmV0dXJuIHRydWU7CisJCX0KKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisK K3N0YXRpYyBib29sIHN0bTMyX2RtYV9pc19idXJzdF9wb3NzaWJsZSh1MzIgYnVmX2xlbiwgdTMy IHRocmVzaG9sZCkKK3sKKwlzd2l0Y2ggKHRocmVzaG9sZCkgeworCWNhc2UgU1RNMzJfRE1BX0ZJ Rk9fVEhSRVNIT0xEX0ZVTEw6CisJCWlmIChidWZfbGVuID49IFNUTTMyX0RNQV9NQVhfQlVSU1Qp CisJCQlyZXR1cm4gdHJ1ZTsKKwkJZWxzZQorCQkJcmV0dXJuIGZhbHNlOworCWNhc2UgU1RNMzJf RE1BX0ZJRk9fVEhSRVNIT0xEX0hBTEZGVUxMOgorCQlpZiAoYnVmX2xlbiA+PSBTVE0zMl9ETUFf TUFYX0JVUlNUIC8gMikKKwkJCXJldHVybiB0cnVlOworCQllbHNlCisJCQlyZXR1cm4gZmFsc2U7 CisJZGVmYXVsdDoKKwkJcmV0dXJuIGZhbHNlOworCX0KK30KKworc3RhdGljIHUzMiBzdG0zMl9k bWFfZ2V0X2Jlc3RfYnVyc3QodTMyIGJ1Zl9sZW4sIHUzMiBtYXhfYnVyc3QsIHUzMiB0aHJlc2hv bGQsCisJCQkJICAgIGVudW0gZG1hX3NsYXZlX2J1c3dpZHRoIHdpZHRoKQoreworCXUzMiBiZXN0 X2J1cnN0ID0gbWF4X2J1cnN0OworCisJaWYgKGJlc3RfYnVyc3QgPT0gMSB8fCAhc3RtMzJfZG1h X2lzX2J1cnN0X3Bvc3NpYmxlKGJ1Zl9sZW4sIHRocmVzaG9sZCkpCisJCXJldHVybiAwOworCisJ d2hpbGUgKChidWZfbGVuIDwgYmVzdF9idXJzdCAqIHdpZHRoICYmIGJlc3RfYnVyc3QgPiAxKSB8 fAorCSAgICAgICAhc3RtMzJfZG1hX2ZpZm9fdGhyZXNob2xkX2lzX2FsbG93ZWQoYmVzdF9idXJz dCwgdGhyZXNob2xkLAorCQkJCQkJICAgIHdpZHRoKSkgeworCQlpZiAoYmVzdF9idXJzdCA+IFNU TTMyX0RNQV9NSU5fQlVSU1QpCisJCQliZXN0X2J1cnN0ID0gYmVzdF9idXJzdCA+PiAxOworCQll bHNlCisJCQliZXN0X2J1cnN0ID0gMDsKKwl9CisKKwlyZXR1cm4gYmVzdF9idXJzdDsKK30KKwog c3RhdGljIGludCBzdG0zMl9kbWFfZ2V0X2J1cnN0KHN0cnVjdCBzdG0zMl9kbWFfY2hhbiAqY2hh biwgdTMyIG1heGJ1cnN0KQogewogCXN3aXRjaCAobWF4YnVyc3QpIHsKQEAgLTI2NywxMiArMzUx LDEyIEBAIHN0YXRpYyBpbnQgc3RtMzJfZG1hX2dldF9idXJzdChzdHJ1Y3Qgc3RtMzJfZG1hX2No YW4gKmNoYW4sIHUzMiBtYXhidXJzdCkKIH0KIAogc3RhdGljIHZvaWQgc3RtMzJfZG1hX3NldF9m aWZvX2NvbmZpZyhzdHJ1Y3Qgc3RtMzJfZG1hX2NoYW4gKmNoYW4sCi0JCQkJICAgICAgdTMyIHNy Y19tYXhidXJzdCwgdTMyIGRzdF9tYXhidXJzdCkKKwkJCQkgICAgICB1MzIgc3JjX2J1cnN0LCB1 MzIgZHN0X2J1cnN0KQogewogCWNoYW4tPmNoYW5fcmVnLmRtYV9zZmNyICY9IH5TVE0zMl9ETUFf U0ZDUl9NQVNLOwogCWNoYW4tPmNoYW5fcmVnLmRtYV9zY3IgJj0gflNUTTMyX0RNQV9TQ1JfRE1F SUU7CiAKLQlpZiAoKCFzcmNfbWF4YnVyc3QpICYmICghZHN0X21heGJ1cnN0KSkgeworCWlmICgh c3JjX2J1cnN0ICYmICFkc3RfYnVyc3QpIHsKIAkJLyogVXNpbmcgZGlyZWN0IG1vZGUgKi8KIAkJ Y2hhbi0+Y2hhbl9yZWcuZG1hX3NjciB8PSBTVE0zMl9ETUFfU0NSX0RNRUlFOwogCX0gZWxzZSB7 CkBAIC01ODksMzcgKzY3Myw1MiBAQCBzdGF0aWMgdm9pZCBzdG0zMl9kbWFfaXNzdWVfcGVuZGlu ZyhzdHJ1Y3QgZG1hX2NoYW4gKmMpCiAKIHN0YXRpYyBpbnQgc3RtMzJfZG1hX3NldF94ZmVyX3Bh cmFtKHN0cnVjdCBzdG0zMl9kbWFfY2hhbiAqY2hhbiwKIAkJCQkgICAgZW51bSBkbWFfdHJhbnNm ZXJfZGlyZWN0aW9uIGRpcmVjdGlvbiwKLQkJCQkgICAgZW51bSBkbWFfc2xhdmVfYnVzd2lkdGgg KmJ1c3dpZHRoKQorCQkJCSAgICBlbnVtIGRtYV9zbGF2ZV9idXN3aWR0aCAqYnVzd2lkdGgsCisJ CQkJICAgIHUzMiBidWZfbGVuKQogewogCWVudW0gZG1hX3NsYXZlX2J1c3dpZHRoIHNyY19hZGRy X3dpZHRoLCBkc3RfYWRkcl93aWR0aDsKIAlpbnQgc3JjX2J1c193aWR0aCwgZHN0X2J1c193aWR0 aDsKIAlpbnQgc3JjX2J1cnN0X3NpemUsIGRzdF9idXJzdF9zaXplOwotCXUzMiBzcmNfbWF4YnVy c3QsIGRzdF9tYXhidXJzdDsKLQl1MzIgZG1hX3NjciA9IDA7CisJdTMyIHNyY19tYXhidXJzdCwg ZHN0X21heGJ1cnN0LCBzcmNfYmVzdF9idXJzdCwgZHN0X2Jlc3RfYnVyc3Q7CisJdTMyIGRtYV9z Y3IsIHRocmVzaG9sZDsKIAogCXNyY19hZGRyX3dpZHRoID0gY2hhbi0+ZG1hX3Njb25maWcuc3Jj X2FkZHJfd2lkdGg7CiAJZHN0X2FkZHJfd2lkdGggPSBjaGFuLT5kbWFfc2NvbmZpZy5kc3RfYWRk cl93aWR0aDsKIAlzcmNfbWF4YnVyc3QgPSBjaGFuLT5kbWFfc2NvbmZpZy5zcmNfbWF4YnVyc3Q7 CiAJZHN0X21heGJ1cnN0ID0gY2hhbi0+ZG1hX3Njb25maWcuZHN0X21heGJ1cnN0OworCXRocmVz aG9sZCA9IGNoYW4tPnRocmVzaG9sZDsKIAogCXN3aXRjaCAoZGlyZWN0aW9uKSB7CiAJY2FzZSBE TUFfTUVNX1RPX0RFVjoKKwkJLyogU2V0IGRldmljZSBkYXRhIHNpemUgKi8KIAkJZHN0X2J1c193 aWR0aCA9IHN0bTMyX2RtYV9nZXRfd2lkdGgoY2hhbiwgZHN0X2FkZHJfd2lkdGgpOwogCQlpZiAo ZHN0X2J1c193aWR0aCA8IDApCiAJCQlyZXR1cm4gZHN0X2J1c193aWR0aDsKIAotCQlkc3RfYnVy c3Rfc2l6ZSA9IHN0bTMyX2RtYV9nZXRfYnVyc3QoY2hhbiwgZHN0X21heGJ1cnN0KTsKKwkJLyog U2V0IGRldmljZSBidXJzdCBzaXplICovCisJCWRzdF9iZXN0X2J1cnN0ID0gc3RtMzJfZG1hX2dl dF9iZXN0X2J1cnN0KGJ1Zl9sZW4sCisJCQkJCQkJICBkc3RfbWF4YnVyc3QsCisJCQkJCQkJICB0 aHJlc2hvbGQsCisJCQkJCQkJICBkc3RfYWRkcl93aWR0aCk7CisKKwkJZHN0X2J1cnN0X3NpemUg PSBzdG0zMl9kbWFfZ2V0X2J1cnN0KGNoYW4sIGRzdF9iZXN0X2J1cnN0KTsKIAkJaWYgKGRzdF9i dXJzdF9zaXplIDwgMCkKIAkJCXJldHVybiBkc3RfYnVyc3Rfc2l6ZTsKIAotCQlpZiAoIXNyY19h ZGRyX3dpZHRoKQotCQkJc3JjX2FkZHJfd2lkdGggPSBkc3RfYWRkcl93aWR0aDsKLQorCQkvKiBT ZXQgbWVtb3J5IGRhdGEgc2l6ZSAqLworCQlzcmNfYWRkcl93aWR0aCA9IHN0bTMyX2RtYV9nZXRf bWF4X3dpZHRoKGJ1Zl9sZW4sIHRocmVzaG9sZCk7CisJCWNoYW4tPm1lbV93aWR0aCA9IHNyY19h ZGRyX3dpZHRoOwogCQlzcmNfYnVzX3dpZHRoID0gc3RtMzJfZG1hX2dldF93aWR0aChjaGFuLCBz cmNfYWRkcl93aWR0aCk7CiAJCWlmIChzcmNfYnVzX3dpZHRoIDwgMCkKIAkJCXJldHVybiBzcmNf YnVzX3dpZHRoOwogCi0JCXNyY19idXJzdF9zaXplID0gc3RtMzJfZG1hX2dldF9idXJzdChjaGFu LCBzcmNfbWF4YnVyc3QpOworCQkvKiBTZXQgbWVtb3J5IGJ1cnN0IHNpemUgKi8KKwkJc3JjX21h eGJ1cnN0ID0gU1RNMzJfRE1BX01BWF9CVVJTVDsKKwkJc3JjX2Jlc3RfYnVyc3QgPSBzdG0zMl9k bWFfZ2V0X2Jlc3RfYnVyc3QoYnVmX2xlbiwKKwkJCQkJCQkgIHNyY19tYXhidXJzdCwKKwkJCQkJ CQkgIHRocmVzaG9sZCwKKwkJCQkJCQkgIHNyY19hZGRyX3dpZHRoKTsKKwkJc3JjX2J1cnN0X3Np emUgPSBzdG0zMl9kbWFfZ2V0X2J1cnN0KGNoYW4sIHNyY19iZXN0X2J1cnN0KTsKIAkJaWYgKHNy Y19idXJzdF9zaXplIDwgMCkKIAkJCXJldHVybiBzcmNfYnVyc3Rfc2l6ZTsKIApAQCAtNjI5LDI3 ICs3MjgsNDYgQEAgc3RhdGljIGludCBzdG0zMl9kbWFfc2V0X3hmZXJfcGFyYW0oc3RydWN0IHN0 bTMyX2RtYV9jaGFuICpjaGFuLAogCQkJU1RNMzJfRE1BX1NDUl9QQlVSU1QoZHN0X2J1cnN0X3Np emUpIHwKIAkJCVNUTTMyX0RNQV9TQ1JfTUJVUlNUKHNyY19idXJzdF9zaXplKTsKIAorCQkvKiBT ZXQgRklGTyB0aHJlc2hvbGQgKi8KKwkJY2hhbi0+Y2hhbl9yZWcuZG1hX3NmY3IgJj0gflNUTTMy X0RNQV9TRkNSX0ZUSF9NQVNLOworCQljaGFuLT5jaGFuX3JlZy5kbWFfc2ZjciB8PSBTVE0zMl9E TUFfU0ZDUl9GVEgodGhyZXNob2xkKTsKKworCQkvKiBTZXQgcGVyaXBoZXJhbCBhZGRyZXNzICov CiAJCWNoYW4tPmNoYW5fcmVnLmRtYV9zcGFyID0gY2hhbi0+ZG1hX3Njb25maWcuZHN0X2FkZHI7 CiAJCSpidXN3aWR0aCA9IGRzdF9hZGRyX3dpZHRoOwogCQlicmVhazsKIAogCWNhc2UgRE1BX0RF Vl9UT19NRU06CisJCS8qIFNldCBkZXZpY2UgZGF0YSBzaXplICovCiAJCXNyY19idXNfd2lkdGgg PSBzdG0zMl9kbWFfZ2V0X3dpZHRoKGNoYW4sIHNyY19hZGRyX3dpZHRoKTsKIAkJaWYgKHNyY19i dXNfd2lkdGggPCAwKQogCQkJcmV0dXJuIHNyY19idXNfd2lkdGg7CiAKLQkJc3JjX2J1cnN0X3Np emUgPSBzdG0zMl9kbWFfZ2V0X2J1cnN0KGNoYW4sIHNyY19tYXhidXJzdCk7CisJCS8qIFNldCBk ZXZpY2UgYnVyc3Qgc2l6ZSAqLworCQlzcmNfYmVzdF9idXJzdCA9IHN0bTMyX2RtYV9nZXRfYmVz dF9idXJzdChidWZfbGVuLAorCQkJCQkJCSAgc3JjX21heGJ1cnN0LAorCQkJCQkJCSAgdGhyZXNo b2xkLAorCQkJCQkJCSAgc3JjX2FkZHJfd2lkdGgpOworCQljaGFuLT5tZW1fYnVyc3QgPSBzcmNf YmVzdF9idXJzdDsKKwkJc3JjX2J1cnN0X3NpemUgPSBzdG0zMl9kbWFfZ2V0X2J1cnN0KGNoYW4s IHNyY19iZXN0X2J1cnN0KTsKIAkJaWYgKHNyY19idXJzdF9zaXplIDwgMCkKIAkJCXJldHVybiBz cmNfYnVyc3Rfc2l6ZTsKIAotCQlpZiAoIWRzdF9hZGRyX3dpZHRoKQotCQkJZHN0X2FkZHJfd2lk dGggPSBzcmNfYWRkcl93aWR0aDsKLQorCQkvKiBTZXQgbWVtb3J5IGRhdGEgc2l6ZSAqLworCQlk c3RfYWRkcl93aWR0aCA9IHN0bTMyX2RtYV9nZXRfbWF4X3dpZHRoKGJ1Zl9sZW4sIHRocmVzaG9s ZCk7CisJCWNoYW4tPm1lbV93aWR0aCA9IGRzdF9hZGRyX3dpZHRoOwogCQlkc3RfYnVzX3dpZHRo ID0gc3RtMzJfZG1hX2dldF93aWR0aChjaGFuLCBkc3RfYWRkcl93aWR0aCk7CiAJCWlmIChkc3Rf YnVzX3dpZHRoIDwgMCkKIAkJCXJldHVybiBkc3RfYnVzX3dpZHRoOwogCi0JCWRzdF9idXJzdF9z aXplID0gc3RtMzJfZG1hX2dldF9idXJzdChjaGFuLCBkc3RfbWF4YnVyc3QpOworCQkvKiBTZXQg bWVtb3J5IGJ1cnN0IHNpemUgKi8KKwkJZHN0X21heGJ1cnN0ID0gU1RNMzJfRE1BX01BWF9CVVJT VDsKKwkJZHN0X2Jlc3RfYnVyc3QgPSBzdG0zMl9kbWFfZ2V0X2Jlc3RfYnVyc3QoYnVmX2xlbiwK KwkJCQkJCQkgIGRzdF9tYXhidXJzdCwKKwkJCQkJCQkgIHRocmVzaG9sZCwKKwkJCQkJCQkgIGRz dF9hZGRyX3dpZHRoKTsKKwkJY2hhbi0+bWVtX2J1cnN0ID0gZHN0X2Jlc3RfYnVyc3Q7CisJCWRz dF9idXJzdF9zaXplID0gc3RtMzJfZG1hX2dldF9idXJzdChjaGFuLCBkc3RfYmVzdF9idXJzdCk7 CiAJCWlmIChkc3RfYnVyc3Rfc2l6ZSA8IDApCiAJCQlyZXR1cm4gZHN0X2J1cnN0X3NpemU7CiAK QEAgLTY1OSw2ICs3NzcsMTEgQEAgc3RhdGljIGludCBzdG0zMl9kbWFfc2V0X3hmZXJfcGFyYW0o c3RydWN0IHN0bTMyX2RtYV9jaGFuICpjaGFuLAogCQkJU1RNMzJfRE1BX1NDUl9QQlVSU1Qoc3Jj X2J1cnN0X3NpemUpIHwKIAkJCVNUTTMyX0RNQV9TQ1JfTUJVUlNUKGRzdF9idXJzdF9zaXplKTsK IAorCQkvKiBTZXQgRklGTyB0aHJlc2hvbGQgKi8KKwkJY2hhbi0+Y2hhbl9yZWcuZG1hX3NmY3Ig Jj0gflNUTTMyX0RNQV9TRkNSX0ZUSF9NQVNLOworCQljaGFuLT5jaGFuX3JlZy5kbWFfc2ZjciB8 PSBTVE0zMl9ETUFfU0ZDUl9GVEgodGhyZXNob2xkKTsKKworCQkvKiBTZXQgcGVyaXBoZXJhbCBh ZGRyZXNzICovCiAJCWNoYW4tPmNoYW5fcmVnLmRtYV9zcGFyID0gY2hhbi0+ZG1hX3Njb25maWcu c3JjX2FkZHI7CiAJCSpidXN3aWR0aCA9IGNoYW4tPmRtYV9zY29uZmlnLnNyY19hZGRyX3dpZHRo OwogCQlicmVhazsKQEAgLTY2OCw4ICs3OTEsOSBAQCBzdGF0aWMgaW50IHN0bTMyX2RtYV9zZXRf eGZlcl9wYXJhbShzdHJ1Y3Qgc3RtMzJfZG1hX2NoYW4gKmNoYW4sCiAJCXJldHVybiAtRUlOVkFM OwogCX0KIAotCXN0bTMyX2RtYV9zZXRfZmlmb19jb25maWcoY2hhbiwgc3JjX21heGJ1cnN0LCBk c3RfbWF4YnVyc3QpOworCXN0bTMyX2RtYV9zZXRfZmlmb19jb25maWcoY2hhbiwgc3JjX2Jlc3Rf YnVyc3QsIGRzdF9iZXN0X2J1cnN0KTsKIAorCS8qIFNldCBETUEgY29udHJvbCByZWdpc3RlciAq LwogCWNoYW4tPmNoYW5fcmVnLmRtYV9zY3IgJj0gfihTVE0zMl9ETUFfU0NSX0RJUl9NQVNLIHwK IAkJCVNUTTMyX0RNQV9TQ1JfUFNJWkVfTUFTSyB8IFNUTTMyX0RNQV9TQ1JfTVNJWkVfTUFTSyB8 CiAJCQlTVE0zMl9ETUFfU0NSX1BCVVJTVF9NQVNLIHwgU1RNMzJfRE1BX1NDUl9NQlVSU1RfTUFT Syk7CkBAIC03MDksMTAgKzgzMyw2IEBAIHN0YXRpYyBzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2Ny aXB0b3IgKnN0bTMyX2RtYV9wcmVwX3NsYXZlX3NnKAogCWlmICghZGVzYykKIAkJcmV0dXJuIE5V TEw7CiAKLQlyZXQgPSBzdG0zMl9kbWFfc2V0X3hmZXJfcGFyYW0oY2hhbiwgZGlyZWN0aW9uLCAm YnVzd2lkdGgpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIGVycjsKLQogCS8qIFNldCBwZXJpcGhl cmFsIGZsb3cgY29udHJvbGxlciAqLwogCWlmIChjaGFuLT5kbWFfc2NvbmZpZy5kZXZpY2VfZmMp CiAJCWNoYW4tPmNoYW5fcmVnLmRtYV9zY3IgfD0gU1RNMzJfRE1BX1NDUl9QRkNUUkw7CkBAIC03 MjAsNiArODQwLDExIEBAIHN0YXRpYyBzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnN0 bTMyX2RtYV9wcmVwX3NsYXZlX3NnKAogCQljaGFuLT5jaGFuX3JlZy5kbWFfc2NyICY9IH5TVE0z Ml9ETUFfU0NSX1BGQ1RSTDsKIAogCWZvcl9lYWNoX3NnKHNnbCwgc2csIHNnX2xlbiwgaSkgewor CQlyZXQgPSBzdG0zMl9kbWFfc2V0X3hmZXJfcGFyYW0oY2hhbiwgZGlyZWN0aW9uLCAmYnVzd2lk dGgsCisJCQkJCSAgICAgICBzZ19kbWFfbGVuKHNnKSk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290 byBlcnI7CisKIAkJZGVzYy0+c2dfcmVxW2ldLmxlbiA9IHNnX2RtYV9sZW4oc2cpOwogCiAJCW5i X2RhdGFfaXRlbXMgPSBkZXNjLT5zZ19yZXFbaV0ubGVuIC8gYnVzd2lkdGg7CkBAIC03ODQsNyAr OTA5LDcgQEAgc3RhdGljIHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqc3RtMzJfZG1h X3ByZXBfZG1hX2N5Y2xpYygKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0JcmV0ID0gc3RtMzJfZG1h X3NldF94ZmVyX3BhcmFtKGNoYW4sIGRpcmVjdGlvbiwgJmJ1c3dpZHRoKTsKKwlyZXQgPSBzdG0z Ml9kbWFfc2V0X3hmZXJfcGFyYW0oY2hhbiwgZGlyZWN0aW9uLCAmYnVzd2lkdGgsIHBlcmlvZF9s ZW4pOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gTlVMTDsKIApAQCAtODMzLDkgKzk1OCwxMCBA QCBzdGF0aWMgc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICpzdG0zMl9kbWFfcHJlcF9k bWFfbWVtY3B5KAogCWRtYV9hZGRyX3Qgc3JjLCBzaXplX3QgbGVuLCB1bnNpZ25lZCBsb25nIGZs YWdzKQogewogCXN0cnVjdCBzdG0zMl9kbWFfY2hhbiAqY2hhbiA9IHRvX3N0bTMyX2RtYV9jaGFu KGMpOwotCXUzMiBudW1fc2dzOworCWVudW0gZG1hX3NsYXZlX2J1c3dpZHRoIG1heF93aWR0aDsK IAlzdHJ1Y3Qgc3RtMzJfZG1hX2Rlc2MgKmRlc2M7CiAJc2l6ZV90IHhmZXJfY291bnQsIG9mZnNl dDsKKwl1MzIgbnVtX3NncywgYmVzdF9idXJzdCwgZG1hX2J1cnN0LCB0aHJlc2hvbGQ7CiAJaW50 IGk7CiAKIAludW1fc2dzID0gRElWX1JPVU5EX1VQKGxlbiwgU1RNMzJfRE1BX01BWF9EQVRBX0lU RU1TKTsKQEAgLTg0MywyNSArOTY5LDM0IEBAIHN0YXRpYyBzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rl c2NyaXB0b3IgKnN0bTMyX2RtYV9wcmVwX2RtYV9tZW1jcHkoCiAJaWYgKCFkZXNjKQogCQlyZXR1 cm4gTlVMTDsKIAorCXRocmVzaG9sZCA9IGNoYW4tPnRocmVzaG9sZDsKKwogCWZvciAob2Zmc2V0 ID0gMCwgaSA9IDA7IG9mZnNldCA8IGxlbjsgb2Zmc2V0ICs9IHhmZXJfY291bnQsIGkrKykgewog CQl4ZmVyX2NvdW50ID0gbWluX3Qoc2l6ZV90LCBsZW4gLSBvZmZzZXQsCiAJCQkJICAgU1RNMzJf RE1BX01BWF9EQVRBX0lURU1TKTsKIAotCQlkZXNjLT5zZ19yZXFbaV0ubGVuID0geGZlcl9jb3Vu dDsKKwkJLyogQ29tcHV0ZSBiZXN0IGJ1cnN0IHNpemUgKi8KKwkJbWF4X3dpZHRoID0gRE1BX1NM QVZFX0JVU1dJRFRIXzFfQllURTsKKwkJYmVzdF9idXJzdCA9IHN0bTMyX2RtYV9nZXRfYmVzdF9i dXJzdChsZW4sIFNUTTMyX0RNQV9NQVhfQlVSU1QsCisJCQkJCQkgICAgICB0aHJlc2hvbGQsIG1h eF93aWR0aCk7CisJCWRtYV9idXJzdCA9IHN0bTMyX2RtYV9nZXRfYnVyc3QoY2hhbiwgYmVzdF9i dXJzdCk7CiAKIAkJc3RtMzJfZG1hX2NsZWFyX3JlZygmZGVzYy0+c2dfcmVxW2ldLmNoYW5fcmVn KTsKIAkJZGVzYy0+c2dfcmVxW2ldLmNoYW5fcmVnLmRtYV9zY3IgPQogCQkJU1RNMzJfRE1BX1ND Ul9ESVIoU1RNMzJfRE1BX01FTV9UT19NRU0pIHwKKwkJCVNUTTMyX0RNQV9TQ1JfUEJVUlNUKGRt YV9idXJzdCkgfAorCQkJU1RNMzJfRE1BX1NDUl9NQlVSU1QoZG1hX2J1cnN0KSB8CiAJCQlTVE0z Ml9ETUFfU0NSX01JTkMgfAogCQkJU1RNMzJfRE1BX1NDUl9QSU5DIHwKIAkJCVNUTTMyX0RNQV9T Q1JfVENJRSB8CiAJCQlTVE0zMl9ETUFfU0NSX1RFSUU7Ci0JCWRlc2MtPnNnX3JlcVtpXS5jaGFu X3JlZy5kbWFfc2ZjciA9IFNUTTMyX0RNQV9TRkNSX0RNRElTIHwKLQkJCVNUTTMyX0RNQV9TRkNS X0ZUSChTVE0zMl9ETUFfRklGT19USFJFU0hPTERfRlVMTCkgfAotCQkJU1RNMzJfRE1BX1NGQ1Jf RkVJRTsKKwkJZGVzYy0+c2dfcmVxW2ldLmNoYW5fcmVnLmRtYV9zZmNyIHw9IFNUTTMyX0RNQV9T RkNSX01BU0s7CisJCWRlc2MtPnNnX3JlcVtpXS5jaGFuX3JlZy5kbWFfc2ZjciB8PQorCQkJU1RN MzJfRE1BX1NGQ1JfRlRIKHRocmVzaG9sZCk7CiAJCWRlc2MtPnNnX3JlcVtpXS5jaGFuX3JlZy5k bWFfc3BhciA9IHNyYyArIG9mZnNldDsKIAkJZGVzYy0+c2dfcmVxW2ldLmNoYW5fcmVnLmRtYV9z bTBhciA9IGRlc3QgKyBvZmZzZXQ7CiAJCWRlc2MtPnNnX3JlcVtpXS5jaGFuX3JlZy5kbWFfc25k dHIgPSB4ZmVyX2NvdW50OworCQlkZXNjLT5zZ19yZXFbaV0ubGVuID0geGZlcl9jb3VudDsKIAl9 CiAKIAlkZXNjLT5udW1fc2dzID0gbnVtX3NnczsKQEAgLTg4Niw2ICsxMDIxLDcgQEAgc3RhdGlj IHNpemVfdCBzdG0zMl9kbWFfZGVzY19yZXNpZHVlKHN0cnVjdCBzdG0zMl9kbWFfY2hhbiAqY2hh biwKIAkJCQkgICAgIHN0cnVjdCBzdG0zMl9kbWFfZGVzYyAqZGVzYywKIAkJCQkgICAgIHUzMiBu ZXh0X3NnKQogeworCXUzMiBtb2R1bG8sIGJ1cnN0X3NpemU7CiAJdTMyIHJlc2lkdWUgPSAwOwog CWludCBpOwogCkBAIC04OTMsOCArMTAyOSwxMCBAQCBzdGF0aWMgc2l6ZV90IHN0bTMyX2RtYV9k ZXNjX3Jlc2lkdWUoc3RydWN0IHN0bTMyX2RtYV9jaGFuICpjaGFuLAogCSAqIEluIGN5Y2xpYyBt b2RlLCBmb3IgdGhlIGxhc3QgcGVyaW9kLCByZXNpZHVlID0gcmVtYWluaW5nIGJ5dGVzIGZyb20K IAkgKiBORFRSCiAJICovCi0JaWYgKGNoYW4tPmRlc2MtPmN5Y2xpYyAmJiBuZXh0X3NnID09IDAp Ci0JCXJldHVybiBzdG0zMl9kbWFfZ2V0X3JlbWFpbmluZ19ieXRlcyhjaGFuKTsKKwlpZiAoY2hh bi0+ZGVzYy0+Y3ljbGljICYmIG5leHRfc2cgPT0gMCkgeworCQlyZXNpZHVlID0gc3RtMzJfZG1h X2dldF9yZW1haW5pbmdfYnl0ZXMoY2hhbik7CisJCWdvdG8gZW5kOworCX0KIAogCS8qCiAJICog Rm9yIGFsbCBvdGhlciBwZXJpb2RzIGluIGN5Y2xpYyBtb2RlLCBhbmQgaW4gc2cgbW9kZSwKQEAg LTkwNSw2ICsxMDQzLDE1IEBAIHN0YXRpYyBzaXplX3Qgc3RtMzJfZG1hX2Rlc2NfcmVzaWR1ZShz dHJ1Y3Qgc3RtMzJfZG1hX2NoYW4gKmNoYW4sCiAJCXJlc2lkdWUgKz0gZGVzYy0+c2dfcmVxW2ld LmxlbjsKIAlyZXNpZHVlICs9IHN0bTMyX2RtYV9nZXRfcmVtYWluaW5nX2J5dGVzKGNoYW4pOwog CitlbmQ6CisJaWYgKCFjaGFuLT5tZW1fYnVyc3QpCisJCXJldHVybiByZXNpZHVlOworCisJYnVy c3Rfc2l6ZSA9IGNoYW4tPm1lbV9idXJzdCAqIGNoYW4tPm1lbV93aWR0aDsKKwltb2R1bG8gPSBy ZXNpZHVlICUgYnVyc3Rfc2l6ZTsKKwlpZiAobW9kdWxvKQorCQlyZXNpZHVlID0gcmVzaWR1ZSAt IG1vZHVsbyArIGJ1cnN0X3NpemU7CisKIAlyZXR1cm4gcmVzaWR1ZTsKIH0KIApAQCAtOTk0LDcg KzExNDEsNiBAQCBzdGF0aWMgdm9pZCBzdG0zMl9kbWFfc2V0X2NvbmZpZyhzdHJ1Y3Qgc3RtMzJf ZG1hX2NoYW4gKmNoYW4sCiAJY2hhbi0+Y2hhbl9yZWcuZG1hX3NjciB8PSBTVE0zMl9ETUFfU0NS X1RFSUUgfCBTVE0zMl9ETUFfU0NSX1RDSUU7CiAKIAljaGFuLT50aHJlc2hvbGQgPSBTVE0zMl9E TUFfVEhSRVNIT0xEX0ZUUl9HRVQoY2ZnLT5mZWF0dXJlcyk7Ci0JY2hhbi0+Y2hhbl9yZWcuZG1h X3NmY3IgPSBTVE0zMl9ETUFfU0ZDUl9GVEgoY2hhbi0+dGhyZXNob2xkKTsKIH0KIAogc3RhdGlj IHN0cnVjdCBkbWFfY2hhbiAqc3RtMzJfZG1hX29mX3hsYXRlKHN0cnVjdCBvZl9waGFuZGxlX2Fy Z3MgKmRtYV9zcGVjLAo=