From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from smtp.codeaurora.org ([198.145.29.96]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1gZQFn-0007BI-I8 for ath10k@lists.infradead.org; Wed, 19 Dec 2018 01:02:32 +0000 From: Rajkumar Manoharan Subject: [PATCH v5 3/6] mac80211: Add airtime accounting and scheduling to TXQs Date: Tue, 18 Dec 2018 17:02:08 -0800 Message-Id: <1545181331-5288-4-git-send-email-rmanohar@codeaurora.org> In-Reply-To: <1545181331-5288-1-git-send-email-rmanohar@codeaurora.org> References: <1545181331-5288-1-git-send-email-rmanohar@codeaurora.org> MIME-Version: 1.0 List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "ath10k" Errors-To: ath10k-bounces+kvalo=adurom.com@lists.infradead.org To: linux-wireless@vger.kernel.org, ath10k@lists.infradead.org Cc: make-wifi-fast@lists.bufferbloat.net, =?UTF-8?q?Toke=20H=C3=B8iland-J=C3=B8rgensen?= , Louie Lu , Rajkumar Manoharan RnJvbTogVG9rZSBIw7hpbGFuZC1Kw7hyZ2Vuc2VuIDx0b2tlQHRva2UuZGs+CgpUaGlzIGFkZHMg YWlydGltZSBhY2NvdW50aW5nIGFuZCBzY2hlZHVsaW5nIHRvIHRoZSBtYWM4MDIxMSBUWFEKc2No ZWR1bGVyLiBBIG5ldyBjYWxsYmFjaywgaWVlZTgwMjExX3N0YV9yZWdpc3Rlcl9haXJ0aW1lKCks IGlzIGFkZGVkCnRoYXQgZHJpdmVycyBjYW4gY2FsbCB0byByZXBvcnQgYWlydGltZSB1c2FnZSBm b3Igc3RhdGlvbnMuCgpXaGVuIGFpcnRpbWUgaW5mb3JtYXRpb24gaXMgcHJlc2VudCwgbWFjODAy MTEgd2lsbCBzY2hlZHVsZSBUWFFzCih0aHJvdWdoIGllZWU4MDIxMV9uZXh0X3R4cSgpKSBpbiBh IHdheSB0aGF0IGVuZm9yY2VzIGFpcnRpbWUgZmFpcm5lc3MKYmV0d2VlbiBhY3RpdmUgc3RhdGlv bnMuIFRoaXMgc2NoZWR1bGluZyB3b3JrcyB0aGUgc2FtZSB3YXkgYXMgdGhlIGF0aDlrCmluLWRy aXZlciBhaXJ0aW1lIGZhaXJuZXNzIHNjaGVkdWxpbmcuIElmIG5vIGFpcnRpbWUgdXNhZ2UgaXMg cmVwb3J0ZWQKYnkgdGhlIGRyaXZlciwgdGhlIHNjaGVkdWxlciB3aWxsIGRlZmF1bHQgdG8gcm91 bmQtcm9iaW4gc2NoZWR1bGluZy4KCkZvciBkcml2ZXJzIHRoYXQgZG9uJ3QgY29udHJvbCBUWFEg c2NoZWR1bGluZyBpbiBzb2Z0d2FyZSwgYSBuZXcgQVBJCmZ1bmN0aW9uLCBpZWVlODAyMTFfdHhx X21heV90cmFuc21pdCgpLCBpcyBhZGRlZCB3aGljaCB0aGUgZHJpdmVyIGNhbiB1c2UKdG8gY2hl Y2sgaWYgdGhlIFRYUSBpcyBlbGlnaWJsZSBmb3IgdHJhbnNtaXNzaW9uLCBvciBzaG91bGQgYmUg dGhyb3R0bGVkIHRvCmVuZm9yY2UgZmFpcm5lc3MuIENhbGxzIHRvIHRoaXMgZnVuY3Rpb24gbXVz dCBhbHNvIGJlIGVuY2xvc2VkIGluCmllZWU4MDIxMV90eHFfc2NoZWR1bGVfe3N0YXJ0LGVuZH0o KSBjYWxscyB0byBlbnN1cmUgcHJvcGVyIGxvY2tpbmcuCgpUaGUgQVBJIGllZWU4MDIxMV90eHFf bWF5X3RyYW5zbWl0KCkgYWxzbyBlbnN1cmVzIHRoYXQgVFhRIGxpc3Qgd2lsbCBiZQphbGlnbmVk IGFnaW5zdCBkcml2ZXIncyBvd24gcm91bmQtcm9iaW4gc2NoZWR1bGVyIGxpc3QuIGkuZSBpdCBy b3RhdGVzCnRoZSBUWFEgbGlzdCB0aWxsIGl0IG1ha2VzIHRoZSByZXF1ZXN0ZWQgbm9kZSBiZWNv bWVzIHRoZSBmaXJzdCBlbnRyeQppbiBUWFEgbGlzdC4gVGh1cyBib3RoIHRoZSBUWFEgbGlzdCBh bmQgZHJpdmVyJ3MgbGlzdCBhcmUgaW4gc3luYy4KCkNvLWRldmVsb3BlZC1ieTogUmFqa3VtYXIg TWFub2hhcmFuIDxybWFub2hhckBjb2RlYXVyb3JhLm9yZz4KU2lnbmVkLW9mZi1ieTogTG91aWUg THUgPGdpdEBsb3VpZS5sdT4KW2FkZGVkIGRlYnVnZnMgd3JpdGUgb3AgdG8gcmVzZXQgYWlydGlt ZSBjb3VudGVyXQpTaWduZWQtb2ZmLWJ5OiBUb2tlIEjDuGlsYW5kLUrDuHJnZW5zZW4gPHRva2VA dG9rZS5kaz4KU2lnbmVkLW9mZi1ieTogUmFqa3VtYXIgTWFub2hhcmFuIDxybWFub2hhckBjb2Rl YXVyb3JhLm9yZz4KLS0tCiBpbmNsdWRlL25ldC9tYWM4MDIxMS5oICAgICB8IDU5ICsrKysrKysr KysrKysrKysrKysrKysrKysrKysrKwogbmV0L21hYzgwMjExL2NmZy5jICAgICAgICAgfCAgMyAr KwogbmV0L21hYzgwMjExL2RlYnVnZnMuYyAgICAgfCAgMyArKwogbmV0L21hYzgwMjExL2RlYnVn ZnNfc3RhLmMgfCA2OCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLQogbmV0L21h YzgwMjExL2llZWU4MDIxMV9pLmggfCAgMiArKwogbmV0L21hYzgwMjExL21haW4uYyAgICAgICAg fCAgNCArKysKIG5ldC9tYWM4MDIxMS9zdGFfaW5mby5jICAgIHwgNDQgKysrKysrKysrKysrKysr KysrKysrLS0KIG5ldC9tYWM4MDIxMS9zdGFfaW5mby5oICAgIHwgMTMgKysrKysrKwogbmV0L21h YzgwMjExL3N0YXR1cy5jICAgICAgfCAgNiArKysrCiBuZXQvbWFjODAyMTEvdHguYyAgICAgICAg ICB8IDkwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0KIDEw IGZpbGVzIGNoYW5nZWQsIDI4MiBpbnNlcnRpb25zKCspLCAxMCBkZWxldGlvbnMoLSkKCmRpZmYg LS1naXQgYS9pbmNsdWRlL25ldC9tYWM4MDIxMS5oIGIvaW5jbHVkZS9uZXQvbWFjODAyMTEuaApp bmRleCAxOGIxMWMxMTliN2UuLmM0M2Q2MTVlZTliMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQv bWFjODAyMTEuaAorKysgYi9pbmNsdWRlL25ldC9tYWM4MDIxMS5oCkBAIC0yMzU3LDYgKzIzNTcs OSBAQCBlbnVtIGllZWU4MDIxMV9od19mbGFncyB7CiAgKiBAdHhfc2tfcGFjaW5nX3NoaWZ0OiBQ YWNpbmcgc2hpZnQgdG8gc2V0IG9uIFRDUCBzb2NrZXRzIHdoZW4gZnJhbWVzIGZyb20KICAqCXRo ZW0gYXJlIGVuY291bnRlcmVkLiBUaGUgZGVmYXVsdCBzaG91bGQgdHlwaWNhbGx5IG5vdCBiZSBj aGFuZ2VkLAogICoJdW5sZXNzIHRoZSBkcml2ZXIgaGFzIGdvb2QgcmVhc29ucyBmb3IgbmVlZGlu ZyBtb3JlIGJ1ZmZlcnMuCisgKgorICogQHdlaWdodF9tdWx0aXBsZXI6IERyaXZlciBzcGVjaWZp YyBhaXJ0aW1lIHdlaWdodCBtdWx0aXBsaWVyIHVzZWQgd2hpbGUKKyAqCXJlZmlsbGluZyBkZWZp Y2l0IG9mIGVhY2ggVFhRLgogICovCiBzdHJ1Y3QgaWVlZTgwMjExX2h3IHsKIAlzdHJ1Y3QgaWVl ZTgwMjExX2NvbmYgY29uZjsKQEAgLTIzOTMsNiArMjM5Niw3IEBAIHN0cnVjdCBpZWVlODAyMTFf aHcgewogCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfY2lwaGVyX3NjaGVtZSAqY2lwaGVyX3NjaGVt ZXM7CiAJdTggbWF4X25hbl9kZV9lbnRyaWVzOwogCXU4IHR4X3NrX3BhY2luZ19zaGlmdDsKKwl1 OCB3ZWlnaHRfbXVsdGlwbGllcjsKIH07CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBfaWVlZTgwMjEx X2h3X2NoZWNrKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LApAQCAtNTM5Myw2ICs1Mzk3LDM0IEBA IHZvaWQgaWVlZTgwMjExX3N0YV9ibG9ja19hd2FrZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywK IHZvaWQgaWVlZTgwMjExX3NlbmRfZW9zcF9udWxsZnVuYyhzdHJ1Y3QgaWVlZTgwMjExX3N0YSAq cHVic3RhLCBpbnQgdGlkKTsKIAogLyoqCisgKiBpZWVlODAyMTFfc3RhX3JlZ2lzdGVyX2FpcnRp bWUgLSByZWdpc3RlciBhaXJ0aW1lIHVzYWdlIGZvciBhIHN0YS90aWQKKyAqCisgKiBSZWdpc3Rl ciBhaXJ0aW1lIHVzYWdlIGZvciBhIGdpdmVuIHN0YSBvbiBhIGdpdmVuIHRpZC4gVGhlIGRyaXZl ciBjYW4gY2FsbAorICogdGhpcyBmdW5jdGlvbiB0byBub3RpZnkgbWFjODAyMTEgdGhhdCBhIHN0 YXRpb24gdXNlZCBhIGNlcnRhaW4gYW1vdW50IG9mCisgKiBhaXJ0aW1lLiBUaGlzIGluZm9ybWF0 aW9uIHdpbGwgYmUgdXNlZCBieSB0aGUgVFhRIHNjaGVkdWxlciB0byBzY2hlZHVsZQorICogc3Rh dGlvbnMgaW4gYSB3YXkgdGhhdCBlbnN1cmVzIGFpcnRpbWUgZmFpcm5lc3MuCisgKgorICogVGhl IHJlcG9ydGVkIGFpcnRpbWUgc2hvdWxkIGFzIGEgbWluaW11bSBpbmNsdWRlIGFsbCB0aW1lIHRo YXQgaXMgc3BlbnQKKyAqIHRyYW5zbWl0dGluZyB0byB0aGUgcmVtb3RlIHN0YXRpb24sIGluY2x1 ZGluZyBvdmVyaGVhZCBhbmQgcGFkZGluZywgYnV0IG5vdAorICogaW5jbHVkaW5nIHRpbWUgc3Bl bnQgd2FpdGluZyBmb3IgYSBUWE9QLiBJZiB0aGUgdGltZSBpcyBub3QgcmVwb3J0ZWQgYnkgdGhl CisgKiBoYXJkd2FyZSBpdCBjYW4gaW4gc29tZSBjYXNlcyBiZSBjYWxjdWxhdGVkIGZyb20gdGhl IHJhdGUgYW5kIGtub3duIGZyYW1lCisgKiBjb21wb3NpdGlvbi4gV2hlbiBwb3NzaWJsZSwgdGhl IHRpbWUgc2hvdWxkIGluY2x1ZGUgYW55IGZhaWxlZCB0cmFuc21pc3Npb24KKyAqIGF0dGVtcHRz LgorICoKKyAqIFRoZSBkcml2ZXIgY2FuIGVpdGhlciBjYWxsIHRoaXMgZnVuY3Rpb24gc3luY2hy b25vdXNseSBmb3IgZXZlcnkgcGFja2V0IG9yCisgKiBhZ2dyZWdhdGUsIG9yIGFzeW5jaHJvbm91 c2x5IGFzIGFpcnRpbWUgdXNhZ2UgaW5mb3JtYXRpb24gYmVjb21lcyBhdmFpbGFibGUuCisgKiBU WCBhbmQgUlggYWlydGltZSBjYW4gYmUgcmVwb3J0ZWQgdG9nZXRoZXIsIG9yIHNlcGFyYXRlbHkg Ynkgc2V0dGluZyBvbmUgb2YKKyAqIHRoZW0gdG8gMC4KKyAqCisgKiBAcHVic3RhOiB0aGUgc3Rh dGlvbgorICogQHRpZDogdGhlIFRJRCB0byByZWdpc3RlciBhaXJ0aW1lIGZvcgorICogQHR4X2Fp cnRpbWU6IGFpcnRpbWUgdXNlZCBkdXJpbmcgVFggKGluIHVzZWMpCisgKiBAcnhfYWlydGltZTog YWlydGltZSB1c2VkIGR1cmluZyBSWCAoaW4gdXNlYykKKyAqLwordm9pZCBpZWVlODAyMTFfc3Rh X3JlZ2lzdGVyX2FpcnRpbWUoc3RydWN0IGllZWU4MDIxMV9zdGEgKnB1YnN0YSwgdTggdGlkLAor CQkJCSAgICB1MzIgdHhfYWlydGltZSwgdTMyIHJ4X2FpcnRpbWUpOworCisvKioKICAqIGllZWU4 MDIxMV9pdGVyX2tleXMgLSBpdGVyYXRlIGtleXMgcHJvZ3JhbW1lZCBpbnRvIHRoZSBkZXZpY2UK ICAqIEBodzogcG9pbnRlciBvYnRhaW5lZCBmcm9tIGllZWU4MDIxMV9hbGxvY19odygpCiAgKiBA dmlmOiB2aXJ0dWFsIGludGVyZmFjZSB0byBpdGVyYXRlLCBtYXkgYmUgJU5VTEwgZm9yIGFsbApA QCAtNjE1MCw2ICs2MTgyLDMzIEBAIHN0cnVjdCBza19idWZmICppZWVlODAyMTFfdHhfZGVxdWV1 ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIHZvaWQgaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9l bmQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGFjKTsKIAogLyoqCisgKiBpZWVlODAyMTFf dHhxX21heV90cmFuc21pdCAtIGNoZWNrIHdoZXRoZXIgVFhRIGlzIGFsbG93ZWQgdG8gdHJhbnNt aXQKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gY2hlY2sgd2hldGhlciBnaXZlbiB0 eHEgaXMgYWxsb3dlZCB0byB0cmFuc21pdCBieQorICogdGhlIGFpcnRpbWUgc2NoZWR1bGVyLCBh bmQgY2FuIGJlIHVzZWQgYnkgZHJpdmVycyB0byBhY2Nlc3MgdGhlIGFpcnRpbWUKKyAqIGZhaXJu ZXNzIGFjY291bnRpbmcgd2l0aG91dCBnb2luZyB1c2luZyB0aGUgc2NoZWR1bGluZyBvcmRlciBl bmZvcmVkIGJ5CisgKiBuZXh0X3R4cSgpLgorICoKKyAqIFJldHVybnMgJXRydWUgaWYgdGhlIGFp cnRpbWUgc2NoZWR1bGVyIHRoaW5rcyB0aGUgVFhRIHNob3VsZCBiZSBhbGxvd2VkIHRvCisgKiB0 cmFuc21pdCwgYW5kICVmYWxzZSBpZiBpdCBzaG91bGQgYmUgdGhyb3R0bGVkLiBUaGlzIGZ1bmN0 aW9uIGNhbiBhbHNvIGhhdmUKKyAqIHRoZSBzaWRlIGVmZmVjdCBvZiByb3RhdGluZyB0aGUgVFhR IGluIHRoZSBzY2hlZHVsZXIgcm90YXRpb24sIHdoaWNoIHdpbGwKKyAqIGV2ZW50dWFsbHkgYnJp bmcgdGhlIGRlZmljaXQgdG8gcG9zaXRpdmUgYW5kIGFsbG93IHRoZSBzdGF0aW9uIHRvIHRyYW5z bWl0CisgKiBhZ2Fpbi4KKyAqCisgKiBUaGUgQVBJIGllZWU4MDIxMV90eHFfbWF5X3RyYW5zbWl0 KCkgYWxzbyBlbnN1cmVzIHRoYXQgVFhRIGxpc3Qgd2lsbCBiZQorICogYWxpZ25lZCBhZ2luc3Qg ZHJpdmVyJ3Mgb3duIHJvdW5kLXJvYmluIHNjaGVkdWxlciBsaXN0LiBpLmUgaXQgcm90YXRlcwor ICogdGhlIFRYUSBsaXN0IHRpbGwgaXQgbWFrZXMgdGhlIHJlcXVlc3RlZCBub2RlIGJlY29tZXMg dGhlIGZpcnN0IGVudHJ5CisgKiBpbiBUWFEgbGlzdC4gVGh1cyBib3RoIHRoZSBUWFEgbGlzdCBh bmQgZHJpdmVyJ3MgbGlzdCBhcmUgaW4gc3luYy4gSWYgdGhpcworICogZnVuY3Rpb24gcmV0dXJu cyAldHJ1ZSwgdGhlIGRyaXZlciBpcyBleHBlY3RlZCB0byBzY2hlZHVsZSBwYWNrZXRzCisgKiBm b3IgdHJhbnNtaXNzaW9uLCBhbmQgdGhlbiByZXR1cm4gdGhlIFRYUSB0aHJvdWdoIGllZWU4MDIx MV9yZXR1cm5fdHhxKCkuCisgKgorICogQGh3OiBwb2ludGVyIGFzIG9idGFpbmVkIGZyb20gaWVl ZTgwMjExX2FsbG9jX2h3KCkKKyAqIEB0eHE6IHBvaW50ZXIgb2J0YWluZWQgZnJvbSBzdGF0aW9u IG9yIHZpcnR1YWwgaW50ZXJmYWNlCisgKi8KK2Jvb2wgaWVlZTgwMjExX3R4cV9tYXlfdHJhbnNt aXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJc3RydWN0IGllZWU4MDIxMV90eHEgKnR4 cSk7CisKKy8qKgogICogaWVlZTgwMjExX3R4cV9nZXRfZGVwdGggLSBnZXQgcGVuZGluZyBmcmFt ZS9ieXRlIGNvdW50IG9mIGdpdmVuIHR4cQogICoKICAqIFRoZSB2YWx1ZXMgYXJlIG5vdCBndWFy YW50ZWVkIHRvIGJlIGNvaGVyZW50IHdpdGggcmVnYXJkIHRvIGVhY2ggb3RoZXIsIGkuZS4KZGlm ZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9jZmcuYyBiL25ldC9tYWM4MDIxMS9jZmcuYwppbmRleCA4 MThhYTAwNjAzNDkuLjU3YzU5ZTVjZWI5OCAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2NmZy5j CisrKyBiL25ldC9tYWM4MDIxMS9jZmcuYwpAQCAtMTQ0Nyw2ICsxNDQ3LDkgQEAgc3RhdGljIGlu dCBzdGFfYXBwbHlfcGFyYW1ldGVycyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKIAlp ZiAoaWVlZTgwMjExX3ZpZl9pc19tZXNoKCZzZGF0YS0+dmlmKSkKIAkJc3RhX2FwcGx5X21lc2hf cGFyYW1zKGxvY2FsLCBzdGEsIHBhcmFtcyk7CiAKKwlpZiAocGFyYW1zLT5haXJ0aW1lX3dlaWdo dCkKKwkJc3RhLT5haXJ0aW1lX3dlaWdodCA9IHBhcmFtcy0+YWlydGltZV93ZWlnaHQ7CisKIAkv KiBzZXQgdGhlIFNUQSBzdGF0ZSBhZnRlciBhbGwgc3RhIGluZm8gZnJvbSB1c2VybW9kZSBoYXMg YmVlbiBzZXQgKi8KIAlpZiAodGVzdF9zdGFfZmxhZyhzdGEsIFdMQU5fU1RBX1RETFNfUEVFUikg fHwKIAkgICAgc2V0ICYgQklUKE5MODAyMTFfU1RBX0ZMQUdfQVNTT0NJQVRFRCkpIHsKZGlmZiAt LWdpdCBhL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmMgYi9uZXQvbWFjODAyMTEvZGVidWdmcy5jCmlu ZGV4IDNmZTU0MWUzNThmMy4uODFjNWZlYzJlYWU3IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEv ZGVidWdmcy5jCisrKyBiL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmMKQEAgLTM4Myw2ICszODMsOSBA QCB2b2lkIGRlYnVnZnNfaHdfYWRkKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKQogCWlm IChsb2NhbC0+b3BzLT53YWtlX3R4X3F1ZXVlKQogCQlERUJVR0ZTX0FERF9NT0RFKGFxbSwgMDYw MCk7CiAKKwlkZWJ1Z2ZzX2NyZWF0ZV91MTYoImFpcnRpbWVfZmxhZ3MiLCAwNjAwLAorCQkJICAg cGh5ZCwgJmxvY2FsLT5haXJ0aW1lX2ZsYWdzKTsKKwogCXN0YXRzZCA9IGRlYnVnZnNfY3JlYXRl X2Rpcigic3RhdGlzdGljcyIsIHBoeWQpOwogCiAJLyogaWYgdGhlIGRpciBmYWlsZWQsIGRvbid0 IHB1dCBhbGwgdGhlIG90aGVyIHRoaW5ncyBpbnRvIHRoZSByb290ISAqLwpkaWZmIC0tZ2l0IGEv bmV0L21hYzgwMjExL2RlYnVnZnNfc3RhLmMgYi9uZXQvbWFjODAyMTEvZGVidWdmc19zdGEuYwpp bmRleCBhZjUxODVhODM2ZTUuLmI5Njg2MTQ3YThiMCAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjEx L2RlYnVnZnNfc3RhLmMKKysrIGIvbmV0L21hYzgwMjExL2RlYnVnZnNfc3RhLmMKQEAgLTE4MSw5 ICsxODEsOSBAQCBzdGF0aWMgc3NpemVfdCBzdGFfYXFtX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUs IGNoYXIgX191c2VyICp1c2VyYnVmLAogCQkJICAgICAgIHR4cWktPnRpbi50eF9ieXRlcywKIAkJ CSAgICAgICB0eHFpLT50aW4udHhfcGFja2V0cywKIAkJCSAgICAgICB0eHFpLT5mbGFncywKLQkJ CSAgICAgICB0eHFpLT5mbGFncyAmICgxPDxJRUVFODAyMTFfVFhRX1NUT1ApID8gIlNUT1AiIDog IlJVTiIsCi0JCQkgICAgICAgdHhxaS0+ZmxhZ3MgJiAoMTw8SUVFRTgwMjExX1RYUV9BTVBEVSkg PyAiIEFNUERVIiA6ICIiLAotCQkJICAgICAgIHR4cWktPmZsYWdzICYgKDE8PElFRUU4MDIxMV9U WFFfTk9fQU1TRFUpID8gIiBOTy1BTVNEVSIgOiAiIik7CisJCQkgICAgICAgdGVzdF9iaXQoSUVF RTgwMjExX1RYUV9TVE9QLCAmdHhxaS0+ZmxhZ3MpID8gIlNUT1AiIDogIlJVTiIsCisJCQkgICAg ICAgdGVzdF9iaXQoSUVFRTgwMjExX1RYUV9BTVBEVSwgJnR4cWktPmZsYWdzKSA/ICIgQU1QRFUi IDogIiIsCisJCQkgICAgICAgdGVzdF9iaXQoSUVFRTgwMjExX1RYUV9OT19BTVNEVSwgJnR4cWkt PmZsYWdzKSA/ICIgTk8tQU1TRFUiIDogIiIpOwogCX0KIAogCXJjdV9yZWFkX3VubG9jaygpOwpA QCAtMTk1LDYgKzE5NSw2NCBAQCBzdGF0aWMgc3NpemVfdCBzdGFfYXFtX3JlYWQoc3RydWN0IGZp bGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyYnVmLAogfQogU1RBX09QUyhhcW0pOwogCitzdGF0 aWMgc3NpemVfdCBzdGFfYWlydGltZV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNl ciAqdXNlcmJ1ZiwKKwkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3Qg c3RhX2luZm8gKnN0YSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2xv Y2FsICpsb2NhbCA9IHN0YS0+c2RhdGEtPmxvY2FsOworCXNpemVfdCBidWZzeiA9IDIwMDsKKwlj aGFyICpidWYgPSBremFsbG9jKGJ1ZnN6LCBHRlBfS0VSTkVMKSwgKnAgPSBidWY7CisJdTY0IHJ4 X2FpcnRpbWUgPSAwLCB0eF9haXJ0aW1lID0gMDsKKwlzNjQgZGVmaWNpdFtJRUVFODAyMTFfTlVN X0FDU107CisJc3NpemVfdCBydjsKKwlpbnQgYWM7CisKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIC1F Tk9NRU07CisKKwlmb3IgKGFjID0gMDsgYWMgPCBJRUVFODAyMTFfTlVNX0FDUzsgYWMrKykgewor CQlzcGluX2xvY2tfYmgoJmxvY2FsLT5hY3RpdmVfdHhxX2xvY2tbYWNdKTsKKwkJcnhfYWlydGlt ZSArPSBzdGEtPmFpcnRpbWVbYWNdLnJ4X2FpcnRpbWU7CisJCXR4X2FpcnRpbWUgKz0gc3RhLT5h aXJ0aW1lW2FjXS50eF9haXJ0aW1lOworCQlkZWZpY2l0W2FjXSA9IHN0YS0+YWlydGltZVthY10u ZGVmaWNpdDsKKwkJc3Bpbl91bmxvY2tfYmgoJmxvY2FsLT5hY3RpdmVfdHhxX2xvY2tbYWNdKTsK Kwl9CisKKwlwICs9IHNjbnByaW50ZihwLCBidWZzeiArIGJ1ZiAtIHAsCisJCSJSWDogJWxsdSB1 c1xuVFg6ICVsbHUgdXNcbldlaWdodDogJXVcbiIKKwkJIkRlZmljaXQ6IFZPOiAlbGxkIHVzIFZJ OiAlbGxkIHVzIEJFOiAlbGxkIHVzIEJLOiAlbGxkIHVzXG4iLAorCQlyeF9haXJ0aW1lLAorCQl0 eF9haXJ0aW1lLAorCQlzdGEtPmFpcnRpbWVfd2VpZ2h0LAorCQlkZWZpY2l0WzBdLAorCQlkZWZp Y2l0WzFdLAorCQlkZWZpY2l0WzJdLAorCQlkZWZpY2l0WzNdKTsKKworCXJ2ID0gc2ltcGxlX3Jl YWRfZnJvbV9idWZmZXIodXNlcmJ1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgcCAtIGJ1Zik7CisJa2Zy ZWUoYnVmKTsKKwlyZXR1cm4gcnY7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHN0YV9haXJ0aW1lX3dy aXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqdXNlcmJ1ZiwKKwkJCQkg c2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IHN0YV9pbmZvICpzdGEgPSBm aWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzdGEt PnNkYXRhLT5sb2NhbDsKKwlpbnQgYWM7CisKKwlmb3IgKGFjID0gMDsgYWMgPCBJRUVFODAyMTFf TlVNX0FDUzsgYWMrKykgeworCQlzcGluX2xvY2tfYmgoJmxvY2FsLT5hY3RpdmVfdHhxX2xvY2tb YWNdKTsKKwkJc3RhLT5haXJ0aW1lW2FjXS5yeF9haXJ0aW1lID0gMDsKKwkJc3RhLT5haXJ0aW1l W2FjXS50eF9haXJ0aW1lID0gMDsKKwkJc3RhLT5haXJ0aW1lW2FjXS5kZWZpY2l0ID0gc3RhLT5h aXJ0aW1lX3dlaWdodDsKKwkJc3Bpbl91bmxvY2tfYmgoJmxvY2FsLT5hY3RpdmVfdHhxX2xvY2tb YWNdKTsKKwl9CisKKwlyZXR1cm4gY291bnQ7Cit9CitTVEFfT1BTX1JXKGFpcnRpbWUpOworCiBz dGF0aWMgc3NpemVfdCBzdGFfYWdnX3N0YXR1c19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFy IF9fdXNlciAqdXNlcmJ1ZiwKIAkJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CkBA IC05MDYsNiArOTY0LDEwIEBAIHZvaWQgaWVlZTgwMjExX3N0YV9kZWJ1Z2ZzX2FkZChzdHJ1Y3Qg c3RhX2luZm8gKnN0YSkKIAlpZiAobG9jYWwtPm9wcy0+d2FrZV90eF9xdWV1ZSkKIAkJREVCVUdG U19BREQoYXFtKTsKIAorCWlmICh3aXBoeV9leHRfZmVhdHVyZV9pc3NldChsb2NhbC0+aHcud2lw aHksCisJCQkJICAgIE5MODAyMTFfRVhUX0ZFQVRVUkVfQUlSVElNRV9GQUlSTkVTUykpCisJCURF QlVHRlNfQUREKGFpcnRpbWUpOworCiAJaWYgKHNpemVvZihzdGEtPmRyaXZlcl9idWZmZXJlZF90 aWRzKSA9PSBzaXplb2YodTMyKSkKIAkJZGVidWdmc19jcmVhdGVfeDMyKCJkcml2ZXJfYnVmZmVy ZWRfdGlkcyIsIDA0MDAsCiAJCQkJICAgc3RhLT5kZWJ1Z2ZzX2RpciwKZGlmZiAtLWdpdCBhL25l dC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oIGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgKaW5k ZXggMzM3NjNhMmVhYzgxLi5jNWI2YmE1NzEyODggMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9p ZWVlODAyMTFfaS5oCisrKyBiL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oCkBAIC0xMTM3LDYg KzExMzcsOCBAQCBzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGFj dGl2ZV90eHFzW0lFRUU4MDIxMV9OVU1fQUNTXTsKIAl1MTYgc2NoZWR1bGVfcm91bmRbSUVFRTgw MjExX05VTV9BQ1NdOwogCisJdTE2IGFpcnRpbWVfZmxhZ3M7CisKIAljb25zdCBzdHJ1Y3QgaWVl ZTgwMjExX29wcyAqb3BzOwogCiAJLyoKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tYWluLmMg Yi9uZXQvbWFjODAyMTEvbWFpbi5jCmluZGV4IDVkMjkyZWYwYTU0NC4uZDZlMTliN2EwNzI1IDEw MDY0NAotLS0gYS9uZXQvbWFjODAyMTEvbWFpbi5jCisrKyBiL25ldC9tYWM4MDIxMS9tYWluLmMK QEAgLTY2Nyw2ICs2NjcsNyBAQCBzdHJ1Y3QgaWVlZTgwMjExX2h3ICppZWVlODAyMTFfYWxsb2Nf aHdfbm0oc2l6ZV90IHByaXZfZGF0YV9sZW4sCiAJCUlOSVRfTElTVF9IRUFEKCZsb2NhbC0+YWN0 aXZlX3R4cXNbaV0pOwogCQlzcGluX2xvY2tfaW5pdCgmbG9jYWwtPmFjdGl2ZV90eHFfbG9ja1tp XSk7CiAJfQorCWxvY2FsLT5haXJ0aW1lX2ZsYWdzID0gQUlSVElNRV9VU0VfVFggfCBBSVJUSU1F X1VTRV9SWDsKIAogCUlOSVRfTElTVF9IRUFEKCZsb2NhbC0+Y2hhbmN0eF9saXN0KTsKIAltdXRl eF9pbml0KCZsb2NhbC0+Y2hhbmN0eF9tdHgpOwpAQCAtMTE1Myw2ICsxMTU0LDkgQEAgaW50IGll ZWU4MDIxMV9yZWdpc3Rlcl9odyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIAlpZiAoIWxvY2Fs LT5ody5tYXhfbmFuX2RlX2VudHJpZXMpCiAJCWxvY2FsLT5ody5tYXhfbmFuX2RlX2VudHJpZXMg PSBJRUVFODAyMTFfTUFYX05BTl9JTlNUQU5DRV9JRDsKIAorCWlmICghbG9jYWwtPmh3LndlaWdo dF9tdWx0aXBsaWVyKQorCQlsb2NhbC0+aHcud2VpZ2h0X211bHRpcGxpZXIgPSAxOworCiAJcmVz dWx0ID0gaWVlZTgwMjExX3dlcF9pbml0KGxvY2FsKTsKIAlpZiAocmVzdWx0IDwgMCkKIAkJd2lw aHlfZGVidWcobG9jYWwtPmh3LndpcGh5LCAiRmFpbGVkIHRvIGluaXRpYWxpemUgd2VwOiAlZFxu IiwKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9zdGFfaW5mby5jIGIvbmV0L21hYzgwMjExL3N0 YV9pbmZvLmMKaW5kZXggYzJmNWNiN2RmNTRmLi5hZGY1NjI2NmNjYTMgMTAwNjQ0Ci0tLSBhL25l dC9tYWM4MDIxMS9zdGFfaW5mby5jCisrKyBiL25ldC9tYWM4MDIxMS9zdGFfaW5mby5jCkBAIC05 MCw3ICs5MCw2IEBAIHN0YXRpYyB2b2lkIF9fY2xlYW51cF9zaW5nbGVfc3RhKHN0cnVjdCBzdGFf aW5mbyAqc3RhKQogCXN0cnVjdCB0aWRfYW1wZHVfdHggKnRpZF90eDsKIAlzdHJ1Y3QgaWVlZTgw MjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IHN0YS0+c2RhdGE7CiAJc3RydWN0IGllZWU4MDIxMV9s b2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7Ci0Jc3RydWN0IGZxICpmcSA9ICZsb2NhbC0+ZnE7 CiAJc3RydWN0IHBzX2RhdGEgKnBzOwogCiAJaWYgKHRlc3Rfc3RhX2ZsYWcoc3RhLCBXTEFOX1NU QV9QU19TVEEpIHx8CkBAIC0xMjAsOSArMTE5LDcgQEAgc3RhdGljIHZvaWQgX19jbGVhbnVwX3Np bmdsZV9zdGEoc3RydWN0IHN0YV9pbmZvICpzdGEpCiAKIAkJCXR4cWkgPSB0b190eHFfaW5mbyhz dGEtPnN0YS50eHFbaV0pOwogCi0JCQlzcGluX2xvY2tfYmgoJmZxLT5sb2NrKTsKIAkJCWllZWU4 MDIxMV90eHFfcHVyZ2UobG9jYWwsIHR4cWkpOwotCQkJc3Bpbl91bmxvY2tfYmgoJmZxLT5sb2Nr KTsKIAkJfQogCX0KIApAQCAtMzg3LDkgKzM4NCwxMiBAQCBzdHJ1Y3Qgc3RhX2luZm8gKnN0YV9p bmZvX2FsbG9jKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCWlmIChzdGFf cHJlcGFyZV9yYXRlX2NvbnRyb2wobG9jYWwsIHN0YSwgZ2ZwKSkKIAkJZ290byBmcmVlX3R4cTsK IAorCXN0YS0+YWlydGltZV93ZWlnaHQgPSBJRUVFODAyMTFfREVGQVVMVF9BSVJUSU1FX1dFSUdI VDsKKwogCWZvciAoaSA9IDA7IGkgPCBJRUVFODAyMTFfTlVNX0FDUzsgaSsrKSB7CiAJCXNrYl9x dWV1ZV9oZWFkX2luaXQoJnN0YS0+cHNfdHhfYnVmW2ldKTsKIAkJc2tiX3F1ZXVlX2hlYWRfaW5p dCgmc3RhLT50eF9maWx0ZXJlZFtpXSk7CisJCXN0YS0+YWlydGltZVtpXS5kZWZpY2l0ID0gc3Rh LT5haXJ0aW1lX3dlaWdodDsKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgSUVFRTgwMjExX05VTV9U SURTOyBpKyspCkBAIC0xODI2LDYgKzE4MjYsMjcgQEAgdm9pZCBpZWVlODAyMTFfc3RhX3NldF9i dWZmZXJlZChzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhLAogfQogRVhQT1JUX1NZTUJPTChp ZWVlODAyMTFfc3RhX3NldF9idWZmZXJlZCk7CiAKK3ZvaWQgaWVlZTgwMjExX3N0YV9yZWdpc3Rl cl9haXJ0aW1lKHN0cnVjdCBpZWVlODAyMTFfc3RhICpwdWJzdGEsIHU4IHRpZCwKKwkJCQkgICAg dTMyIHR4X2FpcnRpbWUsIHUzMiByeF9haXJ0aW1lKQoreworCXN0cnVjdCBzdGFfaW5mbyAqc3Rh ID0gY29udGFpbmVyX29mKHB1YnN0YSwgc3RydWN0IHN0YV9pbmZvLCBzdGEpOworCXN0cnVjdCBp ZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc3RhLT5zZGF0YS0+bG9jYWw7CisJdTggYWMgPSBpZWVl ODAyMTFfYWNfZnJvbV90aWQodGlkKTsKKwl1MzIgYWlydGltZSA9IDA7CisKKwlpZiAoc3RhLT5s b2NhbC0+YWlydGltZV9mbGFncyAmIEFJUlRJTUVfVVNFX1RYKQorCQlhaXJ0aW1lICs9IHR4X2Fp cnRpbWU7CisJaWYgKHN0YS0+bG9jYWwtPmFpcnRpbWVfZmxhZ3MgJiBBSVJUSU1FX1VTRV9SWCkK KwkJYWlydGltZSArPSByeF9haXJ0aW1lOworCisJc3Bpbl9sb2NrX2JoKCZsb2NhbC0+YWN0aXZl X3R4cV9sb2NrW2FjXSk7CisJc3RhLT5haXJ0aW1lW2FjXS50eF9haXJ0aW1lICs9IHR4X2FpcnRp bWU7CisJc3RhLT5haXJ0aW1lW2FjXS5yeF9haXJ0aW1lICs9IHJ4X2FpcnRpbWU7CisJc3RhLT5h aXJ0aW1lW2FjXS5kZWZpY2l0IC09IGFpcnRpbWU7CisJc3Bpbl91bmxvY2tfYmgoJmxvY2FsLT5h Y3RpdmVfdHhxX2xvY2tbYWNdKTsKK30KK0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX3N0YV9yZWdp c3Rlcl9haXJ0aW1lKTsKKwogaW50IHN0YV9pbmZvX21vdmVfc3RhdGUoc3RydWN0IHN0YV9pbmZv ICpzdGEsCiAJCQllbnVtIGllZWU4MDIxMV9zdGFfc3RhdGUgbmV3X3N0YXRlKQogewpAQCAtMjE4 OCw2ICsyMjA5LDIzIEBAIHZvaWQgc3RhX3NldF9zaW5mbyhzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwg c3RydWN0IHN0YXRpb25faW5mbyAqc2luZm8sCiAJCXNpbmZvLT5maWxsZWQgfD0gQklUX1VMTChO TDgwMjExX1NUQV9JTkZPX1RYX0ZBSUxFRCk7CiAJfQogCisJaWYgKCEoc2luZm8tPmZpbGxlZCAm IEJJVF9VTEwoTkw4MDIxMV9TVEFfSU5GT19SWF9EVVJBVElPTikpKSB7CisJCWZvciAoYWMgPSAw OyBhYyA8IElFRUU4MDIxMV9OVU1fQUNTOyBhYysrKQorCQkJc2luZm8tPnJ4X2R1cmF0aW9uICs9 IHN0YS0+YWlydGltZVthY10ucnhfYWlydGltZTsKKwkJc2luZm8tPmZpbGxlZCB8PSBCSVRfVUxM KE5MODAyMTFfU1RBX0lORk9fUlhfRFVSQVRJT04pOworCX0KKworCWlmICghKHNpbmZvLT5maWxs ZWQgJiBCSVRfVUxMKE5MODAyMTFfU1RBX0lORk9fVFhfRFVSQVRJT04pKSkgeworCQlmb3IgKGFj ID0gMDsgYWMgPCBJRUVFODAyMTFfTlVNX0FDUzsgYWMrKykKKwkJCXNpbmZvLT50eF9kdXJhdGlv biArPSBzdGEtPmFpcnRpbWVbYWNdLnR4X2FpcnRpbWU7CisJCXNpbmZvLT5maWxsZWQgfD0gQklU X1VMTChOTDgwMjExX1NUQV9JTkZPX1RYX0RVUkFUSU9OKTsKKwl9CisKKwlpZiAoIShzaW5mby0+ ZmlsbGVkICYgQklUX1VMTChOTDgwMjExX1NUQV9JTkZPX0FJUlRJTUVfV0VJR0hUKSkpIHsKKwkJ c2luZm8tPmFpcnRpbWVfd2VpZ2h0ID0gc3RhLT5haXJ0aW1lX3dlaWdodDsKKwkJc2luZm8tPmZp bGxlZCB8PSBCSVRfVUxMKE5MODAyMTFfU1RBX0lORk9fQUlSVElNRV9XRUlHSFQpOworCX0KKwog CXNpbmZvLT5yeF9kcm9wcGVkX21pc2MgPSBzdGEtPnJ4X3N0YXRzLmRyb3BwZWQ7CiAJaWYgKHN0 YS0+cGNwdV9yeF9zdGF0cykgewogCQlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CmRpZmYg LS1naXQgYS9uZXQvbWFjODAyMTEvc3RhX2luZm8uaCBiL25ldC9tYWM4MDIxMS9zdGFfaW5mby5o CmluZGV4IDlhMDQzMjdkNzFkMS4uYjFiMGZkNmEyZTIxIDEwMDY0NAotLS0gYS9uZXQvbWFjODAy MTEvc3RhX2luZm8uaAorKysgYi9uZXQvbWFjODAyMTEvc3RhX2luZm8uaApAQCAtMTI3LDYgKzEy NywxNiBAQCBlbnVtIGllZWU4MDIxMV9hZ2dfc3RvcF9yZWFzb24gewogCUFHR19TVE9QX0RFU1RS T1lfU1RBLAogfTsKIAorLyogRGVidWdmcyBmbGFncyB0byBlbmFibGUvZGlzYWJsZSB1c2Ugb2Yg UlgvVFggYWlydGltZSBpbiBzY2hlZHVsZXIgKi8KKyNkZWZpbmUgQUlSVElNRV9VU0VfVFgJCUJJ VCgwKQorI2RlZmluZSBBSVJUSU1FX1VTRV9SWAkJQklUKDEpCisKK3N0cnVjdCBhaXJ0aW1lX2lu Zm8geworCXU2NCByeF9haXJ0aW1lOworCXU2NCB0eF9haXJ0aW1lOworCXM2NCBkZWZpY2l0Owor fTsKKwogc3RydWN0IHN0YV9pbmZvOwogCiAvKioKQEAgLTU2Myw2ICs1NzMsOSBAQCBzdHJ1Y3Qg c3RhX2luZm8gewogCX0gdHhfc3RhdHM7CiAJdTE2IHRpZF9zZXFbSUVFRTgwMjExX1FPU19DVExf VElEX01BU0sgKyAxXTsKIAorCXN0cnVjdCBhaXJ0aW1lX2luZm8gYWlydGltZVtJRUVFODAyMTFf TlVNX0FDU107CisJdTE2IGFpcnRpbWVfd2VpZ2h0OworCiAJLyoKIAkgKiBBZ2dyZWdhdGlvbiBp bmZvcm1hdGlvbiwgbG9ja2VkIHdpdGggbG9jay4KIAkgKi8KZGlmZiAtLWdpdCBhL25ldC9tYWM4 MDIxMS9zdGF0dXMuYyBiL25ldC9tYWM4MDIxMS9zdGF0dXMuYwppbmRleCAzZjBiOTZlMWUwMmYu LjViOTk1MmIxY2FmMyAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3N0YXR1cy5jCisrKyBiL25l dC9tYWM4MDIxMS9zdGF0dXMuYwpAQCAtODIzLDYgKzgyMywxMiBAQCBzdGF0aWMgdm9pZCBfX2ll ZWU4MDIxMV90eF9zdGF0dXMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQlpZWVlODAyMTFf c3RhX3R4X25vdGlmeShzdGEtPnNkYXRhLCAodm9pZCAqKSBza2ItPmRhdGEsCiAJCQkJCQlhY2tl ZCwgaW5mby0+c3RhdHVzLnR4X3RpbWUpOwogCisJCWlmIChpbmZvLT5zdGF0dXMudHhfdGltZSAm JgorCQkgICAgd2lwaHlfZXh0X2ZlYXR1cmVfaXNzZXQobG9jYWwtPmh3LndpcGh5LAorCQkJCQkg ICAgTkw4MDIxMV9FWFRfRkVBVFVSRV9BSVJUSU1FX0ZBSVJORVNTKSkKKwkJCWllZWU4MDIxMV9z dGFfcmVnaXN0ZXJfYWlydGltZSgmc3RhLT5zdGEsIHRpZCwKKwkJCQkJCSAgICAgICBpbmZvLT5z dGF0dXMudHhfdGltZSwgMCk7CisKIAkJaWYgKGllZWU4MDIxMV9od19jaGVjaygmbG9jYWwtPmh3 LCBSRVBPUlRTX1RYX0FDS19TVEFUVVMpKSB7CiAJCQlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAy MTFfVFhfU1RBVF9BQ0spIHsKIAkJCQlpZiAoc3RhLT5zdGF0dXNfc3RhdHMubG9zdF9wYWNrZXRz KQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3R4LmMgYi9uZXQvbWFjODAyMTEvdHguYwppbmRl eCBhZTg5N2M0ZDI1MjAuLjQxZmJiNjI5MWViMCAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3R4 LmMKKysrIGIvbmV0L21hYzgwMjExL3R4LmMKQEAgLTE0ODgsOCArMTQ4OCwxMSBAQCB2b2lkIGll ZWU4MDIxMV90eHFfcHVyZ2Uoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCiAJc3RydWN0 IGZxICpmcSA9ICZsb2NhbC0+ZnE7CiAJc3RydWN0IGZxX3RpbiAqdGluID0gJnR4cWktPnRpbjsK IAorCXNwaW5fbG9ja19iaCgmZnEtPmxvY2spOwogCWZxX3Rpbl9yZXNldChmcSwgdGluLCBmcV9z a2JfZnJlZV9mdW5jKTsKIAlpZWVlODAyMTFfcHVyZ2VfdHhfcXVldWUoJmxvY2FsLT5odywgJnR4 cWktPmZyYWdzKTsKKwlzcGluX3VubG9ja19iaCgmZnEtPmxvY2spOworCiAJc3Bpbl9sb2NrX2Jo KCZsb2NhbC0+YWN0aXZlX3R4cV9sb2NrW3R4cWktPnR4cS5hY10pOwogCWxpc3RfZGVsX2luaXQo JnR4cWktPnNjaGVkdWxlX29yZGVyKTsKIAlzcGluX3VubG9ja19iaCgmbG9jYWwtPmFjdGl2ZV90 eHFfbG9ja1t0eHFpLT50eHEuYWNdKTsKQEAgLTM2MzgsMTEgKzM2NDEsMjggQEAgc3RydWN0IGll ZWU4MDIxMV90eHEgKmllZWU4MDIxMV9uZXh0X3R4cShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywg dTggYWMpCiAKIAlsb2NrZGVwX2Fzc2VydF9oZWxkKCZsb2NhbC0+YWN0aXZlX3R4cV9sb2NrW2Fj XSk7CiAKKyBiZWdpbjoKIAl0eHFpID0gbGlzdF9maXJzdF9lbnRyeV9vcl9udWxsKCZsb2NhbC0+ YWN0aXZlX3R4cXNbYWNdLAogCQkJCQlzdHJ1Y3QgdHhxX2luZm8sCiAJCQkJCXNjaGVkdWxlX29y ZGVyKTsKKwlpZiAoIXR4cWkpCisJCXJldHVybiBOVUxMOworCisJaWYgKHR4cWktPnR4cS5zdGEp IHsKKwkJc3RydWN0IHN0YV9pbmZvICpzdGEgPSBjb250YWluZXJfb2YodHhxaS0+dHhxLnN0YSwK KwkJCQkJCXN0cnVjdCBzdGFfaW5mbywgc3RhKTsKKworCQlpZiAoc3RhLT5haXJ0aW1lW3R4cWkt PnR4cS5hY10uZGVmaWNpdCA8IDApIHsKKwkJCXN0YS0+YWlydGltZVt0eHFpLT50eHEuYWNdLmRl ZmljaXQgKz0KKwkJCQlzdGEtPmFpcnRpbWVfd2VpZ2h0OworCQkJbGlzdF9tb3ZlX3RhaWwoJnR4 cWktPnNjaGVkdWxlX29yZGVyLAorCQkJCSAgICAgICAmbG9jYWwtPmFjdGl2ZV90eHFzW3R4cWkt PnR4cS5hY10pOworCQkJZ290byBiZWdpbjsKKwkJfQorCX0KKwogCi0JaWYgKCF0eHFpIHx8IHR4 cWktPnNjaGVkdWxlX3JvdW5kID09IGxvY2FsLT5zY2hlZHVsZV9yb3VuZFthY10pCisJaWYgKHR4 cWktPnNjaGVkdWxlX3JvdW5kID09IGxvY2FsLT5zY2hlZHVsZV9yb3VuZFthY10pCiAJCXJldHVy biBOVUxMOwogCiAJbGlzdF9kZWxfaW5pdCgmdHhxaS0+c2NoZWR1bGVfb3JkZXIpOwpAQCAtMzY2 MCwxMiArMzY4MCw3NCBAQCB2b2lkIGllZWU4MDIxMV9yZXR1cm5fdHhxKHN0cnVjdCBpZWVlODAy MTFfaHcgKmh3LAogCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmxvY2FsLT5hY3RpdmVfdHhxX2xvY2tb dHhxLT5hY10pOwogCiAJaWYgKGxpc3RfZW1wdHkoJnR4cWktPnNjaGVkdWxlX29yZGVyKSAmJgot CSAgICAoIXNrYl9xdWV1ZV9lbXB0eSgmdHhxaS0+ZnJhZ3MpIHx8IHR4cWktPnRpbi5iYWNrbG9n X3BhY2tldHMpKQotCQlsaXN0X2FkZF90YWlsKCZ0eHFpLT5zY2hlZHVsZV9vcmRlciwKLQkJCSAg ICAgICZsb2NhbC0+YWN0aXZlX3R4cXNbdHhxLT5hY10pOworCSAgICAoIXNrYl9xdWV1ZV9lbXB0 eSgmdHhxaS0+ZnJhZ3MpIHx8IHR4cWktPnRpbi5iYWNrbG9nX3BhY2tldHMpKSB7CisJCS8qIElm IGFpcnRpbWUgYWNjb3VudGluZyBpcyBhY3RpdmUsIGFsd2F5cyBlbnF1ZXVlIFNUQXMgYXQgdGhl CisJCSAqIGhlYWQgb2YgdGhlIGxpc3QgdG8gZW5zdXJlIHRoYXQgdGhleSBvbmx5IGdldCBtb3Zl ZCB0byB0aGUKKwkJICogYmFjayBieSB0aGUgYWlydGltZSBEUlIgc2NoZWR1bGVyIG9uY2UgdGhl eSBoYXZlIGEgbmVnYXRpdmUKKwkJICogZGVmaWNpdC4gQSBzdGF0aW9uIHRoYXQgYWxyZWFkeSBo YXMgYSBuZWdhdGl2ZSBkZWZpY2l0IHdpbGwKKwkJICogZ2V0IGltbWVkaWF0ZWx5IG1vdmVkIHRv IHRoZSBiYWNrIG9mIHRoZSBsaXN0IG9uIHRoZSBuZXh0CisJCSAqIGNhbGwgdG8gaWVlZTgwMjEx X25leHRfdHhxKCkuCisJCSAqLworCQlpZiAodHhxaS0+dHhxLnN0YSAmJgorCQkgICAgd2lwaHlf ZXh0X2ZlYXR1cmVfaXNzZXQobG9jYWwtPmh3LndpcGh5LAorCQkJCQkgICAgTkw4MDIxMV9FWFRf RkVBVFVSRV9BSVJUSU1FX0ZBSVJORVNTKSkKKwkJCWxpc3RfYWRkKCZ0eHFpLT5zY2hlZHVsZV9v cmRlciwKKwkJCQkgJmxvY2FsLT5hY3RpdmVfdHhxc1t0eHEtPmFjXSk7CisJCWVsc2UKKwkJCWxp c3RfYWRkX3RhaWwoJnR4cWktPnNjaGVkdWxlX29yZGVyLAorCQkJCSAgICAgICZsb2NhbC0+YWN0 aXZlX3R4cXNbdHhxLT5hY10pOworCX0KIH0KIEVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3JldHVy bl90eHEpOwogCitib29sIGllZWU4MDIxMV90eHFfbWF5X3RyYW5zbWl0KHN0cnVjdCBpZWVlODAy MTFfaHcgKmh3LAorCQkJCXN0cnVjdCBpZWVlODAyMTFfdHhxICp0eHEpCit7CisJc3RydWN0IGll ZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7CisJc3RydWN0IHR4cV9pbmZv ICppdGVyLCAqdG1wLCAqdHhxaSA9IHRvX3R4cV9pbmZvKHR4cSk7CisJc3RydWN0IHN0YV9pbmZv ICpzdGE7CisJdTggYWMgPSB0eHEtPmFjOworCisJbG9ja2RlcF9hc3NlcnRfaGVsZCgmbG9jYWwt PmFjdGl2ZV90eHFfbG9ja1thY10pOworCisJaWYgKCF0eHFpLT50eHEuc3RhKQorCQlnb3RvIG91 dDsKKworCWlmIChsaXN0X2VtcHR5KCZ0eHFpLT5zY2hlZHVsZV9vcmRlcikpCisJCWdvdG8gb3V0 OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGl0ZXIsIHRtcCwgJmxvY2FsLT5hY3RpdmVf dHhxc1thY10sCisJCQkJIHNjaGVkdWxlX29yZGVyKSB7CisJCWlmIChpdGVyID09IHR4cWkpCisJ CQlicmVhazsKKworCQlpZiAoIWl0ZXItPnR4cS5zdGEpIHsKKwkJCWxpc3RfbW92ZV90YWlsKCZp dGVyLT5zY2hlZHVsZV9vcmRlciwKKwkJCQkgICAgICAgJmxvY2FsLT5hY3RpdmVfdHhxc1thY10p OworCQkJY29udGludWU7CisJCX0KKwkJc3RhID0gY29udGFpbmVyX29mKGl0ZXItPnR4cS5zdGEs IHN0cnVjdCBzdGFfaW5mbywgc3RhKTsKKwkJaWYgKHN0YS0+YWlydGltZVthY10uZGVmaWNpdCA8 IDApCisJCQlzdGEtPmFpcnRpbWVbYWNdLmRlZmljaXQgKz0gc3RhLT5haXJ0aW1lX3dlaWdodDsK KwkJbGlzdF9tb3ZlX3RhaWwoJml0ZXItPnNjaGVkdWxlX29yZGVyLCAmbG9jYWwtPmFjdGl2ZV90 eHFzW2FjXSk7CisJfQorCisJc3RhID0gY29udGFpbmVyX29mKHR4cWktPnR4cS5zdGEsIHN0cnVj dCBzdGFfaW5mbywgc3RhKTsKKwlpZiAoc3RhLT5haXJ0aW1lW2FjXS5kZWZpY2l0ID49IDApCisJ CWdvdG8gb3V0OworCisJc3RhLT5haXJ0aW1lW2FjXS5kZWZpY2l0ICs9IHN0YS0+YWlydGltZV93 ZWlnaHQ7CisJbGlzdF9tb3ZlX3RhaWwoJnR4cWktPnNjaGVkdWxlX29yZGVyLCAmbG9jYWwtPmFj dGl2ZV90eHFzW2FjXSk7CisKKwlyZXR1cm4gZmFsc2U7CitvdXQ6CisJaWYgKCFsaXN0X2VtcHR5 KCZ0eHFpLT5zY2hlZHVsZV9vcmRlcikpCisJCWxpc3RfZGVsX2luaXQoJnR4cWktPnNjaGVkdWxl X29yZGVyKTsKKworCXJldHVybiB0cnVlOworfQorRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfdHhx X21heV90cmFuc21pdCk7CisKIHZvaWQgaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9zdGFydChzdHJ1 Y3QgaWVlZTgwMjExX2h3ICpodywgdTggYWMpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAq bG9jYWwgPSBod190b19sb2NhbChodyk7Ci0tIAoxLjkuMQoKCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCmF0aDEwayBtYWlsaW5nIGxpc3QKYXRoMTBrQGxp c3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0 aW5mby9hdGgxMGsK