From mboxrd@z Thu Jan 1 00:00:00 1970 From: Erich Focht Date: Fri, 01 Feb 2002 14:45:32 +0000 Subject: [Linux-ia64] O(1) MQ scheduler J9 patch for IA64 MIME-Version: 1 Content-Type: multipart/mixed; boundary="-1916692341-1070470376-1012574197=:6004" Message-Id: List-Id: To: linux-ia64@vger.kernel.org This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime@docserver.cac.washington.edu for more info. ---1916692341-1070470376-1012574197=:6004 Content-Type: TEXT/PLAIN; CHARSET=US-ASCII Content-ID: Hi, please find attached a patch which aplies to linux-2.4.17 + kdb_common + ia64_patch + kdb_ia64 + sched-O1-2.4.17-J9.patch I had to add a function smp_call_function_nowait which sends an IPI and returns immediately in order to get rid of a IA64-specific race condition when the mmu_context wraps around. Now it makes a very stable and fast impression, interactive work is even possible while doing a "hackbench 55" and ping flooding the machine... Tested on 2 CPU BigSur, 4 CPU LION, 16 CPU AzusA. The patch should aply to the K0 version of the scheduler, too. As this isn't out yet for 2.4.17 I couldn't test it. Regards, Erich --- Erich Focht NEC European Supercomputer Systems, European HPC Technology Center ---1916692341-1070470376-1012574197=:6004 Content-Type: TEXT/PLAIN; CHARSET=US-ASCII; NAME="MQO1_ia64kdb-j9f.patch" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: ATTACHMENT; FILENAME="MQO1_ia64kdb-j9f.patch" ZGlmZiAtdXJOIDIuNC4xNy1JQTY0LWtkYi1KOS9hcmNoL2lhNjQva2RiL2tk YmFfYnQuYyAyLjQuMTctSUE2NC1rZGItSjlpYTY0L2FyY2gvaWE2NC9rZGIv a2RiYV9idC5jDQotLS0gMi40LjE3LUlBNjQta2RiLUo5L2FyY2gvaWE2NC9r ZGIva2RiYV9idC5jCVRodSBKYW4gMzEgMTY6NDI6NTEgMjAwMg0KKysrIDIu NC4xNy1JQTY0LWtkYi1KOWlhNjQvYXJjaC9pYTY0L2tkYi9rZGJhX2J0LmMJ VGh1IEphbiAzMSAxODo0MDo0MCAyMDAyDQpAQCAtMTk3LDcgKzE5Nyw3IEBA DQogCX0NCiAjaWZkZWYgQ09ORklHX1NNUA0KIAllbHNlIGlmICh0YXNrX2hh c19jcHUocCkpIHsNCi0JCXN3ID0ga2RiX3N3W3AtPnByb2Nlc3Nvcl07DQor CQlzdyA9IGtkYl9zd1twLT5jcHVdOw0KIAl9DQogI2VuZGlmDQogCWVsc2Ug ew0KZGlmZiAtdXJOIDIuNC4xNy1JQTY0LWtkYi1KOS9hcmNoL2lhNjQva2Vy bmVsL2VudHJ5LlMgMi40LjE3LUlBNjQta2RiLUo5aWE2NC9hcmNoL2lhNjQv a2VybmVsL2VudHJ5LlMNCi0tLSAyLjQuMTctSUE2NC1rZGItSjkvYXJjaC9p YTY0L2tlcm5lbC9lbnRyeS5TCVRodSBKYW4gMzEgMTY6NDI6MjYgMjAwMg0K KysrIDIuNC4xNy1JQTY0LWtkYi1KOWlhNjQvYXJjaC9pYTY0L2tlcm5lbC9l bnRyeS5TCVRodSBKYW4gMzEgMTg6NDA6NDAgMjAwMg0KQEAgLTE2MSw3ICsx NjEsOCBAQA0KIAltb3Ygcjg9cjEzCQkJLy8gcmV0dXJuIHBvaW50ZXIgdG8g cHJldmlvdXNseSBydW5uaW5nIHRhc2sNCiAJbW92IHIxMz1pbjAJCQkvLyBz ZXQgImN1cnJlbnQiIHBvaW50ZXINCiAJOzsNCi0ocDYpCXNzbSBwc3IuaQkJ CS8vIHJlbmFibGUgcHNyLmkgQUZURVIgdGhlIGljIGJpdCBpcyBzZXJpYWxp emVkDQorLy8ocDYpCXNzbSBwc3IuaQkJCS8vIGludGVycnVwdCBkZWxpdmVy eSBzaG91bGQgbm90IGJlIGVuYWJsZWQNCisJCQkJCS8vIHdpdGggdGhlIG5l dyBPKDEpIE1RIHNjaGVkdWxlcg0KIAlET19MT0FEX1NXSVRDSF9TVEFDSw0K IA0KICNpZmRlZiBDT05GSUdfU01QDQpAQCAtMTcwLDcgKzE3MSw4IEBADQog CWJyLnJldC5zcHRrLm1hbnkgcnAJCS8vIGJvb2dpZSBvbiBvdXQgaW4gbmV3 IGNvbnRleHQNCiANCiAubWFwOg0KLQlyc20gcHNyLmkgfCBwc3IuaWMNCisJ Ly9yc20gcHNyLmkgfCBwc3IuaWMNCisJcnNtIHBzci5pYw0KIAltb3ZsIHIy NT1QQUdFX0tFUk5FTA0KIAk7Ow0KIAlzcmx6LmQNCmRpZmYgLXVyTiAyLjQu MTctSUE2NC1rZGItSjkvYXJjaC9pYTY0L2tlcm5lbC9pcnFfaWE2NC5jIDIu NC4xNy1JQTY0LWtkYi1KOWlhNjQvYXJjaC9pYTY0L2tlcm5lbC9pcnFfaWE2 NC5jDQotLS0gMi40LjE3LUlBNjQta2RiLUo5L2FyY2gvaWE2NC9rZXJuZWwv aXJxX2lhNjQuYwlGcmkgTm92ICA5IDIzOjI2OjE3IDIwMDENCisrKyAyLjQu MTctSUE2NC1rZGItSjlpYTY0L2FyY2gvaWE2NC9rZXJuZWwvaXJxX2lhNjQu YwlUaHUgSmFuIDMxIDE4OjQwOjQwIDIwMDINCkBAIC0xNDgsNiArMTQ4LDE0 IEBADQogCWZsYWdzOgkJU0FfSU5URVJSVVBULA0KIAluYW1lOgkJIklQSSIN CiB9Ow0KKw0KK2V4dGVybiB2b2lkIHNtcF90YXNrX21pZ3JhdGlvbl9pbnRl cnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAq cmVncyk7DQorDQorc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gdGFza19taWdy YXRpb25faXJxYWN0aW9uID0gew0KKwloYW5kbGVyOglzbXBfdGFza19taWdy YXRpb25faW50ZXJydXB0LA0KKwlmbGFnczoJCVNBX0lOVEVSUlVQVCwNCisJ bmFtZToJCSJUYXNrIG1pZ3JhdGlvbiINCit9Ow0KICNlbmRpZg0KIA0KIHZv aWQNCkBAIC0xNzIsNiArMTgwLDcgQEANCiAJcmVnaXN0ZXJfcGVyY3B1X2ly cShJQTY0X1NQVVJJT1VTX0lOVF9WRUNUT1IsIE5VTEwpOw0KICNpZmRlZiBD T05GSUdfU01QDQogCXJlZ2lzdGVyX3BlcmNwdV9pcnEoSUE2NF9JUElfVkVD VE9SLCAmaXBpX2lycWFjdGlvbik7DQorCXJlZ2lzdGVyX3BlcmNwdV9pcnEo SUE2NF9UQVNLX01JR1JBVElPTiwgJnRhc2tfbWlncmF0aW9uX2lycWFjdGlv bik7DQogI2VuZGlmDQogCXBsYXRmb3JtX2lycV9pbml0KCk7DQogfQ0KZGlm ZiAtdXJOIDIuNC4xNy1JQTY0LWtkYi1KOS9hcmNoL2lhNjQva2VybmVsL3By b2Nlc3MuYyAyLjQuMTctSUE2NC1rZGItSjlpYTY0L2FyY2gvaWE2NC9rZXJu ZWwvcHJvY2Vzcy5jDQotLS0gMi40LjE3LUlBNjQta2RiLUo5L2FyY2gvaWE2 NC9rZXJuZWwvcHJvY2Vzcy5jCVRodSBKYW4gMzEgMTY6NDI6MjYgMjAwMg0K KysrIDIuNC4xNy1JQTY0LWtkYi1KOWlhNjQvYXJjaC9pYTY0L2tlcm5lbC9w cm9jZXNzLmMJVGh1IEphbiAzMSAxODo0MDo0MCAyMDAyDQpAQCAtMTI1LDkg KzEyNSw2IEBADQogY3B1X2lkbGUgKHZvaWQgKnVudXNlZCkNCiB7DQogCS8q IGVuZGxlc3MgaWRsZSBsb29wIHdpdGggbm8gcHJpb3JpdHkgYXQgYWxsICov DQotCWluaXRfaWRsZSgpOw0KLQljdXJyZW50LT5uaWNlID0gMjA7DQotCWN1 cnJlbnQtPmNvdW50ZXIgPSAtMTAwOw0KIA0KIA0KIAl3aGlsZSAoMSkgew0K QEAgLTEzNiwxMSArMTMzLDEwIEBADQogCQkJbWluX3h0cCgpOw0KICNlbmRp Zg0KIA0KLQkJd2hpbGUgKCFjdXJyZW50LT5uZWVkX3Jlc2NoZWQpIHsNCisJ CWlmICghY3VycmVudC0+bmVlZF9yZXNjaGVkKSB7DQogI2lmZGVmIENPTkZJ R19JQTY0X1NHSV9TTg0KIAkJCXNuaWRsZSgpOw0KICNlbmRpZg0KLQkJCWNv bnRpbnVlOw0KIAkJfQ0KIA0KICNpZmRlZiBDT05GSUdfSUE2NF9TR0lfU04N CmRpZmYgLXVyTiAyLjQuMTctSUE2NC1rZGItSjkvYXJjaC9pYTY0L2tlcm5l bC9zZXR1cC5jIDIuNC4xNy1JQTY0LWtkYi1KOWlhNjQvYXJjaC9pYTY0L2tl cm5lbC9zZXR1cC5jDQotLS0gMi40LjE3LUlBNjQta2RiLUo5L2FyY2gvaWE2 NC9rZXJuZWwvc2V0dXAuYwlUaHUgSmFuIDMxIDE2OjQyOjI2IDIwMDINCisr KyAyLjQuMTctSUE2NC1rZGItSjlpYTY0L2FyY2gvaWE2NC9rZXJuZWwvc2V0 dXAuYwlUaHUgSmFuIDMxIDE4OjQwOjQwIDIwMDINCkBAIC0zNzUsMTAgKzM3 NSwxMCBAQA0KIHsNCiAjaWZkZWYgQ09ORklHX1NNUA0KICMJZGVmaW5lIGxw agljLT5sb29wc19wZXJfamlmZnkNCi0jCWRlZmluZSBjcHUJYy0+cHJvY2Vz c29yDQorIwlkZWZpbmUgY3B1bQljLT5wcm9jZXNzb3INCiAjZWxzZQ0KICMJ ZGVmaW5lIGxwaglsb29wc19wZXJfamlmZnkNCi0jCWRlZmluZSBjcHUJMA0K KyMJZGVmaW5lIGNwdW0JMA0KICNlbmRpZg0KIAljaGFyIGZhbWlseVszMl0s IGZlYXR1cmVzWzEyOF0sICpjcDsNCiAJc3RydWN0IGNwdWluZm9faWE2NCAq YyA9IHY7DQpAQCAtNDE3LDcgKzQxNyw3IEBADQogCQkgICAiY3B1IE1IeiAg ICA6ICVsdS4lMDZsdVxuIg0KIAkJICAgIml0YyBNSHogICAgOiAlbHUuJTA2 bHVcbiINCiAJCSAgICJCb2dvTUlQUyAgIDogJWx1LiUwMmx1XG5cbiIsDQot CQkgICBjcHUsIGMtPnZlbmRvciwgZmFtaWx5LCBjLT5tb2RlbCwgYy0+cmV2 aXNpb24sIGMtPmFyY2hyZXYsDQorCQkgICBjcHVtLCBjLT52ZW5kb3IsIGZh bWlseSwgYy0+bW9kZWwsIGMtPnJldmlzaW9uLCBjLT5hcmNocmV2LA0KIAkJ ICAgZmVhdHVyZXMsIGMtPnBwbiwgYy0+bnVtYmVyLA0KIAkJICAgYy0+cHJv Y19mcmVxIC8gMTAwMDAwMCwgYy0+cHJvY19mcmVxICUgMTAwMDAwMCwNCiAJ CSAgIGMtPml0Y19mcmVxIC8gMTAwMDAwMCwgYy0+aXRjX2ZyZXEgJSAxMDAw MDAwLA0KZGlmZiAtdXJOIDIuNC4xNy1JQTY0LWtkYi1KOS9hcmNoL2lhNjQv a2VybmVsL3NtcC5jIDIuNC4xNy1JQTY0LWtkYi1KOWlhNjQvYXJjaC9pYTY0 L2tlcm5lbC9zbXAuYw0KLS0tIDIuNC4xNy1JQTY0LWtkYi1KOS9hcmNoL2lh NjQva2VybmVsL3NtcC5jCVRodSBKYW4gMzEgMTY6NDI6NTEgMjAwMg0KKysr IDIuNC4xNy1JQTY0LWtkYi1KOWlhNjQvYXJjaC9pYTY0L2tlcm5lbC9zbXAu YwlGcmkgRmViICAxIDE0OjM2OjQ1IDIwMDINCkBAIC0xNyw2ICsxNyw4IEBA DQogICogIHNjaGVtZS4NCiAgKiAxMC8xMy8wMCBHb3V0aGFtIFJhbyA8Z291 dGhhbS5yYW9AaW50ZWwuY29tPiBVcGRhdGVkIHNtcF9jYWxsX2Z1bmN0aW9u IGFuZA0KICAqCQlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUgdG8gcmVzZW5k IElQSSBvbiB0aW1lb3V0cw0KKyAqIDAxLzMxLzAyIEVyaWNoIEZvY2h0IDxl Zm9jaHRAZXNzLm5lYy5kZT4gc21wX2NhbGxfZnVuY3Rpb25fbm93YWl0IGZv ciBhdm9pZGluZw0KKyAqICAgICAgICAgICAgICByYWNlIGNvbmRpdGlvbnMg d2l0aCBPKDEpIHNjaGVkdWxlci4NCiAgKi8NCiAjZGVmaW5lIF9fS0VSTkVM X1NZU0NBTExTX18NCiANCkBAIC03MSwxMCArNzMsMTYgQEANCiB9Ow0KIA0K IHN0YXRpYyB2b2xhdGlsZSBzdHJ1Y3QgY2FsbF9kYXRhX3N0cnVjdCAqY2Fs bF9kYXRhOw0KK3N0YXRpYyBzdHJ1Y3QgY2FsbF9kYXRhX3N0cnVjdCBub3dh aXRfZGF0YSA9IHsgTlVMTCwNCisJCQkJCSAgICAgICBOVUxMLA0KKwkJCQkJ ICAgICAgIDBMLCANCisJCQkJCSAgICAgICBBVE9NSUNfSU5JVCgwKSwNCisJ CQkJCSAgICAgICBBVE9NSUNfSU5JVCgwKSB9Ow0KIA0KICNkZWZpbmUgSVBJ X0NBTExfRlVOQwkJMA0KICNkZWZpbmUgSVBJX0NQVV9TVE9QCQkxDQogI2Rl ZmluZSBJUElfS0RCX0lOVEVSUlVQVAkyDQorI2RlZmluZSBJUElfQ0FMTF9G VU5DX05PV0FJVCAgICAzDQogDQogc3RhdGljIHZvaWQNCiBzdG9wX3RoaXNf Y3B1ICh2b2lkKQ0KQEAgLTE0Niw2ICsxNTQsMjYgQEANCiAJCQlicmVhazsN CiAjZW5kaWYNCiANCisJCWNhc2UgSVBJX0NBTExfRlVOQ19OT1dBSVQ6DQor CQkJew0KKwkJCQlzdHJ1Y3QgY2FsbF9kYXRhX3N0cnVjdCAqZGF0YTsNCisJ CQkJdm9pZCAoKmZ1bmMpKHZvaWQgKmluZm8pOw0KKwkJCQl2b2lkICppbmZv Ow0KKw0KKwkJCQkvKiByZWxlYXNlIHRoZSAncG9pbnRlciBsb2NrJyAqLw0K KwkJCQlkYXRhID0gKHN0cnVjdCBjYWxsX2RhdGFfc3RydWN0ICopICZub3dh aXRfZGF0YTsNCisJCQkJZnVuYyA9IGRhdGEtPmZ1bmM7DQorCQkJCWluZm8g PSBkYXRhLT5pbmZvOw0KKw0KKwkJCQltYigpOw0KKwkJCQlhdG9taWNfZGVj KCZkYXRhLT5zdGFydGVkKTsNCisNCisJCQkJLyogQXQgdGhpcyBwb2ludCB0 aGUgc3RydWN0dXJlIG1heSBiZSBnb25lIHVubGVzcyB3YWl0IGlzIHRydWUu ICAqLw0KKwkJCQkoKmZ1bmMpKGluZm8pOw0KKw0KKwkJCX0NCisJCQlicmVh azsNCisNCiAJCWRlZmF1bHQ6DQogCQkJcHJpbnRrKEtFUk5fQ1JJVCAiVW5r bm93biBJUEkgb24gQ1BVICVkOiAlbHVcbiIsIHRoaXNfY3B1LCB3aGljaCk7 DQogCQkJYnJlYWs7DQpAQCAtMTk2LDEyICsyMjQsNTUgQEANCiB9DQogDQog dm9pZA0KK3NtcF9zZW5kX3Jlc2NoZWR1bGVfYWxsKHZvaWQpDQorew0KKwlz ZW5kX0lQSV9hbGwoSUE2NF9JUElfUkVTQ0hFRFVMRSk7DQorfQ0KKw0KK3N0 YXRpYyBzcGlubG9ja190IG1pZ3JhdGlvbl9sb2NrID0gU1BJTl9MT0NLX1VO TE9DS0VEOw0KK3N0YXRpYyB0YXNrX3QgKm5ld190YXNrOw0KKw0KKw0KKy8q DQorICogVGhpcyBmdW5jdGlvbiBzZW5kcyBhICd0YXNrIG1pZ3JhdGlvbicg SVBJIHRvIGFub3RoZXIgQ1BVLg0KKyAqIE11c3QgYmUgY2FsbGVkIGZyb20g c3lzY2FsbCBjb250ZXh0cywgd2l0aCBpbnRlcnJ1cHRzICplbmFibGVkKi4N CisgKi8NCit2b2lkIHNtcF9taWdyYXRlX3Rhc2soaW50IGNwdSwgdGFza190 ICpwKQ0KK3sNCisJLyoNCisJICogVGhlIHRhcmdldCBDUFUgd2lsbCB1bmxv Y2sgdGhlIG1pZ3JhdGlvbiBzcGlubG9jazoNCisJICovDQorCXNwaW5fbG9j aygmbWlncmF0aW9uX2xvY2spOw0KKwluZXdfdGFzayA9IHA7DQorCXBsYXRm b3JtX3NlbmRfaXBpKGNwdSwgSUE2NF9UQVNLX01JR1JBVElPTiwgSUE2NF9J UElfRE1fSU5ULCAwKTsNCit9DQorDQorLyoNCisgKiBUYXNrIG1pZ3JhdGlv biBjYWxsYmFjay4NCisgKi8NCithc21saW5rYWdlIHZvaWQgc21wX3Rhc2tf bWlncmF0aW9uX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0 cnVjdCBwdF9yZWdzICpyZWdzKQ0KK3sNCisJdGFza190ICpwOw0KKw0KKwlw ID0gbmV3X3Rhc2s7DQorCXNwaW5fdW5sb2NrKCZtaWdyYXRpb25fbG9jayk7 DQorCXNjaGVkX3Rhc2tfbWlncmF0ZWQocCk7DQorfQ0KKw0KK3ZvaWQNCiBz bXBfZmx1c2hfdGxiX2FsbCAodm9pZCkNCiB7DQogCXNtcF9jYWxsX2Z1bmN0 aW9uICgodm9pZCAoKikodm9pZCAqKSlfX2ZsdXNoX3RsYl9hbGwsMCwxLDEp Ow0KIAlfX2ZsdXNoX3RsYl9hbGwoKTsNCiB9DQogDQordm9pZA0KK3NtcF9m bHVzaF90bGJfYWxsX25vd2FpdCAodm9pZCkNCit7DQorCXNtcF9jYWxsX2Z1 bmN0aW9uX25vd2FpdCAoKHZvaWQgKCopKHZvaWQgKikpX19mbHVzaF90bGJf YWxsLDApOw0KKwlfX2ZsdXNoX3RsYl9hbGwoKTsNCit9DQorDQogLyoNCiAg KiBSdW4gYSBmdW5jdGlvbiBvbiBhbm90aGVyIENQVQ0KICAqICA8ZnVuYz4J VGhlIGZ1bmN0aW9uIHRvIHJ1bi4gVGhpcyBtdXN0IGJlIGZhc3QgYW5kIG5v bi1ibG9ja2luZy4NCkBAIC0zMDUsNiArMzc2LDQyIEBADQogCXNwaW5fdW5s b2NrX2JoKCZjYWxsX2xvY2spOw0KIAlyZXR1cm4gMDsNCiB9DQorDQorLyoN CisgKiAgW1NVTU1BUlldCVJ1biBhIGZ1bmN0aW9uIG9uIGFsbCBvdGhlciBD UFVzLg0KKyAqICA8ZnVuYz4JVGhlIGZ1bmN0aW9uIHRvIHJ1bi4gVGhpcyBt dXN0IGJlIGZhc3QgYW5kIG5vbi1ibG9ja2luZy4NCisgKiAgPGluZm8+CUFu IGFyYml0cmFyeSBwb2ludGVyIHRvIHBhc3MgdG8gdGhlIGZ1bmN0aW9uLg0K KyAqICBbUkVUVVJOU10gICAwDQorICoNCisgKiBSZXR1cm5zIGltbWVkaWF0 ZWx5LiBEYXRhIGlzIHN0b3JlZCBpbiBub3dhaXRfZGF0YSB3aGVyZSBpdCBo YXMgY2hhbmNlcw0KKyAqIHRvIGxpdmUgbG9uZyBlbm91Z2guLi4NCisgKiBV c2VkIGJ5IHNtcF9mbHVzaF90bGJfYWxsX25vd2FpdCgpIGFuZCBhdm9pZHMg YSByYWNlIGNvbmRpdGlvbiB3aXRoIHRoZQ0KKyAqIE8oMSkgTVEgc2NoZWR1 bGVyICh3cmFwX21tdV9jb250ZXh0IHdoaWxlIGFub3RoZXIgQ1BVIHdhaXRz IGZvciB0aGUNCisgKiBydW5xdWV1ZSBsb2NrIG9mIHRoZSBwcm9jZXNzb3Ig ZG9pbmcgY29udGV4dCB3cmFwKS4gW0VGXQ0KKyAqLw0KK2ludA0KK3NtcF9j YWxsX2Z1bmN0aW9uX25vd2FpdCAodm9pZCAoKmZ1bmMpICh2b2lkICppbmZv KSwgdm9pZCAqaW5mbykNCit7DQorCWludCBjcHVzID0gc21wX251bV9jcHVz LTE7DQorDQorCWlmICghY3B1cykNCisJCXJldHVybiAwOw0KKw0KKwlpZiAo YXRvbWljX3JlYWQoJm5vd2FpdF9kYXRhLnN0YXJ0ZWQpID4gMCkgew0KKwkJ cHJpbnRrKCJzbXBfY2FsbF9mdW5jdGlvbl9ub3dhaXQ6IGNhbGxlZCBiZWZv cmUgcHJldmlvdXMgY2FsbCBleGVjdXRlZCBvbiBhbGwgQ1BVcyFcbiIpOw0K Kwl9DQorDQorCW5vd2FpdF9kYXRhLmZ1bmMgPSBmdW5jOw0KKwlub3dhaXRf ZGF0YS5pbmZvID0gaW5mbzsNCisJYXRvbWljX3NldCgmbm93YWl0X2RhdGEu c3RhcnRlZCwgY3B1cyk7DQorCW5vd2FpdF9kYXRhLndhaXQgPSB3YWl0Ow0K Kw0KKwlzcGluX2xvY2tfYmgoJmNhbGxfbG9jayk7DQorCW1iKCk7CS8qIGVu c3VyZSBzdG9yZSB0byBjYWxsX2RhdGEgcHJlY2VkZXMgc2V0dGluZyBvZiBJ UElfQ0FMTF9GVU5DX05PV0FJVCAqLw0KKwlzZW5kX0lQSV9hbGxidXRzZWxm KElQSV9DQUxMX0ZVTkNfTk9XQUlUKTsNCisJc3Bpbl91bmxvY2tfYmgoJmNh bGxfbG9jayk7DQorCXJldHVybiAwOw0KK30NCiANCiB2b2lkDQogc21wX2Rv X3RpbWVyIChzdHJ1Y3QgcHRfcmVncyAqcmVncykNCmRpZmYgLXVyTiAyLjQu MTctSUE2NC1rZGItSjkvYXJjaC9pYTY0L2tlcm5lbC9zbXBib290LmMgMi40 LjE3LUlBNjQta2RiLUo5aWE2NC9hcmNoL2lhNjQva2VybmVsL3NtcGJvb3Qu Yw0KLS0tIDIuNC4xNy1JQTY0LWtkYi1KOS9hcmNoL2lhNjQva2VybmVsL3Nt cGJvb3QuYwlUaHUgSmFuIDMxIDE2OjQyOjI2IDIwMDINCisrKyAyLjQuMTct SUE2NC1rZGItSjlpYTY0L2FyY2gvaWE2NC9rZXJuZWwvc21wYm9vdC5jCUZy aSBGZWIgIDEgMTQ6Mjc6NTAgMjAwMg0KQEAgLTM1Niw2ICszNTYsNyBAQA0K IAlsb2NhbF9pcnFfZW5hYmxlKCk7DQogCWNhbGlicmF0ZV9kZWxheSgpOw0K IAlsb2NhbF9jcHVfZGF0YS0+bG9vcHNfcGVyX2ppZmZ5ID0gbG9vcHNfcGVy X2ppZmZ5Ow0KKwlpYTY0X2Rpc2FibGVfdGltZXIoKTsNCiAJLyoNCiAJICog QWxsb3cgdGhlIG1hc3RlciB0byBjb250aW51ZS4NCiAJICovDQpAQCAtMzc5 LDcgKzM4MCw4IEBADQogCURwcmludGsoIkNQVSAlZCBpcyBzZXQgdG8gZ28u XG4iLCBzbXBfcHJvY2Vzc29yX2lkKCkpOw0KIAl3aGlsZSAoIWF0b21pY19y ZWFkKCZzbXBfY29tbWVuY2VkKSkNCiAJCTsNCi0NCisJLyogcmVlbmFibGUg dGltZXIgaW50ZXJydXB0cyAqLw0KKwlpYTY0X2NwdV9sb2NhbF90aWNrKCk7 DQogCURwcmludGsoIkNQVSAlZCBpcyBzdGFydGluZyBpZGxlLlxuIiwgc21w X3Byb2Nlc3Nvcl9pZCgpKTsNCiAJcmV0dXJuIGNwdV9pZGxlKCk7DQogfQ0K QEAgLTQxNiwxMSArNDE4LDEwIEBADQogCWlmICghaWRsZSkNCiAJCXBhbmlj KCJObyBpZGxlIHByb2Nlc3MgZm9yIENQVSAlZCIsIGNwdSk7DQogDQotCXRh c2tfc2V0X2NwdShpZGxlLCBjcHUpOwkvKiB3ZSBzY2hlZHVsZSB0aGUgZmly c3QgdGFzayBtYW51YWxseSAqLw0KKwlpbml0X2lkbGUoaWRsZSwgY3B1KTsN CiANCiAJaWE2NF9jcHVfdG9fc2FwaWNpZFtjcHVdID0gc2FwaWNpZDsNCiAN Ci0JZGVsX2Zyb21fcnVucXVldWUoaWRsZSk7DQogCXVuaGFzaF9wcm9jZXNz KGlkbGUpOw0KIAlpbml0X3Rhc2tzW2NwdV0gPSBpZGxlOw0KIA0KQEAgLTQ4 MSw4ICs0ODIsNyBAQA0KIAlwcmludGsoIkJvb3QgcHJvY2Vzc29yIGlkIDB4 JXgvMHgleFxuIiwgMCwgYm9vdF9jcHVfaWQpOw0KIA0KIAlnbG9iYWxfaXJx X2hvbGRlciA9IDA7DQotCWN1cnJlbnQtPnByb2Nlc3NvciA9IDA7DQotCWlu aXRfaWRsZSgpOw0KKwljdXJyZW50LT5jcHUgPSAwOw0KIA0KIAkvKg0KIAkg KiBJZiBTTVAgc2hvdWxkIGJlIGRpc2FibGVkLCB0aGVuIHJlYWxseSBkaXNh YmxlIGl0IQ0KQEAgLTU2OSwzICs1NjksOSBAQA0KIAkJc21wX251bV9jcHVz ID0gMTsNCiAJfQ0KIH0NCisNCisvKiBOdW1iZXIgb2YgdGlja3Mgd2UgY29u c2lkZXIgYW4gaWRsZSB0YXNrcyBzdGlsbCBjYWNoZS1ob3QuDQorICogRm9y IEl0YW5pdW06IHdpdGggMUdCL3MgYmFuZHdpZHRoIHdlIG5lZWQgNG1zIHRv IGZpbGwgdXAgNE1CIEwzIGNhY2hlLi4uDQorICogU28gbGV0J3MgdHJ5IDEw IHRpY2tzLg0KKyAqLw0KK3Vuc2lnbmVkIGxvbmcgY2FjaGVfZGVjYXlfdGlj a3M9MTA7DQpkaWZmIC11ck4gMi40LjE3LUlBNjQta2RiLUo5L2FyY2gvaWE2 NC9rZXJuZWwvdGltZS5jIDIuNC4xNy1JQTY0LWtkYi1KOWlhNjQvYXJjaC9p YTY0L2tlcm5lbC90aW1lLmMNCi0tLSAyLjQuMTctSUE2NC1rZGItSjkvYXJj aC9pYTY0L2tlcm5lbC90aW1lLmMJRnJpIE5vdiAgOSAyMzoyNjoxNyAyMDAx DQorKysgMi40LjE3LUlBNjQta2RiLUo5aWE2NC9hcmNoL2lhNjQva2VybmVs L3RpbWUuYwlUaHUgSmFuIDMxIDE4OjQxOjU2IDIwMDINCkBAIC0yMDksNyAr MjA5LDcgQEANCiAvKg0KICAqIEVuY2Fwc3VsYXRlIGFjY2VzcyB0byB0aGUg aXRtIHN0cnVjdHVyZSBmb3IgU01QLg0KICAqLw0KLXZvaWQgX19pbml0DQor dm9pZA0KIGlhNjRfY3B1X2xvY2FsX3RpY2sgKHZvaWQpDQogew0KIAlpbnQg Y3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOw0KQEAgLTI5OCwzICsyOTgsOSBA QA0KIAllZmlfZ2V0dGltZW9mZGF5KChzdHJ1Y3QgdGltZXZhbCAqKSAmeHRp bWUpOw0KIAlpYTY0X2luaXRfaXRtKCk7DQogfQ0KKw0KK3ZvaWQgX19pbml0 IGlhNjRfZGlzYWJsZV90aW1lcih2b2lkKQ0KK3sNCisJaWE2NF9zZXRfaXR2 KElBNjRfVElNRVJfVkVDVE9SIHwgSUE2NF9USU1FUl9NQVNLKTsNCit9DQor DQpkaWZmIC11ck4gMi40LjE3LUlBNjQta2RiLUo5L2FyY2gvaWE2NC9tbS9m YXVsdC5jIDIuNC4xNy1JQTY0LWtkYi1KOWlhNjQvYXJjaC9pYTY0L21tL2Zh dWx0LmMNCi0tLSAyLjQuMTctSUE2NC1rZGItSjkvYXJjaC9pYTY0L21tL2Zh dWx0LmMJRnJpIE5vdiAgOSAyMzoyNjoxNyAyMDAxDQorKysgMi40LjE3LUlB NjQta2RiLUo5aWE2NC9hcmNoL2lhNjQvbW0vZmF1bHQuYwlUaHUgSmFuIDMx IDE4OjQwOjQwIDIwMDINCkBAIC0xOTQsOCArMTk0LDcgQEANCiAgIG91dF9v Zl9tZW1vcnk6DQogCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7DQogCWlmIChj dXJyZW50LT5waWQgPT0gMSkgew0KLQkJY3VycmVudC0+cG9saWN5IHw9IFND SEVEX1lJRUxEOw0KLQkJc2NoZWR1bGUoKTsNCisJCXlpZWxkKCk7DQogCQlk b3duX3JlYWQoJm1tLT5tbWFwX3NlbSk7DQogCQlnb3RvIHN1cnZpdmU7DQog CX0NCmRpZmYgLXVyTiAyLjQuMTctSUE2NC1rZGItSjkvYXJjaC9pYTY0L21t L3RsYi5jIDIuNC4xNy1JQTY0LWtkYi1KOWlhNjQvYXJjaC9pYTY0L21tL3Rs Yi5jDQotLS0gMi40LjE3LUlBNjQta2RiLUo5L2FyY2gvaWE2NC9tbS90bGIu YwlGcmkgTm92ICA5IDIzOjI2OjE3IDIwMDENCisrKyAyLjQuMTctSUE2NC1r ZGItSjlpYTY0L2FyY2gvaWE2NC9tbS90bGIuYwlGcmkgRmViICAxIDE0OjI3 OjA4IDIwMDINCkBAIC03Niw3ICs3Niw4IEBADQogCQkJaWE2NF9jdHgubGlt aXQgPSB0c2tfY29udGV4dDsNCiAJfQ0KIAlyZWFkX3VubG9jaygmdGFza2xp c3RfbG9jayk7DQotCWZsdXNoX3RsYl9hbGwoKTsNCisJLy9mbHVzaF90bGJf YWxsKCk7IC8qIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiB3aXRoIE8oMSkg c2NoZWR1bGVyIFtFRl0gKi8NCisJc21wX2ZsdXNoX3RsYl9hbGxfbm93YWl0 KCk7DQogfQ0KIA0KIHN0YXRpYyBpbmxpbmUgdm9pZA0KZGlmZiAtdXJOIDIu NC4xNy1JQTY0LWtkYi1KOS9hcmNoL2lhNjQvdG9vbHMvcHJpbnRfb2Zmc2V0 cy5jIDIuNC4xNy1JQTY0LWtkYi1KOWlhNjQvYXJjaC9pYTY0L3Rvb2xzL3By aW50X29mZnNldHMuYw0KLS0tIDIuNC4xNy1JQTY0LWtkYi1KOS9hcmNoL2lh NjQvdG9vbHMvcHJpbnRfb2Zmc2V0cy5jCUZyaSBOb3YgIDkgMjM6MjY6MTcg MjAwMQ0KKysrIDIuNC4xNy1JQTY0LWtkYi1KOWlhNjQvYXJjaC9pYTY0L3Rv b2xzL3ByaW50X29mZnNldHMuYwlUaHUgSmFuIDMxIDE4OjQwOjQwIDIwMDIN CkBAIC01NCw3ICs1NCw3IEBADQogICAgIHsgIklBNjRfVEFTS19QVFJBQ0Vf T0ZGU0VUIiwJb2Zmc2V0b2YgKHN0cnVjdCB0YXNrX3N0cnVjdCwgcHRyYWNl KSB9LA0KICAgICB7ICJJQTY0X1RBU0tfU0lHUEVORElOR19PRkZTRVQiLAlv ZmZzZXRvZiAoc3RydWN0IHRhc2tfc3RydWN0LCBzaWdwZW5kaW5nKSB9LA0K ICAgICB7ICJJQTY0X1RBU0tfTkVFRF9SRVNDSEVEX09GRlNFVCIsCW9mZnNl dG9mIChzdHJ1Y3QgdGFza19zdHJ1Y3QsIG5lZWRfcmVzY2hlZCkgfSwNCi0g ICAgeyAiSUE2NF9UQVNLX1BST0NFU1NPUl9PRkZTRVQiLAlvZmZzZXRvZiAo c3RydWN0IHRhc2tfc3RydWN0LCBwcm9jZXNzb3IpIH0sDQorICAgIHsgIklB NjRfVEFTS19QUk9DRVNTT1JfT0ZGU0VUIiwJb2Zmc2V0b2YgKHN0cnVjdCB0 YXNrX3N0cnVjdCwgY3B1KSB9LA0KICAgICB7ICJJQTY0X1RBU0tfVEhSRUFE X09GRlNFVCIsCW9mZnNldG9mIChzdHJ1Y3QgdGFza19zdHJ1Y3QsIHRocmVh ZCkgfSwNCiAgICAgeyAiSUE2NF9UQVNLX1RIUkVBRF9LU1BfT0ZGU0VUIiwJ b2Zmc2V0b2YgKHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLmtzcCkgfSwN CiAjaWZkZWYgQ09ORklHX1BFUkZNT04NCmRpZmYgLXVyTiAyLjQuMTctSUE2 NC1rZGItSjkvaW5jbHVkZS9hc20taWE2NC9iaXRvcHMuaCAyLjQuMTctSUE2 NC1rZGItSjlpYTY0L2luY2x1ZGUvYXNtLWlhNjQvYml0b3BzLmgNCi0tLSAy LjQuMTctSUE2NC1rZGItSjkvaW5jbHVkZS9hc20taWE2NC9iaXRvcHMuaAlU aHUgSmFuIDMxIDE2OjQyOjI4IDIwMDINCisrKyAyLjQuMTctSUE2NC1rZGIt SjlpYTY0L2luY2x1ZGUvYXNtLWlhNjQvYml0b3BzLmgJRnJpIEZlYiAgMSAx NDozOTozMyAyMDAyDQpAQCAtMjgwLDYgKzI4MCwyMCBAQA0KIAlyZXR1cm4g cmVzdWx0Ow0KIH0NCiANCisvKioNCisgKiBfX2ZmcyAtIGZpbmQgZmlyc3Qg Yml0IGluIGEgNjQgYml0IGxvbmcuDQorICoNCisgKiBVbmRlZmluZWQgaWYg bm8gYml0IGV4aXN0cywgc28gY29kZSBzaG91bGQgY2hlY2sgYWdhaW5zdCAw IGZpcnN0Lg0KKyAqLw0KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZw0K K19fZmZzICh1bnNpZ25lZCBsb25nIHgpDQorew0KKwl1bnNpZ25lZCBsb25n IHJlc3VsdDsNCisNCisJX19hc21fXyAoInBvcGNudCAlMD0lMSIgOiAiPXIi IChyZXN1bHQpIDogInIiICh+eCAmICh4IC0gMSkpKTsNCisJcmV0dXJuIHJl c3VsdDsNCit9DQorDQogI2lmZGVmIF9fS0VSTkVMX18NCiANCiAvKg0KQEAg LTM1Nyw2ICszNzEsOCBAQA0KIAl0bXAgPSAqcDsNCiBmb3VuZF9maXJzdDoN CiAJdG1wIHw9IH4wVUwgPDwgc2l6ZTsNCisJaWYgKHRtcCA9PSB+MFVMKSAg ICAgICAgLyogQXJlIGFueSBiaXRzIHplcm8/ICovDQorCQlyZXR1cm4gcmVz dWx0ICsgc2l6ZTsgLyogTm9wZS4gKi8NCiBmb3VuZF9taWRkbGU6DQogCXJl dHVybiByZXN1bHQgKyBmZnoodG1wKTsNCiB9DQpAQCAtMzY2LDggKzM4Miw1 MiBAQA0KICAqLw0KICNkZWZpbmUgZmluZF9maXJzdF96ZXJvX2JpdChhZGRy LCBzaXplKSBmaW5kX25leHRfemVyb19iaXQoKGFkZHIpLCAoc2l6ZSksIDAp DQogDQorLyoNCisgKiBGaW5kIG5leHQgYml0IGluIGEgYml0bWFwIHJlYXNv bmFibHkgZWZmaWNpZW50bHkuLg0KKyAqLw0KK3N0YXRpYyBpbmxpbmUgaW50 DQorZmluZF9uZXh0X2JpdCAodm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBz aXplLCB1bnNpZ25lZCBsb25nIG9mZnNldCkNCit7DQorCXVuc2lnbmVkIGxv bmcgKnAgPSAoKHVuc2lnbmVkIGxvbmcgKikgYWRkcikgKyAob2Zmc2V0ID4+ IDYpOw0KKwl1bnNpZ25lZCBsb25nIHJlc3VsdCA9IG9mZnNldCAmIH42M1VM Ow0KKwl1bnNpZ25lZCBsb25nIHRtcDsNCisNCisJaWYgKG9mZnNldCA+PSBz aXplKQ0KKwkJcmV0dXJuIHNpemU7DQorCXNpemUgLT0gcmVzdWx0Ow0KKwlv ZmZzZXQgJj0gNjNVTDsNCisJaWYgKG9mZnNldCkgew0KKwkJdG1wID0gKihw KyspOw0KKwkJdG1wICY9IH4wVUwgPDwgb2Zmc2V0Ow0KKwkJaWYgKHNpemUg PCA2NCkNCisJCQlnb3RvIGZvdW5kX2ZpcnN0Ow0KKwkJaWYgKHRtcCkNCisJ CQlnb3RvIGZvdW5kX21pZGRsZTsNCisJCXNpemUgLT0gNjQ7DQorCQlyZXN1 bHQgKz0gNjQ7DQorCX0NCisJd2hpbGUgKHNpemUgJiB+NjNVTCkgew0KKwkJ aWYgKCh0bXAgPSAqKHArKykpKQ0KKwkJCWdvdG8gZm91bmRfbWlkZGxlOw0K KwkJcmVzdWx0ICs9IDY0Ow0KKwkJc2l6ZSAtPSA2NDsNCisJfQ0KKwlpZiAo IXNpemUpDQorCQlyZXR1cm4gcmVzdWx0Ow0KKwl0bXAgPSAqcDsNCitmb3Vu ZF9maXJzdDoNCisJdG1wICY9IH4wVUwgPj4gKDY0LXNpemUpOw0KKwlpZiAo dG1wID09IDBVTCkgICAgICAgIC8qIEFyZSBhbnkgYml0cyBzZXQ/ICovDQor CQlyZXR1cm4gcmVzdWx0ICsgc2l6ZTsgLyogTm9wZS4gKi8NCitmb3VuZF9t aWRkbGU6DQorCXJldHVybiByZXN1bHQgKyBfX2Zmcyh0bXApOw0KK30NCisN CisjZGVmaW5lIGZpbmRfZmlyc3RfYml0KGFkZHIsIHNpemUpIGZpbmRfbmV4 dF9iaXQoKGFkZHIpLCAoc2l6ZSksIDApDQorDQogI2lmZGVmIF9fS0VSTkVM X18NCiANCisjZGVmaW5lIF9fY2xlYXJfYml0KG5yLCBhZGRyKSAgICAgICAg Y2xlYXJfYml0KG5yLCBhZGRyKQ0KICNkZWZpbmUgZXh0Ml9zZXRfYml0ICAg ICAgICAgICAgICAgICB0ZXN0X2FuZF9zZXRfYml0DQogI2RlZmluZSBleHQy X2NsZWFyX2JpdCAgICAgICAgICAgICAgIHRlc3RfYW5kX2NsZWFyX2JpdA0K ICNkZWZpbmUgZXh0Ml90ZXN0X2JpdCAgICAgICAgICAgICAgICB0ZXN0X2Jp dA0KZGlmZiAtdXJOIDIuNC4xNy1JQTY0LWtkYi1KOS9pbmNsdWRlL2FzbS1p YTY0L2h3X2lycS5oIDIuNC4xNy1JQTY0LWtkYi1KOWlhNjQvaW5jbHVkZS9h c20taWE2NC9od19pcnEuaA0KLS0tIDIuNC4xNy1JQTY0LWtkYi1KOS9pbmNs dWRlL2FzbS1pYTY0L2h3X2lycS5oCVR1ZSBKdWwgMzEgMTk6MzA6MDkgMjAw MQ0KKysrIDIuNC4xNy1JQTY0LWtkYi1KOWlhNjQvaW5jbHVkZS9hc20taWE2 NC9od19pcnEuaAlGcmkgRmViICAxIDE0OjM5OjMzIDIwMDINCkBAIC00OSw2 ICs0OSw3IEBADQogI2RlZmluZSBJQTY0X1BFUkZNT05fVkVDVE9SCQkweGVl CS8qIHBlcmZvcm1hbmMgbW9uaXRvciBpbnRlcnJ1cHQgdmVjdG9yICovDQog I2RlZmluZSBJQTY0X1RJTUVSX1ZFQ1RPUgkJMHhlZgkvKiB1c2UgaGlnaGVz dC1wcmlvIGdyb3VwIDE1IGludGVycnVwdCBmb3IgdGltZXIgKi8NCiAjZGVm aW5lCUlBNjRfTUNBX1dBS0VVUF9WRUNUT1IJCTB4ZjAJLyogTUNBIHdha2V1 cCAobXVzdCBiZSA+TUNBX1JFTkRFWl9WRUNUT1IpICovDQorI2RlZmluZSBJ QTY0X1RBU0tfTUlHUkFUSU9OCQkweGZiCS8qIHRhc2sgbWlncmF0aW9uIGlu dGVycnVwdCB2ZWN0b3IgKi8NCiAjZGVmaW5lIElBNjRfSVBJX1JFU0NIRURV TEUJCTB4ZmQJLyogU01QIHJlc2NoZWR1bGUgKi8NCiAjZGVmaW5lIElBNjRf SVBJX1ZFQ1RPUgkJCTB4ZmUJLyogaW50ZXItcHJvY2Vzc29yIGludGVycnVw dCB2ZWN0b3IgKi8NCiANCkBAIC02NSw2ICs2Niw5IEBADQogICAgICAgICBJ QTY0X0lQSV9ETV9FWFRJTlQgPSAgICAweDcsICAgIC8qIHBlbmQgYW4gODI1 OS1jb21wYXRpYmxlIGludGVycnVwdC4gKi8NCiB9Ow0KIA0KKy8qIGJpdCBm b3IgbWFza2luZyBhbmQgZGlzY2FyZGluZyB0aW1lciBpbnRlcnJ1cHRzIG9u IElBNjQgKi8NCisjZGVmaW5lIElBNjRfVElNRVJfTUFTSyAgICAgICAgICgx PDwxNikNCisNCiBleHRlcm4gX191OCBpc2FfaXJxX3RvX3ZlY3Rvcl9tYXBb MTZdOw0KICNkZWZpbmUgaXNhX2lycV90b192ZWN0b3IoeCkJaXNhX2lycV90 b192ZWN0b3JfbWFwWyh4KV0NCiANCmRpZmYgLXVyTiAyLjQuMTctSUE2NC1r ZGItSjkvaW5jbHVkZS9hc20taWE2NC9tbXVfY29udGV4dC5oIDIuNC4xNy1J QTY0LWtkYi1KOWlhNjQvaW5jbHVkZS9hc20taWE2NC9tbXVfY29udGV4dC5o DQotLS0gMi40LjE3LUlBNjQta2RiLUo5L2luY2x1ZGUvYXNtLWlhNjQvbW11 X2NvbnRleHQuaAlGcmkgTm92ICA5IDIzOjI2OjE3IDIwMDENCisrKyAyLjQu MTctSUE2NC1rZGItSjlpYTY0L2luY2x1ZGUvYXNtLWlhNjQvbW11X2NvbnRl eHQuaAlGcmkgRmViICAxIDE0OjM5OjMzIDIwMDINCkBAIC0xMTgsNiArMTE4 LDIyIEBADQogCXJlbG9hZF9jb250ZXh0KG5leHQpOw0KIH0NCiANCisvKg0K KyAqIE5lZWRlZCBmb3IgdGhlIE8oMSkgTVEgc2NoZWR1bGVyLg0KKyAqLw0K KyNpZiBNQVhfUlRfUFJJTyAhPSAxMjggfHwgTUFYX1BSSU8gPj0gMTkyDQor IyBlcnJvciB1cGRhdGUgdGhpcyBmdW5jdGlvbi4gKi8NCisjZW5kaWYNCisN CitzdGF0aWMgaW5saW5lIGludCBzY2hlZF9maW5kX2ZpcnN0X2JpdCh1bnNp Z25lZCBsb25nICpiKQ0KK3sNCisJaWYgKHVubGlrZWx5KGJbMF0pKQ0KKwkJ cmV0dXJuIF9fZmZzKGJbMF0pOw0KKwlpZiAodW5saWtlbHkoYlsxXSkpDQor CQlyZXR1cm4gNjQgKyBfX2ZmcyhiWzFdKTsNCisJcmV0dXJuIF9fZmZzKGJb Ml0pICsgMTI4Ow0KK30NCisNCiAjZGVmaW5lIHN3aXRjaF9tbShwcmV2X21t LG5leHRfbW0sbmV4dF90YXNrLGNwdSkJYWN0aXZhdGVfbW0ocHJldl9tbSwg bmV4dF9tbSkNCiANCiAjIGVuZGlmIC8qICEgX19BU1NFTUJMWV9fICovDQpk aWZmIC11ck4gMi40LjE3LUlBNjQta2RiLUo5L2luY2x1ZGUvYXNtLWlhNjQv c21wLmggMi40LjE3LUlBNjQta2RiLUo5aWE2NC9pbmNsdWRlL2FzbS1pYTY0 L3NtcC5oDQotLS0gMi40LjE3LUlBNjQta2RiLUo5L2luY2x1ZGUvYXNtLWlh NjQvc21wLmgJRnJpIE5vdiAgOSAyMzoyNjoxNyAyMDAxDQorKysgMi40LjE3 LUlBNjQta2RiLUo5aWE2NC9pbmNsdWRlL2FzbS1pYTY0L3NtcC5oCUZyaSBG ZWIgIDEgMTQ6Mzk6MzMgMjAwMg0KQEAgLTI3LDcgKzI3LDcgQEANCiAjZGVm aW5lIFNNUF9JUlFfUkVESVJFQ1RJT04JKDEgPDwgMCkNCiAjZGVmaW5lIFNN UF9JUElfUkVESVJFQ1RJT04JKDEgPDwgMSkNCiANCi0jZGVmaW5lIHNtcF9w cm9jZXNzb3JfaWQoKQkoY3VycmVudC0+cHJvY2Vzc29yKQ0KKyNkZWZpbmUg c21wX3Byb2Nlc3Nvcl9pZCgpCShjdXJyZW50LT5jcHUpDQogDQogZXh0ZXJu IHN0cnVjdCBzbXBfYm9vdF9kYXRhIHsNCiAJaW50IGNwdV9jb3VudDsNCkBA IC00OCw2ICs0OCw5IEBADQogDQogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgYXBf d2FrZXVwX3ZlY3RvcjsNCiANCitleHRlcm4gdm9pZCBzbXBfc2VuZF9yZXNj aGVkdWxlKGludCBjcHUpOw0KK2V4dGVybiB2b2lkIHNtcF9zZW5kX3Jlc2No ZWR1bGVfYWxsKHZvaWQpOw0KKw0KIC8qDQogICogRnVuY3Rpb24gdG8gbWFw IGhhcmQgc21wIHByb2Nlc3NvciBpZCB0byBsb2dpY2FsIGlkLiAgU2xvdywg c28NCiAgKiBkb24ndCB1c2UgdGhpcyBpbiBwZXJmb3JtYW5jZS1jcml0aWNh bCBjb2RlLg0KQEAgLTExMCwxMiArMTEzLDYgQEANCiANCiAjZGVmaW5lIE5P X1BST0NfSUQJCTB4ZmZmZmZmZmYJLyogbm8gcHJvY2Vzc29yIG1hZ2ljIG1h cmtlciAqLw0KIA0KLS8qDQotICogRXh0cmEgb3ZlcmhlYWQgdG8gbW92ZSBh IHRhc2sgZnJvbSBvbmUgY3B1IHRvIGFub3RoZXIgKGR1ZSB0byBUTEIgYW5k IGNhY2hlIG1pc3NlcykuDQotICogRXhwcmVzc2VkIGluICJuZWdhdGl2ZSBu aWNlIHZhbHVlIiB1bml0cyAobGFyZ2VyIG51bWJlciBtZWFucyBoaWdoZXIg cHJpb3JpdHkvcGVuYWx0eSkuDQotICovDQotI2RlZmluZSBQUk9DX0NIQU5H RV9QRU5BTFRZCTIwDQotDQogZXh0ZXJuIHZvaWQgX19pbml0IGluaXRfc21w X2NvbmZpZyAodm9pZCk7DQogZXh0ZXJuIHZvaWQgc21wX2RvX3RpbWVyIChz dHJ1Y3QgcHRfcmVncyAqcmVncyk7DQogDQpkaWZmIC11ck4gMi40LjE3LUlB NjQta2RiLUo5L2luY2x1ZGUvYXNtLWlhNjQvc3BpbmxvY2suaCAyLjQuMTct SUE2NC1rZGItSjlpYTY0L2luY2x1ZGUvYXNtLWlhNjQvc3BpbmxvY2suaA0K LS0tIDIuNC4xNy1JQTY0LWtkYi1KOS9pbmNsdWRlL2FzbS1pYTY0L3NwaW5s b2NrLmgJVGh1IEphbiAzMSAxNjo0MjoyOCAyMDAyDQorKysgMi40LjE3LUlB NjQta2RiLUo5aWE2NC9pbmNsdWRlL2FzbS1pYTY0L3NwaW5sb2NrLmgJRnJp IEZlYiAgMSAxNDozOTozMyAyMDAyDQpAQCAtODQsNyArODQsNyBAQA0KIAki bW92IHIyOSA9IDFcbiIJCQkJCQlcDQogCSI7O1xuIgkJCQkJCQlcDQogCSIx OlxuIgkJCQkJCQlcDQotCSJsZDQuYmlhcyByMiA9IFslMF1cbiIJCQkJCVwN CisJImxkNCByMiA9IFslMF1cbiIJCQkJCVwNCiAJIjs7XG4iCQkJCQkJCVwN CiAJImNtcDQuZXEgcDAscDcgPSByMCxyMlxuIgkJCQlcDQogCSIocDcpIGJy LmNvbmQuc3BudC5mZXcgMWIgXG4iCQkJCVwNCmRpZmYgLXVyTiAyLjQuMTct SUE2NC1rZGItSjkvaW5jbHVkZS9saW51eC9zbXAuaCAyLjQuMTctSUE2NC1r ZGItSjlpYTY0L2luY2x1ZGUvbGludXgvc21wLmgNCi0tLSAyLjQuMTctSUE2 NC1rZGItSjkvaW5jbHVkZS9saW51eC9zbXAuaAlUaHUgSmFuIDMxIDE4OjM5 OjM3IDIwMDINCisrKyAyLjQuMTctSUE2NC1rZGItSjlpYTY0L2luY2x1ZGUv bGludXgvc21wLmgJRnJpIEZlYiAgMSAxNDozOTozMyAyMDAyDQpAQCAtMjQs MTIgKzI0LDYgQEANCiBleHRlcm4gdm9pZCBzbXBfc2VuZF9zdG9wKHZvaWQp Ow0KIA0KIC8qDQotICogc2VuZHMgYSAncmVzY2hlZHVsZScgZXZlbnQgdG8g YW5vdGhlciBDUFU6DQotICovDQotZXh0ZXJuIHZvaWQgRkFTVENBTEwoc21w X3NlbmRfcmVzY2hlZHVsZShpbnQgY3B1KSk7DQotDQotDQotLyoNCiAgKiBC b290IHByb2Nlc3NvciBjYWxsIHRvIGxvYWQgdGhlIG90aGVyIENQVSdzDQog ICovDQogZXh0ZXJuIHZvaWQgc21wX2Jvb3RfY3B1cyh2b2lkKTsNCmRpZmYg LXVyTiAyLjQuMTctSUE2NC1rZGItSjkva2RiL2tkYm1haW4uYyAyLjQuMTct SUE2NC1rZGItSjlpYTY0L2tkYi9rZGJtYWluLmMNCi0tLSAyLjQuMTctSUE2 NC1rZGItSjkva2RiL2tkYm1haW4uYwlUaHUgSmFuIDMxIDE2OjQyOjA0IDIw MDINCisrKyAyLjQuMTctSUE2NC1rZGItSjlpYTY0L2tkYi9rZGJtYWluLmMJ VGh1IEphbiAzMSAxODo0MDo0MCAyMDAyDQpAQCAtMjM2MCw3ICsyMzYwLDcg QEANCiAJZm9yX2VhY2hfdGFzayhwKSB7DQogCQlrZGJfcHJpbnRmKCIweCVw ICUwOGQgJTA4ZCAgJTEuMWQgICUzLjNkICAlcyAgMHglcCVjJXNcbiIsDQog CQkJICAgKHZvaWQgKilwLCBwLT5waWQsIHAtPnBfcHB0ci0+cGlkLA0KLQkJ CSAgIHRhc2tfaGFzX2NwdShwKSwgcC0+cHJvY2Vzc29yLA0KKwkJCSAgIHRh c2tfaGFzX2NwdShwKSwgcC0+Y3B1LA0KIAkJCSAgIChwLT5zdGF0ZSA9PSAw KT8icnVuICI6KHAtPnN0YXRlPjApPyJzdG9wIjoidW5ybiIsDQogCQkJICAg KHZvaWQgKikoJnAtPnRocmVhZCksDQogCQkJICAgKHAgPT0gY3VycmVudCkg PyAnKic6ICcgJywNCmRpZmYgLXVyTiAyLjQuMTctSUE2NC1rZGItSjkva2Vy bmVsL3ByaW50ay5jIDIuNC4xNy1JQTY0LWtkYi1KOWlhNjQva2VybmVsL3By aW50ay5jDQotLS0gMi40LjE3LUlBNjQta2RiLUo5L2tlcm5lbC9wcmludGsu YwlUaHUgSmFuIDMxIDE4OjM5OjM3IDIwMDINCisrKyAyLjQuMTctSUE2NC1r ZGItSjlpYTY0L2tlcm5lbC9wcmludGsuYwlUaHUgSmFuIDMxIDE4OjQwOjQw IDIwMDINCkBAIC0yNSw2ICsyNSw4IEBADQogI2luY2x1ZGUgPGxpbnV4L2lu aXQuaD4NCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+DQogI2luY2x1ZGUg PGxpbnV4L2ludGVycnVwdC5oPgkJCS8qIEZvciBpbl9pbnRlcnJ1cHQoKSAq Lw0KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4NCisjaW5jbHVkZSA8bGlu dXgvZGVsYXkuaD4NCiANCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4NCiAN CmRpZmYgLXVyTiAyLjQuMTctSUE2NC1rZGItSjkva2VybmVsL3NjaGVkLmMg Mi40LjE3LUlBNjQta2RiLUo5aWE2NC9rZXJuZWwvc2NoZWQuYw0KLS0tIDIu NC4xNy1JQTY0LWtkYi1KOS9rZXJuZWwvc2NoZWQuYwlUaHUgSmFuIDMxIDE4 OjM5OjM3IDIwMDINCisrKyAyLjQuMTctSUE2NC1rZGItSjlpYTY0L2tlcm5l bC9zY2hlZC5jCUZyaSBGZWIgIDEgMTY6MDY6NDAgMjAwMg0KQEAgLTkzLDYg KzkzLDE1IEBADQogCXAtPmFycmF5ID0gYXJyYXk7DQogfQ0KIA0KKy8qIG5l ZWRlZCBvbiBJQTY0LCBhcmNoL2lhNjQva2VybmVsL2hlYWQuUyByZWxpZXMg b24gaXQgKEVGKSAqLw0KK3N0cnVjdCB0YXNrX3N0cnVjdCAqIGluaXRfdGFz a3NbTlJfQ1BVU10gX19pbml0ZGF0YSA9IHsmaW5pdF90YXNrLCB9Ow0KKw0K Ky8qIG5lZWRlZCBpbiBrZGIgKEVGKSAqLw0KK2ludCB0YXNrX2hhc19jcHUo dGFza190ICpwKQ0KK3sNCisJcmV0dXJuIChwID09IHRhc2tfcnEocCktPmN1 cnIpOw0KK30NCisNCiAvKg0KICAqIEEgdGFzayBpcyAnaGVhdmlseSBpbnRl cmFjdGl2ZScgaWYgaXQgZWl0aGVyIGhhcyByZWFjaGVkIHRoZQ0KICAqIGJv dHRvbSAyNSUgb2YgdGhlIFNDSEVEX09USEVSIHByaW9yaXR5IHJhbmdlLCBv ciBpZiBpdCBpcyBiZWxvdw0KQEAgLTg1OSwxNiArODY4LDE2IEBADQogDQog CXAtPmNwdXNfYWxsb3dlZCA9IG5ld19tYXNrOw0KIAkvKg0KLQkgKiBDYW4g dGhlIHRhc2sgcnVuIG9uIHRoZSBjdXJyZW50IENQVT8gSWYgbm90IHRoZW4N CisJICogQ2FuIHRoZSB0YXNrIHJ1biBvbiBpdHMgY3VycmVudCBDUFU/IElm IG5vdCB0aGVuDQogCSAqIG1pZ3JhdGUgdGhlIHByb2Nlc3Mgb2ZmIHRvIGEg cHJvcGVyIENQVS4NCiAJICovDQotCWlmIChuZXdfbWFzayAmICgxVUwgPDwg c21wX3Byb2Nlc3Nvcl9pZCgpKSkNCisJaWYgKG5ld19tYXNrICYgKDFVTCA8 PCBwLT5jcHUpKQ0KIAkJcmV0dXJuOw0KICNpZiBDT05GSUdfU01QDQotCWN1 cnJlbnQtPnN0YXRlID0gVEFTS19VTklOVEVSUlVQVElCTEU7DQotCXNtcF9t aWdyYXRlX3Rhc2soX19mZnMobmV3X21hc2spLCBjdXJyZW50KTsNCi0NCi0J c2NoZWR1bGUoKTsNCisJcC0+c3RhdGUgPSBUQVNLX1VOSU5URVJSVVBUSUJM RTsNCisJc21wX21pZ3JhdGVfdGFzayhfX2ZmcyhuZXdfbWFzayksIHApOw0K KwlpZiAocCA9PSBjdXJyZW50KQ0KKwkJc2NoZWR1bGUoKTsNCiAjZW5kaWYN CiB9DQogDQpkaWZmIC11ck4gMi40LjE3LUlBNjQta2RiLUo5L2tlcm5lbC90 aW1lci5jIDIuNC4xNy1JQTY0LWtkYi1KOWlhNjQva2VybmVsL3RpbWVyLmMN Ci0tLSAyLjQuMTctSUE2NC1rZGItSjkva2VybmVsL3RpbWVyLmMJVGh1IEph biAzMSAxODozOTozNyAyMDAyDQorKysgMi40LjE3LUlBNjQta2RiLUo5aWE2 NC9rZXJuZWwvdGltZXIuYwlUaHUgSmFuIDMxIDE4OjQwOjQwIDIwMDINCkBA IC01ODUsMTcgKzU4NSwxNiBAQA0KIA0KIAl1cGRhdGVfb25lX3Byb2Nlc3Mo cCwgdXNlcl90aWNrLCBzeXN0ZW0sIGNwdSk7DQogCWlmIChwLT5waWQpIHsN Ci0JCWlmICgtLXAtPmNvdW50ZXIgPD0gMCkgew0KLQkJCXAtPmNvdW50ZXIg PSAwOw0KLQkJCXAtPm5lZWRfcmVzY2hlZCA9IDE7DQotCQl9DQotCQlpZiAo cC0+bmljZSA+IDApDQorCQlpZiAocC0+X19uaWNlID4gMCkNCiAJCQlrc3Rh dC5wZXJfY3B1X25pY2VbY3B1XSArPSB1c2VyX3RpY2s7DQogCQllbHNlDQog CQkJa3N0YXQucGVyX2NwdV91c2VyW2NwdV0gKz0gdXNlcl90aWNrOw0KIAkJ a3N0YXQucGVyX2NwdV9zeXN0ZW1bY3B1XSArPSBzeXN0ZW07DQotCX0gZWxz ZSBpZiAocmVhbGx5X2xvY2FsX2JoX2NvdW50KCkgfHwgcmVhbGx5X2xvY2Fs X2lycV9jb3VudCgpID4gMSkNCi0JCWtzdGF0LnBlcl9jcHVfc3lzdGVtW2Nw dV0gKz0gc3lzdGVtOw0KKwl9IGVsc2Ugew0KKwkJaWYgKHJlYWxseV9sb2Nh bF9iaF9jb3VudCgpIHx8IHJlYWxseV9sb2NhbF9pcnFfY291bnQoKSA+IDEp DQorCQkJa3N0YXQucGVyX2NwdV9zeXN0ZW1bY3B1XSArPSBzeXN0ZW07DQor CX0NCisJc2NoZWR1bGVyX3RpY2socCk7DQogfQ0KIA0KIC8qDQo= ---1916692341-1070470376-1012574197=:6004--