From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Mallick, Asit K" Date: Thu, 22 May 2003 21:55:36 +0000 Subject: RE: [Linux-ia64] High fpu register corruption (PATCH) MIME-Version: 1 Content-Type: multipart/mixed; boundary="----_=_NextPart_001_01C320AC.E053C67C" Message-Id: List-Id: References: In-Reply-To: To: linux-ia64@vger.kernel.org This is a multi-part message in MIME format. ------_=_NextPart_001_01C320AC.E053C67C Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Attached is a patch to fix the high FPU corruption (thanks to Andreas and Chris). This patch also unifies the FPU save/restore for SMP and UP and also fixes another problem with FPH save/restore path due to an unaligned fault. Sorry for the delay. This patch based on 2.4.21-rc2 (latest bktree). Thanks, Asit > From: Mallick, Asit K > Sent: Thursday, May 08, 2003 10:14 AM > To: davidm@hpl.hp.com; Andreas Schwab > Cc: linux-ia64@linuxia64.org; Chris Mason > Subject: RE: [Linux-ia64] High fpu register corruption >=20 > David, >=20 > The save part in the context switch also needs to be fixed and we will > take a look at this. > Thanks, > Asit >=20 >=20 > > -----Original Message----- > > From: David Mosberger [mailto:davidm@napali.hpl.hp.com] > > Sent: Thursday, May 08, 2003 10:03 AM > > To: Andreas Schwab > > Cc: linux-ia64@linuxia64.org; Chris Mason > > Subject: Re: [Linux-ia64] High fpu register corruption > > > > >>>>> On Thu, 08 May 2003 16:16:13 +0200, Andreas Schwab > > > said: > > > > Andreas> When a process clears the psr.mfh bit after using the high > > Andreas> fpu registers and then starts using them again it can > > Andreas> corrupt the fpu state of another process. In order for > > Andreas> this to happen there must be some context switches > > Andreas> inbetween (thanks to Chris Mason for tracking this down): > > > > Ah, _now_ it makes sense. I got a similar bug report yesterday, but > > it claimed the _old_ (2.4.19) context switch was breaking and the > > new one (2.4.20) was fine. When I looked at the old code, I couldn't > > find anythign wrong with it. > > > > Andreas> + } else if (ia64_get_fpu_owner() !=3D next) > \ > > Andreas> + ia64_psr(ia64_task_regs(next))->dfh =3D 1; > \ > > > > I suspect what we really want to do here is something along the lines > > of: > > > > Andreas> + ia64_psr(ia64_task_regs(next))->dfh =3D > > (ia64_get_fpu_owner() !=3D next); \ > > > > This expresses the invariant we're after: the next thread has DFH set > > unless it owns the FPH partition. IIRC, this is what the UP code does > > already. > > > > --david > > > > _______________________________________________ > > Linux-IA64 mailing list > > Linux-IA64@linuxia64.org > > http://lists.linuxia64.org/lists/listinfo/linux-ia64 >=20 > _______________________________________________ > Linux-IA64 mailing list > Linux-IA64@linuxia64.org > http://lists.linuxia64.org/lists/listinfo/linux-ia64 ------_=_NextPart_001_01C320AC.E053C67C Content-Type: text/plain; name="lazyfp1_7-24.txt" Content-Transfer-Encoding: base64 Content-Description: lazyfp1_7-24.txt Content-Disposition: attachment; filename="lazyfp1_7-24.txt" IyBUaGlzIGlzIGEgQml0S2VlcGVyIGdlbmVyYXRlZCBwYXRjaCBmb3IgdGhlIGZvbGxvd2luZyBw cm9qZWN0Og0KIyBQcm9qZWN0IE5hbWU6IExpbnV4IGtlcm5lbCB0cmVlDQojIFRoaXMgcGF0Y2gg Zm9ybWF0IGlzIGludGVuZGVkIGZvciBHTlUgcGF0Y2ggY29tbWFuZCB2ZXJzaW9uIDIuNSBvciBo aWdoZXIuDQojIFRoaXMgcGF0Y2ggaW5jbHVkZXMgdGhlIGZvbGxvd2luZyBkZWx0YXM6DQojCSAg ICAgICAgICAgQ2hhbmdlU2V0CTEuMTEzMCAgLT4gMS4xMTMzIA0KIwlhcmNoL2lhNjQva2VybmVs L3NldHVwLmMJMS4xMiAgICAtPiAxLjE0ICAgDQojCWluY2x1ZGUvYXNtLWlhNjQvcHJvY2Vzc29y LmgJMS4xOSAgICAtPiAxLjIxICAgDQojCWluY2x1ZGUvYXNtLWlhNjQvc3lzdGVtLmgJMS4xOCAg ICAtPiAxLjE5ICAgDQojCWFyY2gvaWE2NC9rZXJuZWwvcHJvY2Vzcy5jCTEuMTggICAgLT4gMS4x OSAgIA0KIwlhcmNoL2lhNjQva2VybmVsL3NpZ25hbC5jCTEuMTQgICAgLT4gMS4xNSAgIA0KIwlh cmNoL2lhNjQva2VybmVsL3RyYXBzLmMJMS4xMyAgICAtPiAxLjE1ICAgDQojCWFyY2gvaWE2NC9r ZXJuZWwvcHRyYWNlLmMJMS4xNyAgICAtPiAxLjE5ICAgDQojDQojIFRoZSBmb2xsb3dpbmcgaXMg dGhlIEJpdEtlZXBlciBDaGFuZ2VTZXQgTG9nDQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tDQojIDAzLzA1LzIxCWFkc2hhcm1hQGxpbnV4LXQwOC4obm9uZSkJ MS4xMTMxDQojIGxhenlmcDEuNS0yNA0KIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQ0KIyAwMy8wNS8yMQlhZHNoYXJtYUBsaW51eC10MDguKG5vbmUpCTEuMTEz Mg0KIyBmcGggY29ycnVwdGlvbiBmaXgNCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0NCiMgMDMvMDUvMjIJYWRzaGFybWFAbGludXgtdDA4Lihub25lKQkxLjEx MzMNCiMgVVAgZml4ZXMNCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0NCiMNCmRpZmYgLU5ydSBhL2FyY2gvaWE2NC9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9p YTY0L2tlcm5lbC9wcm9jZXNzLmMNCi0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvcHJvY2Vzcy5jCVRo dSBNYXkgMjIgMTQ6MjU6MTMgMjAwMw0KKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9wcm9jZXNzLmMJ VGh1IE1heSAyMiAxNDoyNToxMyAyMDAzDQpAQCAtMzMzLDYgKzMzMyw3IEBADQogIwlkZWZpbmUg VEhSRUFEX0ZMQUdTX1RPX1NFVAkwDQogCXAtPnRocmVhZC5mbGFncyA9ICgoY3VycmVudC0+dGhy ZWFkLmZsYWdzICYgflRIUkVBRF9GTEFHU19UT19DTEVBUikNCiAJCQkgICB8IFRIUkVBRF9GTEFH U19UT19TRVQpOw0KKwlpYTY0X2Ryb3BfZnB1KHApOwkvKiBkb24ndCBwaWNrIHVwIHN0YWxlIHN0 YXRlIGZyb20gYSBDUFUncyBmcGggKi8NCiAjaWZkZWYgQ09ORklHX0lBMzJfU1VQUE9SVA0KIAkv Kg0KIAkgKiBJZiB3ZSdyZSBjbG9uaW5nIGFuIElBMzIgdGFzayB0aGVuIHNhdmUgdGhlIElBMzIg ZXh0cmENCkBAIC01MTcsMTEgKzUxOCw3IEBADQogew0KIAkvKiBkcm9wIGZsb2F0aW5nLXBvaW50 IGFuZCBkZWJ1Zy1yZWdpc3RlciBzdGF0ZSBpZiBpdCBleGlzdHM6ICovDQogCWN1cnJlbnQtPnRo cmVhZC5mbGFncyAmPSB+KElBNjRfVEhSRUFEX0ZQSF9WQUxJRCB8IElBNjRfVEhSRUFEX0RCR19W QUxJRCk7DQotDQotI2lmbmRlZiBDT05GSUdfU01QDQotCWlmIChpYTY0X2dldF9mcHVfb3duZXIo KSA9PSBjdXJyZW50KQ0KLQkJaWE2NF9zZXRfZnB1X293bmVyKDApOw0KLSNlbmRpZg0KKwlpYTY0 X2Ryb3BfZnB1KGN1cnJlbnQpOw0KIH0NCiANCiAjaWZkZWYgQ09ORklHX1BFUkZNT04NCkBAIC01 NTksMTAgKzU1Niw3IEBADQogdm9pZA0KIGV4aXRfdGhyZWFkICh2b2lkKQ0KIHsNCi0jaWZuZGVm IENPTkZJR19TTVANCi0JaWYgKGlhNjRfZ2V0X2ZwdV9vd25lcigpID09IGN1cnJlbnQpDQotCQlp YTY0X3NldF9mcHVfb3duZXIoMCk7DQotI2VuZGlmDQorCWlhNjRfZHJvcF9mcHUoY3VycmVudCk7 DQogI2lmZGVmIENPTkZJR19QRVJGTU9ODQogICAgICAgIC8qIHN0b3AgbW9uaXRvcmluZyAqLw0K IAlpZiAoY3VycmVudC0+dGhyZWFkLnBmbV9jb250ZXh0KQ0KZGlmZiAtTnJ1IGEvYXJjaC9pYTY0 L2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvaWE2NC9rZXJuZWwvcHRyYWNlLmMNCi0tLSBhL2FyY2gv aWE2NC9rZXJuZWwvcHRyYWNlLmMJVGh1IE1heSAyMiAxNDoyNToxMyAyMDAzDQorKysgYi9hcmNo L2lhNjQva2VybmVsL3B0cmFjZS5jCVRodSBNYXkgMjIgMTQ6MjU6MTMgMjAwMw0KQEAgLTU5Nywx NiArNTk3LDExIEBADQogaWE2NF9mbHVzaF9mcGggKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykN CiB7DQogCXN0cnVjdCBpYTY0X3BzciAqcHNyID0gaWE2NF9wc3IoaWE2NF90YXNrX3JlZ3ModGFz aykpOw0KLSNpZmRlZiBDT05GSUdfU01QDQotCXN0cnVjdCB0YXNrX3N0cnVjdCAqZnB1X293bmVy ID0gY3VycmVudDsNCi0jZWxzZQ0KLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmZwdV9vd25lciA9IGlh NjRfZ2V0X2ZwdV9vd25lcigpOw0KLSNlbmRpZg0KIA0KLQlpZiAodGFzayA9PSBmcHVfb3duZXIg JiYgcHNyLT5tZmgpIHsNCisJaWYgKGlhNjRfaXNfbG9jYWxfZnB1X293bmVyKHRhc2spICYmIHBz ci0+bWZoKSB7DQogCQlwc3ItPm1maCA9IDA7DQotCQlpYTY0X3NhdmVfZnB1KCZ0YXNrLT50aHJl YWQuZnBoWzBdKTsNCiAJCXRhc2stPnRocmVhZC5mbGFncyB8PSBJQTY0X1RIUkVBRF9GUEhfVkFM SUQ7DQorCQlpYTY0X3NhdmVfZnB1KCZ0YXNrLT50aHJlYWQuZnBoWzBdKTsNCiAJfQ0KIH0NCiAN CkBAIC02MjgsMTAgKzYyMyw3IEBADQogCQl0YXNrLT50aHJlYWQuZmxhZ3MgfD0gSUE2NF9USFJF QURfRlBIX1ZBTElEOw0KIAkJbWVtc2V0KCZ0YXNrLT50aHJlYWQuZnBoLCAwLCBzaXplb2YodGFz ay0+dGhyZWFkLmZwaCkpOw0KIAl9DQotI2lmbmRlZiBDT05GSUdfU01QDQotCWlmIChpYTY0X2dl dF9mcHVfb3duZXIoKSA9PSB0YXNrKQ0KLQkJaWE2NF9zZXRfZnB1X293bmVyKDApOw0KLSNlbmRp Zg0KKwlpYTY0X2Ryb3BfZnB1KHRhc2spOw0KIAlwc3ItPmRmaCA9IDE7DQogfQ0KIA0KZGlmZiAt TnJ1IGEvYXJjaC9pYTY0L2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9pYTY0L2tlcm5lbC9zZXR1cC5j DQotLS0gYS9hcmNoL2lhNjQva2VybmVsL3NldHVwLmMJVGh1IE1heSAyMiAxNDoyNToxMyAyMDAz DQorKysgYi9hcmNoL2lhNjQva2VybmVsL3NldHVwLmMJVGh1IE1heSAyMiAxNDoyNToxMyAyMDAz DQpAQCAtNjE5LDYgKzYxOSw4IEBADQogCS8qIENsZWFyIHRoZSBzdGFjayBtZW1vcnkgcmVzZXJ2 ZWQgZm9yIHB0X3JlZ3M6ICovDQogCW1lbXNldChpYTY0X3Rhc2tfcmVncyhjdXJyZW50KSwgMCwg c2l6ZW9mKHN0cnVjdCBwdF9yZWdzKSk7DQogDQorCWlhNjRfc2V0X2tyKElBNjRfS1JfRlBVX09X TkVSLCAwKTsNCisNCiAJLyoNCiAJICogSW5pdGlhbGl6ZSBkZWZhdWx0IGNvbnRyb2wgcmVnaXN0 ZXIgdG8gZGVmZXIgYWxsIHNwZWN1bGF0aXZlIGZhdWx0cy4gIFRoZQ0KIAkgKiBrZXJuZWwgTVVT VCBOT1QgZGVwZW5kIG9uIGEgcGFydGljdWxhciBzZXR0aW5nIG9mIHRoZXNlIGJpdHMgKGluIG90 aGVyIHdvcmRzLA0KQEAgLTYyOSwxMCArNjMxLDYgQEANCiAJICovDQogCWlhNjRfc2V0X2Rjcigg IElBNjRfRENSX0RQIHwgSUE2NF9EQ1JfREsgfCBJQTY0X0RDUl9EWCB8IElBNjRfRENSX0RSDQog CQkgICAgIHwgSUE2NF9EQ1JfREEgfCBJQTY0X0RDUl9ERCB8IElBNjRfRENSX0xDKTsNCi0jaWZu ZGVmIENPTkZJR19TTVANCi0JaWE2NF9zZXRfZnB1X293bmVyKDApOw0KLSNlbmRpZg0KLQ0KIAlh dG9taWNfaW5jKCZpbml0X21tLm1tX2NvdW50KTsNCiAJY3VycmVudC0+YWN0aXZlX21tID0gJmlu aXRfbW07DQogDQpkaWZmIC1OcnUgYS9hcmNoL2lhNjQva2VybmVsL3NpZ25hbC5jIGIvYXJjaC9p YTY0L2tlcm5lbC9zaWduYWwuYw0KLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9zaWduYWwuYwlUaHUg TWF5IDIyIDE0OjI1OjEzIDIwMDMNCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvc2lnbmFsLmMJVGh1 IE1heSAyMiAxNDoyNToxMyAyMDAzDQpAQCAtMTQyLDggKzE0MiwxMiBAQA0KIA0KIAkJX19jb3B5 X2Zyb21fdXNlcihjdXJyZW50LT50aHJlYWQuZnBoLCAmc2MtPnNjX2ZyWzMyXSwgOTYqMTYpOw0K IAkJcHNyLT5tZmggPSAwOwkvKiBkcm9wIHNpZ25hbCBoYW5kbGVyJ3MgZnBoIGNvbnRlbnRzLi4u ICovDQotCQlpZiAoIXBzci0+ZGZoKQ0KKwkJaWYgKCFwc3ItPmRmaCkgew0KIAkJCV9faWE2NF9s b2FkX2ZwdShjdXJyZW50LT50aHJlYWQuZnBoKTsNCisJCQlpYTY0X3NldF9sb2NhbF9mcHVfb3du ZXIoY3VycmVudCk7DQorCQl9IGVsc2Ugew0KKwkJCWlhNjRfZHJvcF9mcHUoY3VycmVudCk7DQor CQl9DQogCX0NCiAJcmV0dXJuIGVycjsNCiB9DQpkaWZmIC1OcnUgYS9hcmNoL2lhNjQva2VybmVs L3RyYXBzLmMgYi9hcmNoL2lhNjQva2VybmVsL3RyYXBzLmMNCi0tLSBhL2FyY2gvaWE2NC9rZXJu ZWwvdHJhcHMuYwlUaHUgTWF5IDIyIDE0OjI1OjEzIDIwMDMNCisrKyBiL2FyY2gvaWE2NC9rZXJu ZWwvdHJhcHMuYwlUaHUgTWF5IDIyIDE0OjI1OjEzIDIwMDMNCkBAIC0yNDUsOSArMjQ1LDkgQEAN CiAJcHNyLT5kZmggPSAwOw0KICNpZm5kZWYgQ09ORklHX1NNUA0KIAl7DQotCQlzdHJ1Y3QgdGFz a19zdHJ1Y3QgKmZwdV9vd25lciA9IGlhNjRfZ2V0X2ZwdV9vd25lcigpOw0KKwkJc3RydWN0IHRh c2tfc3RydWN0ICpmcHVfb3duZXIgPSAoc3RydWN0IHRhc2tfc3RydWN0ICopaWE2NF9nZXRfa3Io SUE2NF9LUl9GUFVfT1dORVIpOw0KIA0KLQkJaWYgKGZwdV9vd25lciA9PSBjdXJyZW50KQ0KKwkJ aWYgKGlhNjRfaXNfbG9jYWxfZnB1X293bmVyKGN1cnJlbnQpKQ0KIAkJCXJldHVybjsNCiANCiAJ CWlmIChmcHVfb3duZXIpDQpAQCAtMjU1LDcgKzI1NSw3IEBADQogDQogCX0NCiAjZW5kaWYgLyog IUNPTkZJR19TTVAgKi8NCi0JaWE2NF9zZXRfZnB1X293bmVyKGN1cnJlbnQpOw0KKwlpYTY0X3Nl dF9sb2NhbF9mcHVfb3duZXIoY3VycmVudCk7DQogCWlmICgoY3VycmVudC0+dGhyZWFkLmZsYWdz ICYgSUE2NF9USFJFQURfRlBIX1ZBTElEKSAhPSAwKSB7DQogCQlfX2lhNjRfbG9hZF9mcHUoY3Vy cmVudC0+dGhyZWFkLmZwaCk7DQogCQlwc3ItPm1maCA9IDA7DQpkaWZmIC1OcnUgYS9pbmNsdWRl L2FzbS1pYTY0L3Byb2Nlc3Nvci5oIGIvaW5jbHVkZS9hc20taWE2NC9wcm9jZXNzb3IuaA0KLS0t IGEvaW5jbHVkZS9hc20taWE2NC9wcm9jZXNzb3IuaAlUaHUgTWF5IDIyIDE0OjI1OjEzIDIwMDMN CisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvcHJvY2Vzc29yLmgJVGh1IE1heSAyMiAxNDoyNToxMyAy MDAzDQpAQCAtMzAyLDcgKzMwMiw4IEBADQogCUlOSVRfVEhSRUFEX1BNCQkJCQlcDQogCXswLCB9 LAkJCQkvKiBkYnIgKi8JXA0KIAl7MCwgfSwJCQkJLyogaWJyICovCVwNCi0Je3t7ezB9fX0sIH0J CQkvKiBmcGggKi8JXA0KKwl7e3t7MH19fSwgfSwJCQkvKiBmcGggKi8JXA0KKwktMQkJCQkvKiBs YXN0X2ZwaF9jcHUqLwlcDQogfQ0KIA0KICNkZWZpbmUgc3RhcnRfdGhyZWFkKHJlZ3MsbmV3X2lw LG5ld19zcCkgZG8gewkJCQkJCQlcDQpAQCAtNDI2LDE3ICs0MjcsMTYgQEANCiAJfQ0KIH0NCiAN Ci1zdGF0aWMgaW5saW5lIHN0cnVjdCB0YXNrX3N0cnVjdCAqDQotaWE2NF9nZXRfZnB1X293bmVy ICh2b2lkKQ0KLXsNCi0JcmV0dXJuIChzdHJ1Y3QgdGFza19zdHJ1Y3QgKikgaWE2NF9nZXRfa3Io SUE2NF9LUl9GUFVfT1dORVIpOw0KLX0NCisjZGVmaW5lIGlhNjRfaXNfbG9jYWxfZnB1X293bmVy KHQpCSgoKHQpLT50aHJlYWQubGFzdF9mcGhfY3B1ID09IHNtcF9wcm9jZXNzb3JfaWQoKSkgJiYg XA0KKwkJCSgodCkgPT0gKHN0cnVjdCB0YXNrX3N0cnVjdCAqKWlhNjRfZ2V0X2tyKElBNjRfS1Jf RlBVX09XTkVSKSkpCQkNCiANCi1zdGF0aWMgaW5saW5lIHZvaWQNCi1pYTY0X3NldF9mcHVfb3du ZXIgKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCkNCi17DQotCWlhNjRfc2V0X2tyKElBNjRfS1JfRlBV X09XTkVSLCAodW5zaWduZWQgbG9uZykgdCk7DQotfQ0KKyNkZWZpbmUgaWE2NF9zZXRfbG9jYWxf ZnB1X293bmVyKHQpCWRvIHsJCQlcDQorCXQtPnRocmVhZC5sYXN0X2ZwaF9jcHUgPSBzbXBfcHJv Y2Vzc29yX2lkKCk7CQlcDQorCWlhNjRfc2V0X2tyKElBNjRfS1JfRlBVX09XTkVSLCAodW5zaWdu ZWQgbG9uZykgKHQpKTsJXA0KK30gd2hpbGUoMCkNCisNCisvKiBNYXJrIHRoZSBmcGggcGFydGl0 aW9uIG9mIHRhc2sgVCBhcyBiZWluZyBpbnZhbGlkIG9uIGFsbCBDUFVzLiAgKi8NCisjZGVmaW5l IGlhNjRfZHJvcF9mcHUodCkJKCh0KS0+dGhyZWFkLmxhc3RfZnBoX2NwdSA9IC0xKQ0KIA0KIGV4 dGVybiB2b2lkIF9faWE2NF9pbml0X2ZwdSAodm9pZCk7DQogZXh0ZXJuIHZvaWQgX19pYTY0X3Nh dmVfZnB1IChzdHJ1Y3QgaWE2NF9mcHJlZyAqZnBoKTsNCmRpZmYgLU5ydSBhL2luY2x1ZGUvYXNt LWlhNjQvc3lzdGVtLmggYi9pbmNsdWRlL2FzbS1pYTY0L3N5c3RlbS5oDQotLS0gYS9pbmNsdWRl L2FzbS1pYTY0L3N5c3RlbS5oCVRodSBNYXkgMjIgMTQ6MjU6MTMgMjAwMw0KKysrIGIvaW5jbHVk ZS9hc20taWE2NC9zeXN0ZW0uaAlUaHUgTWF5IDIyIDE0OjI1OjEzIDIwMDMNCkBAIC0yNDQsMTMg KzI0NCwxNiBAQA0KICMgZGVmaW5lIFBFUkZNT05fSVNfU1lTV0lERSgpICgwKQ0KICNlbmRpZg0K IA0KKyNkZWZpbmUgSUE2NF9IQVNfRVhUUkFfU1RBVEUodCkgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisJKCh0KS0+dGhyZWFkLmZsYWdz ICYgKElBNjRfVEhSRUFEX0RCR19WQUxJRHxJQTY0X1RIUkVBRF9QTV9WQUxJRCkgICAgICAgXA0K Kwl8fCBJU19JQTMyX1BST0NFU1MoaWE2NF90YXNrX3JlZ3ModCkpIHx8IFBFUkZNT05fSVNfU1lT V0lERSgpKQ0KKw0KICNkZWZpbmUgX19zd2l0Y2hfdG8ocHJldixuZXh0LGxhc3QpIGRvIHsJCQkJ CQlcDQotCWlmICgoKHByZXYpLT50aHJlYWQuZmxhZ3MgJiAoSUE2NF9USFJFQURfREJHX1ZBTElE fElBNjRfVEhSRUFEX1BNX1ZBTElEKSkJXA0KLQkgICAgfHwgSVNfSUEzMl9QUk9DRVNTKGlhNjRf dGFza19yZWdzKHByZXYpKSB8fCBQRVJGTU9OX0lTX1NZU1dJREUoKSkJXA0KLQkJaWE2NF9zYXZl X2V4dHJhKHByZXYpOwkJCQkJCQlcDQotCWlmICgoKG5leHQpLT50aHJlYWQuZmxhZ3MgJiAoSUE2 NF9USFJFQURfREJHX1ZBTElEfElBNjRfVEhSRUFEX1BNX1ZBTElEKSkJXA0KLQkgICAgfHwgSVNf SUEzMl9QUk9DRVNTKGlhNjRfdGFza19yZWdzKG5leHQpKSB8fCBQRVJGTU9OX0lTX1NZU1dJREUo KSkJXA0KKwlpZiAoSUE2NF9IQVNfRVhUUkFfU1RBVEUocHJldikpCQkJCQkJCVwNCisJCWlhNjRf c2F2ZV9leHRyYShwcmV2KTsgCQkJCQkJCVwNCisJaWYgKElBNjRfSEFTX0VYVFJBX1NUQVRFKG5l eHQpKQkJCQkJCQlcDQogCQlpYTY0X2xvYWRfZXh0cmEobmV4dCk7CQkJCQkJCVwNCisJaWE2NF9w c3IoaWE2NF90YXNrX3JlZ3MobmV4dCkpLT5kZmggPSAhaWE2NF9pc19sb2NhbF9mcHVfb3duZXIo bmV4dCk7CQlcDQogCShsYXN0KSA9IGlhNjRfc3dpdGNoX3RvKChuZXh0KSk7CQkJCQkJXA0KIH0g d2hpbGUgKDApDQogDQpAQCAtMjYwLDM1ICsyNjMsMjEgQEANCiAjZGVmaW5lIGFyY2hfY29uc29s ZXNfY2FsbGFibGUoKSAoY3B1X29ubGluZV9tYXAgJiAoMVVMIDw8IHNtcF9wcm9jZXNzb3JfaWQo KSkpDQogDQogLyoNCi0gKiBJbiB0aGUgU01QIGNhc2UsIHdlIHNhdmUgdGhlIGZwaCBzdGF0ZSB3 aGVuIGNvbnRleHQtc3dpdGNoaW5nDQotICogYXdheSBmcm9tIGEgdGhyZWFkIHRoYXQgbW9kaWZp ZWQgZnBoLiAgVGhpcyB3YXksIHdoZW4gdGhlIHRocmVhZA0KLSAqIGdldHMgc2NoZWR1bGVkIG9u IGFub3RoZXIgQ1BVLCB0aGUgQ1BVIGNhbiBwaWNrIHVwIHRoZSBzdGF0ZSBmcm9tDQotICogdGFz ay0+dGhyZWFkLmZwaCwgYXZvaWRpbmcgdGhlIGNvbXBsaWNhdGlvbiBvZiBoYXZpbmcgdG8gZmV0 Y2gNCi0gKiB0aGUgbGF0ZXN0IGZwaCBzdGF0ZSBmcm9tIGFub3RoZXIgQ1BVLg0KKyAqIEluIHRo ZSBTTVAgY2FzZSwgd2Ugc2F2ZSB0aGUgZnBoIHN0YXRlIHdoZW4gY29udGV4dC1zd2l0Y2hpbmcg YXdheSBmcm9tIGEgdGhyZWFkIHRoYXQNCisgKiBtb2RpZmllZCBmcGguICBUaGlzIHdheSwgd2hl biB0aGUgdGhyZWFkIGdldHMgc2NoZWR1bGVkIG9uIGFub3RoZXIgQ1BVLCB0aGUgQ1BVIGNhbg0K KyAqIHBpY2sgdXAgdGhlIHN0YXRlIGZyb20gdGFzay0+dGhyZWFkLmZwaCwgYXZvaWRpbmcgdGhl IGNvbXBsaWNhdGlvbiBvZiBoYXZpbmcgdG8gZmV0Y2gNCisgKiB0aGUgbGF0ZXN0IGZwaCBzdGF0 ZSBmcm9tIGFub3RoZXIgQ1BVLiAgSW4gb3RoZXIgd29yZHM6IGVhZ2VyIHNhdmUsIGxhenkgcmVz dG9yZS4NCiAgKi8NCiAjIGRlZmluZSBzd2l0Y2hfdG8ocHJldixuZXh0LGxhc3QpIGRvIHsJCQkJ CVwNCi0JaWYgKGlhNjRfcHNyKGlhNjRfdGFza19yZWdzKHByZXYpKS0+bWZoKSB7CQkJXA0KKyAg CWlmIChpYTY0X3BzcihpYTY0X3Rhc2tfcmVncyhwcmV2KSktPm1maCkgewkJCVwNCiAJCWlhNjRf cHNyKGlhNjRfdGFza19yZWdzKHByZXYpKS0+bWZoID0gMDsJCVwNCiAJCShwcmV2KS0+dGhyZWFk LmZsYWdzIHw9IElBNjRfVEhSRUFEX0ZQSF9WQUxJRDsJCVwNCiAJCV9faWE2NF9zYXZlX2ZwdSgo cHJldiktPnRocmVhZC5mcGgpOwkJCVwNCi0JCShwcmV2KS0+dGhyZWFkLmxhc3RfZnBoX2NwdSA9 IHNtcF9wcm9jZXNzb3JfaWQoKTsJXA0KLQl9CQkJCQkJCQlcDQotCWlmICgobmV4dCktPnRocmVh ZC5mbGFncyAmIElBNjRfVEhSRUFEX0ZQSF9WQUxJRCkgewkJXA0KLQkJaWYgKCgobmV4dCktPnRo cmVhZC5sYXN0X2ZwaF9jcHUgPT0gc21wX3Byb2Nlc3Nvcl9pZCgpKSBcDQotCQkgICAgJiYgKGlh NjRfZ2V0X2ZwdV9vd25lcigpID09IG5leHQpKSB7CQlcDQotCQkJaWE2NF9wc3IoaWE2NF90YXNr X3JlZ3MobmV4dCkpLT5kZmggPSAwOwlcDQotCQkJaWE2NF9wc3IoaWE2NF90YXNrX3JlZ3MobmV4 dCkpLT5tZmggPSAwOwlcDQotCQl9IGVsc2UgewkJCQkJCVwNCi0JCQlpYTY0X3BzcihpYTY0X3Rh c2tfcmVncyhuZXh0KSktPmRmaCA9IDE7CVwNCi0JCX0JCQkJCQkJXA0KIAl9CQkJCQkJCQlcDQot CV9fc3dpdGNoX3RvKHByZXYsbmV4dCxsYXN0KTsJCQkJCVwNCisJX19zd2l0Y2hfdG8ocHJldiwg bmV4dCwgbGFzdCk7CQkJCQlcDQogICB9IHdoaWxlICgwKQ0KICNlbHNlDQotIyBkZWZpbmUgc3dp dGNoX3RvKHByZXYsbmV4dCxsYXN0KSBkbyB7CQkJCQlcDQotCWlhNjRfcHNyKGlhNjRfdGFza19y ZWdzKG5leHQpKS0+ZGZoID0gKGlhNjRfZ2V0X2ZwdV9vd25lcigpICE9IChuZXh0KSk7CVwNCi0J X19zd2l0Y2hfdG8ocHJldixuZXh0LGxhc3QpOwkJCQkJXA0KLX0gd2hpbGUgKDApDQorIyBkZWZp bmUgc3dpdGNoX3RvKHByZXYsbmV4dCxsYXN0KSBfX3N3aXRjaF90byhwcmV2LG5leHQsbGFzdCkN CiAjZW5kaWYNCiANCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLw0KDQoNCg== ------_=_NextPart_001_01C320AC.E053C67C--