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: [V3,1/5] dmaengine: dmatest: Add support for multi channel testing From: Vinod Koul Message-Id: <20181205172313.GS2847@vkoul-mobl> Date: Wed, 5 Dec 2018 22:53:13 +0530 To: Seraj Alijan Cc: dmaengine@vger.kernel.org, dan.j.williams@intel.com, james.hartley@sondrel.com, sifan.naeem@sondrel.com, ed.blake@sondrel.com List-ID: T24gMTktMDktMTgsIDIwOjUyLCBTZXJhaiBBbGlqYW4gd3JvdGU6Cj4gQWRkIHN1cHBvcnQgZm9y IHJ1bm5pbmcgdGVzdHMgb24gbXVsdGlwbGUgY2hhbm5lbHMgc2ltdWx0YW5lb3VzbHkgYXMgdGhl Cj4gZHJpdmVyIGN1cnJlbnRseSBsaW1pdHMgdG8gMSBjaGFubmVsIHBlciB0ZXN0IHJ1bi4gVGhp cyB3aWxsIGFkZCBzdXBwb3J0Cj4gZm9yIHN0cmVzcyB0ZXN0aW5nIERNQSBjb250cm9sbGVycyB3 aXRoIG11bHRpIGNoYW5uZWwgY2FwYWJpbGl0aWVzLgo+IAo+IFRoaXMgaXMgZG9uZSBieSBhZGRp bmcgYSBjYWxsYmFjayBmdW5jdGlvbiB0byB0aGUgImNoYW5uZWwiIHBhcmFtZXRlcgo+IHRoYXQg cmVnaXN0ZXJzIHRoZSByZXF1ZXN0ZWQgY2hhbm5lbCBwcmlvciB0byB0aGUgInJ1biIgcGFyYW1l dGVyIGJlaW5nCj4gc2V0IHRvIDEuIEVhY2ggdGltZSB0aGUgImNoYW5uZWwiIHBhcmFtZXRlciBp cyBwb3B1bGF0ZWQgd2l0aCBhIG5ldwo+IGRtYSBjaGFubmVsLCBhIG5ldyB0ZXN0IGlzIGFwcGVu ZGVkIHRvIHRoZSB0aHJlYWQgcXVldWUuIE9uY2UgdGhlICJydW4iCj4gcGFyYW1ldGVyIGlzIHNl dCB0byAxLCB0aGUgdGVzdCB3aWxsIGtpY2sgc3RhcnQgYWxsIHBlbmRpbmcgdGhyZWFkcy4KPiAK PiBTaWduZWQtb2ZmLWJ5OiBTZXJhaiBBbGlqYW4gPHNlcmFqLmFsaWphbkBzb25kcmVsLmNvbT4K PiAtLS0KPiAgZHJpdmVycy9kbWEvZG1hdGVzdC5jIHwgMTk2ICsrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tCj4gIDEgZmlsZSBjaGFuZ2VkLCAxNzcgaW5z ZXJ0aW9ucygrKSwgMTkgZGVsZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1h L2RtYXRlc3QuYyBiL2RyaXZlcnMvZG1hL2RtYXRlc3QuYwo+IGluZGV4IGFhMTcxMmIuLmVhNjkw MzMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9kbWEvZG1hdGVzdC5jCj4gKysrIGIvZHJpdmVycy9k bWEvZG1hdGVzdC5jCj4gQEAgLTI3LDExICsyNyw2IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgdGVz dF9idWZfc2l6ZSA9IDE2Mzg0Owo+ICBtb2R1bGVfcGFyYW0odGVzdF9idWZfc2l6ZSwgdWludCwg U19JUlVHTyB8IFNfSVdVU1IpOwo+ICBNT0RVTEVfUEFSTV9ERVNDKHRlc3RfYnVmX3NpemUsICJT aXplIG9mIHRoZSBtZW1jcHkgdGVzdCBidWZmZXIiKTsKPiAgCj4gLXN0YXRpYyBjaGFyIHRlc3Rf Y2hhbm5lbFsyMF07Cj4gLW1vZHVsZV9wYXJhbV9zdHJpbmcoY2hhbm5lbCwgdGVzdF9jaGFubmVs LCBzaXplb2YodGVzdF9jaGFubmVsKSwKPiAtCQlTX0lSVUdPIHwgU19JV1VTUik7Cj4gLU1PRFVM RV9QQVJNX0RFU0MoY2hhbm5lbCwgIkJ1cyBJRCBvZiB0aGUgY2hhbm5lbCB0byB0ZXN0IChkZWZh dWx0OiBhbnkpIik7Cj4gLQo+ICBzdGF0aWMgY2hhciB0ZXN0X2RldmljZVszMl07Cj4gIG1vZHVs ZV9wYXJhbV9zdHJpbmcoZGV2aWNlLCB0ZXN0X2RldmljZSwgc2l6ZW9mKHRlc3RfZGV2aWNlKSwK PiAgCQlTX0lSVUdPIHwgU19JV1VTUik7Cj4gQEAgLTEzOSw2ICsxMzQsMjggQEAgc3RhdGljIGJv b2wgZG1hdGVzdF9ydW47Cj4gIG1vZHVsZV9wYXJhbV9jYihydW4sICZydW5fb3BzLCAmZG1hdGVz dF9ydW4sIFNfSVJVR08gfCBTX0lXVVNSKTsKPiAgTU9EVUxFX1BBUk1fREVTQyhydW4sICJSdW4g dGhlIHRlc3QgKGRlZmF1bHQ6IGZhbHNlKSIpOwo+ICAKPiArc3RhdGljIGludCBkbWF0ZXN0X2No YW5fc2V0KGNvbnN0IGNoYXIgKnZhbCwgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApOwo+ ICtzdGF0aWMgaW50IGRtYXRlc3RfY2hhbl9nZXQoY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2Vy bmVsX3BhcmFtICprcCk7Cj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtX29wcyBt dWx0aV9jaGFuX29wcyA9IHsKPiArCS5zZXQgPSBkbWF0ZXN0X2NoYW5fc2V0LAo+ICsJLmdldCA9 IGRtYXRlc3RfY2hhbl9nZXQsCj4gK307Cj4gKwo+ICtzdGF0aWMgY2hhciB0ZXN0X2NoYW5uZWxb MjBdOwo+ICtzdGF0aWMgc3RydWN0IGtwYXJhbV9zdHJpbmcgbmV3Y2hhbl9rcHMgPSB7Cj4gKwku c3RyaW5nID0gdGVzdF9jaGFubmVsLAo+ICsJLm1heGxlbiA9IDIwLAo+ICt9Owo+ICttb2R1bGVf cGFyYW1fY2IoY2hhbm5lbCwgJm11bHRpX2NoYW5fb3BzLCAmbmV3Y2hhbl9rcHMsIDA2NDQpOwo+ ICtNT0RVTEVfUEFSTV9ERVNDKGNoYW5uZWwsICJCdXMgSUQgb2YgdGhlIGNoYW5uZWwgdG8gdGVz dCAoZGVmYXVsdDogYW55KSIpOwo+ICsKPiArc3RhdGljIGludCBkbWF0ZXN0X3Rlc3RfbGlzdF9n ZXQoY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCk7Cj4gK3N0YXRpYyBj b25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtX29wcyB0ZXN0X2xpc3Rfb3BzID0gewo+ICsJLmdldCA9 IGRtYXRlc3RfdGVzdF9saXN0X2dldCwKPiArfTsKPiArbW9kdWxlX3BhcmFtX2NiKHRlc3RfbGlz dCwgJnRlc3RfbGlzdF9vcHMsIE5VTEwsIDA0NDQpOwo+ICtNT0RVTEVfUEFSTV9ERVNDKHRlc3Rf bGlzdCwgIlByaW50IGN1cnJlbnQgdGVzdCBsaXN0Iik7Cj4gKwo+ICAvKiBNYXhpbXVtIGFtb3Vu dCBvZiBtaXNtYXRjaGVkIGJ5dGVzIGluIGJ1ZmZlciB0byBwcmludCAqLwo+ICAjZGVmaW5lIE1B WF9FUlJPUl9DT1VOVAkJMzIKPiAgCj4gQEAgLTE3OSw2ICsxOTYsNyBAQCBzdHJ1Y3QgZG1hdGVz dF90aHJlYWQgewo+ICAJd2FpdF9xdWV1ZV9oZWFkX3QgZG9uZV93YWl0Owo+ICAJc3RydWN0IGRt YXRlc3RfZG9uZSB0ZXN0X2RvbmU7Cj4gIAlib29sCQkJZG9uZTsKPiArCWJvb2wJCQlwZW5kaW5n Owo+ICB9Owo+ICAKPiAgc3RydWN0IGRtYXRlc3RfY2hhbiB7Cj4gQEAgLTIwNiw2ICsyMjQsMjIg QEAgc3RhdGljIGJvb2wgaXNfdGhyZWFkZWRfdGVzdF9ydW4oc3RydWN0IGRtYXRlc3RfaW5mbyAq aW5mbykKPiAgCXJldHVybiBmYWxzZTsKPiAgfQo+ICAKPiArc3RhdGljIGJvb2wgaXNfdGhyZWFk ZWRfdGVzdF9wZW5kaW5nKHN0cnVjdCBkbWF0ZXN0X2luZm8gKmluZm8pCj4gK3sKPiArCXN0cnVj dCBkbWF0ZXN0X2NoYW4gKmR0YzsKPiArCj4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGR0YywgJmlu Zm8tPmNoYW5uZWxzLCBub2RlKSB7Cj4gKwkJc3RydWN0IGRtYXRlc3RfdGhyZWFkICp0aHJlYWQ7 Cj4gKwo+ICsJCWxpc3RfZm9yX2VhY2hfZW50cnkodGhyZWFkLCAmZHRjLT50aHJlYWRzLCBub2Rl KSB7Cj4gKwkJCWlmICh0aHJlYWQtPnBlbmRpbmcpCj4gKwkJCQlyZXR1cm4gdHJ1ZTsKPiArCQl9 Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIGZhbHNlOwo+ICt9Cj4gKwo+ICBzdGF0aWMgaW50IGRtYXRl c3Rfd2FpdF9nZXQoY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCkKPiAg ewo+ICAJc3RydWN0IGRtYXRlc3RfaW5mbyAqaW5mbyA9ICZ0ZXN0X2luZm87Cj4gQEAgLTQ3Niw2 ICs1MTAsNyBAQCBzdGF0aWMgaW50IGRtYXRlc3RfZnVuYyh2b2lkICpkYXRhKQo+ICAJcmV0ID0g LUVOT01FTTsKPiAgCj4gIAlzbXBfcm1iKCk7Cj4gKwl0aHJlYWQtPnBlbmRpbmcgPSBmYWxzZTsK PiAgCWluZm8gPSB0aHJlYWQtPmluZm87Cj4gIAlwYXJhbXMgPSAmaW5mby0+cGFyYW1zOwo+ICAJ Y2hhbiA9IHRocmVhZC0+Y2hhbjsKPiBAQCAtODg2LDcgKzkyMSw3IEBAIHN0YXRpYyBpbnQgZG1h dGVzdF9hZGRfdGhyZWFkcyhzdHJ1Y3QgZG1hdGVzdF9pbmZvICppbmZvLAo+ICAJCS8qIHNyY2J1 ZiBhbmQgZHN0YnVmIGFyZSBhbGxvY2F0ZWQgYnkgdGhlIHRocmVhZCBpdHNlbGYgKi8KPiAgCQln ZXRfdGFza19zdHJ1Y3QodGhyZWFkLT50YXNrKTsKPiAgCQlsaXN0X2FkZF90YWlsKCZ0aHJlYWQt Pm5vZGUsICZkdGMtPnRocmVhZHMpOwo+IC0JCXdha2VfdXBfcHJvY2Vzcyh0aHJlYWQtPnRhc2sp Owo+ICsJCXRocmVhZC0+cGVuZGluZyA9IHRydWU7Cj4gIAl9Cj4gIAo+ICAJcmV0dXJuIGk7Cj4g QEAgLTkzMiw3ICs5NjcsNyBAQCBzdGF0aWMgaW50IGRtYXRlc3RfYWRkX2NoYW5uZWwoc3RydWN0 IGRtYXRlc3RfaW5mbyAqaW5mbywKPiAgCQl0aHJlYWRfY291bnQgKz0gY250ID4gMCA/IGNudCA6 IDA7Cj4gIAl9Cj4gIAo+IC0JcHJfaW5mbygiU3RhcnRlZCAldSB0aHJlYWRzIHVzaW5nICVzXG4i LAo+ICsJcHJfaW5mbygiQWRkZWQgJXUgdGhyZWFkcyB1c2luZyAlc1xuIiwKPiAgCQl0aHJlYWRf Y291bnQsIGRtYV9jaGFuX25hbWUoY2hhbikpOwo+ICAKPiAgCWxpc3RfYWRkX3RhaWwoJmR0Yy0+ bm9kZSwgJmluZm8tPmNoYW5uZWxzKTsKPiBAQCAtOTc3LDcgKzEwMTIsNyBAQCBzdGF0aWMgdm9p ZCByZXF1ZXN0X2NoYW5uZWxzKHN0cnVjdCBkbWF0ZXN0X2luZm8gKmluZm8sCj4gIAl9Cj4gIH0K PiAgCj4gLXN0YXRpYyB2b2lkIHJ1bl90aHJlYWRlZF90ZXN0KHN0cnVjdCBkbWF0ZXN0X2luZm8g KmluZm8pCj4gK3N0YXRpYyB2b2lkIGFkZF90aHJlYWRlZF90ZXN0KHN0cnVjdCBkbWF0ZXN0X2lu Zm8gKmluZm8pCj4gIHsKPiAgCXN0cnVjdCBkbWF0ZXN0X3BhcmFtcyAqcGFyYW1zID0gJmluZm8t PnBhcmFtczsKPiAgCj4gQEAgLTEwMDAsNiArMTAzNSwyNCBAQCBzdGF0aWMgdm9pZCBydW5fdGhy ZWFkZWRfdGVzdChzdHJ1Y3QgZG1hdGVzdF9pbmZvICppbmZvKQo+ICAJcmVxdWVzdF9jaGFubmVs cyhpbmZvLCBETUFfUFEpOwo+ICB9Cj4gIAo+ICtzdGF0aWMgdm9pZCBydW5fcGVuZGluZ190ZXN0 cyhzdHJ1Y3QgZG1hdGVzdF9pbmZvICppbmZvKQo+ICt7Cj4gKwlzdHJ1Y3QgZG1hdGVzdF9jaGFu ICpkdGM7Cj4gKwl1bnNpZ25lZCBpbnQgdGhyZWFkX2NvdW50ID0gMDsKPiArCj4gKwlsaXN0X2Zv cl9lYWNoX2VudHJ5KGR0YywgJmluZm8tPmNoYW5uZWxzLCBub2RlKSB7Cj4gKwkJc3RydWN0IGRt YXRlc3RfdGhyZWFkICp0aHJlYWQ7Cj4gKwo+ICsJCXRocmVhZF9jb3VudCA9IDA7Cj4gKwkJbGlz dF9mb3JfZWFjaF9lbnRyeSh0aHJlYWQsICZkdGMtPnRocmVhZHMsIG5vZGUpIHsKPiArCQkJd2Fr ZV91cF9wcm9jZXNzKHRocmVhZC0+dGFzayk7Cj4gKwkJCXRocmVhZF9jb3VudCsrOwo+ICsJCX0K PiArCQlwcl9pbmZvKCJTdGFydGVkICV1IHRocmVhZHMgdXNpbmcgJXNcbiIsCj4gKwkJCXRocmVh ZF9jb3VudCwgZG1hX2NoYW5fbmFtZShkdGMtPmNoYW4pKTsKPiArCX0KPiArfQo+ICsKPiAgc3Rh dGljIHZvaWQgc3RvcF90aHJlYWRlZF90ZXN0KHN0cnVjdCBkbWF0ZXN0X2luZm8gKmluZm8pCj4g IHsKPiAgCXN0cnVjdCBkbWF0ZXN0X2NoYW4gKmR0YywgKl9kdGM7Cj4gQEAgLTEwMTYsNyArMTA2 OSw3IEBAIHN0YXRpYyB2b2lkIHN0b3BfdGhyZWFkZWRfdGVzdChzdHJ1Y3QgZG1hdGVzdF9pbmZv ICppbmZvKQo+ICAJaW5mby0+bnJfY2hhbm5lbHMgPSAwOwo+ICB9Cj4gIAo+IC1zdGF0aWMgdm9p ZCByZXN0YXJ0X3RocmVhZGVkX3Rlc3Qoc3RydWN0IGRtYXRlc3RfaW5mbyAqaW5mbywgYm9vbCBy dW4pCj4gK3N0YXRpYyB2b2lkIHN0YXJ0X3RocmVhZGVkX3Rlc3RzKHN0cnVjdCBkbWF0ZXN0X2lu Zm8gKmluZm8pCj4gIHsKPiAgCS8qIHdlIG1pZ2h0IGJlIGNhbGxlZCBlYXJseSB0byBzZXQgcnVu PSwgZGVmZXIgcnVubmluZyB1bnRpbCBhbGwKPiAgCSAqIHBhcmFtZXRlcnMgaGF2ZSBiZWVuIGV2 YWx1YXRlZAo+IEBAIC0xMDI0LDExICsxMDc3LDcgQEAgc3RhdGljIHZvaWQgcmVzdGFydF90aHJl YWRlZF90ZXN0KHN0cnVjdCBkbWF0ZXN0X2luZm8gKmluZm8sIGJvb2wgcnVuKQo+ICAJaWYgKCFp bmZvLT5kaWRfaW5pdCkKPiAgCQlyZXR1cm47Cj4gIAo+IC0JLyogU3RvcCBhbnkgcnVubmluZyB0 ZXN0IGZpcnN0ICovCj4gLQlzdG9wX3RocmVhZGVkX3Rlc3QoaW5mbyk7Cj4gLQo+IC0JLyogUnVu IHRlc3Qgd2l0aCBuZXcgcGFyYW1ldGVycyAqLwo+IC0JcnVuX3RocmVhZGVkX3Rlc3QoaW5mbyk7 Cj4gKwlydW5fcGVuZGluZ190ZXN0cyhpbmZvKTsKPiAgfQo+ICAKPiAgc3RhdGljIGludCBkbWF0 ZXN0X3J1bl9nZXQoY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCkKPiBA QCAtMTAzOSw3ICsxMDg4LDggQEAgc3RhdGljIGludCBkbWF0ZXN0X3J1bl9nZXQoY2hhciAqdmFs LCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCkKPiAgCWlmIChpc190aHJlYWRlZF90ZXN0 X3J1bihpbmZvKSkgewo+ICAJCWRtYXRlc3RfcnVuID0gdHJ1ZTsKPiAgCX0gZWxzZSB7Cj4gLQkJ c3RvcF90aHJlYWRlZF90ZXN0KGluZm8pOwo+ICsJCWlmICghaXNfdGhyZWFkZWRfdGVzdF9wZW5k aW5nKGluZm8pKQo+ICsJCQlzdG9wX3RocmVhZGVkX3Rlc3QoaW5mbyk7Cj4gIAkJZG1hdGVzdF9y dW4gPSBmYWxzZTsKPiAgCX0KPiAgCW11dGV4X3VubG9jaygmaW5mby0+bG9jayk7Cj4gQEAgLTEw NTcsMTggKzExMDcsMTI1IEBAIHN0YXRpYyBpbnQgZG1hdGVzdF9ydW5fc2V0KGNvbnN0IGNoYXIg KnZhbCwgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApCj4gIAlpZiAocmV0KSB7Cj4gIAkJ bXV0ZXhfdW5sb2NrKCZpbmZvLT5sb2NrKTsKPiAgCQlyZXR1cm4gcmV0Owo+ICsJfSBlbHNlIGlm IChkbWF0ZXN0X3J1bikgewo+ICsJCWlmIChpc190aHJlYWRlZF90ZXN0X3BlbmRpbmcoaW5mbykp Cj4gKwkJCXN0YXJ0X3RocmVhZGVkX3Rlc3RzKGluZm8pOwo+ICsJCWVsc2UKPiArCQkJcHJfaW5m bygiQ291bGQgbm90IHN0YXJ0IHRlc3QsIG5vIGNoYW5uZWxzIGNvbmZpZ3VyZWRcbiIpOwo+ICsJ fSBlbHNlIHsKPiArCQlzdG9wX3RocmVhZGVkX3Rlc3QoaW5mbyk7Cj4gKwl9Cj4gKwo+ICsJbXV0 ZXhfdW5sb2NrKCZpbmZvLT5sb2NrKTsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtz dGF0aWMgaW50IGRtYXRlc3RfY2hhbl9zZXQoY29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qg a2VybmVsX3BhcmFtICprcCkKPiArewo+ICsJc3RydWN0IGRtYXRlc3RfaW5mbyAqaW5mbyA9ICZ0 ZXN0X2luZm87Cj4gKwlzdHJ1Y3QgZG1hdGVzdF9jaGFuICpkdGM7Cj4gKwljaGFyIGNoYW5fcmVz ZXRfdmFsWzIwXTsKPiArCWludCByZXQgPSAwOwo+ICsKPiArCW11dGV4X2xvY2soJmluZm8tPmxv Y2spOwo+ICsJcmV0ID0gcGFyYW1fc2V0X2NvcHlzdHJpbmcodmFsLCBrcCk7Cj4gKwlpZiAocmV0 KSB7Cj4gKwkJbXV0ZXhfdW5sb2NrKCZpbmZvLT5sb2NrKTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJ fQo+ICsJLypDbGVhciBhbnkgcHJldmlvdXNseSBydW4gdGhyZWFkcyAqLwo+ICsJaWYgKCFpc190 aHJlYWRlZF90ZXN0X3J1bihpbmZvKSAmJiAhaXNfdGhyZWFkZWRfdGVzdF9wZW5kaW5nKGluZm8p KQo+ICsJCXN0b3BfdGhyZWFkZWRfdGVzdChpbmZvKTsKPiArCS8qIFJlamVjdCBjaGFubmVscyB0 aGF0IGFyZSBhbHJlYWR5IHJlZ2lzdGVyZWQgKi8KPiArCWlmIChpc190aHJlYWRlZF90ZXN0X3Bl bmRpbmcoaW5mbykpIHsKPiArCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGR0YywgJmluZm8tPmNoYW5u ZWxzLCBub2RlKSB7Cj4gKwkJCWlmIChzdHJjbXAoZG1hX2NoYW5fbmFtZShkdGMtPmNoYW4pLAo+ ICsJCQkJICAgc3RyaW0odGVzdF9jaGFubmVsKSkgPT0gMCkgewo+ICsJCQkJZHRjID0gbGlzdF9s YXN0X2VudHJ5KCZpbmZvLT5jaGFubmVscywKPiArCQkJCQkJICAgICAgc3RydWN0IGRtYXRlc3Rf Y2hhbiwKPiArCQkJCQkJICAgICAgbm9kZSk7Cj4gKwkJCQlzdHJsY3B5KGNoYW5fcmVzZXRfdmFs LAo+ICsJCQkJCWRtYV9jaGFuX25hbWUoZHRjLT5jaGFuKSwKPiArCQkJCQlzaXplb2YoY2hhbl9y ZXNldF92YWwpKTsKPiArCQkJCXJldCA9IC1FQlVTWTsKPiArCQkJCWdvdG8gYWRkX2NoYW5fZXJy Owo+ICsJCQl9Cj4gKwkJfQo+ICAJfQo+ICAKPiAtCWlmIChpc190aHJlYWRlZF90ZXN0X3J1bihp bmZvKSkKPiArCWFkZF90aHJlYWRlZF90ZXN0KGluZm8pOwo+ICsKPiArCS8qIENoZWNrIGlmIGNo YW5uZWwgd2FzIGFkZGVkIHN1Y2Nlc3NmdWxseSAqLwo+ICsJZHRjID0gbGlzdF9sYXN0X2VudHJ5 KCZpbmZvLT5jaGFubmVscywgc3RydWN0IGRtYXRlc3RfY2hhbiwgbm9kZSk7Cj4gKwo+ICsJaWYg KGR0Yy0+Y2hhbikgewo+ICsJCS8qCj4gKwkJICogaWYgbmV3IGNoYW5uZWwgd2FzIG5vdCBzdWNj ZXNzZnVsbHkgYWRkZWQsIHJldmVydCB0aGUgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl5eXl5eCgpkdXBsaWNh dGUgdGhlCgo+ICsJCSAqICJ0ZXN0X2NoYW5uZWwiIHN0cmluZyB0byB0aGUgbmFtZSBvZiB0aGUg bGFzdCBzdWNjZXNzZnVsbHkKPiArCQkgKiBhZGRlZCBjaGFubmVsLiBleGNlcHRpb24gZm9yIHdo ZW4gdXNlcnMgaXNzdWVzIGVtcHR5IHN0cmluZwo+ICsJCSAqIHRvIGNoYW5uZWwgcGFyYW1ldGVy Lgo+ICsJCSAqLwo+ICsJCWlmICgoc3RyY21wKGRtYV9jaGFuX25hbWUoZHRjLT5jaGFuKSwgc3Ry aW0odGVzdF9jaGFubmVsKSkgIT0gMCkKPiArCQkgICAgJiYgKHN0cmNtcCgiIiwgc3RyaW0odGVz dF9jaGFubmVsKSkgIT0gMCkpIHsKPiArCQkJcmV0ID0gLUVJTlZBTDsKPiArCQkJc3RybGNweShj aGFuX3Jlc2V0X3ZhbCwgZG1hX2NoYW5fbmFtZShkdGMtPmNoYW4pLAo+ICsJCQkJc2l6ZW9mKGNo YW5fcmVzZXRfdmFsKSk7Cj4gKwkJCWdvdG8gYWRkX2NoYW5fZXJyOwo+ICsJCX0KPiArCj4gKwl9 IGVsc2Ugewo+ICsJCS8qIENsZWFyIHRlc3RfY2hhbm5lbCBpZiBubyBjaGFubmVscyB3ZXJlIGFk ZGVkIHN1Y2Nlc3NmdWxseSAqLwo+ICsJCXN0cmxjcHkoY2hhbl9yZXNldF92YWwsICIiLCBzaXpl b2YoY2hhbl9yZXNldF92YWwpKTsKPiAgCQlyZXQgPSAtRUJVU1k7Cj4gLQllbHNlIGlmIChkbWF0 ZXN0X3J1bikKPiAtCQlyZXN0YXJ0X3RocmVhZGVkX3Rlc3QoaW5mbywgZG1hdGVzdF9ydW4pOwo+ ICsJCWdvdG8gYWRkX2NoYW5fZXJyOwo+ICsJfQo+ICsKPiArCW11dGV4X3VubG9jaygmaW5mby0+ bG9jayk7Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiAgCj4gK2FkZF9jaGFuX2VycjoKPiArCXBhcmFt X3NldF9jb3B5c3RyaW5nKGNoYW5fcmVzZXRfdmFsLCBrcCk7Cj4gIAltdXRleF91bmxvY2soJmlu Zm8tPmxvY2spOwo+ICAKPiAgCXJldHVybiByZXQ7Cj4gIH0KPiAgCj4gK3N0YXRpYyBpbnQgZG1h dGVzdF9jaGFuX2dldChjaGFyICp2YWwsIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKQo+ ICt7Cj4gKwlzdHJ1Y3QgZG1hdGVzdF9pbmZvICppbmZvID0gJnRlc3RfaW5mbzsKPiArCj4gKwlt dXRleF9sb2NrKCZpbmZvLT5sb2NrKTsKPiArCWlmICghaXNfdGhyZWFkZWRfdGVzdF9ydW4oaW5m bykgJiYgIWlzX3RocmVhZGVkX3Rlc3RfcGVuZGluZyhpbmZvKSkgewo+ICsJCXN0b3BfdGhyZWFk ZWRfdGVzdChpbmZvKTsKPiArCQlzdHJsY3B5KHRlc3RfY2hhbm5lbCwgIiIsIHNpemVvZih0ZXN0 X2NoYW5uZWwpKTsKPiArCX0KPiArCW11dGV4X3VubG9jaygmaW5mby0+bG9jayk7Cj4gKwo+ICsJ cmV0dXJuIHBhcmFtX2dldF9zdHJpbmcodmFsLCBrcCk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQg ZG1hdGVzdF90ZXN0X2xpc3RfZ2V0KGNoYXIgKnZhbCwgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJh bSAqa3ApCj4gK3sKPiArCXN0cnVjdCBkbWF0ZXN0X2luZm8gKmluZm8gPSAmdGVzdF9pbmZvOwo+ ICsJc3RydWN0IGRtYXRlc3RfY2hhbiAqZHRjOwo+ICsJdW5zaWduZWQgaW50IHRocmVhZF9jb3Vu dCA9IDA7Cj4gKwo+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeShkdGMsICZpbmZvLT5jaGFubmVscywg bm9kZSkgewo+ICsJCXN0cnVjdCBkbWF0ZXN0X3RocmVhZCAqdGhyZWFkOwo+ICsKPiArCQl0aHJl YWRfY291bnQgPSAwOwo+ICsJCWxpc3RfZm9yX2VhY2hfZW50cnkodGhyZWFkLCAmZHRjLT50aHJl YWRzLCBub2RlKSB7Cj4gKwkJCXRocmVhZF9jb3VudCsrOwo+ICsJCX0KPiArCQlwcl9pbmZvKCIl dSB0aHJlYWRzIHVzaW5nICVzXG4iLAo+ICsJCQl0aHJlYWRfY291bnQsIGRtYV9jaGFuX25hbWUo ZHRjLT5jaGFuKSk7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gIHN0YXRpYyBp bnQgX19pbml0IGRtYXRlc3RfaW5pdCh2b2lkKQo+ICB7Cj4gIAlzdHJ1Y3QgZG1hdGVzdF9pbmZv ICppbmZvID0gJnRlc3RfaW5mbzsKPiBAQCAtMTA3Niw3ICsxMjMzLDggQEAgc3RhdGljIGludCBf X2luaXQgZG1hdGVzdF9pbml0KHZvaWQpCj4gIAo+ICAJaWYgKGRtYXRlc3RfcnVuKSB7Cj4gIAkJ bXV0ZXhfbG9jaygmaW5mby0+bG9jayk7Cj4gLQkJcnVuX3RocmVhZGVkX3Rlc3QoaW5mbyk7Cj4g KwkJYWRkX3RocmVhZGVkX3Rlc3QoaW5mbyk7Cj4gKwkJcnVuX3BlbmRpbmdfdGVzdHMoaW5mbyk7 Cj4gIAkJbXV0ZXhfdW5sb2NrKCZpbmZvLT5sb2NrKTsKPiAgCX0KPiAgCj4gLS0gCj4gMi43LjQK