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-0007BP-IA for ath10k@lists.infradead.org; Wed, 19 Dec 2018 01:02:32 +0000 From: Rajkumar Manoharan Subject: [PATCH v5 4/6] ath9k: Switch to mac80211 TXQ scheduling and airtime APIs Date: Tue, 18 Dec 2018 17:02:09 -0800 Message-Id: <1545181331-5288-5-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?= , Rajkumar Manoharan RnJvbTogVG9rZSBIw7hpbGFuZC1Kw7hyZ2Vuc2VuIDx0b2tlQHRva2UuZGs+CgpUaGlzIG1vdmVz IHRoZSBhdGg5ayBkcml2ZXIgdG8gdXNlIHRoZSBtYWM4MDIxMSBUWFEgc2NoZWR1bGluZyBhbmQK YWlydGltZSBhY2NvdW50aW5nIEFQSXMsIHJlbW92aW5nIHRoZSBjb3JyZXNwb25kaW5nIHN0YXRl IHRyYWNraW5nCmluc2lkZSB0aGUgZHJpdmVyLgoKU2lnbmVkLW9mZi1ieTogVG9rZSBIw7hpbGFu ZC1Kw7hyZ2Vuc2VuIDx0b2tlQHRva2UuZGs+CltybWFub2hhckBjb2RlYXVyb3JhLm9yZzogZml4 ZWQgY2hlY2twYXRjaCBlcnJvciBhbmQgd2FybmluZ3NdClNpZ25lZC1vZmYtYnk6IFJhamt1bWFy IE1hbm9oYXJhbiA8cm1hbm9oYXJAY29kZWF1cm9yYS5vcmc+Ci0tLQogZHJpdmVycy9uZXQvd2ly ZWxlc3MvYXRoL2F0aDlrL2F0aDlrLmggICAgIHwgIDE0IC0tCiBkcml2ZXJzL25ldC93aXJlbGVz cy9hdGgvYXRoOWsvZGVidWcuYyAgICAgfCAgIDMgLQogZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRo L2F0aDlrL2RlYnVnLmggICAgIHwgICA4IC0KIGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5 ay9kZWJ1Z19zdGEuYyB8ICA3MCAtLS0tLS0tLS0KIGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9h dGg5ay9pbml0LmMgICAgICB8ICAgMyArLQogZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlr L3JlY3YuYyAgICAgIHwgICA5ICstCiBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsveG1p dC5jICAgICAgfCAyNDQgKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDcgZmlsZXMgY2hh bmdlZCwgNzUgaW5zZXJ0aW9ucygrKSwgMjc2IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hdGg5ay5oIGIvZHJpdmVycy9uZXQvd2lyZWxl c3MvYXRoL2F0aDlrL2F0aDlrLmgKaW5kZXggMjFiYTIwOTgxYTgwLi45MGI1Njc2NmRhYjEgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hdGg5ay5oCisrKyBiL2Ry aXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hdGg5ay5oCkBAIC0xMTIsOCArMTEyLDYgQEAg aW50IGF0aF9kZXNjZG1hX3NldHVwKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX2Rl c2NkbWEgKmRkLAogI2RlZmluZSBBVEhfVFhGSUZPX0RFUFRIICAgICAgICAgICA4CiAjZGVmaW5l IEFUSF9UWF9FUlJPUiAgICAgICAgICAgICAgIDB4MDEKIAotI2RlZmluZSBBVEhfQUlSVElNRV9R VUFOVFVNICAgICAgICAzMDAgLyogdXNlYyAqLwotCiAvKiBTdG9wIHR4IHRyYWZmaWMgMW1zIGJl Zm9yZSB0aGUgR08gZ29lcyBhd2F5ICovCiAjZGVmaW5lIEFUSF9QMlBfUFNfU1RPUF9USU1FICAg ICAgIDEwMDAKIApAQCAtMjQ2LDEwICsyNDQsOCBAQCBzdHJ1Y3QgYXRoX2F0eF90aWQgewogCXM4 IGJhcl9pbmRleDsKIAlib29sIGFjdGl2ZTsKIAlib29sIGNsZWFyX3BzX2ZpbHRlcjsKLQlib29s IGhhc19xdWV1ZWQ7CiB9OwogCi12b2lkIF9fYXRoX3R4X3F1ZXVlX3RpZChzdHJ1Y3QgYXRoX3Nv ZnRjICpzYywgc3RydWN0IGF0aF9hdHhfdGlkICp0aWQpOwogdm9pZCBhdGhfdHhfcXVldWVfdGlk KHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX2F0eF90aWQgKnRpZCk7CiAKIHN0cnVj dCBhdGhfbm9kZSB7CkBAIC0yNjMsMTIgKzI1OSw5IEBAIHN0cnVjdCBhdGhfbm9kZSB7CiAKIAli b29sIHNsZWVwaW5nOwogCWJvb2wgbm9fcHNfZmlsdGVyOwotCXM2NCBhaXJ0aW1lX2RlZmljaXRb SUVFRTgwMjExX05VTV9BQ1NdOwotCXUzMiBhaXJ0aW1lX3J4X3N0YXJ0OwogCiAjaWZkZWYgQ09O RklHX0FUSDlLX1NUQVRJT05fU1RBVElTVElDUwogCXN0cnVjdCBhdGhfcnhfcmF0ZV9zdGF0cyBy eF9yYXRlX3N0YXRzOwotCXN0cnVjdCBhdGhfYWlydGltZV9zdGF0cyBhaXJ0aW1lX3N0YXRzOwog I2VuZGlmCiAJdTgga2V5X2lkeFs0XTsKIApAQCAtOTg2LDExICs5NzksNiBAQCBzdHJ1Y3QgYXRo X2FudF9jb21iIHsKIAogI2RlZmluZSBBVEg5S19OVU1fQ0hBTkNUWCAgMiAvKiBzdXBwb3J0cyAy IG9wZXJhdGluZyBjaGFubmVscyAqLwogCi0jZGVmaW5lIEFJUlRJTUVfVVNFX1RYCQlCSVQoMCkK LSNkZWZpbmUgQUlSVElNRV9VU0VfUlgJCUJJVCgxKQotI2RlZmluZSBBSVJUSU1FX1VTRV9ORVdf UVVFVUVTCUJJVCgyKQotI2RlZmluZSBBSVJUSU1FX0FDVElWRShmbGFncykgKCEhKGZsYWdzICYg KEFJUlRJTUVfVVNFX1RYfEFJUlRJTUVfVVNFX1JYKSkpCi0KIHN0cnVjdCBhdGhfc29mdGMgewog CXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3OwogCXN0cnVjdCBkZXZpY2UgKmRldjsKQEAgLTEwMzQs OCArMTAyMiw2IEBAIHN0cnVjdCBhdGhfc29mdGMgewogCXNob3J0IG5iY252aWZzOwogCXVuc2ln bmVkIGxvbmcgcHNfdXNlY291bnQ7CiAKLQl1MTYgYWlydGltZV9mbGFnczsgLyogQUlSVElNRV8q ICovCi0KIAlzdHJ1Y3QgYXRoX3J4IHJ4OwogCXN0cnVjdCBhdGhfdHggdHg7CiAJc3RydWN0IGF0 aF9iZWFjb24gYmVhY29uOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0 aDlrL2RlYnVnLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZGVidWcuYwppbmRl eCA0Mzk5ZTlhZDA1OGYuLjBkZmVhNWQ2ZTk0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2ly ZWxlc3MvYXRoL2F0aDlrL2RlYnVnLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0 aDlrL2RlYnVnLmMKQEAgLTE0NDMsOSArMTQ0Myw2IEBAIGludCBhdGg5a19pbml0X2RlYnVnKHN0 cnVjdCBhdGhfaHcgKmFoKQogI2VuZGlmCiAJZGVidWdmc19jcmVhdGVfZmlsZSgidHBjIiwgMDYw MCwgc2MtPmRlYnVnLmRlYnVnZnNfcGh5LCBzYywgJmZvcHNfdHBjKTsKIAotCWRlYnVnZnNfY3Jl YXRlX3UxNigiYWlydGltZV9mbGFncyIsIDA2MDAsCi0JCQkgICBzYy0+ZGVidWcuZGVidWdmc19w aHksICZzYy0+YWlydGltZV9mbGFncyk7Ci0KIAlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJuZl9vdmVy cmlkZSIsIDA2MDAsCiAJCQkgICAgc2MtPmRlYnVnLmRlYnVnZnNfcGh5LCBzYywgJmZvcHNfbmZf b3ZlcnJpZGUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsv ZGVidWcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9kZWJ1Zy5oCmluZGV4IDc5 NjA3ZGIxNDM4Ny4uMzM4MjZhYTEzNjg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVz cy9hdGgvYXRoOWsvZGVidWcuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsv ZGVidWcuaApAQCAtMzE5LDIwICszMTksMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIGF0aDlrX2Rl YnVnX3N0YXRfYW50KHN0cnVjdCBhdGhfc29mdGMgKnNjLAogdm9pZCBhdGhfZGVidWdfcmF0ZV9z dGF0cyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywKIAkJCSAgc3RydWN0IGF0aF9yeF9zdGF0dXMgKnJz LAogCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLXZvaWQgYXRoX2RlYnVnX2FpcnRpbWUoc3Ry dWN0IGF0aF9zb2Z0YyAqc2MsCi0JCSAgICAgICBzdHJ1Y3QgYXRoX25vZGUgKmFuLAotCQkgICAg ICAgdTMyIHJ4LCB1MzIgdHgpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBhdGhfZGVidWdf cmF0ZV9zdGF0cyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywKIAkJCQkJc3RydWN0IGF0aF9yeF9zdGF0 dXMgKnJzLAogCQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogfQotc3RhdGljIGlubGluZSB2 b2lkIGF0aF9kZWJ1Z19haXJ0aW1lKHN0cnVjdCBhdGhfc29mdGMgKnNjLAotCQkJICAgICAgc3Ry dWN0IGF0aF9ub2RlICphbiwKLQkJCSAgICAgIHUzMiByeCwgdTMyIHR4KQotewotfQogI2VuZGlm IC8qIENPTkZJR19BVEg5S19TVEFUSU9OX1NUQVRJU1RJQ1MgKi8KIAogI2VuZGlmIC8qIERFQlVH X0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9kZWJ1Z19z dGEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9kZWJ1Z19zdGEuYwppbmRleCBl OGZjZDNlMWM0NzAuLmQ5NWNhYmRkY2UzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxl c3MvYXRoL2F0aDlrL2RlYnVnX3N0YS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9h dGg5ay9kZWJ1Z19zdGEuYwpAQCAtMjQyLDc1ICsyNDIsNiBAQCBzdGF0aWMgc3NpemVfdCByZWFk X2ZpbGVfbm9kZV9yZWN2KHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcl9idWYs CiAJLmxsc2VlayA9IGRlZmF1bHRfbGxzZWVrLAogfTsKIAotdm9pZCBhdGhfZGVidWdfYWlydGlt ZShzdHJ1Y3QgYXRoX3NvZnRjICpzYywKLQkJc3RydWN0IGF0aF9ub2RlICphbiwKLQkJdTMyIHJ4 LAotCQl1MzIgdHgpCi17Ci0Jc3RydWN0IGF0aF9haXJ0aW1lX3N0YXRzICphc3RhdHMgPSAmYW4t PmFpcnRpbWVfc3RhdHM7Ci0KLQlhc3RhdHMtPnJ4X2FpcnRpbWUgKz0gcng7Ci0JYXN0YXRzLT50 eF9haXJ0aW1lICs9IHR4OwotfQotCi1zdGF0aWMgc3NpemVfdCByZWFkX2FpcnRpbWUoc3RydWN0 IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKLQkJCXNpemVfdCBjb3VudCwgbG9m Zl90ICpwcG9zKQotewotCXN0cnVjdCBhdGhfbm9kZSAqYW4gPSBmaWxlLT5wcml2YXRlX2RhdGE7 Ci0Jc3RydWN0IGF0aF9haXJ0aW1lX3N0YXRzICphc3RhdHM7Ci0Jc3RhdGljIGNvbnN0IGNoYXIg KnFuYW1lWzRdID0gewotCQkiVk8iLCAiVkkiLCAiQkUiLCAiQksiCi0JfTsKLQl1MzIgbGVuID0g MCwgc2l6ZSA9IDI1NjsKLQljaGFyICpidWY7Ci0Jc2l6ZV90IHJldHZhbDsKLQlpbnQgaTsKLQot CWJ1ZiA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGJ1ZiA9PSBOVUxMKQotCQly ZXR1cm4gLUVOT01FTTsKLQotCWFzdGF0cyA9ICZhbi0+YWlydGltZV9zdGF0czsKLQotCWxlbiAr PSBzY25wcmludGYoYnVmICsgbGVuLCBzaXplIC0gbGVuLCAiUlg6ICV1IHVzXG4iLCBhc3RhdHMt PnJ4X2FpcnRpbWUpOwotCWxlbiArPSBzY25wcmludGYoYnVmICsgbGVuLCBzaXplIC0gbGVuLCAi VFg6ICV1IHVzXG4iLCBhc3RhdHMtPnR4X2FpcnRpbWUpOwotCWxlbiArPSBzY25wcmludGYoYnVm ICsgbGVuLCBzaXplIC0gbGVuLCAiRGVmaWNpdDogIik7Ci0JZm9yIChpID0gMDsgaSA8IDQ7IGkr KykKLQkJbGVuICs9IHNjbnByaW50ZihidWYrbGVuLCBzaXplIC0gbGVuLCAiJXM6ICVsbGQgdXMg IiwgcW5hbWVbaV0sIGFuLT5haXJ0aW1lX2RlZmljaXRbaV0pOwotCWlmIChsZW4gPCBzaXplKQot CQlidWZbbGVuKytdID0gJ1xuJzsKLQotCXJldHZhbCA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVy KHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBsZW4pOwotCWtmcmVlKGJ1Zik7Ci0KLQlyZXR1 cm4gcmV0dmFsOwotfQotCi1zdGF0aWMgc3NpemVfdAotd3JpdGVfYWlydGltZV9yZXNldF9zdHVi KHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqdWJ1ZiwKLQkJICAgc2l6ZV90 IGNvdW50LCBsb2ZmX3QgKnBwb3MpCi17Ci0Jc3RydWN0IGF0aF9ub2RlICphbiA9IGZpbGUtPnBy aXZhdGVfZGF0YTsKLQlzdHJ1Y3QgYXRoX2FpcnRpbWVfc3RhdHMgKmFzdGF0czsKLQlpbnQgaTsK LQotCWFzdGF0cyA9ICZhbi0+YWlydGltZV9zdGF0czsKLQlhc3RhdHMtPnJ4X2FpcnRpbWUgPSAw OwotCWFzdGF0cy0+dHhfYWlydGltZSA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKLQkJ YW4tPmFpcnRpbWVfZGVmaWNpdFtpXSA9IEFUSF9BSVJUSU1FX1FVQU5UVU07Ci0JcmV0dXJuIGNv dW50OwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmb3BzX2FpcnRp bWUgPSB7Ci0JLnJlYWQgPSByZWFkX2FpcnRpbWUsCi0JLndyaXRlID0gd3JpdGVfYWlydGltZV9y ZXNldF9zdHViLAotCS5vcGVuID0gc2ltcGxlX29wZW4sCi0JLm93bmVyID0gVEhJU19NT0RVTEUs Ci0JLmxsc2VlayA9IGRlZmF1bHRfbGxzZWVrLAotfTsKLQotCiB2b2lkIGF0aDlrX3N0YV9hZGRf ZGVidWdmcyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCSAgIHN0cnVjdCBpZWVlODAyMTFf dmlmICp2aWYsCiAJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLApAQCAtMzIwLDUgKzI1 MSw0IEBAIHZvaWQgYXRoOWtfc3RhX2FkZF9kZWJ1Z2ZzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3 LAogCiAJZGVidWdmc19jcmVhdGVfZmlsZSgibm9kZV9hZ2dyIiwgMDQ0NCwgZGlyLCBhbiwgJmZv cHNfbm9kZV9hZ2dyKTsKIAlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJub2RlX3JlY3YiLCAwNDQ0LCBk aXIsIGFuLCAmZm9wc19ub2RlX3JlY3YpOwotCWRlYnVnZnNfY3JlYXRlX2ZpbGUoImFpcnRpbWUi LCAwNjQ0LCBkaXIsIGFuLCAmZm9wc19haXJ0aW1lKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMv bmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9pbml0LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgv YXRoOWsvaW5pdC5jCmluZGV4IGMwNzBhOWU1MWViZi4uNDVhMzFmOGExNTE0IDEwMDY0NAotLS0g YS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaW5pdC5jCisrKyBiL2RyaXZlcnMvbmV0 L3dpcmVsZXNzL2F0aC9hdGg5ay9pbml0LmMKQEAgLTY3Niw4ICs2NzYsNiBAQCBzdGF0aWMgaW50 IGF0aDlrX2luaXRfc29mdGModTE2IGRldmlkLCBzdHJ1Y3QgYXRoX3NvZnRjICpzYywKIAogCS8q IFdpbGwgYmUgY2xlYXJlZCBpbiBhdGg5a19zdGFydCgpICovCiAJc2V0X2JpdChBVEhfT1BfSU5W QUxJRCwgJmNvbW1vbi0+b3BfZmxhZ3MpOwotCXNjLT5haXJ0aW1lX2ZsYWdzID0gKEFJUlRJTUVf VVNFX1RYIHwgQUlSVElNRV9VU0VfUlggfAotCQkJICAgICBBSVJUSU1FX1VTRV9ORVdfUVVFVUVT KTsKIAogCXNjLT5zY19haCA9IGFoOwogCXNjLT5kZnNfZGV0ZWN0b3IgPSBkZnNfcGF0dGVybl9k ZXRlY3Rvcl9pbml0KGNvbW1vbiwgTkw4MDIxMV9ERlNfVU5TRVQpOwpAQCAtMTAxMyw2ICsxMDEx LDcgQEAgc3RhdGljIHZvaWQgYXRoOWtfc2V0X2h3X2NhcGFiKHN0cnVjdCBhdGhfc29mdGMgKnNj LCBzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIAlTRVRfSUVFRTgwMjExX1BFUk1fQUREUihodywg Y29tbW9uLT5tYWNhZGRyKTsKIAogCXdpcGh5X2V4dF9mZWF0dXJlX3NldChody0+d2lwaHksIE5M ODAyMTFfRVhUX0ZFQVRVUkVfQ1FNX1JTU0lfTElTVCk7CisJd2lwaHlfZXh0X2ZlYXR1cmVfc2V0 KGh3LT53aXBoeSwgTkw4MDIxMV9FWFRfRkVBVFVSRV9BSVJUSU1FX0ZBSVJORVNTKTsKIH0KIAog aW50IGF0aDlrX2luaXRfZGV2aWNlKHUxNiBkZXZpZCwgc3RydWN0IGF0aF9zb2Z0YyAqc2MsCmRp ZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcmVjdi5jIGIvZHJpdmVy cy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3JlY3YuYwppbmRleCAzMGQxYmQ4MzJkOTAuLjI4NWE2 MmQzMDE5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3JlY3Yu YworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcmVjdi5jCkBAIC0xMDU0LDE0 ICsxMDU0LDcgQEAgc3RhdGljIHZvaWQgYXRoX3J4X2NvdW50X2FpcnRpbWUoc3RydWN0IGF0aF9z b2Z0YyAqc2MsCiAJCQkJCQlsZW4sIHJ4cy0+cmF0ZV9pZHgsIGlzX3NwKTsKIAl9CiAKLSAJaWYg KCEhKHNjLT5haXJ0aW1lX2ZsYWdzICYgQUlSVElNRV9VU0VfUlgpKSB7Ci0JCXNwaW5fbG9ja19i aCgmYWNxLT5sb2NrKTsKLQkJYW4tPmFpcnRpbWVfZGVmaWNpdFthY25vXSAtPSBhaXJ0aW1lOwot CQlpZiAoYW4tPmFpcnRpbWVfZGVmaWNpdFthY25vXSA8PSAwKQotCQkJX19hdGhfdHhfcXVldWVf dGlkKHNjLCBBVEhfQU5fMl9USUQoYW4sIHRpZG5vKSk7Ci0JCXNwaW5fdW5sb2NrX2JoKCZhY3Et PmxvY2spOwotCX0KLQlhdGhfZGVidWdfYWlydGltZShzYywgYW4sIGFpcnRpbWUsIDApOworCWll ZWU4MDIxMV9zdGFfcmVnaXN0ZXJfYWlydGltZShzdGEsIHRpZG5vLCAwLCBhaXJ0aW1lKTsKIGV4 aXQ6CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJl bGVzcy9hdGgvYXRoOWsveG1pdC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3ht aXQuYwppbmRleCAyNWIzZmM4MmQ0YWMuLmQxNTBkYjk5NDUxZiAxMDA2NDQKLS0tIGEvZHJpdmVy cy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3htaXQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVz cy9hdGgvYXRoOWsveG1pdC5jCkBAIC0xMTMsNDQgKzExMywxNCBAQCB2b2lkIGF0aF90eHFfdW5s b2NrX2NvbXBsZXRlKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX3R4cSAqdHhxKQog CQlhdGhfdHhfc3RhdHVzKGh3LCBza2IpOwogfQogCi12b2lkIF9fYXRoX3R4X3F1ZXVlX3RpZChz dHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9hdHhfdGlkICp0aWQpCi17Ci0Jc3RydWN0 IGF0aF92aWYgKmF2cCA9IChzdHJ1Y3QgYXRoX3ZpZiAqKSB0aWQtPmFuLT52aWYtPmRydl9wcml2 OwotCXN0cnVjdCBhdGhfY2hhbmN0eCAqY3R4ID0gYXZwLT5jaGFuY3R4OwotCXN0cnVjdCBhdGhf YWNxICphY3E7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqdGlkX2xpc3Q7Ci0JdTggYWNubyA9IFRJRF9U T19XTUVfQUModGlkLT50aWRubyk7Ci0KLQlpZiAoIWN0eCB8fCAhbGlzdF9lbXB0eSgmdGlkLT5s aXN0KSkKLQkJcmV0dXJuOwotCi0KLQlhY3EgPSAmY3R4LT5hY3FbYWNub107Ci0JaWYgKChzYy0+ YWlydGltZV9mbGFncyAmIEFJUlRJTUVfVVNFX05FV19RVUVVRVMpICYmCi0JICAgIHRpZC0+YW4t PmFpcnRpbWVfZGVmaWNpdFthY25vXSA+IDApCi0JCXRpZF9saXN0ID0gJmFjcS0+YWNxX25ldzsK LQllbHNlCi0JCXRpZF9saXN0ID0gJmFjcS0+YWNxX29sZDsKLQotCWxpc3RfYWRkX3RhaWwoJnRp ZC0+bGlzdCwgdGlkX2xpc3QpOwotfQotCiB2b2lkIGF0aF90eF9xdWV1ZV90aWQoc3RydWN0IGF0 aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkKQogewotCXN0cnVjdCBhdGhfdmlm ICphdnAgPSAoc3RydWN0IGF0aF92aWYgKikgdGlkLT5hbi0+dmlmLT5kcnZfcHJpdjsKLQlzdHJ1 Y3QgYXRoX2NoYW5jdHggKmN0eCA9IGF2cC0+Y2hhbmN0eDsKLQlzdHJ1Y3QgYXRoX2FjcSAqYWNx OworCXN0cnVjdCBpZWVlODAyMTFfdHhxICpxdWV1ZSA9CisJCWNvbnRhaW5lcl9vZigodm9pZCAq KXRpZCwgc3RydWN0IGllZWU4MDIxMV90eHEsIGRydl9wcml2KTsKIAotCWlmICghY3R4IHx8ICFs aXN0X2VtcHR5KCZ0aWQtPmxpc3QpKQotCQlyZXR1cm47Ci0KLQlhY3EgPSAmY3R4LT5hY3FbVElE X1RPX1dNRV9BQyh0aWQtPnRpZG5vKV07Ci0Jc3Bpbl9sb2NrX2JoKCZhY3EtPmxvY2spOwotCV9f YXRoX3R4X3F1ZXVlX3RpZChzYywgdGlkKTsKLQlzcGluX3VubG9ja19iaCgmYWNxLT5sb2NrKTsK KwlpZWVlODAyMTFfcmV0dXJuX3R4cShzYy0+aHcsIHF1ZXVlKTsKIH0KIAotCiB2b2lkIGF0aDlr X3dha2VfdHhfcXVldWUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFf dHhxICpxdWV1ZSkKIHsKIAlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGh3LT5wcml2OwpAQCAtMTYz LDExICsxMzMsNyBAQCB2b2lkIGF0aDlrX3dha2VfdHhfcXVldWUoc3RydWN0IGllZWU4MDIxMV9o dyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdHhxICpxdWV1ZSkKIAkJdGlkLT50aWRubyk7CiAKIAlh dGhfdHhxX2xvY2soc2MsIHR4cSk7Ci0KLQl0aWQtPmhhc19xdWV1ZWQgPSB0cnVlOwotCWF0aF90 eF9xdWV1ZV90aWQoc2MsIHRpZCk7CiAJYXRoX3R4cV9zY2hlZHVsZShzYywgdHhxKTsKLQogCWF0 aF90eHFfdW5sb2NrKHNjLCB0eHEpOwogfQogCkBAIC0yMTcsOCArMTgzLDggQEAgc3RhdGljIHZv aWQgYXRoX3R4cV9za2JfZG9uZShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF90eHEg KnR4cSwKIAlyZXR1cm4gQVRIX0FOXzJfVElEKGFuLCB0aWRubyk7CiB9CiAKLXN0YXRpYyBzdHJ1 Y3Qgc2tfYnVmZiAqCi1hdGhfdGlkX3B1bGwoc3RydWN0IGF0aF9hdHhfdGlkICp0aWQpCitzdGF0 aWMgaW50CithdGhfdGlkX3B1bGwoc3RydWN0IGF0aF9hdHhfdGlkICp0aWQsIHN0cnVjdCBza19i dWZmICoqc2tidWYpCiB7CiAJc3RydWN0IGllZWU4MDIxMV90eHEgKnR4cSA9IGNvbnRhaW5lcl9v Zigodm9pZCopdGlkLCBzdHJ1Y3QgaWVlZTgwMjExX3R4cSwgZHJ2X3ByaXYpOwogCXN0cnVjdCBh dGhfc29mdGMgKnNjID0gdGlkLT5hbi0+c2M7CkBAIC0yMjksMjAgKzE5NSwxNiBAQCBzdGF0aWMg dm9pZCBhdGhfdHhxX3NrYl9kb25lKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX3R4 cSAqdHhxLAogCX07CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgYXRoX2ZyYW1lX2lu Zm8gKmZpOwotCWludCBxOwotCi0JaWYgKCF0aWQtPmhhc19xdWV1ZWQpCi0JCXJldHVybiBOVUxM OworCWludCBxLCByZXQ7CiAKIAlza2IgPSBpZWVlODAyMTFfdHhfZGVxdWV1ZShodywgdHhxKTsK LQlpZiAoIXNrYikgewotCQl0aWQtPmhhc19xdWV1ZWQgPSBmYWxzZTsKLQkJcmV0dXJuIE5VTEw7 Ci0JfQorCWlmICghc2tiKQorCQlyZXR1cm4gLUVOT0VOVDsKIAotCWlmIChhdGhfdHhfcHJlcGFy ZShodywgc2tiLCAmdHhjdGwpKSB7CisJcmV0ID0gYXRoX3R4X3ByZXBhcmUoaHcsIHNrYiwgJnR4 Y3RsKTsKKwlpZiAocmV0KSB7CiAJCWllZWU4MDIxMV9mcmVlX3R4c2tiKGh3LCBza2IpOwotCQly ZXR1cm4gTlVMTDsKKwkJcmV0dXJuIHJldDsKIAl9CiAKIAlxID0gc2tiX2dldF9xdWV1ZV9tYXBw aW5nKHNrYik7CkBAIC0yNTIsMjQgKzIxNCwxOSBAQCBzdGF0aWMgdm9pZCBhdGhfdHhxX3NrYl9k b25lKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX3R4cSAqdHhxLAogCQkrK3RpZC0+ dHhxLT5wZW5kaW5nX2ZyYW1lczsKIAl9CiAKLQlyZXR1cm4gc2tiOwotfQotCi0KLXN0YXRpYyBi b29sIGF0aF90aWRfaGFzX2J1ZmZlcmVkKHN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkKQotewotCXJl dHVybiAhc2tiX3F1ZXVlX2VtcHR5KCZ0aWQtPnJldHJ5X3EpIHx8IHRpZC0+aGFzX3F1ZXVlZDsK Kwkqc2tidWYgPSBza2I7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAq YXRoX3RpZF9kZXF1ZXVlKHN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkKQorc3RhdGljIGludCBhdGhf dGlkX2RlcXVldWUoc3RydWN0IGF0aF9hdHhfdGlkICp0aWQsCisJCQkgICBzdHJ1Y3Qgc2tfYnVm ZiAqKnNrYikKIHsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCi0Jc2tiID0gX19za2JfZGVxdWV1 ZSgmdGlkLT5yZXRyeV9xKTsKLQlpZiAoIXNrYikKLQkJc2tiID0gYXRoX3RpZF9wdWxsKHRpZCk7 CisJaW50IHJldCA9IDA7CisJKnNrYiA9IF9fc2tiX2RlcXVldWUoJnRpZC0+cmV0cnlfcSk7CisJ aWYgKCEqc2tiKQorCQlyZXQgPSBhdGhfdGlkX3B1bGwodGlkLCBza2IpOwogCi0JcmV0dXJuIHNr YjsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBhdGhfdHhfZmx1c2hfdGlkKHN0cnVj dCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX2F0eF90aWQgKnRpZCkKQEAgLTM2NSwxMSArMzIy LDEyIEBAIHN0YXRpYyB2b2lkIGF0aF90aWRfZHJhaW4oc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0 cnVjdCBhdGhfdHhxICp0eHEsCiAJc3RydWN0IGxpc3RfaGVhZCBiZl9oZWFkOwogCXN0cnVjdCBh dGhfdHhfc3RhdHVzIHRzOwogCXN0cnVjdCBhdGhfZnJhbWVfaW5mbyAqZmk7CisJaW50IHJldDsK IAogCW1lbXNldCgmdHMsIDAsIHNpemVvZih0cykpOwogCUlOSVRfTElTVF9IRUFEKCZiZl9oZWFk KTsKIAotCXdoaWxlICgoc2tiID0gYXRoX3RpZF9kZXF1ZXVlKHRpZCkpKSB7CisJd2hpbGUgKChy ZXQgPSBhdGhfdGlkX2RlcXVldWUodGlkLCAmc2tiKSkgPT0gMCkgewogCQlmaSA9IGdldF9mcmFt ZV9pbmZvKHNrYik7CiAJCWJmID0gZmktPmJmOwogCkBAIC02ODEsNyArNjM5LDYgQEAgc3RhdGlj IHZvaWQgYXRoX3R4X2NvbXBsZXRlX2FnZ3Ioc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBh dGhfdHhxICp0eHEsCiAJCXNrYl9xdWV1ZV9zcGxpY2VfdGFpbCgmYmZfcGVuZGluZywgJnRpZC0+ cmV0cnlfcSk7CiAJCWlmICghYW4tPnNsZWVwaW5nKSB7CiAJCQlhdGhfdHhfcXVldWVfdGlkKHNj LCB0aWQpOwotCiAJCQlpZiAodHMtPnRzX3N0YXR1cyAmIChBVEg5S19UWEVSUl9GSUxUIHwgQVRI OUtfVFhFUlJfWFJFVFJZKSkKIAkJCQl0aWQtPmNsZWFyX3BzX2ZpbHRlciA9IHRydWU7CiAJCX0K QEAgLTcwOCwxMSArNjY1LDExIEBAIHN0YXRpYyBib29sIGJmX2lzX2FtcGR1X25vdF9wcm9iaW5n KHN0cnVjdCBhdGhfYnVmICpiZikKICAgICByZXR1cm4gYmZfaXNhbXBkdShiZikgJiYgIShpbmZv LT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfUkFURV9DVFJMX1BST0JFKTsKIH0KIAotc3RhdGlj IHZvaWQgYXRoX3R4X2NvdW50X2FpcnRpbWUoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBh dGhfbm9kZSAqYW4sCi0JCQkJIHN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkLCBzdHJ1Y3QgYXRoX2J1 ZiAqYmYsCitzdGF0aWMgdm9pZCBhdGhfdHhfY291bnRfYWlydGltZShzdHJ1Y3QgYXRoX3NvZnRj ICpzYywKKwkJCQkgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKKwkJCQkgc3RydWN0IGF0aF9i dWYgKmJmLAogCQkJCSBzdHJ1Y3QgYXRoX3R4X3N0YXR1cyAqdHMpCiB7Ci0Jc3RydWN0IGF0aF90 eHEgKnR4cSA9IHRpZC0+dHhxOwogCXUzMiBhaXJ0aW1lID0gMDsKIAlpbnQgaTsKIApAQCAtNzIy LDE3ICs2NzksNyBAQCBzdGF0aWMgdm9pZCBhdGhfdHhfY291bnRfYWlydGltZShzdHJ1Y3QgYXRo X3NvZnRjICpzYywgc3RydWN0IGF0aF9ub2RlICphbiwKIAkJYWlydGltZSArPSByYXRlX2R1ciAq IGJmLT5yYXRlc1tpXS5jb3VudDsKIAl9CiAKLQlpZiAoc2MtPmFpcnRpbWVfZmxhZ3MgJiBBSVJU SU1FX1VTRV9UWCkgewotCQlpbnQgcSA9IHR4cS0+bWFjODAyMTFfcW51bTsKLQkJc3RydWN0IGF0 aF9hY3EgKmFjcSA9ICZzYy0+Y3VyX2NoYW4tPmFjcVtxXTsKLQotCQlzcGluX2xvY2tfYmgoJmFj cS0+bG9jayk7Ci0JCWFuLT5haXJ0aW1lX2RlZmljaXRbcV0gLT0gYWlydGltZTsKLQkJaWYgKGFu LT5haXJ0aW1lX2RlZmljaXRbcV0gPD0gMCkKLQkJCV9fYXRoX3R4X3F1ZXVlX3RpZChzYywgdGlk KTsKLQkJc3Bpbl91bmxvY2tfYmgoJmFjcS0+bG9jayk7Ci0JfQotCWF0aF9kZWJ1Z19haXJ0aW1l KHNjLCBhbiwgMCwgYWlydGltZSk7CisJaWVlZTgwMjExX3N0YV9yZWdpc3Rlcl9haXJ0aW1lKHN0 YSwgdHMtPnRpZCwgYWlydGltZSwgMCk7CiB9CiAKIHN0YXRpYyB2b2lkIGF0aF90eF9wcm9jZXNz X2J1ZmZlcihzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF90eHEgKnR4cSwKQEAgLTc2 Miw3ICs3MDksNyBAQCBzdGF0aWMgdm9pZCBhdGhfdHhfcHJvY2Vzc19idWZmZXIoc3RydWN0IGF0 aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfdHhxICp0eHEsCiAJaWYgKHN0YSkgewogCQlzdHJ1Y3Qg YXRoX25vZGUgKmFuID0gKHN0cnVjdCBhdGhfbm9kZSAqKXN0YS0+ZHJ2X3ByaXY7CiAJCXRpZCA9 IGF0aF9nZXRfc2tiX3RpZChzYywgYW4sIGJmLT5iZl9tcGR1KTsKLQkJYXRoX3R4X2NvdW50X2Fp cnRpbWUoc2MsIGFuLCB0aWQsIGJmLCB0cyk7CisJCWF0aF90eF9jb3VudF9haXJ0aW1lKHNjLCBz dGEsIGJmLCB0cyk7CiAJCWlmICh0cy0+dHNfc3RhdHVzICYgKEFUSDlLX1RYRVJSX0ZJTFQgfCBB VEg5S19UWEVSUl9YUkVUUlkpKQogCQkJdGlkLT5jbGVhcl9wc19maWx0ZXIgPSB0cnVlOwogCX0K QEAgLTk0NiwyMCArODkzLDIxIEBAIHN0YXRpYyBpbnQgYXRoX2NvbXB1dGVfbnVtX2RlbGltcyhz dHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9hdHhfdGlkICp0aWQsCiAJcmV0dXJuIG5k ZWxpbTsKIH0KIAotc3RhdGljIHN0cnVjdCBhdGhfYnVmICoKK3N0YXRpYyBpbnQKIGF0aF90eF9n ZXRfdGlkX3N1YmZyYW1lKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX3R4cSAqdHhx LAotCQkJc3RydWN0IGF0aF9hdHhfdGlkICp0aWQpCisJCQlzdHJ1Y3QgYXRoX2F0eF90aWQgKnRp ZCwgc3RydWN0IGF0aF9idWYgKipidWYpCiB7CiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0 eF9pbmZvOwogCXN0cnVjdCBhdGhfZnJhbWVfaW5mbyAqZmk7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNr YiwgKmZpcnN0X3NrYiA9IE5VTEw7CiAJc3RydWN0IGF0aF9idWYgKmJmOworCXN0cnVjdCBza19i dWZmICpza2IsICpmaXJzdF9za2IgPSBOVUxMOwogCXUxNiBzZXFubzsKKwlpbnQgcmV0OwogCiAJ d2hpbGUgKDEpIHsKLQkJc2tiID0gYXRoX3RpZF9kZXF1ZXVlKHRpZCk7Ci0JCWlmICghc2tiKQot CQkJYnJlYWs7CisJCXJldCA9IGF0aF90aWRfZGVxdWV1ZSh0aWQsICZza2IpOworCQlpZiAocmV0 IDwgMCkKKwkJCXJldHVybiByZXQ7CiAKIAkJZmkgPSBnZXRfZnJhbWVfaW5mbyhza2IpOwogCQli ZiA9IGZpLT5iZjsKQEAgLTk5MSw3ICs5MzksNyBAQCBzdGF0aWMgaW50IGF0aF9jb21wdXRlX251 bV9kZWxpbXMoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkLAog CiAJCWlmICghKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BTVBEVSkpIHsKIAkJ CWJmLT5iZl9zdGF0ZS5iZl90eXBlID0gMDsKLQkJCXJldHVybiBiZjsKKwkJCWJyZWFrOwogCQl9 CiAKIAkJYmYtPmJmX3N0YXRlLmJmX3R5cGUgPSBCVUZfQU1QRFUgfCBCVUZfQUdHUjsKQEAgLTEw MTAsNyArOTU4LDcgQEAgc3RhdGljIGludCBhdGhfY29tcHV0ZV9udW1fZGVsaW1zKHN0cnVjdCBh dGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX2F0eF90aWQgKnRpZCwKIAkJCQkJZmlyc3Rfc2tiID0g c2tiOwogCQkJCWNvbnRpbnVlOwogCQkJfQotCQkJYnJlYWs7CisJCQlyZXR1cm4gLUVJTlBST0dS RVNTOwogCQl9CiAKIAkJaWYgKHRpZC0+YmFyX2luZGV4ID4gQVRIX0JBX0lOREVYKHRpZC0+c2Vx X3N0YXJ0LCBzZXFubykpIHsKQEAgLTEwMjcsMTAgKzk3NSwxMSBAQCBzdGF0aWMgaW50IGF0aF9j b21wdXRlX251bV9kZWxpbXMoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfYXR4X3Rp ZCAqdGlkLAogCQlpZiAoYmZfaXNhbXBkdShiZikpCiAJCQlhdGhfdHhfYWRkdG9fYmF3KHNjLCB0 aWQsIGJmKTsKIAotCQlyZXR1cm4gYmY7CisJCWJyZWFrOwogCX0KIAotCXJldHVybiBOVUxMOwor CSpidWYgPSBiZjsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludApAQCAtMTA0MCw3ICs5ODks NyBAQCBzdGF0aWMgaW50IGF0aF9jb21wdXRlX251bV9kZWxpbXMoc3RydWN0IGF0aF9zb2Z0YyAq c2MsIHN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkLAogewogI2RlZmluZSBQQURCWVRFUyhfbGVuKSAo KDQgLSAoKF9sZW4pICUgNCkpICUgNCkKIAlzdHJ1Y3QgYXRoX2J1ZiAqYmYgPSBiZl9maXJzdCwg KmJmX3ByZXYgPSBOVUxMOwotCWludCBuZnJhbWVzID0gMCwgbmRlbGltOworCWludCBuZnJhbWVz ID0gMCwgbmRlbGltLCByZXQ7CiAJdTE2IGFnZ3JfbGltaXQgPSAwLCBhbCA9IDAsIGJwYWQgPSAw LAogCSAgICBhbF9kZWx0YSwgaF9iYXcgPSB0aWQtPmJhd19zaXplIC8gMjsKIAlzdHJ1Y3QgaWVl ZTgwMjExX3R4X2luZm8gKnR4X2luZm87CkBAIC0xMDkyLDcgKzEwNDEsOSBAQCBzdGF0aWMgaW50 IGF0aF9jb21wdXRlX251bV9kZWxpbXMoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhf YXR4X3RpZCAqdGlkLAogCiAJCWJmX3ByZXYgPSBiZjsKIAotCQliZiA9IGF0aF90eF9nZXRfdGlk X3N1YmZyYW1lKHNjLCB0eHEsIHRpZCk7CisJCXJldCA9IGF0aF90eF9nZXRfdGlkX3N1YmZyYW1l KHNjLCB0eHEsIHRpZCwgJmJmKTsKKwkJaWYgKHJldCA8IDApCisJCQlicmVhazsKIAl9CiAJZ290 byBmaW5pc2g7CiBzdG9wOgpAQCAtMTQ4OSw3ICsxNDQwLDcgQEAgc3RhdGljIHZvaWQgYXRoX3R4 X2ZpbGxfZGVzYyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9idWYgKmJmLAogCQkg IHN0cnVjdCBhdGhfYnVmICpiZl9maXJzdCkKIHsKIAlzdHJ1Y3QgYXRoX2J1ZiAqYmYgPSBiZl9m aXJzdCwgKmJmX3ByZXYgPSBOVUxMOwotCWludCBuZnJhbWVzID0gMDsKKwlpbnQgbmZyYW1lcyA9 IDAsIHJldDsKIAogCWRvIHsKIAkJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvOwpA QCAtMTUwMyw4ICsxNDU0LDggQEAgc3RhdGljIHZvaWQgYXRoX3R4X2ZpbGxfZGVzYyhzdHJ1Y3Qg YXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9idWYgKmJmLAogCQlpZiAobmZyYW1lcyA+PSAyKQog CQkJYnJlYWs7CiAKLQkJYmYgPSBhdGhfdHhfZ2V0X3RpZF9zdWJmcmFtZShzYywgdHhxLCB0aWQp OwotCQlpZiAoIWJmKQorCQlyZXQgPSBhdGhfdHhfZ2V0X3RpZF9zdWJmcmFtZShzYywgdHhxLCB0 aWQsICZiZik7CisJCWlmIChyZXQgPCAwKQogCQkJYnJlYWs7CiAKIAkJdHhfaW5mbyA9IElFRUU4 MDIxMV9TS0JfQ0IoYmYtPmJmX21wZHUpOwpAQCAtMTUxNywzMCArMTQ2OCwyNyBAQCBzdGF0aWMg dm9pZCBhdGhfdHhfZmlsbF9kZXNjKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX2J1 ZiAqYmYsCiAJfSB3aGlsZSAoMSk7CiB9CiAKLXN0YXRpYyBib29sIGF0aF90eF9zY2hlZF9hZ2dy KHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX3R4cSAqdHhxLAotCQkJICAgICAgc3Ry dWN0IGF0aF9hdHhfdGlkICp0aWQpCitzdGF0aWMgaW50IGF0aF90eF9zY2hlZF9hZ2dyKHN0cnVj dCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX3R4cSAqdHhxLAorCQkJICAgICBzdHJ1Y3QgYXRo X2F0eF90aWQgKnRpZCkKIHsKLQlzdHJ1Y3QgYXRoX2J1ZiAqYmY7CisJc3RydWN0IGF0aF9idWYg KmJmID0gTlVMTDsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm87CiAJc3RydWN0 IGxpc3RfaGVhZCBiZl9xOwotCWludCBhZ2dyX2xlbiA9IDA7CisJaW50IGFnZ3JfbGVuID0gMCwg cmV0OwogCWJvb2wgYWdncjsKIAotCWlmICghYXRoX3RpZF9oYXNfYnVmZmVyZWQodGlkKSkKLQkJ cmV0dXJuIGZhbHNlOwotCiAJSU5JVF9MSVNUX0hFQUQoJmJmX3EpOwogCi0JYmYgPSBhdGhfdHhf Z2V0X3RpZF9zdWJmcmFtZShzYywgdHhxLCB0aWQpOwotCWlmICghYmYpCi0JCXJldHVybiBmYWxz ZTsKKwlyZXQgPSBhdGhfdHhfZ2V0X3RpZF9zdWJmcmFtZShzYywgdHhxLCB0aWQsICZiZik7CisJ aWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CiAKIAl0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9D QihiZi0+YmZfbXBkdSk7CiAJYWdnciA9ICEhKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RY X0NUTF9BTVBEVSk7CiAJaWYgKChhZ2dyICYmIHR4cS0+YXhxX2FtcGR1X2RlcHRoID49IEFUSF9B R0dSX01JTl9RREVQVEgpIHx8CiAJICAgICghYWdnciAmJiB0eHEtPmF4cV9kZXB0aCA+PSBBVEhf Tk9OX0FHR1JfTUlOX1FERVBUSCkpIHsKIAkJX19za2JfcXVldWVfdGFpbCgmdGlkLT5yZXRyeV9x LCBiZi0+YmZfbXBkdSk7Ci0JCXJldHVybiBmYWxzZTsKKwkJcmV0dXJuIC1FQlVTWTsKIAl9CiAK IAlhdGhfc2V0X3JhdGVzKHRpZC0+YW4tPnZpZiwgdGlkLT5hbi0+c3RhLCBiZik7CkBAIC0xNTUw LDcgKzE0OTgsNyBAQCBzdGF0aWMgYm9vbCBhdGhfdHhfc2NoZWRfYWdncihzdHJ1Y3QgYXRoX3Nv ZnRjICpzYywgc3RydWN0IGF0aF90eHEgKnR4cSwKIAkJYXRoX3R4X2Zvcm1fYnVyc3Qoc2MsIHR4 cSwgdGlkLCAmYmZfcSwgYmYpOwogCiAJaWYgKGxpc3RfZW1wdHkoJmJmX3EpKQotCQlyZXR1cm4g ZmFsc2U7CisJCXJldHVybiAtRUFHQUlOOwogCiAJaWYgKHRpZC0+Y2xlYXJfcHNfZmlsdGVyIHx8 IHRpZC0+YW4tPm5vX3BzX2ZpbHRlcikgewogCQl0aWQtPmNsZWFyX3BzX2ZpbHRlciA9IGZhbHNl OwpAQCAtMTU1OSw3ICsxNTA3LDcgQEAgc3RhdGljIGJvb2wgYXRoX3R4X3NjaGVkX2FnZ3Ioc3Ry dWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfdHhxICp0eHEsCiAKIAlhdGhfdHhfZmlsbF9k ZXNjKHNjLCBiZiwgdHhxLCBhZ2dyX2xlbik7CiAJYXRoX3R4X3R4cWFkZGJ1ZihzYywgdHhxLCAm YmZfcSwgZmFsc2UpOwotCXJldHVybiB0cnVlOworCXJldHVybiAwOwogfQogCiBpbnQgYXRoX3R4 X2FnZ3Jfc3RhcnQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpz dGEsCkBAIC0xNjIyLDI4ICsxNTcwLDE2IEBAIHZvaWQgYXRoX3R4X2FnZ3Jfc2xlZXAoc3RydWN0 IGllZWU4MDIxMV9zdGEgKnN0YSwgc3RydWN0IGF0aF9zb2Z0YyAqc2MsCiB7CiAJc3RydWN0IGF0 aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihzYy0+c2NfYWgpOwogCXN0cnVjdCBh dGhfYXR4X3RpZCAqdGlkOwotCXN0cnVjdCBhdGhfdHhxICp0eHE7CiAJaW50IHRpZG5vOwogCiAJ YXRoX2RiZyhjb21tb24sIFhNSVQsICIlcyBjYWxsZWRcbiIsIF9fZnVuY19fKTsKIAogCWZvciAo dGlkbm8gPSAwOyB0aWRubyA8IElFRUU4MDIxMV9OVU1fVElEUzsgdGlkbm8rKykgewogCQl0aWQg PSBhdGhfbm9kZV90b190aWQoYW4sIHRpZG5vKTsKLQkJdHhxID0gdGlkLT50eHE7Ci0KLQkJYXRo X3R4cV9sb2NrKHNjLCB0eHEpOwotCi0JCWlmIChsaXN0X2VtcHR5KCZ0aWQtPmxpc3QpKSB7Ci0J CQlhdGhfdHhxX3VubG9jayhzYywgdHhxKTsKLQkJCWNvbnRpbnVlOwotCQl9CiAKIAkJaWYgKCFz a2JfcXVldWVfZW1wdHkoJnRpZC0+cmV0cnlfcSkpCiAJCQlpZWVlODAyMTFfc3RhX3NldF9idWZm ZXJlZChzdGEsIHRpZC0+dGlkbm8sIHRydWUpOwogCi0JCWxpc3RfZGVsX2luaXQoJnRpZC0+bGlz dCk7Ci0KLQkJYXRoX3R4cV91bmxvY2soc2MsIHR4cSk7CiAJfQogfQogCkBAIC0xNjYyLDExICsx NTk4LDEyIEBAIHZvaWQgYXRoX3R4X2FnZ3Jfd2FrZXVwKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBz dHJ1Y3QgYXRoX25vZGUgKmFuKQogCiAJCWF0aF90eHFfbG9jayhzYywgdHhxKTsKIAkJdGlkLT5j bGVhcl9wc19maWx0ZXIgPSB0cnVlOwotCQlpZiAoYXRoX3RpZF9oYXNfYnVmZmVyZWQodGlkKSkg eworCQlpZiAoIXNrYl9xdWV1ZV9lbXB0eSgmdGlkLT5yZXRyeV9xKSkgewogCQkJYXRoX3R4X3F1 ZXVlX3RpZChzYywgdGlkKTsKIAkJCWF0aF90eHFfc2NoZWR1bGUoc2MsIHR4cSk7CiAJCX0KIAkJ YXRoX3R4cV91bmxvY2tfY29tcGxldGUoc2MsIHR4cSk7CisKIAl9CiB9CiAKQEAgLTE2OTcsOSAr MTYzNCw5IEBAIHZvaWQgYXRoOWtfcmVsZWFzZV9idWZmZXJlZF9mcmFtZXMoc3RydWN0IGllZWU4 MDIxMV9odyAqaHcsCiAJc3RydWN0IGF0aF90eHEgKnR4cSA9IHNjLT50eC51YXBzZHE7CiAJc3Ry dWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvOwogCXN0cnVjdCBsaXN0X2hlYWQgYmZfcTsKLQlz dHJ1Y3QgYXRoX2J1ZiAqYmZfdGFpbCA9IE5VTEwsICpiZjsKKwlzdHJ1Y3QgYXRoX2J1ZiAqYmZf dGFpbCA9IE5VTEwsICpiZiA9IE5VTEw7CiAJaW50IHNlbnQgPSAwOwotCWludCBpOworCWludCBp LCByZXQ7CiAKIAlJTklUX0xJU1RfSEVBRCgmYmZfcSk7CiAJZm9yIChpID0gMDsgdGlkcyAmJiBu ZnJhbWVzOyBpKyssIHRpZHMgPj49IDEpIHsKQEAgLTE3MTIsOCArMTY0OSw5IEBAIHZvaWQgYXRo OWtfcmVsZWFzZV9idWZmZXJlZF9mcmFtZXMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAKIAkJ YXRoX3R4cV9sb2NrKHNjLCB0aWQtPnR4cSk7CiAJCXdoaWxlIChuZnJhbWVzID4gMCkgewotCQkJ YmYgPSBhdGhfdHhfZ2V0X3RpZF9zdWJmcmFtZShzYywgc2MtPnR4LnVhcHNkcSwgdGlkKTsKLQkJ CWlmICghYmYpCisJCQlyZXQgPSBhdGhfdHhfZ2V0X3RpZF9zdWJmcmFtZShzYywgc2MtPnR4LnVh cHNkcSwKKwkJCQkJCSAgICAgIHRpZCwgJmJmKTsKKwkJCWlmIChyZXQgPCAwKQogCQkJCWJyZWFr OwogCiAJCQlhdGg5a19zZXRfbW9yZWRhdGEoc2MsIGJmLCB0cnVlKTsKQEAgLTE5NzksMTEgKzE5 MTcsMTEgQEAgdm9pZCBhdGhfdHhfY2xlYW51cHEoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVj dCBhdGhfdHhxICp0eHEpCiAgKi8KIHZvaWQgYXRoX3R4cV9zY2hlZHVsZShzdHJ1Y3QgYXRoX3Nv ZnRjICpzYywgc3RydWN0IGF0aF90eHEgKnR4cSkKIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpo dyA9IHNjLT5odzsKIAlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9u KHNjLT5zY19haCk7CisJc3RydWN0IGllZWU4MDIxMV90eHEgKnF1ZXVlOwogCXN0cnVjdCBhdGhf YXR4X3RpZCAqdGlkOwotCXN0cnVjdCBsaXN0X2hlYWQgKnRpZF9saXN0OwotCXN0cnVjdCBhdGhf YWNxICphY3E7Ci0JYm9vbCBhY3RpdmUgPSBBSVJUSU1FX0FDVElWRShzYy0+YWlydGltZV9mbGFn cyk7CisJaW50IHJldDsKIAogCWlmICh0eHEtPm1hYzgwMjExX3FudW0gPCAwKQogCQlyZXR1cm47 CkBAIC0xOTkxLDU4ICsxOTI5LDI2IEBAIHZvaWQgYXRoX3R4cV9zY2hlZHVsZShzdHJ1Y3QgYXRo X3NvZnRjICpzYywgc3RydWN0IGF0aF90eHEgKnR4cSkKIAlpZiAodGVzdF9iaXQoQVRIX09QX0hX X1JFU0VULCAmY29tbW9uLT5vcF9mbGFncykpCiAJCXJldHVybjsKIAorCWllZWU4MDIxMV90eHFf c2NoZWR1bGVfc3RhcnQoaHcsIHR4cS0+bWFjODAyMTFfcW51bSk7CiAJc3Bpbl9sb2NrX2JoKCZz Yy0+Y2hhbl9sb2NrKTsKIAlyY3VfcmVhZF9sb2NrKCk7Ci0JYWNxID0gJnNjLT5jdXJfY2hhbi0+ YWNxW3R4cS0+bWFjODAyMTFfcW51bV07CiAKIAlpZiAoc2MtPmN1cl9jaGFuLT5zdG9wcGVkKQog CQlnb3RvIG91dDsKIAotYmVnaW46Ci0JdGlkX2xpc3QgPSAmYWNxLT5hY3FfbmV3OwotCWlmIChs aXN0X2VtcHR5KHRpZF9saXN0KSkgewotCQl0aWRfbGlzdCA9ICZhY3EtPmFjcV9vbGQ7Ci0JCWlm IChsaXN0X2VtcHR5KHRpZF9saXN0KSkKLQkJCWdvdG8gb3V0OwotCX0KLQl0aWQgPSBsaXN0X2Zp cnN0X2VudHJ5KHRpZF9saXN0LCBzdHJ1Y3QgYXRoX2F0eF90aWQsIGxpc3QpOwotCi0JaWYgKGFj dGl2ZSAmJiB0aWQtPmFuLT5haXJ0aW1lX2RlZmljaXRbdHhxLT5tYWM4MDIxMV9xbnVtXSA8PSAw KSB7Ci0JCXNwaW5fbG9ja19iaCgmYWNxLT5sb2NrKTsKLQkJdGlkLT5hbi0+YWlydGltZV9kZWZp Y2l0W3R4cS0+bWFjODAyMTFfcW51bV0gKz0gQVRIX0FJUlRJTUVfUVVBTlRVTTsKLQkJbGlzdF9t b3ZlX3RhaWwoJnRpZC0+bGlzdCwgJmFjcS0+YWNxX29sZCk7Ci0JCXNwaW5fdW5sb2NrX2JoKCZh Y3EtPmxvY2spOwotCQlnb3RvIGJlZ2luOwotCX0KLQotCWlmICghYXRoX3RpZF9oYXNfYnVmZmVy ZWQodGlkKSkgewotCQlzcGluX2xvY2tfYmgoJmFjcS0+bG9jayk7Ci0JCWlmICgodGlkX2xpc3Qg PT0gJmFjcS0+YWNxX25ldykgJiYgIWxpc3RfZW1wdHkoJmFjcS0+YWNxX29sZCkpCi0JCQlsaXN0 X21vdmVfdGFpbCgmdGlkLT5saXN0LCAmYWNxLT5hY3Ffb2xkKTsKLQkJZWxzZSB7Ci0JCQlsaXN0 X2RlbF9pbml0KCZ0aWQtPmxpc3QpOwotCQl9Ci0JCXNwaW5fdW5sb2NrX2JoKCZhY3EtPmxvY2sp OwotCQlnb3RvIGJlZ2luOwotCX0KKwl3aGlsZSAoKHF1ZXVlID0gaWVlZTgwMjExX25leHRfdHhx KGh3LCB0eHEtPm1hYzgwMjExX3FudW0pKSkgeworCQl0aWQgPSAoc3RydWN0IGF0aF9hdHhfdGlk ICopcXVldWUtPmRydl9wcml2OwogCisJCXJldCA9IGF0aF90eF9zY2hlZF9hZ2dyKHNjLCB0eHEs IHRpZCk7CisJCWF0aF9kYmcoY29tbW9uLCBRVUVVRSwgImF0aF90eF9zY2hlZF9hZ2dyIHJldHVy bmVkICVkXG4iLCByZXQpOwogCi0JLyoKLQkgKiBJZiB3ZSBzdWNjZWVkIGluIHNjaGVkdWxpbmcg c29tZXRoaW5nLCBpbW1lZGlhdGVseSByZXN0YXJ0IHRvIG1ha2UKLQkgKiBzdXJlIHdlIGtlZXAg dGhlIEhXIGJ1c3kuCi0JICovCi0JaWYoYXRoX3R4X3NjaGVkX2FnZ3Ioc2MsIHR4cSwgdGlkKSkg ewotCQlpZiAoIWFjdGl2ZSkgewotCQkJc3Bpbl9sb2NrX2JoKCZhY3EtPmxvY2spOwotCQkJbGlz dF9tb3ZlX3RhaWwoJnRpZC0+bGlzdCwgJmFjcS0+YWNxX29sZCk7Ci0JCQlzcGluX3VubG9ja19i aCgmYWNxLT5sb2NrKTsKLQkJfQotCQlnb3RvIGJlZ2luOworCQlpZWVlODAyMTFfcmV0dXJuX3R4 cShodywgcXVldWUpOwogCX0KIAogb3V0OgogCXJjdV9yZWFkX3VubG9jaygpOwogCXNwaW5fdW5s b2NrX2JoKCZzYy0+Y2hhbl9sb2NrKTsKKwlpZWVlODAyMTFfdHhxX3NjaGVkdWxlX2VuZChodywg dHhxLT5tYWM4MDIxMV9xbnVtKTsKIH0KIAogdm9pZCBhdGhfdHhxX3NjaGVkdWxlX2FsbChzdHJ1 Y3QgYXRoX3NvZnRjICpzYykKQEAgLTI4ODYsOSArMjc5Miw2IEBAIHZvaWQgYXRoX3R4X25vZGVf aW5pdChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9ub2RlICphbikKIAlzdHJ1Y3Qg YXRoX2F0eF90aWQgKnRpZDsKIAlpbnQgdGlkbm8sIGFjbm87CiAKLQlmb3IgKGFjbm8gPSAwOyBh Y25vIDwgSUVFRTgwMjExX05VTV9BQ1M7IGFjbm8rKykKLQkJYW4tPmFpcnRpbWVfZGVmaWNpdFth Y25vXSA9IEFUSF9BSVJUSU1FX1FVQU5UVU07Ci0KIAlmb3IgKHRpZG5vID0gMDsgdGlkbm8gPCBJ RUVFODAyMTFfTlVNX1RJRFM7IHRpZG5vKyspIHsKIAkJdGlkID0gYXRoX25vZGVfdG9fdGlkKGFu LCB0aWRubyk7CiAJCXRpZC0+YW4gICAgICAgID0gYW47CkBAIC0yODk4LDcgKzI4MDEsNiBAQCB2 b2lkIGF0aF90eF9ub2RlX2luaXQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfbm9k ZSAqYW4pCiAJCXRpZC0+YmF3X2hlYWQgID0gdGlkLT5iYXdfdGFpbCA9IDA7CiAJCXRpZC0+YWN0 aXZlCSAgID0gZmFsc2U7CiAJCXRpZC0+Y2xlYXJfcHNfZmlsdGVyID0gdHJ1ZTsKLQkJdGlkLT5o YXNfcXVldWVkICA9IGZhbHNlOwogCQlfX3NrYl9xdWV1ZV9oZWFkX2luaXQoJnRpZC0+cmV0cnlf cSk7CiAJCUlOSVRfTElTVF9IRUFEKCZ0aWQtPmxpc3QpOwogCQlhY25vID0gVElEX1RPX1dNRV9B Qyh0aWRubyk7Ci0tIAoxLjkuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCmF0aDEwayBtYWlsaW5nIGxpc3QKYXRoMTBrQGxpc3RzLmluZnJhZGVhZC5v cmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9hdGgxMGsK