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: [v4] dmaengine: pl330: flush before wait, and add dev burst support. From: Frank Mori Hess Message-Id: <2863317.1ZoR41yQkl@bear> Date: Tue, 13 Mar 2018 14:34:26 -0400 To: dmaengine@vger.kernel.org Cc: Vinod Koul , Dan Williams , linux-kernel@vger.kernel.org List-ID: RG8gRE1BRkxVU0hQIF9iZWZvcmVfIHRoZSBmaXJzdCBETUFXRlAgdG8gZW5zdXJlIGNvbnRyb2xs ZXIKYW5kIHBlcmlwaGVyYWwgYXJlIGluIGFncmVlbWVudCBhYm91dCBkbWEgcmVxdWVzdCBzdGF0 ZSBiZWZvcmUgZmlyc3QKdHJhbnNmZXIuICBBZGQgc3VwcG9ydCBmb3IgYnVyc3QgdHJhbnNmZXJz IHRvL2Zyb20gcGVyaXBoZXJhbHMuIEluIHRoZSBuZXcKc2NoZW1lLCB0aGUgY29udHJvbGxlciBk b2VzIGFzIG1hbnkgYnVyc3QgdHJhbnNmZXJzIGFzIGl0IGNhbiB0aGVuCnRyYW5zZmVycyB0aGUg cmVtYWluaW5nIGRyZWdzIHdpdGggZWl0aGVyIHNpbmdsZSB0cmFuc2ZlcnMgZm9yCnBlcmlwaGVy YWxzLCBvciB3aXRoIGEgcmVkdWNlZCBzaXplIGJ1cnN0IGZvciBtZW1vcnktdG8tbWVtb3J5IHRy YW5zZmVycy4KClNpZ25lZC1vZmYtYnk6IEZyYW5rIE1vcmkgSGVzcyA8Zm1oNmpqQGdtYWlsLmNv bT4KVGVzdGVkLWJ5OiBGcmFuayBNb3JpIEhlc3MgPGZtaDZqakBnbWFpbC5jb20+Ci0tLQoKSSB0 ZXN0ZWQgZG1hIHRyYW5zZmVycyB0byBwZXJpcGhlcmFscyB3aXRoIHYzIHBhdGNoIGFuZCBkZXNp Z253YXJlIHNlcmlhbCAKcG9ydCAoZHJpdmVycy90dHkvc2VyaWFsLzgyNTAvODI1MF9kdy5jKSBh bmQgYSBHUElCIGludGVyZmFjZQooaHR0cHM6Ly9naXRodWIuY29tL2ZtaGVzcy9mbWhfZ3BpYl9j b3JlKS4gIEkgdGVzdGVkIG1lbW9yeS10by1tZW1vcnkKdHJhbnNmZXJzIHVzaW5nIHRoZSBkbWF0 ZXN0IG1vZHVsZS4KCnYzIG9mIHRoaXMgcGF0Y2ggc2hvdWxkIGJlIHRoZSBzYW1lIGFzIHYyIGV4 Y2VwdCB3aXRoIGNoZWNrcGF0Y2gucGwKd2FybmluZ3MgYW5kIGVycm9ycyBjbGVhbmVkIHVwLgoK djQgYWRkcmVzc2VzIGNvc21ldGljIGNvbXBsYWludHMgYWJvdXQgdjMsIHNob3VsZCBiZSBmdW5j dGlvbmFsbHkgdW5jaGFuZ2VkLgoKIGRyaXZlcnMvZG1hL3BsMzMwLmMgfCAyMDkgKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5n ZWQsIDE1OSBpbnNlcnRpb25zKCspLCA1MCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2RtYS9wbDMzMC5jIGIvZHJpdmVycy9kbWEvcGwzMzAuYwppbmRleCBkNzMyN2ZkNWY0NDUu LjgxOWE1NzhlMzE3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvcGwzMzAuYworKysgYi9kcml2 ZXJzL2RtYS9wbDMzMC5jCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSA8bGludXgvb2ZfZG1h Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5o PgorI2luY2x1ZGUgPGxpbnV4L2J1Zy5oPgogCiAjaW5jbHVkZSAiZG1hZW5naW5lLmgiCiAjZGVm aW5lIFBMMzMwX01BWF9DSEFOCQk4CkBAIC0xMDk0LDUxICsxMDk1LDk2IEBAIHN0YXRpYyBpbmxp bmUgaW50IF9sZHN0X21lbXRvbWVtKHVuc2lnbmVkIGRyeV9ydW4sIHU4IGJ1ZltdLAogCXJldHVy biBvZmY7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IF9sZHN0X2RldnRvbWVtKHN0cnVjdCBwbDMz MF9kbWFjICpwbDMzMCwgdW5zaWduZWQgZHJ5X3J1biwKLQkJCQkgdTggYnVmW10sIGNvbnN0IHN0 cnVjdCBfeGZlcl9zcGVjICpweHMsCi0JCQkJIGludCBjeWMpCitzdGF0aWMgdTMyIF9lbWl0X2xv YWQodW5zaWduZWQgaW50IGRyeV9ydW4sIHU4IGJ1ZltdLAorCWVudW0gcGwzMzBfY29uZCBjb25k LCBlbnVtIGRtYV90cmFuc2Zlcl9kaXJlY3Rpb24gZGlyZWN0aW9uLAorCXU4IHBlcmkpCiB7CiAJ aW50IG9mZiA9IDA7Ci0JZW51bSBwbDMzMF9jb25kIGNvbmQ7CiAKLQlpZiAocGwzMzAtPnF1aXJr cyAmIFBMMzMwX1FVSVJLX0JST0tFTl9OT19GTFVTSFApCi0JCWNvbmQgPSBCVVJTVDsKLQllbHNl Ci0JCWNvbmQgPSBTSU5HTEU7CisJc3dpdGNoIChkaXJlY3Rpb24pIHsKKwljYXNlIERNQV9NRU1f VE9fTUVNOgorCQkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIERNQV9NRU1fVE9fREVWOgorCQlv ZmYgKz0gX2VtaXRfTEQoZHJ5X3J1biwgJmJ1ZltvZmZdLCBjb25kKTsKKwkJYnJlYWs7CiAKLQl3 aGlsZSAoY3ljLS0pIHsKLQkJb2ZmICs9IF9lbWl0X1dGUChkcnlfcnVuLCAmYnVmW29mZl0sIGNv bmQsIHB4cy0+ZGVzYy0+cGVyaSk7Ci0JCW9mZiArPSBfZW1pdF9MRFAoZHJ5X3J1biwgJmJ1Zltv ZmZdLCBjb25kLCBweHMtPmRlc2MtPnBlcmkpOwotCQlvZmYgKz0gX2VtaXRfU1QoZHJ5X3J1biwg JmJ1ZltvZmZdLCBBTFdBWVMpOworCWNhc2UgRE1BX0RFVl9UT19NRU06CisJCWlmIChjb25kID09 IEFMV0FZUykgeworCQkJb2ZmICs9IF9lbWl0X0xEUChkcnlfcnVuLCAmYnVmW29mZl0sIFNJTkdM RSwKKwkJCQlwZXJpKTsKKwkJCW9mZiArPSBfZW1pdF9MRFAoZHJ5X3J1biwgJmJ1ZltvZmZdLCBC VVJTVCwKKwkJCQlwZXJpKTsKKwkJfSBlbHNlIHsKKwkJCW9mZiArPSBfZW1pdF9MRFAoZHJ5X3J1 biwgJmJ1ZltvZmZdLCBjb25kLAorCQkJCXBlcmkpOworCQl9CisJCWJyZWFrOwogCi0JCWlmICgh KHBsMzMwLT5xdWlya3MgJiBQTDMzMF9RVUlSS19CUk9LRU5fTk9fRkxVU0hQKSkKLQkJCW9mZiAr PSBfZW1pdF9GTFVTSFAoZHJ5X3J1biwgJmJ1ZltvZmZdLAotCQkJCQkgICAgcHhzLT5kZXNjLT5w ZXJpKTsKKwlkZWZhdWx0OgorCQkvKiB0aGlzIGNvZGUgc2hvdWxkIGJlIHVucmVhY2hhYmxlICov CisJCVdBUk5fT04oMSk7CisJCWJyZWFrOwogCX0KIAogCXJldHVybiBvZmY7CiB9CiAKLXN0YXRp YyBpbmxpbmUgaW50IF9sZHN0X21lbXRvZGV2KHN0cnVjdCBwbDMzMF9kbWFjICpwbDMzMCwKK3N0 YXRpYyBpbmxpbmUgdTMyIF9lbWl0X3N0b3JlKHVuc2lnbmVkIGludCBkcnlfcnVuLCB1OCBidWZb XSwKKwllbnVtIHBsMzMwX2NvbmQgY29uZCwgZW51bSBkbWFfdHJhbnNmZXJfZGlyZWN0aW9uIGRp cmVjdGlvbiwKKwl1OCBwZXJpKQoreworCWludCBvZmYgPSAwOworCisJc3dpdGNoIChkaXJlY3Rp b24pIHsKKwljYXNlIERNQV9NRU1fVE9fTUVNOgorCQkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNl IERNQV9ERVZfVE9fTUVNOgorCQlvZmYgKz0gX2VtaXRfU1QoZHJ5X3J1biwgJmJ1ZltvZmZdLCBj b25kKTsKKwkJYnJlYWs7CisKKwljYXNlIERNQV9NRU1fVE9fREVWOgorCQlpZiAoY29uZCA9PSBB TFdBWVMpIHsKKwkJCW9mZiArPSBfZW1pdF9TVFAoZHJ5X3J1biwgJmJ1ZltvZmZdLCBTSU5HTEUs CisJCQkJcGVyaSk7CisJCQlvZmYgKz0gX2VtaXRfU1RQKGRyeV9ydW4sICZidWZbb2ZmXSwgQlVS U1QsCisJCQkJcGVyaSk7CisJCX0gZWxzZSB7CisJCQlvZmYgKz0gX2VtaXRfU1RQKGRyeV9ydW4s ICZidWZbb2ZmXSwgY29uZCwKKwkJCQlwZXJpKTsKKwkJfQorCQlicmVhazsKKworCWRlZmF1bHQ6 CisJCS8qIHRoaXMgY29kZSBzaG91bGQgYmUgdW5yZWFjaGFibGUgKi8KKwkJV0FSTl9PTigxKTsK KwkJYnJlYWs7CisJfQorCisJcmV0dXJuIG9mZjsKK30KKworc3RhdGljIGlubGluZSBpbnQgX2xk c3RfcGVyaXBoZXJhbChzdHJ1Y3QgcGwzMzBfZG1hYyAqcGwzMzAsCiAJCQkJIHVuc2lnbmVkIGRy eV9ydW4sIHU4IGJ1ZltdLAotCQkJCSBjb25zdCBzdHJ1Y3QgX3hmZXJfc3BlYyAqcHhzLCBpbnQg Y3ljKQorCQkJCSBjb25zdCBzdHJ1Y3QgX3hmZXJfc3BlYyAqcHhzLCBpbnQgY3ljLAorCQkJCSBl bnVtIHBsMzMwX2NvbmQgY29uZCkKIHsKIAlpbnQgb2ZmID0gMDsKLQllbnVtIHBsMzMwX2NvbmQg Y29uZDsKIAogCWlmIChwbDMzMC0+cXVpcmtzICYgUEwzMzBfUVVJUktfQlJPS0VOX05PX0ZMVVNI UCkKIAkJY29uZCA9IEJVUlNUOwotCWVsc2UKLQkJY29uZCA9IFNJTkdMRTsKIAorCS8qCisJICog ZG8gRkxVU0hQIGF0IGJlZ2lubmluZyB0byBjbGVhciBhbnkgc3RhbGUgZG1hIHJlcXVlc3RzIGJl Zm9yZSB0aGUKKwkgKiBmaXJzdCBXRlAuCisJICovCisJaWYgKCEocGwzMzAtPnF1aXJrcyAmIFBM MzMwX1FVSVJLX0JST0tFTl9OT19GTFVTSFApKQorCQlvZmYgKz0gX2VtaXRfRkxVU0hQKGRyeV9y dW4sICZidWZbb2ZmXSwgcHhzLT5kZXNjLT5wZXJpKTsKIAl3aGlsZSAoY3ljLS0pIHsKIAkJb2Zm ICs9IF9lbWl0X1dGUChkcnlfcnVuLCAmYnVmW29mZl0sIGNvbmQsIHB4cy0+ZGVzYy0+cGVyaSk7 Ci0JCW9mZiArPSBfZW1pdF9MRChkcnlfcnVuLCAmYnVmW29mZl0sIEFMV0FZUyk7Ci0JCW9mZiAr PSBfZW1pdF9TVFAoZHJ5X3J1biwgJmJ1ZltvZmZdLCBjb25kLCBweHMtPmRlc2MtPnBlcmkpOwot Ci0JCWlmICghKHBsMzMwLT5xdWlya3MgJiBQTDMzMF9RVUlSS19CUk9LRU5fTk9fRkxVU0hQKSkK LQkJCW9mZiArPSBfZW1pdF9GTFVTSFAoZHJ5X3J1biwgJmJ1ZltvZmZdLAotCQkJCQkgICAgcHhz LT5kZXNjLT5wZXJpKTsKKwkJb2ZmICs9IF9lbWl0X2xvYWQoZHJ5X3J1biwgJmJ1ZltvZmZdLCBj b25kLCBweHMtPmRlc2MtPnJxdHlwZSwKKwkJCXB4cy0+ZGVzYy0+cGVyaSk7CisJCW9mZiArPSBf ZW1pdF9zdG9yZShkcnlfcnVuLCAmYnVmW29mZl0sIGNvbmQsIHB4cy0+ZGVzYy0+cnF0eXBlLAor CQkJcHhzLT5kZXNjLT5wZXJpKTsKIAl9CiAKIAlyZXR1cm4gb2ZmOwpAQCAtMTE0OCwxOSArMTE5 NCw2NSBAQCBzdGF0aWMgaW50IF9idXJzdHMoc3RydWN0IHBsMzMwX2RtYWMgKnBsMzMwLCB1bnNp Z25lZCBkcnlfcnVuLCB1OCBidWZbXSwKIAkJY29uc3Qgc3RydWN0IF94ZmVyX3NwZWMgKnB4cywg aW50IGN5YykKIHsKIAlpbnQgb2ZmID0gMDsKKwllbnVtIHBsMzMwX2NvbmQgY29uZCA9IEJSU1Rf TEVOKHB4cy0+Y2NyKSA+IDEgPyBCVVJTVCA6IFNJTkdMRTsKIAogCXN3aXRjaCAocHhzLT5kZXNj LT5ycXR5cGUpIHsKIAljYXNlIERNQV9NRU1fVE9fREVWOgotCQlvZmYgKz0gX2xkc3RfbWVtdG9k ZXYocGwzMzAsIGRyeV9ydW4sICZidWZbb2ZmXSwgcHhzLCBjeWMpOwotCQlicmVhazsKKwkJLyog ZmFsbCB0aHJvdWdoICovCiAJY2FzZSBETUFfREVWX1RPX01FTToKLQkJb2ZmICs9IF9sZHN0X2Rl dnRvbWVtKHBsMzMwLCBkcnlfcnVuLCAmYnVmW29mZl0sIHB4cywgY3ljKTsKKwkJb2ZmICs9IF9s ZHN0X3BlcmlwaGVyYWwocGwzMzAsIGRyeV9ydW4sICZidWZbb2ZmXSwgcHhzLCBjeWMsCisJCQlj b25kKTsKIAkJYnJlYWs7CisKIAljYXNlIERNQV9NRU1fVE9fTUVNOgogCQlvZmYgKz0gX2xkc3Rf bWVtdG9tZW0oZHJ5X3J1biwgJmJ1ZltvZmZdLCBweHMsIGN5Yyk7CiAJCWJyZWFrOworCisJZGVm YXVsdDoKKwkJLyogdGhpcyBjb2RlIHNob3VsZCBiZSB1bnJlYWNoYWJsZSAqLworCQlXQVJOX09O KDEpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gb2ZmOworfQorCisvKgorICogdHJhbnNmZXIg ZHJlZ3Mgd2l0aCBzaW5nbGUgdHJhbnNmZXJzIHRvIHBlcmlwaGVyYWwsIG9yIGEgcmVkdWNlZCBz aXplIGJ1cnN0CisgKiBmb3IgbWVtLXRvLW1lbS4KKyAqLworc3RhdGljIGludCBfZHJlZ3Moc3Ry dWN0IHBsMzMwX2RtYWMgKnBsMzMwLCB1bnNpZ25lZCBpbnQgZHJ5X3J1biwgdTggYnVmW10sCisJ CWNvbnN0IHN0cnVjdCBfeGZlcl9zcGVjICpweHMsIGludCB0cmFuc2Zlcl9sZW5ndGgpCit7CisJ aW50IG9mZiA9IDA7CisJaW50IGRyZWdzX2NjcjsKKworCWlmICh0cmFuc2Zlcl9sZW5ndGggPT0g MCkKKwkJcmV0dXJuIG9mZjsKKworCXN3aXRjaCAocHhzLT5kZXNjLT5ycXR5cGUpIHsKKwljYXNl IERNQV9NRU1fVE9fREVWOgorCQkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIERNQV9ERVZfVE9f TUVNOgorCQlvZmYgKz0gX2xkc3RfcGVyaXBoZXJhbChwbDMzMCwgZHJ5X3J1biwgJmJ1ZltvZmZd LCBweHMsCisJCQl0cmFuc2Zlcl9sZW5ndGgsIFNJTkdMRSk7CisJCWJyZWFrOworCisJY2FzZSBE TUFfTUVNX1RPX01FTToKKwkJZHJlZ3NfY2NyID0gcHhzLT5jY3I7CisJCWRyZWdzX2NjciAmPSB+ KCgweGYgPDwgQ0NfU1JDQlJTVExFTl9TSEZUKSB8CisJCQkoMHhmIDw8IENDX0RTVEJSU1RMRU5f U0hGVCkpOworCQlkcmVnc19jY3IgfD0gKCgodHJhbnNmZXJfbGVuZ3RoIC0gMSkgJiAweGYpIDw8 CisJCQlDQ19TUkNCUlNUTEVOX1NIRlQpOworCQlkcmVnc19jY3IgfD0gKCgodHJhbnNmZXJfbGVu Z3RoIC0gMSkgJiAweGYpIDw8CisJCQlDQ19EU1RCUlNUTEVOX1NIRlQpOworCQlvZmYgKz0gX2Vt aXRfTU9WKGRyeV9ydW4sICZidWZbb2ZmXSwgQ0NSLCBkcmVnc19jY3IpOworCQlvZmYgKz0gX2xk c3RfbWVtdG9tZW0oZHJ5X3J1biwgJmJ1ZltvZmZdLCBweHMsIDEpOworCQlicmVhazsKKwogCWRl ZmF1bHQ6Ci0JCW9mZiArPSAweDQwMDAwMDAwOyAvKiBTY2FyZSBvZmYgdGhlIENsaWVudCAqLwor CQkvKiB0aGlzIGNvZGUgc2hvdWxkIGJlIHVucmVhY2hhYmxlICovCisJCVdBUk5fT04oMSk7CiAJ CWJyZWFrOwogCX0KIApAQCAtMTI1Niw2ICsxMzQ4LDggQEAgc3RhdGljIGlubGluZSBpbnQgX3Nl dHVwX2xvb3BzKHN0cnVjdCBwbDMzMF9kbWFjICpwbDMzMCwKIAlzdHJ1Y3QgcGwzMzBfeGZlciAq eCA9ICZweHMtPmRlc2MtPnB4OwogCXUzMiBjY3IgPSBweHMtPmNjcjsKIAl1bnNpZ25lZCBsb25n IGMsIGJ1cnN0cyA9IEJZVEVfVE9fQlVSU1QoeC0+Ynl0ZXMsIGNjcik7CisJaW50IG51bV9kcmVn cyA9ICh4LT5ieXRlcyAtIEJVUlNUX1RPX0JZVEUoYnVyc3RzLCBjY3IpKSAvCisJCUJSU1RfU0la RShjY3IpOwogCWludCBvZmYgPSAwOwogCiAJd2hpbGUgKGJ1cnN0cykgewpAQCAtMTI2Myw2ICsx MzU3LDcgQEAgc3RhdGljIGlubGluZSBpbnQgX3NldHVwX2xvb3BzKHN0cnVjdCBwbDMzMF9kbWFj ICpwbDMzMCwKIAkJb2ZmICs9IF9sb29wKHBsMzMwLCBkcnlfcnVuLCAmYnVmW29mZl0sICZjLCBw eHMpOwogCQlidXJzdHMgLT0gYzsKIAl9CisJb2ZmICs9IF9kcmVncyhwbDMzMCwgZHJ5X3J1biwg JmJ1ZltvZmZdLCBweHMsIG51bV9kcmVncyk7CiAKIAlyZXR1cm4gb2ZmOwogfQpAQCAtMTI5NCw3 ICsxMzg5LDYgQEAgc3RhdGljIGludCBfc2V0dXBfcmVxKHN0cnVjdCBwbDMzMF9kbWFjICpwbDMz MCwgdW5zaWduZWQgZHJ5X3J1biwKIAkJICAgICAgc3RydWN0IF94ZmVyX3NwZWMgKnB4cykKIHsK IAlzdHJ1Y3QgX3BsMzMwX3JlcSAqcmVxID0gJnRocmQtPnJlcVtpbmRleF07Ci0Jc3RydWN0IHBs MzMwX3hmZXIgKng7CiAJdTggKmJ1ZiA9IHJlcS0+bWNfY3B1OwogCWludCBvZmYgPSAwOwogCkBA IC0xMzAzLDExICsxMzk3LDYgQEAgc3RhdGljIGludCBfc2V0dXBfcmVxKHN0cnVjdCBwbDMzMF9k bWFjICpwbDMzMCwgdW5zaWduZWQgZHJ5X3J1biwKIAkvKiBETUFNT1YgQ0NSLCBjY3IgKi8KIAlv ZmYgKz0gX2VtaXRfTU9WKGRyeV9ydW4sICZidWZbb2ZmXSwgQ0NSLCBweHMtPmNjcik7CiAKLQl4 ID0gJnB4cy0+ZGVzYy0+cHg7Ci0JLyogRXJyb3IgaWYgeGZlciBsZW5ndGggaXMgbm90IGFsaWdu ZWQgYXQgYnVyc3Qgc2l6ZSAqLwotCWlmICh4LT5ieXRlcyAlIChCUlNUX1NJWkUocHhzLT5jY3Ip ICogQlJTVF9MRU4ocHhzLT5jY3IpKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAlvZmYgKz0gX3Nl dHVwX3hmZXIocGwzMzAsIGRyeV9ydW4sICZidWZbb2ZmXSwgcHhzKTsKIAogCS8qIERNQVNFViBw ZXJpcGhlcmFsL2V2ZW50ICovCkBAIC0xMzY1LDYgKzE0NTQsMjAgQEAgc3RhdGljIGludCBwbDMz MF9zdWJtaXRfcmVxKHN0cnVjdCBwbDMzMF90aHJlYWQgKnRocmQsCiAJdTMyIGNjcjsKIAlpbnQg cmV0ID0gMDsKIAorCXN3aXRjaCAoZGVzYy0+cnF0eXBlKSB7CisJY2FzZSBETUFfTUVNX1RPX0RF VjoKKwkJYnJlYWs7CisKKwljYXNlIERNQV9ERVZfVE9fTUVNOgorCQlicmVhazsKKworCWNhc2Ug RE1BX01FTV9UT19NRU06CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FTk9UU1VQ UDsKKwl9CisKIAlpZiAocGwzMzAtPnN0YXRlID09IERZSU5HCiAJCXx8IHBsMzMwLT5kbWFjX3Ri ZC5yZXNldF9jaGFuICYgKDEgPDwgdGhyZC0+aWQpKSB7CiAJCWRldl9pbmZvKHRocmQtPmRtYWMt PmRkbWEuZGV2LCAiJXM6JWRcbiIsCkBAIC0yMTA0LDYgKzIyMDcsMTggQEAgc3RhdGljIGJvb2wg cGwzMzBfcHJlcF9zbGF2ZV9maWZvKHN0cnVjdCBkbWFfcGwzMzBfY2hhbiAqcGNoLAogCXJldHVy biB0cnVlOwogfQogCitzdGF0aWMgaW50IGZpeHVwX2J1cnN0X2xlbihpbnQgbWF4X2J1cnN0X2xl biwgaW50IHF1aXJrcykKK3sKKwlpZiAocXVpcmtzICYgUEwzMzBfUVVJUktfQlJPS0VOX05PX0ZM VVNIUCkKKwkJcmV0dXJuIDE7CisJZWxzZSBpZiAobWF4X2J1cnN0X2xlbiA+IFBMMzMwX01BWF9C VVJTVCkKKwkJcmV0dXJuIFBMMzMwX01BWF9CVVJTVDsKKwllbHNlIGlmIChtYXhfYnVyc3RfbGVu IDwgMSkKKwkJcmV0dXJuIDE7CisJZWxzZQorCQlyZXR1cm4gbWF4X2J1cnN0X2xlbjsKK30KKwog c3RhdGljIGludCBwbDMzMF9jb25maWcoc3RydWN0IGRtYV9jaGFuICpjaGFuLAogCQkJc3RydWN0 IGRtYV9zbGF2ZV9jb25maWcgKnNsYXZlX2NvbmZpZykKIHsKQEAgLTIxMTUsMTUgKzIyMzAsMTUg QEAgc3RhdGljIGludCBwbDMzMF9jb25maWcoc3RydWN0IGRtYV9jaGFuICpjaGFuLAogCQkJcGNo LT5maWZvX2FkZHIgPSBzbGF2ZV9jb25maWctPmRzdF9hZGRyOwogCQlpZiAoc2xhdmVfY29uZmln LT5kc3RfYWRkcl93aWR0aCkKIAkJCXBjaC0+YnVyc3Rfc3ogPSBfX2ZmcyhzbGF2ZV9jb25maWct PmRzdF9hZGRyX3dpZHRoKTsKLQkJaWYgKHNsYXZlX2NvbmZpZy0+ZHN0X21heGJ1cnN0KQotCQkJ cGNoLT5idXJzdF9sZW4gPSBzbGF2ZV9jb25maWctPmRzdF9tYXhidXJzdDsKKwkJcGNoLT5idXJz dF9sZW4gPSBmaXh1cF9idXJzdF9sZW4oc2xhdmVfY29uZmlnLT5kc3RfbWF4YnVyc3QsCisJCQlw Y2gtPmRtYWMtPnF1aXJrcyk7CiAJfSBlbHNlIGlmIChzbGF2ZV9jb25maWctPmRpcmVjdGlvbiA9 PSBETUFfREVWX1RPX01FTSkgewogCQlpZiAoc2xhdmVfY29uZmlnLT5zcmNfYWRkcikKIAkJCXBj aC0+Zmlmb19hZGRyID0gc2xhdmVfY29uZmlnLT5zcmNfYWRkcjsKIAkJaWYgKHNsYXZlX2NvbmZp Zy0+c3JjX2FkZHJfd2lkdGgpCiAJCQlwY2gtPmJ1cnN0X3N6ID0gX19mZnMoc2xhdmVfY29uZmln LT5zcmNfYWRkcl93aWR0aCk7Ci0JCWlmIChzbGF2ZV9jb25maWctPnNyY19tYXhidXJzdCkKLQkJ CXBjaC0+YnVyc3RfbGVuID0gc2xhdmVfY29uZmlnLT5zcmNfbWF4YnVyc3Q7CisJCXBjaC0+YnVy c3RfbGVuID0gZml4dXBfYnVyc3RfbGVuKHNsYXZlX2NvbmZpZy0+c3JjX21heGJ1cnN0LAorCQkJ cGNoLT5kbWFjLT5xdWlya3MpOwogCX0KIAogCXJldHVybiAwOwpAQCAtMjUxNywxNCArMjYzMiw4 IEBAIHN0YXRpYyBpbmxpbmUgaW50IGdldF9idXJzdF9sZW4oc3RydWN0IGRtYV9wbDMzMF9kZXNj ICpkZXNjLCBzaXplX3QgbGVuKQogCWJ1cnN0X2xlbiA+Pj0gZGVzYy0+cnFjZmcuYnJzdF9zaXpl OwogCiAJLyogc3JjL2RzdF9idXJzdF9sZW4gY2FuJ3QgYmUgbW9yZSB0aGFuIDE2ICovCi0JaWYg KGJ1cnN0X2xlbiA+IDE2KQotCQlidXJzdF9sZW4gPSAxNjsKLQotCXdoaWxlIChidXJzdF9sZW4g PiAxKSB7Ci0JCWlmICghKGxlbiAlIChidXJzdF9sZW4gPDwgZGVzYy0+cnFjZmcuYnJzdF9zaXpl KSkpCi0JCQlicmVhazsKLQkJYnVyc3RfbGVuLS07Ci0JfQorCWlmIChidXJzdF9sZW4gPiBQTDMz MF9NQVhfQlVSU1QpCisJCWJ1cnN0X2xlbiA9IFBMMzMwX01BWF9CVVJTVDsKIAogCXJldHVybiBi dXJzdF9sZW47CiB9CkBAIC0yNTk2LDcgKzI3MDUsNyBAQCBzdGF0aWMgc3RydWN0IGRtYV9hc3lu Y190eF9kZXNjcmlwdG9yICpwbDMzMF9wcmVwX2RtYV9jeWNsaWMoCiAKIAkJZGVzYy0+cnF0eXBl ID0gZGlyZWN0aW9uOwogCQlkZXNjLT5ycWNmZy5icnN0X3NpemUgPSBwY2gtPmJ1cnN0X3N6Owot CQlkZXNjLT5ycWNmZy5icnN0X2xlbiA9IDE7CisJCWRlc2MtPnJxY2ZnLmJyc3RfbGVuID0gcGNo LT5idXJzdF9sZW47CiAJCWRlc2MtPmJ5dGVzX3JlcXVlc3RlZCA9IHBlcmlvZF9sZW47CiAJCWZp bGxfcHgoJmRlc2MtPnB4LCBkc3QsIHNyYywgcGVyaW9kX2xlbik7CiAKQEAgLTI3NDEsNyArMjg1 MCw3IEBAIHBsMzMwX3ByZXBfc2xhdmVfc2coc3RydWN0IGRtYV9jaGFuICpjaGFuLCBzdHJ1Y3Qg c2NhdHRlcmxpc3QgKnNnbCwKIAkJfQogCiAJCWRlc2MtPnJxY2ZnLmJyc3Rfc2l6ZSA9IHBjaC0+ YnVyc3Rfc3o7Ci0JCWRlc2MtPnJxY2ZnLmJyc3RfbGVuID0gMTsKKwkJZGVzYy0+cnFjZmcuYnJz dF9sZW4gPSBwY2gtPmJ1cnN0X2xlbjsKIAkJZGVzYy0+cnF0eXBlID0gZGlyZWN0aW9uOwogCQlk ZXNjLT5ieXRlc19yZXF1ZXN0ZWQgPSBzZ19kbWFfbGVuKHNnKTsKIAl9Cg==