From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Krzysztof Helt" Subject: [PATCH] [ALSA] sparc dbri: ring buffered version Date: Sun, 20 Aug 2006 19:54:10 +0200 Message-ID: <44e8a1c20ab8d@wp.pl> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="part44e8a1c20d2ae" Return-path: Sender: sparclinux-owner@vger.kernel.org To: alsa-devel Cc: sparclinux List-Id: alsa-devel@alsa-project.org This is a multi-part message in MIME format. --part44e8a1c20d2ae Content-Type: text/plain; charset=iso-8859-2 Content-Transfer-Encoding: 8bit Content-Disposition: inline From: Krzysztof Helt (krzysztof.h1@wp.pl) It is a complete rework of low level layer to work on ring buffers for comands and data descriptors. This removes annoying noise due to delay in data buffer switching. Signed-off-by: Krzysztof Helt (krzysztof.h1@wp.pl) --- This patch requires the 8 previous patches I sent to the alsa-devel list. Now, DBRI commands can be sent without waiting for the previous ones to finish and data is sent through the DMA continously from the ring buffer. With this patch the ALSA DBRI driver reached the sound quality of the old kernel 2.4 driver. The driver needs more work (which I try to do in fre time): - correct support of stereo and mono modes in 8 and 16 bit - recording Regards, Krzysztof Helt ---------------------------------------------------- Najlepsze siatkarki plażowe świata w Warszawie! Międzynarodowy turniej GE Money Bank Warsaw Open 2006 Agrykola 30.08-03.09.2006 -> Wstęp wolny -> Szczegóły: http://klik.wp.pl/?adr=www.warsaw-beachvolley.pl&sid=850 --part44e8a1c20d2ae Content-Type: application/octet-stream; name="dbri-patch9.diff" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="dbri-patch9.diff" LS0tIGFsc2EtZHJpdmVyLTEuMC4xMnJjMi9hbHNhLWtlcm5lbC9zcGFyYy9kYnJpLmMJMjAwNi0w OC0yMCAxOTowNToxNS4wMDAwMDAwMDAgKzAyMDAKKysrIGxpbnV4LTIuNi4xN2Evc291bmQvc3Bh cmMvZGJyaS5jCTIwMDYtMDgtMjAgMTk6MTE6MjMuMDAwMDAwMDAwICswMjAwCkBAIC0yLDYgKzIs OCBAQAogICogRHJpdmVyIGZvciBEQlJJIHNvdW5kIGNoaXAgZm91bmQgb24gU3BhcmNzLgogICog Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE1hcnRpbiBIYWJldHMgKG1oYWJldHNAdXNlcnMuc291 cmNlZm9yZ2UubmV0KQogICoKKyAqIENvbnZlcnRlZCB0byByaW5nIGJ1ZmZlcmVkIHZlcnNpb24g YnkgS3J6eXN6dG9mIEhlbHQgKGtyenlzenRvZi5oMUB3cC5wbCkKKyAqCiAgKiBCYXNlZCBlbnRp cmVseSB1cG9uIGRyaXZlcnMvc2J1cy9hdWRpby9kYnJpLmMgd2hpY2ggaXM6CiAgKiBDb3B5cmln aHQgKEMpIDE5OTcgUnVkb2xmIEtvZW5pZyAocmZrb2VuaWdAaW1tZDQuaW5mb3JtYXRpay51bmkt ZXJsYW5nZW4uZGUpCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTkgQnJlbnQgQmFjY2FsYSAo YmFjY2FsYUBmcmVlc29mdC5vcmcpCkBAIC0yNjAsNyArMjYyLDcgQEAgc3RydWN0IGRicmlfbWVt IHsKICAqIHRoZSBDUFUgYW5kIHRoZSBEQlJJCiAgKi8KIHN0cnVjdCBkYnJpX2RtYSB7Ci0Jdm9s YXRpbGUgczMyIGNtZFtEQlJJX05PX0NNRFNdOwkvKiBQbGFjZSBmb3IgY29tbWFuZHMgICAgICAg Ki8KKwlzMzIgY21kW0RCUklfTk9fQ01EU107CQkJLyogUGxhY2UgZm9yIGNvbW1hbmRzICovCiAJ dm9sYXRpbGUgczMyIGludHJbREJSSV9JTlRfQkxLXTsJLyogSW50ZXJydXB0IGZpZWxkICAqLwog CXN0cnVjdCBkYnJpX21lbSBkZXNjW0RCUklfTk9fREVTQ1NdOwkvKiBYbWl0L3JlY2VpdmUgZGVz Y3JpcHRvcnMgKi8KIH07CkBAIC0yODQsNyArMjg2LDYgQEAgc3RydWN0IGRicmlfcGlwZSB7CiBz dHJ1Y3QgZGJyaV9zdHJlYW1pbmZvIHsKIAlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0 cmVhbTsKIAl1MzIgZHZtYV9idWZmZXI7CS8qIERldmljZSB2aWV3IG9mIEFsc2EgRE1BIGJ1ZmZl ciAqLwotCWludCBsZWZ0OwkJLyogIyBvZiBieXRlcyBsZWZ0IGluIERNQSBidWZmZXIgICovCiAJ aW50IHNpemU7CQkvKiBTaXplIG9mIERNQSBidWZmZXIgICAgICAgICAgICAgKi8KIAlzaXplX3Qg b2Zmc2V0OwkJLyogb2Zmc2V0IGluIHVzZXIgYnVmZmVyICAgICAgICAgICovCiAJaW50IHBpcGU7 CQkvKiBEYXRhIHBpcGUgdXNlZCAgICAgICAgICAgICAgICAgKi8KQEAgLTMwNSwxMSArMzA2LDEx IEBAIHN0cnVjdCBzbmRfZGJyaSB7CiAKIAl2b2lkIF9faW9tZW0gKnJlZ3M7CS8qIGRicmkgSFcg cmVncyAqLwogCWludCBkYnJpX2lycXA7CQkvKiBpbnRyIHF1ZXVlIHBvaW50ZXIgKi8KLQlpbnQg d2FpdF9zZW5kOwkJLyogc2VxdWVuY2Ugb2YgY29tbWFuZCBidWZmZXJzIHNlbmQgKi8KLQlpbnQg d2FpdF9hY2tkOwkJLyogc2VxdWVuY2Ugb2YgY29tbWFuZCBidWZmZXJzIGFja25vd2xlZGdlZCAq LwogCiAJc3RydWN0IGRicmlfcGlwZSBwaXBlc1tEQlJJX05PX1BJUEVTXTsJLyogREJSSSdzIDMy IGRhdGEgcGlwZXMgKi8KIAlpbnQgbmV4dF9kZXNjW0RCUklfTk9fREVTQ1NdOwkJLyogSW5kZXgg b2YgbmV4dCBkZXNjLCBvciAtMSAqLworCXNwaW5sb2NrX3QgY21kbG9jazsJLyogUHJvdGVjdHMg Y21kIHF1ZXVlIGFjY2Vzc2VzICovCisJczMyICpjbWRwdHI7CQkvKiBQb2ludGVyIHRvIHRoZSBs YXN0IHF1ZXVlZCBjbWQgKi8KIAogCWludCBjaGlfYnBmOwogCkBAIC01NDQsNyArNTQ1LDcgQEAg c3RydWN0IHNuZF9kYnJpIHsKICNkZWZpbmUgREJSSV9URF9UQkMJKDE8PDApCS8qIFRyYW5zbWl0 IGJ1ZmZlciBDb21wbGV0ZSAqLwogI2RlZmluZSBEQlJJX1REX1NUQVRVUyh2KSAgICAgICAoKHYp JjB4ZmYpCS8qIFRyYW5zbWl0IHN0YXR1cyAqLwogCQkJLyogTWF4aW11bSBidWZmZXIgc2l6ZSBw ZXIgVEQ6IGFsbW9zdCA4S2IgKi8KLSNkZWZpbmUgREJSSV9URF9NQVhDTlQJKCgxIDw8IDEzKSAt IDEpCisjZGVmaW5lIERCUklfVERfTUFYQ05UCSgoMSA8PCAxMykgLSA0KQogCiAvKiBSZWNlaXZl IGRlc2NyaXB0b3IgZGVmaW5lcyAqLwogI2RlZmluZSBEQlJJX1JEX0YJKDE8PDMxKQkvKiBFbmQg b2YgRnJhbWUgKi8KQEAgLTYwOCw3OSArNjA5LDExMCBAQCBUaGUgbGlzdCBpcyB0ZXJtaW5hdGVk IHdpdGggYSBXQUlUIGNvbW1hCiBDUFUgaW50ZXJydXB0IHRvIHNpZ25hbCBjb21wbGV0aW9uLgog CiBTaW5jZSB0aGUgREJSSSBjYW4gcnVuIGluIHBhcmFsbGVsIHdpdGggdGhlIENQVSwgc2V2ZXJh bCBtZWFucyBvZgotc3luY2hyb25pemF0aW9uIHByZXNlbnQgdGhlbXNlbHZlcy4gIFRoZSBtZXRo b2QgaW1wbGVtZW50ZWQgaGVyZSBpcyBjbG9zZQotdG8gdGhlIG9yaWdpbmFsIHNjaGVtZSAoUnVk b2xmJ3MpLCBhbmQgdXNlcyAyIGNvdW50ZXJzICh3YWl0X3NlbmQgYW5kCi13YWl0X2Fja2QpIHRv IHN5bmNocm9uaXplIHRoZSBjb21tYW5kIGJ1ZmZlciBiZXR3ZWVuIHRoZSBDUFUgYW5kIHRoZSBE QlJJLgotCi1BIG1vcmUgc29waGlzdGljYXRlZCBzY2hlbWUgbWlnaHQgaW52b2x2ZSBhIGNpcmN1 bGFyIGNvbW1hbmQgYnVmZmVyCi1vciBhbiBhcnJheSBvZiBjb21tYW5kIGJ1ZmZlcnMuICBBIHJv dXRpbmUgY291bGQgZmlsbCBvbmUgd2l0aAotY29tbWFuZHMgYW5kIGxpbmsgaXQgb250byBhIGxp c3QuICBXaGVuIGEgaW50ZXJydXB0IHNpZ25hbGVkCi1jb21wbGV0aW9uIG9mIHRoZSBjdXJyZW50 IGNvbW1hbmQgYnVmZmVyLCBsb29rIG9uIHRoZSBsaXN0IGZvcgotdGhlIG5leHQgb25lLgorc3lu Y2hyb25pemF0aW9uIHByZXNlbnQgdGhlbXNlbHZlcy4gVGhlIG1ldGhvZCBpbXBsZW1lbnRlZCBo ZXJlIGlzIG9ubHkKK3RvIHVzZSB0aGUgZGJyaV9jbWR3YWl0KCkgdG8gd2FpdCBmb3IgZXhlY3V0 aW9uIG9mIGJhdGNoIG9mIHNlbnQgY29tbWFuZHMuCisKK0EgY2lyY3VsYXIgY29tbWFuZCBidWZm ZXIgaXMgdXNlZCBoZXJlLiBBIG5ldyBjb21tYW5kIGlzIGJlaW5nIGFkZGVkIAord2hpbGUgb3Ro ZXIgY2FuIGJlIGV4ZWN1dGVkLiBUaGUgc2NoZW1lIHdvcmtzIGJ5IGFkZGluZyB0d28gV0FJVCBj b21tYW5kcworYWZ0ZXIgZWFjaCBzZW50IGJhdGNoIG9mIGNvbW1hbmRzLiBXaGVuIHRoZSBuZXh0 IGJhdGNoIGlzIHByZXBhcmVkIGl0IGlzCithZGRlZCBhZnRlciB0aGUgV0FJVCBjb21tYW5kcyB0 aGVuIHRoZSBXQUlUcyBhcmUgcmVwbGFjZWQgd2l0aCBzaW5nbGUgSlVNUAorY29tbWFuZCB0byB0 aGUgbmV3IGJhdGNoLiBUaGUgdGhlIERCUkkgaXMgZm9yY2VkIHRvIHJlcmVhZCB0aGUgbGFzdCBX QUlUIAorY29tbWFuZCAocmVwbGFjZWQgYnkgdGhlIEpVTVAgYnkgdGhlbikuIElmIHRoZSBEQlJJ IGlzIHN0aWxsIGV4ZWN1dGluZyAKK3ByZXZpb3VzIGNvbW1hbmRzIHRoZSByZXF1ZXN0IHRvIHJl cmVhZCB0aGUgV0FJVCBjb21tYW5kIGlzIGlnbm9yZWQuCiAKIEV2ZXJ5IHRpbWUgYSByb3V0aW5l IHdhbnRzIHRvIHdyaXRlIGNvbW1hbmRzIHRvIHRoZSBEQlJJLCBpdCBtdXN0Ci1maXJzdCBjYWxs IGRicmlfY21kbG9jaygpIGFuZCBnZXQgYW4gaW5pdGlhbCBwb2ludGVyIGludG8gZGJyaS0+ZG1h LT5jbWQKLWluIHJldHVybi4gZGJyaV9jbWRsb2NrKCkgd2lsbCBibG9jayBpZiB0aGUgcHJldmlv dXMgY29tbWFuZHMgaGF2ZSBub3QKLWJlZW4gY29tcGxldGVkIHlldC4gQWZ0ZXIgdGhpcyB0aGUg Y29tbWFuZHMgY2FuIGJlIHdyaXR0ZW4gdG8gdGhlIGJ1ZmZlciwKLWFuZCBkYnJpX2NtZHNlbmQo KSBpcyBjYWxsZWQgd2l0aCB0aGUgZmluYWwgcG9pbnRlciB2YWx1ZSB0byBzZW5kIHRoZW0KLXRv IHRoZSBEQlJJLgorZmlyc3QgY2FsbCBkYnJpX2NtZGxvY2soKSBhbmQgZ2V0IHBvaW50ZXIgdG8g YSBmcmVlIHNwYWNlIGluIAorZGJyaS0+ZG1hLT5jbWQgYnVmZmVyLiBBZnRlciB0aGlzLCB0aGUg Y29tbWFuZHMgY2FuIGJlIHdyaXR0ZW4gdG8gCit0aGUgYnVmZmVyLCBhbmQgZGJyaV9jbWRzZW5k KCkgaXMgY2FsbGVkIHdpdGggdGhlIGZpbmFsIHBvaW50ZXIgdmFsdWUgCit0byBzZW5kIHRoZW0g dG8gdGhlIERCUkkuCiAKICovCiAKIHN0YXRpYyB2b2lkIGRicmlfcHJvY2Vzc19pbnRlcnJ1cHRf YnVmZmVyKHN0cnVjdCBzbmRfZGJyaSAqIGRicmkpOwogCi1lbnVtIGRicmlfbG9jayB7IE5vR2V0 TG9jaywgR2V0TG9jayB9OwogI2RlZmluZSBNQVhMT09QUyAxMAotCi1zdGF0aWMgdm9sYXRpbGUg czMyICpkYnJpX2NtZGxvY2soc3RydWN0IHNuZF9kYnJpICogZGJyaSwgZW51bSBkYnJpX2xvY2sg Z2V0KQorLyoKKyAqIFdhaXQgZm9yIHRoZSBjdXJyZW50IGNvbW1hbmQgc3RyaW5nIHRvIGV4ZWN1 dGUKKyAqLworc3RhdGljIHZvaWQgZGJyaV9jbWR3YWl0KHN0cnVjdCBzbmRfZGJyaSAqZGJyaSkK IHsKIAlpbnQgbWF4bG9vcHMgPSBNQVhMT09QUzsKIAotI2lmbmRlZiBTTVAKLQlpZiAoKGdldCA9 PSBHZXRMb2NrKSAmJiBzcGluX2lzX2xvY2tlZCgmZGJyaS0+bG9jaykpIHsKLQkJcHJpbnRrKEtF Uk5fRVJSICJEQlJJOiBjbWRsb2NrIGNhbGxlZCB3aGlsZSBpbiBzcGlubG9jay4iKTsKLQl9Ci0j ZW5kaWYKLQogCS8qIERlbGF5IGlmIHByZXZpb3VzIGNvbW1hbmRzIGFyZSBzdGlsbCBiZWluZyBw cm9jZXNzZWQgKi8KLQl3aGlsZSAoKC0tbWF4bG9vcHMpID4gMCAmJiAoZGJyaS0+d2FpdF9zZW5k ICE9IGRicmktPndhaXRfYWNrZCkpIHsKKwl3aGlsZSAoKC0tbWF4bG9vcHMpID4gMCAmJiAoc2J1 c19yZWFkbChkYnJpLT5yZWdzICsgUkVHMCkgJiBEX1ApKQogCQltc2xlZXBfaW50ZXJydXB0aWJs ZSgxKTsKLQl9CisKIAlpZiAobWF4bG9vcHMgPT0gMCkgewotCQlwcmludGsoS0VSTl9FUlIgIkRC Ukk6IENoaXAgbmV2ZXIgY29tcGxldGVkIGNvbW1hbmQgYnVmZmVyICVkXG4iLAotCQkJZGJyaS0+ d2FpdF9zZW5kKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJEQlJJOiBDaGlwIG5ldmVyIGNvbXBsZXRl ZCBjb21tYW5kIGJ1ZmZlclxuIik7CiAJfSBlbHNlIHsKIAkJZHByaW50ayhEX0NNRCwgIkNoaXAg Y29tcGxldGVkIGNvbW1hbmQgYnVmZmVyICglZClcbiIsCiAJCQlNQVhMT09QUyAtIG1heGxvb3Bz IC0gMSk7CiAJfQorfQorLyoKKyAqIExvY2sgdGhlIGNvbW1hbmQgcXVldWUgYW5kIHJldHVybnMg cG9pbnRlciB0byBhIHNwYWNlIGZvciBsZW4gY21kIHdvcmRzCisgKiBJdCBsb2NrcyB0aGUgY21k bG9jayBzcGlubG9jay4KKyAqLworc3RhdGljIHMzMiAqZGJyaV9jbWRsb2NrKHN0cnVjdCBzbmRf ZGJyaSAqIGRicmksIGludCBsZW4pCit7CisJLyogU3BhY2UgZm9yIDIgV0FJVCBjbWRzIChyZXBs YWNlZCBsYXRlciBieSAxIEpVTVAgY21kKSAqLworCWxlbiArPSAyOworCXNwaW5fbG9jaygmZGJy aS0+Y21kbG9jayk7CisJaWYgKGRicmktPmNtZHB0ciAtIGRicmktPmRtYS0+Y21kICsgbGVuIDwg REJSSV9OT19DTURTIC0gMikKKwkJcmV0dXJuIGRicmktPmNtZHB0ciArIDI7CisJZWxzZSBpZiAo bGVuIDwgc2J1c19yZWFkbChkYnJpLT5yZWdzICsgUkVHOCkgLSBkYnJpLT5kbWFfZHZtYSkKKwkJ cmV0dXJuIGRicmktPmRtYS0+Y21kOworCWVsc2UKKwkJcHJpbnRrKEtFUk5fRVJSICJEQlJJOiBu byBzcGFjZSBmb3IgY29tbWFuZHMuIik7CiAKLQkvKmlmIChnZXQgPT0gR2V0TG9jaykgc3Bpbl9s b2NrKCZkYnJpLT5sb2NrKTsgKi8KLQlyZXR1cm4gJmRicmktPmRtYS0+Y21kWzBdOworCXJldHVy biAwOwogfQogCi1zdGF0aWMgdm9pZCBkYnJpX2NtZHNlbmQoc3RydWN0IHNuZF9kYnJpICogZGJy aSwgdm9sYXRpbGUgczMyICogY21kKQorLyoKKyAqIFNlbmQgcHJlcGFyZWQgY21kIHN0cmluZy4g SXQgd29ya3MgYnkgd3JpdHRpbmcgYSBKTVAgY21kIGludG8KKyAqIHRoZSBsYXN0IFdBSVQgY21k IGFuZCBmb3JjZSBEQlJJIHRvIHJlcmVhZCB0aGUgY21kLgorICogVGhlIEpNUCBjbWQgcG9pbnRz IHRvIHRoZSBuZXcgY21kIHN0cmluZy4KKyAqIEl0IGFsc28gcmVsZWFzZXMgdGhlIGNtZGxvY2sg c3BpbmxvY2suCisgKi8KK3N0YXRpYyB2b2lkIGRicmlfY21kc2VuZChzdHJ1Y3Qgc25kX2Ricmkg KiBkYnJpLCBzMzIgKiBjbWQsaW50IGxlbikKIHsKLQl2b2xhdGlsZSBzMzIgKnB0cjsKKwlzMzIg KnB0cjsKKwlzMzIgdG1wLCBhZGRyOworCXN0YXRpYyBpbnQgd2FpdF9pZCA9IDA7CisKKwl3YWl0 X2lkKys7CisJd2FpdF9pZCAmPSAweGZmZmY7CS8qIHJlc3RyaWN0IGl0IHRvIGEgMTYgYml0IGNv dW50ZXIuICovCisJKihjbWQpID0gREJSSV9DTUQoRF9XQUlULCAxLCB3YWl0X2lkKTsKKwkqKGNt ZCsxKSA9IERCUklfQ01EKERfV0FJVCwgMSwgd2FpdF9pZCk7CisKKwkvKiBSZXBsYWNlIHRoZSBs YXN0IGNvbW1hbmQgd2l0aCBKVU1QICovCisJYWRkciA9IGRicmktPmRtYV9kdm1hICsgKGNtZCAt IGxlbiAtIGRicmktPmRtYS0+Y21kKSAqIHNpemVvZihzMzIpOworCSooZGJyaS0+Y21kcHRyKzEp ID0gYWRkcjsKKwkqKGRicmktPmNtZHB0cikgPSBEQlJJX0NNRChEX0pVTVAsIDAsIDApOwogCi0J Zm9yIChwdHIgPSAmZGJyaS0+ZG1hLT5jbWRbMF07IHB0ciA8IGNtZDsgcHRyKyspIHsKKyNpZmRl ZiBEQlJJX0RFQlVHCisJaWYgKGNtZCA+IGRicmktPmNtZHB0ciApCisJCWZvciAocHRyID0gZGJy aS0+Y21kcHRyOyBwdHIgPCBjbWQrMjsgcHRyKyspIHsKKwkJCWRwcmludGsoRF9DTUQsICJjbWQ6 ICVseDolMDh4XG4iLCAodW5zaWduZWQgbG9uZylwdHIsICpwdHIpOworCQl9CisJZWxzZSB7CisJ CXB0ciA9IGRicmktPmNtZHB0cjsKIAkJZHByaW50ayhEX0NNRCwgImNtZDogJWx4OiUwOHhcbiIs ICh1bnNpZ25lZCBsb25nKXB0ciwgKnB0cik7CisJCXB0ciA9IGRicmktPmNtZHB0cisxOworCQlk cHJpbnRrKERfQ01ELCAiY21kOiAlbHg6JTA4eFxuIiwgKHVuc2lnbmVkIGxvbmcpcHRyLCAqcHRy KTsKKwkJZm9yIChwdHIgPSBkYnJpLT5kbWEtPmNtZDsgcHRyIDwgY21kKzI7IHB0cisrKSB7CisJ CQlkcHJpbnRrKERfQ01ELCAiY21kOiAlbHg6JTA4eFxuIiwgKHVuc2lnbmVkIGxvbmcpcHRyLCAq cHRyKTsKKwkJfQogCX0KKyNlbmRpZgogCi0JaWYgKChjbWQgLSAmZGJyaS0+ZG1hLT5jbWRbMF0p ID49IERCUklfTk9fQ01EUyAtIDEpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJEQlJJOiBDb21tYW5k IGJ1ZmZlciBvdmVyZmxvdyEgKGJ1ZyBpbiBkcml2ZXIpXG4iKTsKLQkJLyogSWdub3JlIHRoZSBs YXN0IHBhcnQuICovCi0JCWNtZCA9ICZkYnJpLT5kbWEtPmNtZFtEQlJJX05PX0NNRFMgLSAzXTsK LQl9Ci0KLQlkYnJpLT53YWl0X3NlbmQrKzsKLQlkYnJpLT53YWl0X3NlbmQgJj0gMHhmZmZmOwkv KiByZXN0cmljdCBpdCB0byBhIDE2IGJpdCBjb3VudGVyLiAqLwotCSooY21kKyspID0gREJSSV9D TUQoRF9QQVVTRSwgMCwgMCk7Ci0JKihjbWQrKykgPSBEQlJJX0NNRChEX1dBSVQsIDEsIGRicmkt PndhaXRfc2VuZCk7Ci0KLQkvKiBTZXQgY29tbWFuZCBwb2ludGVyIGFuZCBzaWduYWwgaXQgaXMg dmFsaWQuICovCi0Jc2J1c193cml0ZWwoZGJyaS0+ZG1hX2R2bWEsIGRicmktPnJlZ3MgKyBSRUc4 KTsKKwkvKiBSZXJlYWQgdGhlIGxhc3QgY29tbWFuZCAqLworCXRtcCA9IHNidXNfcmVhZGwoZGJy aS0+cmVncyArIFJFRzApOworCXRtcCB8PSBEX1A7CisJc2J1c193cml0ZWwodG1wLCBkYnJpLT5y ZWdzICsgUkVHMCk7CiAKLQkvKnNwaW5fdW5sb2NrKCZkYnJpLT5sb2NrKTsgKi8KKwlkYnJpLT5j bWRwdHIgPSBjbWQ7CisJc3Bpbl91bmxvY2soJmRicmktPmNtZGxvY2spOwogfQogCiAvKiBMb2Nr IG11c3QgYmUgaGVsZCB3aGVuIGNhbGxpbmcgdGhpcyAqLwpAQCAtNzA5LDcgKzc0MSw3IEBAIHN0 YXRpYyB2b2lkIGRicmlfcmVzZXQoc3RydWN0IHNuZF9kYnJpICoKIC8qIExvY2sgbXVzdCBub3Qg YmUgaGVsZCBiZWZvcmUgY2FsbGluZyB0aGlzICovCiBzdGF0aWMgdm9pZCBkYnJpX2luaXRpYWxp emUoc3RydWN0IHNuZF9kYnJpICogZGJyaSkKIHsKLQl2b2xhdGlsZSBzMzIgKmNtZDsKKwlzMzIg KmNtZDsKIAl1MzIgZG1hX2FkZHI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgbjsKQEAg LTcxOCwxNCArNzUwLDExIEBAIHN0YXRpYyB2b2lkIGRicmlfaW5pdGlhbGl6ZShzdHJ1Y3Qgc25k X2QKIAogCWRicmlfcmVzZXQoZGJyaSk7CiAKLQljbWQgPSBkYnJpX2NtZGxvY2soZGJyaSwgTm9H ZXRMb2NrKTsKLQlkcHJpbnRrKERfR0VOLCAiaW5pdDogY21kOiAlcCwgaW50OiAlcFxuIiwKLQkJ JmRicmktPmRtYS0+Y21kWzBdLCAmZGJyaS0+ZG1hLT5pbnRyWzBdKTsKLQogCS8qIEluaXRpYWxp emUgcGlwZXMgKi8KIAlmb3IgKG4gPSAwOyBuIDwgREJSSV9OT19QSVBFUzsgbisrKQogCQlkYnJp LT5waXBlc1tuXS5kZXNjID0gZGJyaS0+cGlwZXNbbl0uZmlyc3RfZGVzYyA9IC0xOwogCisJc3Bp bl9sb2NrX2luaXQoJmRicmktPmNtZGxvY2spOwogCS8qCiAJICogSW5pdGlhbGl6ZSB0aGUgaW50 ZXJydXB0IHJpbmdidWZmZXIuCiAJICovCkBAIC03MzUsMTAgKzc2NCwxOSBAQCBzdGF0aWMgdm9p ZCBkYnJpX2luaXRpYWxpemUoc3RydWN0IHNuZF9kCiAJLyoKIAkgKiBTZXQgdXAgdGhlIGludGVy cnVwdCBxdWV1ZQogCSAqLworCXNwaW5fbG9jaygmZGJyaS0+Y21kbG9jayk7CisJY21kID0gZGJy aS0+Y21kcHRyID0gZGJyaS0+ZG1hLT5jbWQ7CiAJKihjbWQrKykgPSBEQlJJX0NNRChEX0lJUSwg MCwgMCk7CiAJKihjbWQrKykgPSBkbWFfYWRkcjsKKwkqKGNtZCsrKSA9IERCUklfQ01EKERfUEFV U0UsIDAsIDApOworCWRicmktPmNtZHB0ciA9IGNtZDsKKwkqKGNtZCsrKSA9IERCUklfQ01EKERf V0FJVCwgMSwgMCk7CisJKihjbWQrKykgPSBEQlJJX0NNRChEX1dBSVQsIDEsIDApOworCWRtYV9h ZGRyID0gZGJyaS0+ZG1hX2R2bWEgKyBkYnJpX2RtYV9vZmYoY21kLCAwKTsKKwlzYnVzX3dyaXRl bChkbWFfYWRkciwgZGJyaS0+cmVncyArIFJFRzgpOworCXNwaW5fdW5sb2NrKCZkYnJpLT5jbWRs b2NrKTsKKwlkYnJpX2NtZHdhaXQoZGJyaSk7CiAKLQlkYnJpX2NtZHNlbmQoZGJyaSwgY21kKTsK IAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkYnJpLT5sb2NrLCBmbGFncyk7CiB9CiAKQEAgLTc3 MCw3ICs4MDgsNyBAQCBzdGF0aWMgdm9pZCByZXNldF9waXBlKHN0cnVjdCBzbmRfZGJyaSAqCiB7 CiAJaW50IHNkcDsKIAlpbnQgZGVzYzsKLQl2b2xhdGlsZSBpbnQgKmNtZDsKKwlzMzIgKmNtZDsK IAogCWlmIChwaXBlIDwgMCB8fCBwaXBlID4gREJSSV9NQVhfUElQRSkgewogCQlwcmludGsoS0VS Tl9FUlIgIkRCUkk6IHJlc2V0X3BpcGUgY2FsbGVkIHdpdGggaWxsZWdhbCBwaXBlIG51bWJlclxu Iik7CkBAIC03ODMsMTYgKzgyMSwxOCBAQCBzdGF0aWMgdm9pZCByZXNldF9waXBlKHN0cnVjdCBz bmRfZGJyaSAqCiAJCXJldHVybjsKIAl9CiAKLQljbWQgPSBkYnJpX2NtZGxvY2soZGJyaSwgTm9H ZXRMb2NrKTsKKwljbWQgPSBkYnJpX2NtZGxvY2soZGJyaSwgMyk7CiAJKihjbWQrKykgPSBEQlJJ X0NNRChEX1NEUCwgMCwgc2RwIHwgRF9TRFBfQyB8IERfU0RQX1ApOwogCSooY21kKyspID0gMDsK LQlkYnJpX2NtZHNlbmQoZGJyaSwgY21kKTsKKwkqKGNtZCsrKSA9IERCUklfQ01EKERfUEFVU0Us IDAsIDApOworCWRicmlfY21kc2VuZChkYnJpLCBjbWQsIDMpOwogCiAJZGVzYyA9IGRicmktPnBp cGVzW3BpcGVdLmZpcnN0X2Rlc2M7Ci0Jd2hpbGUgKGRlc2MgIT0gLTEpIHsKLQkJZGJyaS0+ZG1h LT5kZXNjW2Rlc2NdLm5kYSA9IGRicmktPmRtYS0+ZGVzY1tkZXNjXS5iYSA9IDA7Ci0JCWRlc2Mg PSBkYnJpLT5uZXh0X2Rlc2NbZGVzY107Ci0JfQorCWlmICggZGVzYyA+PSAwKQorCQlkbyB7CisJ CQlkYnJpLT5kbWEtPmRlc2NbZGVzY10ubmRhID0gZGJyaS0+ZG1hLT5kZXNjW2Rlc2NdLmJhID0g MDsKKwkJCWRlc2MgPSBkYnJpLT5uZXh0X2Rlc2NbZGVzY107CisJCX0gd2hpbGUgKGRlc2MgIT0g LTEgJiYgZGVzYyAhPSBkYnJpLT5waXBlc1twaXBlXS5maXJzdF9kZXNjKTsKIAogCWRicmktPnBp cGVzW3BpcGVdLmRlc2MgPSAtMTsKIAlkYnJpLT5waXBlc1twaXBlXS5maXJzdF9kZXNjID0gLTE7 CkBAIC04MjgsNyArODY4LDcgQEAgc3RhdGljIHZvaWQgbGlua190aW1lX3Nsb3Qoc3RydWN0IHNu ZF9kYgogCQkJICAgaW50IHByZXZwaXBlLCBpbnQgbmV4dHBpcGUsCiAJCQkgICBpbnQgbGVuZ3Ro LCBpbnQgY3ljbGUpCiB7Ci0Jdm9sYXRpbGUgczMyICpjbWQ7CisJczMyICpjbWQ7CiAJaW50IHZh bDsKIAogCWlmIChwaXBlIDwgMCB8fCBwaXBlID4gREJSSV9NQVhfUElQRSAKQEAgLTg0NywxMSAr ODg3LDEwIEBAIHN0YXRpYyB2b2lkIGxpbmtfdGltZV9zbG90KHN0cnVjdCBzbmRfZGIKIAl9CiAK IAlkYnJpLT5waXBlc1twcmV2cGlwZV0ubmV4dHBpcGUgPSBwaXBlOwotCiAJZGJyaS0+cGlwZXNb cGlwZV0ubmV4dHBpcGUgPSBuZXh0cGlwZTsKIAlkYnJpLT5waXBlc1twaXBlXS5sZW5ndGggPSBs ZW5ndGg7CiAKLQljbWQgPSBkYnJpX2NtZGxvY2soZGJyaSwgTm9HZXRMb2NrKTsKKwljbWQgPSBk YnJpX2NtZGxvY2soZGJyaSwgNCk7CiAKIAlpZiAoZGJyaS0+cGlwZXNbcGlwZV0uc2RwICYgRF9T RFBfVE9fU0VSKSB7CiAJCS8qIERlYWwgd2l0aCBDSEkgc3BlY2lhbCBjYXNlOgpAQCAtODc0LDI1 ICs5MTMsMjcgQEAgc3RhdGljIHZvaWQgbGlua190aW1lX3Nsb3Qoc3RydWN0IHNuZF9kYgogCQkg ICAgRF9UU19MRU4obGVuZ3RoKSB8IERfVFNfQ1lDTEUoY3ljbGUpIHwgRF9UU19ORVhUKG5leHRw aXBlKTsKIAkJKihjbWQrKykgPSAwOwogCX0KKwkqKGNtZCsrKSA9IERCUklfQ01EKERfUEFVU0Us IDAsIDApOwogCi0JZGJyaV9jbWRzZW5kKGRicmksIGNtZCk7CisJZGJyaV9jbWRzZW5kKGRicmks IGNtZCwgNCk7CiB9CiAKIHN0YXRpYyB2b2lkIHVubGlua190aW1lX3Nsb3Qoc3RydWN0IHNuZF9k YnJpICogZGJyaSwgaW50IHBpcGUsCiAJCQkgICAgIGVudW0gaW5fb3Jfb3V0IGRpcmVjdGlvbiwg aW50IHByZXZwaXBlLAogCQkJICAgICBpbnQgbmV4dHBpcGUpCiB7Ci0Jdm9sYXRpbGUgczMyICpj bWQ7CisJczMyICpjbWQ7CiAJaW50IHZhbDsKIAogCWlmIChwaXBlIDwgMCB8fCBwaXBlID4gREJS SV9NQVhfUElQRSAKLQkJCXx8IHByZXZwaXBlIDwgMCB8fCBwcmV2cGlwZSA+IERCUklfTUFYX1BJ UEUpIHsKKwkJCXx8IHByZXZwaXBlIDwgMCB8fCBwcmV2cGlwZSA+IERCUklfTUFYX1BJUEUKKwkJ CXx8IG5leHRwaXBlIDwgMCB8fCBuZXh0cGlwZSA+IERCUklfTUFYX1BJUEUpIHsKIAkJcHJpbnRr KEtFUk5fRVJSIAogCQkgICAgIkRCUkk6IHVubGlua190aW1lX3Nsb3QgY2FsbGVkIHdpdGggaWxs ZWdhbCBwaXBlIG51bWJlclxuIik7CiAJCXJldHVybjsKIAl9CiAKLQljbWQgPSBkYnJpX2NtZGxv Y2soZGJyaSwgTm9HZXRMb2NrKTsKKwljbWQgPSBkYnJpX2NtZGxvY2soZGJyaSwgNCk7CiAKIAlp ZiAoZGlyZWN0aW9uID09IFBJUEVpbnB1dCkgewogCQl2YWwgPSBEX0RUU19WSSB8IERfRFRTX0RF TCB8IERfRFRTX1BSVklOKHByZXZwaXBlKSB8IHBpcGU7CkBAIC05MDUsOCArOTQ2LDkgQEAgc3Rh dGljIHZvaWQgdW5saW5rX3RpbWVfc2xvdChzdHJ1Y3Qgc25kXwogCQkqKGNtZCsrKSA9IDA7CiAJ CSooY21kKyspID0gRF9UU19ORVhUKG5leHRwaXBlKTsKIAl9CisJKihjbWQrKykgPSBEQlJJX0NN RChEX1BBVVNFLCAwLCAwKTsKIAotCWRicmlfY21kc2VuZChkYnJpLCBjbWQpOworCWRicmlfY21k c2VuZChkYnJpLCBjbWQsIDQpOwogfQogCiAvKiB4bWl0X2ZpeGVkKCkgLyByZWN2X2ZpeGVkKCkK QEAgLTkyNSw3ICs5NjcsNyBAQCBzdGF0aWMgdm9pZCB1bmxpbmtfdGltZV9zbG90KHN0cnVjdCBz bmRfCiAgKi8KIHN0YXRpYyB2b2lkIHhtaXRfZml4ZWQoc3RydWN0IHNuZF9kYnJpICogZGJyaSwg aW50IHBpcGUsIHVuc2lnbmVkIGludCBkYXRhKQogewotCXZvbGF0aWxlIHMzMiAqY21kOworCXMz MiAqY21kOwogCiAJaWYgKHBpcGUgPCAxNiB8fCBwaXBlID4gREJSSV9NQVhfUElQRSkgewogCQlw cmludGsoS0VSTl9FUlIgIkRCUkk6IHhtaXRfZml4ZWQ6IElsbGVnYWwgcGlwZSBudW1iZXJcbiIp OwpAQCAtOTUyLDEyICs5OTQsMTQgQEAgc3RhdGljIHZvaWQgeG1pdF9maXhlZChzdHJ1Y3Qgc25k X2RicmkgKgogCWlmIChkYnJpLT5waXBlc1twaXBlXS5zZHAgJiBEX1NEUF9NU0IpCiAJCWRhdGEg PSByZXZlcnNlX2J5dGVzKGRhdGEsIGRicmktPnBpcGVzW3BpcGVdLmxlbmd0aCk7CiAKLQljbWQg PSBkYnJpX2NtZGxvY2soZGJyaSwgR2V0TG9jayk7CisJY21kID0gZGJyaV9jbWRsb2NrKGRicmks IDMpOwogCiAJKihjbWQrKykgPSBEQlJJX0NNRChEX1NTUCwgMCwgcGlwZSk7CiAJKihjbWQrKykg PSBkYXRhOworCSooY21kKyspID0gREJSSV9DTUQoRF9QQVVTRSwgMCwgMCk7CiAKLQlkYnJpX2Nt ZHNlbmQoZGJyaSwgY21kKTsKKwlkYnJpX2NtZHNlbmQoZGJyaSwgY21kLCAzKTsKKwlkYnJpX2Nt ZHdhaXQoZGJyaSk7CiB9CiAKIHN0YXRpYyB2b2lkIHJlY3ZfZml4ZWQoc3RydWN0IHNuZF9kYnJp ICogZGJyaSwgaW50IHBpcGUsIHZvbGF0aWxlIF9fdTMyICogcHRyKQpAQCAtOTkxLDYgKzEwMzUs OCBAQCBzdGF0aWMgdm9pZCByZWN2X2ZpeGVkKHN0cnVjdCBzbmRfZGJyaSAqCiAgKiBhbmQgd29y ayBieSBidWlsZGluZyBjaGFpbnMgb2YgZGVzY3JpcHRvcnMgd2hpY2ggaWRlbnRpZnkgdGhlCiAg KiBkYXRhIGJ1ZmZlcnMuICBCdWZmZXJzIHRvbyBsYXJnZSBmb3IgYSBzaW5nbGUgZGVzY3JpcHRv ciB3aWxsCiAgKiBiZSBzcHJlYWQgYWNyb3NzIG11bHRpcGxlIGRlc2NyaXB0b3JzLgorICoKKyAq IEFsbCBkZXNjcmlwdG9ycyBjcmVhdGUgYSByaW5nIGJ1ZmZlci4KICAqLwogc3RhdGljIGludCBz ZXR1cF9kZXNjcyhzdHJ1Y3Qgc25kX2RicmkgKiBkYnJpLCBpbnQgc3RyZWFtbm8sIHVuc2lnbmVk IGludCBwZXJpb2QpCiB7CkBAIC0xMDUxLDE0ICsxMDk3LDEzIEBAIHN0YXRpYyBpbnQgc2V0dXBf ZGVzY3Moc3RydWN0IHNuZF9kYnJpICoKIAkJCXJldHVybiAtMTsKIAkJfQogCi0JCWlmIChsZW4g PiBEQlJJX1REX01BWENOVCkgewotCQkJbXlsZW4gPSBEQlJJX1REX01BWENOVDsJLyogOEtCIC0g MSAqLwotCQl9IGVsc2UgeworCQlpZiAobGVuID4gREJSSV9URF9NQVhDTlQpCisJCQlteWxlbiA9 IERCUklfVERfTUFYQ05UOwkvKiA4S0IgLSA0ICovCisJCWVsc2UKIAkJCW15bGVuID0gbGVuOwot CQl9Ci0JCWlmIChteWxlbiA+IHBlcmlvZCkgeworCisJCWlmIChteWxlbiA+IHBlcmlvZCkKIAkJ CW15bGVuID0gcGVyaW9kOwotCQl9CiAKIAkJZGJyaS0+bmV4dF9kZXNjW2Rlc2NdID0gLTE7CiAJ CWRicmktPmRtYS0+ZGVzY1tkZXNjXS5iYSA9IGR2bWFfYnVmZmVyOwpAQCAtMTA2NywxNyArMTEx MiwxNyBAQCBzdGF0aWMgaW50IHNldHVwX2Rlc2NzKHN0cnVjdCBzbmRfZGJyaSAqCiAJCWlmIChz dHJlYW1ubyA9PSBEQlJJX1BMQVkpIHsKIAkJCWRicmktPmRtYS0+ZGVzY1tkZXNjXS53b3JkMSA9 IERCUklfVERfQ05UKG15bGVuKTsKIAkJCWRicmktPmRtYS0+ZGVzY1tkZXNjXS53b3JkNCA9IDA7 Ci0JCQlpZiAoZmlyc3RfZGVzYyAhPSAtMSkKLQkJCQlkYnJpLT5kbWEtPmRlc2NbZGVzY10ud29y ZDEgfD0gREJSSV9URF9NOworCQkJZGJyaS0+ZG1hLT5kZXNjW2Rlc2NdLndvcmQxIHw9IAorCQkJ ICAgIERCUklfVERfRiB8IERCUklfVERfQjsKIAkJfSBlbHNlIHsKIAkJCWRicmktPmRtYS0+ZGVz Y1tkZXNjXS53b3JkMSA9IDA7CiAJCQlkYnJpLT5kbWEtPmRlc2NbZGVzY10ud29yZDQgPQogCQkJ ICAgIERCUklfUkRfQiB8IERCUklfUkRfQkNOVChteWxlbik7CiAJCX0KIAotCQlpZiAoZmlyc3Rf ZGVzYyA9PSAtMSkgeworCQlpZiAoZmlyc3RfZGVzYyA9PSAtMSkKIAkJCWZpcnN0X2Rlc2MgPSBk ZXNjOwotCQl9IGVsc2UgeworCQllbHNlIHsKIAkJCWRicmktPm5leHRfZGVzY1tsYXN0X2Rlc2Nd ID0gZGVzYzsKIAkJCWRicmktPmRtYS0+ZGVzY1tsYXN0X2Rlc2NdLm5kYSA9CiAJCQkgICAgZGJy aS0+ZG1hX2R2bWEgKyBkYnJpX2RtYV9vZmYoZGVzYywgZGVzYyk7CkBAIC0xMDkzLDIxICsxMTM4 LDI4IEBAIHN0YXRpYyBpbnQgc2V0dXBfZGVzY3Moc3RydWN0IHNuZF9kYnJpICoKIAkJcmV0dXJu IC0xOwogCX0KIAotCWRicmktPmRtYS0+ZGVzY1tsYXN0X2Rlc2NdLndvcmQxICY9IH5EQlJJX1RE X007CiAJaWYgKHN0cmVhbW5vID09IERCUklfUExBWSkgewogCQlkYnJpLT5kbWEtPmRlc2NbbGFz dF9kZXNjXS53b3JkMSB8PQotCQkgICAgREJSSV9URF9JIHwgREJSSV9URF9GIHwgREJSSV9URF9C OworCQkgICAgREJSSV9URF9GIHwgREJSSV9URF9COworCQlkYnJpLT5kbWEtPmRlc2NbbGFzdF9k ZXNjXS5uZGEgPQorCQkgICAgZGJyaS0+ZG1hX2R2bWEgKyBkYnJpX2RtYV9vZmYoZGVzYywgZmly c3RfZGVzYyk7CisJCWRicmktPm5leHRfZGVzY1tsYXN0X2Rlc2NdID0gZmlyc3RfZGVzYzsKIAl9 CiAJZGJyaS0+cGlwZXNbaW5mby0+cGlwZV0uZmlyc3RfZGVzYyA9IGZpcnN0X2Rlc2M7CiAJZGJy aS0+cGlwZXNbaW5mby0+cGlwZV0uZGVzYyA9IGZpcnN0X2Rlc2M7CiAKLQlmb3IgKGRlc2MgPSBm aXJzdF9kZXNjOyBkZXNjICE9IC0xOyBkZXNjID0gZGJyaS0+bmV4dF9kZXNjW2Rlc2NdKSB7Cisj aWZkZWYgREJSSV9ERUJVRworCWZvciAoZGVzYyA9IGZpcnN0X2Rlc2M7IGRlc2MgIT0gLTE7ICkg ewogCQlkcHJpbnRrKERfREVTQywgIkRFU0MgJWQ6ICUwOHggJTA4eCAlMDh4ICUwOHhcbiIsCiAJ CQlkZXNjLAogCQkJZGJyaS0+ZG1hLT5kZXNjW2Rlc2NdLndvcmQxLAogCQkJZGJyaS0+ZG1hLT5k ZXNjW2Rlc2NdLmJhLAogCQkJZGJyaS0+ZG1hLT5kZXNjW2Rlc2NdLm5kYSwgZGJyaS0+ZG1hLT5k ZXNjW2Rlc2NdLndvcmQ0KTsKKwkJCWRlc2MgPSBkYnJpLT5uZXh0X2Rlc2NbZGVzY107CisJCQlp ZiAoIGRlc2MgPT0gZmlyc3RfZGVzYyApCisJCQkJYnJlYWs7CiAJfQorI2VuZGlmCiAJcmV0dXJu IDA7CiB9CiAKQEAgLTExMjcsNDMgKzExNzksMjQgQEAgZW51bSBtYXN0ZXJfb3Jfc2xhdmUgeyBD SEltYXN0ZXIsIENISXNsYQogc3RhdGljIHZvaWQgcmVzZXRfY2hpKHN0cnVjdCBzbmRfZGJyaSAq IGRicmksIGVudW0gbWFzdGVyX29yX3NsYXZlIG1hc3Rlcl9vcl9zbGF2ZSwKIAkJICAgICAgaW50 IGJpdHNfcGVyX2ZyYW1lKQogewotCXZvbGF0aWxlIHMzMiAqY21kOworCXMzMiAqY21kOwogCWlu dCB2YWw7Ci0Jc3RhdGljIGludCBjaGlfaW5pdGlhbGl6ZWQgPSAwOwkvKiBGSVhNRTogbXV0ZXg/ ICovCi0KLQlpZiAoIWNoaV9pbml0aWFsaXplZCkgewotCi0JCWNtZCA9IGRicmlfY21kbG9jayhk YnJpLCBHZXRMb2NrKTsKIAotCQkvKiBTZXQgQ0hJIEFuY2hvcjogUGlwZSAxNiAqLworCS8qIFNl dCBDSEkgQW5jaG9yOiBQaXBlIDE2ICovCiAKLQkJdmFsID0gRF9EVFNfVk8gfCBEX0RUU19WSSB8 IERfRFRTX0lOUyAKLQkJCXwgRF9EVFNfUFJWSU4oMTYpIHwgRF9QSVBFKDE2KSB8IERfRFRTX1BS Vk9VVCgxNik7Ci0JCSooY21kKyspID0gREJSSV9DTUQoRF9EVFMsIDAsIHZhbCk7Ci0JCSooY21k KyspID0gRF9UU19BTkNIT1IgfCBEX1RTX05FWFQoMTYpOwotCQkqKGNtZCsrKSA9IERfVFNfQU5D SE9SIHwgRF9UU19ORVhUKDE2KTsKLQotCQlkYnJpLT5waXBlc1sxNl0uc2RwID0gMTsKLQkJZGJy aS0+cGlwZXNbMTZdLm5leHRwaXBlID0gMTY7CisJY21kID0gZGJyaV9jbWRsb2NrKGRicmksIDQp OworCXZhbCA9IERfRFRTX1ZPIHwgRF9EVFNfVkkgfCBEX0RUU19JTlMgCisJCXwgRF9EVFNfUFJW SU4oMTYpIHwgRF9QSVBFKDE2KSB8IERfRFRTX1BSVk9VVCgxNik7CisJKihjbWQrKykgPSBEQlJJ X0NNRChEX0RUUywgMCwgdmFsKTsKKwkqKGNtZCsrKSA9IERfVFNfQU5DSE9SIHwgRF9UU19ORVhU KDE2KTsKKwkqKGNtZCsrKSA9IERfVFNfQU5DSE9SIHwgRF9UU19ORVhUKDE2KTsKKwkqKGNtZCsr KSA9IERCUklfQ01EKERfUEFVU0UsIDAsIDApOworCWRicmlfY21kc2VuZChkYnJpLCBjbWQsIDQp OwogCi0jaWYgMAotCQljaGlfaW5pdGlhbGl6ZWQrKzsKLSNlbmRpZgotCX0gZWxzZSB7Ci0JCWlu dCBwaXBlOworCWRicmktPnBpcGVzWzE2XS5zZHAgPSAxOworCWRicmktPnBpcGVzWzE2XS5uZXh0 cGlwZSA9IDE2OwogCi0JCWZvciAocGlwZSA9IDA7IHBpcGUgPCBEQlJJX05PX1BJUEVTOyBwaXBl KysgKQotCQkJaWYgKCBwaXBlICE9IDE2ICkgewotCQkJCWlmIChkYnJpLT5waXBlc1twaXBlXS5z ZHAgJiBEX1NEUF9UT19TRVIpCi0JCQkJCXVubGlua190aW1lX3Nsb3QoZGJyaSwgcGlwZSwgUElQ RW91dHB1dCwKLQkJCQkJCQkgMTYsIGRicmktPnBpcGVzW3BpcGVdLm5leHRwaXBlKTsKLQkJCQll bHNlCi0JCQkJCXVubGlua190aW1lX3Nsb3QoZGJyaSwgcGlwZSwgUElQRWlucHV0LAotCQkJCQkJ CSAxNiwgZGJyaS0+cGlwZXNbcGlwZV0ubmV4dHBpcGUpOwotCQkJfQotICAKLSAgCQljbWQgPSBk YnJpX2NtZGxvY2soZGJyaSwgR2V0TG9jayk7Ci0JfQorCWNtZCA9IGRicmlfY21kbG9jayhkYnJp LCA0KTsKIAogCWlmIChtYXN0ZXJfb3Jfc2xhdmUgPT0gQ0hJc2xhdmUpIHsKIAkJLyogU2V0dXAg REJSSSBmb3IgQ0hJIFNsYXZlIC0gcmVjZWl2ZSBjbG9jaywgZnJhbWUgc3luYyAoRlMpCkBAIC0x MjAyLDggKzEyMzUsOSBAQCBzdGF0aWMgdm9pZCByZXNldF9jaGkoc3RydWN0IHNuZF9kYnJpICog CiAKIAkqKGNtZCsrKSA9IERCUklfQ01EKERfUEFVU0UsIDAsIDApOwogCSooY21kKyspID0gREJS SV9DTUQoRF9DRE0sIDAsIERfQ0RNX1hDRSB8IERfQ0RNX1hFTiB8IERfQ0RNX1JFTik7CisJKihj bWQrKykgPSBEQlJJX0NNRChEX1BBVVNFLCAwLCAwKTsKIAotCWRicmlfY21kc2VuZChkYnJpLCBj bWQpOworCWRicmlfY21kc2VuZChkYnJpLCBjbWQsIDQpOwogfQogCiAvKgpAQCAtMTI0MCw2ICsx Mjc0LDggQEAgc3RhdGljIHZvaWQgY3M0MjE1X3NldHVwX3BpcGVzKHN0cnVjdCBzbgogCXNldHVw X3BpcGUoZGJyaSwgMTcsIERfU0RQX0ZJWEVEIHwgRF9TRFBfVE9fU0VSIHwgRF9TRFBfTVNCKTsK IAlzZXR1cF9waXBlKGRicmksIDE4LCBEX1NEUF9GSVhFRCB8IERfU0RQX0ZST01fU0VSIHwgRF9T RFBfTVNCKTsKIAlzZXR1cF9waXBlKGRicmksIDE5LCBEX1NEUF9GSVhFRCB8IERfU0RQX0ZST01f U0VSIHwgRF9TRFBfTVNCKTsKKworCWRicmlfY21kd2FpdChkYnJpKTsKIH0KIAogc3RhdGljIGlu dCBjczQyMTVfaW5pdF9kYXRhKHN0cnVjdCBjczQyMTUgKm1tKQpAQCAtMTI3MSw3ICsxMzA3LDcg QEAgc3RhdGljIGludCBjczQyMTVfaW5pdF9kYXRhKHN0cnVjdCBjczQyMQogCW1tLT5zdGF0dXMg PSAwOwogCW1tLT52ZXJzaW9uID0gMHhmZjsKIAltbS0+cHJlY2lzaW9uID0gODsJLyogRm9yIFVM QVcgKi8KLQltbS0+Y2hhbm5lbHMgPSAyOworCW1tLT5jaGFubmVscyA9IDE7CiAKIAlyZXR1cm4g MDsKIH0KQEAgLTE1NTQsNyArMTU5MCw2IEBAIHN0YXRpYyBpbnQgY3M0MjE1X2luaXQoc3RydWN0 IHNuZF9kYnJpICoKIAl9CiAKIAljczQyMTVfc2V0dXBfcGlwZXMoZGJyaSk7Ci0KIAljczQyMTVf aW5pdF9kYXRhKCZkYnJpLT5tbSk7CiAKIAkvKiBFbmFibGUgY2FwdHVyZSBvZiB0aGUgc3RhdHVz ICYgdmVyc2lvbiB0aW1lc2xvdHMuICovCkBAIC0xNTgzLDkgKzE2MTgsNyBAQCBidWZmZXIgYW5k IGNhbGxzIGRicmlfcHJvY2Vzc19vbmVfaW50ZXJyCiBDb21wbGljYXRlZCBpbnRlcnJ1cHRzIGFy ZSBoYW5kbGVkIGJ5IGRlZGljYXRlZCBmdW5jdGlvbnMgKHdoaWNoCiBhcHBlYXIgZmlyc3QgaW4g dGhpcyBmaWxlKS4gIEFueSBwZW5kaW5nIGludGVycnVwdHMgY2FuIGJlIHNlcnZpY2VkIGJ5CiBj YWxsaW5nIGRicmlfcHJvY2Vzc19pbnRlcnJ1cHRfYnVmZmVyKCksIHdoaWNoIHdvcmtzIGV2ZW4g aWYgdGhlIENQVSdzCi1pbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZC4gIFRoaXMgZnVuY3Rpb24gaXMg dXNlZCBieSBkYnJpX2NtZGxvY2soKQotdG8gbWFrZSBzdXJlIHdlJ3JlIHN5bmNlZCB1cCB3aXRo IHRoZSBjaGlwIGJlZm9yZSBlYWNoIGNvbW1hbmQgc2VxdWVuY2UsCi1ldmVuIGlmIHdlJ3JlIHJ1 bm5pbmcgY2xpJ2VkLgoraW50ZXJydXB0cyBhcmUgZGlzYWJsZWQuCiAKICovCiAKQEAgLTE1OTQs MTEgKzE2MjcsMTAgQEAgZXZlbiBpZiB3ZSdyZSBydW5uaW5nIGNsaSdlZC4KICAqIFRyYW5zbWl0 IHRoZSBjdXJyZW50IFREJ3MgZm9yIHJlY29yZGluZy9wbGF5aW5nLCBpZiBuZWVkZWQuCiAgKiBG b3IgcGxheWJhY2ssIEFMU0EgaGFzIGZpbGxlZCB0aGUgRE1BIG1lbW9yeSB3aXRoIG5ldyBkYXRh ICh3ZSBob3BlKS4KICAqLwotc3RhdGljIHZvaWQgeG1pdF9kZXNjcyh1bnNpZ25lZCBsb25nIGRh dGEpCitzdGF0aWMgdm9pZCB4bWl0X2Rlc2NzKHN0cnVjdCBzbmRfZGJyaSAqZGJyaSkKIHsKLQlz dHJ1Y3Qgc25kX2RicmkgKmRicmkgPSAoc3RydWN0IHNuZF9kYnJpICopIGRhdGE7CiAJc3RydWN0 IGRicmlfc3RyZWFtaW5mbyAqaW5mbzsKLQl2b2xhdGlsZSBzMzIgKmNtZDsKKwlzMzIgKmNtZDsK IAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBmaXJzdF90ZDsKIApAQCAtMTYwOSw3ICsxNjQx LDcgQEAgc3RhdGljIHZvaWQgeG1pdF9kZXNjcyh1bnNpZ25lZCBsb25nIGRhdAogCWluZm8gPSAm ZGJyaS0+c3RyZWFtX2luZm9bREJSSV9SRUNdOwogCXNwaW5fbG9ja19pcnFzYXZlKCZkYnJpLT5s b2NrLCBmbGFncyk7CiAKLQlpZiAoKGluZm8tPmxlZnQgPj0gaW5mby0+c2l6ZSkgJiYgKGluZm8t PnBpcGUgPj0gMCkpIHsKKwlpZiAoaW5mby0+cGlwZSA+PSAwKSB7CiAJCWZpcnN0X3RkID0gZGJy aS0+cGlwZXNbaW5mby0+cGlwZV0uZmlyc3RfZGVzYzsKIAogCQlkcHJpbnRrKERfREVTQywgInht aXRfZGVzY3MgcmVjIEAgVEQgJWRcbiIsIGZpcnN0X3RkKTsKQEAgLTE2MTksMTYgKzE2NTEsMTUg QEAgc3RhdGljIHZvaWQgeG1pdF9kZXNjcyh1bnNpZ25lZCBsb25nIGRhdAogCQkJZ290byBwbGF5 OwogCQl9CiAKLQkJY21kID0gZGJyaV9jbWRsb2NrKGRicmksIE5vR2V0TG9jayk7CisJCWNtZCA9 IGRicmlfY21kbG9jayhkYnJpLCAyKTsKIAkJKihjbWQrKykgPSBEQlJJX0NNRChEX1NEUCwgMCwK IAkJCQkgICAgZGJyaS0+cGlwZXNbaW5mby0+cGlwZV0uc2RwCiAJCQkJICAgIHwgRF9TRFBfUCB8 IERfU0RQX0VWRVJZIHwgRF9TRFBfQyk7CiAJCSooY21kKyspID0gZGJyaS0+ZG1hX2R2bWEgKyBk YnJpX2RtYV9vZmYoZGVzYywgZmlyc3RfdGQpOwotCQlkYnJpX2NtZHNlbmQoZGJyaSwgY21kKTsK KwkJZGJyaV9jbWRzZW5kKGRicmksIGNtZCwgMik7CiAKIAkJLyogUmVzZXQgb3VyIGFkbWluIG9m IHRoZSBwaXBlICYgYnl0ZXMgcmVhZC4gKi8KIAkJZGJyaS0+cGlwZXNbaW5mby0+cGlwZV0uZGVz YyA9IGZpcnN0X3RkOwotCQlpbmZvLT5sZWZ0ID0gMDsKIAl9CiAKIHBsYXk6CkBAIC0xNjM4LDMz ICsxNjY5LDI3IEBAIHBsYXk6CiAJaW5mbyA9ICZkYnJpLT5zdHJlYW1faW5mb1tEQlJJX1BMQVld OwogCXNwaW5fbG9ja19pcnFzYXZlKCZkYnJpLT5sb2NrLCBmbGFncyk7CiAKLQlpZiAoKGluZm8t PmxlZnQgPD0gMCkgJiYgKGluZm8tPnBpcGUgPj0gMCkpIHsKKwlpZiAoaW5mby0+cGlwZSA+PSAw KSB7CiAJCWZpcnN0X3RkID0gZGJyaS0+cGlwZXNbaW5mby0+cGlwZV0uZmlyc3RfZGVzYzsKIAog CQlkcHJpbnRrKERfREVTQywgInhtaXRfZGVzY3MgcGxheSBAIFREICVkXG4iLCBmaXJzdF90ZCk7 CiAKIAkJLyogU3RyZWFtIGNvdWxkIGJlIGNsb3NlZCBieSB0aGUgdGltZSB3ZSBydW4uICovCi0J CWlmIChmaXJzdF90ZCA8IDApIHsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRicmktPmxv Y2ssIGZsYWdzKTsKLQkJCXJldHVybjsKLQkJfQotCi0JCWNtZCA9IGRicmlfY21kbG9jayhkYnJp LCBOb0dldExvY2spOwotCQkqKGNtZCsrKSA9IERCUklfQ01EKERfU0RQLCAwLAotCQkJCSAgICBk YnJpLT5waXBlc1tpbmZvLT5waXBlXS5zZHAKLQkJCQkgICAgfCBEX1NEUF9QIHwgRF9TRFBfRVZF UlkgfCBEX1NEUF9DKTsKLQkJKihjbWQrKykgPSBkYnJpLT5kbWFfZHZtYSArIGRicmlfZG1hX29m ZihkZXNjLCBmaXJzdF90ZCk7Ci0JCWRicmlfY21kc2VuZChkYnJpLCBjbWQpOworCQlpZiAoZmly c3RfdGQgPj0gMCkgeworCQkJY21kID0gZGJyaV9jbWRsb2NrKGRicmksIDIpOworCQkJKihjbWQr KykgPSBEQlJJX0NNRChEX1NEUCwgMCwKKwkJCQkJICAgIGRicmktPnBpcGVzW2luZm8tPnBpcGVd LnNkcAorCQkJCQkgICAgfCBEX1NEUF9QIHwgRF9TRFBfRVZFUlkgfCBEX1NEUF9DKTsKKwkJCSoo Y21kKyspID0gZGJyaS0+ZG1hX2R2bWEgKyBkYnJpX2RtYV9vZmYoZGVzYywgZmlyc3RfdGQpOwor CQkJZGJyaV9jbWRzZW5kKGRicmksIGNtZCwgMik7CiAKLQkJLyogUmVzZXQgb3VyIGFkbWluIG9m IHRoZSBwaXBlICYgYnl0ZXMgd3JpdHRlbi4gKi8KLQkJZGJyaS0+cGlwZXNbaW5mby0+cGlwZV0u ZGVzYyA9IGZpcnN0X3RkOwotCQlpbmZvLT5sZWZ0ID0gaW5mby0+c2l6ZTsKKwkJCS8qIFJlc2V0 IG91ciBhZG1pbiBvZiB0aGUgcGlwZSAmIGJ5dGVzIHdyaXR0ZW4uICovCisJCQlkYnJpLT5waXBl c1tpbmZvLT5waXBlXS5kZXNjID0gZmlyc3RfdGQ7CisJCX0KIAl9CiAJc3Bpbl91bmxvY2tfaXJx cmVzdG9yZSgmZGJyaS0+bG9jaywgZmxhZ3MpOwogfQogCi1zdGF0aWMgREVDTEFSRV9UQVNLTEVU KHhtaXRfZGVzY3NfdGFzaywgeG1pdF9kZXNjcywgMCk7Ci0KIC8qIHRyYW5zbWlzc2lvbl9jb21w bGV0ZV9pbnRyKCkKICAqCiAgKiBDYWxsZWQgYnkgbWFpbiBpbnRlcnJ1cHQgaGFuZGxlciB3aGVu IERCUkkgc2lnbmFscyB0cmFuc21pc3Npb24gY29tcGxldGUKQEAgLTE2ODQsNyArMTcwOSw2IEBA IHN0YXRpYyB2b2lkIHRyYW5zbWlzc2lvbl9jb21wbGV0ZV9pbnRyKHMKIAlzdHJ1Y3QgZGJyaV9z dHJlYW1pbmZvICppbmZvOwogCWludCB0ZDsKIAlpbnQgc3RhdHVzOwotCWludCBsZW47CiAKIAlp bmZvID0gJmRicmktPnN0cmVhbV9pbmZvW0RCUklfUExBWV07CiAKQEAgLTE3MDMsMjAgKzE3Mjcs NyBAQCBzdGF0aWMgdm9pZCB0cmFuc21pc3Npb25fY29tcGxldGVfaW50cihzCiAJCWRwcmludGso RF9JTlQsICJURCAlZCwgc3RhdHVzIDB4JTAyeFxuIiwgdGQsIHN0YXR1cyk7CiAKIAkJZGJyaS0+ ZG1hLT5kZXNjW3RkXS53b3JkNCA9IDA7CS8qIFJlc2V0IGl0IGZvciBuZXh0IHRpbWUuICovCi0J CWxlbiA9IERCUklfUkRfQ05UKGRicmktPmRtYS0+ZGVzY1t0ZF0ud29yZDEpOwotCQlpbmZvLT5v ZmZzZXQgKz0gbGVuOwotCQlpbmZvLT5sZWZ0IC09IGxlbjsKLQotCQkvKiBPbiB0aGUgbGFzdCBU RCwgdHJhbnNtaXQgdGhlbSBhbGwgYWdhaW4uICovCi0JCWlmIChkYnJpLT5uZXh0X2Rlc2NbdGRd ID09IC0xKSB7Ci0JCQlpZiAoaW5mby0+bGVmdCA+IDApIHsKLQkJCQlwcmludGsoS0VSTl9XQVJO SU5HCi0JCQkJICAgICAgICIlZCBieXRlcyBsZWZ0IGFmdGVyIGxhc3QgdHJhbnNmZXIuXG4iLAot CQkJCSAgICAgICBpbmZvLT5sZWZ0KTsKLQkJCQlpbmZvLT5sZWZ0ID0gMDsKLQkJCX0KLQkJCXRh c2tsZXRfc2NoZWR1bGUoJnhtaXRfZGVzY3NfdGFzayk7Ci0JCX0KKwkJaW5mby0+b2Zmc2V0ICs9 IERCUklfUkRfQ05UKGRicmktPmRtYS0+ZGVzY1t0ZF0ud29yZDEpOwogCiAJCXRkID0gZGJyaS0+ bmV4dF9kZXNjW3RkXTsKIAkJZGJyaS0+cGlwZXNbcGlwZV0uZGVzYyA9IHRkOwpAQCAtMTc0OSw3 ICsxNzYwLDYgQEAgc3RhdGljIHZvaWQgcmVjZXB0aW9uX2NvbXBsZXRlX2ludHIoc3RydQogCiAJ aW5mbyA9ICZkYnJpLT5zdHJlYW1faW5mb1tEQlJJX1JFQ107CiAJaW5mby0+b2Zmc2V0ICs9IERC UklfUkRfQ05UKHN0YXR1cyk7Ci0JaW5mby0+bGVmdCArPSBEQlJJX1JEX0NOVChzdGF0dXMpOwog CiAJLyogRklYTUU6IENoZWNrIHN0YXR1cyAqLwogCkBAIC0xNzU3LDYgKzE3NjcsNyBAQCBzdGF0 aWMgdm9pZCByZWNlcHRpb25fY29tcGxldGVfaW50cihzdHJ1CiAJCXJkLCBEQlJJX1JEX1NUQVRV UyhzdGF0dXMpLCBEQlJJX1JEX0NOVChzdGF0dXMpKTsKIAogCS8qIE9uIHRoZSBsYXN0IFRELCB0 cmFuc21pdCB0aGVtIGFsbCBhZ2Fpbi4gKi8KKyNpZiAwCiAJaWYgKGRicmktPm5leHRfZGVzY1ty ZF0gPT0gLTEpIHsKIAkJaWYgKGluZm8tPmxlZnQgPiBpbmZvLT5zaXplKSB7CiAJCQlwcmludGso S0VSTl9XQVJOSU5HCkBAIC0xNzY1LDYgKzE3NzYsNyBAQCBzdGF0aWMgdm9pZCByZWNlcHRpb25f Y29tcGxldGVfaW50cihzdHJ1CiAJCX0KIAkJdGFza2xldF9zY2hlZHVsZSgmeG1pdF9kZXNjc190 YXNrKTsKIAl9CisjZW5kaWYKIAogCS8qIE5vdGlmeSBBTFNBICovCiAJaWYgKHNwaW5faXNfbG9j a2VkKCZkYnJpLT5sb2NrKSkgewpAQCAtMTc5MywxNiArMTgwNSwxMSBAQCBzdGF0aWMgdm9pZCBk YnJpX3Byb2Nlc3Nfb25lX2ludGVycnVwdChzCiAJCQljaGFubmVsLCBjb2RlLCBydmFsKTsKIAl9 CiAKLQlpZiAoY2hhbm5lbCA9PSBEX0lOVFJfQ01EICYmIGNvbW1hbmQgPT0gRF9XQUlUKSB7Ci0J CWRicmktPndhaXRfYWNrZCA9IHZhbDsKLQkJaWYgKGRicmktPndhaXRfc2VuZCAhPSB2YWwpIHsK LQkJCXByaW50ayhLRVJOX0VSUiAiUHJvY2Vzc2luZyB3YWl0IGNvbW1hbmQgJWQgd2hlbiAlZCB3 YXMgc2VuZC5cbiIsCi0JCQkgICAgICAgdmFsLCBkYnJpLT53YWl0X3NlbmQpOwotCQl9Ci0JCXJl dHVybjsKLQl9Ci0KIAlzd2l0Y2ggKGNvZGUpIHsKKwljYXNlIERfSU5UUl9DTURJOgorCQlpZiAo Y29tbWFuZCAhPSBEX1dBSVQpCisJCQlwcmludGsoS0VSTl9FUlIgIkRCUkk6IENvbW1hbmQgcmVh ZCBpbnRlcnJ1cHRcbiIpOworCQlicmVhazsKIAljYXNlIERfSU5UUl9CUkRZOgogCQlyZWNlcHRp b25fY29tcGxldGVfaW50cihkYnJpLCBjaGFubmVsKTsKIAkJYnJlYWs7CkBAIC0xODE1LDggKzE4 MjIsMTAgQEAgc3RhdGljIHZvaWQgZGJyaV9wcm9jZXNzX29uZV9pbnRlcnJ1cHQocwogCQkgKiBy ZXNlbmQgU0RQIGNvbW1hbmQgd2l0aCBjbGVhciBwaXBlIGJpdCAoQykgc2V0CiAJCSAqLwogCQl7 Ci0JCQl2b2xhdGlsZSBzMzIgKmNtZDsKLQorCS8qIEZJWE1FOiBkbyBzb21ldGhpbmcgdXNlZnVs IGluIGNhc2Ugb2YgdW5kZXJydW4gKi8KKwkJCXByaW50ayhLRVJOX0VSUiAiREJSSTogVW5kZXJy dW4gZXJyb3JcbiIpOworI2lmIDAKKwkJCXMzMiAqY21kOwogCQkJaW50IHBpcGUgPSBjaGFubmVs OwogCQkJaW50IHRkID0gZGJyaS0+cGlwZXNbcGlwZV0uZGVzYzsKIApAQCAtMTgyNyw2ICsxODM2 LDcgQEAgc3RhdGljIHZvaWQgZGJyaV9wcm9jZXNzX29uZV9pbnRlcnJ1cHQocwogCQkJCQkgICAg fCBEX1NEUF9QIHwgRF9TRFBfQyB8IERfU0RQXzJTQU1FKTsKIAkJCSooY21kKyspID0gZGJyaS0+ ZG1hX2R2bWEgKyBkYnJpX2RtYV9vZmYoZGVzYywgdGQpOwogCQkJZGJyaV9jbWRzZW5kKGRicmks IGNtZCk7CisjZW5kaWYKIAkJfQogCQlicmVhazsKIAljYXNlIERfSU5UUl9GWERUOgpAQCAtMTg0 Nyw5ICsxODU3LDcgQEAgc3RhdGljIHZvaWQgZGJyaV9wcm9jZXNzX29uZV9pbnRlcnJ1cHQocwog LyogZGJyaV9wcm9jZXNzX2ludGVycnVwdF9idWZmZXIgYWR2YW5jZXMgdGhyb3VnaCB0aGUgREJS SSdzIGludGVycnVwdAogICogYnVmZmVyIHVudGlsIGl0IGZpbmRzIGEgemVybyB3b3JkIChpbmRp Y2F0aW5nIG5vdGhpbmcgbW9yZSB0byBkbwogICogcmlnaHQgbm93KS4gIE5vbi16ZXJvIHdvcmRz IHJlcXVpcmUgcHJvY2Vzc2luZyBhbmQgYXJlIGhhbmRlZCBvZmYKLSAqIHRvIGRicmlfcHJvY2Vz c19vbmVfaW50ZXJydXB0IEFGVEVSIGFkdmFuY2luZyB0aGUgcG9pbnRlci4gIFRoaXMKLSAqIG9y ZGVyIGlzIGltcG9ydGFudCBzaW5jZSB3ZSBtaWdodCByZWN1cnNlIGJhY2sgaW50byB0aGlzIGZ1 bmN0aW9uCi0gKiBhbmQgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHBvaW50ZXIgaGFzIGJlZW4gYWR2 YW5jZWQgZmlyc3QuCisgKiB0byBkYnJpX3Byb2Nlc3Nfb25lX2ludGVycnVwdCBBRlRFUiBhZHZh bmNpbmcgdGhlIHBvaW50ZXIuCiAgKi8KIHN0YXRpYyB2b2lkIGRicmlfcHJvY2Vzc19pbnRlcnJ1 cHRfYnVmZmVyKHN0cnVjdCBzbmRfZGJyaSAqIGRicmkpCiB7CkBAIC0xOTE5LDggKzE5MjcsNiBA QCBzdGF0aWMgaXJxcmV0dXJuX3Qgc25kX2RicmlfaW50ZXJydXB0KGluCiAKIAlkYnJpX3Byb2Nl c3NfaW50ZXJydXB0X2J1ZmZlcihkYnJpKTsKIAotCS8qIEZJWE1FOiBXcml0ZSAwIGludG8gcmVn cyB0byBBQ0sgaW50ZXJydXB0ICovCi0KIAlzcGluX3VubG9jaygmZGJyaS0+bG9jayk7CiAKIAly ZXR1cm4gSVJRX0hBTkRMRUQ7CkBAIC0xOTYyLDcgKzE5NjgsNiBAQCBzdGF0aWMgaW50IHNuZF9k YnJpX29wZW4oc3RydWN0IHNuZF9wY21fCiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGJyaS0+bG9j aywgZmxhZ3MpOwogCWluZm8tPnN1YnN0cmVhbSA9IHN1YnN0cmVhbTsKLQlpbmZvLT5sZWZ0ID0g MDsKIAlpbmZvLT5vZmZzZXQgPSAwOwogCWluZm8tPmR2bWFfYnVmZmVyID0gMDsKIAlpbmZvLT5w aXBlID0gLTE7CkBAIC0xOTgwLDcgKzE5ODUsNiBAQCBzdGF0aWMgaW50IHNuZF9kYnJpX2Nsb3Nl KHN0cnVjdCBzbmRfcGNtCiAKIAlkcHJpbnRrKERfVVNSLCAiY2xvc2UgYXVkaW8gb3V0cHV0Llxu Iik7CiAJaW5mby0+c3Vic3RyZWFtID0gTlVMTDsKLQlpbmZvLT5sZWZ0ID0gMDsKIAlpbmZvLT5v ZmZzZXQgPSAwOwogCiAJcmV0dXJuIDA7CkBAIC0yMDYyLDEwICsyMDY2LDggQEAgc3RhdGljIGlu dCBzbmRfZGJyaV9wcmVwYXJlKHN0cnVjdCBzbmRfcAogCWluZm8tPnNpemUgPSBzbmRfcGNtX2xp Yl9idWZmZXJfYnl0ZXMoc3Vic3RyZWFtKTsKIAlpZiAoREJSSV9TVFJFQU1OTyhzdWJzdHJlYW0p ID09IERCUklfUExBWSkKIAkJaW5mby0+cGlwZSA9IDQ7CS8qIFNlbmQgcGlwZSAqLwotCWVsc2Ug eworCWVsc2UKIAkJaW5mby0+cGlwZSA9IDY7CS8qIFJlY2VpdmUgcGlwZSAqLwotCQlpbmZvLT5s ZWZ0ID0gaW5mby0+c2l6ZTsJLyogVG8gdHJpZ2dlciBzdWJtaXR0YWwgKi8KLQl9CiAKIAlzcGlu X2xvY2tfaXJxKCZkYnJpLT5sb2NrKTsKIApAQCAtMjA5MywxNCArMjA5NSwxMSBAQCBzdGF0aWMg aW50IHNuZF9kYnJpX3RyaWdnZXIoc3RydWN0IHNuZF9wCiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dF Ul9TVEFSVDoKIAkJZHByaW50ayhEX1VTUiwgInN0YXJ0IGF1ZGlvLCBwZXJpb2QgaXMgJWQgYnl0 ZXNcbiIsCiAJCQkoaW50KXNuZF9wY21fbGliX3BlcmlvZF9ieXRlcyhzdWJzdHJlYW0pKTsKLQkJ LyogRW5hYmxlICYgc2NoZWR1bGUgdGhlIHRhc2tsZXQgdGhhdCByZS1zdWJtaXRzIHRoZSBURHMu ICovCi0JCXhtaXRfZGVzY3NfdGFzay5kYXRhID0gKHVuc2lnbmVkIGxvbmcpZGJyaTsKLQkJdGFz a2xldF9zY2hlZHVsZSgmeG1pdF9kZXNjc190YXNrKTsKKwkJLyogUmUtc3VibWl0IHRoZSBURHMu ICovCisJCXhtaXRfZGVzY3MoZGJyaSk7CiAJCWJyZWFrOwogCWNhc2UgU05EUlZfUENNX1RSSUdH RVJfU1RPUDoKIAkJZHByaW50ayhEX1VTUiwgInN0b3AgYXVkaW8uXG4iKTsKLQkJLyogTWFrZSB0 aGUgdGFza2xldCBiYWlsIG91dCBpbW1lZGlhdGVseS4gKi8KLQkJeG1pdF9kZXNjc190YXNrLmRh dGEgPSAwOwogCQlyZXNldF9waXBlKGRicmksIGluZm8tPnBpcGUpOwogCQlicmVhazsKIAlkZWZh dWx0OgpAQCAtMjExOCw4ICsyMTE3LDggQEAgc3RhdGljIHNuZF9wY21fdWZyYW1lc190IHNuZF9k YnJpX3BvaW50ZQogCiAJcmV0ID0gYnl0ZXNfdG9fZnJhbWVzKHN1YnN0cmVhbS0+cnVudGltZSwg aW5mby0+b2Zmc2V0KQogCQklIHN1YnN0cmVhbS0+cnVudGltZS0+YnVmZmVyX3NpemU7Ci0JZHBy aW50ayhEX1VTUiwgIkkvTyBwb2ludGVyOiAlbGQgZnJhbWVzLCAlZCBieXRlcyBsZWZ0LlxuIiwK LQkJcmV0LCBpbmZvLT5sZWZ0KTsKKwlkcHJpbnRrKERfVVNSLCAiSS9PIHBvaW50ZXI6ICVsZCBm cmFtZXMgb2YgJWxkLlxuIiwKKwkJcmV0LCBzdWJzdHJlYW0tPnJ1bnRpbWUtPmJ1ZmZlcl9zaXpl KTsKIAlyZXR1cm4gcmV0OwogfQogCg== --part44e8a1c20d2ae-- From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Krzysztof Helt" Date: Sun, 20 Aug 2006 17:54:10 +0000 Subject: [PATCH] [ALSA] sparc dbri: ring buffered version Message-Id: <44e8a1c20ab8d@wp.pl> MIME-Version: 1 Content-Type: multipart/mixed; boundary="part44e8a1c20d2ae" List-Id: To: alsa-devel Cc: sparclinux This is a multi-part message in MIME format. --part44e8a1c20d2ae Content-Type: text/plain; charset="iso-8859-2" Content-Transfer-Encoding: quoted-printable Content-Disposition: inline From: Krzysztof Helt (krzysztof.h1@wp.pl) It is a complete rework of low level layer to work on ring buffers for comands and data descriptors. This removes annoying noise due to delay in data buffer switching. Signed-off-by: Krzysztof Helt (krzysztof.h1@wp.pl) --- This patch requires the 8 previous patches I sent to the alsa-devel list. Now, DBRI commands can be sent without waiting for the previous ones to finish and data is sent through the DMA continously from the ring buffer. With this patch the ALSA DBRI driver reached the sound quality of the old kernel 2.4 driver. The driver needs more work (which I try to do in fre time): - correct support of stereo and mono modes in 8 and 16 bit - recording Regards, Krzysztof Helt ---------------------------------------------------- Najlepsze siatkarki pla=BFowe =B6wiata w Warszawie! Mi=EAdzynarodowy turniej GE Money Bank Warsaw Open 2006=20 Agrykola 30.08-03.09.2006 -> Wst=EAp wolny -> Szczeg=F3=B3y: http://klik.wp.pl/?adr=3Dwww.warsaw-beachvolley.pl&sid=3D850 --part44e8a1c20d2ae Content-Type: application/octet-stream; name="dbri-patch9.diff" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="dbri-patch9.diff" LS0tIGFsc2EtZHJpdmVyLTEuMC4xMnJjMi9hbHNhLWtlcm5lbC9zcGFyYy9kYnJpLmMJMjAwNi0w OC0yMCAxOTowNToxNS4wMDAwMDAwMDAgKzAyMDAKKysrIGxpbnV4LTIuNi4xN2Evc291bmQvc3Bh cmMvZGJyaS5jCTIwMDYtMDgtMjAgMTk6MTE6MjMuMDAwMDAwMDAwICswMjAwCkBAIC0yLDYgKzIs OCBAQAogICogRHJpdmVyIGZvciBEQlJJIHNvdW5kIGNoaXAgZm91bmQgb24gU3BhcmNzLgogICog Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE1hcnRpbiBIYWJldHMgKG1oYWJldHNAdXNlcnMuc291 cmNlZm9yZ2UubmV0KQogICoKKyAqIENvbnZlcnRlZCB0byByaW5nIGJ1ZmZlcmVkIHZlcnNpb24g YnkgS3J6eXN6dG9mIEhlbHQgKGtyenlzenRvZi5oMUB3cC5wbCkKKyAqCiAgKiBCYXNlZCBlbnRp cmVseSB1cG9uIGRyaXZlcnMvc2J1cy9hdWRpby9kYnJpLmMgd2hpY2ggaXM6CiAgKiBDb3B5cmln aHQgKEMpIDE5OTcgUnVkb2xmIEtvZW5pZyAocmZrb2VuaWdAaW1tZDQuaW5mb3JtYXRpay51bmkt ZXJsYW5nZW4uZGUpCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTkgQnJlbnQgQmFjY2FsYSAo YmFjY2FsYUBmcmVlc29mdC5vcmcpCkBAIC0yNjAsNyArMjYyLDcgQEAgc3RydWN0IGRicmlfbWVt IHsKICAqIHRoZSBDUFUgYW5kIHRoZSBEQlJJCiAgKi8KIHN0cnVjdCBkYnJpX2RtYSB7Ci0Jdm9s YXRpbGUgczMyIGNtZFtEQlJJX05PX0NNRFNdOwkvKiBQbGFjZSBmb3IgY29tbWFuZHMgICAgICAg Ki8KKwlzMzIgY21kW0RCUklfTk9fQ01EU107CQkJLyogUGxhY2UgZm9yIGNvbW1hbmRzICovCiAJ dm9sYXRpbGUgczMyIGludHJbREJSSV9JTlRfQkxLXTsJLyogSW50ZXJydXB0IGZpZWxkICAqLwog CXN0cnVjdCBkYnJpX21lbSBkZXNjW0RCUklfTk9fREVTQ1NdOwkvKiBYbWl0L3JlY2VpdmUgZGVz Y3JpcHRvcnMgKi8KIH07CkBAIC0yODQsNyArMjg2LDYgQEAgc3RydWN0IGRicmlfcGlwZSB7CiBz dHJ1Y3QgZGJyaV9zdHJlYW1pbmZvIHsKIAlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0 cmVhbTsKIAl1MzIgZHZtYV9idWZmZXI7CS8qIERldmljZSB2aWV3IG9mIEFsc2EgRE1BIGJ1ZmZl ciAqLwotCWludCBsZWZ0OwkJLyogIyBvZiBieXRlcyBsZWZ0IGluIERNQSBidWZmZXIgICovCiAJ aW50IHNpemU7CQkvKiBTaXplIG9mIERNQSBidWZmZXIgICAgICAgICAgICAgKi8KIAlzaXplX3Qg b2Zmc2V0OwkJLyogb2Zmc2V0IGluIHVzZXIgYnVmZmVyICAgICAgICAgICovCiAJaW50IHBpcGU7 CQkvKiBEYXRhIHBpcGUgdXNlZCAgICAgICAgICAgICAgICAgKi8KQEAgLTMwNSwxMSArMzA2LDEx IEBAIHN0cnVjdCBzbmRfZGJyaSB7CiAKIAl2b2lkIF9faW9tZW0gKnJlZ3M7CS8qIGRicmkgSFcg cmVncyAqLwogCWludCBkYnJpX2lycXA7CQkvKiBpbnRyIHF1ZXVlIHBvaW50ZXIgKi8KLQlpbnQg d2FpdF9zZW5kOwkJLyogc2VxdWVuY2Ugb2YgY29tbWFuZCBidWZmZXJzIHNlbmQgKi8KLQlpbnQg d2FpdF9hY2tkOwkJLyogc2VxdWVuY2Ugb2YgY29tbWFuZCBidWZmZXJzIGFja25vd2xlZGdlZCAq LwogCiAJc3RydWN0IGRicmlfcGlwZSBwaXBlc1tEQlJJX05PX1BJUEVTXTsJLyogREJSSSdzIDMy IGRhdGEgcGlwZXMgKi8KIAlpbnQgbmV4dF9kZXNjW0RCUklfTk9fREVTQ1NdOwkJLyogSW5kZXgg b2YgbmV4dCBkZXNjLCBvciAtMSAqLworCXNwaW5sb2NrX3QgY21kbG9jazsJLyogUHJvdGVjdHMg Y21kIHF1ZXVlIGFjY2Vzc2VzICovCisJczMyICpjbWRwdHI7CQkvKiBQb2ludGVyIHRvIHRoZSBs YXN0IHF1ZXVlZCBjbWQgKi8KIAogCWludCBjaGlfYnBmOwogCkBAIC01NDQsNyArNTQ1LDcgQEAg c3RydWN0IHNuZF9kYnJpIHsKICNkZWZpbmUgREJSSV9URF9UQkMJKDE8PDApCS8qIFRyYW5zbWl0 IGJ1ZmZlciBDb21wbGV0ZSAqLwogI2RlZmluZSBEQlJJX1REX1NUQVRVUyh2KSAgICAgICAoKHYp JjB4ZmYpCS8qIFRyYW5zbWl0IHN0YXR1cyAqLwogCQkJLyogTWF4aW11bSBidWZmZXIgc2l6ZSBw ZXIgVEQ6IGFsbW9zdCA4S2IgKi8KLSNkZWZpbmUgREJSSV9URF9NQVhDTlQJKCgxIDw8IDEzKSAt IDEpCisjZGVmaW5lIERCUklfVERfTUFYQ05UCSgoMSA8PCAxMykgLSA0KQogCiAvKiBSZWNlaXZl IGRlc2NyaXB0b3IgZGVmaW5lcyAqLwogI2RlZmluZSBEQlJJX1JEX0YJKDE8PDMxKQkvKiBFbmQg b2YgRnJhbWUgKi8KQEAgLTYwOCw3OSArNjA5LDExMCBAQCBUaGUgbGlzdCBpcyB0ZXJtaW5hdGVk IHdpdGggYSBXQUlUIGNvbW1hCiBDUFUgaW50ZXJydXB0IHRvIHNpZ25hbCBjb21wbGV0aW9uLgog CiBTaW5jZSB0aGUgREJSSSBjYW4gcnVuIGluIHBhcmFsbGVsIHdpdGggdGhlIENQVSwgc2V2ZXJh bCBtZWFucyBvZgotc3luY2hyb25pemF0aW9uIHByZXNlbnQgdGhlbXNlbHZlcy4gIFRoZSBtZXRo b2QgaW1wbGVtZW50ZWQgaGVyZSBpcyBjbG9zZQotdG8gdGhlIG9yaWdpbmFsIHNjaGVtZSAoUnVk b2xmJ3MpLCBhbmQgdXNlcyAyIGNvdW50ZXJzICh3YWl0X3NlbmQgYW5kCi13YWl0X2Fja2QpIHRv IHN5bmNocm9uaXplIHRoZSBjb21tYW5kIGJ1ZmZlciBiZXR3ZWVuIHRoZSBDUFUgYW5kIHRoZSBE QlJJLgotCi1BIG1vcmUgc29waGlzdGljYXRlZCBzY2hlbWUgbWlnaHQgaW52b2x2ZSBhIGNpcmN1 bGFyIGNvbW1hbmQgYnVmZmVyCi1vciBhbiBhcnJheSBvZiBjb21tYW5kIGJ1ZmZlcnMuICBBIHJv dXRpbmUgY291bGQgZmlsbCBvbmUgd2l0aAotY29tbWFuZHMgYW5kIGxpbmsgaXQgb250byBhIGxp c3QuICBXaGVuIGEgaW50ZXJydXB0IHNpZ25hbGVkCi1jb21wbGV0aW9uIG9mIHRoZSBjdXJyZW50 IGNvbW1hbmQgYnVmZmVyLCBsb29rIG9uIHRoZSBsaXN0IGZvcgotdGhlIG5leHQgb25lLgorc3lu Y2hyb25pemF0aW9uIHByZXNlbnQgdGhlbXNlbHZlcy4gVGhlIG1ldGhvZCBpbXBsZW1lbnRlZCBo ZXJlIGlzIG9ubHkKK3RvIHVzZSB0aGUgZGJyaV9jbWR3YWl0KCkgdG8gd2FpdCBmb3IgZXhlY3V0 aW9uIG9mIGJhdGNoIG9mIHNlbnQgY29tbWFuZHMuCisKK0EgY2lyY3VsYXIgY29tbWFuZCBidWZm ZXIgaXMgdXNlZCBoZXJlLiBBIG5ldyBjb21tYW5kIGlzIGJlaW5nIGFkZGVkIAord2hpbGUgb3Ro ZXIgY2FuIGJlIGV4ZWN1dGVkLiBUaGUgc2NoZW1lIHdvcmtzIGJ5IGFkZGluZyB0d28gV0FJVCBj b21tYW5kcworYWZ0ZXIgZWFjaCBzZW50IGJhdGNoIG9mIGNvbW1hbmRzLiBXaGVuIHRoZSBuZXh0 IGJhdGNoIGlzIHByZXBhcmVkIGl0IGlzCithZGRlZCBhZnRlciB0aGUgV0FJVCBjb21tYW5kcyB0 aGVuIHRoZSBXQUlUcyBhcmUgcmVwbGFjZWQgd2l0aCBzaW5nbGUgSlVNUAorY29tbWFuZCB0byB0 aGUgbmV3IGJhdGNoLiBUaGUgdGhlIERCUkkgaXMgZm9yY2VkIHRvIHJlcmVhZCB0aGUgbGFzdCBX QUlUIAorY29tbWFuZCAocmVwbGFjZWQgYnkgdGhlIEpVTVAgYnkgdGhlbikuIElmIHRoZSBEQlJJ IGlzIHN0aWxsIGV4ZWN1dGluZyAKK3ByZXZpb3VzIGNvbW1hbmRzIHRoZSByZXF1ZXN0IHRvIHJl cmVhZCB0aGUgV0FJVCBjb21tYW5kIGlzIGlnbm9yZWQuCiAKIEV2ZXJ5IHRpbWUgYSByb3V0aW5l IHdhbnRzIHRvIHdyaXRlIGNvbW1hbmRzIHRvIHRoZSBEQlJJLCBpdCBtdXN0Ci1maXJzdCBjYWxs IGRicmlfY21kbG9jaygpIGFuZCBnZXQgYW4gaW5pdGlhbCBwb2ludGVyIGludG8gZGJyaS0+ZG1h LT5jbWQKLWluIHJldHVybi4gZGJyaV9jbWRsb2NrKCkgd2lsbCBibG9jayBpZiB0aGUgcHJldmlv dXMgY29tbWFuZHMgaGF2ZSBub3QKLWJlZW4gY29tcGxldGVkIHlldC4gQWZ0ZXIgdGhpcyB0aGUg Y29tbWFuZHMgY2FuIGJlIHdyaXR0ZW4gdG8gdGhlIGJ1ZmZlciwKLWFuZCBkYnJpX2NtZHNlbmQo KSBpcyBjYWxsZWQgd2l0aCB0aGUgZmluYWwgcG9pbnRlciB2YWx1ZSB0byBzZW5kIHRoZW0KLXRv IHRoZSBEQlJJLgorZmlyc3QgY2FsbCBkYnJpX2NtZGxvY2soKSBhbmQgZ2V0IHBvaW50ZXIgdG8g YSBmcmVlIHNwYWNlIGluIAorZGJyaS0+ZG1hLT5jbWQgYnVmZmVyLiBBZnRlciB0aGlzLCB0aGUg Y29tbWFuZHMgY2FuIGJlIHdyaXR0ZW4gdG8gCit0aGUgYnVmZmVyLCBhbmQgZGJyaV9jbWRzZW5k KCkgaXMgY2FsbGVkIHdpdGggdGhlIGZpbmFsIHBvaW50ZXIgdmFsdWUgCit0byBzZW5kIHRoZW0g dG8gdGhlIERCUkkuCiAKICovCiAKIHN0YXRpYyB2b2lkIGRicmlfcHJvY2Vzc19pbnRlcnJ1cHRf YnVmZmVyKHN0cnVjdCBzbmRfZGJyaSAqIGRicmkpOwogCi1lbnVtIGRicmlfbG9jayB7IE5vR2V0 TG9jaywgR2V0TG9jayB9OwogI2RlZmluZSBNQVhMT09QUyAxMAotCi1zdGF0aWMgdm9sYXRpbGUg czMyICpkYnJpX2NtZGxvY2soc3RydWN0IHNuZF9kYnJpICogZGJyaSwgZW51bSBkYnJpX2xvY2sg Z2V0KQorLyoKKyAqIFdhaXQgZm9yIHRoZSBjdXJyZW50IGNvbW1hbmQgc3RyaW5nIHRvIGV4ZWN1 dGUKKyAqLworc3RhdGljIHZvaWQgZGJyaV9jbWR3YWl0KHN0cnVjdCBzbmRfZGJyaSAqZGJyaSkK IHsKIAlpbnQgbWF4bG9vcHMgPSBNQVhMT09QUzsKIAotI2lmbmRlZiBTTVAKLQlpZiAoKGdldCA9 PSBHZXRMb2NrKSAmJiBzcGluX2lzX2xvY2tlZCgmZGJyaS0+bG9jaykpIHsKLQkJcHJpbnRrKEtF Uk5fRVJSICJEQlJJOiBjbWRsb2NrIGNhbGxlZCB3aGlsZSBpbiBzcGlubG9jay4iKTsKLQl9Ci0j ZW5kaWYKLQogCS8qIERlbGF5IGlmIHByZXZpb3VzIGNvbW1hbmRzIGFyZSBzdGlsbCBiZWluZyBw cm9jZXNzZWQgKi8KLQl3aGlsZSAoKC0tbWF4bG9vcHMpID4gMCAmJiAoZGJyaS0+d2FpdF9zZW5k ICE9IGRicmktPndhaXRfYWNrZCkpIHsKKwl3aGlsZSAoKC0tbWF4bG9vcHMpID4gMCAmJiAoc2J1 c19yZWFkbChkYnJpLT5yZWdzICsgUkVHMCkgJiBEX1ApKQogCQltc2xlZXBfaW50ZXJydXB0aWJs ZSgxKTsKLQl9CisKIAlpZiAobWF4bG9vcHMgPT0gMCkgewotCQlwcmludGsoS0VSTl9FUlIgIkRC Ukk6IENoaXAgbmV2ZXIgY29tcGxldGVkIGNvbW1hbmQgYnVmZmVyICVkXG4iLAotCQkJZGJyaS0+ d2FpdF9zZW5kKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJEQlJJOiBDaGlwIG5ldmVyIGNvbXBsZXRl ZCBjb21tYW5kIGJ1ZmZlclxuIik7CiAJfSBlbHNlIHsKIAkJZHByaW50ayhEX0NNRCwgIkNoaXAg Y29tcGxldGVkIGNvbW1hbmQgYnVmZmVyICglZClcbiIsCiAJCQlNQVhMT09QUyAtIG1heGxvb3Bz IC0gMSk7CiAJfQorfQorLyoKKyAqIExvY2sgdGhlIGNvbW1hbmQgcXVldWUgYW5kIHJldHVybnMg cG9pbnRlciB0byBhIHNwYWNlIGZvciBsZW4gY21kIHdvcmRzCisgKiBJdCBsb2NrcyB0aGUgY21k bG9jayBzcGlubG9jay4KKyAqLworc3RhdGljIHMzMiAqZGJyaV9jbWRsb2NrKHN0cnVjdCBzbmRf ZGJyaSAqIGRicmksIGludCBsZW4pCit7CisJLyogU3BhY2UgZm9yIDIgV0FJVCBjbWRzIChyZXBs YWNlZCBsYXRlciBieSAxIEpVTVAgY21kKSAqLworCWxlbiArPSAyOworCXNwaW5fbG9jaygmZGJy aS0+Y21kbG9jayk7CisJaWYgKGRicmktPmNtZHB0ciAtIGRicmktPmRtYS0+Y21kICsgbGVuIDwg REJSSV9OT19DTURTIC0gMikKKwkJcmV0dXJuIGRicmktPmNtZHB0ciArIDI7CisJZWxzZSBpZiAo bGVuIDwgc2J1c19yZWFkbChkYnJpLT5yZWdzICsgUkVHOCkgLSBkYnJpLT5kbWFfZHZtYSkKKwkJ cmV0dXJuIGRicmktPmRtYS0+Y21kOworCWVsc2UKKwkJcHJpbnRrKEtFUk5fRVJSICJEQlJJOiBu byBzcGFjZSBmb3IgY29tbWFuZHMuIik7CiAKLQkvKmlmIChnZXQgPT0gR2V0TG9jaykgc3Bpbl9s b2NrKCZkYnJpLT5sb2NrKTsgKi8KLQlyZXR1cm4gJmRicmktPmRtYS0+Y21kWzBdOworCXJldHVy biAwOwogfQogCi1zdGF0aWMgdm9pZCBkYnJpX2NtZHNlbmQoc3RydWN0IHNuZF9kYnJpICogZGJy aSwgdm9sYXRpbGUgczMyICogY21kKQorLyoKKyAqIFNlbmQgcHJlcGFyZWQgY21kIHN0cmluZy4g SXQgd29ya3MgYnkgd3JpdHRpbmcgYSBKTVAgY21kIGludG8KKyAqIHRoZSBsYXN0IFdBSVQgY21k IGFuZCBmb3JjZSBEQlJJIHRvIHJlcmVhZCB0aGUgY21kLgorICogVGhlIEpNUCBjbWQgcG9pbnRz IHRvIHRoZSBuZXcgY21kIHN0cmluZy4KKyAqIEl0IGFsc28gcmVsZWFzZXMgdGhlIGNtZGxvY2sg c3BpbmxvY2suCisgKi8KK3N0YXRpYyB2b2lkIGRicmlfY21kc2VuZChzdHJ1Y3Qgc25kX2Ricmkg KiBkYnJpLCBzMzIgKiBjbWQsaW50IGxlbikKIHsKLQl2b2xhdGlsZSBzMzIgKnB0cjsKKwlzMzIg KnB0cjsKKwlzMzIgdG1wLCBhZGRyOworCXN0YXRpYyBpbnQgd2FpdF9pZCA9IDA7CisKKwl3YWl0 X2lkKys7CisJd2FpdF9pZCAmPSAweGZmZmY7CS8qIHJlc3RyaWN0IGl0IHRvIGEgMTYgYml0IGNv dW50ZXIuICovCisJKihjbWQpID0gREJSSV9DTUQoRF9XQUlULCAxLCB3YWl0X2lkKTsKKwkqKGNt ZCsxKSA9IERCUklfQ01EKERfV0FJVCwgMSwgd2FpdF9pZCk7CisKKwkvKiBSZXBsYWNlIHRoZSBs YXN0IGNvbW1hbmQgd2l0aCBKVU1QICovCisJYWRkciA9IGRicmktPmRtYV9kdm1hICsgKGNtZCAt IGxlbiAtIGRicmktPmRtYS0+Y21kKSAqIHNpemVvZihzMzIpOworCSooZGJyaS0+Y21kcHRyKzEp ID0gYWRkcjsKKwkqKGRicmktPmNtZHB0cikgPSBEQlJJX0NNRChEX0pVTVAsIDAsIDApOwogCi0J Zm9yIChwdHIgPSAmZGJyaS0+ZG1hLT5jbWRbMF07IHB0ciA8IGNtZDsgcHRyKyspIHsKKyNpZmRl ZiBEQlJJX0RFQlVHCisJaWYgKGNtZCA+IGRicmktPmNtZHB0ciApCisJCWZvciAocHRyID0gZGJy aS0+Y21kcHRyOyBwdHIgPCBjbWQrMjsgcHRyKyspIHsKKwkJCWRwcmludGsoRF9DTUQsICJjbWQ6 ICVseDolMDh4XG4iLCAodW5zaWduZWQgbG9uZylwdHIsICpwdHIpOworCQl9CisJZWxzZSB7CisJ CXB0ciA9IGRicmktPmNtZHB0cjsKIAkJZHByaW50ayhEX0NNRCwgImNtZDogJWx4OiUwOHhcbiIs ICh1bnNpZ25lZCBsb25nKXB0ciwgKnB0cik7CisJCXB0ciA9IGRicmktPmNtZHB0cisxOworCQlk cHJpbnRrKERfQ01ELCAiY21kOiAlbHg6JTA4eFxuIiwgKHVuc2lnbmVkIGxvbmcpcHRyLCAqcHRy KTsKKwkJZm9yIChwdHIgPSBkYnJpLT5kbWEtPmNtZDsgcHRyIDwgY21kKzI7IHB0cisrKSB7CisJ CQlkcHJpbnRrKERfQ01ELCAiY21kOiAlbHg6JTA4eFxuIiwgKHVuc2lnbmVkIGxvbmcpcHRyLCAq cHRyKTsKKwkJfQogCX0KKyNlbmRpZgogCi0JaWYgKChjbWQgLSAmZGJyaS0+ZG1hLT5jbWRbMF0p ID49IERCUklfTk9fQ01EUyAtIDEpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJEQlJJOiBDb21tYW5k IGJ1ZmZlciBvdmVyZmxvdyEgKGJ1ZyBpbiBkcml2ZXIpXG4iKTsKLQkJLyogSWdub3JlIHRoZSBs YXN0IHBhcnQuICovCi0JCWNtZCA9ICZkYnJpLT5kbWEtPmNtZFtEQlJJX05PX0NNRFMgLSAzXTsK LQl9Ci0KLQlkYnJpLT53YWl0X3NlbmQrKzsKLQlkYnJpLT53YWl0X3NlbmQgJj0gMHhmZmZmOwkv KiByZXN0cmljdCBpdCB0byBhIDE2IGJpdCBjb3VudGVyLiAqLwotCSooY21kKyspID0gREJSSV9D TUQoRF9QQVVTRSwgMCwgMCk7Ci0JKihjbWQrKykgPSBEQlJJX0NNRChEX1dBSVQsIDEsIGRicmkt PndhaXRfc2VuZCk7Ci0KLQkvKiBTZXQgY29tbWFuZCBwb2ludGVyIGFuZCBzaWduYWwgaXQgaXMg dmFsaWQuICovCi0Jc2J1c193cml0ZWwoZGJyaS0+ZG1hX2R2bWEsIGRicmktPnJlZ3MgKyBSRUc4 KTsKKwkvKiBSZXJlYWQgdGhlIGxhc3QgY29tbWFuZCAqLworCXRtcCA9IHNidXNfcmVhZGwoZGJy aS0+cmVncyArIFJFRzApOworCXRtcCB8PSBEX1A7CisJc2J1c193cml0ZWwodG1wLCBkYnJpLT5y ZWdzICsgUkVHMCk7CiAKLQkvKnNwaW5fdW5sb2NrKCZkYnJpLT5sb2NrKTsgKi8KKwlkYnJpLT5j bWRwdHIgPSBjbWQ7CisJc3Bpbl91bmxvY2soJmRicmktPmNtZGxvY2spOwogfQogCiAvKiBMb2Nr IG11c3QgYmUgaGVsZCB3aGVuIGNhbGxpbmcgdGhpcyAqLwpAQCAtNzA5LDcgKzc0MSw3IEBAIHN0 YXRpYyB2b2lkIGRicmlfcmVzZXQoc3RydWN0IHNuZF9kYnJpICoKIC8qIExvY2sgbXVzdCBub3Qg YmUgaGVsZCBiZWZvcmUgY2FsbGluZyB0aGlzICovCiBzdGF0aWMgdm9pZCBkYnJpX2luaXRpYWxp emUoc3RydWN0IHNuZF9kYnJpICogZGJyaSkKIHsKLQl2b2xhdGlsZSBzMzIgKmNtZDsKKwlzMzIg KmNtZDsKIAl1MzIgZG1hX2FkZHI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgbjsKQEAg LTcxOCwxNCArNzUwLDExIEBAIHN0YXRpYyB2b2lkIGRicmlfaW5pdGlhbGl6ZShzdHJ1Y3Qgc25k X2QKIAogCWRicmlfcmVzZXQoZGJyaSk7CiAKLQljbWQgPSBkYnJpX2NtZGxvY2soZGJyaSwgTm9H ZXRMb2NrKTsKLQlkcHJpbnRrKERfR0VOLCAiaW5pdDogY21kOiAlcCwgaW50OiAlcFxuIiwKLQkJ JmRicmktPmRtYS0+Y21kWzBdLCAmZGJyaS0+ZG1hLT5pbnRyWzBdKTsKLQogCS8qIEluaXRpYWxp emUgcGlwZXMgKi8KIAlmb3IgKG4gPSAwOyBuIDwgREJSSV9OT19QSVBFUzsgbisrKQogCQlkYnJp LT5waXBlc1tuXS5kZXNjID0gZGJyaS0+cGlwZXNbbl0uZmlyc3RfZGVzYyA9IC0xOwogCisJc3Bp bl9sb2NrX2luaXQoJmRicmktPmNtZGxvY2spOwogCS8qCiAJICogSW5pdGlhbGl6ZSB0aGUgaW50 ZXJydXB0IHJpbmdidWZmZXIuCiAJICovCkBAIC03MzUsMTAgKzc2NCwxOSBAQCBzdGF0aWMgdm9p ZCBkYnJpX2luaXRpYWxpemUoc3RydWN0IHNuZF9kCiAJLyoKIAkgKiBTZXQgdXAgdGhlIGludGVy cnVwdCBxdWV1ZQogCSAqLworCXNwaW5fbG9jaygmZGJyaS0+Y21kbG9jayk7CisJY21kID0gZGJy aS0+Y21kcHRyID0gZGJyaS0+ZG1hLT5jbWQ7CiAJKihjbWQrKykgPSBEQlJJX0NNRChEX0lJUSwg MCwgMCk7CiAJKihjbWQrKykgPSBkbWFfYWRkcjsKKwkqKGNtZCsrKSA9IERCUklfQ01EKERfUEFV U0UsIDAsIDApOworCWRicmktPmNtZHB0ciA9IGNtZDsKKwkqKGNtZCsrKSA9IERCUklfQ01EKERf V0FJVCwgMSwgMCk7CisJKihjbWQrKykgPSBEQlJJX0NNRChEX1dBSVQsIDEsIDApOworCWRtYV9h ZGRyID0gZGJyaS0+ZG1hX2R2bWEgKyBkYnJpX2RtYV9vZmYoY21kLCAwKTsKKwlzYnVzX3dyaXRl bChkbWFfYWRkciwgZGJyaS0+cmVncyArIFJFRzgpOworCXNwaW5fdW5sb2NrKCZkYnJpLT5jbWRs b2NrKTsKKwlkYnJpX2NtZHdhaXQoZGJyaSk7CiAKLQlkYnJpX2NtZHNlbmQoZGJyaSwgY21kKTsK IAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkYnJpLT5sb2NrLCBmbGFncyk7CiB9CiAKQEAgLTc3 MCw3ICs4MDgsNyBAQCBzdGF0aWMgdm9pZCByZXNldF9waXBlKHN0cnVjdCBzbmRfZGJyaSAqCiB7 CiAJaW50IHNkcDsKIAlpbnQgZGVzYzsKLQl2b2xhdGlsZSBpbnQgKmNtZDsKKwlzMzIgKmNtZDsK IAogCWlmIChwaXBlIDwgMCB8fCBwaXBlID4gREJSSV9NQVhfUElQRSkgewogCQlwcmludGsoS0VS Tl9FUlIgIkRCUkk6IHJlc2V0X3BpcGUgY2FsbGVkIHdpdGggaWxsZWdhbCBwaXBlIG51bWJlclxu Iik7CkBAIC03ODMsMTYgKzgyMSwxOCBAQCBzdGF0aWMgdm9pZCByZXNldF9waXBlKHN0cnVjdCBz bmRfZGJyaSAqCiAJCXJldHVybjsKIAl9CiAKLQljbWQgPSBkYnJpX2NtZGxvY2soZGJyaSwgTm9H ZXRMb2NrKTsKKwljbWQgPSBkYnJpX2NtZGxvY2soZGJyaSwgMyk7CiAJKihjbWQrKykgPSBEQlJJ X0NNRChEX1NEUCwgMCwgc2RwIHwgRF9TRFBfQyB8IERfU0RQX1ApOwogCSooY21kKyspID0gMDsK LQlkYnJpX2NtZHNlbmQoZGJyaSwgY21kKTsKKwkqKGNtZCsrKSA9IERCUklfQ01EKERfUEFVU0Us IDAsIDApOworCWRicmlfY21kc2VuZChkYnJpLCBjbWQsIDMpOwogCiAJZGVzYyA9IGRicmktPnBp cGVzW3BpcGVdLmZpcnN0X2Rlc2M7Ci0Jd2hpbGUgKGRlc2MgIT0gLTEpIHsKLQkJZGJyaS0+ZG1h LT5kZXNjW2Rlc2NdLm5kYSA9IGRicmktPmRtYS0+ZGVzY1tkZXNjXS5iYSA9IDA7Ci0JCWRlc2Mg PSBkYnJpLT5uZXh0X2Rlc2NbZGVzY107Ci0JfQorCWlmICggZGVzYyA+PSAwKQorCQlkbyB7CisJ CQlkYnJpLT5kbWEtPmRlc2NbZGVzY10ubmRhID0gZGJyaS0+ZG1hLT5kZXNjW2Rlc2NdLmJhID0g MDsKKwkJCWRlc2MgPSBkYnJpLT5uZXh0X2Rlc2NbZGVzY107CisJCX0gd2hpbGUgKGRlc2MgIT0g LTEgJiYgZGVzYyAhPSBkYnJpLT5waXBlc1twaXBlXS5maXJzdF9kZXNjKTsKIAogCWRicmktPnBp cGVzW3BpcGVdLmRlc2MgPSAtMTsKIAlkYnJpLT5waXBlc1twaXBlXS5maXJzdF9kZXNjID0gLTE7 CkBAIC04MjgsNyArODY4LDcgQEAgc3RhdGljIHZvaWQgbGlua190aW1lX3Nsb3Qoc3RydWN0IHNu ZF9kYgogCQkJICAgaW50IHByZXZwaXBlLCBpbnQgbmV4dHBpcGUsCiAJCQkgICBpbnQgbGVuZ3Ro LCBpbnQgY3ljbGUpCiB7Ci0Jdm9sYXRpbGUgczMyICpjbWQ7CisJczMyICpjbWQ7CiAJaW50IHZh bDsKIAogCWlmIChwaXBlIDwgMCB8fCBwaXBlID4gREJSSV9NQVhfUElQRSAKQEAgLTg0NywxMSAr ODg3LDEwIEBAIHN0YXRpYyB2b2lkIGxpbmtfdGltZV9zbG90KHN0cnVjdCBzbmRfZGIKIAl9CiAK IAlkYnJpLT5waXBlc1twcmV2cGlwZV0ubmV4dHBpcGUgPSBwaXBlOwotCiAJZGJyaS0+cGlwZXNb cGlwZV0ubmV4dHBpcGUgPSBuZXh0cGlwZTsKIAlkYnJpLT5waXBlc1twaXBlXS5sZW5ndGggPSBs ZW5ndGg7CiAKLQljbWQgPSBkYnJpX2NtZGxvY2soZGJyaSwgTm9HZXRMb2NrKTsKKwljbWQgPSBk YnJpX2NtZGxvY2soZGJyaSwgNCk7CiAKIAlpZiAoZGJyaS0+cGlwZXNbcGlwZV0uc2RwICYgRF9T RFBfVE9fU0VSKSB7CiAJCS8qIERlYWwgd2l0aCBDSEkgc3BlY2lhbCBjYXNlOgpAQCAtODc0LDI1 ICs5MTMsMjcgQEAgc3RhdGljIHZvaWQgbGlua190aW1lX3Nsb3Qoc3RydWN0IHNuZF9kYgogCQkg ICAgRF9UU19MRU4obGVuZ3RoKSB8IERfVFNfQ1lDTEUoY3ljbGUpIHwgRF9UU19ORVhUKG5leHRw aXBlKTsKIAkJKihjbWQrKykgPSAwOwogCX0KKwkqKGNtZCsrKSA9IERCUklfQ01EKERfUEFVU0Us IDAsIDApOwogCi0JZGJyaV9jbWRzZW5kKGRicmksIGNtZCk7CisJZGJyaV9jbWRzZW5kKGRicmks IGNtZCwgNCk7CiB9CiAKIHN0YXRpYyB2b2lkIHVubGlua190aW1lX3Nsb3Qoc3RydWN0IHNuZF9k YnJpICogZGJyaSwgaW50IHBpcGUsCiAJCQkgICAgIGVudW0gaW5fb3Jfb3V0IGRpcmVjdGlvbiwg aW50IHByZXZwaXBlLAogCQkJICAgICBpbnQgbmV4dHBpcGUpCiB7Ci0Jdm9sYXRpbGUgczMyICpj bWQ7CisJczMyICpjbWQ7CiAJaW50IHZhbDsKIAogCWlmIChwaXBlIDwgMCB8fCBwaXBlID4gREJS SV9NQVhfUElQRSAKLQkJCXx8IHByZXZwaXBlIDwgMCB8fCBwcmV2cGlwZSA+IERCUklfTUFYX1BJ UEUpIHsKKwkJCXx8IHByZXZwaXBlIDwgMCB8fCBwcmV2cGlwZSA+IERCUklfTUFYX1BJUEUKKwkJ CXx8IG5leHRwaXBlIDwgMCB8fCBuZXh0cGlwZSA+IERCUklfTUFYX1BJUEUpIHsKIAkJcHJpbnRr KEtFUk5fRVJSIAogCQkgICAgIkRCUkk6IHVubGlua190aW1lX3Nsb3QgY2FsbGVkIHdpdGggaWxs ZWdhbCBwaXBlIG51bWJlclxuIik7CiAJCXJldHVybjsKIAl9CiAKLQljbWQgPSBkYnJpX2NtZGxv Y2soZGJyaSwgTm9HZXRMb2NrKTsKKwljbWQgPSBkYnJpX2NtZGxvY2soZGJyaSwgNCk7CiAKIAlp ZiAoZGlyZWN0aW9uID09IFBJUEVpbnB1dCkgewogCQl2YWwgPSBEX0RUU19WSSB8IERfRFRTX0RF TCB8IERfRFRTX1BSVklOKHByZXZwaXBlKSB8IHBpcGU7CkBAIC05MDUsOCArOTQ2LDkgQEAgc3Rh dGljIHZvaWQgdW5saW5rX3RpbWVfc2xvdChzdHJ1Y3Qgc25kXwogCQkqKGNtZCsrKSA9IDA7CiAJ CSooY21kKyspID0gRF9UU19ORVhUKG5leHRwaXBlKTsKIAl9CisJKihjbWQrKykgPSBEQlJJX0NN RChEX1BBVVNFLCAwLCAwKTsKIAotCWRicmlfY21kc2VuZChkYnJpLCBjbWQpOworCWRicmlfY21k c2VuZChkYnJpLCBjbWQsIDQpOwogfQogCiAvKiB4bWl0X2ZpeGVkKCkgLyByZWN2X2ZpeGVkKCkK QEAgLTkyNSw3ICs5NjcsNyBAQCBzdGF0aWMgdm9pZCB1bmxpbmtfdGltZV9zbG90KHN0cnVjdCBz bmRfCiAgKi8KIHN0YXRpYyB2b2lkIHhtaXRfZml4ZWQoc3RydWN0IHNuZF9kYnJpICogZGJyaSwg aW50IHBpcGUsIHVuc2lnbmVkIGludCBkYXRhKQogewotCXZvbGF0aWxlIHMzMiAqY21kOworCXMz MiAqY21kOwogCiAJaWYgKHBpcGUgPCAxNiB8fCBwaXBlID4gREJSSV9NQVhfUElQRSkgewogCQlw cmludGsoS0VSTl9FUlIgIkRCUkk6IHhtaXRfZml4ZWQ6IElsbGVnYWwgcGlwZSBudW1iZXJcbiIp OwpAQCAtOTUyLDEyICs5OTQsMTQgQEAgc3RhdGljIHZvaWQgeG1pdF9maXhlZChzdHJ1Y3Qgc25k X2RicmkgKgogCWlmIChkYnJpLT5waXBlc1twaXBlXS5zZHAgJiBEX1NEUF9NU0IpCiAJCWRhdGEg PSByZXZlcnNlX2J5dGVzKGRhdGEsIGRicmktPnBpcGVzW3BpcGVdLmxlbmd0aCk7CiAKLQljbWQg PSBkYnJpX2NtZGxvY2soZGJyaSwgR2V0TG9jayk7CisJY21kID0gZGJyaV9jbWRsb2NrKGRicmks IDMpOwogCiAJKihjbWQrKykgPSBEQlJJX0NNRChEX1NTUCwgMCwgcGlwZSk7CiAJKihjbWQrKykg PSBkYXRhOworCSooY21kKyspID0gREJSSV9DTUQoRF9QQVVTRSwgMCwgMCk7CiAKLQlkYnJpX2Nt ZHNlbmQoZGJyaSwgY21kKTsKKwlkYnJpX2NtZHNlbmQoZGJyaSwgY21kLCAzKTsKKwlkYnJpX2Nt ZHdhaXQoZGJyaSk7CiB9CiAKIHN0YXRpYyB2b2lkIHJlY3ZfZml4ZWQoc3RydWN0IHNuZF9kYnJp ICogZGJyaSwgaW50IHBpcGUsIHZvbGF0aWxlIF9fdTMyICogcHRyKQpAQCAtOTkxLDYgKzEwMzUs OCBAQCBzdGF0aWMgdm9pZCByZWN2X2ZpeGVkKHN0cnVjdCBzbmRfZGJyaSAqCiAgKiBhbmQgd29y ayBieSBidWlsZGluZyBjaGFpbnMgb2YgZGVzY3JpcHRvcnMgd2hpY2ggaWRlbnRpZnkgdGhlCiAg KiBkYXRhIGJ1ZmZlcnMuICBCdWZmZXJzIHRvbyBsYXJnZSBmb3IgYSBzaW5nbGUgZGVzY3JpcHRv ciB3aWxsCiAgKiBiZSBzcHJlYWQgYWNyb3NzIG11bHRpcGxlIGRlc2NyaXB0b3JzLgorICoKKyAq IEFsbCBkZXNjcmlwdG9ycyBjcmVhdGUgYSByaW5nIGJ1ZmZlci4KICAqLwogc3RhdGljIGludCBz ZXR1cF9kZXNjcyhzdHJ1Y3Qgc25kX2RicmkgKiBkYnJpLCBpbnQgc3RyZWFtbm8sIHVuc2lnbmVk IGludCBwZXJpb2QpCiB7CkBAIC0xMDUxLDE0ICsxMDk3LDEzIEBAIHN0YXRpYyBpbnQgc2V0dXBf ZGVzY3Moc3RydWN0IHNuZF9kYnJpICoKIAkJCXJldHVybiAtMTsKIAkJfQogCi0JCWlmIChsZW4g PiBEQlJJX1REX01BWENOVCkgewotCQkJbXlsZW4gPSBEQlJJX1REX01BWENOVDsJLyogOEtCIC0g MSAqLwotCQl9IGVsc2UgeworCQlpZiAobGVuID4gREJSSV9URF9NQVhDTlQpCisJCQlteWxlbiA9 IERCUklfVERfTUFYQ05UOwkvKiA4S0IgLSA0ICovCisJCWVsc2UKIAkJCW15bGVuID0gbGVuOwot CQl9Ci0JCWlmIChteWxlbiA+IHBlcmlvZCkgeworCisJCWlmIChteWxlbiA+IHBlcmlvZCkKIAkJ CW15bGVuID0gcGVyaW9kOwotCQl9CiAKIAkJZGJyaS0+bmV4dF9kZXNjW2Rlc2NdID0gLTE7CiAJ CWRicmktPmRtYS0+ZGVzY1tkZXNjXS5iYSA9IGR2bWFfYnVmZmVyOwpAQCAtMTA2NywxNyArMTEx MiwxNyBAQCBzdGF0aWMgaW50IHNldHVwX2Rlc2NzKHN0cnVjdCBzbmRfZGJyaSAqCiAJCWlmIChz dHJlYW1ubyA9PSBEQlJJX1BMQVkpIHsKIAkJCWRicmktPmRtYS0+ZGVzY1tkZXNjXS53b3JkMSA9 IERCUklfVERfQ05UKG15bGVuKTsKIAkJCWRicmktPmRtYS0+ZGVzY1tkZXNjXS53b3JkNCA9IDA7 Ci0JCQlpZiAoZmlyc3RfZGVzYyAhPSAtMSkKLQkJCQlkYnJpLT5kbWEtPmRlc2NbZGVzY10ud29y ZDEgfD0gREJSSV9URF9NOworCQkJZGJyaS0+ZG1hLT5kZXNjW2Rlc2NdLndvcmQxIHw9IAorCQkJ ICAgIERCUklfVERfRiB8IERCUklfVERfQjsKIAkJfSBlbHNlIHsKIAkJCWRicmktPmRtYS0+ZGVz Y1tkZXNjXS53b3JkMSA9IDA7CiAJCQlkYnJpLT5kbWEtPmRlc2NbZGVzY10ud29yZDQgPQogCQkJ ICAgIERCUklfUkRfQiB8IERCUklfUkRfQkNOVChteWxlbik7CiAJCX0KIAotCQlpZiAoZmlyc3Rf ZGVzYyA9PSAtMSkgeworCQlpZiAoZmlyc3RfZGVzYyA9PSAtMSkKIAkJCWZpcnN0X2Rlc2MgPSBk ZXNjOwotCQl9IGVsc2UgeworCQllbHNlIHsKIAkJCWRicmktPm5leHRfZGVzY1tsYXN0X2Rlc2Nd ID0gZGVzYzsKIAkJCWRicmktPmRtYS0+ZGVzY1tsYXN0X2Rlc2NdLm5kYSA9CiAJCQkgICAgZGJy aS0+ZG1hX2R2bWEgKyBkYnJpX2RtYV9vZmYoZGVzYywgZGVzYyk7CkBAIC0xMDkzLDIxICsxMTM4 LDI4IEBAIHN0YXRpYyBpbnQgc2V0dXBfZGVzY3Moc3RydWN0IHNuZF9kYnJpICoKIAkJcmV0dXJu IC0xOwogCX0KIAotCWRicmktPmRtYS0+ZGVzY1tsYXN0X2Rlc2NdLndvcmQxICY9IH5EQlJJX1RE X007CiAJaWYgKHN0cmVhbW5vID09IERCUklfUExBWSkgewogCQlkYnJpLT5kbWEtPmRlc2NbbGFz dF9kZXNjXS53b3JkMSB8PQotCQkgICAgREJSSV9URF9JIHwgREJSSV9URF9GIHwgREJSSV9URF9C OworCQkgICAgREJSSV9URF9GIHwgREJSSV9URF9COworCQlkYnJpLT5kbWEtPmRlc2NbbGFzdF9k ZXNjXS5uZGEgPQorCQkgICAgZGJyaS0+ZG1hX2R2bWEgKyBkYnJpX2RtYV9vZmYoZGVzYywgZmly c3RfZGVzYyk7CisJCWRicmktPm5leHRfZGVzY1tsYXN0X2Rlc2NdID0gZmlyc3RfZGVzYzsKIAl9 CiAJZGJyaS0+cGlwZXNbaW5mby0+cGlwZV0uZmlyc3RfZGVzYyA9IGZpcnN0X2Rlc2M7CiAJZGJy aS0+cGlwZXNbaW5mby0+cGlwZV0uZGVzYyA9IGZpcnN0X2Rlc2M7CiAKLQlmb3IgKGRlc2MgPSBm aXJzdF9kZXNjOyBkZXNjICE9IC0xOyBkZXNjID0gZGJyaS0+bmV4dF9kZXNjW2Rlc2NdKSB7Cisj aWZkZWYgREJSSV9ERUJVRworCWZvciAoZGVzYyA9IGZpcnN0X2Rlc2M7IGRlc2MgIT0gLTE7ICkg ewogCQlkcHJpbnRrKERfREVTQywgIkRFU0MgJWQ6ICUwOHggJTA4eCAlMDh4ICUwOHhcbiIsCiAJ CQlkZXNjLAogCQkJZGJyaS0+ZG1hLT5kZXNjW2Rlc2NdLndvcmQxLAogCQkJZGJyaS0+ZG1hLT5k ZXNjW2Rlc2NdLmJhLAogCQkJZGJyaS0+ZG1hLT5kZXNjW2Rlc2NdLm5kYSwgZGJyaS0+ZG1hLT5k ZXNjW2Rlc2NdLndvcmQ0KTsKKwkJCWRlc2MgPSBkYnJpLT5uZXh0X2Rlc2NbZGVzY107CisJCQlp ZiAoIGRlc2MgPT0gZmlyc3RfZGVzYyApCisJCQkJYnJlYWs7CiAJfQorI2VuZGlmCiAJcmV0dXJu IDA7CiB9CiAKQEAgLTExMjcsNDMgKzExNzksMjQgQEAgZW51bSBtYXN0ZXJfb3Jfc2xhdmUgeyBD SEltYXN0ZXIsIENISXNsYQogc3RhdGljIHZvaWQgcmVzZXRfY2hpKHN0cnVjdCBzbmRfZGJyaSAq IGRicmksIGVudW0gbWFzdGVyX29yX3NsYXZlIG1hc3Rlcl9vcl9zbGF2ZSwKIAkJICAgICAgaW50 IGJpdHNfcGVyX2ZyYW1lKQogewotCXZvbGF0aWxlIHMzMiAqY21kOworCXMzMiAqY21kOwogCWlu dCB2YWw7Ci0Jc3RhdGljIGludCBjaGlfaW5pdGlhbGl6ZWQgPSAwOwkvKiBGSVhNRTogbXV0ZXg/ ICovCi0KLQlpZiAoIWNoaV9pbml0aWFsaXplZCkgewotCi0JCWNtZCA9IGRicmlfY21kbG9jayhk YnJpLCBHZXRMb2NrKTsKIAotCQkvKiBTZXQgQ0hJIEFuY2hvcjogUGlwZSAxNiAqLworCS8qIFNl dCBDSEkgQW5jaG9yOiBQaXBlIDE2ICovCiAKLQkJdmFsID0gRF9EVFNfVk8gfCBEX0RUU19WSSB8 IERfRFRTX0lOUyAKLQkJCXwgRF9EVFNfUFJWSU4oMTYpIHwgRF9QSVBFKDE2KSB8IERfRFRTX1BS Vk9VVCgxNik7Ci0JCSooY21kKyspID0gREJSSV9DTUQoRF9EVFMsIDAsIHZhbCk7Ci0JCSooY21k KyspID0gRF9UU19BTkNIT1IgfCBEX1RTX05FWFQoMTYpOwotCQkqKGNtZCsrKSA9IERfVFNfQU5D SE9SIHwgRF9UU19ORVhUKDE2KTsKLQotCQlkYnJpLT5waXBlc1sxNl0uc2RwID0gMTsKLQkJZGJy aS0+cGlwZXNbMTZdLm5leHRwaXBlID0gMTY7CisJY21kID0gZGJyaV9jbWRsb2NrKGRicmksIDQp OworCXZhbCA9IERfRFRTX1ZPIHwgRF9EVFNfVkkgfCBEX0RUU19JTlMgCisJCXwgRF9EVFNfUFJW SU4oMTYpIHwgRF9QSVBFKDE2KSB8IERfRFRTX1BSVk9VVCgxNik7CisJKihjbWQrKykgPSBEQlJJ X0NNRChEX0RUUywgMCwgdmFsKTsKKwkqKGNtZCsrKSA9IERfVFNfQU5DSE9SIHwgRF9UU19ORVhU KDE2KTsKKwkqKGNtZCsrKSA9IERfVFNfQU5DSE9SIHwgRF9UU19ORVhUKDE2KTsKKwkqKGNtZCsr KSA9IERCUklfQ01EKERfUEFVU0UsIDAsIDApOworCWRicmlfY21kc2VuZChkYnJpLCBjbWQsIDQp OwogCi0jaWYgMAotCQljaGlfaW5pdGlhbGl6ZWQrKzsKLSNlbmRpZgotCX0gZWxzZSB7Ci0JCWlu dCBwaXBlOworCWRicmktPnBpcGVzWzE2XS5zZHAgPSAxOworCWRicmktPnBpcGVzWzE2XS5uZXh0 cGlwZSA9IDE2OwogCi0JCWZvciAocGlwZSA9IDA7IHBpcGUgPCBEQlJJX05PX1BJUEVTOyBwaXBl KysgKQotCQkJaWYgKCBwaXBlICE9IDE2ICkgewotCQkJCWlmIChkYnJpLT5waXBlc1twaXBlXS5z ZHAgJiBEX1NEUF9UT19TRVIpCi0JCQkJCXVubGlua190aW1lX3Nsb3QoZGJyaSwgcGlwZSwgUElQ RW91dHB1dCwKLQkJCQkJCQkgMTYsIGRicmktPnBpcGVzW3BpcGVdLm5leHRwaXBlKTsKLQkJCQll bHNlCi0JCQkJCXVubGlua190aW1lX3Nsb3QoZGJyaSwgcGlwZSwgUElQRWlucHV0LAotCQkJCQkJ CSAxNiwgZGJyaS0+cGlwZXNbcGlwZV0ubmV4dHBpcGUpOwotCQkJfQotICAKLSAgCQljbWQgPSBk YnJpX2NtZGxvY2soZGJyaSwgR2V0TG9jayk7Ci0JfQorCWNtZCA9IGRicmlfY21kbG9jayhkYnJp LCA0KTsKIAogCWlmIChtYXN0ZXJfb3Jfc2xhdmUgPT0gQ0hJc2xhdmUpIHsKIAkJLyogU2V0dXAg REJSSSBmb3IgQ0hJIFNsYXZlIC0gcmVjZWl2ZSBjbG9jaywgZnJhbWUgc3luYyAoRlMpCkBAIC0x MjAyLDggKzEyMzUsOSBAQCBzdGF0aWMgdm9pZCByZXNldF9jaGkoc3RydWN0IHNuZF9kYnJpICog CiAKIAkqKGNtZCsrKSA9IERCUklfQ01EKERfUEFVU0UsIDAsIDApOwogCSooY21kKyspID0gREJS SV9DTUQoRF9DRE0sIDAsIERfQ0RNX1hDRSB8IERfQ0RNX1hFTiB8IERfQ0RNX1JFTik7CisJKihj bWQrKykgPSBEQlJJX0NNRChEX1BBVVNFLCAwLCAwKTsKIAotCWRicmlfY21kc2VuZChkYnJpLCBj bWQpOworCWRicmlfY21kc2VuZChkYnJpLCBjbWQsIDQpOwogfQogCiAvKgpAQCAtMTI0MCw2ICsx Mjc0LDggQEAgc3RhdGljIHZvaWQgY3M0MjE1X3NldHVwX3BpcGVzKHN0cnVjdCBzbgogCXNldHVw X3BpcGUoZGJyaSwgMTcsIERfU0RQX0ZJWEVEIHwgRF9TRFBfVE9fU0VSIHwgRF9TRFBfTVNCKTsK IAlzZXR1cF9waXBlKGRicmksIDE4LCBEX1NEUF9GSVhFRCB8IERfU0RQX0ZST01fU0VSIHwgRF9T RFBfTVNCKTsKIAlzZXR1cF9waXBlKGRicmksIDE5LCBEX1NEUF9GSVhFRCB8IERfU0RQX0ZST01f U0VSIHwgRF9TRFBfTVNCKTsKKworCWRicmlfY21kd2FpdChkYnJpKTsKIH0KIAogc3RhdGljIGlu dCBjczQyMTVfaW5pdF9kYXRhKHN0cnVjdCBjczQyMTUgKm1tKQpAQCAtMTI3MSw3ICsxMzA3LDcg QEAgc3RhdGljIGludCBjczQyMTVfaW5pdF9kYXRhKHN0cnVjdCBjczQyMQogCW1tLT5zdGF0dXMg PSAwOwogCW1tLT52ZXJzaW9uID0gMHhmZjsKIAltbS0+cHJlY2lzaW9uID0gODsJLyogRm9yIFVM QVcgKi8KLQltbS0+Y2hhbm5lbHMgPSAyOworCW1tLT5jaGFubmVscyA9IDE7CiAKIAlyZXR1cm4g MDsKIH0KQEAgLTE1NTQsNyArMTU5MCw2IEBAIHN0YXRpYyBpbnQgY3M0MjE1X2luaXQoc3RydWN0 IHNuZF9kYnJpICoKIAl9CiAKIAljczQyMTVfc2V0dXBfcGlwZXMoZGJyaSk7Ci0KIAljczQyMTVf aW5pdF9kYXRhKCZkYnJpLT5tbSk7CiAKIAkvKiBFbmFibGUgY2FwdHVyZSBvZiB0aGUgc3RhdHVz ICYgdmVyc2lvbiB0aW1lc2xvdHMuICovCkBAIC0xNTgzLDkgKzE2MTgsNyBAQCBidWZmZXIgYW5k IGNhbGxzIGRicmlfcHJvY2Vzc19vbmVfaW50ZXJyCiBDb21wbGljYXRlZCBpbnRlcnJ1cHRzIGFy ZSBoYW5kbGVkIGJ5IGRlZGljYXRlZCBmdW5jdGlvbnMgKHdoaWNoCiBhcHBlYXIgZmlyc3QgaW4g dGhpcyBmaWxlKS4gIEFueSBwZW5kaW5nIGludGVycnVwdHMgY2FuIGJlIHNlcnZpY2VkIGJ5CiBj YWxsaW5nIGRicmlfcHJvY2Vzc19pbnRlcnJ1cHRfYnVmZmVyKCksIHdoaWNoIHdvcmtzIGV2ZW4g aWYgdGhlIENQVSdzCi1pbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZC4gIFRoaXMgZnVuY3Rpb24gaXMg dXNlZCBieSBkYnJpX2NtZGxvY2soKQotdG8gbWFrZSBzdXJlIHdlJ3JlIHN5bmNlZCB1cCB3aXRo IHRoZSBjaGlwIGJlZm9yZSBlYWNoIGNvbW1hbmQgc2VxdWVuY2UsCi1ldmVuIGlmIHdlJ3JlIHJ1 bm5pbmcgY2xpJ2VkLgoraW50ZXJydXB0cyBhcmUgZGlzYWJsZWQuCiAKICovCiAKQEAgLTE1OTQs MTEgKzE2MjcsMTAgQEAgZXZlbiBpZiB3ZSdyZSBydW5uaW5nIGNsaSdlZC4KICAqIFRyYW5zbWl0 IHRoZSBjdXJyZW50IFREJ3MgZm9yIHJlY29yZGluZy9wbGF5aW5nLCBpZiBuZWVkZWQuCiAgKiBG b3IgcGxheWJhY2ssIEFMU0EgaGFzIGZpbGxlZCB0aGUgRE1BIG1lbW9yeSB3aXRoIG5ldyBkYXRh ICh3ZSBob3BlKS4KICAqLwotc3RhdGljIHZvaWQgeG1pdF9kZXNjcyh1bnNpZ25lZCBsb25nIGRh dGEpCitzdGF0aWMgdm9pZCB4bWl0X2Rlc2NzKHN0cnVjdCBzbmRfZGJyaSAqZGJyaSkKIHsKLQlz dHJ1Y3Qgc25kX2RicmkgKmRicmkgPSAoc3RydWN0IHNuZF9kYnJpICopIGRhdGE7CiAJc3RydWN0 IGRicmlfc3RyZWFtaW5mbyAqaW5mbzsKLQl2b2xhdGlsZSBzMzIgKmNtZDsKKwlzMzIgKmNtZDsK IAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBmaXJzdF90ZDsKIApAQCAtMTYwOSw3ICsxNjQx LDcgQEAgc3RhdGljIHZvaWQgeG1pdF9kZXNjcyh1bnNpZ25lZCBsb25nIGRhdAogCWluZm8gPSAm ZGJyaS0+c3RyZWFtX2luZm9bREJSSV9SRUNdOwogCXNwaW5fbG9ja19pcnFzYXZlKCZkYnJpLT5s b2NrLCBmbGFncyk7CiAKLQlpZiAoKGluZm8tPmxlZnQgPj0gaW5mby0+c2l6ZSkgJiYgKGluZm8t PnBpcGUgPj0gMCkpIHsKKwlpZiAoaW5mby0+cGlwZSA+PSAwKSB7CiAJCWZpcnN0X3RkID0gZGJy aS0+cGlwZXNbaW5mby0+cGlwZV0uZmlyc3RfZGVzYzsKIAogCQlkcHJpbnRrKERfREVTQywgInht aXRfZGVzY3MgcmVjIEAgVEQgJWRcbiIsIGZpcnN0X3RkKTsKQEAgLTE2MTksMTYgKzE2NTEsMTUg QEAgc3RhdGljIHZvaWQgeG1pdF9kZXNjcyh1bnNpZ25lZCBsb25nIGRhdAogCQkJZ290byBwbGF5 OwogCQl9CiAKLQkJY21kID0gZGJyaV9jbWRsb2NrKGRicmksIE5vR2V0TG9jayk7CisJCWNtZCA9 IGRicmlfY21kbG9jayhkYnJpLCAyKTsKIAkJKihjbWQrKykgPSBEQlJJX0NNRChEX1NEUCwgMCwK IAkJCQkgICAgZGJyaS0+cGlwZXNbaW5mby0+cGlwZV0uc2RwCiAJCQkJICAgIHwgRF9TRFBfUCB8 IERfU0RQX0VWRVJZIHwgRF9TRFBfQyk7CiAJCSooY21kKyspID0gZGJyaS0+ZG1hX2R2bWEgKyBk YnJpX2RtYV9vZmYoZGVzYywgZmlyc3RfdGQpOwotCQlkYnJpX2NtZHNlbmQoZGJyaSwgY21kKTsK KwkJZGJyaV9jbWRzZW5kKGRicmksIGNtZCwgMik7CiAKIAkJLyogUmVzZXQgb3VyIGFkbWluIG9m IHRoZSBwaXBlICYgYnl0ZXMgcmVhZC4gKi8KIAkJZGJyaS0+cGlwZXNbaW5mby0+cGlwZV0uZGVz YyA9IGZpcnN0X3RkOwotCQlpbmZvLT5sZWZ0ID0gMDsKIAl9CiAKIHBsYXk6CkBAIC0xNjM4LDMz ICsxNjY5LDI3IEBAIHBsYXk6CiAJaW5mbyA9ICZkYnJpLT5zdHJlYW1faW5mb1tEQlJJX1BMQVld OwogCXNwaW5fbG9ja19pcnFzYXZlKCZkYnJpLT5sb2NrLCBmbGFncyk7CiAKLQlpZiAoKGluZm8t PmxlZnQgPD0gMCkgJiYgKGluZm8tPnBpcGUgPj0gMCkpIHsKKwlpZiAoaW5mby0+cGlwZSA+PSAw KSB7CiAJCWZpcnN0X3RkID0gZGJyaS0+cGlwZXNbaW5mby0+cGlwZV0uZmlyc3RfZGVzYzsKIAog CQlkcHJpbnRrKERfREVTQywgInhtaXRfZGVzY3MgcGxheSBAIFREICVkXG4iLCBmaXJzdF90ZCk7 CiAKIAkJLyogU3RyZWFtIGNvdWxkIGJlIGNsb3NlZCBieSB0aGUgdGltZSB3ZSBydW4uICovCi0J CWlmIChmaXJzdF90ZCA8IDApIHsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRicmktPmxv Y2ssIGZsYWdzKTsKLQkJCXJldHVybjsKLQkJfQotCi0JCWNtZCA9IGRicmlfY21kbG9jayhkYnJp LCBOb0dldExvY2spOwotCQkqKGNtZCsrKSA9IERCUklfQ01EKERfU0RQLCAwLAotCQkJCSAgICBk YnJpLT5waXBlc1tpbmZvLT5waXBlXS5zZHAKLQkJCQkgICAgfCBEX1NEUF9QIHwgRF9TRFBfRVZF UlkgfCBEX1NEUF9DKTsKLQkJKihjbWQrKykgPSBkYnJpLT5kbWFfZHZtYSArIGRicmlfZG1hX29m ZihkZXNjLCBmaXJzdF90ZCk7Ci0JCWRicmlfY21kc2VuZChkYnJpLCBjbWQpOworCQlpZiAoZmly c3RfdGQgPj0gMCkgeworCQkJY21kID0gZGJyaV9jbWRsb2NrKGRicmksIDIpOworCQkJKihjbWQr KykgPSBEQlJJX0NNRChEX1NEUCwgMCwKKwkJCQkJICAgIGRicmktPnBpcGVzW2luZm8tPnBpcGVd LnNkcAorCQkJCQkgICAgfCBEX1NEUF9QIHwgRF9TRFBfRVZFUlkgfCBEX1NEUF9DKTsKKwkJCSoo Y21kKyspID0gZGJyaS0+ZG1hX2R2bWEgKyBkYnJpX2RtYV9vZmYoZGVzYywgZmlyc3RfdGQpOwor CQkJZGJyaV9jbWRzZW5kKGRicmksIGNtZCwgMik7CiAKLQkJLyogUmVzZXQgb3VyIGFkbWluIG9m IHRoZSBwaXBlICYgYnl0ZXMgd3JpdHRlbi4gKi8KLQkJZGJyaS0+cGlwZXNbaW5mby0+cGlwZV0u ZGVzYyA9IGZpcnN0X3RkOwotCQlpbmZvLT5sZWZ0ID0gaW5mby0+c2l6ZTsKKwkJCS8qIFJlc2V0 IG91ciBhZG1pbiBvZiB0aGUgcGlwZSAmIGJ5dGVzIHdyaXR0ZW4uICovCisJCQlkYnJpLT5waXBl c1tpbmZvLT5waXBlXS5kZXNjID0gZmlyc3RfdGQ7CisJCX0KIAl9CiAJc3Bpbl91bmxvY2tfaXJx cmVzdG9yZSgmZGJyaS0+bG9jaywgZmxhZ3MpOwogfQogCi1zdGF0aWMgREVDTEFSRV9UQVNLTEVU KHhtaXRfZGVzY3NfdGFzaywgeG1pdF9kZXNjcywgMCk7Ci0KIC8qIHRyYW5zbWlzc2lvbl9jb21w bGV0ZV9pbnRyKCkKICAqCiAgKiBDYWxsZWQgYnkgbWFpbiBpbnRlcnJ1cHQgaGFuZGxlciB3aGVu IERCUkkgc2lnbmFscyB0cmFuc21pc3Npb24gY29tcGxldGUKQEAgLTE2ODQsNyArMTcwOSw2IEBA IHN0YXRpYyB2b2lkIHRyYW5zbWlzc2lvbl9jb21wbGV0ZV9pbnRyKHMKIAlzdHJ1Y3QgZGJyaV9z dHJlYW1pbmZvICppbmZvOwogCWludCB0ZDsKIAlpbnQgc3RhdHVzOwotCWludCBsZW47CiAKIAlp bmZvID0gJmRicmktPnN0cmVhbV9pbmZvW0RCUklfUExBWV07CiAKQEAgLTE3MDMsMjAgKzE3Mjcs NyBAQCBzdGF0aWMgdm9pZCB0cmFuc21pc3Npb25fY29tcGxldGVfaW50cihzCiAJCWRwcmludGso RF9JTlQsICJURCAlZCwgc3RhdHVzIDB4JTAyeFxuIiwgdGQsIHN0YXR1cyk7CiAKIAkJZGJyaS0+ ZG1hLT5kZXNjW3RkXS53b3JkNCA9IDA7CS8qIFJlc2V0IGl0IGZvciBuZXh0IHRpbWUuICovCi0J CWxlbiA9IERCUklfUkRfQ05UKGRicmktPmRtYS0+ZGVzY1t0ZF0ud29yZDEpOwotCQlpbmZvLT5v ZmZzZXQgKz0gbGVuOwotCQlpbmZvLT5sZWZ0IC09IGxlbjsKLQotCQkvKiBPbiB0aGUgbGFzdCBU RCwgdHJhbnNtaXQgdGhlbSBhbGwgYWdhaW4uICovCi0JCWlmIChkYnJpLT5uZXh0X2Rlc2NbdGRd ID09IC0xKSB7Ci0JCQlpZiAoaW5mby0+bGVmdCA+IDApIHsKLQkJCQlwcmludGsoS0VSTl9XQVJO SU5HCi0JCQkJICAgICAgICIlZCBieXRlcyBsZWZ0IGFmdGVyIGxhc3QgdHJhbnNmZXIuXG4iLAot CQkJCSAgICAgICBpbmZvLT5sZWZ0KTsKLQkJCQlpbmZvLT5sZWZ0ID0gMDsKLQkJCX0KLQkJCXRh c2tsZXRfc2NoZWR1bGUoJnhtaXRfZGVzY3NfdGFzayk7Ci0JCX0KKwkJaW5mby0+b2Zmc2V0ICs9 IERCUklfUkRfQ05UKGRicmktPmRtYS0+ZGVzY1t0ZF0ud29yZDEpOwogCiAJCXRkID0gZGJyaS0+ bmV4dF9kZXNjW3RkXTsKIAkJZGJyaS0+cGlwZXNbcGlwZV0uZGVzYyA9IHRkOwpAQCAtMTc0OSw3 ICsxNzYwLDYgQEAgc3RhdGljIHZvaWQgcmVjZXB0aW9uX2NvbXBsZXRlX2ludHIoc3RydQogCiAJ aW5mbyA9ICZkYnJpLT5zdHJlYW1faW5mb1tEQlJJX1JFQ107CiAJaW5mby0+b2Zmc2V0ICs9IERC UklfUkRfQ05UKHN0YXR1cyk7Ci0JaW5mby0+bGVmdCArPSBEQlJJX1JEX0NOVChzdGF0dXMpOwog CiAJLyogRklYTUU6IENoZWNrIHN0YXR1cyAqLwogCkBAIC0xNzU3LDYgKzE3NjcsNyBAQCBzdGF0 aWMgdm9pZCByZWNlcHRpb25fY29tcGxldGVfaW50cihzdHJ1CiAJCXJkLCBEQlJJX1JEX1NUQVRV UyhzdGF0dXMpLCBEQlJJX1JEX0NOVChzdGF0dXMpKTsKIAogCS8qIE9uIHRoZSBsYXN0IFRELCB0 cmFuc21pdCB0aGVtIGFsbCBhZ2Fpbi4gKi8KKyNpZiAwCiAJaWYgKGRicmktPm5leHRfZGVzY1ty ZF0gPT0gLTEpIHsKIAkJaWYgKGluZm8tPmxlZnQgPiBpbmZvLT5zaXplKSB7CiAJCQlwcmludGso S0VSTl9XQVJOSU5HCkBAIC0xNzY1LDYgKzE3NzYsNyBAQCBzdGF0aWMgdm9pZCByZWNlcHRpb25f Y29tcGxldGVfaW50cihzdHJ1CiAJCX0KIAkJdGFza2xldF9zY2hlZHVsZSgmeG1pdF9kZXNjc190 YXNrKTsKIAl9CisjZW5kaWYKIAogCS8qIE5vdGlmeSBBTFNBICovCiAJaWYgKHNwaW5faXNfbG9j a2VkKCZkYnJpLT5sb2NrKSkgewpAQCAtMTc5MywxNiArMTgwNSwxMSBAQCBzdGF0aWMgdm9pZCBk YnJpX3Byb2Nlc3Nfb25lX2ludGVycnVwdChzCiAJCQljaGFubmVsLCBjb2RlLCBydmFsKTsKIAl9 CiAKLQlpZiAoY2hhbm5lbCA9PSBEX0lOVFJfQ01EICYmIGNvbW1hbmQgPT0gRF9XQUlUKSB7Ci0J CWRicmktPndhaXRfYWNrZCA9IHZhbDsKLQkJaWYgKGRicmktPndhaXRfc2VuZCAhPSB2YWwpIHsK LQkJCXByaW50ayhLRVJOX0VSUiAiUHJvY2Vzc2luZyB3YWl0IGNvbW1hbmQgJWQgd2hlbiAlZCB3 YXMgc2VuZC5cbiIsCi0JCQkgICAgICAgdmFsLCBkYnJpLT53YWl0X3NlbmQpOwotCQl9Ci0JCXJl dHVybjsKLQl9Ci0KIAlzd2l0Y2ggKGNvZGUpIHsKKwljYXNlIERfSU5UUl9DTURJOgorCQlpZiAo Y29tbWFuZCAhPSBEX1dBSVQpCisJCQlwcmludGsoS0VSTl9FUlIgIkRCUkk6IENvbW1hbmQgcmVh ZCBpbnRlcnJ1cHRcbiIpOworCQlicmVhazsKIAljYXNlIERfSU5UUl9CUkRZOgogCQlyZWNlcHRp b25fY29tcGxldGVfaW50cihkYnJpLCBjaGFubmVsKTsKIAkJYnJlYWs7CkBAIC0xODE1LDggKzE4 MjIsMTAgQEAgc3RhdGljIHZvaWQgZGJyaV9wcm9jZXNzX29uZV9pbnRlcnJ1cHQocwogCQkgKiBy ZXNlbmQgU0RQIGNvbW1hbmQgd2l0aCBjbGVhciBwaXBlIGJpdCAoQykgc2V0CiAJCSAqLwogCQl7 Ci0JCQl2b2xhdGlsZSBzMzIgKmNtZDsKLQorCS8qIEZJWE1FOiBkbyBzb21ldGhpbmcgdXNlZnVs IGluIGNhc2Ugb2YgdW5kZXJydW4gKi8KKwkJCXByaW50ayhLRVJOX0VSUiAiREJSSTogVW5kZXJy dW4gZXJyb3JcbiIpOworI2lmIDAKKwkJCXMzMiAqY21kOwogCQkJaW50IHBpcGUgPSBjaGFubmVs OwogCQkJaW50IHRkID0gZGJyaS0+cGlwZXNbcGlwZV0uZGVzYzsKIApAQCAtMTgyNyw2ICsxODM2 LDcgQEAgc3RhdGljIHZvaWQgZGJyaV9wcm9jZXNzX29uZV9pbnRlcnJ1cHQocwogCQkJCQkgICAg fCBEX1NEUF9QIHwgRF9TRFBfQyB8IERfU0RQXzJTQU1FKTsKIAkJCSooY21kKyspID0gZGJyaS0+ ZG1hX2R2bWEgKyBkYnJpX2RtYV9vZmYoZGVzYywgdGQpOwogCQkJZGJyaV9jbWRzZW5kKGRicmks IGNtZCk7CisjZW5kaWYKIAkJfQogCQlicmVhazsKIAljYXNlIERfSU5UUl9GWERUOgpAQCAtMTg0 Nyw5ICsxODU3LDcgQEAgc3RhdGljIHZvaWQgZGJyaV9wcm9jZXNzX29uZV9pbnRlcnJ1cHQocwog LyogZGJyaV9wcm9jZXNzX2ludGVycnVwdF9idWZmZXIgYWR2YW5jZXMgdGhyb3VnaCB0aGUgREJS SSdzIGludGVycnVwdAogICogYnVmZmVyIHVudGlsIGl0IGZpbmRzIGEgemVybyB3b3JkIChpbmRp Y2F0aW5nIG5vdGhpbmcgbW9yZSB0byBkbwogICogcmlnaHQgbm93KS4gIE5vbi16ZXJvIHdvcmRz IHJlcXVpcmUgcHJvY2Vzc2luZyBhbmQgYXJlIGhhbmRlZCBvZmYKLSAqIHRvIGRicmlfcHJvY2Vz c19vbmVfaW50ZXJydXB0IEFGVEVSIGFkdmFuY2luZyB0aGUgcG9pbnRlci4gIFRoaXMKLSAqIG9y ZGVyIGlzIGltcG9ydGFudCBzaW5jZSB3ZSBtaWdodCByZWN1cnNlIGJhY2sgaW50byB0aGlzIGZ1 bmN0aW9uCi0gKiBhbmQgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHBvaW50ZXIgaGFzIGJlZW4gYWR2 YW5jZWQgZmlyc3QuCisgKiB0byBkYnJpX3Byb2Nlc3Nfb25lX2ludGVycnVwdCBBRlRFUiBhZHZh bmNpbmcgdGhlIHBvaW50ZXIuCiAgKi8KIHN0YXRpYyB2b2lkIGRicmlfcHJvY2Vzc19pbnRlcnJ1 cHRfYnVmZmVyKHN0cnVjdCBzbmRfZGJyaSAqIGRicmkpCiB7CkBAIC0xOTE5LDggKzE5MjcsNiBA QCBzdGF0aWMgaXJxcmV0dXJuX3Qgc25kX2RicmlfaW50ZXJydXB0KGluCiAKIAlkYnJpX3Byb2Nl c3NfaW50ZXJydXB0X2J1ZmZlcihkYnJpKTsKIAotCS8qIEZJWE1FOiBXcml0ZSAwIGludG8gcmVn cyB0byBBQ0sgaW50ZXJydXB0ICovCi0KIAlzcGluX3VubG9jaygmZGJyaS0+bG9jayk7CiAKIAly ZXR1cm4gSVJRX0hBTkRMRUQ7CkBAIC0xOTYyLDcgKzE5NjgsNiBAQCBzdGF0aWMgaW50IHNuZF9k YnJpX29wZW4oc3RydWN0IHNuZF9wY21fCiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGJyaS0+bG9j aywgZmxhZ3MpOwogCWluZm8tPnN1YnN0cmVhbSA9IHN1YnN0cmVhbTsKLQlpbmZvLT5sZWZ0ID0g MDsKIAlpbmZvLT5vZmZzZXQgPSAwOwogCWluZm8tPmR2bWFfYnVmZmVyID0gMDsKIAlpbmZvLT5w aXBlID0gLTE7CkBAIC0xOTgwLDcgKzE5ODUsNiBAQCBzdGF0aWMgaW50IHNuZF9kYnJpX2Nsb3Nl KHN0cnVjdCBzbmRfcGNtCiAKIAlkcHJpbnRrKERfVVNSLCAiY2xvc2UgYXVkaW8gb3V0cHV0Llxu Iik7CiAJaW5mby0+c3Vic3RyZWFtID0gTlVMTDsKLQlpbmZvLT5sZWZ0ID0gMDsKIAlpbmZvLT5v ZmZzZXQgPSAwOwogCiAJcmV0dXJuIDA7CkBAIC0yMDYyLDEwICsyMDY2LDggQEAgc3RhdGljIGlu dCBzbmRfZGJyaV9wcmVwYXJlKHN0cnVjdCBzbmRfcAogCWluZm8tPnNpemUgPSBzbmRfcGNtX2xp Yl9idWZmZXJfYnl0ZXMoc3Vic3RyZWFtKTsKIAlpZiAoREJSSV9TVFJFQU1OTyhzdWJzdHJlYW0p ID09IERCUklfUExBWSkKIAkJaW5mby0+cGlwZSA9IDQ7CS8qIFNlbmQgcGlwZSAqLwotCWVsc2Ug eworCWVsc2UKIAkJaW5mby0+cGlwZSA9IDY7CS8qIFJlY2VpdmUgcGlwZSAqLwotCQlpbmZvLT5s ZWZ0ID0gaW5mby0+c2l6ZTsJLyogVG8gdHJpZ2dlciBzdWJtaXR0YWwgKi8KLQl9CiAKIAlzcGlu X2xvY2tfaXJxKCZkYnJpLT5sb2NrKTsKIApAQCAtMjA5MywxNCArMjA5NSwxMSBAQCBzdGF0aWMg aW50IHNuZF9kYnJpX3RyaWdnZXIoc3RydWN0IHNuZF9wCiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dF Ul9TVEFSVDoKIAkJZHByaW50ayhEX1VTUiwgInN0YXJ0IGF1ZGlvLCBwZXJpb2QgaXMgJWQgYnl0 ZXNcbiIsCiAJCQkoaW50KXNuZF9wY21fbGliX3BlcmlvZF9ieXRlcyhzdWJzdHJlYW0pKTsKLQkJ LyogRW5hYmxlICYgc2NoZWR1bGUgdGhlIHRhc2tsZXQgdGhhdCByZS1zdWJtaXRzIHRoZSBURHMu ICovCi0JCXhtaXRfZGVzY3NfdGFzay5kYXRhID0gKHVuc2lnbmVkIGxvbmcpZGJyaTsKLQkJdGFz a2xldF9zY2hlZHVsZSgmeG1pdF9kZXNjc190YXNrKTsKKwkJLyogUmUtc3VibWl0IHRoZSBURHMu ICovCisJCXhtaXRfZGVzY3MoZGJyaSk7CiAJCWJyZWFrOwogCWNhc2UgU05EUlZfUENNX1RSSUdH RVJfU1RPUDoKIAkJZHByaW50ayhEX1VTUiwgInN0b3AgYXVkaW8uXG4iKTsKLQkJLyogTWFrZSB0 aGUgdGFza2xldCBiYWlsIG91dCBpbW1lZGlhdGVseS4gKi8KLQkJeG1pdF9kZXNjc190YXNrLmRh dGEgPSAwOwogCQlyZXNldF9waXBlKGRicmksIGluZm8tPnBpcGUpOwogCQlicmVhazsKIAlkZWZh dWx0OgpAQCAtMjExOCw4ICsyMTE3LDggQEAgc3RhdGljIHNuZF9wY21fdWZyYW1lc190IHNuZF9k YnJpX3BvaW50ZQogCiAJcmV0ID0gYnl0ZXNfdG9fZnJhbWVzKHN1YnN0cmVhbS0+cnVudGltZSwg aW5mby0+b2Zmc2V0KQogCQklIHN1YnN0cmVhbS0+cnVudGltZS0+YnVmZmVyX3NpemU7Ci0JZHBy aW50ayhEX1VTUiwgIkkvTyBwb2ludGVyOiAlbGQgZnJhbWVzLCAlZCBieXRlcyBsZWZ0LlxuIiwK LQkJcmV0LCBpbmZvLT5sZWZ0KTsKKwlkcHJpbnRrKERfVVNSLCAiSS9PIHBvaW50ZXI6ICVsZCBm cmFtZXMgb2YgJWxkLlxuIiwKKwkJcmV0LCBzdWJzdHJlYW0tPnJ1bnRpbWUtPmJ1ZmZlcl9zaXpl KTsKIAlyZXR1cm4gcmV0OwogfQogCg== --part44e8a1c20d2ae--