Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S261903AbVANE2H (ORCPT ); Thu, 13 Jan 2005 23:28:07 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S261834AbVANE2H (ORCPT ); Thu, 13 Jan 2005 23:28:07 -0500 Received: from dea.vocord.ru ([217.67.177.50]:34186 "EHLO vocord.com") by vger.kernel.org with ESMTP id S261904AbVANE1e (ORCPT ); Thu, 13 Jan 2005 23:27:34 -0500 Subject: Re: Kernel conector. Reincarnation #1. From: Evgeniy Polyakov Reply-To: johnpol@2ka.mipt.ru To: Nish Aravamudan Cc: Greg KH , linux-kernel@vger.kernel.org In-Reply-To: <29495f1d050113095856d998ea@mail.gmail.com> References: <1101286481.18807.66.camel@uganda> <1101287606.18807.75.camel@uganda> <20041124222857.GG3584@kroah.com> <1102504677.3363.55.camel@uganda> <20041221204101.GA9831@kroah.com> <1103707272.3432.6.camel@uganda> <20050112190319.GA10885@kroah.com> <20050112233345.6de409d0@zanzibar.2ka.mipt.ru> <20050113001611.0a5d8bf8@zanzibar.2ka.mipt.ru> <29495f1d050113095856d998ea@mail.gmail.com> Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="=-oym2Evb7XEXRiOR7COfz" Organization: MIPT Date: Fri, 14 Jan 2005 07:32:48 +0300 Message-Id: <1105677168.3394.32.camel@uganda> Mime-Version: 1.0 X-Mailer: Evolution 2.0.2 (2.0.2-3) X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-1.4 (vocord.com [192.168.0.1]); Fri, 14 Jan 2005 04:27:13 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 36149 Lines: 538 --=-oym2Evb7XEXRiOR7COfz Content-Type: multipart/mixed; boundary="=-M+NLWiU6r7zHI0pbmWkP" --=-M+NLWiU6r7zHI0pbmWkP Content-Type: text/plain Content-Transfer-Encoding: quoted-printable On Thu, 2005-01-13 at 09:58 -0800, Nish Aravamudan wrote: > On Thu, 13 Jan 2005 00:16:11 +0300, Evgeniy Polyakov > wrote: > > Sorry, forget about nasty typo. > > Current one is right. >=20 > >=20 > > diff -Nru /tmp/empty/cn_queue.c linux-2.6.9/drivers/connector/cn_queue.= c > > --- /tmp/empty/cn_queue.c 1970-01-01 03:00:00.000000000 +0300 > > +++ linux-2.6.9/drivers/connector/cn_queue.c 2005-01-12 23:23:45.000= 000000 +0300 >=20 > >=20 > > + while (atomic_read(&cbq->cb->refcnt)) { > > + printk(KERN_INFO "Waiting for %s to become free: refcnt= =3D%d.\n", > > + cbq->pdev->name, atomic_read(&cbq->cb->refcnt)); > > + set_current_state(TASK_INTERRUPTIBLE); > > + schedule_timeout(HZ); > > + > > + if (current->flags & PF_FREEZE) > > + refrigerator(PF_FREEZE); > > + > > + if (signal_pending(current)) > > + flush_signals(current); > > + } >=20 > >=20 > > + while (atomic_read(&dev->refcnt)) { > > + printk(KERN_INFO "Waiting for %s to become free: refcnt= =3D%d.\n", > > + dev->name, atomic_read(&dev->refcnt)); > > + set_current_state(TASK_INTERRUPTIBLE); > > + schedule_timeout(HZ); > > + > > + if (current->flags & PF_FREEZE) > > + refrigerator(PF_FREEZE); > > + > > + if (signal_pending(current)) > > + flush_signals(current); > > + } >=20 > Would it be possible to use msleep_interruptible(1000) in both of > these locations? You only seem to be concerned with signals (not > wait-queue events) and the time is rather long (1000 msec). > signals_pending(current) will still be true upon return from > msleep_interruptible(), so it's a minimal change, I think. Ok, updated patch attached. Thank you. > Thanks, > Nish --=20 Evgeniy Polyakov Crash is better than data corruption -- Arthur Grabowski --=-M+NLWiU6r7zHI0pbmWkP Content-Disposition: attachment; filename=connector.patch.drivers_Kconfig Content-Type: text/plain; name=connector.patch.drivers_Kconfig; charset=KOI8-R Content-Transfer-Encoding: base64 LS0tIGxpbnV4LTIuNi45L2RyaXZlcnMvS2NvbmZpZy5vcmlnCTIwMDUtMDEtMDggMTc6MjI6NTMu MDAwMDAwMDAwICswMzAwDQorKysgbGludXgtMi42LjkvZHJpdmVycy9LY29uZmlnCTIwMDUtMDEt MTIgMjM6MjU6NDkuMDAwMDAwMDAwICswMzAwDQpAQCAtNCw2ICs0LDggQEANCiANCiBzb3VyY2Ug ImRyaXZlcnMvYmFzZS9LY29uZmlnIg0KIA0KK3NvdXJjZSAiZHJpdmVycy9jb25uZWN0b3IvS2Nv bmZpZyINCisNCiBzb3VyY2UgImRyaXZlcnMvbXRkL0tjb25maWciDQogDQogc291cmNlICJkcml2 ZXJzL3BhcnBvcnQvS2NvbmZpZyINCg== --=-M+NLWiU6r7zHI0pbmWkP Content-Disposition: attachment; filename=connector.patch.drivers_Makefile Content-Type: text/plain; name=connector.patch.drivers_Makefile; charset=KOI8-R Content-Transfer-Encoding: base64 LS0tIGxpbnV4LTIuNi45L2RyaXZlcnMvTWFrZWZpbGUub3JpZwkyMDA1LTAxLTA4IDE3OjIyOjQ0 LjAwMDAwMDAwMCArMDMwMA0KKysrIGxpbnV4LTIuNi45L2RyaXZlcnMvTWFrZWZpbGUJMjAwNS0w MS0xMiAyMzoyNToyOC4wMDAwMDAwMDAgKzAzMDANCkBAIC0xNyw2ICsxNyw4IEBADQogIyBkZWZh dWx0Lg0KIG9iai15CQkJCSs9IGNoYXIvDQogDQorb2JqLSQoQ09ORklHX0NPTk5FQ1RPUikJKz0g Y29ubmVjdG9yLw0KKw0KICMgaTgxMGZiIGFuZCBpbnRlbGZiIGRlcGVuZCBvbiBjaGFyL2FncC8N CiBvYmotJChDT05GSUdfRkJfSTgxMCkgICAgICAgICAgICs9IHZpZGVvL2k4MTAvDQogb2JqLSQo Q09ORklHX0ZCX0lOVEVMKSAgICAgICAgICArPSB2aWRlby9pbnRlbGZiLw0K --=-M+NLWiU6r7zHI0pbmWkP Content-Disposition: attachment; filename=connector.patch Content-Transfer-Encoding: base64 Content-Type: text/x-patch; name=connector.patch; charset=KOI8-R ZGlmZiAtTnJ1IC90bXAvZW1wdHkvS2NvbmZpZyBsaW51eC0yLjYvZHJpdmVycy9jb25uZWN0b3Iv S2NvbmZpZw0KLS0tIC90bXAvZW1wdHkvS2NvbmZpZwkxOTcwLTAxLTAxIDAzOjAwOjAwLjAwMDAw MDAwMCArMDMwMA0KKysrIGxpbnV4LTIuNi9kcml2ZXJzL2Nvbm5lY3Rvci9LY29uZmlnCTIwMDUt MDEtMTMgMDA6MTQ6NDcuMDAwMDAwMDAwICswMzAwDQpAQCAtMCwwICsxLDEzIEBADQorbWVudSAi Q29ubmVjdG9yIC0gdW5pZmllZCB1c2Vyc3BhY2UgPC0+IGtlcm5lbHNwYWNlIGxpbmtlciINCisN Citjb25maWcgQ09OTkVDVE9SDQorCXRyaXN0YXRlICJDb25uZWN0b3IgLSB1bmlmaWVkIHVzZXJz cGFjZSA8LT4ga2VybmVsc3BhY2UgbGlua2VyIg0KKwlkZXBlbmRzIG9uIE5FVA0KKwktLS1oZWxw LS0tDQorCSAgVGhpcyBpcyB1bmlmaWVkIHVzZXJzcGFjZSA8LT4ga2VybmVsc3BhY2UgY29ubmVj dG9yIHdvcmtpbmcgb24gdG9wDQorCSAgb2YgdGhlIG5ldGxpbmsgc29ja2V0IHByb3RvY29sLg0K Kw0KKwkgIENvbm5lY3RvciBzdXBwb3J0IGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAg SWYgc28sIHRoZSBtb2R1bGUNCisJICB3aWxsIGJlIGNhbGxlZCBjbi5rby4NCisNCitlbmRtZW51 DQpkaWZmIC1OcnUgL3RtcC9lbXB0eS9NYWtlZmlsZSBsaW51eC0yLjYvZHJpdmVycy9jb25uZWN0 b3IvTWFrZWZpbGUNCi0tLSAvdG1wL2VtcHR5L01ha2VmaWxlCTE5NzAtMDEtMDEgMDM6MDA6MDAu MDAwMDAwMDAwICswMzAwDQorKysgbGludXgtMi42L2RyaXZlcnMvY29ubmVjdG9yL01ha2VmaWxl CTIwMDUtMDEtMTMgMDA6MTQ6NDcuMDAwMDAwMDAwICswMzAwDQpAQCAtMCwwICsxLDIgQEANCitv YmotJChDT05GSUdfQ09OTkVDVE9SKQkJKz0gY24ubw0KK2NuLW9ianMJCTo9IGNuX3F1ZXVlLm8g Y29ubmVjdG9yLm8NCmRpZmYgLU5ydSAvdG1wL2VtcHR5L2NuX3F1ZXVlLmMgbGludXgtMi42L2Ry aXZlcnMvY29ubmVjdG9yL2NuX3F1ZXVlLmMNCi0tLSAvdG1wL2VtcHR5L2NuX3F1ZXVlLmMJMTk3 MC0wMS0wMSAwMzowMDowMC4wMDAwMDAwMDAgKzAzMDANCisrKyBsaW51eC0yLjYvZHJpdmVycy9j b25uZWN0b3IvY25fcXVldWUuYwkyMDA1LTAxLTEzIDE2OjI2OjQxLjAwMDAwMDAwMCArMDMwMA0K QEAgLTAsMCArMSwyMTkgQEANCisvKg0KKyAqIAljbl9xdWV1ZS5jDQorICogDQorICogMjAwNCBD b3B5cmlnaHQgKGMpIEV2Z2VuaXkgUG9seWFrb3YgPGpvaG5wb2xAMmthLm1pcHQucnU+DQorICog QWxsIHJpZ2h0cyByZXNlcnZlZC4NCisgKiANCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQ0KKyAqIGl0IHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVk IGJ5DQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBv ZiB0aGUgTGljZW5zZSwgb3INCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u Lg0KKyAqDQorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsDQorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlDQorICogR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCisgKg0KKyAqIFlvdSBzaG91bGQgaGF2 ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQorICog YWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh cmUNCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9z dG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBDQorICoNCisgKi8NCisNCisjaW5jbHVkZSA8bGludXgv a2VybmVsLmg+DQorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0KKyNpbmNsdWRlIDxsaW51eC9s aXN0Lmg+DQorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPg0KKyNpbmNsdWRlIDxsaW51eC9z cGlubG9jay5oPg0KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+DQorI2luY2x1ZGUgPGxpbnV4L3Nr YnVmZi5oPg0KKyNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+DQorI2luY2x1ZGUgPGxpbnV4L2Nv bm5lY3Rvci5oPg0KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPg0KKw0KK3N0YXRpYyB2b2lkIGNu X3F1ZXVlX3dyYXBwZXIodm9pZCAqZGF0YSkNCit7DQorCXN0cnVjdCBjbl9jYWxsYmFja19lbnRy eSAqY2JxID0gKHN0cnVjdCBjbl9jYWxsYmFja19lbnRyeSAqKWRhdGE7DQorDQorCWF0b21pY19p bmMoJmNicS0+Y2ItPnJlZmNudCk7DQorCWNicS0+Y2ItPmNhbGxiYWNrKGNicS0+Y2ItPnByaXYp Ow0KKwlhdG9taWNfZGVjKCZjYnEtPmNiLT5yZWZjbnQpOw0KKw0KKwljYnEtPmRlc3RydWN0X2Rh dGEoY2JxLT5kZGF0YSk7DQorfQ0KKw0KK3N0YXRpYyBzdHJ1Y3QgY25fY2FsbGJhY2tfZW50cnkg KmNuX3F1ZXVlX2FsbG9jX2NhbGxiYWNrX2VudHJ5KHN0cnVjdA0KKwkJCQkJCQkgICAgICAgY25f Y2FsbGJhY2sgKmNiKQ0KK3sNCisJc3RydWN0IGNuX2NhbGxiYWNrX2VudHJ5ICpjYnE7DQorDQor CWNicSA9IGttYWxsb2Moc2l6ZW9mKCpjYnEpLCBHRlBfS0VSTkVMKTsNCisJaWYgKCFjYnEpIHsN CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIGNyZWF0ZSBuZXcgY2FsbGJhY2sgcXVldWUu XG4iKTsNCisJCXJldHVybiBOVUxMOw0KKwl9DQorDQorCW1lbXNldChjYnEsIDAsIHNpemVvZigq Y2JxKSk7DQorDQorCWNicS0+Y2IgPSBjYjsNCisNCisJSU5JVF9XT1JLKCZjYnEtPndvcmssICZj bl9xdWV1ZV93cmFwcGVyLCBjYnEpOw0KKw0KKwlyZXR1cm4gY2JxOw0KK30NCisNCitzdGF0aWMg dm9pZCBjbl9xdWV1ZV9mcmVlX2NhbGxiYWNrKHN0cnVjdCBjbl9jYWxsYmFja19lbnRyeSAqY2Jx KQ0KK3sNCisJY2FuY2VsX2RlbGF5ZWRfd29yaygmY2JxLT53b3JrKTsNCisNCisJd2hpbGUgKGF0 b21pY19yZWFkKCZjYnEtPmNiLT5yZWZjbnQpKSB7DQorCQlwcmludGsoS0VSTl9JTkZPICJXYWl0 aW5nIGZvciAlcyB0byBiZWNvbWUgZnJlZTogcmVmY250PSVkLlxuIiwNCisJCSAgICAgICBjYnEt PnBkZXYtPm5hbWUsIGF0b21pY19yZWFkKCZjYnEtPmNiLT5yZWZjbnQpKTsNCisNCisJCW1zbGVl cF9pbnRlcnJ1cHRpYmxlKDEwMDApOw0KKw0KKwkJaWYgKGN1cnJlbnQtPmZsYWdzICYgUEZfRlJF RVpFKQ0KKwkJCXJlZnJpZ2VyYXRvcihQRl9GUkVFWkUpOw0KKw0KKwkJaWYgKHNpZ25hbF9wZW5k aW5nKGN1cnJlbnQpKQ0KKwkJCWZsdXNoX3NpZ25hbHMoY3VycmVudCk7DQorCX0NCisNCisJa2Zy ZWUoY2JxKTsNCit9DQorDQoraW50IGNuX2NiX2VxdWFsKHN0cnVjdCBjYl9pZCAqaTEsIHN0cnVj dCBjYl9pZCAqaTIpDQorew0KKyNpZiAwDQorCXByaW50ayhLRVJOX0lORk8gIiVzOiBjb21wYXJp bmcgJTA0eC4lMDR4IGFuZCAlMDR4LiUwNHhcbiIsDQorCQkJX19mdW5jX18sDQorCQkJaTEtPmlk eCwgaTEtPnZhbCwNCisJCQlpMi0+aWR4LCBpMi0+dmFsKTsNCisjZW5kaWYNCisJcmV0dXJuICgo aTEtPmlkeCA9PSBpMi0+aWR4KSAmJiAoaTEtPnZhbCA9PSBpMi0+dmFsKSk7DQorfQ0KKw0KK2lu dCBjbl9xdWV1ZV9hZGRfY2FsbGJhY2soc3RydWN0IGNuX3F1ZXVlX2RldiAqZGV2LCBzdHJ1Y3Qg Y25fY2FsbGJhY2sgKmNiKQ0KK3sNCisJc3RydWN0IGNuX2NhbGxiYWNrX2VudHJ5ICpjYnEsICpu LCAqX19jYnE7DQorCWludCBmb3VuZCA9IDA7DQorDQorCWNicSA9IGNuX3F1ZXVlX2FsbG9jX2Nh bGxiYWNrX2VudHJ5KGNiKTsNCisJaWYgKCFjYnEpDQorCQlyZXR1cm4gLUVOT01FTTsNCisNCisJ YXRvbWljX2luYygmZGV2LT5yZWZjbnQpOw0KKwljYnEtPnBkZXYgPSBkZXY7DQorDQorCXNwaW5f bG9ja19iaCgmZGV2LT5xdWV1ZV9sb2NrKTsNCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKF9f Y2JxLCBuLCAmZGV2LT5xdWV1ZV9saXN0LCBjYWxsYmFja19lbnRyeSkgew0KKwkJaWYgKGNuX2Ni X2VxdWFsKCZfX2NicS0+Y2ItPmlkLCAmY2ItPmlkKSkgew0KKwkJCWZvdW5kID0gMTsNCisJCQli cmVhazsNCisJCX0NCisJfQ0KKwlpZiAoIWZvdW5kKSB7DQorCQlhdG9taWNfc2V0KCZjYnEtPmNi LT5yZWZjbnQsIDEpOw0KKwkJbGlzdF9hZGRfdGFpbCgmY2JxLT5jYWxsYmFja19lbnRyeSwgJmRl di0+cXVldWVfbGlzdCk7DQorCX0NCisJc3Bpbl91bmxvY2tfYmgoJmRldi0+cXVldWVfbG9jayk7 DQorDQorCWlmIChmb3VuZCkgew0KKwkJYXRvbWljX2RlYygmZGV2LT5yZWZjbnQpOw0KKwkJYXRv bWljX3NldCgmY2JxLT5jYi0+cmVmY250LCAwKTsNCisJCWNuX3F1ZXVlX2ZyZWVfY2FsbGJhY2so Y2JxKTsNCisJCXJldHVybiAtRUlOVkFMOw0KKwl9DQorDQorCWNicS0+bmxzID0gZGV2LT5ubHM7 DQorCWNicS0+c2VxID0gMDsNCisJY2JxLT5ncm91cCA9IGNicS0+Y2ItPmlkLmlkeDsNCisNCisJ cmV0dXJuIDA7DQorfQ0KKw0KK3ZvaWQgY25fcXVldWVfZGVsX2NhbGxiYWNrKHN0cnVjdCBjbl9x dWV1ZV9kZXYgKmRldiwgc3RydWN0IGNuX2NhbGxiYWNrICpjYikNCit7DQorCXN0cnVjdCBjbl9j YWxsYmFja19lbnRyeSAqY2JxID0gTlVMTCwgKm47DQorCWludCBmb3VuZCA9IDA7DQorDQorCXNw aW5fbG9ja19iaCgmZGV2LT5xdWV1ZV9sb2NrKTsNCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZl KGNicSwgbiwgJmRldi0+cXVldWVfbGlzdCwgY2FsbGJhY2tfZW50cnkpIHsNCisJCWlmIChjbl9j Yl9lcXVhbCgmY2JxLT5jYi0+aWQsICZjYi0+aWQpKSB7DQorCQkJbGlzdF9kZWwoJmNicS0+Y2Fs bGJhY2tfZW50cnkpOw0KKwkJCWZvdW5kID0gMTsNCisJCQlicmVhazsNCisJCX0NCisJfQ0KKwlz cGluX3VubG9ja19iaCgmZGV2LT5xdWV1ZV9sb2NrKTsNCisNCisJaWYgKGZvdW5kKSB7DQorCQlh dG9taWNfZGVjKCZjYnEtPmNiLT5yZWZjbnQpOw0KKwkJY25fcXVldWVfZnJlZV9jYWxsYmFjayhj YnEpOw0KKwkJYXRvbWljX2RlYygmZGV2LT5yZWZjbnQpOw0KKwl9DQorfQ0KKw0KK3N0cnVjdCBj bl9xdWV1ZV9kZXYgKmNuX3F1ZXVlX2FsbG9jX2RldihjaGFyICpuYW1lLCBzdHJ1Y3Qgc29jayAq bmxzKQ0KK3sNCisJc3RydWN0IGNuX3F1ZXVlX2RldiAqZGV2Ow0KKw0KKwlkZXYgPSBrbWFsbG9j KHNpemVvZigqZGV2KSwgR0ZQX0tFUk5FTCk7DQorCWlmICghZGV2KSB7DQorCQlwcmludGsoS0VS Tl9FUlIgIiVzOiBGYWlsZWQgdG8gYWxsb2N0ZSBuZXcgc3RydWN0IGNuX3F1ZXVlX2Rldi5cbiIs DQorCQkgICAgICAgbmFtZSk7DQorCQlyZXR1cm4gTlVMTDsNCisJfQ0KKw0KKwltZW1zZXQoZGV2 LCAwLCBzaXplb2YoKmRldikpOw0KKw0KKwlzbnByaW50ZihkZXYtPm5hbWUsIHNpemVvZihkZXYt Pm5hbWUpLCAiJXMiLCBuYW1lKTsNCisNCisJYXRvbWljX3NldCgmZGV2LT5yZWZjbnQsIDApOw0K KwlJTklUX0xJU1RfSEVBRCgmZGV2LT5xdWV1ZV9saXN0KTsNCisJc3Bpbl9sb2NrX2luaXQoJmRl di0+cXVldWVfbG9jayk7DQorDQorCWRldi0+bmxzID0gbmxzOw0KKwlkZXYtPm5ldGxpbmtfZ3Jv dXBzID0gMDsNCisNCisJZGV2LT5jbl9xdWV1ZSA9IGNyZWF0ZV93b3JrcXVldWUoZGV2LT5uYW1l KTsNCisJaWYgKCFkZXYtPmNuX3F1ZXVlKSB7DQorCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0 byBjcmVhdGUgJXMgcXVldWUuXG4iLCBkZXYtPm5hbWUpOw0KKwkJa2ZyZWUoZGV2KTsNCisJCXJl dHVybiBOVUxMOw0KKwl9DQorDQorCXJldHVybiBkZXY7DQorfQ0KKw0KK3ZvaWQgY25fcXVldWVf ZnJlZV9kZXYoc3RydWN0IGNuX3F1ZXVlX2RldiAqZGV2KQ0KK3sNCisJc3RydWN0IGNuX2NhbGxi YWNrX2VudHJ5ICpjYnEsICpuOw0KKw0KKwlmbHVzaF93b3JrcXVldWUoZGV2LT5jbl9xdWV1ZSk7 DQorCWRlc3Ryb3lfd29ya3F1ZXVlKGRldi0+Y25fcXVldWUpOw0KKw0KKwlzcGluX2xvY2tfYmgo JmRldi0+cXVldWVfbG9jayk7DQorCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjYnEsIG4sICZk ZXYtPnF1ZXVlX2xpc3QsIGNhbGxiYWNrX2VudHJ5KSB7DQorCQlsaXN0X2RlbCgmY2JxLT5jYWxs YmFja19lbnRyeSk7DQorCQlhdG9taWNfZGVjKCZjYnEtPmNiLT5yZWZjbnQpOw0KKwl9DQorCXNw aW5fdW5sb2NrX2JoKCZkZXYtPnF1ZXVlX2xvY2spOw0KKw0KKwl3aGlsZSAoYXRvbWljX3JlYWQo JmRldi0+cmVmY250KSkgew0KKwkJcHJpbnRrKEtFUk5fSU5GTyAiV2FpdGluZyBmb3IgJXMgdG8g YmVjb21lIGZyZWU6IHJlZmNudD0lZC5cbiIsDQorCQkgICAgICAgZGV2LT5uYW1lLCBhdG9taWNf cmVhZCgmZGV2LT5yZWZjbnQpKTsNCisNCisJCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDEwMDApOw0K Kw0KKwkJaWYgKGN1cnJlbnQtPmZsYWdzICYgUEZfRlJFRVpFKQ0KKwkJCXJlZnJpZ2VyYXRvcihQ Rl9GUkVFWkUpOw0KKw0KKwkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQ0KKwkJCWZsdXNo X3NpZ25hbHMoY3VycmVudCk7DQorCX0NCisNCisJbWVtc2V0KGRldiwgMCwgc2l6ZW9mKCpkZXYp KTsNCisJa2ZyZWUoZGV2KTsNCisJZGV2ID0gTlVMTDsNCit9DQpkaWZmIC1OcnUgL3RtcC9lbXB0 eS9jb25uZWN0b3IuYyBsaW51eC0yLjYvZHJpdmVycy9jb25uZWN0b3IvY29ubmVjdG9yLmMNCi0t LSAvdG1wL2VtcHR5L2Nvbm5lY3Rvci5jCTE5NzAtMDEtMDEgMDM6MDA6MDAuMDAwMDAwMDAwICsw MzAwDQorKysgbGludXgtMi42L2RyaXZlcnMvY29ubmVjdG9yL2Nvbm5lY3Rvci5jCTIwMDUtMDEt MTMgMTY6MjU6NTAuMDAwMDAwMDAwICswMzAwDQpAQCAtMCwwICsxLDUwOSBAQA0KKy8qDQorICog CWNvbm5lY3Rvci5jDQorICogDQorICogMjAwNCBDb3B5cmlnaHQgKGMpIEV2Z2VuaXkgUG9seWFr b3YgPGpvaG5wb2xAMmthLm1pcHQucnU+DQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisgKiAN CisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeQ0KKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5DQorICogdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3INCisgKiAoYXQg eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KKyAqDQorICogVGhpcyBwcm9ncmFtIGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsDQorICogYnV0 IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg b2YNCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlDQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4NCisgKg0KKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlm IG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUNCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1 OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBDQor ICovDQorDQorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPg0KKyNpbmNsdWRlIDxsaW51eC9tb2R1 bGUuaD4NCisjaW5jbHVkZSA8bGludXgvbGlzdC5oPg0KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYu aD4NCisjaW5jbHVkZSA8bGludXgvbmV0bGluay5oPg0KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVw YXJhbS5oPg0KKyNpbmNsdWRlIDxsaW51eC9jb25uZWN0b3IuaD4NCisNCisjaW5jbHVkZSA8bmV0 L3NvY2suaD4NCisNCitNT0RVTEVfTElDRU5TRSgiR1BMIik7DQorTU9EVUxFX0FVVEhPUigiRXZn ZW5peSBQb2x5YWtvdiA8am9obnBvbEAya2EubWlwdC5ydT4iKTsNCitNT0RVTEVfREVTQ1JJUFRJ T04oIkdlbmVyaWMgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBjb25uZWN0b3IuIik7DQorDQor c3RhdGljIGludCB1bml0ID0gTkVUTElOS19ORkxPRzsNCitzdGF0aWMgdTMyIGNuX2lkeCA9IC0x Ow0KK3N0YXRpYyB1MzIgY25fdmFsID0gLTE7DQorDQorbW9kdWxlX3BhcmFtKHVuaXQsIGludCwg MCk7DQorbW9kdWxlX3BhcmFtKGNuX2lkeCwgdWludCwgMCk7DQorbW9kdWxlX3BhcmFtKGNuX3Zh bCwgdWludCwgMCk7DQorDQorc3BpbmxvY2tfdCBub3RpZnlfbG9jayA9IFNQSU5fTE9DS19VTkxP Q0tFRDsNCitzdGF0aWMgTElTVF9IRUFEKG5vdGlmeV9saXN0KTsNCisNCitzdGF0aWMgc3RydWN0 IGNuX2RldiBjZGV2Ow0KKw0KK2ludCBjbl9hbHJlYWR5X2luaXRpYWxpemVkID0gMDsNCisNCisv Kg0KKyAqIG1zZy0+c2VxIGFuZCBtc2ctPmFjayBhcmUgdXNlZCB0byBkZXRlcm1pbmUgbWVzc2Fn ZSBnZW5lYWxvZ3kuDQorICogV2hlbiBzb21lb25lIHNlbmRzIG1lc3NhZ2UgaXQgcHV0cyB0aGVy ZSBsb2NhbGx5IHVuaXF1ZSBzZXF1ZW5jZSANCisgKiBhbmQgcmFuZG9tIGFja25vd2xlZGdlIG51 bWJlcnMuDQorICogU2VxdWVuY2UgbnVtYmVyIG1heSBiZSBjb3BpZWQgaW50byBubG1zZ2hkci0+ bmxtc2dfc2VxIHRvby4NCisgKg0KKyAqIFNlcXVlbmNlIG51bWJlciBpcyBpbmNyZW1lbnRlZCB3 aXRoIGVhY2ggbWVzc2FnZSB0byBiZSBzZW50Lg0KKyAqDQorICogSWYgd2UgZXhwZWN0IHJlcGx5 IHRvIG91ciBtZXNzYWdlLCANCisgKiB0aGVuIHNlcXVlbmNlIG51bWJlciBpbiByZWNlaXZlZCBt ZXNzYWdlIE1VU1QgYmUgdGhlIHNhbWUgYXMgaW4gb3JpZ2luYWwgbWVzc2FnZSwNCisgKiBhbmQg YWNrbm93bGVkZ2UgbnVtYmVyIE1VU1QgYmUgdGhlIHNhbWUgKyAxLg0KKyAqDQorICogSWYgd2Ug cmVjZWl2ZSBtZXNzYWdlIGFuZCBpdCdzIHNlcXVlbmNlIG51bWJlciBpcyBub3QgZXF1YWwgdG8g b25lIHdlIGFyZSBleHBlY3RpbmcsIA0KKyAqIHRoZW4gaXQgaXMgbmV3IG1lc3NhZ2UuDQorICog SWYgd2UgcmVjZWl2ZSBtZXNzYWdlIGFuZCBpdCdzIHNlcXVlbmNlIG51bWJlciBpcyB0aGUgc2Ft ZSBhcyBvbmUgd2UgYXJlIGV4cGVjdGluZywNCisgKiBidXQgaXQncyBhY2tub3dsZWRnZSBpcyBu b3QgZXF1YWwgYWNrbm93bGVkZ2UgbnVtYmVyIGluIG9yaWdpbmFsIG1lc3NhZ2UgKyAxLA0KKyAq IHRoZW4gaXQgaXMgbmV3IG1lc3NhZ2UuDQorICoNCisgKi8NCit2b2lkIGNuX25ldGxpbmtfc2Vu ZChzdHJ1Y3QgY25fbXNnICptc2csIHUzMiBfX2dyb3VwcykNCit7DQorCXN0cnVjdCBjbl9jYWxs YmFja19lbnRyeSAqbiwgKl9fY2JxOw0KKwl1bnNpZ25lZCBpbnQgc2l6ZTsNCisJc3RydWN0IHNr X2J1ZmYgKnNrYjsNCisJc3RydWN0IG5sbXNnaGRyICpubGg7DQorCXN0cnVjdCBjbl9tc2cgKmRh dGE7DQorCXN0cnVjdCBjbl9kZXYgKmRldiA9ICZjZGV2Ow0KKwl1MzIgZ3JvdXBzID0gMDsNCisJ aW50IGZvdW5kID0gMDsNCisNCisJaWYgKCFfX2dyb3VwcykNCisJew0KKwkJc3Bpbl9sb2NrX2Jo KCZkZXYtPmNiZGV2LT5xdWV1ZV9sb2NrKTsNCisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShf X2NicSwgbiwgJmRldi0+Y2JkZXYtPnF1ZXVlX2xpc3QsIGNhbGxiYWNrX2VudHJ5KSB7DQorCQkJ aWYgKGNuX2NiX2VxdWFsKCZfX2NicS0+Y2ItPmlkLCAmbXNnLT5pZCkpIHsNCisJCQkJZm91bmQg PSAxOw0KKwkJCQlncm91cHMgPSBfX2NicS0+Z3JvdXA7DQorCQkJfQ0KKwkJfQ0KKwkJc3Bpbl91 bmxvY2tfYmgoJmRldi0+Y2JkZXYtPnF1ZXVlX2xvY2spOw0KKw0KKwkJaWYgKCFmb3VuZCkgew0K KwkJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIGZpbmQgbXVsdGljYXN0IG5ldGxpbmsgZ3Jv dXAgZm9yIGNhbGxiYWNrWzB4JXguMHgleF0uIHNlcT0ldVxuIiwNCisJCQkgICAgICAgbXNnLT5p ZC5pZHgsIG1zZy0+aWQudmFsLCBtc2ctPnNlcSk7DQorCQkJcmV0dXJuOw0KKwkJfQ0KKwl9DQor CWVsc2UNCisJCWdyb3VwcyA9IF9fZ3JvdXBzOw0KKw0KKwlzaXplID0gTkxNU0dfU1BBQ0Uoc2l6 ZW9mKCptc2cpICsgbXNnLT5sZW4pOw0KKw0KKwlza2IgPSBhbGxvY19za2Ioc2l6ZSwgR0ZQX0FU T01JQyk7DQorCWlmICghc2tiKSB7DQorCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBhbGxv Y2F0ZSBuZXcgc2tiIHdpdGggc2l6ZT0ldS5cbiIsIHNpemUpOw0KKwkJcmV0dXJuOw0KKwl9DQor DQorCW5saCA9IE5MTVNHX1BVVChza2IsIDAsIG1zZy0+c2VxLCBOTE1TR19ET05FLCBzaXplIC0g c2l6ZW9mKCpubGgpKTsNCisNCisJZGF0YSA9IChzdHJ1Y3QgY25fbXNnICopTkxNU0dfREFUQShu bGgpOw0KKw0KKwltZW1jcHkoZGF0YSwgbXNnLCBzaXplb2YoKmRhdGEpICsgbXNnLT5sZW4pOw0K KyNpZiAwDQorCXByaW50aygiJXM6IGxlbj0ldSwgc2VxPSV1LCBhY2s9JXUsIGdyb3VwPSV1Llxu IiwNCisJICAgICAgIF9fZnVuY19fLCBtc2ctPmxlbiwgbXNnLT5zZXEsIG1zZy0+YWNrLCBncm91 cHMpOw0KKyNlbmRpZg0KKwlORVRMSU5LX0NCKHNrYikuZHN0X2dyb3VwcyA9IGdyb3VwczsNCisJ bmV0bGlua19icm9hZGNhc3QoZGV2LT5ubHMsIHNrYiwgMCwgZ3JvdXBzLCBHRlBfQVRPTUlDKTsN CisNCisJcmV0dXJuOw0KKw0KKyAgICAgIG5sbXNnX2ZhaWx1cmU6DQorCXByaW50ayhLRVJOX0VS UiAiRmFpbGVkIHRvIHNlbmQgJXUuJXVcbiIsIG1zZy0+c2VxLCBtc2ctPmFjayk7DQorCWtmcmVl X3NrYihza2IpOw0KKwlyZXR1cm47DQorfQ0KKw0KK3N0YXRpYyBpbnQgY25fY2FsbF9jYWxsYmFj ayhzdHJ1Y3QgY25fbXNnICptc2csIHZvaWQgKCpkZXN0cnVjdF9kYXRhKSAodm9pZCAqKSwgdm9p ZCAqZGF0YSkNCit7DQorCXN0cnVjdCBjbl9jYWxsYmFja19lbnRyeSAqbiwgKl9fY2JxOw0KKwlz dHJ1Y3QgY25fZGV2ICpkZXYgPSAmY2RldjsNCisJaW50IGZvdW5kID0gMDsNCisNCisJc3Bpbl9s b2NrX2JoKCZkZXYtPmNiZGV2LT5xdWV1ZV9sb2NrKTsNCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9z YWZlKF9fY2JxLCBuLCAmZGV2LT5jYmRldi0+cXVldWVfbGlzdCwgY2FsbGJhY2tfZW50cnkpIHsN CisJCWlmIChjbl9jYl9lcXVhbCgmX19jYnEtPmNiLT5pZCwgJm1zZy0+aWQpKSB7DQorCQkJX19j YnEtPmNiLT5wcml2ID0gbXNnOw0KKw0KKwkJCV9fY2JxLT5kZGF0YSA9IGRhdGE7DQorCQkJX19j YnEtPmRlc3RydWN0X2RhdGEgPSBkZXN0cnVjdF9kYXRhOw0KKw0KKwkJCXF1ZXVlX3dvcmsoZGV2 LT5jYmRldi0+Y25fcXVldWUsICZfX2NicS0+d29yayk7DQorCQkJZm91bmQgPSAxOw0KKwkJCWJy ZWFrOw0KKwkJfQ0KKwl9DQorCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmNiZGV2LT5xdWV1ZV9sb2Nr KTsNCisNCisJcmV0dXJuIGZvdW5kOw0KK30NCisNCitzdGF0aWMgaW50IF9fY25fcnhfc2tiKHN0 cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoKQ0KK3sNCisJdTMyIHBpZCwg dWlkLCBzZXEsIGdyb3VwOw0KKwlzdHJ1Y3QgY25fbXNnICptc2c7DQorDQorCXBpZCA9IE5FVExJ TktfQ1JFRFMoc2tiKS0+cGlkOw0KKwl1aWQgPSBORVRMSU5LX0NSRURTKHNrYiktPnVpZDsNCisJ c2VxID0gbmxoLT5ubG1zZ19zZXE7DQorCWdyb3VwID0gTkVUTElOS19DQigoc2tiKSkuZ3JvdXBz Ow0KKwltc2cgPSAoc3RydWN0IGNuX21zZyAqKU5MTVNHX0RBVEEobmxoKTsNCisNCisJaWYgKG1z Zy0+bGVuICE9IG5saC0+bmxtc2dfbGVuIC0gc2l6ZW9mKCptc2cpIC0gc2l6ZW9mKCpubGgpKSB7 DQorCQlwcmludGsoS0VSTl9FUlIgInNrYiBkb2VzIG5vdCBoYXZlIGVub3VnaCBsZW5ndGg6ICIN CisJCQkJInJlcXVlc3RlZCBtc2ctPmxlbj0ldVsldV0sIG5saC0+bmxtc2dfbGVuPSV1WyV1XSwg c2tiLT5sZW49JXVbbXVzdCBiZSAldV0uXG4iLCANCisJCQkJbXNnLT5sZW4sIE5MTVNHX1NQQUNF KG1zZy0+bGVuKSwgDQorCQkJCW5saC0+bmxtc2dfbGVuLCBubGgtPm5sbXNnX2xlbiAtIHNpemVv ZigqbmxoKSwNCisJCQkJc2tiLT5sZW4sIG1zZy0+bGVuICsgc2l6ZW9mKCptc2cpKTsNCisJCXJl dHVybiAtRUlOVkFMOw0KKwl9DQorI2lmIDANCisJcHJpbnRrKEtFUk5fSU5GTyAicGlkPSV1LCB1 aWQ9JXUsIHNlcT0ldSwgZ3JvdXA9JXUuXG4iLA0KKwkgICAgICAgcGlkLCB1aWQsIHNlcSwgZ3Jv dXApOw0KKyNlbmRpZg0KKwlyZXR1cm4gY25fY2FsbF9jYWxsYmFjayhtc2csICh2b2lkICgqKSh2 b2lkICopKWtmcmVlX3NrYiwgc2tiKTsNCit9DQorDQorc3RhdGljIHZvaWQgY25fcnhfc2tiKHN0 cnVjdCBza19idWZmICpfX3NrYikNCit7DQorCXN0cnVjdCBubG1zZ2hkciAqbmxoOw0KKwl1MzIg bGVuOw0KKwlpbnQgZXJyOw0KKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOw0KKw0KKwlza2IgPSBza2Jf Z2V0KF9fc2tiKTsNCisJaWYgKCFza2IpIHsNCisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRv IHJlZmVyZW5jZSBhbiBza2IuXG4iKTsNCisJCXJldHVybjsNCisJfQ0KKyNpZiAwDQorCXByaW50 ayhLRVJOX0lORk8NCisJICAgICAgICJza2I6IGxlbj0ldSwgZGF0YV9sZW49JXUsIHRydWVzaXpl PSV1LCBwcm90bz0ldSwgY2xvbmVkPSVkLCBzaGFyZWQ9JWQuXG4iLA0KKwkgICAgICAgc2tiLT5s ZW4sIHNrYi0+ZGF0YV9sZW4sIHNrYi0+dHJ1ZXNpemUsIHNrYi0+cHJvdG9jb2wsDQorCSAgICAg ICBza2JfY2xvbmVkKHNrYiksIHNrYl9zaGFyZWQoc2tiKSk7DQorI2VuZGlmDQorCXdoaWxlIChz a2ItPmxlbiA+PSBOTE1TR19TUEFDRSgwKSkgew0KKwkJbmxoID0gKHN0cnVjdCBubG1zZ2hkciAq KXNrYi0+ZGF0YTsNCisJCWlmIChubGgtPm5sbXNnX2xlbiA8IHNpemVvZihzdHJ1Y3QgY25fbXNn KSB8fA0KKwkJICAgIHNrYi0+bGVuIDwgbmxoLT5ubG1zZ19sZW4gfHwNCisJCSAgICBubGgtPm5s bXNnX2xlbiA+IENPTk5FQ1RPUl9NQVhfTVNHX1NJWkUpIHsNCisJCQlwcmludGsoS0VSTl9JTkZP ICJubG1zZ19sZW49JXUsIHNpemVvZigqbmxoKT0ldVxuIiwNCisJCQkgICAgICAgbmxoLT5ubG1z Z19sZW4sIHNpemVvZigqbmxoKSk7DQorCQkJYnJlYWs7DQorCQl9DQorDQorCQlsZW4gPSBOTE1T R19BTElHTihubGgtPm5sbXNnX2xlbik7DQorCQlpZiAobGVuID4gc2tiLT5sZW4pDQorCQkJbGVu ID0gc2tiLT5sZW47DQorDQorCQllcnIgPSBfX2NuX3J4X3NrYihza2IsIG5saCk7DQorCQlpZiAo ZXJyKSB7DQorI2lmIDANCisJCQlpZiAoZXJyIDwgMCAmJiAobmxoLT5ubG1zZ19mbGFncyAmIE5M TV9GX0FDSykpDQorCQkJCW5ldGxpbmtfYWNrKHNrYiwgbmxoLCAtZXJyKTsNCisjZW5kaWYNCisJ CQlrZnJlZV9za2Ioc2tiKTsNCisJCQlicmVhazsNCisJCX0gZWxzZSB7DQorI2lmIDANCisJCQlp ZiAobmxoLT5ubG1zZ19mbGFncyAmIE5MTV9GX0FDSykNCisJCQkJbmV0bGlua19hY2soc2tiLCBu bGgsIDApOw0KKyNlbmRpZg0KKwkJCWtmcmVlX3NrYihza2IpOw0KKwkJCWJyZWFrOw0KKwkJfQ0K KwkJc2tiX3B1bGwoc2tiLCBsZW4pOw0KKwl9DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGNuX2lucHV0 KHN0cnVjdCBzb2NrICpzaywgaW50IGxlbikNCit7DQorCXN0cnVjdCBza19idWZmICpza2I7DQor DQorCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJnNrLT5za19yZWNlaXZlX3F1ZXVlKSkgIT0g TlVMTCkNCisJCWNuX3J4X3NrYihza2IpOw0KK30NCisNCitzdGF0aWMgdm9pZCBjbl9ub3RpZnko c3RydWN0IGNiX2lkICppZCwgdTMyIG5vdGlmeV9ldmVudCkNCit7DQorCXN0cnVjdCBjbl9jdGxf ZW50cnkgKmVudDsNCisNCisJc3Bpbl9sb2NrX2JoKCZub3RpZnlfbG9jayk7DQorCWxpc3RfZm9y X2VhY2hfZW50cnkoZW50LCAmbm90aWZ5X2xpc3QsIG5vdGlmeV9lbnRyeSkgew0KKwkJaW50IGk7 DQorCQlzdHJ1Y3QgY25fbm90aWZ5X3JlcSAqcmVxOw0KKwkJc3RydWN0IGNuX2N0bF9tc2cgKmN0 bCA9IGVudC0+bXNnOw0KKwkJaW50IGEsIGI7DQorDQorCQlhID0gYiA9IDA7DQorCQkNCisJCXJl cSA9IChzdHJ1Y3QgY25fbm90aWZ5X3JlcSAqKWN0bC0+ZGF0YTsNCisJCWZvciAoaT0wOyBpPGN0 bC0+aWR4X25vdGlmeV9udW07ICsraSwgKytyZXEpIHsNCisJCQlpZiAoaWQtPmlkeCA+PSByZXEt PmZpcnN0ICYmIGlkLT5pZHggPCByZXEtPmZpcnN0ICsgcmVxLT5yYW5nZSkgew0KKwkJCQlhID0g MTsNCisJCQkJYnJlYWs7DQorCQkJfQ0KKwkJfQ0KKwkJDQorCQlmb3IgKGk9MDsgaTxjdGwtPnZh bF9ub3RpZnlfbnVtOyArK2ksICsrcmVxKSB7DQorCQkJaWYgKGlkLT52YWwgPj0gcmVxLT5maXJz dCAmJiBpZC0+dmFsIDwgcmVxLT5maXJzdCArIHJlcS0+cmFuZ2UpIHsNCisJCQkJYiA9IDE7DQor CQkJCWJyZWFrOw0KKwkJCX0NCisJCX0NCisNCisJCWlmIChhICYmIGIpIHsNCisJCQlzdHJ1Y3Qg Y25fbXNnIG07DQorCQkJDQorCQkJcHJpbnRrKEtFUk5fSU5GTyAiTm90aWZ5aW5nIGdyb3VwICV4 IHdpdGggZXZlbnQgJXUgYWJvdXQgJXguJXguXG4iLCANCisJCQkJCWN0bC0+Z3JvdXAsIG5vdGlm eV9ldmVudCwgDQorCQkJCQlpZC0+aWR4LCBpZC0+dmFsKTsNCisNCisJCQltZW1zZXQoJm0sIDAs IHNpemVvZihtKSk7DQorCQkJbS5hY2sgPSBub3RpZnlfZXZlbnQ7DQorDQorCQkJbWVtY3B5KCZt LmlkLCBpZCwgc2l6ZW9mKG0uaWQpKTsNCisJCQljbl9uZXRsaW5rX3NlbmQoJm0sIGN0bC0+Z3Jv dXApOw0KKwkJfQ0KKwl9DQorCXNwaW5fdW5sb2NrX2JoKCZub3RpZnlfbG9jayk7DQorfQ0KKw0K K2ludCBjbl9hZGRfY2FsbGJhY2soc3RydWN0IGNiX2lkICppZCwgY2hhciAqbmFtZSwgdm9pZCAo KmNhbGxiYWNrKSAodm9pZCAqKSkNCit7DQorCWludCBlcnI7DQorCXN0cnVjdCBjbl9kZXYgKmRl diA9ICZjZGV2Ow0KKwlzdHJ1Y3QgY25fY2FsbGJhY2sgKmNiOw0KKw0KKwljYiA9IGttYWxsb2Mo c2l6ZW9mKCpjYiksIEdGUF9LRVJORUwpOw0KKwlpZiAoIWNiKSB7DQorCQlwcmludGsoS0VSTl9J TkZPICIlczogRmFpbGVkIHRvIGFsbG9jYXRlIG5ldyBzdHJ1Y3QgY25fY2FsbGJhY2suXG4iLA0K KwkJICAgICAgIGRldi0+Y2JkZXYtPm5hbWUpOw0KKwkJcmV0dXJuIC1FTk9NRU07DQorCX0NCisN CisJbWVtc2V0KGNiLCAwLCBzaXplb2YoKmNiKSk7DQorDQorCXNucHJpbnRmKGNiLT5uYW1lLCBz aXplb2YoY2ItPm5hbWUpLCAiJXMiLCBuYW1lKTsNCisNCisJbWVtY3B5KCZjYi0+aWQsIGlkLCBz aXplb2YoY2ItPmlkKSk7DQorCWNiLT5jYWxsYmFjayA9IGNhbGxiYWNrOw0KKw0KKwlhdG9taWNf c2V0KCZjYi0+cmVmY250LCAwKTsNCisNCisJZXJyID0gY25fcXVldWVfYWRkX2NhbGxiYWNrKGRl di0+Y2JkZXYsIGNiKTsNCisJaWYgKGVycikgew0KKwkJa2ZyZWUoY2IpOw0KKwkJcmV0dXJuIGVy cjsNCisJfQ0KKwkJCQ0KKwljbl9ub3RpZnkoaWQsIDApOw0KKw0KKwlyZXR1cm4gMDsNCit9DQor DQordm9pZCBjbl9kZWxfY2FsbGJhY2soc3RydWN0IGNiX2lkICppZCkNCit7DQorCXN0cnVjdCBj bl9kZXYgKmRldiA9ICZjZGV2Ow0KKwlzdHJ1Y3QgY25fY2FsbGJhY2tfZW50cnkgKm4sICpfX2Ni cTsNCisNCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKF9fY2JxLCBuLCAmZGV2LT5jYmRldi0+ cXVldWVfbGlzdCwgY2FsbGJhY2tfZW50cnkpIHsNCisJCWlmIChjbl9jYl9lcXVhbCgmX19jYnEt PmNiLT5pZCwgaWQpKSB7DQorCQkJY25fcXVldWVfZGVsX2NhbGxiYWNrKGRldi0+Y2JkZXYsIF9f Y2JxLT5jYik7DQorCQkJY25fbm90aWZ5KGlkLCAxKTsNCisJCQlicmVhazsNCisJCX0NCisJfQ0K K30NCisNCitzdGF0aWMgaW50IGNuX2N0bF9tc2dfZXF1YWxzKHN0cnVjdCBjbl9jdGxfbXNnICpt MSwgc3RydWN0IGNuX2N0bF9tc2cgKm0yKQ0KK3sNCisJaW50IGk7DQorCXN0cnVjdCBjbl9ub3Rp ZnlfcmVxICpyZXExLCAqcmVxMjsNCisNCisJaWYgKG0xLT5pZHhfbm90aWZ5X251bSAhPSBtMi0+ aWR4X25vdGlmeV9udW0pDQorCQlyZXR1cm4gMDsNCisJDQorCWlmIChtMS0+dmFsX25vdGlmeV9u dW0gIT0gbTItPnZhbF9ub3RpZnlfbnVtKQ0KKwkJcmV0dXJuIDA7DQorCQ0KKwlpZiAobTEtPmxl biAhPSBtMi0+bGVuKQ0KKwkJcmV0dXJuIDA7DQorDQorCWlmICgobTEtPmlkeF9ub3RpZnlfbnVt ICsgbTEtPnZhbF9ub3RpZnlfbnVtKSpzaXplb2YoKnJlcTEpICE9IG0xLT5sZW4pIHsNCisJCXBy aW50ayhLRVJOX0VSUiAiTm90aWZ5IGVudHJ5W2lkeF9udW09JXgsIHZhbF9udW09JXgsIGxlbj0l dV0gY29udGFpbnMgZ2FyYmFnZS4gUmVtb3ZpbmcuXG4iLCANCisJCQkJbTEtPmlkeF9ub3RpZnlf bnVtLCBtMS0+dmFsX25vdGlmeV9udW0sIG0xLT5sZW4pOw0KKwkJcmV0dXJuIDE7DQorCX0NCisN CisJcmVxMSA9IChzdHJ1Y3QgY25fbm90aWZ5X3JlcSAqKW0xLT5kYXRhOw0KKwlyZXEyID0gKHN0 cnVjdCBjbl9ub3RpZnlfcmVxICopbTItPmRhdGE7DQorCQ0KKwlmb3IgKGk9MDsgaTxtMS0+aWR4 X25vdGlmeV9udW07ICsraSkgew0KKwkJaWYgKG1lbWNtcChyZXExLCByZXEyLCBzaXplb2YoKnJl cTEpKSkNCisJCQlyZXR1cm4gMDsNCisNCisJCXJlcTErKzsNCisJCXJlcTIrKzsNCisJfQ0KKw0K Kwlmb3IgKGk9MDsgaTxtMS0+dmFsX25vdGlmeV9udW07ICsraSkgew0KKwkJaWYgKG1lbWNtcChy ZXExLCByZXEyLCBzaXplb2YoKnJlcTEpKSkNCisJCQlyZXR1cm4gMDsNCisNCisJCXJlcTErKzsN CisJCXJlcTIrKzsNCisJfQ0KKw0KKwlyZXR1cm4gMTsNCit9DQorDQorc3RhdGljIHZvaWQgY25f Y2FsbGJhY2sodm9pZCAqIGRhdGEpDQorew0KKwlzdHJ1Y3QgY25fbXNnICptc2cgPSAoc3RydWN0 IGNuX21zZyAqKWRhdGE7DQorCXN0cnVjdCBjbl9jdGxfbXNnICpjdGw7DQorCXN0cnVjdCBjbl9j dGxfZW50cnkgKmVudDsNCisJdTMyIHNpemU7DQorIA0KKwlpZiAobXNnLT5sZW4gPCBzaXplb2Yo KmN0bCkpIHsNCisJCXByaW50ayhLRVJOX0VSUiAiV3JvbmcgY29ubmVjdG9yIHJlcXVlc3Qgc2l6 ZSAldSwgbXVzdCBiZSA+PSAldS5cbiIsIA0KKwkJCQltc2ctPmxlbiwgc2l6ZW9mKCpjdGwpKTsN CisJCXJldHVybjsNCisJfQ0KKwkNCisJY3RsID0gKHN0cnVjdCBjbl9jdGxfbXNnICopbXNnLT5k YXRhOw0KKw0KKwlzaXplID0gc2l6ZW9mKCpjdGwpICsgKGN0bC0+aWR4X25vdGlmeV9udW0gKyBj dGwtPnZhbF9ub3RpZnlfbnVtKSpzaXplb2Yoc3RydWN0IGNuX25vdGlmeV9yZXEpOw0KKw0KKwlp ZiAobXNnLT5sZW4gIT0gc2l6ZSkgew0KKwkJcHJpbnRrKEtFUk5fRVJSICJXcm9uZyBjb25uZWN0 b3IgcmVxdWVzdCBzaXplICV1LCBtdXN0IGJlID09ICV1LlxuIiwgDQorCQkJCW1zZy0+bGVuLCBz aXplKTsNCisJCXJldHVybjsNCisJfQ0KKw0KKwlpZiAoY3RsLT5sZW4gKyBzaXplb2YoKmN0bCkg IT0gbXNnLT5sZW4pIHsNCisJCXByaW50ayhLRVJOX0VSUiAiV3JvbmcgbWVzc2FnZTogbXNnLT5s ZW49JXUgbXVzdCBiZSBlcXVhbCB0byBpbm5lcl9sZW49JXUgWysldV0uXG4iLCANCisJCQkJbXNn LT5sZW4sIGN0bC0+bGVuLCBzaXplb2YoKmN0bCkpOw0KKwkJcmV0dXJuOw0KKwl9DQorDQorCS8q DQorCSAqIFJlbW92ZSBub3RpZmljYXRpb24uDQorCSAqLw0KKwlpZiAoY3RsLT5ncm91cCA9PSAw KSB7DQorCQlzdHJ1Y3QgY25fY3RsX2VudHJ5ICpuOw0KKwkJDQorCQlzcGluX2xvY2tfYmgoJm5v dGlmeV9sb2NrKTsNCisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlbnQsIG4sICZub3RpZnlf bGlzdCwgbm90aWZ5X2VudHJ5KSB7DQorCQkJaWYgKGNuX2N0bF9tc2dfZXF1YWxzKGVudC0+bXNn LCBjdGwpKSB7DQorCQkJCWxpc3RfZGVsKCZlbnQtPm5vdGlmeV9lbnRyeSk7DQorCQkJCWtmcmVl KGVudCk7DQorCQkJfQ0KKwkJfQ0KKwkJc3Bpbl91bmxvY2tfYmgoJm5vdGlmeV9sb2NrKTsNCisN CisJCXJldHVybjsNCisJfQ0KKw0KKwlzaXplICs9IHNpemVvZigqZW50KTsNCisNCisJZW50ID0g a21hbGxvYyhzaXplLCBHRlBfQVRPTUlDKTsNCisJaWYgKCFlbnQpIHsNCisJCXByaW50ayhLRVJO X0VSUiAiRmFpbGVkIHRvIGFsbG9jYXRlICVkIGJ5dGVzIGZvciBuZXcgbm90aWZ5IGVudHJ5Llxu Iiwgc2l6ZSk7DQorCQlyZXR1cm47DQorCX0NCisNCisJbWVtc2V0KGVudCwgMCwgc2l6ZSk7DQor DQorCWVudC0+bXNnID0gKHN0cnVjdCBjbl9jdGxfbXNnICopKGVudCArIDEpOw0KKw0KKwltZW1j cHkoZW50LT5tc2csIGN0bCwgc2l6ZSAtIHNpemVvZigqZW50KSk7DQorDQorCXNwaW5fbG9ja19i aCgmbm90aWZ5X2xvY2spOw0KKwlsaXN0X2FkZCgmZW50LT5ub3RpZnlfZW50cnksICZub3RpZnlf bGlzdCk7DQorCXNwaW5fdW5sb2NrX2JoKCZub3RpZnlfbG9jayk7DQorDQorCXsNCisJCWludCBp Ow0KKwkJc3RydWN0IGNuX25vdGlmeV9yZXEgKnJlcTsNCisJDQorCQlwcmludGsoIk5vdGlmeSBn cm91cCAleCBmb3IgaWR4OiAiLCBjdGwtPmdyb3VwKTsNCisNCisJCXJlcSA9IChzdHJ1Y3QgY25f bm90aWZ5X3JlcSAqKWN0bC0+ZGF0YTsNCisJCWZvciAoaT0wOyBpPGN0bC0+aWR4X25vdGlmeV9u dW07ICsraSwgKytyZXEpIHsNCisJCQlwcmludGsoIiV1LSV1ICIsIHJlcS0+Zmlyc3QsIHJlcS0+ Zmlyc3QrcmVxLT5yYW5nZS0xKTsNCisJCX0NCisJCQ0KKwkJcHJpbnRrKCJcbk5vdGlmeSBncm91 cCAleCBmb3IgdmFsOiAiLCBjdGwtPmdyb3VwKTsNCisNCisJCWZvciAoaT0wOyBpPGN0bC0+dmFs X25vdGlmeV9udW07ICsraSwgKytyZXEpIHsNCisJCQlwcmludGsoIiV1LSV1ICIsIHJlcS0+Zmly c3QsIHJlcS0+Zmlyc3QrcmVxLT5yYW5nZS0xKTsNCisJCX0NCisJCXByaW50aygiXG4iKTsNCisJ fQ0KK30NCisNCitzdGF0aWMgaW50IGNuX2luaXQodm9pZCkNCit7DQorCXN0cnVjdCBjbl9kZXYg KmRldiA9ICZjZGV2Ow0KKwlpbnQgZXJyOw0KKw0KKwlkZXYtPmlucHV0ID0gY25faW5wdXQ7DQor CWRldi0+aWQuaWR4ID0gY25faWR4Ow0KKwlkZXYtPmlkLnZhbCA9IGNuX3ZhbDsNCisNCisJZGV2 LT5ubHMgPSBuZXRsaW5rX2tlcm5lbF9jcmVhdGUodW5pdCwgZGV2LT5pbnB1dCk7DQorCWlmICgh ZGV2LT5ubHMpIHsNCisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIGNyZWF0ZSBuZXcgbmV0 bGluayBzb2NrZXQoJXUpLlxuIiwNCisJCSAgICAgICB1bml0KTsNCisJCXJldHVybiAtRUlPOw0K Kwl9DQorDQorCWRldi0+Y2JkZXYgPSBjbl9xdWV1ZV9hbGxvY19kZXYoImNxdWV1ZSIsIGRldi0+ bmxzKTsNCisJaWYgKCFkZXYtPmNiZGV2KSB7DQorCQlpZiAoZGV2LT5ubHMtPnNrX3NvY2tldCkN CisJCQlzb2NrX3JlbGVhc2UoZGV2LT5ubHMtPnNrX3NvY2tldCk7DQorCQlyZXR1cm4gLUVJTlZB TDsNCisJfQ0KKw0KKwllcnIgPSBjbl9hZGRfY2FsbGJhY2soJmRldi0+aWQsICJjb25uZWN0b3Ii LCAmY25fY2FsbGJhY2spOw0KKwlpZiAoZXJyKSB7DQorCQljbl9xdWV1ZV9mcmVlX2RldihkZXYt PmNiZGV2KTsNCisJCWlmIChkZXYtPm5scy0+c2tfc29ja2V0KQ0KKwkJCXNvY2tfcmVsZWFzZShk ZXYtPm5scy0+c2tfc29ja2V0KTsNCisJCXJldHVybiAtRUlOVkFMOw0KKwl9DQorDQorCWNuX2Fs cmVhZHlfaW5pdGlhbGl6ZWQgPSAxOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIHZv aWQgY25fZmluaSh2b2lkKQ0KK3sNCisJc3RydWN0IGNuX2RldiAqZGV2ID0gJmNkZXY7DQorDQor CWNuX2RlbF9jYWxsYmFjaygmZGV2LT5pZCk7DQorCWNuX3F1ZXVlX2ZyZWVfZGV2KGRldi0+Y2Jk ZXYpOw0KKwlpZiAoZGV2LT5ubHMtPnNrX3NvY2tldCkNCisJCXNvY2tfcmVsZWFzZShkZXYtPm5s cy0+c2tfc29ja2V0KTsNCit9DQorDQorbW9kdWxlX2luaXQoY25faW5pdCk7DQorbW9kdWxlX2V4 aXQoY25fZmluaSk7DQorDQorRVhQT1JUX1NZTUJPTF9HUEwoY25fYWRkX2NhbGxiYWNrKTsNCitF WFBPUlRfU1lNQk9MX0dQTChjbl9kZWxfY2FsbGJhY2spOw0KK0VYUE9SVF9TWU1CT0xfR1BMKGNu X25ldGxpbmtfc2VuZCk7DQotLS0gL2Rldi9udWxsCTIwMDQtMDktMTcgMjE6NDY6MDMuMDAwMDAw MDAwICswNDAwDQorKysgbGludXgtMi42L2luY2x1ZGUvbGludXgvY29ubmVjdG9yLmgJMjAwNS0w MS0xMyAwMDo1MzoyMS4wMDAwMDAwMDAgKzAzMDANCkBAIC0wLDAgKzEsMTQ3IEBADQorLyoNCisg KiAJY29ubmVjdG9yLmgNCisgKiANCisgKiAyMDA0IENvcHlyaWdodCAoYykgRXZnZW5peSBQb2x5 YWtvdiA8am9obnBvbEAya2EubWlwdC5ydT4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyAq IA0KKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5DQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkNCisgKiB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcg0KKyAqIChh dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQorICoNCisgKiBUaGlzIHByb2dyYW0g aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCisgKiBi dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZg0KKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gIFNlZSB0aGUNCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk ZXRhaWxzLg0KKyAqDQorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UNCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsg aWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQ0KKyAqIEZvdW5kYXRpb24sIEluYy4s IDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EN CisgKi8NCisNCisjaWZuZGVmIF9fQ09OTkVDVE9SX0gNCisjZGVmaW5lIF9fQ09OTkVDVE9SX0gN CisNCisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+DQorDQorI2RlZmluZSBDTl9JRFhfS09CSkVDVF9V RVZFTlQJCTB4YWJjZA0KKyNkZWZpbmUgQ05fVkFMX0tPQkpFQ1RfVUVWRU5UCQkweDAwMDANCisN CisjZGVmaW5lIENPTk5FQ1RPUl9NQVhfTVNHX1NJWkUgCTEwMjQNCisNCitzdHJ1Y3QgY2JfaWQN Cit7DQorCV9fdTMyCQkJaWR4Ow0KKwlfX3UzMgkJCXZhbDsNCit9Ow0KKw0KK3N0cnVjdCBjbl9t c2cNCit7DQorCXN0cnVjdCBjYl9pZCAJCWlkOw0KKw0KKwlfX3UzMgkJCXNlcTsNCisJX191MzIJ CQlhY2s7DQorDQorCV9fdTMyCQkJbGVuOwkJLyogTGVuZ3RoIG9mIHRoZSBmb2xsb3dpbmcgZGF0 YSAqLw0KKwlfX3U4CQkJZGF0YVswXTsNCit9Ow0KKw0KK3N0cnVjdCBjbl9ub3RpZnlfcmVxDQor ew0KKwlfX3UzMgkJCWZpcnN0Ow0KKwlfX3UzMgkJCXJhbmdlOw0KK307DQorDQorc3RydWN0IGNu X2N0bF9tc2cNCit7DQorCV9fdTMyCQkJaWR4X25vdGlmeV9udW07DQorCV9fdTMyCQkJdmFsX25v dGlmeV9udW07DQorCV9fdTMyCQkJZ3JvdXA7DQorCV9fdTMyCQkJbGVuOw0KKwlfX3U4CQkJZGF0 YVswXTsNCit9Ow0KKw0KKw0KKyNpZmRlZiBfX0tFUk5FTF9fDQorDQorI2luY2x1ZGUgPGFzbS9h dG9taWMuaD4NCisNCisjaW5jbHVkZSA8bGludXgvbGlzdC5oPg0KKyNpbmNsdWRlIDxsaW51eC93 b3JrcXVldWUuaD4NCisNCisjaW5jbHVkZSA8bmV0L3NvY2suaD4NCisNCisjZGVmaW5lIENOX0NC UV9OQU1FTEVOCQkzMg0KKw0KK3N0cnVjdCBjbl9xdWV1ZV9kZXYNCit7DQorCWF0b21pY190CQly ZWZjbnQ7DQorCXVuc2lnbmVkIGNoYXIJCW5hbWVbQ05fQ0JRX05BTUVMRU5dOw0KKw0KKwlzdHJ1 Y3Qgd29ya3F1ZXVlX3N0cnVjdAkqY25fcXVldWU7DQorCQ0KKwlzdHJ1Y3QgbGlzdF9oZWFkIAlx dWV1ZV9saXN0Ow0KKwlzcGlubG9ja190IAkJcXVldWVfbG9jazsNCisNCisJaW50CQkJbmV0bGlu a19ncm91cHM7DQorCXN0cnVjdCBzb2NrCQkqbmxzOw0KK307DQorDQorc3RydWN0IGNuX2NhbGxi YWNrDQorew0KKwl1bnNpZ25lZCBjaGFyCQluYW1lW0NOX0NCUV9OQU1FTEVOXTsNCisJDQorCXN0 cnVjdCBjYl9pZAkJaWQ7DQorCXZvaWQJCQkoKiBjYWxsYmFjaykodm9pZCAqKTsNCisJdm9pZAkJ CSpwcml2Ow0KKwkNCisJYXRvbWljX3QJCXJlZmNudDsNCit9Ow0KKw0KK3N0cnVjdCBjbl9jYWxs YmFja19lbnRyeQ0KK3sNCisJc3RydWN0IGxpc3RfaGVhZAljYWxsYmFja19lbnRyeTsNCisJc3Ry dWN0IGNuX2NhbGxiYWNrCSpjYjsNCisJc3RydWN0IHdvcmtfc3RydWN0CXdvcms7DQorCXN0cnVj dCBjbl9xdWV1ZV9kZXYJKnBkZXY7DQorCQ0KKwl2b2lkCQkJKCogZGVzdHJ1Y3RfZGF0YSkodm9p ZCAqKTsNCisJdm9pZAkJCSpkZGF0YTsNCisNCisJaW50CQkJc2VxLCBncm91cDsNCisJc3RydWN0 IHNvY2sJCSpubHM7DQorfTsNCisNCitzdHJ1Y3QgY25fY3RsX2VudHJ5DQorew0KKwlzdHJ1Y3Qg bGlzdF9oZWFkCW5vdGlmeV9lbnRyeTsNCisJc3RydWN0IGNuX2N0bF9tc2cJKm1zZzsNCit9Ow0K Kw0KK3N0cnVjdCBjbl9kZXYNCit7DQorCXN0cnVjdCBjYl9pZCAJCWlkOw0KKw0KKwl1MzIJCQlz ZXEsIGdyb3VwczsNCisJc3RydWN0IHNvY2sgCQkqbmxzOw0KKwl2b2lkIAkJCSgqaW5wdXQpKHN0 cnVjdCBzb2NrICpzaywgaW50IGxlbik7DQorDQorCXN0cnVjdCBjbl9xdWV1ZV9kZXYJKmNiZGV2 Ow0KK307DQorDQorZXh0ZXJuIGludCBjbl9hbHJlYWR5X2luaXRpYWxpemVkOw0KKw0KK2ludCBj bl9hZGRfY2FsbGJhY2soc3RydWN0IGNiX2lkICosIGNoYXIgKiwgdm9pZCAoKiBjYWxsYmFjayko dm9pZCAqKSk7DQordm9pZCBjbl9kZWxfY2FsbGJhY2soc3RydWN0IGNiX2lkICopOw0KK3ZvaWQg Y25fbmV0bGlua19zZW5kKHN0cnVjdCBjbl9tc2cgKiwgdTMyKTsNCisNCitpbnQgY25fcXVldWVf YWRkX2NhbGxiYWNrKHN0cnVjdCBjbl9xdWV1ZV9kZXYgKmRldiwgc3RydWN0IGNuX2NhbGxiYWNr ICpjYik7DQordm9pZCBjbl9xdWV1ZV9kZWxfY2FsbGJhY2soc3RydWN0IGNuX3F1ZXVlX2RldiAq ZGV2LCBzdHJ1Y3QgY25fY2FsbGJhY2sgKmNiKTsNCisNCitzdHJ1Y3QgY25fcXVldWVfZGV2ICpj bl9xdWV1ZV9hbGxvY19kZXYoY2hhciAqbmFtZSwgc3RydWN0IHNvY2sgKik7DQordm9pZCBjbl9x dWV1ZV9mcmVlX2RldihzdHJ1Y3QgY25fcXVldWVfZGV2ICpkZXYpOw0KKw0KK2ludCBjbl9jYl9l cXVhbChzdHJ1Y3QgY2JfaWQgKiwgc3RydWN0IGNiX2lkICopOw0KKw0KKyNlbmRpZiAvKiBfX0tF Uk5FTF9fICovDQorI2VuZGlmIC8qIF9fQ09OTkVDVE9SX0ggKi8NCg== --=-M+NLWiU6r7zHI0pbmWkP-- --=-oym2Evb7XEXRiOR7COfz Content-Type: application/pgp-signature; name=signature.asc Content-Description: This is a digitally signed message part -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.6 (GNU/Linux) iD8DBQBB50twIKTPhE+8wY0RArl/AJ0YQp1d1EwhYRkUMtwWoOfeYEqcKQCgio3W 2v2JmxOKdcSfAt/EkrZtqwk= =AtRc -----END PGP SIGNATURE----- --=-oym2Evb7XEXRiOR7COfz-- - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/