From mboxrd@z Thu Jan 1 00:00:00 1970 From: Benny Sjostrand Subject: [PATCH] cs46xx SMP fixes. Date: Wed, 21 Aug 2002 08:16:18 +0200 Sender: alsa-devel-admin@lists.sourceforge.net Message-ID: <3D633032.2030306@cucumelo.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------010707090008020400010506" Return-path: Errors-To: alsa-devel-admin@lists.sourceforge.net List-Help: List-Post: List-Subscribe: , List-Unsubscribe: , List-Archive: To: alsa-devel@lists.sourceforge.net List-Id: alsa-devel@alsa-project.org This is a multi-part message in MIME format. --------------010707090008020400010506 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Hi! Until now it seems like the new cs46xx driver have been broken on SMP machines, so with this patch it hopefully work again. The only bad thing is that I dont have any SMP machine (however I would like to have), so I cant test it out. This patch is reported to work at least by one SMP user. It would be great if there any other SMP owners with a cs46xx soudcard that would like to help testing the cs46xx driver. This patch included: - Fix for a missplaced spin_lock: in cs46xx_playback_trigger(...) spin_lock(..) was called twice, first in cs46xx_playback_trigger(...) then in cs46xx_dsp_pcm_link(...) causing a hang. - Changed the "semaphore" aproach, I believe that it's easier solved now and code is cleaner. /Benny --------------010707090008020400010506 Content-Type: application/x-java-vm; name="cs46xx_patch" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="cs46xx_patch" ZGlmZiAtTmF1ciAtLWV4Y2x1ZGU9RW50cmllcyAtLWV4Y2x1ZGU9TWFrZWZpbGUgLi4vY3Zz X3JlZi9hbHNhLWtlcm5lbC9pbmNsdWRlL2NzNDZ4eC5oIGFsc2Eta2VybmVsL2luY2x1ZGUv Y3M0Nnh4LmgKLS0tIC4uL2N2c19yZWYvYWxzYS1rZXJuZWwvaW5jbHVkZS9jczQ2eHguaAlU dWUgQXVnIDEzIDIzOjIyOjQ1IDIwMDIKKysrIGFsc2Eta2VybmVsL2luY2x1ZGUvY3M0Nnh4 LmgJVHVlIEF1ZyAyMCAyMToxNToyNCAyMDAyCkBAIC0xODE3LDYgKzE4MTcsNyBAQAogICBp bnQgY3VycmVudF9ncGlvOwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX1NORF9DUzQ2WFhfTkVX X0RTUAorCXN0cnVjdCBzZW1hcGhvcmUgc3Bvc19tdXRleDsKIAlkc3Bfc3Bvc19pbnN0YW5j ZV90ICogZHNwX3Nwb3NfaW5zdGFuY2U7CiAjZWxzZSAvKiBmb3IgY29tcGF0aWJpbGl0eSAq LwogCWNzNDZ4eF9wY21fdCAqcGxheWJhY2tfcGNtOwpkaWZmIC1OYXVyIC0tZXhjbHVkZT1F bnRyaWVzIC0tZXhjbHVkZT1NYWtlZmlsZSAuLi9jdnNfcmVmL2Fsc2Eta2VybmVsL2luY2x1 ZGUvY3M0Nnh4X2RzcF9zcG9zLmggYWxzYS1rZXJuZWwvaW5jbHVkZS9jczQ2eHhfZHNwX3Nw b3MuaAotLS0gLi4vY3ZzX3JlZi9hbHNhLWtlcm5lbC9pbmNsdWRlL2NzNDZ4eF9kc3Bfc3Bv cy5oCVR1ZSBBdWcgMjAgMDg6MDU6MzkgMjAwMgorKysgYWxzYS1rZXJuZWwvaW5jbHVkZS9j czQ2eHhfZHNwX3Nwb3MuaAlUdWUgQXVnIDIwIDIxOjE1OjQ0IDIwMDIKQEAgLTE0MSw4ICsx NDEsNiBAQAogCXNlZ21lbnRfZGVzY190IGNvZGU7CiAKIAkvKiBQQ00gcGxheWJhY2sgKi8K LQlzdHJ1Y3Qgc2VtYXBob3JlIHBjbV9tdXRleDsKLQogCWRzcF9zY2JfZGVzY3JpcHRvcl90 ICogbWFzdGVyX21peF9zY2I7CiAJaW50IG5wY21fY2hhbm5lbHM7CiAJaW50IG5zcmNfc2Ni OwpAQCAtMTYyLDcgKzE2MCw2IEBACiAJc25kX2luZm9fZW50cnlfdCAqIHByb2Nfc2FtcGxl X2R1bXBfaW5mb19lbnRyeTsKIAogCS8qIFNDQidzIGRlc2NyaXB0b3JzICovCi0Jc3RydWN0 IHNlbWFwaG9yZSBzY2JfbXV0ZXg7CiAJaW50IG5zY2I7CiAJaW50IHNjYl9oaWdoZXN0X2Zy YWdfaW5kZXg7CiAJZHNwX3NjYl9kZXNjcmlwdG9yX3Qgc2Nic1tEU1BfTUFYX1NDQl9ERVND XTsKZGlmZiAtTmF1ciAtLWV4Y2x1ZGU9RW50cmllcyAtLWV4Y2x1ZGU9TWFrZWZpbGUgLi4v Y3ZzX3JlZi9hbHNhLWtlcm5lbC9wY2kvY3M0Nnh4L2NzNDZ4eF9saWIuYyBhbHNhLWtlcm5l bC9wY2kvY3M0Nnh4L2NzNDZ4eF9saWIuYwotLS0gLi4vY3ZzX3JlZi9hbHNhLWtlcm5lbC9w Y2kvY3M0Nnh4L2NzNDZ4eF9saWIuYwlUdWUgQXVnIDIwIDA4OjA1OjM5IDIwMDIKKysrIGFs c2Eta2VybmVsL3BjaS9jczQ2eHgvY3M0Nnh4X2xpYi5jCVR1ZSBBdWcgMjAgMjI6NTg6NDcg MjAwMgpAQCAtODU1LDYgKzg1NSw3IEBACiAKIAlpZiAoY29weV9mcm9tX3VzZXIoaHdidWYs IHNyYywgYnl0ZXMpKQogCQlyZXR1cm4gLUVGQVVMVDsKKwogCXNwaW5fbG9ja19pcnEoJnJ1 bnRpbWUtPmxvY2spOwogCXNuZF9jczQ2eHhfcGxheWJhY2tfdHJhbnNmZXIoc3Vic3RyZWFt LCBmcmFtZXMpOwogCXNwaW5fdW5sb2NrX2lycSgmcnVudGltZS0+bG9jayk7CkBAIC04ODUs MTcgKzg4NiwyMCBAQAogewogCWNzNDZ4eF90ICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1f Y2hpcChzdWJzdHJlYW0pOwogCS8qc25kX3BjbV9ydW50aW1lX3QgKnJ1bnRpbWUgPSBzdWJz dHJlYW0tPnJ1bnRpbWU7Ki8KKwlpbnQgcmVzdWx0ID0gMDsKKwogI2lmZGVmIENPTkZJR19T TkRfQ1M0NlhYX05FV19EU1AKIAljczQ2eHhfcGNtX3QgKmNwY20gPSBzbmRfbWFnaWNfY2Fz dChjczQ2eHhfcGNtX3QsIHN1YnN0cmVhbS0+cnVudGltZS0+cHJpdmF0ZV9kYXRhLCByZXR1 cm4gLUVOWElPKTsKKyNlbHNlCisJc3Bpbl9sb2NrKCZjaGlwLT5yZWdfbG9jayk7CiAjZW5k aWYKLQlpbnQgcmVzdWx0ID0gMDsKIAotCXNwaW5fbG9jaygmY2hpcC0+cmVnX2xvY2spOwog I2lmZGVmIENPTkZJR19TTkRfQ1M0NlhYX05FV19EU1AKKwogCWlmICghIGNwY20tPnBjbV9j aGFubmVsKSB7Ci0JCXNwaW5fdW5sb2NrKCZjaGlwLT5yZWdfbG9jayk7CiAJCXJldHVybiAt RU5YSU87CiAJfQorICAgIGRvd24gKCZjaGlwLT5zcG9zX211dGV4KTsKICNlbmRpZgogCXN3 aXRjaCAoY21kKSB7CiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKQEAgLTkwNSw2 ICs5MDksNyBAQAogCQkJY3M0Nnh4X2RzcF9wY21fbGluayhjaGlwLGNwY20tPnBjbV9jaGFu bmVsKTsKIAkJaWYgKHN1YnN0cmVhbS0+cnVudGltZS0+cGVyaW9kcyAhPSBDUzQ2WFhfRlJB R1MpCiAJCQlzbmRfY3M0Nnh4X3BsYXliYWNrX3RyYW5zZmVyKHN1YnN0cmVhbSwgMCk7CisK IAkJLyogcmFpc2UgcGxheWJhY2sgdm9sdW1lICovCiAJCXNuZF9jczQ2eHhfcG9rZShjaGlw LCAoY3BjbS0+cGNtX2NoYW5uZWwtPnBjbV9yZWFkZXJfc2NiLT5hZGRyZXNzICsgMHhFKSA8 PCAyLCAweDgwMDA4MDAwKTsKICNlbHNlCkBAIC05MjAsNiArOTI1LDggQEAKIAljYXNlIFNO RFJWX1BDTV9UUklHR0VSX1NUT1A6CiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVVNQRU5E OgogI2lmZGVmIENPTkZJR19TTkRfQ1M0NlhYX05FV19EU1AKKyAgICAgICAgLyogbXV0ZSBj aGFubmVsICovCisJCXNuZF9jczQ2eHhfcG9rZShjaGlwLCAoY3BjbS0+cGNtX2NoYW5uZWwt PnBjbV9yZWFkZXJfc2NiLT5hZGRyZXNzICsgMHhFKSA8PCAyLCAweGZmZmZmZmZmKTsKIAkJ aWYgKCFjcGNtLT5wY21fY2hhbm5lbC0+dW5saW5rZWQpCiAJCQljczQ2eHhfZHNwX3BjbV91 bmxpbmsoY2hpcCxjcGNtLT5wY21fY2hhbm5lbCk7CiAjZWxzZQpAQCAtOTM0LDcgKzk0MSwx MyBAQAogCQlyZXN1bHQgPSAtRUlOVkFMOwogCQlicmVhazsKIAl9CisKKyNpZmRlZiBDT05G SUdfU05EX0NTNDZYWF9ORVdfRFNQCisgICAgdXAgKCZjaGlwLT5zcG9zX211dGV4KTsKKyNl bHNlCiAJc3Bpbl91bmxvY2soJmNoaXAtPnJlZ19sb2NrKTsKKyNlbmRpZgorCiAJcmV0dXJu IHJlc3VsdDsKIH0KIApAQCAtOTY0LDYgKzk3Nyw3IEBACiAJCWJyZWFrOwogCX0KIAlzcGlu X3VubG9jaygmY2hpcC0+cmVnX2xvY2spOworCiAJcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAt OTk0LDYgKzEwMDgsNyBAQAogCQkJcmV0dXJuIGVycjsKIAkJc3Vic3RyZWFtLT5vcHMgPSAm c25kX2NzNDZ4eF9wbGF5YmFja19pbmRpcmVjdF9vcHM7CiAJfQorCiAJcmV0dXJuIDA7CiB9 CiAKQEAgLTEwMTEsNiArMTAyNiw3IEBACiAJcnVudGltZS0+ZG1hX2FyZWEgPSBOVUxMOwog CXJ1bnRpbWUtPmRtYV9hZGRyID0gMDsKIAlydW50aW1lLT5kbWFfYnl0ZXMgPSAwOworCiAJ cmV0dXJuIDA7CiB9CiAKQEAgLTEwMjUsNyArMTA0MSw4IEBACiAJY3BjbSA9IHNuZF9tYWdp Y19jYXN0KGNzNDZ4eF9wY21fdCwgcnVudGltZS0+cHJpdmF0ZV9kYXRhLCByZXR1cm4gLUVO WElPKTsKIAogI2lmZGVmIENPTkZJR19TTkRfQ1M0NlhYX05FV19EU1AKLQlkb3duICgmY2hp cC0+ZHNwX3Nwb3NfaW5zdGFuY2UtPnBjbV9tdXRleCk7CisgICAgZG93biAoJmNoaXAtPnNw b3NfbXV0ZXgpOworCiAJaWYgKCBjcGNtLT5wY21fY2hhbm5lbC0+c3JjX3NjYi0+cmVmX2Nv dW50ID09IDEgJiYKIAkgICAgIGNwY20tPnBjbV9jaGFubmVsLT5zYW1wbGVfcmF0ZSAhPSBy dW50aW1lLT5yYXRlKSB7CiAJCS8qIHNhbXBsZSByYXRlIG5vdCBzZXQgb3Igd2UgY2FuIHJl dXNlCkBAIC0xMDM0LDIzICsxMDUxLDI1IEBACiAJCWNzNDZ4eF9kc3Bfc2V0X3NyY19zYW1w bGVfcmF0ZSAoY2hpcCxjcGNtLT5wY21fY2hhbm5lbC0+c3JjX3NjYixydW50aW1lLT5yYXRl KTsKIAkJY3BjbS0+cGNtX2NoYW5uZWwtPnNhbXBsZV9yYXRlID0gcnVudGltZS0+cmF0ZTsK IAl9IAotCXVwICgmY2hpcC0+ZHNwX3Nwb3NfaW5zdGFuY2UtPnBjbV9tdXRleCk7CiAKIAlp ZiAoY3BjbS0+cGNtX2NoYW5uZWwtPnNhbXBsZV9yYXRlICE9IHJ1bnRpbWUtPnJhdGUgJiYK IAkgICAgY3BjbS0+cGNtX2NoYW5uZWwtPnNyY19zY2ItPnJlZl9jb3VudCAhPSAxKSB7Cisg ICAgICAgIGludCB1bmxpbmtlZCA9IGNwY20tPnBjbV9jaGFubmVsLT51bmxpbmtlZDsKIAkJ Y3M0Nnh4X2RzcF9kZXN0cm95X3BjbV9jaGFubmVsIChjaGlwLGNwY20tPnBjbV9jaGFubmVs KTsKIAogCQlpZiAoIChjcGNtLT5wY21fY2hhbm5lbCA9IGNzNDZ4eF9kc3BfY3JlYXRlX3Bj bV9jaGFubmVsIChjaGlwLCBydW50aW1lLT5yYXRlLCBjcGNtLCBjcGNtLT5od19hZGRyKSkg PT0gTlVMTCkgewogCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiY3M0Nnh4OiBmYWlsZWQgdG8g cmUtY3JlYXRlIHZpcnR1YWwgUENNIGNoYW5uZWxcbiIpOworICAgICAgICAgICAgdXAgKCZj aGlwLT5zcG9zX211dGV4KTsKIAkJCXJldHVybiAtRU5YSU87CiAJCX0KIAotCQljczQ2eHhf ZHNwX3BjbV91bmxpbmsgKGNoaXAsY3BjbS0+cGNtX2NoYW5uZWwpOworCQlpZiAodW5saW5r ZWQpIGNzNDZ4eF9kc3BfcGNtX3VubGluayAoY2hpcCxjcGNtLT5wY21fY2hhbm5lbCk7CiAJ CWNwY20tPnBjbV9jaGFubmVsLT5zYW1wbGVfcmF0ZSA9IHJ1bnRpbWUtPnJhdGU7CiAJfQog CiAJcGZpZSA9IHNuZF9jczQ2eHhfcGVlayhjaGlwLCAoY3BjbS0+cGNtX2NoYW5uZWwtPnBj bV9yZWFkZXJfc2NiLT5hZGRyZXNzICsgMSkgPDwgMiApOwogCXBmaWUgJj0gfjB4MDAwMGYw M2Y7CisgICAgdXAgKCZjaGlwLT5zcG9zX211dGV4KTsKICNlbHNlCiAJLyogb2xkIGRzcCAq LwogCXBmaWUgPSBzbmRfY3M0Nnh4X3BlZWsoY2hpcCwgQkExX1BGSUUpOwpAQCAtMTExMyw2 ICsxMTMyLDcgQEAKIAlzbmRfcGNtX3J1bnRpbWVfdCAqcnVudGltZSA9IHN1YnN0cmVhbS0+ cnVudGltZTsKIAlpbnQgZXJyOwogCisKIAlpZiAocnVudGltZS0+cGVyaW9kcyA9PSBDUzQ2 WFhfRlJBR1MpIHsKIAkJaWYgKHJ1bnRpbWUtPmRtYV9hcmVhICE9IGNoaXAtPmNhcHQuaHdf YXJlYSkKIAkJCXNuZF9wY21fbGliX2ZyZWVfcGFnZXMoc3Vic3RyZWFtKTsKQEAgLTExMzAs NiArMTE1MCw3IEBACiAJCQlyZXR1cm4gZXJyOwogCQlzdWJzdHJlYW0tPm9wcyA9ICZzbmRf Y3M0Nnh4X2NhcHR1cmVfaW5kaXJlY3Rfb3BzOwogCX0KKwogCXJldHVybiAwOwogfQogCkBA IC0xMTQzLDYgKzExNjQsNyBAQAogCXJ1bnRpbWUtPmRtYV9hcmVhID0gTlVMTDsKIAlydW50 aW1lLT5kbWFfYWRkciA9IDA7CiAJcnVudGltZS0+ZG1hX2J5dGVzID0gMDsKKwogCXJldHVy biAwOwogfQogCkBAIC0xMTU4LDYgKzExODAsNyBAQAogCWNoaXAtPmNhcHQuaHdfZGF0YSA9 IGNoaXAtPmNhcHQuaHdfaW8gPSBjaGlwLT5jYXB0Lmh3X3JlYWR5ID0gMDsKIAljaGlwLT5j YXB0LmFwcGxfcHRyID0gMDsKIAlzbmRfY3M0Nnh4X3NldF9jYXB0dXJlX3NhbXBsZV9yYXRl KGNoaXAsIHJ1bnRpbWUtPnJhdGUpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTExODMsNiAr MTIwNiw3IEBACiAKICNpZmRlZiBDT05GSUdfU05EX0NTNDZYWF9ORVdfRFNQCiAJc3RhdHVz MiA9IHNuZF9jczQ2eHhfcGVla0JBMChjaGlwLCBCQTBfSFNSMCk7CisKIAlmb3IgKGkgPSAw OyBpIDwgRFNQX01BWF9QQ01fQ0hBTk5FTFM7ICsraSkgewogCQlpZiAoaSA8PSAxNSkgewog CQkJaWYgKCBzdGF0dXMxICYgKDEgPDwgaSkgKSB7CkBAIC0xMjEzLDYgKzEyMzcsNyBAQAog CV9pbnZhbGlkX3BvaW50ZXI6CiAJCXByaW50ayAoS0VSTl9FUlIgImNzNDZ4eDogKGludGVy cnVwdCkgaW52YWxpZCBwb2ludGVyIGF0IHBjbV9jaGFubmVsWyVkXVxuIixpKTsKIAl9CisK ICNlbHNlCiAJLyogb2xkIGRzcCAqLwogCWlmICgoc3RhdHVzMSAmIEhJU1JfVkMwKSAmJiBj aGlwLT5wbGF5YmFja19wY20pIHsKQEAgLTEzMjQsMjQgKzEzNDksMjggQEAKIAogCWNwY20t PnN1YnN0cmVhbSA9IHN1YnN0cmVhbTsKICNpZmRlZiBDT05GSUdfU05EX0NTNDZYWF9ORVdf RFNQCisgICAgZG93biAoJmNoaXAtPnNwb3NfbXV0ZXgpOwogCWNwY20tPnBjbV9jaGFubmVs ID0gY3M0Nnh4X2RzcF9jcmVhdGVfcGNtX2NoYW5uZWwgKGNoaXAsIHJ1bnRpbWUtPnJhdGUs IGNwY20sIGNwY20tPmh3X2FkZHIpOwogCiAJaWYgKGNwY20tPnBjbV9jaGFubmVsID09IE5V TEwpIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAiY3M0Nnh4OiBmYWlsZWQgdG8gY3JlYXRl IHZpcnR1YWwgUENNIGNoYW5uZWxcbiIpOwogCQlzbmRfZnJlZV9wY2lfcGFnZXMoY2hpcC0+ cGNpLCBjcGNtLT5od19zaXplLCBjcGNtLT5od19hcmVhLCBjcGNtLT5od19hZGRyKTsKIAkJ c25kX21hZ2ljX2tmcmVlKGNwY20pOworICAgICAgICB1cCAoJmNoaXAtPnNwb3NfbXV0ZXgp OwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAljczQ2eHhfZHNwX3BjbV91bmxpbmsgKGNo aXAsY3BjbS0+cGNtX2NoYW5uZWwpOworICAgIHVwICgmY2hpcC0+c3Bvc19tdXRleCk7CiAj ZWxzZQogCWNoaXAtPnBsYXliYWNrX3BjbSA9IGNwY207IC8qIEhBQ0sgKi8KICNlbmRpZgog CiAJaWYgKGNoaXAtPmFjY2VwdF92YWxpZCkKLQkJc3Vic3RyZWFtLT5ydW50aW1lLT5ody5p bmZvIHw9IFNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQ7CisgICAgICBzdWJzdHJlYW0tPnJ1 bnRpbWUtPmh3LmluZm8gfD0gU05EUlZfUENNX0lORk9fTU1BUF9WQUxJRDsKIAljaGlwLT5h Y3RpdmVfY3RybChjaGlwLCAxKTsKIAljaGlwLT5hbXBsaWZpZXJfY3RybChjaGlwLCAxKTsK KwogCXJldHVybiAwOwogfQogCkBAIC0xMzUzLDEwICsxMzgyLDEzIEBACiAJCXJldHVybiAt RU5PTUVNOwogCWNoaXAtPmNhcHQuc3Vic3RyZWFtID0gc3Vic3RyZWFtOwogCXN1YnN0cmVh bS0+cnVudGltZS0+aHcgPSBzbmRfY3M0Nnh4X2NhcHR1cmU7CisKIAlpZiAoY2hpcC0+YWNj ZXB0X3ZhbGlkKQotCQlzdWJzdHJlYW0tPnJ1bnRpbWUtPmh3LmluZm8gfD0gU05EUlZfUENN X0lORk9fTU1BUF9WQUxJRDsKKyAgICAgIHN1YnN0cmVhbS0+cnVudGltZS0+aHcuaW5mbyB8 PSBTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElEOworCiAJY2hpcC0+YWN0aXZlX2N0cmwoY2hp cCwgMSk7CiAJY2hpcC0+YW1wbGlmaWVyX2N0cmwoY2hpcCwgMSk7CisKIAlyZXR1cm4gMDsK IH0KIApAQCAtMTM2OSwxMCArMTQwMSwxMiBAQAogCWNwY20gPSBzbmRfbWFnaWNfY2FzdChj czQ2eHhfcGNtX3QsIHJ1bnRpbWUtPnByaXZhdGVfZGF0YSwgcmV0dXJuIC1FTlhJTyk7CiAK ICNpZmRlZiBDT05GSUdfU05EX0NTNDZYWF9ORVdfRFNQCisgICAgZG93biAoJmNoaXAtPnNw b3NfbXV0ZXgpOwogCWlmIChjcGNtLT5wY21fY2hhbm5lbCkgewogCQljczQ2eHhfZHNwX2Rl c3Ryb3lfcGNtX2NoYW5uZWwoY2hpcCxjcGNtLT5wY21fY2hhbm5lbCk7CiAJCWNwY20tPnBj bV9jaGFubmVsID0gTlVMTDsKIAl9CisgICAgdXAgKCZjaGlwLT5zcG9zX211dGV4KTsKICNl bHNlCiAJY2hpcC0+cGxheWJhY2tfcGNtID0gTlVMTDsKICNlbmRpZgpAQCAtMTM4MSw2ICsx NDE1LDcgQEAKIAlzbmRfZnJlZV9wY2lfcGFnZXMoY2hpcC0+cGNpLCBjcGNtLT5od19zaXpl LCBjcGNtLT5od19hcmVhLCBjcGNtLT5od19hZGRyKTsKIAljaGlwLT5hY3RpdmVfY3RybChj aGlwLCAtMSk7CiAJY2hpcC0+YW1wbGlmaWVyX2N0cmwoY2hpcCwgLTEpOworCiAJcmV0dXJu IDA7CiB9CiAKQEAgLTEzOTIsNiArMTQyNyw3IEBACiAJc25kX2ZyZWVfcGNpX3BhZ2VzKGNo aXAtPnBjaSwgY2hpcC0+Y2FwdC5od19zaXplLCBjaGlwLT5jYXB0Lmh3X2FyZWEsIGNoaXAt PmNhcHQuaHdfYWRkcik7CiAJY2hpcC0+YWN0aXZlX2N0cmwoY2hpcCwgLTEpOwogCWNoaXAt PmFtcGxpZmllcl9jdHJsKGNoaXAsIC0xKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0xNTQ5 LDcgKzE1ODUsOCBAQAogCQkJY2hpcC0+ZHNwX3Nwb3NfaW5zdGFuY2UtPnNwZGlmX2lucHV0 X3ZvbHVtZSA9IHZhbDsKIAkJfQogI2VuZGlmCi0JfQorICAgIH0KKwogCXJldHVybiBjaGFu Z2U7CiB9CiAKQEAgLTE1NzUsNiArMTYxMiw3IEBACiAJCXVjb250cm9sLT52YWx1ZS5pbnRl Z2VyLnZhbHVlWzBdID0gY2hpcC0+ZHNwX3Nwb3NfaW5zdGFuY2UtPnNwZGlmX3N0YXR1c19v dXQ7CiAJZWxzZQogCQl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IGNoaXAt PmRzcF9zcG9zX2luc3RhbmNlLT5zcGRpZl9zdGF0dXNfaW47CisKIAlyZXR1cm4gMDsKIH0K IApAQCAtMTcxOSw3ICsxNzU3LDYgQEAKIAogI2VuZGlmIC8qIENPTkZJR19TTkRfQ1M0NlhY X05FV19EU1AgKi8KIAotCiAjaWZkZWYgQ09ORklHX1NORF9DUzQ2WFhfREVCVUdfR1BJTwog c3RhdGljIGludCBzbmRfY3M0Nnh4X2VncGlvX3NlbGVjdF9pbmZvKHNuZF9rY29udHJvbF90 ICprY29udHJvbCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c25kX2N0bF9lbGVtX2luZm9fdCAqdWluZm8pCkBAIC0xOTc5LDYgKzIwMTYsNyBAQAogICAg IAogCS8qIGFkZCBjczQ2MzAgbWl4ZXIgY29udHJvbHMgKi8KICBfZW5kOgorCiAJLyogZG9z b3VuZGNhcmQgc3BlY2lmaWMgbWl4ZXIgc2V0dXAgKi8KIAlpZiAoY2hpcC0+bWl4ZXJfaW5p dCkgewogCQlzbmRfcHJpbnRkZCAoImNhbGxpbmcgY2hpcC0+bWl4ZXJfaW5pdChjaGlwKTtc biIpOwpAQCAtMjQ0Nyw3ICsyNDg1LDcgQEAKIAkJY2hpcC0+YWN0aXZlX2N0cmwoY2hpcCwg LWNoaXAtPmFtcGxpZmllcik7CiAKICNpZmRlZiBDT05GSUdfU05EX0NTNDZYWF9ORVdfRFNQ Ci0JY3M0Nnh4X2RzcF9zcG9zX2Rlc3Ryb3koY2hpcC0+ZHNwX3Nwb3NfaW5zdGFuY2UpOwor CWNzNDZ4eF9kc3Bfc3Bvc19kZXN0cm95KGNoaXApOwogI2VuZGlmCiAJc25kX21hZ2ljX2tm cmVlKGNoaXApOwogCXJldHVybiAwOwpAQCAtMjkyMCw3ICsyOTU4LDYgQEAKICNlbmRpZgog fQogCi0KIHN0YXRpYyB2b2lkIGhlcmN1bGVzX2luaXQoY3M0Nnh4X3QgKmNoaXApIAogewog CS8qIGRlZmF1bHQ6IEFNUCBvZmYsIGFuZCBTUERJRiBpbnB1dCBvcHRpY2FsICovCkBAIC0y OTI4LDYgKzI5NjUsNyBAQAogCXNuZF9jczQ2eHhfcG9rZUJBMChjaGlwLCBCQTBfRUdQSU9Q VFIsIEVHUElPRFJfR1BPRTApOwogfQogCisKIC8qCiAgKglHYW1lIFRoZWF0cmUgWFAgY2Fy ZCAtIEVHUElPWzJdIGlzIHVzZWQgdG8gZW5hYmxlIHRoZSBleHRlcm5hbCBhbXAuCiAgKi8g CkBAIC0yOTQwLDYgKzI5NzgsNyBAQAogCWNoaXAtPmFtcGxpZmllciArPSBjaGFuZ2U7CiAJ aWYgKGNoaXAtPmFtcGxpZmllciAmJiAhb2xkKSB7CiAJCXNuZF9wcmludGRkICgiSGVyY3Vs ZXMgYW1wbGlmaWVyIE9OXG4iKTsKKwogCQlzbmRfY3M0Nnh4X3Bva2VCQTAoY2hpcCwgQkEw X0VHUElPRFIsIAogCQkJCSAgIEVHUElPRFJfR1BPRTIgfCB2YWwxKTsgICAgIC8qIGVuYWJs ZSBFR1BJTzIgb3V0cHV0ICovCiAJCXNuZF9jczQ2eHhfcG9rZUJBMChjaGlwLCBCQTBfRUdQ SU9QVFIsIApAQCAtMjk4MCw2ICszMDE5LDcgQEAKICNlbmRpZgogfQogCisKICNpZiAwCiAv KgogICoJVW50ZXN0ZWQKQEAgLTMyMDgsMTAgKzMyNDgsMTIgQEAKIAlpZiAoY2hpcCA9PSBO VUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAlzcGluX2xvY2tfaW5pdCgmY2hpcC0+cmVnX2xv Y2spOworICAgIGluaXRfTVVURVgoJmNoaXAtPnNwb3NfbXV0ZXgpOwogCWNoaXAtPmNhcmQg PSBjYXJkOwogCWNoaXAtPnBjaSA9IHBjaTsKIAljaGlwLT5jYXB0Lmh3X3NpemUgPSBQQUdF X1NJWkU7CiAJY2hpcC0+aXJxID0gLTE7CisgICAgY2hpcC0+YWNjZXB0X3ZhbGlkID0gMTsK IAljaGlwLT5iYTBfYWRkciA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2ksIDApOwogCWNoaXAt PmJhMV9hZGRyID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaSwgMSk7CiAJaWYgKGNoaXAtPmJh MF9hZGRyID09IDAgfHwgY2hpcC0+YmEwX2FkZHIgPT0gfjAgfHwKZGlmZiAtTmF1ciAtLWV4 Y2x1ZGU9RW50cmllcyAtLWV4Y2x1ZGU9TWFrZWZpbGUgLi4vY3ZzX3JlZi9hbHNhLWtlcm5l bC9wY2kvY3M0Nnh4L2NzNDZ4eF9saWIuaCBhbHNhLWtlcm5lbC9wY2kvY3M0Nnh4L2NzNDZ4 eF9saWIuaAotLS0gLi4vY3ZzX3JlZi9hbHNhLWtlcm5lbC9wY2kvY3M0Nnh4L2NzNDZ4eF9s aWIuaAlUdWUgQXVnIDIwIDA4OjA1OjM5IDIwMDIKKysrIGFsc2Eta2VybmVsL3BjaS9jczQ2 eHgvY3M0Nnh4X2xpYi5oCVR1ZSBBdWcgMjAgMjE6NTI6NDcgMjAwMgpAQCAtMjgsMTEgKzI4 LDExIEBACiAgKiAgY29uc3RhbnRzCiAgKi8KIAotI2RlZmluZSBDUzQ2WFhfQkEwX1NJWkUJ CTB4MTAwMAotI2RlZmluZSBDUzQ2WFhfQkExX0RBVEEwX1NJWkUJMHgzMDAwCi0jZGVmaW5l IENTNDZYWF9CQTFfREFUQTFfU0laRQkweDM4MDAKLSNkZWZpbmUgQ1M0NlhYX0JBMV9QUkdf U0laRQkweDcwMDAKLSNkZWZpbmUgQ1M0NlhYX0JBMV9SRUdfU0laRQkweDAxMDAKKyNkZWZp bmUgQ1M0NlhYX0JBMF9TSVpFCQkgIDB4MTAwMAorI2RlZmluZSBDUzQ2WFhfQkExX0RBVEEw X1NJWkUgMHgzMDAwCisjZGVmaW5lIENTNDZYWF9CQTFfREFUQTFfU0laRSAweDM4MDAKKyNk ZWZpbmUgQ1M0NlhYX0JBMV9QUkdfU0laRQkgIDB4NzAwMAorI2RlZmluZSBDUzQ2WFhfQkEx X1JFR19TSVpFCSAgMHgwMTAwCiAKIAogI2RlZmluZSBDUzQ2WFhfUEVSSU9EX1NJWkUgMjA0 OApAQCAtODQsNyArODQsNyBAQAogfQogCiBkc3Bfc3Bvc19pbnN0YW5jZV90ICogIGNzNDZ4 eF9kc3Bfc3Bvc19jcmVhdGUgKGNzNDZ4eF90ICogY2hpcCk7Ci12b2lkICAgICAgICAgICAg ICAgICAgIGNzNDZ4eF9kc3Bfc3Bvc19kZXN0cm95IChkc3Bfc3Bvc19pbnN0YW5jZV90ICog aW5zdGFuY2UpOwordm9pZCAgICAgICAgICAgICAgICAgICBjczQ2eHhfZHNwX3Nwb3NfZGVz dHJveSAoY3M0Nnh4X3QgKiBjaGlwKTsKIGludCAgICAgICAgICAgICAgICAgICAgY3M0Nnh4 X2RzcF9sb2FkX21vZHVsZSAoY3M0Nnh4X3QgKiBjaGlwLGRzcF9tb2R1bGVfZGVzY190ICog bW9kdWxlKTsKIHN5bWJvbF9lbnRyeV90ICogICAgICAgY3M0Nnh4X2RzcF9sb29rdXBfc3lt Ym9sIChjczQ2eHhfdCAqIGNoaXAsY2hhciAqIHN5bWJvbF9uYW1lLGludCBzeW1ib2xfdHlw ZSk7CiBzeW1ib2xfZW50cnlfdCAqICAgICAgIGNzNDZ4eF9kc3BfbG9va3VwX3N5bWJvbF9h ZGRyIChjczQ2eHhfdCAqIGNoaXAsdTMyIGFkZHJlc3MsaW50IHN5bWJvbF90eXBlKTsKZGlm ZiAtTmF1ciAtLWV4Y2x1ZGU9RW50cmllcyAtLWV4Y2x1ZGU9TWFrZWZpbGUgLi4vY3ZzX3Jl Zi9hbHNhLWtlcm5lbC9wY2kvY3M0Nnh4L2RzcF9zcG9zLmMgYWxzYS1rZXJuZWwvcGNpL2Nz NDZ4eC9kc3Bfc3Bvcy5jCi0tLSAuLi9jdnNfcmVmL2Fsc2Eta2VybmVsL3BjaS9jczQ2eHgv ZHNwX3Nwb3MuYwlUdWUgQXVnIDIwIDA4OjA1OjM5IDIwMDIKKysrIGFsc2Eta2VybmVsL3Bj aS9jczQ2eHgvZHNwX3Nwb3MuYwlUdWUgQXVnIDIwIDIyOjUxOjAxIDIwMDIKQEAgLTIyMSwx NiArMjIxLDEzIEBACiAJCXJldHVybiBOVUxMOwogCW1lbXNldChpbnMsIDAsIHNpemVvZigq aW5zKSk7CiAKLQlpbml0X01VVEVYKCZpbnMtPnNjYl9tdXRleCk7Ci0JaW5pdF9NVVRFWCgm aW5zLT5wY21fbXV0ZXgpOwotCiAJLyogYmV0dGVyIHRvIHVzZSB2bWFsbG9jIGZvciB0aGlz IGJpZyB0YWJsZSAqLwogCWlucy0+c3ltYm9sX3RhYmxlLm5zeW1ib2xzID0gMDsKIAlpbnMt PnN5bWJvbF90YWJsZS5zeW1ib2xzID0gdm1hbGxvYyhzaXplb2Yoc3ltYm9sX2VudHJ5X3Qp ICogRFNQX01BWF9TWU1CT0xTKTsKIAlpbnMtPnN5bWJvbF90YWJsZS5oaWdoZXN0X2ZyYWdf aW5kZXggPSAwOwogCiAJaWYgKGlucy0+c3ltYm9sX3RhYmxlLnN5bWJvbHMgPT0gTlVMTCkg ewotCQljczQ2eHhfZHNwX3Nwb3NfZGVzdHJveShpbnMpOworCQljczQ2eHhfZHNwX3Nwb3Nf ZGVzdHJveShjaGlwKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCkBAIC0yMzksNyArMjM2LDcg QEAKIAlpbnMtPmNvZGUuZGF0YSA9IGttYWxsb2MoRFNQX0NPREVfQllURV9TSVpFLCBHRlBf S0VSTkVMKTsKIAogCWlmIChpbnMtPmNvZGUuZGF0YSA9PSBOVUxMKSB7Ci0JCWNzNDZ4eF9k c3Bfc3Bvc19kZXN0cm95KGlucyk7CisJCWNzNDZ4eF9kc3Bfc3Bvc19kZXN0cm95KGNoaXAp OwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKQEAgLTI1MCw3ICsyNDcsNyBAQAogCWlucy0+bW9k dWxlcyA9IGttYWxsb2Moc2l6ZW9mKGRzcF9tb2R1bGVfZGVzY190KSAqIERTUF9NQVhfTU9E VUxFUywgR0ZQX0tFUk5FTCk7CiAKIAlpZiAoaW5zLT5tb2R1bGVzID09IE5VTEwpIHsKLQkJ Y3M0Nnh4X2RzcF9zcG9zX2Rlc3Ryb3koaW5zKTsKKwkJY3M0Nnh4X2RzcF9zcG9zX2Rlc3Ry b3koY2hpcCk7CiAJCXJldHVybiBOVUxMOwogCX0KIApAQCAtMjY0LDE5ICsyNjEsMTkgQEAK IAlyZXR1cm4gaW5zOwogfQogCi12b2lkICBjczQ2eHhfZHNwX3Nwb3NfZGVzdHJveSAoZHNw X3Nwb3NfaW5zdGFuY2VfdCAqIGlucykKK3ZvaWQgIGNzNDZ4eF9kc3Bfc3Bvc19kZXN0cm95 IChjczQ2eHhfdCAqIGNoaXApCiB7CiAJaW50IGk7CisJZHNwX3Nwb3NfaW5zdGFuY2VfdCAq IGlucyA9IGNoaXAtPmRzcF9zcG9zX2luc3RhbmNlOwogCiAJc25kX2Fzc2VydChpbnMgIT0g TlVMTCwgcmV0dXJuKTsKIAotCWRvd24oJmlucy0+c2NiX211dGV4KTsKKwlkb3duKCZjaGlw LT5zcG9zX211dGV4KTsKIAlmb3IgKGkgPSAwOyBpIDwgaW5zLT5uc2NiOyArK2kpIHsKIAkJ aWYgKGlucy0+c2Nic1tpXS5kZWxldGVkKSBjb250aW51ZTsKIAogCQljczQ2eHhfZHNwX3By b2NfZnJlZV9zY2JfZGVzYyAoIChpbnMtPnNjYnMgKyBpKSApOwogCX0KLQl1cCgmaW5zLT5z Y2JfbXV0ZXgpOwogCiAJaWYgKGlucy0+Y29kZS5kYXRhKQogCQlrZnJlZShpbnMtPmNvZGUu ZGF0YSk7CkBAIC0yODUsNiArMjgyLDcgQEAKIAlpZiAoaW5zLT5tb2R1bGVzKQogCQlrZnJl ZShpbnMtPm1vZHVsZXMpOwogCWtmcmVlKGlucyk7ICAKKwl1cCgmY2hpcC0+c3Bvc19tdXRl eCk7CiB9CiAKIGludCBjczQ2eHhfZHNwX2xvYWRfbW9kdWxlIChjczQ2eHhfdCAqIGNoaXAs IGRzcF9tb2R1bGVfZGVzY190ICogbW9kdWxlKQpAQCAtNDc4LDYgKzQ3Niw3IEBACiAJZHNw X3Nwb3NfaW5zdGFuY2VfdCAqIGlucyA9IGNoaXAtPmRzcF9zcG9zX2luc3RhbmNlOwogCWlu dCBpLGo7CiAKKwlkb3duKCZjaGlwLT5zcG9zX211dGV4KTsKIAlzbmRfaXByaW50ZihidWZm ZXIsICJNT0RVTEVTOlxuIik7CiAJZm9yICggaSA9IDA7IGkgPCBpbnMtPm5tb2R1bGVzOyAr K2kgKSB7CiAJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlxuJXM6XG4iLCBpbnMtPm1vZHVsZXNb aV0ubW9kdWxlX25hbWUpOwpAQCAtNDkwLDYgKzQ4OSw3IEBACiAJCQkJICAgIGRlc2MtPnNl Z21lbnRfdHlwZSxkZXNjLT5vZmZzZXQsIGRlc2MtPnNpemUpOwogCQl9CiAJfQorCXVwKCZj aGlwLT5zcG9zX211dGV4KTsKIH0KIAogc3RhdGljIHZvaWQgY3M0Nnh4X2RzcF9wcm9jX3Rh c2tfdHJlZV9yZWFkIChzbmRfaW5mb19lbnRyeV90ICplbnRyeSwgc25kX2luZm9fYnVmZmVy X3QgKiBidWZmZXIpCkBAIC00OTksNiArNDk5LDcgQEAKIAlpbnQgaSxqLGNvbDsKIAl1bnNp Z25lZCBsb25nIGRzdCA9IGNoaXAtPnJlZ2lvbi5pZHhbMV0ucmVtYXBfYWRkciArIERTUF9Q QVJBTUVURVJfQllURV9PRkZTRVQ7CiAKKwlkb3duKCZjaGlwLT5zcG9zX211dGV4KTsKIAlz bmRfaXByaW50ZihidWZmZXIsICJUQVNLIFRSRUVTOlxuIik7CiAJZm9yICggaSA9IDA7IGkg PCBpbnMtPm50YXNrOyArK2kpIHsKIAkJc25kX2lwcmludGYoYnVmZmVyLCJcbiUwNHggJXM6 XG4iLGlucy0+dGFza3NbaV0uYWRkcmVzcyxpbnMtPnRhc2tzW2ldLnRhc2tfbmFtZSk7CkBA IC01MTUsNiArNTE2LDcgQEAKIAl9CiAKIAlzbmRfaXByaW50ZihidWZmZXIsIlxuIik7ICAK Kwl1cCgmY2hpcC0+c3Bvc19tdXRleCk7CiB9CiAKIHN0YXRpYyB2b2lkIGNzNDZ4eF9kc3Bf cHJvY19zY2JfcmVhZCAoc25kX2luZm9fZW50cnlfdCAqZW50cnksIHNuZF9pbmZvX2J1ZmZl cl90ICogYnVmZmVyKQpAQCAtNTIzLDYgKzUyNSw3IEBACiAJZHNwX3Nwb3NfaW5zdGFuY2Vf dCAqIGlucyA9IGNoaXAtPmRzcF9zcG9zX2luc3RhbmNlOwogCWludCBpOwogCisJZG93bigm Y2hpcC0+c3Bvc19tdXRleCk7CiAJc25kX2lwcmludGYoYnVmZmVyLCAiU0NCJ3M6XG4iKTsK IAlmb3IgKCBpID0gMDsgaSA8IGlucy0+bnNjYjsgKytpKSB7CiAJCWlmIChpbnMtPnNjYnNb aV0uZGVsZXRlZCkKQEAgLTU0NSw2ICs1NDgsNyBAQAogCX0KIAogCXNuZF9pcHJpbnRmKGJ1 ZmZlciwiXG4iKTsKKwl1cCgmY2hpcC0+c3Bvc19tdXRleCk7CiB9CiAKIHN0YXRpYyB2b2lk IGNzNDZ4eF9kc3BfcHJvY19wYXJhbWV0ZXJfZHVtcF9yZWFkIChzbmRfaW5mb19lbnRyeV90 ICplbnRyeSwgc25kX2luZm9fYnVmZmVyX3QgKiBidWZmZXIpCkBAIC04MDgsMTIgKzgxMiwx NCBAQAogCX0KIAlpbnMtPnByb2Nfc2NiX2luZm9fZW50cnkgPSBlbnRyeTsKIAorCWRvd24o JmNoaXAtPnNwb3NfbXV0ZXgpOwogCS8qIHJlZ2lzdGVyL3VwZGF0ZSBTQ0IncyBlbnRyaWVz IG9uIHByb2MgKi8KIAlmb3IgKGkgPSAwOyBpIDwgaW5zLT5uc2NiOyArK2kpIHsKIAkJaWYg KGlucy0+c2Nic1tpXS5kZWxldGVkKSBjb250aW51ZTsKIAogCQljczQ2eHhfZHNwX3Byb2Nf cmVnaXN0ZXJfc2NiX2Rlc2MgKGNoaXAsIChpbnMtPnNjYnMgKyBpKSk7CiAJfQorCXVwKCZj aGlwLT5zcG9zX211dGV4KTsKIAogCXJldHVybiAwOwogfQpAQCAtODUzLDEyICs4NTksMTIg QEAKIAkJaW5zLT5wcm9jX3Rhc2tfaW5mb19lbnRyeSA9IE5VTEw7CiAJfQogCi0JZG93bigm aW5zLT5zY2JfbXV0ZXgpOworCWRvd24oJmNoaXAtPnNwb3NfbXV0ZXgpOwogCWZvciAoaSA9 IDA7IGkgPCBpbnMtPm5zY2I7ICsraSkgewogCQlpZiAoaW5zLT5zY2JzW2ldLmRlbGV0ZWQp IGNvbnRpbnVlOwogCQljczQ2eHhfZHNwX3Byb2NfZnJlZV9zY2JfZGVzYyAoIChpbnMtPnNj YnMgKyBpKSApOwogCX0KLQl1cCgmaW5zLT5zY2JfbXV0ZXgpOworCXVwKCZjaGlwLT5zcG9z X211dGV4KTsKIAogCWlmIChpbnMtPnByb2NfZHNwX2RpcikgewogCQlzbmRfaW5mb191bnJl Z2lzdGVyIChpbnMtPnByb2NfZHNwX2Rpcik7CkBAIC0xMzEyLDkgKzEzMTgsMTEgQEAKIAkJ CQkJCQkgICAgIGNvZGVjX291dF9zY2IsCiAJCQkJCQkJICAgICBzZWNfY29kZWNfb3V0X3Nj YiwKIAkJCQkJCQkgICAgIFNDQl9PTl9QQVJFTlRfU1VCTElTVF9TQ0IpOworCiAJaWYgKCFt YWdpY19zbm9vcF9zY2IpIGdvdG8gX2ZhaWxfZW5kOwogCWlucy0+cmVmX3Nub29wX3NjYiA9 IG1hZ2ljX3Nub29wX3NjYjsKIAorCiAJLyogVGhlIGFzeW5jaC4gdHJhbnNmZXIgdGFzayAq LwogCWFzeW5jaF90eF9zY2IgPSBjczQ2eHhfZHNwX2NyZWF0ZV9hc3luY2hfZmdfdHhfc2Ni KGNoaXAsIkFzeW5jaEZHVHhTQ0IiLEFTWU5DVFhfU0NCX0FERFIsCiAJCQkJCQkJICAgU1BE SUZPX1NDQl9JTlNULApAQCAtMTMzNiw3ICsxMzQ0LDcgQEAKIAlpZiAoIWNzNDZ4eF9kc3Bf Y3JlYXRlX3NwaW9fd3JpdGVfc2NiKGNoaXAsIlNQSU9Xcml0ZVNDQiIsU1BJT1dSSVRFX1ND Ql9BRERSLAogCQkJCQkgICAgICBhc3luY2hfdHhfc2NiLAogCQkJCQkgICAgICBTQ0JfT05f UEFSRU5UX05FWFRfU0NCKSkKLQkJZ290byBfZmFpbF9lbmQ7CisgICAgICBnb3RvIF9mYWls X2VuZDsKIAogCiAJLyogU1BESUYgaW5wdXQgc2FtcGVsIHJhdGUgY29udmVydGVyICovCkBA IC0xNTY5LDEyICsxNTc3LDE0IEBACiAJZHNwX3Nwb3NfaW5zdGFuY2VfdCAqIGlucyA9IGNo aXAtPmRzcF9zcG9zX2luc3RhbmNlOwogCXVuc2lnbmVkIGludCBmbGFnczsKIAotCS8qIHR1 cm4gb24gYW1wbGlmaWVyICovCisgICAgLyogdHVybiBvbiBhbXBsaWZpZXIgKi8KIAljaGlw LT5hY3RpdmVfY3RybChjaGlwLCAxKTsKIAljaGlwLT5hbXBsaWZpZXJfY3RybChjaGlwLCAx KTsKIAogCXNuZF9hc3NlcnQgKGlucy0+YXN5bmNoX3J4X3NjYiA9PSBOVUxMLHJldHVybiAt RUlOVkFMKTsKIAlzbmRfYXNzZXJ0IChpbnMtPnNwZGlmX2luX3NyYyAhPSBOVUxMLHJldHVy biAtRUlOVkFMKTsKKworCWRvd24oJmNoaXAtPnNwb3NfbXV0ZXgpOwogCS8qIGNyZWF0ZSBh bmQgc3RhcnQgdGhlIGFzeW5jaHJvbm91cyByZWNlaXZlciBTQ0IgKi8KIAlpbnMtPmFzeW5j aF9yeF9zY2IgPSBjczQ2eHhfZHNwX2NyZWF0ZV9hc3luY2hfZmdfcnhfc2NiKGNoaXAsIkFz eW5jaEZHUnhTQ0IiLAogCQkJCQkJCQlBU1lOQ1JYX1NDQl9BRERSLApAQCAtMTU4NSw2ICsx NTk1LDcgQEAKIAogCXNhdmVfZmxhZ3MoZmxhZ3MpOwogCWNsaSgpOworCiAJLyogcmVzZXQg U1BESUYgaW5wdXQgc2FtcGxlIGJ1ZmZlciBwb2ludGVyICovCiAJc25kX2NzNDZ4eF9wb2tl IChjaGlwLCAoU1BESUZJX1NDQl9JTlNUICsgMHgwYykgPDwgMiwKIAkJCSAoU1BESUZJX0lQ X09VVFBVVF9CVUZGRVIxIDw8IDB4MTApIHwgMHhGRkZDKTsKQEAgLTE2MDQsNiArMTYxNSw3 IEBACiAKIAkvKiBtb25pdG9yIHN0YXRlICovCiAJaW5zLT5zcGRpZl9zdGF0dXNfaW4gPSAx OworCXVwKCZjaGlwLT5zcG9zX211dGV4KTsKIAogCXJldHVybiAwOwogfQpAQCAtMTYxMiwx NyArMTYyNCwxOSBAQAogewogCWRzcF9zcG9zX2luc3RhbmNlX3QgKiBpbnMgPSBjaGlwLT5k c3Bfc3Bvc19pbnN0YW5jZTsKIAotCXNuZF9hc3NlcnQgKGlucy0+YXN5bmNoX3J4X3NjYiAh PSBOVUxMLCByZXR1cm4gLUVJTlZBTCk7Ci0Jc25kX2Fzc2VydCAoaW5zLT5zcGRpZl9pbl9z cmMgIT0gTlVMTCxyZXR1cm4gLUVJTlZBTCk7CisgICAgc25kX2Fzc2VydCAoaW5zLT5hc3lu Y2hfcnhfc2NiICE9IE5VTEwsIHJldHVybiAtRUlOVkFMKTsKKyAgICBzbmRfYXNzZXJ0IChp bnMtPnNwZGlmX2luX3NyYyAhPSBOVUxMLHJldHVybiAtRUlOVkFMKTsKIAotCS8qIFJlbW92 ZSB0aGUgYXN5bmNocm9ub3VzIHJlY2VpdmVyIFNDQiAqLwotCWNzNDZ4eF9kc3BfcmVtb3Zl X3NjYiAoY2hpcCxpbnMtPmFzeW5jaF9yeF9zY2IpOwotCWlucy0+YXN5bmNoX3J4X3NjYiA9 IE5VTEw7CisJZG93bigmY2hpcC0+c3Bvc19tdXRleCk7CisgICAgLyogUmVtb3ZlIHRoZSBh c3luY2hyb25vdXMgcmVjZWl2ZXIgU0NCICovCisgICAgY3M0Nnh4X2RzcF9yZW1vdmVfc2Ni IChjaGlwLGlucy0+YXN5bmNoX3J4X3NjYik7CisgICAgaW5zLT5hc3luY2hfcnhfc2NiID0g TlVMTDsKIAogCWNzNDZ4eF9zcmNfdW5saW5rKGNoaXAsaW5zLT5zcGRpZl9pbl9zcmMpOwog CiAJLyogbW9uaXRvciBzdGF0ZSAqLwogCWlucy0+c3BkaWZfc3RhdHVzX2luID0gMDsKKwl1 cCgmY2hpcC0+c3Bvc19tdXRleCk7CiAKIAkvKiByZXN0b3JlIGFtcGxpZmllciAqLwogCWNo aXAtPmFjdGl2ZV9jdHJsKGNoaXAsIC0xKTsKQEAgLTE2MzgsOSArMTY1MiwxMSBAQAogCXNu ZF9hc3NlcnQgKGlucy0+cGNtX2lucHV0ID09IE5VTEwscmV0dXJuIC1FSU5WQUwpOwogCXNu ZF9hc3NlcnQgKGlucy0+cmVmX3Nub29wX3NjYiAhPSBOVUxMLHJldHVybiAtRUlOVkFMKTsK IAorICAgIGRvd24oJmNoaXAtPnNwb3NfbXV0ZXgpOwogCWlucy0+cGNtX2lucHV0ID0gY3M0 Nnh4X2FkZF9yZWNvcmRfc291cmNlKGNoaXAsaW5zLT5yZWZfc25vb3Bfc2NiLFBDTVNFUklB TElOX1BDTV9TQ0JfQUREUiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIlBDTVNlcmlhbElucHV0X1dhdmUiKTsKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgdXAoJmNoaXAtPnNw b3NfbXV0ZXgpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE2NTAsOCArMTY2NiwxMCBAQAog CiAJc25kX2Fzc2VydCAoaW5zLT5wY21faW5wdXQgIT0gTlVMTCxyZXR1cm4gLUVJTlZBTCk7 CiAKKyAgICBkb3duKCZjaGlwLT5zcG9zX211dGV4KTsKIAljczQ2eHhfZHNwX3JlbW92ZV9z Y2IgKGNoaXAsaW5zLT5wY21faW5wdXQpOwogCWlucy0+cGNtX2lucHV0ID0gTlVMTDsKKyAg ICB1cCgmY2hpcC0+c3Bvc19tdXRleCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE2NjMsOSAr MTY4MSwxMSBAQAogCXNuZF9hc3NlcnQgKGlucy0+YWRjX2lucHV0ID09IE5VTEwscmV0dXJu IC1FSU5WQUwpOwogCXNuZF9hc3NlcnQgKGlucy0+Y29kZWNfaW5fc2NiICE9IE5VTEwscmV0 dXJuIC1FSU5WQUwpOwogCisgICAgZG93bigmY2hpcC0+c3Bvc19tdXRleCk7CiAJaW5zLT5h ZGNfaW5wdXQgPSBjczQ2eHhfYWRkX3JlY29yZF9zb3VyY2UoY2hpcCxpbnMtPmNvZGVjX2lu X3NjYixQQ01TRVJJQUxJTl9TQ0JfQUREUiwKIAkJCQkJCSAgIlBDTVNlcmlhbElucHV0X0FE QyIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAKKyAgICB1cCgmY2hpcC0+c3Bvc19tdXRleCk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAt MTY3NSw4ICsxNjk1LDEwIEBACiAKIAlzbmRfYXNzZXJ0IChpbnMtPmFkY19pbnB1dCAhPSBO VUxMLHJldHVybiAtRUlOVkFMKTsKIAorICAgIGRvd24oJmNoaXAtPnNwb3NfbXV0ZXgpOwog CWNzNDZ4eF9kc3BfcmVtb3ZlX3NjYiAoY2hpcCxpbnMtPmFkY19pbnB1dCk7CiAJaW5zLT5h ZGNfaW5wdXQgPSBOVUxMOworICAgIHVwKCZjaGlwLT5zcG9zX211dGV4KTsKIAogCXJldHVy biAwOwogfQpAQCAtMTY5Niw3ICsxNzE4LDcgQEAKIAogCXNuZF9jczQ2eHhfcG9rZShjaGlw LCggU1BJT1dSSVRFX1NDQl9BRERSICAgICAgPDwgMiksIHRlbXApOwogCXNuZF9jczQ2eHhf cG9rZShjaGlwLCgoU1BJT1dSSVRFX1NDQl9BRERSICsgMSkgPDwgMiksIGRhdGEpOyAvKiBv ZmZzZXQgMSA8LS0gZGF0YTEgKi8KLQlzbmRfY3M0Nnh4X3Bva2UoY2hpcCwoKFNQSU9XUklU RV9TQ0JfQUREUiArIDIpIDw8IDIpLCBkYXRhKTsgLyogb2Zmc2V0IDEgPC0tIGRhdGEyKi8K KwlzbmRfY3M0Nnh4X3Bva2UoY2hpcCwoKFNQSU9XUklURV9TQ0JfQUREUiArIDIpIDw8IDIp LCBkYXRhKTsgLyogb2Zmc2V0IDEgPC0tIGRhdGEyICovCiAgICAgCiAJLyogUG9rZSB0aGlz IGxvY2F0aW9uIHRvIHRlbGwgdGhlIHRhc2sgdG8gc3RhcnQgKi8KIAlzbmRfY3M0Nnh4X3Bv a2UoY2hpcCwoKFNQSU9XUklURV9TQ0JfQUREUiArIDYpIDw8IDIpLCBTUElPV1JJVEVfU0NC X0FERFIgPDwgMHgxMCk7CmRpZmYgLU5hdXIgLS1leGNsdWRlPUVudHJpZXMgLS1leGNsdWRl PU1ha2VmaWxlIC4uL2N2c19yZWYvYWxzYS1rZXJuZWwvcGNpL2NzNDZ4eC9kc3Bfc3Bvc19z Y2JfbGliLmMgYWxzYS1rZXJuZWwvcGNpL2NzNDZ4eC9kc3Bfc3Bvc19zY2JfbGliLmMKLS0t IC4uL2N2c19yZWYvYWxzYS1rZXJuZWwvcGNpL2NzNDZ4eC9kc3Bfc3Bvc19zY2JfbGliLmMJ VHVlIEF1ZyAyMCAwODowNTozOSAyMDAyCisrKyBhbHNhLWtlcm5lbC9wY2kvY3M0Nnh4L2Rz cF9zcG9zX3NjYl9saWIuYwlUdWUgQXVnIDIwIDIyOjUyOjI1IDIwMDIKQEAgLTc1LDcgKzc1 LDcgQEAKIAogCWlucyA9IGNoaXAtPmRzcF9zcG9zX2luc3RhbmNlOwogCi0JZG93bigmaW5z LT5zY2JfbXV0ZXgpOworCWRvd24oJmNoaXAtPnNwb3NfbXV0ZXgpOwogCXNuZF9pcHJpbnRm KGJ1ZmZlciwiJTA0eCAlczpcbiIsc2NiLT5hZGRyZXNzLHNjYi0+c2NiX25hbWUpOwogCiAJ Zm9yIChjb2wgPSAwLGogPSAwO2ogPCAweDEwOyBqKyssY29sKyspIHsKQEAgLTEwMyw3ICsx MDMsNiBAQAogCQkgICAgc2NiLT50YXNrX2VudHJ5LT5hZGRyZXNzKTsKIAogCXNuZF9pcHJp bnRmKGJ1ZmZlciwiaW5kZXggWyVkXSByZWZfY291bnQgWyVkXVxuIixzY2ItPmluZGV4LHNj Yi0+cmVmX2NvdW50KTsgIAotCXVwKCZpbnMtPnNjYl9tdXRleCk7CiB9CiAKIHN0YXRpYyB2 b2lkIF9kc3BfdW5saW5rX3NjYiAoY3M0Nnh4X3QgKmNoaXAsZHNwX3NjYl9kZXNjcmlwdG9y X3QgKiBzY2IpCkBAIC0xODAsMTEgKzE3OSwxMCBAQAogewogCWRzcF9zcG9zX2luc3RhbmNl X3QgKiBpbnMgPSBjaGlwLT5kc3Bfc3Bvc19pbnN0YW5jZTsKIAotCWRvd24oJmlucy0+c2Ni X211dGV4KTsKIAkvKiBjaGVjayBpbnRlZ3JldHkgKi8KIAlzbmRfYXNzZXJ0ICggKHNjYi0+ aW5kZXggPj0gMCAmJiAKIAkJICAgICAgc2NiLT5pbmRleCA8IGlucy0+bnNjYiAmJiAKLQkJ ICAgICAgKGlucy0+c2NicyArIHNjYi0+aW5kZXgpID09IHNjYiksIGdvdG8gX2VuZCApOwor CQkgICAgICAoaW5zLT5zY2JzICsgc2NiLT5pbmRleCkgPT0gc2NiKSwgcmV0dXJuICk7CiAK ICNpZiAwCiAJLyogY2FudCByZW1vdmUgYSBTQ0Igd2l0aCBjaGlsZHMgYmVmb3JlIApAQCAt MTk3LDcgKzE5NSw3IEBACiAJX2RzcF91bmxpbmtfc2NiIChjaGlwLHNjYik7CiAgIAogCWNz NDZ4eF9kc3BfcHJvY19mcmVlX3NjYl9kZXNjKHNjYik7Ci0Jc25kX2Fzc2VydCAoc2NiLT5z Y2Jfc3ltYm9sICE9IE5VTEwsIGdvdG8gX2VuZCk7CisJc25kX2Fzc2VydCAoc2NiLT5zY2Jf c3ltYm9sICE9IE5VTEwsIHJldHVybiApOwogCXJlbW92ZV9zeW1ib2wgKGNoaXAsc2NiLT5z Y2Jfc3ltYm9sKTsKIAogCWlucy0+c2Nic1tzY2ItPmluZGV4XS5kZWxldGVkID0gMTsKQEAg LTIxOSwxMSArMjE3LDYgQEAKIAkJaW5zLT5zY2JzW2kgLSAxXS5pbmRleCA9IGkgLSAxOwog CX0KICNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1NORF9ERUJVRwotIF9lbmQ6Ci0jZW5kaWYK LQl1cCgmaW5zLT5zY2JfbXV0ZXgpOwogfQogCiAKQEAgLTI0OCw3ICsyNDEsNiBAQAogCXNu ZF9pbmZvX2VudHJ5X3QgKiBlbnRyeTsKIAlwcm9jX3NjYl9pbmZvX3QgKiBzY2JfaW5mbzsK IAotCWRvd24oJmlucy0+c2NiX211dGV4KTsKIAkvKiByZWdpc3RlciB0byBwcm9jICovCiAJ aWYgKGlucy0+c25kX2NhcmQgIT0gTlVMTCAmJiBpbnMtPnByb2NfZHNwX2RpciAhPSBOVUxM ICYmCiAJICAgIHNjYi0+cHJvY19pbmZvID09IE5VTEwpIHsKQEAgLTI3NSw3ICsyNjcsNiBA QAogCiAJCXNjYi0+cHJvY19pbmZvID0gZW50cnk7CiAJfQotCXVwKCZpbnMtPnNjYl9tdXRl eCk7CiB9CiAKIHN0YXRpYyBkc3Bfc2NiX2Rlc2NyaXB0b3JfdCAqIApAQCAtMjg5LDggKzI4 MCw3IEBACiAgIAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlkb3duKCZpbnMtPnNjYl9t dXRleCk7Ci0Jc25kX2Fzc2VydCAoaW5zLT50aGVfbnVsbF9zY2IgIT0gTlVMTCxnb3RvIF9m YWlsX2VuZCk7CisJc25kX2Fzc2VydCAoaW5zLT50aGVfbnVsbF9zY2IgIT0gTlVMTCxyZXR1 cm4gTlVMTCk7CiAKIAkvKiBmaWxsIHRoZSBkYXRhIHRoYXQgd2lsbCBiZSB3cm90ZW4gdG8g RFNQICovCiAJc2NiX2RhdGFbU0NCc3ViTGlzdFB0cl0gPSAKQEAgLTMyMSwxNyArMzExLDE3 IEBACiAJCS8qIGxpbmsgdG8gIHBhcmVudCBTQ0IgKi8KIAkJaWYgKHNjYl9jaGlsZF90eXBl ID09IFNDQl9PTl9QQVJFTlRfTkVYVF9TQ0IpIHsKIAkJCXNuZF9hc3NlcnQgKCAoc2NiLT5w YXJlbnRfc2NiX3B0ci0+bmV4dF9zY2JfcHRyID09IGlucy0+dGhlX251bGxfc2NiKSwKLQkJ CQkgICAgIGdvdG8gX2ZhaWxfZW5kKTsKKwkJCQkgICAgIHJldHVybiBOVUxMKTsKIAogCQkJ c2NiLT5wYXJlbnRfc2NiX3B0ci0+bmV4dF9zY2JfcHRyID0gc2NiOwogCiAJCX0gZWxzZSBp ZiAoc2NiX2NoaWxkX3R5cGUgPT0gU0NCX09OX1BBUkVOVF9TVUJMSVNUX1NDQikgewogCQkJ c25kX2Fzc2VydCAoIChzY2ItPnBhcmVudF9zY2JfcHRyLT5zdWJfbGlzdF9wdHIgPT0gaW5z LT50aGVfbnVsbF9zY2IpLAotCQkJCSAgICAgZ290byBfZmFpbF9lbmQpOworCQkJCSAgICAg cmV0dXJuIE5VTEwpOwogCiAJCQlzY2ItPnBhcmVudF9zY2JfcHRyLT5zdWJfbGlzdF9wdHIg PSBzY2I7CiAJCX0gZWxzZSB7Ci0JCQlzbmRfYXNzZXJ0ICgwLGdvdG8gX2ZhaWxfZW5kKTsK KwkJCXNuZF9hc3NlcnQgKDAscmV0dXJuIE5VTEwpOwogCQl9CiAKIAkJc3Bpbl9sb2NrX2ly cXNhdmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CkBAIC0zNDUsMTcgKzMzNSw5IEBACiAJ fQogCiAKLQl1cCgmaW5zLT5zY2JfbXV0ZXgpOwotCiAJY3M0Nnh4X2RzcF9wcm9jX3JlZ2lz dGVyX3NjYl9kZXNjIChjaGlwLHNjYik7CiAKIAlyZXR1cm4gc2NiOwotI2lmZGVmIENPTkZJ R19TTkRfREVCVUcKLSBfZmFpbF9lbmQ6Ci0KLQl1cCgmaW5zLT5zY2JfbXV0ZXgpOwotCXJl dHVybiBOVUxMOwotI2VuZGlmCiB9CiAKIGRzcF9zY2JfZGVzY3JpcHRvcl90ICogCkBAIC05 MTQsNiArODk2LDcgQEAKIAkJLyogVGhlcmUgaXMgbm8gY29ycmVjdCBpbml0aWFsIHZhbHVl LCBpdCB3aWxsIGRlcGVuZCB1cG9uIHRoZSBkZXRlY3RlZAogCQkgICByYXRlIGV0YyAgKi8K IAkJMHgxODAwMDAwMCwgICAgICAgICAKKwogCQkvKiBNdXRlIHN0cmVhbSAqLwogCQkweDgw MDAsMHg4MDAwLCAgICAgICAKIAkJMHhmZmZmLDB4ZmZmZgpAQCAtMTExNiw4ICsxMDk5LDYg QEAKIAlpbnQgaSxwY21faW5kZXggPSAtMSwgaW5zZXJ0X3BvaW50LCBzcmNfaW5kZXggPSAt MTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JZG93bigmaW5zLT5wY21fbXV0ZXgpOyAK LQogCS8qIGRlZmF1bHQgc2FtcGxlIHJhdGUgaXMgNDQxMDAgKi8KIAlpZiAoIXNhbXBsZV9y YXRlKSBzYW1wbGVfcmF0ZSA9IDQ0MTAwOwogCkBAIC0xMTQyLDcgKzExMjMsNyBAQAogCiAJ aWYgKHBjbV9pbmRleCA9PSAtMSkgewogCQlzbmRfcHJpbnRrIChLRVJOX0VSUiAiZHNwX3Nw b3M6IG5vIGZyZWUgUENNIGNoYW5uZWxcbiIpOwotCQlnb3RvIF9lbmQ7CisJCXJldHVybiBO VUxMOwogCX0KIAogCWlmIChzcmNfc2NiID09IE5VTEwpIHsKQEAgLTExNTAsNyArMTEzMSw3 IEBACiAKIAkJaWYgKGlucy0+bnNyY19zY2IgPj0gRFNQX01BWF9TUkNfTlIpIHsKIAkJCXNu ZF9wcmludGsoS0VSTl9FUlIgImRzcF9zcG9zOiB0byBtYW55IFNSQyBpbnN0YW5jZXNcbiEi KTsKLQkJCWdvdG8gX2VuZDsKKwkJCXJldHVybiBOVUxMOwogCQl9CiAKIAkJLyogZmluZCBh IGZyZWUgc2xvdCAqLwpAQCAtMTE2MSw3ICsxMTQyLDcgQEAKIAkJCQlicmVhazsKIAkJCX0K IAkJfQotCQlzbmRfYXNzZXJ0IChzcmNfaW5kZXggIT0gLTEsZ290byBfZW5kKTsKKwkJc25k X2Fzc2VydCAoc3JjX2luZGV4ICE9IC0xLHJldHVybiBOVUxMKTsKIAogCQkvKiB3ZSBuZWVk IHRvIGNyZWF0ZSBhIG5ldyBTUkMgU0NCICovCiAJCWlmIChpbnMtPm1hc3Rlcl9taXhfc2Ni LT5zdWJfbGlzdF9wdHIgPT0gaW5zLT50aGVfbnVsbF9zY2IpIHsKQEAgLTExODUsNyArMTE2 Niw3IEBACiAKIAkJaWYgKCFzcmNfc2NiKSB7CiAJCQlzbmRfcHJpbnRrIChLRVJOX0VSUiAi ZHNwX3Nwb3M6IGZhaWxlZCB0byBjcmVhdGUgU1JDdGFza1NDQlxuIik7Ci0JCQlnb3RvIF9l bmQ7CisJCQlyZXR1cm4gTlVMTDsKIAkJfQogCiAJCWNzNDZ4eF9kc3Bfc2V0X3NyY19zYW1w bGVfcmF0ZShjaGlwLHNyY19zY2Isc2FtcGxlX3JhdGUpOwpAQCAtMTIyOCw3ICsxMjA5LDcg QEAKIAogCWlmICghcGNtX3NjYikgewogCQlzbmRfcHJpbnRrIChLRVJOX0VSUiAiZHNwX3Nw b3M6IGZhaWxlZCB0byBjcmVhdGUgUENNcmVhZGVyU0NCXG4iKTsKLQkJZ290byBfZW5kOwor CQlyZXR1cm4gTlVMTDsKIAl9CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+cmVnX2xv Y2ssIGZsYWdzKTsKQEAgLTEyNDMsMTIgKzEyMjQsNyBAQAogCWlucy0+bnBjbV9jaGFubmVs cyArKzsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3Mp OwogCi0JdXAoJmlucy0+cGNtX211dGV4KTsgIAogCXJldHVybiAoaW5zLT5wY21fY2hhbm5l bHMgKyBwY21faW5kZXgpOwotIF9lbmQ6Ci0KLQl1cCgmaW5zLT5wY21fbXV0ZXgpOwotCXJl dHVybiBOVUxMOwogfQogCiB2b2lkIGNzNDZ4eF9kc3BfZGVzdHJveV9wY21fY2hhbm5lbCAo Y3M0Nnh4X3QgKiBjaGlwLHBjbV9jaGFubmVsX2Rlc2NyaXB0b3JfdCAqIHBjbV9jaGFubmVs KQpAQCAtMTI1NiwxMSArMTIzMiw5IEBACiAJZHNwX3Nwb3NfaW5zdGFuY2VfdCAqIGlucyA9 IGNoaXAtPmRzcF9zcG9zX2luc3RhbmNlOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlk b3duKCZpbnMtPnBjbV9tdXRleCk7Ci0gIAotCXNuZF9hc3NlcnQocGNtX2NoYW5uZWwtPmFj dGl2ZSxnb3RvIF9lbmQpOwotCXNuZF9hc3NlcnQoaW5zLT5ucGNtX2NoYW5uZWxzID4gMCxn b3RvIF9lbmQpOwotCXNuZF9hc3NlcnQocGNtX2NoYW5uZWwtPnNyY19zY2ItPnJlZl9jb3Vu dCA+IDAsZ290byBfZW5kKTsKKwlzbmRfYXNzZXJ0KHBjbV9jaGFubmVsLT5hY3RpdmUsIHJl dHVybiApOworCXNuZF9hc3NlcnQoaW5zLT5ucGNtX2NoYW5uZWxzID4gMCwgcmV0dXJuICk7 CisJc25kX2Fzc2VydChwY21fY2hhbm5lbC0+c3JjX3NjYi0+cmVmX2NvdW50ID4gMCwgcmV0 dXJuICk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsK IAlwY21fY2hhbm5lbC0+dW5saW5rZWQgPSAxOwpAQCAtMTI3NiwxOCArMTI1MCwxMSBAQAog CQljczQ2eHhfZHNwX3JlbW92ZV9zY2IoY2hpcCxwY21fY2hhbm5lbC0+c3JjX3NjYik7CiAK IAkJc25kX2Fzc2VydCAocGNtX2NoYW5uZWwtPnNyY19zbG90ID49IDAgJiYgcGNtX2NoYW5u ZWwtPnNyY19zbG90IDw9IERTUF9NQVhfU1JDX05SLAotCQkJICAgIGdvdG8gX2VuZCk7CisJ CQkgICAgcmV0dXJuICk7CiAKIAkJaW5zLT5zcmNfc2NiX3Nsb3RzW3BjbV9jaGFubmVsLT5z cmNfc2xvdF0gPSAwOwogCQlpbnMtPm5zcmNfc2NiIC0tOwogCX0KLQotCi0jaWZkZWYgQ09O RklHX1NORF9ERUJVRwotIF9lbmQ6Ci0jZW5kaWYKLQotCXVwKCZpbnMtPnBjbV9tdXRleCk7 CiB9CiAKIGludCBjczQ2eHhfZHNwX3BjbV91bmxpbmsgKGNzNDZ4eF90ICogY2hpcCxwY21f Y2hhbm5lbF9kZXNjcmlwdG9yX3QgKiBwY21fY2hhbm5lbCkKQEAgLTEyOTUsMTQgKzEyNjIs MTEgQEAKIAlkc3Bfc3Bvc19pbnN0YW5jZV90ICogaW5zID0gY2hpcC0+ZHNwX3Nwb3NfaW5z dGFuY2U7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWRvd24oJmlucy0+cGNtX211dGV4 KTsKLQlkb3duKCZpbnMtPnNjYl9tdXRleCk7Ci0KLQlzbmRfYXNzZXJ0KHBjbV9jaGFubmVs LT5hY3RpdmUsZ290byBfZW5kKTsKLQlzbmRfYXNzZXJ0KGlucy0+bnBjbV9jaGFubmVscyA+ IDAsZ290byBfZW5kKTsKKwlzbmRfYXNzZXJ0KHBjbV9jaGFubmVsLT5hY3RpdmUscmV0dXJu IC1FSU8pOworCXNuZF9hc3NlcnQoaW5zLT5ucGNtX2NoYW5uZWxzID4gMCxyZXR1cm4gLUVJ Tyk7CiAKIAlpZiAocGNtX2NoYW5uZWwtPnVubGlua2VkKQotCQlnb3RvIF9lbmQ7CisJCXJl dHVybiAtRUlPOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFn cyk7CiAJcGNtX2NoYW5uZWwtPnVubGlua2VkID0gMTsKQEAgLTEzMTAsMTAgKzEyNzQsNiBA QAogCiAJX2RzcF91bmxpbmtfc2NiIChjaGlwLHBjbV9jaGFubmVsLT5wY21fcmVhZGVyX3Nj Yik7CiAKLSBfZW5kOgotCXVwKCZpbnMtPnNjYl9tdXRleCk7Ci0JdXAoJmlucy0+cGNtX211 dGV4KTsKLQogCXJldHVybiAwOwogfQogCkBAIC0xMzI0LDExICsxMjg0LDggQEAKIAlkc3Bf c2NiX2Rlc2NyaXB0b3JfdCAqIHNyY19zY2IgPSBwY21fY2hhbm5lbC0+c3JjX3NjYjsKIAl1 bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JZG93bigmaW5zLT5wY21fbXV0ZXgpOwotCWRvd24o Jmlucy0+c2NiX211dGV4KTsKLQogCWlmIChwY21fY2hhbm5lbC0+dW5saW5rZWQgPT0gMCkK LQkJZ290byBfZW5kOworCQlyZXR1cm4gLUVJTzsKIAogCWlmIChzcmNfc2NiLT5zdWJfbGlz dF9wdHIgPT0gaW5zLT50aGVfbnVsbF9zY2IpIHsKIAkJcGFyZW50X3NjYiA9IHNyY19zY2I7 CkBAIC0xMzUxLDEzICsxMzA4LDEwIEBACiAJcGNtX2NoYW5uZWwtPnVubGlua2VkID0gMDsK IAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwogCi0g X2VuZDoKLQl1cCgmaW5zLT5zY2JfbXV0ZXgpOwotCXVwKCZpbnMtPnBjbV9tdXRleCk7Ci0K IAlyZXR1cm4gMDsKIH0KIAorCiAjZGVmaW5lIEdPRl9QRVJfU0VDIDIwMAogICAKIHZvaWQg Y3M0Nnh4X2RzcF9zZXRfc3JjX3NhbXBsZV9yYXRlKGNzNDZ4eF90ICpjaGlwLGRzcF9zY2Jf ZGVzY3JpcHRvcl90ICogc3JjLCB1MzIgcmF0ZSkKQEAgLTE0MTQsOTcgKzEzNjgsNzAgQEAK IAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwogfQog Ci1kc3Bfc2NiX2Rlc2NyaXB0b3JfdCAqCi1jczQ2eHhfYWRkX3JlY29yZF9zb3VyY2UgKGNz NDZ4eF90ICpjaGlwLGRzcF9zY2JfZGVzY3JpcHRvcl90ICogc291cmNlLAotCQkJICB1MTYg YWRkcixjaGFyICogc2NiX25hbWUpCi17Citkc3Bfc2NiX2Rlc2NyaXB0b3JfdCAqIGNzNDZ4 eF9hZGRfcmVjb3JkX3NvdXJjZSAoY3M0Nnh4X3QgKmNoaXAsZHNwX3NjYl9kZXNjcmlwdG9y X3QgKiBzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdTE2IGFkZHIsY2hhciAqIHNjYl9uYW1lKSB7CiAgIAlkc3Bfc3Bvc19pbnN0 YW5jZV90ICogaW5zID0gY2hpcC0+ZHNwX3Nwb3NfaW5zdGFuY2U7Ci0JZHNwX3NjYl9kZXNj cmlwdG9yX3QgKiBwYXJlbnQ7Ci0JZHNwX3NjYl9kZXNjcmlwdG9yX3QgKiBwY21faW5wdXQ7 Ci0JaW50IGluc2VydF9wb2ludDsKLQotCXNuZF9hc3NlcnQgKGlucy0+cmVjb3JkX21peGVy X3NjYiAhPSBOVUxMLHJldHVybiBOVUxMKTsKLQotCWlmIChpbnMtPnJlY29yZF9taXhlcl9z Y2ItPnN1Yl9saXN0X3B0ciAhPSBpbnMtPnRoZV9udWxsX3NjYikgewotCQlwYXJlbnQgPSBm aW5kX25leHRfZnJlZV9zY2IgKGNoaXAsaW5zLT5yZWNvcmRfbWl4ZXJfc2NiLT5zdWJfbGlz dF9wdHIpOwotCQlpbnNlcnRfcG9pbnQgPSBTQ0JfT05fUEFSRU5UX05FWFRfU0NCOwotCX0g ZWxzZSB7Ci0JCXBhcmVudCA9IGlucy0+cmVjb3JkX21peGVyX3NjYjsKLQkJaW5zZXJ0X3Bv aW50ID0gU0NCX09OX1BBUkVOVF9TVUJMSVNUX1NDQjsKLQl9CisgICAgZHNwX3NjYl9kZXNj cmlwdG9yX3QgKiBwYXJlbnQ7CisgICAgZHNwX3NjYl9kZXNjcmlwdG9yX3QgKiBwY21faW5w dXQ7CisgICAgaW50IGluc2VydF9wb2ludDsKKworICAgIHNuZF9hc3NlcnQgKGlucy0+cmVj b3JkX21peGVyX3NjYiAhPSBOVUxMLHJldHVybiBOVUxMKTsKKworICAgIGlmIChpbnMtPnJl Y29yZF9taXhlcl9zY2ItPnN1Yl9saXN0X3B0ciAhPSBpbnMtPnRoZV9udWxsX3NjYikgewor ICAgICAgcGFyZW50ID0gZmluZF9uZXh0X2ZyZWVfc2NiIChjaGlwLGlucy0+cmVjb3JkX21p eGVyX3NjYi0+c3ViX2xpc3RfcHRyKTsKKyAgICAgIGluc2VydF9wb2ludCA9IFNDQl9PTl9Q QVJFTlRfTkVYVF9TQ0I7CisgICAgfSBlbHNlIHsKKyAgICAgIHBhcmVudCA9IGlucy0+cmVj b3JkX21peGVyX3NjYjsKKyAgICAgIGluc2VydF9wb2ludCA9IFNDQl9PTl9QQVJFTlRfU1VC TElTVF9TQ0I7CisgICAgfQogCiAJcGNtX2lucHV0ID0gY3M0Nnh4X2RzcF9jcmVhdGVfcGNt X3NlcmlhbF9pbnB1dF9zY2IoY2hpcCxzY2JfbmFtZSxhZGRyLAotCQkJCQkJCSAgIHNvdXJj ZSwgcGFyZW50LAotCQkJCQkJCSAgIGluc2VydF9wb2ludCk7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLCBwYXJlbnQs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW5zZXJ0X3BvaW50KTsKIAotCXJldHVybiBwY21faW5wdXQ7CisgICAgcmV0dXJuIHBj bV9pbnB1dDsKIH0KIAogaW50IGNzNDZ4eF9zcmNfdW5saW5rKGNzNDZ4eF90ICpjaGlwLGRz cF9zY2JfZGVzY3JpcHRvcl90ICogc3JjKQogewotCWRzcF9zcG9zX2luc3RhbmNlX3QgKiBp bnMgPSBjaGlwLT5kc3Bfc3Bvc19pbnN0YW5jZTsKLQlkb3duKCZpbnMtPnBjbV9tdXRleCk7 Ci0JZG93bigmaW5zLT5zY2JfbXV0ZXgpOwotCi0Jc25kX2Fzc2VydCAoc3JjLT5wYXJlbnRf c2NiX3B0ciAhPSBOVUxMLGdvdG8gX2ZhaWxfZW5kKTsKLQotCS8qIG11dGUgU0NCICovCi0J c25kX2NzNDZ4eF9wb2tlKGNoaXAsIChzcmMtPmFkZHJlc3MgKyAweEUpIDw8IDIsIDB4ZmZm ZmZmZmYpOwotCi0JX2RzcF91bmxpbmtfc2NiIChjaGlwLHNyYyk7CisgIHNuZF9hc3NlcnQg KHNyYy0+cGFyZW50X3NjYl9wdHIgIT0gTlVMTCwgIHJldHVybiAtRUlOVkFMICk7CiAKLQl1 cCgmaW5zLT5zY2JfbXV0ZXgpOwotCXVwKCZpbnMtPnBjbV9tdXRleCk7CisgIC8qIG11dGUg U0NCICovCisgIHNuZF9jczQ2eHhfcG9rZShjaGlwLCAoc3JjLT5hZGRyZXNzICsgMHhFKSA8 PCAyLCAweGZmZmZmZmZmKTsKIAotCXJldHVybiAwOwotCi0gX2ZhaWxfZW5kOgotCXVwKCZp bnMtPnNjYl9tdXRleCk7Ci0JdXAoJmlucy0+cGNtX211dGV4KTsKKyAgX2RzcF91bmxpbmtf c2NiIChjaGlwLHNyYyk7CiAKLQlyZXR1cm4gLUVJTlZBTDsKKyAgcmV0dXJuIDA7CiB9CiAK IGludCBjczQ2eHhfc3JjX2xpbmsoY3M0Nnh4X3QgKmNoaXAsZHNwX3NjYl9kZXNjcmlwdG9y X3QgKiBzcmMpCiB7Ci0JZHNwX3Nwb3NfaW5zdGFuY2VfdCAqIGlucyA9IGNoaXAtPmRzcF9z cG9zX2luc3RhbmNlOwotCWRzcF9zY2JfZGVzY3JpcHRvcl90ICogcGFyZW50X3NjYjsKLQl1 bnNpZ25lZCBpbnQgZmxhZ3M7Ci0KLQlkb3duKCZpbnMtPnBjbV9tdXRleCk7Ci0JZG93bigm aW5zLT5zY2JfbXV0ZXgpOwotCi0Jc25kX2Fzc2VydCAoc3JjLT5wYXJlbnRfc2NiX3B0ciA9 PSBOVUxMLGdvdG8gX2ZhaWxfZW5kKTsKLQlzbmRfYXNzZXJ0KGlucy0+bWFzdGVyX21peF9z Y2IgIT1OVUxMLGdvdG8gX2ZhaWxfZW5kKTsKLQotCWlmIChpbnMtPm1hc3Rlcl9taXhfc2Ni LT5zdWJfbGlzdF9wdHIgIT0gaW5zLT50aGVfbnVsbF9zY2IpIHsKLQkJcGFyZW50X3NjYiA9 IGZpbmRfbmV4dF9mcmVlX3NjYiAoY2hpcCxpbnMtPm1hc3Rlcl9taXhfc2NiLT5zdWJfbGlz dF9wdHIpOwotCQlwYXJlbnRfc2NiLT5uZXh0X3NjYl9wdHIgPSBzcmM7Ci0JfSBlbHNlIHsK LQkJcGFyZW50X3NjYiA9IGlucy0+bWFzdGVyX21peF9zY2I7Ci0JCXBhcmVudF9zY2ItPnN1 Yl9saXN0X3B0ciA9IHNyYzsKLQl9Ci0KLQlzcmMtPnBhcmVudF9zY2JfcHRyID0gcGFyZW50 X3NjYjsKLQotCS8qIHVwZGF0ZSBlbnRyeSBpbiBEU1AgUkFNICovCi0Jc3Bpbl9sb2NrX2ly cXNhdmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7Ci0Jc25kX2NzNDZ4eF9wb2tlKGNoaXAs Ci0JCQkocGFyZW50X3NjYi0+YWRkcmVzcyArIFNDQnN1Ykxpc3RQdHIpIDw8IDIsCi0JCQko cGFyZW50X3NjYi0+c3ViX2xpc3RfcHRyLT5hZGRyZXNzIDw8IDB4MTApIHwKLQkJCShwYXJl bnRfc2NiLT5uZXh0X3NjYl9wdHItPmFkZHJlc3MpKTsKKyAgZHNwX3Nwb3NfaW5zdGFuY2Vf dCAqIGlucyA9IGNoaXAtPmRzcF9zcG9zX2luc3RhbmNlOworICBkc3Bfc2NiX2Rlc2NyaXB0 b3JfdCAqIHBhcmVudF9zY2I7CisgIHVuc2lnbmVkIGludCBmbGFnczsKKworICBzbmRfYXNz ZXJ0IChzcmMtPnBhcmVudF9zY2JfcHRyID09IE5VTEwsICAgcmV0dXJuIC1FSU5WQUwgKTsK KyAgc25kX2Fzc2VydChpbnMtPm1hc3Rlcl9taXhfc2NiICE9TlVMTCwgICByZXR1cm4gLUVJ TlZBTCApOworCisgIGlmIChpbnMtPm1hc3Rlcl9taXhfc2NiLT5zdWJfbGlzdF9wdHIgIT0g aW5zLT50aGVfbnVsbF9zY2IpIHsKKyAgICBwYXJlbnRfc2NiID0gZmluZF9uZXh0X2ZyZWVf c2NiIChjaGlwLGlucy0+bWFzdGVyX21peF9zY2ItPnN1Yl9saXN0X3B0cik7CisgICAgcGFy ZW50X3NjYi0+bmV4dF9zY2JfcHRyID0gc3JjOworICB9IGVsc2UgeworICAgIHBhcmVudF9z Y2IgPSBpbnMtPm1hc3Rlcl9taXhfc2NiOworICAgIHBhcmVudF9zY2ItPnN1Yl9saXN0X3B0 ciA9IHNyYzsKKyAgfQorCisgIHNyYy0+cGFyZW50X3NjYl9wdHIgPSBwYXJlbnRfc2NiOwor CisgIC8qIHVwZGF0ZSBlbnRyeSBpbiBEU1AgUkFNICovCisgIHNwaW5fbG9ja19pcnFzYXZl KCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOworICBzbmRfY3M0Nnh4X3Bva2UoY2hpcCwKKyAg ICAgICAgICAgICAgICAgIChwYXJlbnRfc2NiLT5hZGRyZXNzICsgU0NCc3ViTGlzdFB0cikg PDwgMiwKKyAgICAgICAgICAgICAgICAgIChwYXJlbnRfc2NiLT5zdWJfbGlzdF9wdHItPmFk ZHJlc3MgPDwgMHgxMCkgfAorICAgICAgICAgICAgICAgICAgKHBhcmVudF9zY2ItPm5leHRf c2NiX3B0ci0+YWRkcmVzcykpOwogICAKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNo aXAtPnJlZ19sb2NrLCBmbGFncyk7CisgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAt PnJlZ19sb2NrLCBmbGFncyk7CiAgIAotCXVwKCZpbnMtPnNjYl9tdXRleCk7Ci0JdXAoJmlu cy0+cGNtX211dGV4KTsKLQotCXJldHVybiAwOwotCi0gX2ZhaWxfZW5kOgotCXVwKCZpbnMt PnNjYl9tdXRleCk7Ci0JdXAoJmlucy0+cGNtX211dGV4KTsKLSAKLQlyZXR1cm4gLUVJTlZB TDsKKyAgcmV0dXJuIDA7CiB9Cg== --------------010707090008020400010506-- ------------------------------------------------------- This sf.net email is sponsored by: OSDN - Tired of that same old cell phone? Get a new here for FREE! https://www.inphonic.com/r.asp?r=sourceforge1&refcode1=vs3390