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: [v7,3/6] dmaengine: xilinx_dma: Fix race condition in the driver for multiple descriptor scenario From: Kedareswara rao Appana Message-Id: <1512624067-13554-4-git-send-email-appanad@xilinx.com> Date: Thu, 7 Dec 2017 10:51:04 +0530 To: dan.j.williams@intel.com, vinod.koul@intel.com, michal.simek@xilinx.com, appanad@xilinx.com, lars@metafoo.de, akinobu.mita@gmail.com, joabreu@synopsys.com, mike.looijmans@topic.nl, kedare06@gmail.com Cc: dmaengine@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org List-ID: QXMgcGVyIGF4aSBkbWFlbmdpbmUgc3BlYyB0aGUgc29mdHdhcmUgbXVzdCBub3QgbW92ZSB0aGUg dGFpbCBwb2ludGVyCnRvIGEgbG9jYXRpb24gdGhhdCBoYXMgbm90IGJlZW4gdXBkYXRlZCAobmV4 dCBkZXNjcmlwdG9yIGZpZWxkIG9mIHRoZQpoL3cgZGVzY3JpcHRvciBzaG91bGQgYWx3YXlzIHBv aW50IHRvIGEgdmFsaWQgYWRkcmVzcykuCgpXaGVuIHVzZXIgc3VibWl0cyBtdWx0aXBsZSBkZXNj cmlwdG9ycyBvbiB0aGUgcmVjdiBzaWRlLCB3aXRoIHRoZQpjdXJyZW50IGRyaXZlciBmbG93IHRo ZSBsYXN0IGJ1ZmZlciBkZXNjcmlwdG9yIG5leHQgZGVzY3JpcHRvciBmaWVsZApwb2ludHMgdG8g YSBpbnZhbGlkIGxvY2F0aW9uLCByZXN1bHRpbmcgdGhlIGludmFsaWQgZGF0YSBvciBlcnJvcnMg ZnJvbSB0aGUKYXhpZG1hIGRtYWVuZ2luZS4KClRoaXMgcGF0Y2ggZml4ZXMgdGhpcyBpc3N1ZSBi eSBjcmVhdGluZyBhIGJ1ZmZlciBkZXNjcml0cG9yIGNoYWluIGR1cmluZwpjaGFubmVsIGFsbG9j YXRpb24gaXRzZWxmIGFuZCB1c2UgdGhvc2UgYnVmZmVyIGRlc2NyaXB0b3JzIGZvciB0aGUKc3Vi c2VxdWVudCBkbWEgb3BlcmF0aW9ucy4KClNpZ25lZC1vZmYtYnk6IEtlZGFyZXN3YXJhIHJhbyBB cHBhbmEgPGFwcGFuYWRAeGlsaW54LmNvbT4KLS0tCkNoYW5nZXMgZm9yIHY3OgotLS0+IE5vbmUu CkNoYW5nZXMgZm9yIHY2OgotLS0+IFVwZGF0ZWQgQ29tbWl0IG1lc3NhZ2UgYXMgc3VnZ2VzdGVk IGJ5IFZpbm9kLgpDaGFuZ2VzIGZvciB2NToKLS0tPiBOb25lLgpDaGFuZ2VzIGZvciB2NDoKLS0t PiBOb25lLgpDaGFuZ2VzIGZvciB2MzoKLS0tPiBOb25lLgpDaGFuZ2VzIGZvciB2MjoKLS0tPiBO b25lLgoKIGRyaXZlcnMvZG1hL3hpbGlueC94aWxpbnhfZG1hLmMgfCAxMzUgKysrKysrKysrKysr KysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDg0IGluc2VydGlv bnMoKyksIDUxIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL3hpbGlueC94 aWxpbnhfZG1hLmMgYi9kcml2ZXJzL2RtYS94aWxpbngveGlsaW54X2RtYS5jCmluZGV4IDkwNjNj YTAuLmFiMDEzMDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL3hpbGlueC94aWxpbnhfZG1hLmMK KysrIGIvZHJpdmVycy9kbWEveGlsaW54L3hpbGlueF9kbWEuYwpAQCAtMTY1LDYgKzE2NSw3IEBA CiAjZGVmaW5lIFhJTElOWF9ETUFfQkRfU09QCQlCSVQoMjcpCiAjZGVmaW5lIFhJTElOWF9ETUFf QkRfRU9QCQlCSVQoMjYpCiAjZGVmaW5lIFhJTElOWF9ETUFfQ09BTEVTQ0VfTUFYCQkyNTUKKyNk ZWZpbmUgWElMSU5YX0RNQV9OVU1fREVTQ1MJCTI1NQogI2RlZmluZSBYSUxJTlhfRE1BX05VTV9B UFBfV09SRFMJNQogCiAvKiBNdWx0aS1DaGFubmVsIERNQSBEZXNjcmlwdG9yIG9mZnNldHMqLwpA QCAtMzEyLDYgKzMxMyw3IEBAIHN0cnVjdCB4aWxpbnhfZG1hX3R4X2Rlc2NyaXB0b3IgewogICog QHBlbmRpbmdfbGlzdDogRGVzY3JpcHRvcnMgd2FpdGluZwogICogQGFjdGl2ZV9saXN0OiBEZXNj cmlwdG9ycyByZWFkeSB0byBzdWJtaXQKICAqIEBkb25lX2xpc3Q6IENvbXBsZXRlIGRlc2NyaXB0 b3JzCisgKiBAZnJlZV9zZWdfbGlzdDogRnJlZSBkZXNjcmlwdG9ycwogICogQGNvbW1vbjogRE1B IGNvbW1vbiBjaGFubmVsCiAgKiBAZGVzY19wb29sOiBEZXNjcmlwdG9ycyBwb29sCiAgKiBAZGV2 OiBUaGUgZG1hIGRldmljZQpAQCAtMzMyLDcgKzMzNCw5IEBAIHN0cnVjdCB4aWxpbnhfZG1hX3R4 X2Rlc2NyaXB0b3IgewogICogQGRlc2Nfc3VibWl0Y291bnQ6IERlc2NyaXB0b3IgaC93IHN1Ym1p dHRlZCBjb3VudAogICogQHJlc2lkdWU6IFJlc2lkdWUgZm9yIEFYSSBETUEKICAqIEBzZWdfdjog U3RhdGljYWxseSBhbGxvY2F0ZWQgc2VnbWVudHMgYmFzZQorICogQHNlZ19wOiBQaHlzaWNhbCBh bGxvY2F0ZWQgc2VnbWVudHMgYmFzZQogICogQGN5Y2xpY19zZWdfdjogU3RhdGljYWxseSBhbGxv Y2F0ZWQgc2VnbWVudCBiYXNlIGZvciBjeWNsaWMgdHJhbnNmZXJzCisgKiBAY3ljbGljX3NlZ19w OiBQaHlzaWNhbCBhbGxvY2F0ZWQgc2VnbWVudHMgYmFzZSBmb3IgY3ljbGljIGRtYQogICogQHN0 YXJ0X3RyYW5zZmVyOiBEaWZmZXJlbnRpYXRlIGIvdyBETUEgSVAncyB0cmFuc2ZlcgogICogQHN0 b3BfdHJhbnNmZXI6IERpZmZlcmVudGlhdGUgYi93IERNQSBJUCdzIHF1aWVzY2UKICAqLwpAQCAt MzQ0LDYgKzM0OCw3IEBAIHN0cnVjdCB4aWxpbnhfZG1hX2NoYW4gewogCXN0cnVjdCBsaXN0X2hl YWQgcGVuZGluZ19saXN0OwogCXN0cnVjdCBsaXN0X2hlYWQgYWN0aXZlX2xpc3Q7CiAJc3RydWN0 IGxpc3RfaGVhZCBkb25lX2xpc3Q7CisJc3RydWN0IGxpc3RfaGVhZCBmcmVlX3NlZ19saXN0Owog CXN0cnVjdCBkbWFfY2hhbiBjb21tb247CiAJc3RydWN0IGRtYV9wb29sICpkZXNjX3Bvb2w7CiAJ c3RydWN0IGRldmljZSAqZGV2OwpAQCAtMzY0LDcgKzM2OSw5IEBAIHN0cnVjdCB4aWxpbnhfZG1h X2NoYW4gewogCXUzMiBkZXNjX3N1Ym1pdGNvdW50OwogCXUzMiByZXNpZHVlOwogCXN0cnVjdCB4 aWxpbnhfYXhpZG1hX3R4X3NlZ21lbnQgKnNlZ192OworCWRtYV9hZGRyX3Qgc2VnX3A7CiAJc3Ry dWN0IHhpbGlueF9heGlkbWFfdHhfc2VnbWVudCAqY3ljbGljX3NlZ192OworCWRtYV9hZGRyX3Qg Y3ljbGljX3NlZ19wOwogCXZvaWQgKCpzdGFydF90cmFuc2Zlcikoc3RydWN0IHhpbGlueF9kbWFf Y2hhbiAqY2hhbik7CiAJaW50ICgqc3RvcF90cmFuc2Zlcikoc3RydWN0IHhpbGlueF9kbWFfY2hh biAqY2hhbik7CiAJdTE2IHRkZXN0OwpAQCAtNTg0LDE4ICs1OTEsMzIgQEAgeGlsaW54X2NkbWFf YWxsb2NfdHhfc2VnbWVudChzdHJ1Y3QgeGlsaW54X2RtYV9jaGFuICpjaGFuKQogc3RhdGljIHN0 cnVjdCB4aWxpbnhfYXhpZG1hX3R4X3NlZ21lbnQgKgogeGlsaW54X2F4aWRtYV9hbGxvY190eF9z ZWdtZW50KHN0cnVjdCB4aWxpbnhfZG1hX2NoYW4gKmNoYW4pCiB7Ci0Jc3RydWN0IHhpbGlueF9h eGlkbWFfdHhfc2VnbWVudCAqc2VnbWVudDsKLQlkbWFfYWRkcl90IHBoeXM7Ci0KLQlzZWdtZW50 ID0gZG1hX3Bvb2xfemFsbG9jKGNoYW4tPmRlc2NfcG9vbCwgR0ZQX0FUT01JQywgJnBoeXMpOwot CWlmICghc2VnbWVudCkKLQkJcmV0dXJuIE5VTEw7CisJc3RydWN0IHhpbGlueF9heGlkbWFfdHhf c2VnbWVudCAqc2VnbWVudCA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNlZ21l bnQtPnBoeXMgPSBwaHlzOworCXNwaW5fbG9ja19pcnFzYXZlKCZjaGFuLT5sb2NrLCBmbGFncyk7 CisJaWYgKCFsaXN0X2VtcHR5KCZjaGFuLT5mcmVlX3NlZ19saXN0KSkgeworCQlzZWdtZW50ID0g bGlzdF9maXJzdF9lbnRyeSgmY2hhbi0+ZnJlZV9zZWdfbGlzdCwKKwkJCQkJICAgc3RydWN0IHhp bGlueF9heGlkbWFfdHhfc2VnbWVudCwKKwkJCQkJICAgbm9kZSk7CisJCWxpc3RfZGVsKCZzZWdt ZW50LT5ub2RlKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hhbi0+bG9jaywgZmxh Z3MpOwogCiAJcmV0dXJuIHNlZ21lbnQ7CiB9CiAKK3N0YXRpYyB2b2lkIHhpbGlueF9kbWFfY2xl YW5faHdfZGVzYyhzdHJ1Y3QgeGlsaW54X2F4aWRtYV9kZXNjX2h3ICpodykKK3sKKwl1MzIgbmV4 dF9kZXNjID0gaHctPm5leHRfZGVzYzsKKwl1MzIgbmV4dF9kZXNjX21zYiA9IGh3LT5uZXh0X2Rl c2NfbXNiOworCisJbWVtc2V0KGh3LCAwLCBzaXplb2Yoc3RydWN0IHhpbGlueF9heGlkbWFfZGVz Y19odykpOworCisJaHctPm5leHRfZGVzYyA9IG5leHRfZGVzYzsKKwlody0+bmV4dF9kZXNjX21z YiA9IG5leHRfZGVzY19tc2I7Cit9CisKIC8qKgogICogeGlsaW54X2RtYV9mcmVlX3R4X3NlZ21l bnQgLSBGcmVlIHRyYW5zYWN0aW9uIHNlZ21lbnQKICAqIEBjaGFuOiBEcml2ZXIgc3BlY2lmaWMg RE1BIGNoYW5uZWwKQEAgLTYwNCw3ICs2MjUsOSBAQCB4aWxpbnhfYXhpZG1hX2FsbG9jX3R4X3Nl Z21lbnQoc3RydWN0IHhpbGlueF9kbWFfY2hhbiAqY2hhbikKIHN0YXRpYyB2b2lkIHhpbGlueF9k bWFfZnJlZV90eF9zZWdtZW50KHN0cnVjdCB4aWxpbnhfZG1hX2NoYW4gKmNoYW4sCiAJCQkJc3Ry dWN0IHhpbGlueF9heGlkbWFfdHhfc2VnbWVudCAqc2VnbWVudCkKIHsKLQlkbWFfcG9vbF9mcmVl KGNoYW4tPmRlc2NfcG9vbCwgc2VnbWVudCwgc2VnbWVudC0+cGh5cyk7CisJeGlsaW54X2RtYV9j bGVhbl9od19kZXNjKCZzZWdtZW50LT5odyk7CisKKwlsaXN0X2FkZF90YWlsKCZzZWdtZW50LT5u b2RlLCAmY2hhbi0+ZnJlZV9zZWdfbGlzdCk7CiB9CiAKIC8qKgpAQCAtNzI5LDE2ICs3NTIsMjYg QEAgc3RhdGljIHZvaWQgeGlsaW54X2RtYV9mcmVlX2Rlc2NyaXB0b3JzKHN0cnVjdCB4aWxpbnhf ZG1hX2NoYW4gKmNoYW4pCiBzdGF0aWMgdm9pZCB4aWxpbnhfZG1hX2ZyZWVfY2hhbl9yZXNvdXJj ZXMoc3RydWN0IGRtYV9jaGFuICpkY2hhbikKIHsKIAlzdHJ1Y3QgeGlsaW54X2RtYV9jaGFuICpj aGFuID0gdG9feGlsaW54X2NoYW4oZGNoYW4pOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlk ZXZfZGJnKGNoYW4tPmRldiwgIkZyZWUgYWxsIGNoYW5uZWwgcmVzb3VyY2VzLlxuIik7CiAKIAl4 aWxpbnhfZG1hX2ZyZWVfZGVzY3JpcHRvcnMoY2hhbik7CisKIAlpZiAoY2hhbi0+eGRldi0+ZG1h X2NvbmZpZy0+ZG1hdHlwZSA9PSBYRE1BX1RZUEVfQVhJRE1BKSB7Ci0JCXhpbGlueF9kbWFfZnJl ZV90eF9zZWdtZW50KGNoYW4sIGNoYW4tPmN5Y2xpY19zZWdfdik7Ci0JCXhpbGlueF9kbWFfZnJl ZV90eF9zZWdtZW50KGNoYW4sIGNoYW4tPnNlZ192KTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmNo YW4tPmxvY2ssIGZsYWdzKTsKKwkJSU5JVF9MSVNUX0hFQUQoJmNoYW4tPmZyZWVfc2VnX2xpc3Qp OworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGFuLT5sb2NrLCBmbGFncyk7CisKKwkJLyog RnJlZSBNZW1vcnkgdGhhdCBpcyBhbGxvY2F0ZWQgZm9yIGN5Y2xpYyBETUEgTW9kZSAqLworCQlk bWFfZnJlZV9jb2hlcmVudChjaGFuLT5kZXYsIHNpemVvZigqY2hhbi0+Y3ljbGljX3NlZ192KSwK KwkJCQkgIGNoYW4tPmN5Y2xpY19zZWdfdiwgY2hhbi0+Y3ljbGljX3NlZ19wKTsKKwl9CisKKwlp ZiAoY2hhbi0+eGRldi0+ZG1hX2NvbmZpZy0+ZG1hdHlwZSAhPSBYRE1BX1RZUEVfQVhJRE1BKSB7 CisJCWRtYV9wb29sX2Rlc3Ryb3koY2hhbi0+ZGVzY19wb29sKTsKKwkJY2hhbi0+ZGVzY19wb29s ID0gTlVMTDsKIAl9Ci0JZG1hX3Bvb2xfZGVzdHJveShjaGFuLT5kZXNjX3Bvb2wpOwotCWNoYW4t PmRlc2NfcG9vbCA9IE5VTEw7CiB9CiAKIC8qKgpAQCAtODIxLDYgKzg1NCw3IEBAIHN0YXRpYyB2 b2lkIHhpbGlueF9kbWFfZG9fdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpCiBzdGF0aWMgaW50 IHhpbGlueF9kbWFfYWxsb2NfY2hhbl9yZXNvdXJjZXMoc3RydWN0IGRtYV9jaGFuICpkY2hhbikK IHsKIAlzdHJ1Y3QgeGlsaW54X2RtYV9jaGFuICpjaGFuID0gdG9feGlsaW54X2NoYW4oZGNoYW4p OworCWludCBpOwogCiAJLyogSGFzIHRoaXMgY2hhbm5lbCBhbHJlYWR5IGJlZW4gYWxsb2NhdGVk PyAqLwogCWlmIChjaGFuLT5kZXNjX3Bvb2wpCkBAIC04MzEsMTEgKzg2NSwzMCBAQCBzdGF0aWMg aW50IHhpbGlueF9kbWFfYWxsb2NfY2hhbl9yZXNvdXJjZXMoc3RydWN0IGRtYV9jaGFuICpkY2hh bikKIAkgKiBmb3IgbWVldGluZyBYaWxpbnggVkRNQSBzcGVjaWZpY2F0aW9uIHJlcXVpcmVtZW50 LgogCSAqLwogCWlmIChjaGFuLT54ZGV2LT5kbWFfY29uZmlnLT5kbWF0eXBlID09IFhETUFfVFlQ RV9BWElETUEpIHsKLQkJY2hhbi0+ZGVzY19wb29sID0gZG1hX3Bvb2xfY3JlYXRlKCJ4aWxpbnhf ZG1hX2Rlc2NfcG9vbCIsCi0JCQkJICAgY2hhbi0+ZGV2LAotCQkJCSAgIHNpemVvZihzdHJ1Y3Qg eGlsaW54X2F4aWRtYV90eF9zZWdtZW50KSwKLQkJCQkgICBfX2FsaWdub2ZfXyhzdHJ1Y3QgeGls aW54X2F4aWRtYV90eF9zZWdtZW50KSwKLQkJCQkgICAwKTsKKwkJLyogQWxsb2NhdGUgdGhlIGJ1 ZmZlciBkZXNjcmlwdG9ycy4gKi8KKwkJY2hhbi0+c2VnX3YgPSBkbWFfemFsbG9jX2NvaGVyZW50 KGNoYW4tPmRldiwKKwkJCQkJCSAgc2l6ZW9mKCpjaGFuLT5zZWdfdikgKgorCQkJCQkJICBYSUxJ TlhfRE1BX05VTV9ERVNDUywKKwkJCQkJCSAgJmNoYW4tPnNlZ19wLCBHRlBfS0VSTkVMKTsKKwkJ aWYgKCFjaGFuLT5zZWdfdikgeworCQkJZGV2X2VycihjaGFuLT5kZXYsCisJCQkJInVuYWJsZSB0 byBhbGxvY2F0ZSBjaGFubmVsICVkIGRlc2NyaXB0b3JzXG4iLAorCQkJCWNoYW4tPmlkKTsKKwkJ CXJldHVybiAtRU5PTUVNOworCQl9CisKKwkJZm9yIChpID0gMDsgaSA8IFhJTElOWF9ETUFfTlVN X0RFU0NTOyBpKyspIHsKKwkJCWNoYW4tPnNlZ192W2ldLmh3Lm5leHRfZGVzYyA9CisJCQlsb3dl cl8zMl9iaXRzKGNoYW4tPnNlZ19wICsgc2l6ZW9mKCpjaGFuLT5zZWdfdikgKgorCQkJCSgoaSAr IDEpICUgWElMSU5YX0RNQV9OVU1fREVTQ1MpKTsKKwkJCWNoYW4tPnNlZ192W2ldLmh3Lm5leHRf ZGVzY19tc2IgPQorCQkJdXBwZXJfMzJfYml0cyhjaGFuLT5zZWdfcCArIHNpemVvZigqY2hhbi0+ c2VnX3YpICoKKwkJCQkoKGkgKyAxKSAlIFhJTElOWF9ETUFfTlVNX0RFU0NTKSk7CisJCQljaGFu LT5zZWdfdltpXS5waHlzID0gY2hhbi0+c2VnX3AgKworCQkJCXNpemVvZigqY2hhbi0+c2VnX3Yp ICogaTsKKwkJCWxpc3RfYWRkX3RhaWwoJmNoYW4tPnNlZ192W2ldLm5vZGUsCisJCQkJICAgICAg JmNoYW4tPmZyZWVfc2VnX2xpc3QpOworCQl9CiAJfSBlbHNlIGlmIChjaGFuLT54ZGV2LT5kbWFf Y29uZmlnLT5kbWF0eXBlID09IFhETUFfVFlQRV9DRE1BKSB7CiAJCWNoYW4tPmRlc2NfcG9vbCA9 IGRtYV9wb29sX2NyZWF0ZSgieGlsaW54X2NkbWFfZGVzY19wb29sIiwKIAkJCQkgICBjaGFuLT5k ZXYsCkBAIC04NTAsNyArOTAzLDggQEAgc3RhdGljIGludCB4aWxpbnhfZG1hX2FsbG9jX2NoYW5f cmVzb3VyY2VzKHN0cnVjdCBkbWFfY2hhbiAqZGNoYW4pCiAJCQkJICAgICAwKTsKIAl9CiAKLQlp ZiAoIWNoYW4tPmRlc2NfcG9vbCkgeworCWlmICghY2hhbi0+ZGVzY19wb29sICYmCisJICAgIChj aGFuLT54ZGV2LT5kbWFfY29uZmlnLT5kbWF0eXBlICE9IFhETUFfVFlQRV9BWElETUEpKSB7CiAJ CWRldl9lcnIoY2hhbi0+ZGV2LAogCQkJInVuYWJsZSB0byBhbGxvY2F0ZSBjaGFubmVsICVkIGRl c2NyaXB0b3IgcG9vbFxuIiwKIAkJCWNoYW4tPmlkKTsKQEAgLTg1OSwyMiArOTEzLDIwIEBAIHN0 YXRpYyBpbnQgeGlsaW54X2RtYV9hbGxvY19jaGFuX3Jlc291cmNlcyhzdHJ1Y3QgZG1hX2NoYW4g KmRjaGFuKQogCiAJaWYgKGNoYW4tPnhkZXYtPmRtYV9jb25maWctPmRtYXR5cGUgPT0gWERNQV9U WVBFX0FYSURNQSkgewogCQkvKgotCQkgKiBGb3IgQVhJIERNQSBjYXNlIGFmdGVyIHN1Ym1pdHRp bmcgYSBwZW5kaW5nX2xpc3QsIGtlZXAKLQkJICogYW4gZXh0cmEgc2VnbWVudCBhbGxvY2F0ZWQg c28gdGhhdCB0aGUgIm5leHQgZGVzY3JpcHRvciIKLQkJICogcG9pbnRlciBvbiB0aGUgdGFpbCBk ZXNjcmlwdG9yIGFsd2F5cyBwb2ludHMgdG8gYQotCQkgKiB2YWxpZCBkZXNjcmlwdG9yLCBldmVu IHdoZW4gcGF1c2VkIGFmdGVyIHJlYWNoaW5nIHRhaWxkZXNjLgotCQkgKiBUaGlzIHdheSwgaXQg aXMgcG9zc2libGUgdG8gaXNzdWUgYWRkaXRpb25hbAotCQkgKiB0cmFuc2ZlcnMgd2l0aG91dCBo YWx0aW5nIGFuZCByZXN0YXJ0aW5nIHRoZSBjaGFubmVsLgotCQkgKi8KLQkJY2hhbi0+c2VnX3Yg PSB4aWxpbnhfYXhpZG1hX2FsbG9jX3R4X3NlZ21lbnQoY2hhbik7Ci0KLQkJLyoKIAkJICogRm9y IGN5Y2xpYyBETUEgbW9kZSB3ZSBuZWVkIHRvIHByb2dyYW0gdGhlIHRhaWwgRGVzY3JpcHRvcgog CQkgKiByZWdpc3RlciB3aXRoIGEgdmFsdWUgd2hpY2ggaXMgbm90IGEgcGFydCBvZiB0aGUgQkQg Y2hhaW4KIAkJICogc28gYWxsb2NhdGluZyBhIGRlc2Mgc2VnbWVudCBkdXJpbmcgY2hhbm5lbCBh bGxvY2F0aW9uIGZvcgogCQkgKiBwcm9ncmFtbWluZyB0YWlsIGRlc2NyaXB0b3IuCiAJCSAqLwot CQljaGFuLT5jeWNsaWNfc2VnX3YgPSB4aWxpbnhfYXhpZG1hX2FsbG9jX3R4X3NlZ21lbnQoY2hh bik7CisJCWNoYW4tPmN5Y2xpY19zZWdfdiA9IGRtYV96YWxsb2NfY29oZXJlbnQoY2hhbi0+ZGV2 LAorCQkJCQlzaXplb2YoKmNoYW4tPmN5Y2xpY19zZWdfdiksCisJCQkJCSZjaGFuLT5jeWNsaWNf c2VnX3AsIEdGUF9LRVJORUwpOworCQlpZiAoIWNoYW4tPmN5Y2xpY19zZWdfdikgeworCQkJZGV2 X2VycihjaGFuLT5kZXYsCisJCQkJInVuYWJsZSB0byBhbGxvY2F0ZSBkZXNjIHNlZ21lbnQgZm9y IGN5Y2xpYyBETUFcbiIpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJY2hhbi0+Y3ljbGlj X3NlZ192LT5waHlzID0gY2hhbi0+Y3ljbGljX3NlZ19wOwogCX0KIAogCWRtYV9jb29raWVfaW5p dChkY2hhbik7CkBAIC0xMTg0LDcgKzEyMzYsNyBAQCBzdGF0aWMgdm9pZCB4aWxpbnhfY2RtYV9z dGFydF90cmFuc2ZlcihzdHJ1Y3QgeGlsaW54X2RtYV9jaGFuICpjaGFuKQogc3RhdGljIHZvaWQg eGlsaW54X2RtYV9zdGFydF90cmFuc2ZlcihzdHJ1Y3QgeGlsaW54X2RtYV9jaGFuICpjaGFuKQog ewogCXN0cnVjdCB4aWxpbnhfZG1hX3R4X2Rlc2NyaXB0b3IgKmhlYWRfZGVzYywgKnRhaWxfZGVz YzsKLQlzdHJ1Y3QgeGlsaW54X2F4aWRtYV90eF9zZWdtZW50ICp0YWlsX3NlZ21lbnQsICpvbGRf aGVhZCwgKm5ld19oZWFkOworCXN0cnVjdCB4aWxpbnhfYXhpZG1hX3R4X3NlZ21lbnQgKnRhaWxf c2VnbWVudDsKIAl1MzIgcmVnOwogCiAJaWYgKGNoYW4tPmVycikKQEAgLTEyMDMsMjEgKzEyNTUs NiBAQCBzdGF0aWMgdm9pZCB4aWxpbnhfZG1hX3N0YXJ0X3RyYW5zZmVyKHN0cnVjdCB4aWxpbnhf ZG1hX2NoYW4gKmNoYW4pCiAJdGFpbF9zZWdtZW50ID0gbGlzdF9sYXN0X2VudHJ5KCZ0YWlsX2Rl c2MtPnNlZ21lbnRzLAogCQkJCSAgICAgICBzdHJ1Y3QgeGlsaW54X2F4aWRtYV90eF9zZWdtZW50 LCBub2RlKTsKIAotCWlmIChjaGFuLT5oYXNfc2cgJiYgIWNoYW4tPnhkZXYtPm1jZG1hKSB7Ci0J CW9sZF9oZWFkID0gbGlzdF9maXJzdF9lbnRyeSgmaGVhZF9kZXNjLT5zZWdtZW50cywKLQkJCQkJ c3RydWN0IHhpbGlueF9heGlkbWFfdHhfc2VnbWVudCwgbm9kZSk7Ci0JCW5ld19oZWFkID0gY2hh bi0+c2VnX3Y7Ci0JCS8qIENvcHkgQnVmZmVyIERlc2NyaXB0b3IgZmllbGRzLiAqLwotCQluZXdf aGVhZC0+aHcgPSBvbGRfaGVhZC0+aHc7Ci0KLQkJLyogU3dhcCBhbmQgc2F2ZSBuZXcgcmVzZXJ2 ZSAqLwotCQlsaXN0X3JlcGxhY2VfaW5pdCgmb2xkX2hlYWQtPm5vZGUsICZuZXdfaGVhZC0+bm9k ZSk7Ci0JCWNoYW4tPnNlZ192ID0gb2xkX2hlYWQ7Ci0KLQkJdGFpbF9zZWdtZW50LT5ody5uZXh0 X2Rlc2MgPSBjaGFuLT5zZWdfdi0+cGh5czsKLQkJaGVhZF9kZXNjLT5hc3luY190eC5waHlzID0g bmV3X2hlYWQtPnBoeXM7Ci0JfQotCiAJcmVnID0gZG1hX2N0cmxfcmVhZChjaGFuLCBYSUxJTlhf RE1BX1JFR19ETUFDUik7CiAKIAlpZiAoY2hhbi0+ZGVzY19wZW5kaW5nY291bnQgPD0gWElMSU5Y X0RNQV9DT0FMRVNDRV9NQVgpIHsKQEAgLTE3MDUsNyArMTc0Miw3IEBAIHN0YXRpYyBzdHJ1Y3Qg ZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnhpbGlueF9kbWFfcHJlcF9zbGF2ZV9zZygKIHsKIAlz dHJ1Y3QgeGlsaW54X2RtYV9jaGFuICpjaGFuID0gdG9feGlsaW54X2NoYW4oZGNoYW4pOwogCXN0 cnVjdCB4aWxpbnhfZG1hX3R4X2Rlc2NyaXB0b3IgKmRlc2M7Ci0Jc3RydWN0IHhpbGlueF9heGlk bWFfdHhfc2VnbWVudCAqc2VnbWVudCA9IE5VTEwsICpwcmV2ID0gTlVMTDsKKwlzdHJ1Y3QgeGls aW54X2F4aWRtYV90eF9zZWdtZW50ICpzZWdtZW50ID0gTlVMTDsKIAl1MzIgKmFwcF93ID0gKHUz MiAqKWNvbnRleHQ7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKIAlzaXplX3QgY29weTsKQEAg LTE3NTYsMTAgKzE3OTMsNiBAQCBzdGF0aWMgc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9y ICp4aWxpbnhfZG1hX3ByZXBfc2xhdmVfc2coCiAJCQkJCSAgICAgICBYSUxJTlhfRE1BX05VTV9B UFBfV09SRFMpOwogCQkJfQogCi0JCQlpZiAocHJldikKLQkJCQlwcmV2LT5ody5uZXh0X2Rlc2Mg PSBzZWdtZW50LT5waHlzOwotCi0JCQlwcmV2ID0gc2VnbWVudDsKIAkJCXNnX3VzZWQgKz0gY29w eTsKIAogCQkJLyoKQEAgLTE3NzMsNyArMTgwNiw2IEBAIHN0YXRpYyBzdHJ1Y3QgZG1hX2FzeW5j X3R4X2Rlc2NyaXB0b3IgKnhpbGlueF9kbWFfcHJlcF9zbGF2ZV9zZygKIAlzZWdtZW50ID0gbGlz dF9maXJzdF9lbnRyeSgmZGVzYy0+c2VnbWVudHMsCiAJCQkJICAgc3RydWN0IHhpbGlueF9heGlk bWFfdHhfc2VnbWVudCwgbm9kZSk7CiAJZGVzYy0+YXN5bmNfdHgucGh5cyA9IHNlZ21lbnQtPnBo eXM7Ci0JcHJldi0+aHcubmV4dF9kZXNjID0gc2VnbWVudC0+cGh5czsKIAogCS8qIEZvciB0aGUg bGFzdCBETUFfTUVNX1RPX0RFViB0cmFuc2Zlciwgc2V0IEVPUCAqLwogCWlmIChjaGFuLT5kaXJl Y3Rpb24gPT0gRE1BX01FTV9UT19ERVYpIHsKQEAgLTIzMjgsNiArMjM2MCw3IEBAIHN0YXRpYyBp bnQgeGlsaW54X2RtYV9jaGFuX3Byb2JlKHN0cnVjdCB4aWxpbnhfZG1hX2RldmljZSAqeGRldiwK IAlJTklUX0xJU1RfSEVBRCgmY2hhbi0+cGVuZGluZ19saXN0KTsKIAlJTklUX0xJU1RfSEVBRCgm Y2hhbi0+ZG9uZV9saXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmY2hhbi0+YWN0aXZlX2xpc3QpOwor CUlOSVRfTElTVF9IRUFEKCZjaGFuLT5mcmVlX3NlZ19saXN0KTsKIAogCS8qIFJldHJpZXZlIHRo ZSBjaGFubmVsIHByb3BlcnRpZXMgZnJvbSB0aGUgZGV2aWNlIHRyZWUgKi8KIAloYXNfZHJlID0g b2ZfcHJvcGVydHlfcmVhZF9ib29sKG5vZGUsICJ4bG54LGluY2x1ZGUtZHJlIik7Cg==