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: dmaengine: dmatest: wrap src & dst data into a struct From: Vinod Koul Message-Id: <20190119130742.GF4635@vkoul-mobl> Date: Sat, 19 Jan 2019 18:37:42 +0530 To: Alexandru Ardelean Cc: dmaengine@vger.kernel.org List-ID: SGkgQWxleGFuZHJ1LAoKT24gMjYtMTEtMTgsIDEwOjQzLCBBbGV4YW5kcnUgQXJkZWxlYW4gd3Jv dGU6Cj4gVGhlcmUncyBhIGJpdCB0b28gbXVjaCB1bi13cmFwcGVkICYgZHVwbGljYXRlZCBjb2Rl IHRoYXQgY2FuIGJlIG9yZ2FuaXplZAo+IGludG8gc29tZSBjb21tb24gbG9naWMvZnVuY3Rpb25z Lgo+IAo+IFRoaXMgY2hhbmdlIHdyYXBzIGFsbCB0aGUgY29tbW9uIHBhcnRzIGJldHdlZW4gc3Jj cyAmIGRzdHMgaW50byBhCj4gYGRtYXRlc3RfZGF0YWAgc3RydWN0LiBUaGUgcHVycG9zZSBpcyB0 byBzcGxpdCB0aGUgYGRtYXRlc3RmdW5jYCBpbnRvCj4gc21hbGxlciBjaHVua3MgdGhhdCBhcmUg ZWFzaWVyIHRvIGZvbGxvdyAmIGV4dGVuZC4KClRoYW5rcyBmb3IgdGhlIHBhdGNoLCB0aGlzIGxv b2tzIGdvb2QgYnV0IHNvbWVob3cgc2VlbXMgdG8gaGF2ZSBzbGlwcGVkCmJ5Li4KCj4gCj4gU2ln bmVkLW9mZi1ieTogQWxleGFuZHJ1IEFyZGVsZWFuIDxhbGV4YW5kcnUuYXJkZWxlYW5AYW5hbG9n LmNvbT4KPiAtLS0KPiAgZHJpdmVycy9kbWEvZG1hdGVzdC5jIHwgMjU3ICsrKysrKysrKysrKysr KysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLQo+ICAxIGZpbGUgY2hhbmdlZCwgMTMzIGluc2Vy dGlvbnMoKyksIDEyNCBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEv ZG1hdGVzdC5jIGIvZHJpdmVycy9kbWEvZG1hdGVzdC5jCj4gaW5kZXggZTcxYWExZTM0NTFjLi5j MzdjNjQzZTdkMjkgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9kbWEvZG1hdGVzdC5jCj4gKysrIGIv ZHJpdmVycy9kbWEvZG1hdGVzdC5jCj4gQEAgLTE2NiwxNSArMTY2LDIwIEBAIHN0cnVjdCBkbWF0 ZXN0X2RvbmUgewo+ICAJd2FpdF9xdWV1ZV9oZWFkX3QJKndhaXQ7Cj4gIH07Cj4gIAo+ICtzdHJ1 Y3QgZG1hdGVzdF9kYXRhIHsKPiArCXU4CQkqKnJhdzsKPiArCXU4CQkqKmFsaWduZWQ7Cj4gKwl1 bnNpZ25lZCBpbnQJY250Owo+ICsJdW5zaWduZWQgaW50CW9mZjsKPiArfTsKPiArCj4gIHN0cnVj dCBkbWF0ZXN0X3RocmVhZCB7Cj4gIAlzdHJ1Y3QgbGlzdF9oZWFkCW5vZGU7Cj4gIAlzdHJ1Y3Qg ZG1hdGVzdF9pbmZvCSppbmZvOwo+ICAJc3RydWN0IHRhc2tfc3RydWN0CSp0YXNrOwo+ICAJc3Ry dWN0IGRtYV9jaGFuCQkqY2hhbjsKPiAtCXU4CQkJKipzcmNzOwo+IC0JdTgJCQkqKnVzcmNzOwo+ IC0JdTgJCQkqKmRzdHM7Cj4gLQl1OAkJCSoqdWRzdHM7Cj4gKwlzdHJ1Y3QgZG1hdGVzdF9kYXRh CXNyYzsKPiArCXN0cnVjdCBkbWF0ZXN0X2RhdGEJZHN0Owo+ICAJZW51bSBkbWFfdHJhbnNhY3Rp b25fdHlwZSB0eXBlOwo+ICAJd2FpdF9xdWV1ZV9oZWFkX3QgZG9uZV93YWl0Owo+ICAJc3RydWN0 IGRtYXRlc3RfZG9uZSB0ZXN0X2RvbmU7Cj4gQEAgLTQyOCw2ICs0MzMsNTMgQEAgc3RhdGljIHVu c2lnbmVkIGxvbmcgbG9uZyBkbWF0ZXN0X0tCcyhzNjQgcnVudGltZSwgdW5zaWduZWQgbG9uZyBs b25nIGxlbikKPiAgCXJldHVybiBkbWF0ZXN0X3BlcnNlYyhydW50aW1lLCBsZW4gPj4gMTApOwo+ ICB9Cj4gIAo+ICtzdGF0aWMgdm9pZCBfX2RtYXRlc3RfZnJlZV90ZXN0X2RhdGEoc3RydWN0IGRt YXRlc3RfZGF0YSAqZCwgdW5zaWduZWQgaW50IGNudCkKPiArewo+ICsJdW5zaWduZWQgaW50IGk7 Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IGNudDsgaSsrKQo+ICsJCWtmcmVlKGQtPnJhd1tpXSk7 Cj4gKwo+ICsJa2ZyZWUoZC0+YWxpZ25lZCk7Cj4gKwlrZnJlZShkLT5yYXcpOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgdm9pZCBkbWF0ZXN0X2ZyZWVfdGVzdF9kYXRhKHN0cnVjdCBkbWF0ZXN0X2RhdGEg KmQpCj4gK3sKPiArCV9fZG1hdGVzdF9mcmVlX3Rlc3RfZGF0YShkLCBkLT5jbnQpOwo+ICt9Cgp3 aHkgZG8gd2UgbmVlZCBhIHdyYXBwZXIgaGVyZT8KCj4gKwo+ICtzdGF0aWMgaW50IGRtYXRlc3Rf YWxsb2NfdGVzdF9kYXRhKHN0cnVjdCBkbWF0ZXN0X2RhdGEgKmQsCj4gKwkJdW5zaWduZWQgaW50 IGJ1Zl9zaXplLCB1OCBhbGlnbikKPiArewo+ICsJdW5zaWduZWQgaW50IGkgPSAwOwoKc3VwZXJm bHVvdXMgaW5pdGlhbGl6YXRpb24KCj4gKwlkLT5yYXcgPSBrY2FsbG9jKGQtPmNudCArIDEsIHNp emVvZih1OCAqKSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIWQtPnJhdykKPiArCQlyZXR1cm4gLUVO T01FTTsKPiArCj4gKwlkLT5hbGlnbmVkID0ga2NhbGxvYyhkLT5jbnQgKyAxLCBzaXplb2YodTgg KiksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFkLT5hbGlnbmVkKQo+ICsJCWdvdG8gZXJyOwo+ICsK PiArCWZvciAoaSA9IDA7IGkgPCBkLT5jbnQ7IGkrKykgewo+ICsJCWQtPnJhd1tpXSA9IGttYWxs b2MoYnVmX3NpemUgKyBhbGlnbiwgR0ZQX0tFUk5FTCk7Cj4gKwkJaWYgKCFkLT5yYXdbaV0pCj4g KwkJCWdvdG8gZXJyOwo+ICsKPiArCQkvKiBhbGlnbiB0byBhbGlnbm1lbnQgcmVzdHJpY3Rpb24g Ki8KPiArCQlpZiAoYWxpZ24pCj4gKwkJCWQtPmFsaWduZWRbaV0gPSBQVFJfQUxJR04oZC0+cmF3 W2ldLCBhbGlnbik7Cj4gKwkJZWxzZQo+ICsJCQlkLT5hbGlnbmVkW2ldID0gZC0+cmF3W2ldOwo+ ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICtlcnI6Cj4gKwlfX2RtYXRlc3RfZnJlZV90ZXN0X2Rh dGEoZCwgaSk7Cj4gKwlyZXR1cm4gLUVOT01FTTsKPiArfQo+ICsKPiAgLyoKPiAgICogVGhpcyBm dW5jdGlvbiByZXBlYXRlZGx5IHRlc3RzIERNQSB0cmFuc2ZlcnMgb2YgdmFyaW91cyBsZW5ndGhz IGFuZAo+ICAgKiBvZmZzZXRzIGZvciBhIGdpdmVuIG9wZXJhdGlvbiB0eXBlIHVudGlsIGl0IGlz IHRvbGQgdG8gZXhpdCBieQo+IEBAIC00NTgsOCArNTEwLDkgQEAgc3RhdGljIGludCBkbWF0ZXN0 X2Z1bmModm9pZCAqZGF0YSkKPiAgCWVudW0gZG1hX2N0cmxfZmxhZ3MgCWZsYWdzOwo+ICAJdTgJ CQkqcHFfY29lZnMgPSBOVUxMOwo+ICAJaW50CQkJcmV0Owo+IC0JaW50CQkJc3JjX2NudDsKPiAt CWludAkJCWRzdF9jbnQ7Cj4gKwl1bnNpZ25lZCBpbnQgCQlidWZfc2l6ZTsKPiArCXN0cnVjdCBk bWF0ZXN0X2RhdGEJKnNyYzsKPiArCXN0cnVjdCBkbWF0ZXN0X2RhdGEJKmRzdDsKPiAgCWludAkJ CWk7Cj4gIAlrdGltZV90CQkJa3RpbWUsIHN0YXJ0LCBkaWZmOwo+ICAJa3RpbWVfdAkJCWZpbGx0 aW1lID0gMDsKPiBAQCAtNDgwLDk5ICs1MzMsNjQgQEAgc3RhdGljIGludCBkbWF0ZXN0X2Z1bmMo dm9pZCAqZGF0YSkKPiAgCXBhcmFtcyA9ICZpbmZvLT5wYXJhbXM7Cj4gIAljaGFuID0gdGhyZWFk LT5jaGFuOwo+ICAJZGV2ID0gY2hhbi0+ZGV2aWNlOwo+ICsJc3JjID0gJnRocmVhZC0+c3JjOwo+ ICsJZHN0ID0gJnRocmVhZC0+ZHN0Owo+ICAJaWYgKHRocmVhZC0+dHlwZSA9PSBETUFfTUVNQ1BZ KSB7Cj4gIAkJYWxpZ24gPSBkZXYtPmNvcHlfYWxpZ247Cj4gLQkJc3JjX2NudCA9IGRzdF9jbnQg PSAxOwo+ICsJCXNyYy0+Y250ID0gZHN0LT5jbnQgPSAxOwo+ICAJfSBlbHNlIGlmICh0aHJlYWQt PnR5cGUgPT0gRE1BX01FTVNFVCkgewo+ICAJCWFsaWduID0gZGV2LT5maWxsX2FsaWduOwo+IC0J CXNyY19jbnQgPSBkc3RfY250ID0gMTsKPiArCQlzcmMtPmNudCA9IGRzdC0+Y250ID0gMTsKPiAg CQlpc19tZW1zZXQgPSB0cnVlOwo+ICAJfSBlbHNlIGlmICh0aHJlYWQtPnR5cGUgPT0gRE1BX1hP Uikgewo+ICAJCS8qIGZvcmNlIG9kZCB0byBlbnN1cmUgZHN0ID0gc3JjICovCj4gLQkJc3JjX2Nu dCA9IG1pbl9vZGQocGFyYW1zLT54b3Jfc291cmNlcyB8IDEsIGRldi0+bWF4X3hvcik7Cj4gLQkJ ZHN0X2NudCA9IDE7Cj4gKwkJc3JjLT5jbnQgPSBtaW5fb2RkKHBhcmFtcy0+eG9yX3NvdXJjZXMg fCAxLCBkZXYtPm1heF94b3IpOwo+ICsJCWRzdC0+Y250ID0gMTsKPiAgCQlhbGlnbiA9IGRldi0+ eG9yX2FsaWduOwo+ICAJfSBlbHNlIGlmICh0aHJlYWQtPnR5cGUgPT0gRE1BX1BRKSB7Cj4gIAkJ LyogZm9yY2Ugb2RkIHRvIGVuc3VyZSBkc3QgPSBzcmMgKi8KPiAtCQlzcmNfY250ID0gbWluX29k ZChwYXJhbXMtPnBxX3NvdXJjZXMgfCAxLCBkbWFfbWF4cHEoZGV2LCAwKSk7Cj4gLQkJZHN0X2Nu dCA9IDI7Cj4gKwkJc3JjLT5jbnQgPSBtaW5fb2RkKHBhcmFtcy0+cHFfc291cmNlcyB8IDEsIGRt YV9tYXhwcShkZXYsIDApKTsKPiArCQlkc3QtPmNudCA9IDI7Cj4gIAkJYWxpZ24gPSBkZXYtPnBx X2FsaWduOwo+ICAKPiAgCQlwcV9jb2VmcyA9IGttYWxsb2MocGFyYW1zLT5wcV9zb3VyY2VzICsg MSwgR0ZQX0tFUk5FTCk7Cj4gIAkJaWYgKCFwcV9jb2VmcykKPiAgCQkJZ290byBlcnJfdGhyZWFk X3R5cGU7Cj4gIAo+IC0JCWZvciAoaSA9IDA7IGkgPCBzcmNfY250OyBpKyspCj4gKwkJZm9yIChp ID0gMDsgaSA8IHNyYy0+Y250OyBpKyspCj4gIAkJCXBxX2NvZWZzW2ldID0gMTsKPiAgCX0gZWxz ZQo+ICAJCWdvdG8gZXJyX3RocmVhZF90eXBlOwo+ICAKPiAgCS8qIENoZWNrIGlmIGJ1ZmZlciBj b3VudCBmaXRzIGludG8gbWFwIGNvdW50IHZhcmlhYmxlICh1OCkgKi8KPiAtCWlmICgoc3JjX2Nu dCArIGRzdF9jbnQpID49IDI1NSkgewo+ICsJaWYgKChzcmMtPmNudCArIGRzdC0+Y250KSA+PSAy NTUpIHsKPiAgCQlwcl9lcnIoInRvbyBtYW55IGJ1ZmZlcnMgKCVkIG9mIDI1NSBzdXBwb3J0ZWQp XG4iLAo+IC0JCSAgICAgICBzcmNfY250ICsgZHN0X2NudCk7Cj4gKwkJICAgICAgIHNyYy0+Y250 ICsgZHN0LT5jbnQpOwo+ICAJCWdvdG8gZXJyX3RocmVhZF90eXBlOwo+ICAJfQo+ICAKPiArCWJ1 Zl9zaXplID0gcGFyYW1zLT5idWZfc2l6ZTsKPiAgCWlmICgxIDw8IGFsaWduID4gcGFyYW1zLT5i dWZfc2l6ZSkgewo+ICAJCXByX2VycigiJXUtYnl0ZSBidWZmZXIgdG9vIHNtYWxsIGZvciAlZC1i eXRlIGFsaWdubWVudFxuIiwKPiAgCQkgICAgICAgcGFyYW1zLT5idWZfc2l6ZSwgMSA8PCBhbGln bik7Cj4gIAkJZ290byBlcnJfdGhyZWFkX3R5cGU7Cj4gIAl9Cj4gIAo+IC0JdGhyZWFkLT5zcmNz ID0ga2NhbGxvYyhzcmNfY250ICsgMSwgc2l6ZW9mKHU4ICopLCBHRlBfS0VSTkVMKTsKPiAtCWlm ICghdGhyZWFkLT5zcmNzKQo+IC0JCWdvdG8gZXJyX3NyY3M7Cj4gLQo+IC0JdGhyZWFkLT51c3Jj cyA9IGtjYWxsb2Moc3JjX2NudCArIDEsIHNpemVvZih1OCAqKSwgR0ZQX0tFUk5FTCk7Cj4gLQlp ZiAoIXRocmVhZC0+dXNyY3MpCj4gLQkJZ290byBlcnJfdXNyY3M7Cj4gKwlpZiAoZG1hdGVzdF9h bGxvY190ZXN0X2RhdGEoc3JjLCBidWZfc2l6ZSwgYWxpZ24pIDwgMCkKPiArCQlnb3RvIGVycl9z cmM7Cj4gIAo+IC0JZm9yIChpID0gMDsgaSA8IHNyY19jbnQ7IGkrKykgewo+IC0JCXRocmVhZC0+ dXNyY3NbaV0gPSBrbWFsbG9jKHBhcmFtcy0+YnVmX3NpemUgKyBhbGlnbiwKPiAtCQkJCQkgICBH RlBfS0VSTkVMKTsKPiAtCQlpZiAoIXRocmVhZC0+dXNyY3NbaV0pCj4gLQkJCWdvdG8gZXJyX3Ny Y2J1ZjsKPiAtCj4gLQkJLyogYWxpZ24gc3JjcyB0byBhbGlnbm1lbnQgcmVzdHJpY3Rpb24gKi8K PiAtCQlpZiAoYWxpZ24pCj4gLQkJCXRocmVhZC0+c3Jjc1tpXSA9IFBUUl9BTElHTih0aHJlYWQt PnVzcmNzW2ldLCBhbGlnbik7Cj4gLQkJZWxzZQo+IC0JCQl0aHJlYWQtPnNyY3NbaV0gPSB0aHJl YWQtPnVzcmNzW2ldOwo+IC0JfQo+IC0JdGhyZWFkLT5zcmNzW2ldID0gTlVMTDsKPiAtCj4gLQl0 aHJlYWQtPmRzdHMgPSBrY2FsbG9jKGRzdF9jbnQgKyAxLCBzaXplb2YodTggKiksIEdGUF9LRVJO RUwpOwo+IC0JaWYgKCF0aHJlYWQtPmRzdHMpCj4gLQkJZ290byBlcnJfZHN0czsKPiAtCj4gLQl0 aHJlYWQtPnVkc3RzID0ga2NhbGxvYyhkc3RfY250ICsgMSwgc2l6ZW9mKHU4ICopLCBHRlBfS0VS TkVMKTsKPiAtCWlmICghdGhyZWFkLT51ZHN0cykKPiAtCQlnb3RvIGVycl91ZHN0czsKPiAtCj4g LQlmb3IgKGkgPSAwOyBpIDwgZHN0X2NudDsgaSsrKSB7Cj4gLQkJdGhyZWFkLT51ZHN0c1tpXSA9 IGttYWxsb2MocGFyYW1zLT5idWZfc2l6ZSArIGFsaWduLAo+IC0JCQkJCSAgIEdGUF9LRVJORUwp Owo+IC0JCWlmICghdGhyZWFkLT51ZHN0c1tpXSkKPiAtCQkJZ290byBlcnJfZHN0YnVmOwo+IC0K PiAtCQkvKiBhbGlnbiBkc3RzIHRvIGFsaWdubWVudCByZXN0cmljdGlvbiAqLwo+IC0JCWlmIChh bGlnbikKPiAtCQkJdGhyZWFkLT5kc3RzW2ldID0gUFRSX0FMSUdOKHRocmVhZC0+dWRzdHNbaV0s IGFsaWduKTsKPiAtCQllbHNlCj4gLQkJCXRocmVhZC0+ZHN0c1tpXSA9IHRocmVhZC0+dWRzdHNb aV07Cj4gLQl9Cj4gLQl0aHJlYWQtPmRzdHNbaV0gPSBOVUxMOwo+ICsJaWYgKGRtYXRlc3RfYWxs b2NfdGVzdF9kYXRhKGRzdCwgYnVmX3NpemUsIGFsaWduKSA8IDApCj4gKwkJZ290byBlcnJfZHN0 Owo+ICAKPiAgCXNldF91c2VyX25pY2UoY3VycmVudCwgMTApOwo+ICAKPiAtCXNyY3MgPSBrY2Fs bG9jKHNyY19jbnQsIHNpemVvZihkbWFfYWRkcl90KSwgR0ZQX0tFUk5FTCk7Cj4gKwlzcmNzID0g a2NhbGxvYyhzcmMtPmNudCwgc2l6ZW9mKGRtYV9hZGRyX3QpLCBHRlBfS0VSTkVMKTsKPiAgCWlm ICghc3JjcykKPiAtCQlnb3RvIGVycl9kc3RidWY7Cj4gKwkJZ290byBlcnJfc3JjczsKPiAgCj4g LQlkbWFfcHEgPSBrY2FsbG9jKGRzdF9jbnQsIHNpemVvZihkbWFfYWRkcl90KSwgR0ZQX0tFUk5F TCk7Cj4gKwlkbWFfcHEgPSBrY2FsbG9jKGRzdC0+Y250LCBzaXplb2YoZG1hX2FkZHJfdCksIEdG UF9LRVJORUwpOwo+ICAJaWYgKCFkbWFfcHEpCj4gLQkJZ290byBlcnJfc3Jjc19hcnJheTsKPiAr CQlnb3RvIGVycl9kbWFfcHE7Cj4gIAo+ICAJLyoKPiAgCSAqIHNyYyBhbmQgZHN0IGJ1ZmZlcnMg YXJlIGZyZWVkIGJ5IG91cnNlbHZlcyBiZWxvdwo+IEBAIC01ODUsNyArNjAzLDcgQEAgc3RhdGlj IGludCBkbWF0ZXN0X2Z1bmModm9pZCAqZGF0YSkKPiAgCQlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rl c2NyaXB0b3IgKnR4ID0gTlVMTDsKPiAgCQlzdHJ1Y3QgZG1hZW5naW5lX3VubWFwX2RhdGEgKnVt Owo+ICAJCWRtYV9hZGRyX3QgKmRzdHM7Cj4gLQkJdW5zaWduZWQgaW50IHNyY19vZmYsIGRzdF9v ZmYsIGxlbjsKPiArCQl1bnNpZ25lZCBpbnQgbGVuOwo+ICAKPiAgCQl0b3RhbF90ZXN0cysrOwo+ ICAKPiBAQCAtNjAxLDU5ICs2MTksNTkgQEAgc3RhdGljIGludCBkbWF0ZXN0X2Z1bmModm9pZCAq ZGF0YSkKPiAgCQl0b3RhbF9sZW4gKz0gbGVuOwo+ICAKPiAgCQlpZiAocGFyYW1zLT5ub3JhbmRv bSkgewo+IC0JCQlzcmNfb2ZmID0gMDsKPiAtCQkJZHN0X29mZiA9IDA7Cj4gKwkJCXNyYy0+b2Zm ID0gMDsKPiArCQkJZHN0LT5vZmYgPSAwOwo+ICAJCX0gZWxzZSB7Cj4gLQkJCXNyY19vZmYgPSBk bWF0ZXN0X3JhbmRvbSgpICUgKHBhcmFtcy0+YnVmX3NpemUgLSBsZW4gKyAxKTsKPiAtCQkJZHN0 X29mZiA9IGRtYXRlc3RfcmFuZG9tKCkgJSAocGFyYW1zLT5idWZfc2l6ZSAtIGxlbiArIDEpOwo+ ICsJCQlzcmMtPm9mZiA9IGRtYXRlc3RfcmFuZG9tKCkgJSAocGFyYW1zLT5idWZfc2l6ZSAtIGxl biArIDEpOwo+ICsJCQlkc3QtPm9mZiA9IGRtYXRlc3RfcmFuZG9tKCkgJSAocGFyYW1zLT5idWZf c2l6ZSAtIGxlbiArIDEpOwo+ICAKPiAtCQkJc3JjX29mZiA9IChzcmNfb2ZmID4+IGFsaWduKSA8 PCBhbGlnbjsKPiAtCQkJZHN0X29mZiA9IChkc3Rfb2ZmID4+IGFsaWduKSA8PCBhbGlnbjsKPiAr CQkJc3JjLT5vZmYgPSAoc3JjLT5vZmYgPj4gYWxpZ24pIDw8IGFsaWduOwo+ICsJCQlkc3QtPm9m ZiA9IChkc3QtPm9mZiA+PiBhbGlnbikgPDwgYWxpZ247Cj4gIAkJfQo+ICAKPiAgCQlpZiAoIXBh cmFtcy0+bm92ZXJpZnkpIHsKPiAgCQkJc3RhcnQgPSBrdGltZV9nZXQoKTsKPiAtCQkJZG1hdGVz dF9pbml0X3NyY3ModGhyZWFkLT5zcmNzLCBzcmNfb2ZmLCBsZW4sCj4gKwkJCWRtYXRlc3RfaW5p dF9zcmNzKHNyYy0+YWxpZ25lZCwgc3JjLT5vZmYsIGxlbiwKPiAgCQkJCQkgIHBhcmFtcy0+YnVm X3NpemUsIGlzX21lbXNldCk7Cj4gLQkJCWRtYXRlc3RfaW5pdF9kc3RzKHRocmVhZC0+ZHN0cywg ZHN0X29mZiwgbGVuLAo+ICsJCQlkbWF0ZXN0X2luaXRfZHN0cyhkc3QtPmFsaWduZWQsIGRzdC0+ b2ZmLCBsZW4sCj4gIAkJCQkJICBwYXJhbXMtPmJ1Zl9zaXplLCBpc19tZW1zZXQpOwo+ICAKPiAg CQkJZGlmZiA9IGt0aW1lX3N1YihrdGltZV9nZXQoKSwgc3RhcnQpOwo+ICAJCQlmaWxsdGltZSA9 IGt0aW1lX2FkZChmaWxsdGltZSwgZGlmZik7Cj4gIAkJfQo+ICAKPiAtCQl1bSA9IGRtYWVuZ2lu ZV9nZXRfdW5tYXBfZGF0YShkZXYtPmRldiwgc3JjX2NudCArIGRzdF9jbnQsCj4gKwkJdW0gPSBk bWFlbmdpbmVfZ2V0X3VubWFwX2RhdGEoZGV2LT5kZXYsIHNyYy0+Y250ICsgZHN0LT5jbnQsCj4g IAkJCQkJICAgICAgR0ZQX0tFUk5FTCk7Cj4gIAkJaWYgKCF1bSkgewo+ICAJCQlmYWlsZWRfdGVz dHMrKzsKPiAgCQkJcmVzdWx0KCJ1bm1hcCBkYXRhIE5VTEwiLCB0b3RhbF90ZXN0cywKPiAtCQkJ ICAgICAgIHNyY19vZmYsIGRzdF9vZmYsIGxlbiwgcmV0KTsKPiArCQkJICAgICAgIHNyYy0+b2Zm LCBkc3QtPm9mZiwgbGVuLCByZXQpOwo+ICAJCQljb250aW51ZTsKPiAgCQl9Cj4gIAo+ICAJCXVt LT5sZW4gPSBwYXJhbXMtPmJ1Zl9zaXplOwo+IC0JCWZvciAoaSA9IDA7IGkgPCBzcmNfY250OyBp KyspIHsKPiAtCQkJdm9pZCAqYnVmID0gdGhyZWFkLT5zcmNzW2ldOwo+ICsJCWZvciAoaSA9IDA7 IGkgPCBzcmMtPmNudDsgaSsrKSB7Cj4gKwkJCXZvaWQgKmJ1ZiA9IHNyYy0+YWxpZ25lZFtpXTsK PiAgCQkJc3RydWN0IHBhZ2UgKnBnID0gdmlydF90b19wYWdlKGJ1Zik7Cj4gIAkJCXVuc2lnbmVk IGxvbmcgcGdfb2ZmID0gb2Zmc2V0X2luX3BhZ2UoYnVmKTsKPiAgCj4gIAkJCXVtLT5hZGRyW2ld ID0gZG1hX21hcF9wYWdlKGRldi0+ZGV2LCBwZywgcGdfb2ZmLAo+ICAJCQkJCQkgICB1bS0+bGVu LCBETUFfVE9fREVWSUNFKTsKPiAtCQkJc3Jjc1tpXSA9IHVtLT5hZGRyW2ldICsgc3JjX29mZjsK PiArCQkJc3Jjc1tpXSA9IHVtLT5hZGRyW2ldICsgc3JjLT5vZmY7Cj4gIAkJCXJldCA9IGRtYV9t YXBwaW5nX2Vycm9yKGRldi0+ZGV2LCB1bS0+YWRkcltpXSk7Cj4gIAkJCWlmIChyZXQpIHsKPiAg CQkJCWRtYWVuZ2luZV91bm1hcF9wdXQodW0pOwo+ICAJCQkJcmVzdWx0KCJzcmMgbWFwcGluZyBl cnJvciIsIHRvdGFsX3Rlc3RzLAo+IC0JCQkJICAgICAgIHNyY19vZmYsIGRzdF9vZmYsIGxlbiwg cmV0KTsKPiArCQkJCSAgICAgICBzcmMtPm9mZiwgZHN0LT5vZmYsIGxlbiwgcmV0KTsKPiAgCQkJ CWZhaWxlZF90ZXN0cysrOwo+ICAJCQkJY29udGludWU7Cj4gIAkJCX0KPiAgCQkJdW0tPnRvX2Nu dCsrOwo+ICAJCX0KPiAgCQkvKiBtYXAgd2l0aCBETUFfQklESVJFQ1RJT05BTCB0byBmb3JjZSB3 cml0ZWJhY2svaW52YWxpZGF0ZSAqLwo+IC0JCWRzdHMgPSAmdW0tPmFkZHJbc3JjX2NudF07Cj4g LQkJZm9yIChpID0gMDsgaSA8IGRzdF9jbnQ7IGkrKykgewo+IC0JCQl2b2lkICpidWYgPSB0aHJl YWQtPmRzdHNbaV07Cj4gKwkJZHN0cyA9ICZ1bS0+YWRkcltzcmMtPmNudF07Cj4gKwkJZm9yIChp ID0gMDsgaSA8IGRzdC0+Y250OyBpKyspIHsKPiArCQkJdm9pZCAqYnVmID0gZHN0LT5hbGlnbmVk W2ldOwo+ICAJCQlzdHJ1Y3QgcGFnZSAqcGcgPSB2aXJ0X3RvX3BhZ2UoYnVmKTsKPiAgCQkJdW5z aWduZWQgbG9uZyBwZ19vZmYgPSBvZmZzZXRfaW5fcGFnZShidWYpOwo+ICAKPiBAQCAtNjYzLDcg KzY4MSw3IEBAIHN0YXRpYyBpbnQgZG1hdGVzdF9mdW5jKHZvaWQgKmRhdGEpCj4gIAkJCWlmIChy ZXQpIHsKPiAgCQkJCWRtYWVuZ2luZV91bm1hcF9wdXQodW0pOwo+ICAJCQkJcmVzdWx0KCJkc3Qg bWFwcGluZyBlcnJvciIsIHRvdGFsX3Rlc3RzLAo+IC0JCQkJICAgICAgIHNyY19vZmYsIGRzdF9v ZmYsIGxlbiwgcmV0KTsKPiArCQkJCSAgICAgICBzcmMtPm9mZiwgZHN0LT5vZmYsIGxlbiwgcmV0 KTsKPiAgCQkJCWZhaWxlZF90ZXN0cysrOwo+ICAJCQkJY29udGludWU7Cj4gIAkJCX0KPiBAQCAt NjcyLDMwICs2OTAsMzAgQEAgc3RhdGljIGludCBkbWF0ZXN0X2Z1bmModm9pZCAqZGF0YSkKPiAg Cj4gIAkJaWYgKHRocmVhZC0+dHlwZSA9PSBETUFfTUVNQ1BZKQo+ICAJCQl0eCA9IGRldi0+ZGV2 aWNlX3ByZXBfZG1hX21lbWNweShjaGFuLAo+IC0JCQkJCQkJIGRzdHNbMF0gKyBkc3Rfb2ZmLAo+ ICsJCQkJCQkJIGRzdHNbMF0gKyBkc3QtPm9mZiwKPiAgCQkJCQkJCSBzcmNzWzBdLCBsZW4sIGZs YWdzKTsKPiAgCQllbHNlIGlmICh0aHJlYWQtPnR5cGUgPT0gRE1BX01FTVNFVCkKPiAgCQkJdHgg PSBkZXYtPmRldmljZV9wcmVwX2RtYV9tZW1zZXQoY2hhbiwKPiAtCQkJCQkJZHN0c1swXSArIGRz dF9vZmYsCj4gLQkJCQkJCSoodGhyZWFkLT5zcmNzWzBdICsgc3JjX29mZiksCj4gKwkJCQkJCWRz dHNbMF0gKyBkc3QtPm9mZiwKPiArCQkJCQkJKihzcmMtPmFsaWduZWRbMF0gKyBzcmMtPm9mZiks Cj4gIAkJCQkJCWxlbiwgZmxhZ3MpOwo+ICAJCWVsc2UgaWYgKHRocmVhZC0+dHlwZSA9PSBETUFf WE9SKQo+ICAJCQl0eCA9IGRldi0+ZGV2aWNlX3ByZXBfZG1hX3hvcihjaGFuLAo+IC0JCQkJCQkg ICAgICBkc3RzWzBdICsgZHN0X29mZiwKPiAtCQkJCQkJICAgICAgc3Jjcywgc3JjX2NudCwKPiAr CQkJCQkJICAgICAgZHN0c1swXSArIGRzdC0+b2ZmLAo+ICsJCQkJCQkgICAgICBzcmNzLCBzcmMt PmNudCwKPiAgCQkJCQkJICAgICAgbGVuLCBmbGFncyk7Cj4gIAkJZWxzZSBpZiAodGhyZWFkLT50 eXBlID09IERNQV9QUSkgewo+IC0JCQlmb3IgKGkgPSAwOyBpIDwgZHN0X2NudDsgaSsrKQo+IC0J CQkJZG1hX3BxW2ldID0gZHN0c1tpXSArIGRzdF9vZmY7Cj4gKwkJCWZvciAoaSA9IDA7IGkgPCBk c3QtPmNudDsgaSsrKQo+ICsJCQkJZG1hX3BxW2ldID0gZHN0c1tpXSArIGRzdC0+b2ZmOwo+ICAJ CQl0eCA9IGRldi0+ZGV2aWNlX3ByZXBfZG1hX3BxKGNoYW4sIGRtYV9wcSwgc3JjcywKPiAtCQkJ CQkJICAgICBzcmNfY250LCBwcV9jb2VmcywKPiArCQkJCQkJICAgICBzcmMtPmNudCwgcHFfY29l ZnMsCj4gIAkJCQkJCSAgICAgbGVuLCBmbGFncyk7Cj4gIAkJfQo+ICAKPiAgCQlpZiAoIXR4KSB7 Cj4gIAkJCWRtYWVuZ2luZV91bm1hcF9wdXQodW0pOwo+IC0JCQlyZXN1bHQoInByZXAgZXJyb3Ii LCB0b3RhbF90ZXN0cywgc3JjX29mZiwKPiAtCQkJICAgICAgIGRzdF9vZmYsIGxlbiwgcmV0KTsK PiArCQkJcmVzdWx0KCJwcmVwIGVycm9yIiwgdG90YWxfdGVzdHMsIHNyYy0+b2ZmLAo+ICsJCQkg ICAgICAgZHN0LT5vZmYsIGxlbiwgcmV0KTsKPiAgCQkJbXNsZWVwKDEwMCk7Cj4gIAkJCWZhaWxl ZF90ZXN0cysrOwo+ICAJCQljb250aW51ZTsKPiBAQCAtNzA4LDggKzcyNiw4IEBAIHN0YXRpYyBp bnQgZG1hdGVzdF9mdW5jKHZvaWQgKmRhdGEpCj4gIAo+ICAJCWlmIChkbWFfc3VibWl0X2Vycm9y KGNvb2tpZSkpIHsKPiAgCQkJZG1hZW5naW5lX3VubWFwX3B1dCh1bSk7Cj4gLQkJCXJlc3VsdCgi c3VibWl0IGVycm9yIiwgdG90YWxfdGVzdHMsIHNyY19vZmYsCj4gLQkJCSAgICAgICBkc3Rfb2Zm LCBsZW4sIHJldCk7Cj4gKwkJCXJlc3VsdCgic3VibWl0IGVycm9yIiwgdG90YWxfdGVzdHMsIHNy Yy0+b2ZmLAo+ICsJCQkgICAgICAgZHN0LT5vZmYsIGxlbiwgcmV0KTsKPiAgCQkJbXNsZWVwKDEw MCk7Cj4gIAkJCWZhaWxlZF90ZXN0cysrOwo+ICAJCQljb250aW51ZTsKPiBAQCAtNzI0LDU4ICs3 NDIsNTggQEAgc3RhdGljIGludCBkbWF0ZXN0X2Z1bmModm9pZCAqZGF0YSkKPiAgCQlkbWFlbmdp bmVfdW5tYXBfcHV0KHVtKTsKPiAgCj4gIAkJaWYgKCFkb25lLT5kb25lKSB7Cj4gLQkJCXJlc3Vs dCgidGVzdCB0aW1lZCBvdXQiLCB0b3RhbF90ZXN0cywgc3JjX29mZiwgZHN0X29mZiwKPiArCQkJ cmVzdWx0KCJ0ZXN0IHRpbWVkIG91dCIsIHRvdGFsX3Rlc3RzLCBzcmMtPm9mZiwgZHN0LT5vZmYs Cj4gIAkJCSAgICAgICBsZW4sIDApOwo+ICAJCQlmYWlsZWRfdGVzdHMrKzsKPiAgCQkJY29udGlu dWU7Cj4gIAkJfSBlbHNlIGlmIChzdGF0dXMgIT0gRE1BX0NPTVBMRVRFKSB7Cj4gIAkJCXJlc3Vs dChzdGF0dXMgPT0gRE1BX0VSUk9SID8KPiAgCQkJICAgICAgICJjb21wbGV0aW9uIGVycm9yIHN0 YXR1cyIgOgo+IC0JCQkgICAgICAgImNvbXBsZXRpb24gYnVzeSBzdGF0dXMiLCB0b3RhbF90ZXN0 cywgc3JjX29mZiwKPiAtCQkJICAgICAgIGRzdF9vZmYsIGxlbiwgcmV0KTsKPiArCQkJICAgICAg ICJjb21wbGV0aW9uIGJ1c3kgc3RhdHVzIiwgdG90YWxfdGVzdHMsIHNyYy0+b2ZmLAo+ICsJCQkg ICAgICAgZHN0LT5vZmYsIGxlbiwgcmV0KTsKPiAgCQkJZmFpbGVkX3Rlc3RzKys7Cj4gIAkJCWNv bnRpbnVlOwo+ICAJCX0KPiAgCj4gIAkJaWYgKHBhcmFtcy0+bm92ZXJpZnkpIHsKPiAtCQkJdmVy Ym9zZV9yZXN1bHQoInRlc3QgcGFzc2VkIiwgdG90YWxfdGVzdHMsIHNyY19vZmYsCj4gLQkJCQkg ICAgICAgZHN0X29mZiwgbGVuLCAwKTsKPiArCQkJdmVyYm9zZV9yZXN1bHQoInRlc3QgcGFzc2Vk IiwgdG90YWxfdGVzdHMsIHNyYy0+b2ZmLAo+ICsJCQkJICAgICAgIGRzdC0+b2ZmLCBsZW4sIDAp Owo+ICAJCQljb250aW51ZTsKPiAgCQl9Cj4gIAo+ICAJCXN0YXJ0ID0ga3RpbWVfZ2V0KCk7Cj4g IAkJcHJfZGVidWcoIiVzOiB2ZXJpZnlpbmcgc291cmNlIGJ1ZmZlci4uLlxuIiwgY3VycmVudC0+ Y29tbSk7Cj4gLQkJZXJyb3JfY291bnQgPSBkbWF0ZXN0X3ZlcmlmeSh0aHJlYWQtPnNyY3MsIDAs IHNyY19vZmYsCj4gKwkJZXJyb3JfY291bnQgPSBkbWF0ZXN0X3ZlcmlmeShzcmMtPmFsaWduZWQs IDAsIHNyYy0+b2ZmLAo+ICAJCQkJMCwgUEFUVEVSTl9TUkMsIHRydWUsIGlzX21lbXNldCk7Cj4g LQkJZXJyb3JfY291bnQgKz0gZG1hdGVzdF92ZXJpZnkodGhyZWFkLT5zcmNzLCBzcmNfb2ZmLAo+ IC0JCQkJc3JjX29mZiArIGxlbiwgc3JjX29mZiwKPiArCQllcnJvcl9jb3VudCArPSBkbWF0ZXN0 X3ZlcmlmeShzcmMtPmFsaWduZWQsIHNyYy0+b2ZmLAo+ICsJCQkJc3JjLT5vZmYgKyBsZW4sIHNy Yy0+b2ZmLAo+ICAJCQkJUEFUVEVSTl9TUkMgfCBQQVRURVJOX0NPUFksIHRydWUsIGlzX21lbXNl dCk7Cj4gLQkJZXJyb3JfY291bnQgKz0gZG1hdGVzdF92ZXJpZnkodGhyZWFkLT5zcmNzLCBzcmNf b2ZmICsgbGVuLAo+IC0JCQkJcGFyYW1zLT5idWZfc2l6ZSwgc3JjX29mZiArIGxlbiwKPiArCQll cnJvcl9jb3VudCArPSBkbWF0ZXN0X3ZlcmlmeShzcmMtPmFsaWduZWQsIHNyYy0+b2ZmICsgbGVu LAo+ICsJCQkJcGFyYW1zLT5idWZfc2l6ZSwgc3JjLT5vZmYgKyBsZW4sCj4gIAkJCQlQQVRURVJO X1NSQywgdHJ1ZSwgaXNfbWVtc2V0KTsKPiAgCj4gIAkJcHJfZGVidWcoIiVzOiB2ZXJpZnlpbmcg ZGVzdCBidWZmZXIuLi5cbiIsIGN1cnJlbnQtPmNvbW0pOwo+IC0JCWVycm9yX2NvdW50ICs9IGRt YXRlc3RfdmVyaWZ5KHRocmVhZC0+ZHN0cywgMCwgZHN0X29mZiwKPiArCQllcnJvcl9jb3VudCAr PSBkbWF0ZXN0X3ZlcmlmeShkc3QtPmFsaWduZWQsIDAsIGRzdC0+b2ZmLAo+ICAJCQkJMCwgUEFU VEVSTl9EU1QsIGZhbHNlLCBpc19tZW1zZXQpOwo+ICAKPiAtCQllcnJvcl9jb3VudCArPSBkbWF0 ZXN0X3ZlcmlmeSh0aHJlYWQtPmRzdHMsIGRzdF9vZmYsCj4gLQkJCQlkc3Rfb2ZmICsgbGVuLCBz cmNfb2ZmLAo+ICsJCWVycm9yX2NvdW50ICs9IGRtYXRlc3RfdmVyaWZ5KGRzdC0+YWxpZ25lZCwg ZHN0LT5vZmYsCj4gKwkJCQlkc3QtPm9mZiArIGxlbiwgc3JjLT5vZmYsCj4gIAkJCQlQQVRURVJO X1NSQyB8IFBBVFRFUk5fQ09QWSwgZmFsc2UsIGlzX21lbXNldCk7Cj4gIAo+IC0JCWVycm9yX2Nv dW50ICs9IGRtYXRlc3RfdmVyaWZ5KHRocmVhZC0+ZHN0cywgZHN0X29mZiArIGxlbiwKPiAtCQkJ CXBhcmFtcy0+YnVmX3NpemUsIGRzdF9vZmYgKyBsZW4sCj4gKwkJZXJyb3JfY291bnQgKz0gZG1h dGVzdF92ZXJpZnkoZHN0LT5hbGlnbmVkLCBkc3QtPm9mZiArIGxlbiwKPiArCQkJCXBhcmFtcy0+ YnVmX3NpemUsIGRzdC0+b2ZmICsgbGVuLAo+ICAJCQkJUEFUVEVSTl9EU1QsIGZhbHNlLCBpc19t ZW1zZXQpOwo+ICAKPiAgCQlkaWZmID0ga3RpbWVfc3ViKGt0aW1lX2dldCgpLCBzdGFydCk7Cj4g IAkJY29tcGFyZXRpbWUgPSBrdGltZV9hZGQoY29tcGFyZXRpbWUsIGRpZmYpOwo+ICAKPiAgCQlp ZiAoZXJyb3JfY291bnQpIHsKPiAtCQkJcmVzdWx0KCJkYXRhIGVycm9yIiwgdG90YWxfdGVzdHMs IHNyY19vZmYsIGRzdF9vZmYsCj4gKwkJCXJlc3VsdCgiZGF0YSBlcnJvciIsIHRvdGFsX3Rlc3Rz LCBzcmMtPm9mZiwgZHN0LT5vZmYsCj4gIAkJCSAgICAgICBsZW4sIGVycm9yX2NvdW50KTsKPiAg CQkJZmFpbGVkX3Rlc3RzKys7Cj4gIAkJfSBlbHNlIHsKPiAtCQkJdmVyYm9zZV9yZXN1bHQoInRl c3QgcGFzc2VkIiwgdG90YWxfdGVzdHMsIHNyY19vZmYsCj4gLQkJCQkgICAgICAgZHN0X29mZiwg bGVuLCAwKTsKPiArCQkJdmVyYm9zZV9yZXN1bHQoInRlc3QgcGFzc2VkIiwgdG90YWxfdGVzdHMs IHNyYy0+b2ZmLAo+ICsJCQkJICAgICAgIGRzdC0+b2ZmLCBsZW4sIDApOwo+ICAJCX0KPiAgCX0K PiAgCWt0aW1lID0ga3RpbWVfc3ViKGt0aW1lX2dldCgpLCBrdGltZSk7Cj4gQEAgLTc4NSwyMiAr ODAzLDEzIEBAIHN0YXRpYyBpbnQgZG1hdGVzdF9mdW5jKHZvaWQgKmRhdGEpCj4gIAo+ICAJcmV0 ID0gMDsKPiAgCWtmcmVlKGRtYV9wcSk7Cj4gLWVycl9zcmNzX2FycmF5Ogo+ICtlcnJfZG1hX3Bx Ogo+ICAJa2ZyZWUoc3Jjcyk7Cj4gLWVycl9kc3RidWY6Cj4gLQlmb3IgKGkgPSAwOyB0aHJlYWQt PnVkc3RzW2ldOyBpKyspCj4gLQkJa2ZyZWUodGhyZWFkLT51ZHN0c1tpXSk7Cj4gLQlrZnJlZSh0 aHJlYWQtPnVkc3RzKTsKPiAtZXJyX3Vkc3RzOgo+IC0Ja2ZyZWUodGhyZWFkLT5kc3RzKTsKPiAt ZXJyX2RzdHM6Cj4gLWVycl9zcmNidWY6Cj4gLQlmb3IgKGkgPSAwOyB0aHJlYWQtPnVzcmNzW2ld OyBpKyspCj4gLQkJa2ZyZWUodGhyZWFkLT51c3Jjc1tpXSk7Cj4gLQlrZnJlZSh0aHJlYWQtPnVz cmNzKTsKPiAtZXJyX3VzcmNzOgo+IC0Ja2ZyZWUodGhyZWFkLT5zcmNzKTsKPiAgZXJyX3NyY3M6 Cj4gKwlkbWF0ZXN0X2ZyZWVfdGVzdF9kYXRhKGRzdCk7Cj4gK2Vycl9kc3Q6Cj4gKwlkbWF0ZXN0 X2ZyZWVfdGVzdF9kYXRhKHNyYyk7Cj4gK2Vycl9zcmM6Cj4gIAlrZnJlZShwcV9jb2Vmcyk7Cj4g IGVycl90aHJlYWRfdHlwZToKPiAgCXByX2luZm8oIiVzOiBzdW1tYXJ5ICV1IHRlc3RzLCAldSBm YWlsdXJlcyAlbGx1IGlvcHMgJWxsdSBLQi9zICglZClcbiIsCj4gLS0gCj4gMi4xNy4xCgpJdCB3 b3VsZCBhbHNvIGhlbHAgcmV2aWV3IGlmIHRoaW5ncyBhcmUgbW92ZWQgaW4gc21hbGxlciBjaHVu a3MuIEkgY2FuCnRoaW5rIG9mIGNyZWF0aW5nIHRoZSBjb21tb24gbWVtIGFsbG9jIGFuZCBmcmVl IHJvdXRpbmUgYnkgbW92aW5nCmV4aXN0aW5nIGNvZGUgYW5kIHRoZW4gYWRkaW5nIG5ldyBzdHJ1 Y3RzLi4K