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: [RFC] usb: add usb_fill_iso_urb() From: Laurent Pinchart Message-Id: <7448274.qCPulqGHgV@avalon> Date: Tue, 07 Aug 2018 00:21:26 +0300 To: Sebastian Andrzej Siewior Cc: Greg Kroah-Hartman , Alan Stern , linux-media@vger.kernel.org, Mauro Carvalho Chehab , linux-usb@vger.kernel.org, tglx@linutronix.de, Takashi Iwai List-ID: SGkgU2ViYXN0aWFuLAoKT24gVHVlc2RheSwgMTcgSnVseSAyMDE4IDAxOjUzOjU3IEVFU1QgU2Vi YXN0aWFuIEFuZHJ6ZWogU2lld2lvciB3cm90ZToKPiBPbiAyMDE4LTA3LTEzIDA5OjQ3OjI4IFsr MDIwMF0sIFRvIEdyZWcgS3JvYWgtSGFydG1hbiB3cm90ZToKPiA+IHN1cmUuIExldCBtZSByZWZy ZXNoIG15IG9sZCB1c2JfZmlsbF9pbnRfdXJiKCkgc2VyaWVzIHdpdGggdGhpcyBpbnN0ZWFkLgo+ IAo+IFRoZSBzZXJpZXMgaXMgYXQKPiAgIAo+IGh0dHBzOi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3Nj bS9saW51eC9rZXJuZWwvZ2l0L2JpZ2Vhc3kvc3RhZ2luZy5naXQvbG9nLz9oPQo+IHVzYi1pc28K PiAKPiBhbmQgbmVlZHMgZG91YmxlIGNoZWNraW5nIGJlZm9yZSBpdCBjYW4gYmUgcG9zdGVkIChh bmQgYWRkcmVzc2luZyB0aGUKPiBmZXcgY29tbWVudHMgSSBoYWQgc28gZmFyKS4KCkRvIHlvdSBw bGFuIHRvIHNlbmQgaXQgaW4gdGhlIG5lYXIgZnV0dXJlID8gSSBrbm93IHRoaXMgYWxsIHN0YXJ0 ZWQgd2l0aCAKc2ltcGxlIHBhdGNoZXMgYW5kIGdyZXcgdG8gYSBtb3JlIGNvbXBsZXggcGF0Y2gg c2VyaWVzLCBidXQgcGxlYXNlIGRvbid0IGdpdmUgCnVwLCB5b3VyIHdvcmsgaXMgdmFsdWFibGUu Cgo+IEhlcmUgYXJlIGp1c3QgdGhlIGhpZ2hsaWdodHM6Cj4gLSB1c2JfZmlsbF9pc29fdXJiKCkg aXRzZWxmOgo+IAo+ICtzdGF0aWMgaW5saW5lIHZvaWQgdXNiX2ZpbGxfaXNvX3VyYihzdHJ1Y3Qg dXJiICp1cmIsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHVz Yl9kZXZpY2UgKmRldiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp Z25lZCBpbnQgcGlwZSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lk ICp0cmFuc2Zlcl9idWZmZXIsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aW50IGJ1ZmZlcl9sZW5ndGgsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dXNiX2NvbXBsZXRlX3QgY29tcGxldGVfZm4sCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdm9pZCAqY29udGV4dCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgaW50ZXJ2YWwsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dW5zaWduZWQgaW50IHBhY2tldHMsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdW5zaWduZWQgaW50IHBhY2tldF9zaXplKQo+ICt7Cj4gKyAgICAgICB1bnNpZ25lZCBpbnQg aTsKPiArCj4gKyAgICAgICB1cmItPmRldiA9IGRldjsKPiArICAgICAgIHVyYi0+cGlwZSA9IHBp cGU7Cj4gKyAgICAgICB1cmItPnRyYW5zZmVyX2J1ZmZlciA9IHRyYW5zZmVyX2J1ZmZlcjsKPiAr ICAgICAgIHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IGJ1ZmZlcl9sZW5ndGg7Cj4gKyAg ICAgICB1cmItPmNvbXBsZXRlID0gY29tcGxldGVfZm47Cj4gKyAgICAgICB1cmItPmNvbnRleHQg PSBjb250ZXh0Owo+ICsKPiArICAgICAgIGludGVydmFsID0gY2xhbXAoaW50ZXJ2YWwsIDEsIDE2 KTsKPiArICAgICAgIHVyYi0+aW50ZXJ2YWwgPSAxIDw8IChpbnRlcnZhbCAtIDEpOwo+ICsgICAg ICAgdXJiLT5zdGFydF9mcmFtZSA9IC0xOwo+ICsKPiArICAgICAgIGlmIChwYWNrZXRzKQo+ICsg ICAgICAgICAgICAgICB1cmItPm51bWJlcl9vZl9wYWNrZXRzID0gcGFja2V0czsKPiArCj4gKyAg ICAgICBpZiAocGFja2V0X3NpemUpIHsKPiArICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8 IHBhY2tldHM7IGkrKykgewo+ICsgICAgICAgICAgICAgICAgICAgICAgIHVyYi0+aXNvX2ZyYW1l X2Rlc2NbaV0ub2Zmc2V0ID0gcGFja2V0X3NpemUgKiBpOwo+ICsgICAgICAgICAgICAgICAgICAg ICAgIHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ubGVuZ3RoID0gcGFja2V0X3NpemU7Cj4gKyAgICAg ICAgICAgICAgIH0KPiArICAgICAgIH0KPiArfQo+IAo+IE15IHVuZGVyc3RhbmRpbmcgaXMgdGhh dCAtPnN0YXJ0X2ZyYW1lIGlzIG9ubHkgYSByZXR1cm4gcGFyYW1ldGVyLiBUaGUKPiB2YWx1ZSBp cyBlaXRoZXIgaW1wbGljaXQgemVybyAodmlhIGt6YWxsb2MoKS9tZW1zZXQoKSkgb3IgZXhwbGlj aXQKPiBhc3NpZ25tZW50IHRvIDAgb3IgLTEuIFNvIHNpbmNlIGl0IGlzIGEgcmV0dXJuIHZhbHVl IGFuIGluaXQgdG8gMCB3b3VsZAo+IG5vdCBiZSByZXF1aXJlZCBhbmQgYW4gaW5pdGlhbGlzYXRp b24gdG8gLTEgKGxpa2UgZm9yIElOVCkgd291bGQgYmUKPiBva2F5LiBBbSBJIHdyb25nPwo+IAo+ IHNvdW5kLyBpcyAoYWxtb3N0KSB0aGUgb25seSBwYXJ0IHdoZXJlIHN0cnVjdCB1c2JfaXNvX3Bh Y2tldF9kZXNjcmlwdG9yCj4gaW5pdCBkb2VzIG5vdCBmaXQuIEl0IGxvb2tzIGxpa2UgaXQgaXMg ZG9uZSBqdXN0IGJlZm9yZSB1cmJfc3VibWl0KCkgYW5kCj4gY291bGQgYmUgYXZvaWRlZCB0aGVy ZSAobW92ZWQgdG8gdGhlIGluaXQgZnVudGNpb24gaW5zdGVhZCkuIEhvd2V2ZXIgSQo+IGF2b2lk ZWQgY2hhbmdpbmcgaXQgYW5kIGFkZGVkIGEgemVybyBjaGVjayBmb3IgYHBhY2tldF9zaXplJyBz byBpdCBjYW4KPiBiZSBza2lwcGVkLiBJIGFsc28gbmVlZCB0byBjaGVjayBpZiB0aGUgYGludGVy dmFsJyB2YWx1ZSBoZXJlIHRvIHNlZSBpZgo+IGl0IHdvcmtzIGFzIGV4cGVjdGVkLiBUd28gZXhh bXBsZXM6Cj4gCj4gZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi9lbmRwb2ludC5jIGIvc291bmQvdXNi L2VuZHBvaW50LmMKPiBpbmRleCBjOTA2MDdlYmUxNTUuLmYxZDRlOTBlMWQyMyAxMDA2NDQKPiAt LS0gYS9zb3VuZC91c2IvZW5kcG9pbnQuYwo+ICsrKyBiL3NvdW5kL3VzYi9lbmRwb2ludC5jCj4g QEAgLTc3Miw2ICs3NzIsOCBAQCBzdGF0aWMgaW50IGRhdGFfZXBfc2V0X3BhcmFtcyhzdHJ1Y3Qg c25kX3VzYl9lbmRwb2ludAo+ICplcCwgLyogYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgZGF0YSB1 cmJzICovCj4gIAlmb3IgKGkgPSAwOyBpIDwgZXAtPm51cmJzOyBpKyspIHsKPiAgCQlzdHJ1Y3Qg c25kX3VyYl9jdHggKnUgPSAmZXAtPnVyYltpXTsKPiArCQl2b2lkICpidWY7Cj4gKwo+ICAJCXUt PmluZGV4ID0gaTsKPiAgCQl1LT5lcCA9IGVwOwo+ICAJCXUtPnBhY2tldHMgPSB1cmJfcGFja3M7 Cj4gQEAgLTc4MywxNiArNzg1LDE0IEBAIHN0YXRpYyBpbnQgZGF0YV9lcF9zZXRfcGFyYW1zKHN0 cnVjdCBzbmRfdXNiX2VuZHBvaW50Cj4gKmVwLCBpZiAoIXUtPnVyYikKPiAgCQkJZ290byBvdXRf b2ZfbWVtb3J5Owo+IAo+IC0JCXUtPnVyYi0+dHJhbnNmZXJfYnVmZmVyID0KPiAtCQkJdXNiX2Fs bG9jX2NvaGVyZW50KGVwLT5jaGlwLT5kZXYsIHUtPmJ1ZmZlcl9zaXplLAo+IC0JCQkJCSAgIEdG UF9LRVJORUwsICZ1LT51cmItPnRyYW5zZmVyX2RtYSk7Cj4gLQkJaWYgKCF1LT51cmItPnRyYW5z ZmVyX2J1ZmZlcikKPiArCQlidWYgPSB1c2JfYWxsb2NfY29oZXJlbnQoZXAtPmNoaXAtPmRldiwg dS0+YnVmZmVyX3NpemUsCj4gKwkJCQkJIEdGUF9LRVJORUwsICZ1LT51cmItPnRyYW5zZmVyX2Rt YSk7Cj4gKwkJaWYgKCFidWYpCj4gIAkJCWdvdG8gb3V0X29mX21lbW9yeTsKPiAtCQl1LT51cmIt PnBpcGUgPSBlcC0+cGlwZTsKPiArCQl1c2JfZmlsbF9pc29fdXJiKHUtPnVyYiwgTlVMTCwgZXAt PnBpcGUsIGJ1ZiwgdS0+YnVmZmVyX3NpemUsCj4gKwkJCQkgc25kX2NvbXBsZXRlX3VyYiwgdSwg ZXAtPmRhdGFpbnRlcnZhbCArIDEsIDAsCj4gKwkJCQkgMCk7Cj4gIAkJdS0+dXJiLT50cmFuc2Zl cl9mbGFncyA9IFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOwo+IC0JCXUtPnVyYi0+aW50ZXJ2YWwg PSAxIDw8IGVwLT5kYXRhaW50ZXJ2YWw7Cj4gLQkJdS0+dXJiLT5jb250ZXh0ID0gdTsKPiAtCQl1 LT51cmItPmNvbXBsZXRlID0gc25kX2NvbXBsZXRlX3VyYjsKPiAgCQlJTklUX0xJU1RfSEVBRCgm dS0+cmVhZHlfbGlzdCk7Cj4gIAl9Cj4gCj4gQEAgLTgyMywxNSArODIzLDEyIEBAIHN0YXRpYyBp bnQgc3luY19lcF9zZXRfcGFyYW1zKHN0cnVjdCBzbmRfdXNiX2VuZHBvaW50Cj4gKmVwKSB1LT51 cmIgPSB1c2JfYWxsb2NfdXJiKDEsIEdGUF9LRVJORUwpOwo+ICAJCWlmICghdS0+dXJiKQo+ICAJ CQlnb3RvIG91dF9vZl9tZW1vcnk7Cj4gLQkJdS0+dXJiLT50cmFuc2Zlcl9idWZmZXIgPSBlcC0+ c3luY2J1ZiArIGkgKiA0Owo+ICsJCXVzYl9maWxsX2lzb191cmIodS0+dXJiLCBOVUxMLCBlcC0+ cGlwZSwgZXAtPnN5bmNidWYgKyBpICogNCwgNCwKPiArCQkJCSBzbmRfY29tcGxldGVfdXJiLCB1 LCBlcC0+c3luY2ludGVydmFsICsgMSwgMSwKPiArCQkJCSAwKTsKPiArCj4gIAkJdS0+dXJiLT50 cmFuc2Zlcl9kbWEgPSBlcC0+c3luY19kbWEgKyBpICogNDsKPiAtCQl1LT51cmItPnRyYW5zZmVy X2J1ZmZlcl9sZW5ndGggPSA0Owo+IC0JCXUtPnVyYi0+cGlwZSA9IGVwLT5waXBlOwo+ICAJCXUt PnVyYi0+dHJhbnNmZXJfZmxhZ3MgPSBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKPiAtCQl1LT51 cmItPm51bWJlcl9vZl9wYWNrZXRzID0gMTsKPiAtCQl1LT51cmItPmludGVydmFsID0gMSA8PCBl cC0+c3luY2ludGVydmFsOwo+IC0JCXUtPnVyYi0+Y29udGV4dCA9IHU7Cj4gLQkJdS0+dXJiLT5j b21wbGV0ZSA9IHNuZF9jb21wbGV0ZV91cmI7Cj4gIAl9Cj4gCj4gIAllcC0+bnVyYnMgPSBTWU5D X1VSQlM7Cj4gCj4gZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi91c3gyeS91c3gyeWh3ZGVwcGNtLmMK PiBiL3NvdW5kL3VzYi91c3gyeS91c3gyeWh3ZGVwcGNtLmMgaW5kZXggNGZkOTI3NmI4ZTUwLi4z OTI4ZDBkNTAwMjggMTAwNjQ0Cj4gLS0tIGEvc291bmQvdXNiL3VzeDJ5L3VzeDJ5aHdkZXBwY20u Ywo+ICsrKyBiL3NvdW5kL3VzYi91c3gyeS91c3gyeWh3ZGVwcGNtLmMKPiBAQCAtMzI1LDYgKzMy NSw4IEBAIHN0YXRpYyBpbnQgdXNYMllfdXNicGNtX3VyYnNfYWxsb2NhdGUoc3RydWN0Cj4gc25k X3VzWDJZX3N1YnN0cmVhbSAqc3VicykgLyogYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgZGF0YSB1 cmJzICovCj4gIAlmb3IgKGkgPSAwOyBpIDwgTlJVUkJTOyBpKyspIHsKPiAgCQlzdHJ1Y3QgdXJi ICoqcHVyYiA9IHN1YnMtPnVyYiArIGk7Cj4gKwkJdm9pZCAqYnVmOwo+ICsKPiAgCQlpZiAoKnB1 cmIpIHsKPiAgCQkJdXNiX2tpbGxfdXJiKCpwdXJiKTsKPiAgCQkJY29udGludWU7Cj4gQEAgLTMz NCwxOCArMzM2LDE4IEBAIHN0YXRpYyBpbnQgdXNYMllfdXNicGNtX3VyYnNfYWxsb2NhdGUoc3Ry dWN0Cj4gc25kX3VzWDJZX3N1YnN0cmVhbSAqc3VicykgdXNYMllfdXNicGNtX3VyYnNfcmVsZWFz ZShzdWJzKTsKPiAgCQkJcmV0dXJuIC1FTk9NRU07Cj4gIAkJfQo+IC0JCSgqcHVyYiktPnRyYW5z ZmVyX2J1ZmZlciA9IGlzX3BsYXliYWNrID8KPiAtCQkJc3Vicy0+dXNYMlktPmh3ZGVwX3BjbV9z aG0tPnBsYXliYWNrIDogKAo+IC0JCQkJc3Vicy0+ZW5kcG9pbnQgPT0gMHg4ID8KPiAtCQkJCXN1 YnMtPnVzWDJZLT5od2RlcF9wY21fc2htLT5jYXB0dXJlMHg4IDoKPiAtCQkJCXN1YnMtPnVzWDJZ LT5od2RlcF9wY21fc2htLT5jYXB0dXJlMHhBKTsKPiAtCj4gLQkJKCpwdXJiKS0+ZGV2ID0gZGV2 Owo+IC0JCSgqcHVyYiktPnBpcGUgPSBwaXBlOwo+IC0JCSgqcHVyYiktPm51bWJlcl9vZl9wYWNr ZXRzID0gbnJfb2ZfcGFja3MoKTsKPiAtCQkoKnB1cmIpLT5jb250ZXh0ID0gc3ViczsKPiAtCQko KnB1cmIpLT5pbnRlcnZhbCA9IDE7Cj4gLQkJKCpwdXJiKS0+Y29tcGxldGUgPSBpX3VzWDJZX3Vz YnBjbV9zdWJzX3N0YXJ0dXA7Cj4gKwkJaWYgKGlzX3BsYXliYWNrKSB7Cj4gKwkJCWJ1ZiA9IHN1 YnMtPnVzWDJZLT5od2RlcF9wY21fc2htLT5wbGF5YmFjazsKPiArCQl9IGVsc2Ugewo+ICsJCQlp ZiAoc3Vicy0+ZW5kcG9pbnQgPT0gMHg4KQo+ICsJCQkJYnVmID0gc3Vicy0+dXNYMlktPmh3ZGVw X3BjbV9zaG0tPmNhcHR1cmUweDg7Cj4gKwkJCWVsc2UKPiArCQkJCWJ1ZiA9IHN1YnMtPnVzWDJZ LT5od2RlcF9wY21fc2htLT5jYXB0dXJlMHhBOwo+ICsJCX0KPiArCQl1c2JfZmlsbF9pc29fdXJi KCpwdXJiLCBkZXYsIHBpcGUsIGJ1ZiwKPiArCQkJCSBzdWJzLT5tYXhwYWNrc2l6ZSAqIG5yX29m X3BhY2tzKCksCj4gKwkJCQkgaV91c1gyWV91c2JwY21fc3Vic19zdGFydHVwLCBzdWJzLCAxLAo+ ICsJCQkJIG5yX29mX3BhY2tzKCksIDApOwo+ICAJfQo+ICAJcmV0dXJuIDA7Cj4gIH0KPiAKPiBU aGUgdXNlcnMgaW4gbWVkaWEvIGxvb2sgYWxtb3N0IGFsd2F5cyB0aGUgc2FtZSwgYSByYW5kb20g b25lOgo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3VzYi9wd2MvcHdjLWlmLmMgYi9k cml2ZXJzL21lZGlhL3VzYi9wd2MvcHdjLWlmLmMKPiBpbmRleCA1NGIwMzZkMzljNWIuLjJlNjBk NjI1NzU5NiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL21lZGlhL3VzYi9wd2MvcHdjLWlmLmMKPiAr KysgYi9kcml2ZXJzL21lZGlhL3VzYi9wd2MvcHdjLWlmLmMKPiBAQCAtMzU4LDcgKzM1OCw3IEBA IHN0YXRpYyBpbnQgcHdjX2lzb2NfaW5pdChzdHJ1Y3QgcHdjX2RldmljZSAqcGRldikKPiAgewo+ ICAJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7Cj4gIAlzdHJ1Y3QgdXJiICp1cmI7Cj4gLQlpbnQg aSwgaiwgcmV0Owo+ICsJaW50IGksIHJldDsKPiAgCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRm Owo+ICAJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaWRlc2MgPSBOVUxMOwo+ICAJaW50IGNv bXByZXNzaW9uID0gMDsgLyogMC4uMyA9IHVuY29tcHJlc3NlZC4uaGlnaCAqLwo+IEBAIC00MDks NiArNDA5LDggQEAgc3RhdGljIGludCBwd2NfaXNvY19pbml0KHN0cnVjdCBwd2NfZGV2aWNlICpw ZGV2KQo+IAo+ICAJLyogQWxsb2NhdGUgYW5kIGluaXQgSXNvY2hyb251b3VzIHVyYnMgKi8KPiAg CWZvciAoaSA9IDA7IGkgPCBNQVhfSVNPX0JVRlM7IGkrKykgewo+ICsJCXZvaWQgKmJ1ZjsKPiAr Cj4gIAkJdXJiID0gdXNiX2FsbG9jX3VyYihJU09fRlJBTUVTX1BFUl9ERVNDLCBHRlBfS0VSTkVM KTsKPiAgCQlpZiAodXJiID09IE5VTEwpIHsKPiAgCQkJcHdjX2lzb2NfY2xlYW51cChwZGV2KTsK PiBAQCAtNDE2LDI5ICs0MTgsMTkgQEAgc3RhdGljIGludCBwd2NfaXNvY19pbml0KHN0cnVjdCBw d2NfZGV2aWNlICpwZGV2KQo+ICAJCX0KPiAgCQlwZGV2LT51cmJzW2ldID0gdXJiOwo+ICAJCVBX Q19ERUJVR19NRU1PUlkoIkFsbG9jYXRlZCBVUkIgYXQgMHglcFxuIiwgdXJiKTsKPiAtCj4gLQkJ dXJiLT5pbnRlcnZhbCA9IDE7IC8vIGRldmlrCj4gLQkJdXJiLT5kZXYgPSB1ZGV2Owo+IC0JCXVy Yi0+cGlwZSA9IHVzYl9yY3Zpc29jcGlwZSh1ZGV2LCBwZGV2LT52ZW5kcG9pbnQpOwo+ICAJCXVy Yi0+dHJhbnNmZXJfZmxhZ3MgPSBVUkJfSVNPX0FTQVAgfCBVUkJfTk9fVFJBTlNGRVJfRE1BX01B UDsKPiAtCQl1cmItPnRyYW5zZmVyX2J1ZmZlciA9IHVzYl9hbGxvY19jb2hlcmVudCh1ZGV2LAo+ IC0JCQkJCQkJICBJU09fQlVGRkVSX1NJWkUsCj4gLQkJCQkJCQkgIEdGUF9LRVJORUwsCj4gLQkJ CQkJCQkgICZ1cmItPnRyYW5zZmVyX2RtYSk7Cj4gLQkJaWYgKHVyYi0+dHJhbnNmZXJfYnVmZmVy ID09IE5VTEwpIHsKPiArCQlidWYgPSB1c2JfYWxsb2NfY29oZXJlbnQodWRldiwgSVNPX0JVRkZF Ul9TSVpFLCBHRlBfS0VSTkVMLAo+ICsJCQkJCSAmdXJiLT50cmFuc2Zlcl9kbWEpOwo+ICsJCWlm IChidWYgPT0gTlVMTCkgewo+ICAJCQlQV0NfRVJST1IoIkZhaWxlZCB0byBhbGxvY2F0ZSB1cmIg YnVmZmVyICVkXG4iLCBpKTsKPiAgCQkJcHdjX2lzb2NfY2xlYW51cChwZGV2KTsKPiAgCQkJcmV0 dXJuIC1FTk9NRU07Cj4gIAkJfQo+IC0JCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IElT T19CVUZGRVJfU0laRTsKPiAtCQl1cmItPmNvbXBsZXRlID0gcHdjX2lzb2NfaGFuZGxlcjsKPiAt CQl1cmItPmNvbnRleHQgPSBwZGV2Owo+IC0JCXVyYi0+c3RhcnRfZnJhbWUgPSAwOwo+IC0JCXVy Yi0+bnVtYmVyX29mX3BhY2tldHMgPSBJU09fRlJBTUVTX1BFUl9ERVNDOwo+IC0JCWZvciAoaiA9 IDA7IGogPCBJU09fRlJBTUVTX1BFUl9ERVNDOyBqKyspIHsKPiAtCQkJdXJiLT5pc29fZnJhbWVf ZGVzY1tqXS5vZmZzZXQgPSBqICogSVNPX01BWF9GUkFNRV9TSVpFOwo+IC0JCQl1cmItPmlzb19m cmFtZV9kZXNjW2pdLmxlbmd0aCA9IHBkZXYtPnZtYXhfcGFja2V0X3NpemU7Cj4gLQkJfQo+ICsJ CXVzYl9maWxsX2lzb191cmIodXJiLCB1ZGV2LAo+ICsJCQkJIHVzYl9yY3Zpc29jcGlwZSh1ZGV2 LCBwZGV2LT52ZW5kcG9pbnQpLAo+ICsJCQkJIGJ1ZiwgSVNPX0JVRkZFUl9TSVpFLCBwd2NfaXNv Y19oYW5kbGVyLCBwZGV2LAo+ICsJCQkJIDEsIElTT19GUkFNRVNfUEVSX0RFU0MsCj4gKwkJCQkg cGRldi0+dm1heF9wYWNrZXRfc2l6ZSk7Cj4gIAl9Cj4gCj4gIAkvKiBsaW5rICovCj4gCj4gSSBy ZW1lbWJlciBBbGFuIGFza2VkIHRvIG1lbnRpb24gdGhhdCB0aGUgYC5sZW5ndGgnIHZhbHVlIGlz IGFsd2F5cyBzZXQKPiB0byB0aGUgc2FtZSB2YWx1ZSBieSB0aGUgcHJvcG9zZWQgZnVuY3Rpb24g d2hpbGUgaXQgY291bGQgaGF2ZSBkaWZmZXJlbnQKPiB2YWx1ZXMgKGxpa2UgWzBdLm9mZnNldCA9 IDAsIFswXS5sZW5ndGggPSA4LCBbMV0ub2Zmc2V0ID0gOCwgWzFdLmxlbmd0aAo+ID0gMTYsIFsy XS5vZmZzZXQgPSAyNCwg4oCmKS4gVW5sZXNzIEkgbWlzc2VkIHNvbWV0aGluZywgZXZlcnlvbmUg dXNpbmcgdGhlCj4gc2FtZSB2YWx1ZSBmb3IgbGVuZ3RoLiBFeGNlcHQgZm9yIHVzYmZzIHdoaWNo IHVzZXMgd2hhdCB1c2VybGFuZCBwYXNzZXM6Cj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNi L2NvcmUvZGV2aW8uYyBiL2RyaXZlcnMvdXNiL2NvcmUvZGV2aW8uYwo+IGluZGV4IDQ3NmRjYzVm MmRhMy4uNTQyOTRmMWE2Y2U1IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvZGV2aW8u Ywo+ICsrKyBiL2RyaXZlcnMvdXNiL2NvcmUvZGV2aW8uYwo+IEBAIC0xNDM2LDcgKzE0MzYsOCBA QCBzdGF0aWMgaW50IHByb2NfZG9fc3VibWl0dXJiKHN0cnVjdCB1c2JfZGV2X3N0YXRlICpwcywK PiBzdHJ1Y3QgdXNiZGV2ZnNfdXJiICp1dXJiIGludCBpLCByZXQsIGlzX2luLCBudW1fc2dzID0g MCwgaWZudW0gPSAtMTsKPiAgCWludCBudW1iZXJfb2ZfcGFja2V0cyA9IDA7Cj4gIAl1bnNpZ25l ZCBpbnQgc3RyZWFtX2lkID0gMDsKPiAtCXZvaWQgKmJ1ZjsKPiArCWludCBwaXBlOwo+ICsJdm9p ZCAqYnVmID0gTlVMTDsKPiAgCXVuc2lnbmVkIGxvbmcgbWFzayA9CVVTQkRFVkZTX1VSQl9TSE9S VF9OT1RfT0sgfAo+ICAJCQkJVVNCREVWRlNfVVJCX0JVTEtfQ09OVElOVUFUSU9OIHwKPiAgCQkJ CVVTQkRFVkZTX1VSQl9OT19GU0JSIHwKPiBAQCAtMTYzMSwyMiArMTYzMiwyMCBAQCBzdGF0aWMg aW50IHByb2NfZG9fc3VibWl0dXJiKHN0cnVjdCB1c2JfZGV2X3N0YXRlCj4gKnBzLCBzdHJ1Y3Qg dXNiZGV2ZnNfdXJiICp1dXJiIH0KPiAgCQkJdG90bGVuIC09IHU7Cj4gIAkJfQo+ICsJCWJ1ZiA9 IE5VTEw7Cj4gIAl9IGVsc2UgaWYgKHV1cmItPmJ1ZmZlcl9sZW5ndGggPiAwKSB7Cj4gIAkJaWYg KGFzLT51c2JtKSB7Cj4gIAkJCXVuc2lnbmVkIGxvbmcgdXVyYl9zdGFydCA9ICh1bnNpZ25lZCBs b25nKXV1cmItPmJ1ZmZlcjsKPiAKPiAtCQkJYXMtPnVyYi0+dHJhbnNmZXJfYnVmZmVyID0gYXMt PnVzYm0tPm1lbSArCj4gLQkJCQkJKHV1cmJfc3RhcnQgLSBhcy0+dXNibS0+dm1fc3RhcnQpOwo+ ICsJCQlidWYgPSBhcy0+dXNibS0+bWVtICsgKHV1cmJfc3RhcnQgLSBhcy0+dXNibS0+dm1fc3Rh cnQpOwo+ICAJCX0gZWxzZSB7Cj4gLQkJCWFzLT51cmItPnRyYW5zZmVyX2J1ZmZlciA9IGttYWxs b2ModXVyYi0+YnVmZmVyX2xlbmd0aCwKPiAtCQkJCQlHRlBfS0VSTkVMKTsKPiAtCQkJaWYgKCFh cy0+dXJiLT50cmFuc2Zlcl9idWZmZXIpIHsKPiArCQkJYnVmID0ga21hbGxvYyh1dXJiLT5idWZm ZXJfbGVuZ3RoLCBHRlBfS0VSTkVMKTsKPiArCQkJaWYgKCFidWYpIHsKPiAgCQkJCXJldCA9IC1F Tk9NRU07Cj4gIAkJCQlnb3RvIGVycm9yOwo+ICAJCQl9Cj4gIAkJCWlmICghaXNfaW4pIHsKPiAt CQkJCWlmIChjb3B5X2Zyb21fdXNlcihhcy0+dXJiLT50cmFuc2Zlcl9idWZmZXIsCj4gLQkJCQkJ CSAgIHV1cmItPmJ1ZmZlciwKPiArCQkJCWlmIChjb3B5X2Zyb21fdXNlcihidWYsIHV1cmItPmJ1 ZmZlciwKPiAgCQkJCQkJICAgdXVyYi0+YnVmZmVyX2xlbmd0aCkpIHsKPiAgCQkJCQlyZXQgPSAt RUZBVUxUOwo+ICAJCQkJCWdvdG8gZXJyb3I7Cj4gQEAgLTE2NTgsMTYgKzE2NTcsMTAgQEAgc3Rh dGljIGludCBwcm9jX2RvX3N1Ym1pdHVyYihzdHJ1Y3QgdXNiX2Rldl9zdGF0ZQo+ICpwcywgc3Ry dWN0IHVzYmRldmZzX3VyYiAqdXVyYiAqIHNob3J0LiBDbGVhciB0aGUgYnVmZmVyIHNvIHRoYXQg dGhlIGdhcHMKPiAgCQkJCSAqIGRvbid0IGxlYWsga2VybmVsIGRhdGEgdG8gdXNlcnNwYWNlLgo+ ICAJCQkJICovCj4gLQkJCQltZW1zZXQoYXMtPnVyYi0+dHJhbnNmZXJfYnVmZmVyLCAwLAo+IC0J CQkJCQl1dXJiLT5idWZmZXJfbGVuZ3RoKTsKPiArCQkJCW1lbXNldChidWYsIDAsIHV1cmItPmJ1 ZmZlcl9sZW5ndGgpOwo+ICAJCQl9Cj4gIAkJfQo+ICAJfQo+IC0JYXMtPnVyYi0+ZGV2ID0gcHMt PmRldjsKPiAtCWFzLT51cmItPnBpcGUgPSAodXVyYi0+dHlwZSA8PCAzMCkgfAo+IC0JCQlfX2Ny ZWF0ZV9waXBlKHBzLT5kZXYsIHV1cmItPmVuZHBvaW50ICYgMHhmKSB8Cj4gLQkJCSh1dXJiLT5l bmRwb2ludCAmIFVTQl9ESVJfSU4pOwo+IC0KPiAgCS8qIFRoaXMgdGVkaW91cyBzZXF1ZW5jZSBp cyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgVVJCXyogZmxhZ3MKPiAgCSAqIGFyZSBpbnRlcm5hbCB0 byB0aGUga2VybmVsIGFuZCBzdWJqZWN0IHRvIGNoYW5nZSwgd2hlcmVhcwo+ICAJICogdGhlIFVT QkRFVkZTX1VSQl8qIGZsYWdzIGFyZSBhIHVzZXIgQVBJIGFuZCBtdXN0IG5vdCBiZSBjaGFuZ2Vk Lgo+IEBAIC0xNjgzLDMwICsxNjc2LDQyIEBAIHN0YXRpYyBpbnQgcHJvY19kb19zdWJtaXR1cmIo c3RydWN0IHVzYl9kZXZfc3RhdGUKPiAqcHMsIHN0cnVjdCB1c2JkZXZmc191cmIgKnV1cmIgdSB8 PSBVUkJfTk9fSU5URVJSVVBUOwo+ICAJYXMtPnVyYi0+dHJhbnNmZXJfZmxhZ3MgPSB1Owo+IAo+ IC0JYXMtPnVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IHV1cmItPmJ1ZmZlcl9sZW5ndGg7 Cj4gLQlhcy0+dXJiLT5zZXR1cF9wYWNrZXQgPSAodW5zaWduZWQgY2hhciAqKWRyOwo+IC0JZHIg PSBOVUxMOwo+ICsJcGlwZSA9ICh1dXJiLT50eXBlIDw8IDMwKSB8ICh1dXJiLT5lbmRwb2ludCAm IFVTQl9ESVJfSU4pIHwKPiArCQlfX2NyZWF0ZV9waXBlKHBzLT5kZXYsIHV1cmItPmVuZHBvaW50 ICYgMHhmKTsKPiArCXN3aXRjaCAodXVyYi0+dHlwZSkgewo+ICsJY2FzZSBVU0JERVZGU19VUkJf VFlQRV9DT05UUk9MOgo+ICsJCXVzYl9maWxsX2NvbnRyb2xfdXJiKGFzLT51cmIsIHBzLT5kZXYs IHBpcGUsICh1OCAqKWRyLCBidWYsCj4gKwkJCQkgICAgIHV1cmItPmJ1ZmZlcl9sZW5ndGgsIGFz eW5jX2NvbXBsZXRlZCwgYXMpOwo+ICsJCWRyID0gTlVMTDsKPiArCQlicmVhazsKPiArCj4gKwlj YXNlIFVTQkRFVkZTX1VSQl9UWVBFX0JVTEs6Cj4gKwkJdXNiX2ZpbGxfYnVsa191cmIoYXMtPnVy YiwgcHMtPmRldiwgcGlwZSwgYnVmLAo+ICsJCQkJICB1dXJiLT5idWZmZXJfbGVuZ3RoLCBhc3lu Y19jb21wbGV0ZWQsIGFzKTsKPiArCQlicmVhazsKPiArCj4gKwljYXNlIFVTQkRFVkZTX1VSQl9U WVBFX0lOVEVSUlVQVDoKPiArCQl1c2JfZmlsbF9pbnRfdXJiKGFzLT51cmIsIHBzLT5kZXYsIHBp cGUsIGJ1ZiwKPiArCQkJCSB1dXJiLT5idWZmZXJfbGVuZ3RoLCBhc3luY19jb21wbGV0ZWQsIGFz LAo+ICsJCQkJIGVwLT5kZXNjLmJJbnRlcnZhbCk7Cj4gKwkJYnJlYWs7Cj4gKwo+ICsJY2FzZSBV U0JERVZGU19VUkJfVFlQRV9JU086Cj4gKwkJdXNiX2ZpbGxfaXNvX3VyYihhcy0+dXJiLCBwcy0+ ZGV2LCBwaXBlLCBidWYsCj4gKwkJCQkgdXVyYi0+YnVmZmVyX2xlbmd0aCwgYXN5bmNfY29tcGxl dGVkLCBhcywKPiArCQkJCSBlcC0+ZGVzYy5iSW50ZXJ2YWwsIG51bWJlcl9vZl9wYWNrZXRzLCAw KTsKPiArCQlmb3IgKHRvdGxlbiA9IHUgPSAwOyB1IDwgbnVtYmVyX29mX3BhY2tldHM7IHUrKykg ewo+ICsJCQlhcy0+dXJiLT5pc29fZnJhbWVfZGVzY1t1XS5vZmZzZXQgPSB0b3RsZW47Cj4gKwkJ CWFzLT51cmItPmlzb19mcmFtZV9kZXNjW3VdLmxlbmd0aCA9IGlzb3BrdFt1XS5sZW5ndGg7Cj4g KwkJCXRvdGxlbiArPSBpc29wa3RbdV0ubGVuZ3RoOwo+ICsJCX0KPiArCQlicmVhazsKPiArCj4g Kwl9Cj4gKwlidWYgPSBOVUxMOwo+ICAJYXMtPnVyYi0+c3RhcnRfZnJhbWUgPSB1dXJiLT5zdGFy dF9mcmFtZTsKPiAtCWFzLT51cmItPm51bWJlcl9vZl9wYWNrZXRzID0gbnVtYmVyX29mX3BhY2tl dHM7Cj4gIAlhcy0+dXJiLT5zdHJlYW1faWQgPSBzdHJlYW1faWQ7Cj4gCj4gLQlpZiAoZXAtPmRl c2MuYkludGVydmFsKSB7Cj4gLQkJaWYgKHV1cmItPnR5cGUgPT0gVVNCREVWRlNfVVJCX1RZUEVf SVNPIHx8Cj4gLQkJCQlwcy0+ZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCB8fAo+IC0JCQkJ cHMtPmRldi0+c3BlZWQgPj0gVVNCX1NQRUVEX1NVUEVSKQo+IC0JCQlhcy0+dXJiLT5pbnRlcnZh bCA9IDEgPDwKPiAtCQkJCQltaW4oMTUsIGVwLT5kZXNjLmJJbnRlcnZhbCAtIDEpOwo+IC0JCWVs c2UKPiAtCQkJYXMtPnVyYi0+aW50ZXJ2YWwgPSBlcC0+ZGVzYy5iSW50ZXJ2YWw7Cj4gLQl9Cj4g LQo+IC0JYXMtPnVyYi0+Y29udGV4dCA9IGFzOwo+IC0JYXMtPnVyYi0+Y29tcGxldGUgPSBhc3lu Y19jb21wbGV0ZWQ7Cj4gLQlmb3IgKHRvdGxlbiA9IHUgPSAwOyB1IDwgbnVtYmVyX29mX3BhY2tl dHM7IHUrKykgewo+IC0JCWFzLT51cmItPmlzb19mcmFtZV9kZXNjW3VdLm9mZnNldCA9IHRvdGxl bjsKPiAtCQlhcy0+dXJiLT5pc29fZnJhbWVfZGVzY1t1XS5sZW5ndGggPSBpc29wa3RbdV0ubGVu Z3RoOwo+IC0JCXRvdGxlbiArPSBpc29wa3RbdV0ubGVuZ3RoOwo+IC0JfQo+ICAJa2ZyZWUoaXNv cGt0KTsKPiAgCWlzb3BrdCA9IE5VTEw7Cj4gIAlhcy0+cHMgPSBwczsKPiBAQCAtMTc3Nyw2ICsx NzgyLDcgQEAgc3RhdGljIGludCBwcm9jX2RvX3N1Ym1pdHVyYihzdHJ1Y3QgdXNiX2Rldl9zdGF0 ZSAqcHMsCj4gc3RydWN0IHVzYmRldmZzX3VyYiAqdXVyYiBkZWNfdXNiX21lbW9yeV91c2VfY291 bnQoYXMtPnVzYm0sCj4gJmFzLT51c2JtLT51cmJfdXNlX2NvdW50KTsKPiAgCWtmcmVlKGlzb3Br dCk7Cj4gIAlrZnJlZShkcik7Cj4gKwlrZnJlZShidWYpOwo+ICAJaWYgKGFzKQo+ICAJCWZyZWVf YXN5bmMoYXMpOwo+ICAJcmV0dXJuIHJldDsKPiAKPiA+ID4gdGhhbmtzLAo+ID4gPiAKPiA+ID4g Z3JlZyBrLWgKPiAKPiBTZWJhc3RpYW4K