From owner-freebsd-wireless@FreeBSD.ORG Wed Sep 11 17:29:25 2013 Return-Path: Delivered-To: freebsd-wireless@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 003FE8BD; Wed, 11 Sep 2013 17:29:24 +0000 (UTC) (envelope-from qinchenchong@gmail.com) Received: from mail-vc0-x22a.google.com (mail-vc0-x22a.google.com [IPv6:2607:f8b0:400c:c03::22a]) (using TLSv1 with cipher ECDHE-RSA-RC4-SHA (128/128 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 90C632A9D; Wed, 11 Sep 2013 17:29:24 +0000 (UTC) Received: by mail-vc0-f170.google.com with SMTP id kw10so6415795vcb.15 for ; Wed, 11 Sep 2013 10:29:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=4Ef5sV9OUfCzOB4MqT7OakXsb3giOAdrjRM6xmSKjxU=; b=eb/w/mbpIxLQVLMkpgTTjbiODjAZus4j1bCeYTFs+rPaud4UPMrpb7t0CE1z9PS6wl obAZ5e/DpV279hWuNyth+7TmlFqjZ9OhXvaaIuylIKkYA+RFinFeG+1hYH1/jgIjilQQ ua8VPt2MDIX00dR35yAs+V1+jdIeYAmQ29yqNHvgFRoszQNjDknK6zqkYw2tbvfR3zQU f933EG8+VCKpaDn5HAtiq6HD/ZvjSkbGmbOJat3z7dyD1QWh7yJlS0zRJaHEj3eM/kBN T8RBkh5Pv8vfeJqoypynTHr9WJCuTkRuGXu/po9EKshSvxXDRE5k7MSrRZ4zqpwIO/V4 Jj9w== MIME-Version: 1.0 X-Received: by 10.52.34.109 with SMTP id y13mr1945771vdi.8.1378920563685; Wed, 11 Sep 2013 10:29:23 -0700 (PDT) Received: by 10.220.182.68 with HTTP; Wed, 11 Sep 2013 10:29:23 -0700 (PDT) In-Reply-To: References: Date: Thu, 12 Sep 2013 01:29:23 +0800 Message-ID: Subject: Re: Chenchong's work on net80211_ratectl From: Chenchong Qin To: Adrian Chadd Content-Type: multipart/mixed; boundary=20cf30780c5c5f629404e61ef669 X-Content-Filtered-By: Mailman/MimeDel 2.1.14 Cc: "freebsd-wireless@freebsd.org" X-BeenThere: freebsd-wireless@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "Discussions of 802.11 stack, tools device driver development." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 11 Sep 2013 17:29:25 -0000 --20cf30780c5c5f629404e61ef669 Content-Type: text/plain; charset=ISO-8859-1 Hi! I've added some aggregation support here! At first I intend to pass subframe informations(nframes, per-subframe length etc.) to the ratectl api. But it seems to be a paradox that rate lookup must be performed before the ampdu is formed (aggregation limit based on the rate control decision is need) and subframe informations can be obtain only after the ampdu is formed. So, I add a new ieee80211_rc_info flag to ieee80211_ratectl to let it distinguish aggregation and non-aggregation scenarios. If rate lookup is called in an aggregation scenario, this flag is set. Then, ratectl algo knows that it's now finding rates for an ampdu and the framelen which records len of the first frame can be ignored. When it comes to complete period, tx status that shows number of subframes been sent and number of subframes been successfully received is passed to the ratectl api. I also get a question here - whether one tx that doesn't perform rate lookup will call the complete procedure? Thanks! Chenchong On Sun, Sep 8, 2013 at 11:18 PM, Chenchong Qin wrote: > Hi! > > I've added the common ratectl state as an mbuf tag! > > After days of frustration (compile errors, boot failed, kernel panics, > suddenly kernel freezing...), it seems that ath now can use 11n-aware > net80211 ratectl api to do rate control. Attachment[0] is the diff of > modifications to dev/ath. Changes to net80211 is minor this time. Just add > some debug msgs to it. Please reference my gsoc svn repo > . > > It's worth mentioning that sometimes the kernel will "freezing" (it looks > like all things stop working, screen is freezing, keyboard and mouse are > not responding) after wireless stuff start working for a while. At first, I > consider it caused by my modification to ath. But this strange thing can > also happen in a head kernel (r255382). Attachment[1] is some useful > messages just before it happens. By the way, I use a AR9227 device. > > And, I found that, for aggregation scenario, ath gathers tx information > and update the ratectl states. So, what we can do to net80211 to let it > support aggregation? > > Thanks! > > Chenchong > > > On Tue, Sep 3, 2013 at 9:29 AM, Chenchong Qin wrote: > >> OK! >> >> Thanks! :-) >> >> Chenchong >> >> >> On Tue, Sep 3, 2013 at 1:56 AM, Adrian Chadd wrote: >> >>> Hi! >>> >>> You can declare an mbuf tag and use that. Look at M_TXCB in net80211 and >>> how mbuf tags are added. >>> >>> I've long thought about adding a net80211 mbuf tag to represent -all- of >>> the tx related state - TX callback, rate control, rate completion, >>> aggregation state, retry count, etc. That way all the drivers can use it. >>> >>> >>> >>> -adrian >>> >>> >> > --20cf30780c5c5f629404e61ef669 Content-Type: application/octet-stream; name="20130911-net80211-ratectl-ath.diff" Content-Disposition: attachment; filename="20130911-net80211-ratectl-ath.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hlgtn9ja2 SW5kZXg6IGlmX2F0aF90eF9odC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGlmX2F0aF90eF9odC5jCShyZXZp c2lvbiAyNTQ4MjYpCisrKyBpZl9hdGhfdHhfaHQuYwkod29ya2luZyBjb3B5KQpAQCAtNjQsNiAr NjQsOCBAQAogCiAjaW5jbHVkZSA8bmV0ODAyMTEvaWVlZTgwMjExX3Zhci5oPgogI2luY2x1ZGUg PG5ldDgwMjExL2llZWU4MDIxMV9yZWdkb21haW4uaD4KKworI2luY2x1ZGUgPG5ldDgwMjExL2ll ZWU4MDIxMV9yYXRlY3RsLmg+CiAjaWZkZWYgSUVFRTgwMjExX1NVUFBPUlRfU1VQRVJHCiAjaW5j bHVkZSA8bmV0ODAyMTEvaWVlZTgwMjExX3N1cGVyZy5oPgogI2VuZGlmCkBAIC0yMjEsMTMgKzIy Myw0NyBAQAogdm9pZAogYXRoX3R4X3JhdGVfZmlsbF9yY2ZsYWdzKHN0cnVjdCBhdGhfc29mdGMg KnNjLCBzdHJ1Y3QgYXRoX2J1ZiAqYmYpCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9ub2RlICpuaSA9 IGJmLT5iZl9ub2RlOwotCXN0cnVjdCBpZWVlODAyMTFjb20gKmljID0gbmktPm5pX2ljOworCS8v IHN0cnVjdCBpZWVlODAyMTFfbm9kZSAqbmkgPSBiZi0+YmZfbm9kZTsKKwkvLyBzdHJ1Y3QgaWVl ZTgwMjExY29tICppYyA9IG5pLT5uaV9pYzsKIAljb25zdCBIQUxfUkFURV9UQUJMRSAqcnQgPSBz Yy0+c2NfY3VycmF0ZXM7Ci0Jc3RydWN0IGF0aF9yY19zZXJpZXMgKnJjID0gYmYtPmJmX3N0YXRl LmJmc19yYzsKKwlzdHJ1Y3QgYXRoX3JjX3NlcmllcyAqYXRoX3JjID0gYmYtPmJmX3N0YXRlLmJm c19yYzsKKwlzdHJ1Y3QgaWVlZTgwMjExX3JjX2luZm8gKnJjX2luZm8gPSBOVUxMOworCXN0cnVj dCBpZWVlODAyMTFfcmNfc2VyaWVzICpyYyA9IE5VTEw7CisJc3RydWN0IG1fdGFnICptdGFnOwog CXVpbnQ4X3QgcmF0ZTsKIAlpbnQgaTsKIAorCW10YWcgPSBtX3RhZ19sb2NhdGUoYmYtPmJmX20s IE1UQUdfQUJJX05FVDgwMjExLCAKKwkJCU5FVDgwMjExX1RBR19SQVRFQ1RMLCBOVUxMKTsKKwlp ZiAoTlVMTCA9PSBtdGFnKQorCQlyZXR1cm47CisKKwlyY19pbmZvID0gKHN0cnVjdCBpZWVlODAy MTFfcmNfaW5mbyopKG10YWcgKyAxKTsKKwlyYyA9IHJjX2luZm8tPmlyaV9yYzsKKworCWZvciAo aSA9IDA7IGkgPCBJRUVFODAyMTFfUkFURUNUTF9OVU07IGkrKykgeworCQlpZiAocmNbaV0udHJp ZXMgPT0gMCkKKwkJCWNvbnRpbnVlOworCisJCXJhdGUgPSBydC0+aW5mb1tyY1tpXS5yaXhdLnJh dGVDb2RlOworCQlpZiAocmNbaV0uZmxhZ3MgJiBJRUVFODAyMTFfUkFURUNUTF9GTEFHX1NQKQor CQkJcmF0ZSB8PSBydC0+aW5mb1tyY1tpXS5yaXhdLnNob3J0UHJlYW1ibGU7CisKKwkJcmNbaV0u cmF0ZWNvZGUgPSByYXRlOworCisJCWF0aF9yY1tpXS5yaXggPSByY1tpXS5yaXg7CisJCWF0aF9y Y1tpXS50cmllcyA9IHJjW2ldLnRyaWVzOworCQlhdGhfcmNbaV0uZmxhZ3MgPSByY1tpXS5mbGFn czsKKwkJYXRoX3JjW2ldLnJhdGVjb2RlID0gcmNbaV0ucmF0ZWNvZGU7CisJCWF0aF9yY1tpXS50 eF9wb3dlcl9jYXAgPSByY1tpXS50eF9wb3dlcl9jYXA7CisJCWF0aF9yY1tpXS5tYXg0bXNmcmFt ZWxlbiA9IHJjW2ldLm1heDRtc2ZyYW1lbGVuOworCQkKKwkJRFBSSU5URihzYywgQVRIX0RFQlVH X1NXX1RYX0FHR1IsCisJCSAgICAiJXM6IGk9JWQsIHJhdGU9MHgleCwgZmxhZ3M9MHgleCwgbWF4 NG1zPSVkXG4iLAorCQkgICAgX19mdW5jX18sIGksIHJhdGUsIHJjW2ldLmZsYWdzLCByY1tpXS5t YXg0bXNmcmFtZWxlbik7CisJfQorCisjaWYgMAogCWZvciAoaSA9IDA7IGkgPCBBVEhfUkNfTlVN OyBpKyspIHsKIAkJcmNbaV0uZmxhZ3MgPSAwOwogCQlpZiAocmNbaV0udHJpZXMgPT0gMCkKQEAg LTMyNSw2ICszNjEsNyBAQAogCQkgICAgIiVzOiBpPSVkLCByYXRlPTB4JXgsIGZsYWdzPTB4JXgs IG1heDRtcz0lZFxuIiwKIAkJICAgIF9fZnVuY19fLCBpLCByYXRlLCByY1tpXS5mbGFncywgcmNb aV0ubWF4NG1zZnJhbWVsZW4pOwogCX0KKyNlbmRpZgogfQogCiAvKgpJbmRleDogaWZfYXRoX3R4 LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQotLS0gaWZfYXRoX3R4LmMJKHJldmlzaW9uIDI1NDgyNikKKysrIGlmX2F0 aF90eC5jCSh3b3JraW5nIGNvcHkpCkBAIC03Miw2ICs3Miw4IEBACiAKICNpbmNsdWRlIDxuZXQ4 MDIxMS9pZWVlODAyMTFfdmFyLmg+CiAjaW5jbHVkZSA8bmV0ODAyMTEvaWVlZTgwMjExX3JlZ2Rv bWFpbi5oPgorCisjaW5jbHVkZSA8bmV0ODAyMTEvaWVlZTgwMjExX3JhdGVjdGwuaD4KICNpZmRl ZiBJRUVFODAyMTFfU1VQUE9SVF9TVVBFUkcKICNpbmNsdWRlIDxuZXQ4MDIxMS9pZWVlODAyMTFf c3VwZXJnLmg+CiAjZW5kaWYKQEAgLTEzODcsNiArMTM4OSwxMCBAQAogc3RhdGljIHZvaWQKIGF0 aF90eF9kb19yYXRlbG9va3VwKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX2J1ZiAq YmYpCiB7CisJc3RydWN0IGllZWU4MDIxMV9ub2RlICpuaSA9IGJmLT5iZl9ub2RlOworCXN0cnVj dCBpZWVlODAyMTFfcmNfaW5mbyAqcmNfaW5mbyA9IE5VTEw7CisJc3RydWN0IGllZWU4MDIxMV9y Y19zZXJpZXMgKnJjID0gTlVMTDsKKwlzdHJ1Y3QgbV90YWcgKm10YWc7CiAJdWludDhfdCByYXRl LCByaXg7CiAJaW50IHRyeTA7CiAKQEAgLTEzOTUsNyArMTQwMSw3IEBACiAKIAkvKiBHZXQgcmlk IG9mIGFueSBwcmV2aW91cyBzdGF0ZSAqLwogCWJ6ZXJvKGJmLT5iZl9zdGF0ZS5iZnNfcmMsIHNp emVvZihiZi0+YmZfc3RhdGUuYmZzX3JjKSk7Ci0KKyNpZiAwCiAJQVRIX05PREVfTE9DSyhBVEhf Tk9ERShiZi0+YmZfbm9kZSkpOwogCWF0aF9yYXRlX2ZpbmRyYXRlKHNjLCBBVEhfTk9ERShiZi0+ YmZfbm9kZSksIGJmLT5iZl9zdGF0ZS5iZnNfc2hwcmVhbSwKIAkgICAgYmYtPmJmX3N0YXRlLmJm c19wa3RsZW4sICZyaXgsICZ0cnkwLCAmcmF0ZSk7CkBAIC0xNDA5LDcgKzE0MTUsNDQgQEAKIAkJ YXRoX3JhdGVfZ2V0eHR4cmF0ZXMoc2MsIEFUSF9OT0RFKGJmLT5iZl9ub2RlKSwgcml4LAogCQkg ICAgYmYtPmJmX3N0YXRlLmJmc19yYyk7CiAJQVRIX05PREVfVU5MT0NLKEFUSF9OT0RFKGJmLT5i Zl9ub2RlKSk7CisjZW5kaWYKIAorCS8qIG5ldDgwMjExIHJhdGVjdGwgKi8KKwltdGFnID0gbV90 YWdfbG9jYXRlKGJmLT5iZl9tLCBNVEFHX0FCSV9ORVQ4MDIxMSwgCisJCQlORVQ4MDIxMV9UQUdf UkFURUNUTCwgTlVMTCk7CithZ2FpbjoJCisJaWYgKE5VTEwgPT0gbXRhZykgeworCQltdGFnID0g bV90YWdfYWxsb2MoTVRBR19BQklfTkVUODAyMTEsIE5FVDgwMjExX1RBR19SQVRFQ1RMLAorCQkJ CXNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3JjX2luZm8pLCBNX05PV0FJVCk7CisJCWlmIChOVUxM ID09IG10YWcpIHsKKwkJCUlFRUU4MDIxMV9OT1RFKG5pLT5uaV92YXAsIElFRUU4MDIxMV9NU0df UkFURUNUTCwgbmksCisJCQkJCSIlczogY2FuJ3QgYWxsb2MgbWJ1ZiB0YWcgZm9yIHJhdGVjdGwu XG4iLCBfX2Z1bmNfXyk7CisJCQlnb3RvIGFnYWluOworCQl9CisJfSBlbHNlCisJCUlFRUU4MDIx MV9OT1RFKG5pLT5uaV92YXAsIElFRUU4MDIxMV9NU0dfUkFURUNUTCwgbmksCisJCQkJIiVzOiBu YW5pPyBmaW5kIG1idWYgdGFnIGZvciByYXRlY3RsIGRpcmVjdGx5LlxuIiwgX19mdW5jX18pOwor CQorCXJjX2luZm8gPSAoc3RydWN0IGllZWU4MDIxMV9yY19pbmZvKikobXRhZyArIDEpOworCXJj ID0gcmNfaW5mby0+aXJpX3JjOworCQorCWJ6ZXJvKHJjX2luZm8sIHNpemVvZihyY19pbmZvKSk7 CisKKwlpZiAoYmYtPmJmX3N0YXRlLmJmc19zaHByZWFtKQorCQlyY19pbmZvLT5pcmlfZmxhZ3Mg fD0gSUVFRTgwMjExX1JBVEVDVExfSU5GT19TUDsKKwlpZiAoYmYtPmJmX3N0YXRlLmJmc19hZ2dy KQorCQlyY19pbmZvLT5pcmlfZmxhZ3MgfD0gSUVFRTgwMjExX1JBVEVDVExfSU5GT19BR0dSOwor CisJcmNfaW5mby0+aXJpX2ZyYW1lbGVuID0gYmYtPmJmX3N0YXRlLmJmc19wa3RsZW47CisKKwlp ZWVlODAyMTFfcmF0ZWN0bF9yYXRlcyhuaSwgcmNfaW5mbyk7CisKKwltX3RhZ19wcmVwZW5kKGJm LT5iZl9tLCBtdGFnKTsKKworCXJpeCA9IHJjWzBdLnJpeDsKKwl0cnkwID0gcmNbMF0udHJpZXM7 CisJcmF0ZSA9IG5pLT5uaV90eHJhdGU7CisKIAlzYy0+c2NfdHhyaXggPSByaXg7CS8qIGZvciBM RUQgYmxpbmtpbmcgKi8KIAlzYy0+c2NfbGFzdGRhdGFyaXggPSByaXg7CS8qIGZvciBmYXN0IGZy YW1lcyAqLwogCWJmLT5iZl9zdGF0ZS5iZnNfdHJ5MCA9IHRyeTA7CkBAIC0xNTMwLDcgKzE1NzMs OCBAQAogCSAqIGZyYW1lcyB0aGF0IG11c3QgZ28gb3V0IC0gZWcgbWFuYWdlbWVudC9yYXcgZnJh bWVzLgogCSAqLwogCWJmLT5iZl9zdGF0ZS5iZnNfdHhmbGFncyB8PSBIQUxfVFhERVNDX0NMUkRN QVNLOwotCisJCisJYmYtPmJmX3N0YXRlLmJmc19hZ2dyID0gMDsKIAkvKiBTZXR1cCB0aGUgZGVz Y3JpcHRvciBiZWZvcmUgaGFuZG9mZiAqLwogCWF0aF90eF9kb19yYXRlbG9va3VwKHNjLCBiZik7 CiAJYXRoX3R4X2NhbGNfZHVyYXRpb24oc2MsIGJmKTsKQEAgLTQwNTgsNiArNDEwMiw4IEBACiAJ aW50IHRpZCA9IGJmLT5iZl9zdGF0ZS5iZnNfdGlkOwogCXN0cnVjdCBhdGhfdGlkICphdGlkID0g JmFuLT5hbl90aWRbdGlkXTsKIAlzdHJ1Y3QgYXRoX3R4X3N0YXR1cyAqdHMgPSAmYmYtPmJmX3N0 YXR1cy5kc190eHN0YXQ7CisJc3RydWN0IGllZWU4MDIxMV9yY19pbmZvICpyY19pbmZvID0gTlVM TDsKKwlzdHJ1Y3QgbV90YWcgKm10YWc7CiAKIAkvKiBUaGUgVElEIHN0YXRlIGlzIHByb3RlY3Rl ZCBiZWhpbmQgdGhlIFRYUSBsb2NrICovCiAJQVRIX1RYX0xPQ0soc2MpOwpAQCAtNDEwOCw5ICs0 MTU0LDM1IEBACiAJICogZHVyaW5nIGEgaHcgcXVldWUgZHJhaW4gYW5kIHRoZSBmcmFtZSB3YW50 ZWQgYW4gQUNLLgogCSAqLwogCWlmIChmYWlsID09IDAgJiYgKChiZi0+YmZfc3RhdGUuYmZzX3R4 ZmxhZ3MgJiBIQUxfVFhERVNDX05PQUNLKSA9PSAwKSkKKwl7CisjaWYgMAogCQlhdGhfdHhfdXBk YXRlX3JhdGVjdHJsKHNjLCBuaSwgYmYtPmJmX3N0YXRlLmJmc19yYywKIAkJICAgIHRzLCBiZi0+ YmZfc3RhdGUuYmZzX3BrdGxlbiwKIAkJICAgIDEsICh0cy0+dHNfc3RhdHVzID09IDApID8gMCA6 IDEpOworI2VuZGlmCisJCisJCS8qIG5ldDgwMjExIHJhdGVjdGwgKi8KKwkgICAgbXRhZyA9IG1f dGFnX2xvY2F0ZShiZi0+YmZfbSwgTVRBR19BQklfTkVUODAyMTEsIAorCQkJICAgICAgICAgICAg TkVUODAyMTFfVEFHX1JBVEVDVEwsIE5VTEwpOworCQlpZiAoTlVMTCA9PSBtdGFnKSB7CisJCQlJ RUVFODAyMTFfTk9URShuaS0+bmlfdmFwLCBJRUVFODAyMTFfTVNHX1JBVEVDVEwsIG5pLAorCQkJ CQkiJXM6IG5vIHJhdGVjdGwgbWJ1ZiB0YWcgZm91bmQuXG4iLCBfX2Z1bmNfXyk7CisJCQlzdHJ1 Y3QgaWVlZTgwMjExX3JjX2luZm8gdG1wX3JjX2luZm87CisJCQlyY19pbmZvID0gJnRtcF9yY19p bmZvOworCQkJYnplcm8ocmNfaW5mbywgc2l6ZW9mKHJjX2luZm8pKTsKKwkJfSBlbHNlIHsKKwkJ CUlFRUU4MDIxMV9OT1RFKG5pLT5uaV92YXAsIElFRUU4MDIxMV9NU0dfUkFURUNUTCwgbmksCisJ CQkJCSIlczogZm91bmQgcmF0ZWN0bCBtYnVmIHRhZy5cbiIsIF9fZnVuY19fKTsKKwkJCXJjX2lu Zm8gPSAoc3RydWN0IGllZWU4MDIxMV9yY19pbmZvKikobXRhZyArIDEpOworCQl9CisJCXJjX2lu Zm8tPmlyaV9mbGFncyAmPSB+SUVFRTgwMjExX1JBVEVDVExfSU5GT19BR0dSOwkKKwkJaWVlZTgw MjExX3JhdGVjdGxfcmNfaW5mb19zZXQocmNfaW5mbywKKwkJCQkxLCAodHMtPnRzX3N0YXR1cyA9 PSAwID8gMCA6IDEpLCAKKwkJCQliZi0+YmZfc3RhdGUuYmZzX3BrdGxlbiwKKwkJCQl0cy0+dHNf c2hvcnRyZXRyeSwgdHMtPnRzX2xvbmdyZXRyeSwKKwkJCQl0cy0+dHNfZmluYWx0c2ksIHRzLT50 c19yYXRlKTsKKwkJaWVlZTgwMjExX3JhdGVjdGxfdHhfY29tcGxldGUobmktPm5pX3ZhcCwgbmks IHJjX2luZm8pOworCX0KIAogCWF0aF90eF9kZWZhdWx0X2NvbXAoc2MsIGJmLCBmYWlsKTsKIH0K QEAgLTQ0NzUsNiArNDU0Nyw5IEBACiAJaW50IGRyb3BzID0gMDsKIAlzdHJ1Y3QgaWVlZTgwMjEx X3R4X2FtcGR1ICp0YXA7CiAJYXRoX2J1ZmhlYWQgYmZfY3E7CisJc3RydWN0IGF0aF90eF9zdGF0 dXMgdHMgPSBiZl9maXJzdC0+YmZfc3RhdHVzLmRzX3R4c3RhdDsKKwlzdHJ1Y3QgaWVlZTgwMjEx X3JjX2luZm8gKnJjX2luZm8gPSBOVUxMOworCXN0cnVjdCBtX3RhZyAqbXRhZzsKIAogCVRBSUxR X0lOSVQoJmJmX3EpOwogCVRBSUxRX0lOSVQoJmJmX2NxKTsKQEAgLTQ0ODUsMTEgKzQ1NjAsMzYg QEAKIAkgKiBYWFggdXNlIHRoZSBsZW5ndGggaW4gdGhlIGZpcnN0IGZyYW1lIGluIHRoZSBzZXJp ZXM7CiAJICogWFhYIGp1c3Qgc28gdGhpbmdzIGFyZSBjb25zaXN0ZW50IGZvciBub3cuCiAJICov CisjaWYgMAogCWF0aF90eF91cGRhdGVfcmF0ZWN0cmwoc2MsIG5pLCBiZl9maXJzdC0+YmZfc3Rh dGUuYmZzX3JjLAogCSAgICAmYmZfZmlyc3QtPmJmX3N0YXR1cy5kc190eHN0YXQsCiAJICAgIGJm X2ZpcnN0LT5iZl9zdGF0ZS5iZnNfcGt0bGVuLAogCSAgICBiZl9maXJzdC0+YmZfc3RhdGUuYmZz X25mcmFtZXMsIGJmX2ZpcnN0LT5iZl9zdGF0ZS5iZnNfbmZyYW1lcyk7CisjZW5kaWYKKwkvKiBu ZXQ4MDIxMSByYXRlY3RsICovCisJbXRhZyA9IG1fdGFnX2xvY2F0ZShiZl9maXJzdC0+YmZfbSwg TVRBR19BQklfTkVUODAyMTEsIAorCQkJTkVUODAyMTFfVEFHX1JBVEVDVEwsIE5VTEwpOworCWlm IChOVUxMID09IG10YWcpIHsKKwkJSUVFRTgwMjExX05PVEUobmktPm5pX3ZhcCwgSUVFRTgwMjEx X01TR19SQVRFQ1RMLCBuaSwKKwkJCQkiJXM6IG5vIHJhdGVjdGwgbWJ1ZiB0YWcgZm91bmQuXG4i LCBfX2Z1bmNfXyk7CisJCXN0cnVjdCBpZWVlODAyMTFfcmNfaW5mbyB0bXBfcmNfaW5mbzsKKwkJ cmNfaW5mbyA9ICZ0bXBfcmNfaW5mbzsKKwkJYnplcm8ocmNfaW5mbywgc2l6ZW9mKHJjX2luZm8p KTsKKwl9IGVsc2UgeworCQlJRUVFODAyMTFfTk9URShuaS0+bmlfdmFwLCBJRUVFODAyMTFfTVNH X1JBVEVDVEwsIG5pLAorCQkJCSIlczogZm91bmQgcmF0ZWN0bCBtYnVmIHRhZy5cbiIsIF9fZnVu Y19fKTsKKwkJcmNfaW5mbyA9IChzdHJ1Y3QgaWVlZTgwMjExX3JjX2luZm8qKShtdGFnICsgMSk7 CisJfQogCisJaWVlZTgwMjExX3JhdGVjdGxfcmNfaW5mb19zZXQocmNfaW5mbywKKwkJCWJmX2Zp cnN0LT5iZl9zdGF0ZS5iZnNfbmZyYW1lcywgCisJCQliZl9maXJzdC0+YmZfc3RhdGUuYmZzX25m cmFtZXMsCisJCQliZl9maXJzdC0+YmZfc3RhdGUuYmZzX3BrdGxlbiwKKwkJCXRzLnRzX3Nob3J0 cmV0cnksIHRzLnRzX2xvbmdyZXRyeSwKKwkJCXRzLnRzX2ZpbmFsdHNpLCB0cy50c19yYXRlKTsK KwlyY19pbmZvLT5pcmlfZmxhZ3MgfD0gSUVFRTgwMjExX1JBVEVDVExfSU5GT19BR0dSOworCWll ZWU4MDIxMV9yYXRlY3RsX3R4X2NvbXBsZXRlKG5pLT5uaV92YXAsIG5pLCByY19pbmZvKTsKKwog CUFUSF9UWF9MT0NLKHNjKTsKIAl0YXAgPSBhdGhfdHhfZ2V0X3R4X3RpZChhbiwgdGlkLT50aWQp OwogCXNjLT5zY19zdGF0cy5hc3RfdHhfYWdncl9mYWlsYWxsKys7CkBAIC00NjI2LDggKzQ3MjYs MTIgQEAKIAlpbnQgbmZyYW1lcyA9IDAsIG5iYWQgPSAwLCBuZjsKIAlpbnQgcGt0bGVuOwogCS8q IFhYWCB0aGVyZSdzIHRvbyBtdWNoIG9uIHRoZSBzdGFjaz8gKi8KKyNpZiAwCiAJc3RydWN0IGF0 aF9yY19zZXJpZXMgcmNbQVRIX1JDX05VTV07CisjZW5kaWYKIAlpbnQgdHhzZXE7CisJc3RydWN0 IGllZWU4MDIxMV9yY19pbmZvICpyY19pbmZvID0gTlVMTDsKKwlzdHJ1Y3QgbV90YWcgKm10YWc7 CiAKIAlEUFJJTlRGKHNjLCBBVEhfREVCVUdfU1dfVFhfQUdHUiwgIiVzOiBjYWxsZWQ7IGh3cV9k ZXB0aD0lZFxuIiwKIAkgICAgX19mdW5jX18sIGF0aWQtPmh3cV9kZXB0aCk7CkBAIC00NzQ4LDcg KzQ4NTIsNyBAQAogCWlzYWdnciA9IGJmX2ZpcnN0LT5iZl9zdGF0ZS5iZnNfYWdncjsKIAliYVsw XSA9IHRzLnRzX2JhX2xvdzsKIAliYVsxXSA9IHRzLnRzX2JhX2hpZ2g7Ci0KKyNpZiAwCiAJLyoK IAkgKiBDb3B5IHRoZSBUWCBjb21wbGV0aW9uIHN0YXR1cyBhbmQgdGhlIHJhdGUgY29udHJvbAog CSAqIHNlcmllcyBmcm9tIHRoZSBmaXJzdCBkZXNjcmlwdG9yLCBhcyBpdCBtYXkgYmUgZnJlZWQK QEAgLTQ3NTYsNiArNDg2MCwxMyBAQAogCSAqIGludG8gdGhpbmdzLgogCSAqLwogCW1lbWNweShy YywgYmZfZmlyc3QtPmJmX3N0YXRlLmJmc19yYywgc2l6ZW9mKHJjKSk7CisjZW5kaWYKKwkvKiAK KwkgKiBHZXQgdGhlIG5ldDgwMjExIHJhdGVjdGwgbXRhZyBoZXJlLCBhcyBiZl9maXJzdCB3aWxs IAorCSAqIGJlIHNldCB0byBOVUxMIGxhdGVyLiAKKwkgKi8KKwltdGFnID0gbV90YWdfbG9jYXRl KGJmX2ZpcnN0LT5iZl9tLCBNVEFHX0FCSV9ORVQ4MDIxMSwgCisJCQlORVQ4MDIxMV9UQUdfUkFU RUNUTCwgTlVMTCk7CiAKIAlEUFJJTlRGKHNjLCBBVEhfREVCVUdfU1dfVFhfQUdHUiwKIAkgICAg IiVzOiB0eGFfc3RhcnQ9JWQsIHR4X29rPSVkLCBzdGF0dXM9JS44eCwgZmxhZ3M9JS44eCwgIgpA QCAtNDg3Myw5ICs0OTg0LDMyIEBACiAJICogY29udHJvbCBjb2RlLgogCSAqLwogCWlmIChmYWls ID09IDApCisJeworI2lmIDAJCiAJCWF0aF90eF91cGRhdGVfcmF0ZWN0cmwoc2MsIG5pLCByYywg JnRzLCBwa3RsZW4sIG5mcmFtZXMsCiAJCSAgICBuYmFkKTsKKyNlbmRpZgorCQkvKiBuZXQ4MDIx MSByYXRlY3RsICovCisJCWlmIChOVUxMID09IG10YWcpIHsKKwkJCUlFRUU4MDIxMV9OT1RFKG5p LT5uaV92YXAsIElFRUU4MDIxMV9NU0dfUkFURUNUTCwgbmksCisJCQkJCSIlczogbm8gcmF0ZWN0 bCBtYnVmIHRhZyBmb3VuZC5cbiIsIF9fZnVuY19fKTsKKwkJCXN0cnVjdCBpZWVlODAyMTFfcmNf aW5mbyB0bXBfcmNfaW5mbzsKKwkJCXJjX2luZm8gPSAmdG1wX3JjX2luZm87CisJCQliemVybyhy Y19pbmZvLCBzaXplb2YocmNfaW5mbykpOworCQl9IGVsc2UgeworCQkJSUVFRTgwMjExX05PVEUo bmktPm5pX3ZhcCwgSUVFRTgwMjExX01TR19SQVRFQ1RMLCBuaSwKKwkJCQkJIiVzOiBmb3VuZCBy YXRlY3RsIG1idWYgdGFnLlxuIiwgX19mdW5jX18pOworCQkJcmNfaW5mbyA9IChzdHJ1Y3QgaWVl ZTgwMjExX3JjX2luZm8qKShtdGFnICsgMSk7CisJCX0KIAorCQlyY19pbmZvLT5pcmlfZmxhZ3Mg fD0gSUVFRTgwMjExX1JBVEVDVExfSU5GT19BR0dSOworCQlpZWVlODAyMTFfcmF0ZWN0bF9yY19p bmZvX3NldChyY19pbmZvLAorCQkJCQluZnJhbWVzLCBuYmFkLCBwa3RsZW4sCisJCQkJCXRzLnRz X3Nob3J0cmV0cnksIHRzLnRzX2xvbmdyZXRyeSwKKwkJCQkJdHMudHNfZmluYWx0c2ksIHRzLnRz X3JhdGUpOworCQlpZWVlODAyMTFfcmF0ZWN0bF90eF9jb21wbGV0ZShuaS0+bmlfdmFwLCBuaSwg cmNfaW5mbyk7CisJfQorCiAJLyoKIAkgKiBzZW5kIGJhciBpZiB3ZSBkcm9wcGVkIGFueSBmcmFt ZXMKIAkgKi8KQEAgLTQ5NDgsNiArNTA4Miw4IEBACiAJc3RydWN0IGF0aF90aWQgKmF0aWQgPSAm YW4tPmFuX3RpZFt0aWRdOwogCXN0cnVjdCBhdGhfdHhfc3RhdHVzIHRzOwogCWludCBkcm9wcyA9 IDA7CisJc3RydWN0IGllZWU4MDIxMV9yY19pbmZvICpyY19pbmZvID0gTlVMTDsKKwlzdHJ1Y3Qg bV90YWcgKm10YWc7CiAKIAkvKgogCSAqIFRha2UgYSBjb3B5IG9mIHRoaXM7IGZpbHRlcmluZy9j bG9uaW5nIHRoZSBmcmFtZSBtYXkgZnJlZSB0aGUKQEAgLTQ5NjIsMTEgKzUwOTgsMzYgQEAKIAkg KiBEbyBpdCBvdXRzaWRlIG9mIHRoZSBUWFEgbG9jay4KIAkgKi8KIAlpZiAoZmFpbCA9PSAwICYm ICgoYmYtPmJmX3N0YXRlLmJmc190eGZsYWdzICYgSEFMX1RYREVTQ19OT0FDSykgPT0gMCkpCisJ eworI2lmIDAJCiAJCWF0aF90eF91cGRhdGVfcmF0ZWN0cmwoc2MsIG5pLCBiZi0+YmZfc3RhdGUu YmZzX3JjLAogCQkgICAgJmJmLT5iZl9zdGF0dXMuZHNfdHhzdGF0LAogCQkgICAgYmYtPmJmX3N0 YXRlLmJmc19wa3RsZW4sCiAJCSAgICAxLCAodHMudHNfc3RhdHVzID09IDApID8gMCA6IDEpOwor I2VuZGlmCisJCW10YWcgPSBtX3RhZ19sb2NhdGUoYmYtPmJmX20sIE1UQUdfQUJJX05FVDgwMjEx LCAKKwkJCQlORVQ4MDIxMV9UQUdfUkFURUNUTCwgTlVMTCk7CisJCQorCQlpZiAoTlVMTCA9PSBt dGFnKSB7CisJCQlJRUVFODAyMTFfTk9URShuaS0+bmlfdmFwLCBJRUVFODAyMTFfTVNHX1JBVEVD VEwsIG5pLAorCQkJCQkiJXM6IG5vIHJhdGVjdGwgbWJ1ZiB0YWcgZm91bmQuXG4iLCBfX2Z1bmNf Xyk7CisJCQlzdHJ1Y3QgaWVlZTgwMjExX3JjX2luZm8gdG1wX3JjX2luZm87CisJCQlyY19pbmZv ID0gJnRtcF9yY19pbmZvOworCQkJYnplcm8ocmNfaW5mbywgc2l6ZW9mKHJjX2luZm8pKTsKKwkJ fSBlbHNlIHsKKwkJCUlFRUU4MDIxMV9OT1RFKG5pLT5uaV92YXAsIElFRUU4MDIxMV9NU0dfUkFU RUNUTCwgbmksCisJCQkJCSIlczogZm91bmQgcmF0ZWN0bCBtYnVmIHRhZy5cbiIsIF9fZnVuY19f KTsKKwkJCXJjX2luZm8gPSAoc3RydWN0IGllZWU4MDIxMV9yY19pbmZvKikobXRhZyArIDEpOwor CQl9CiAKKwkJcmNfaW5mby0+aXJpX2ZsYWdzICY9IH5JRUVFODAyMTFfUkFURUNUTF9JTkZPX0FH R1I7CisJCWllZWU4MDIxMV9yYXRlY3RsX3JjX2luZm9fc2V0KHJjX2luZm8sCisJCQkJMSwgKHRz LnRzX3N0YXR1cyA9PSAwID8gMCA6IDEpLCAKKwkJCQliZi0+YmZfc3RhdGUuYmZzX3BrdGxlbiwK KwkJCQl0cy50c19zaG9ydHJldHJ5LCB0cy50c19sb25ncmV0cnksCisJCQkJdHMudHNfZmluYWx0 c2ksIHRzLnRzX3JhdGUpOworCQlpZWVlODAyMTFfcmF0ZWN0bF90eF9jb21wbGV0ZShuaS0+bmlf dmFwLCBuaSwgcmNfaW5mbyk7CisJfQogCS8qCiAJICogVGhpcyBpcyBjYWxsZWQgZWFybHkgc28g YXRpZC0+aHdxX2RlcHRoIGNhbiBiZSB0cmFja2VkLgogCSAqIFRoaXMgdW5mb3J0dW5hdGVseSBt ZWFucyB0aGF0IGl0J3MgcmVsZWFzZWQgYW5kIHJlZ3JhYmJlZApAQCAtNTE4Myw2ICs1MzQ0LDE1 IEBACiAJCX0KIAogCQkvKgorCQkgKiBJZiBub24tYWdncmVnYXRlIHNjZW5hcmlvIGFwcGVhcnMs IHRoaXMgd2lsbCBiZSAKKwkJICogdHVybmVkIG9mZi4KKwkJICoKKwkJICogVGhpcyBmbGFnIGlz IHVzZWQgYnkgYXRoX3R4X2RvX3JhdGVsb29rdXAoKSB0byAKKwkJICogZGlzdGluZ3Vpc2ggYWdn ci9ub24tYWdnciBzY2VuYXJpby4gIAorCQkgKi8KKwkJYmYtPmJmX3N0YXRlLmJmc19hZ2dyID0g MTsKKworCQkvKgogCQkgKiBJZiB0aGUgcGFja2V0IGRvZXNuJ3QgZmFsbCB3aXRoaW4gdGhlIEJB VyAoZWcgYSBOVUxMCiAJCSAqIGRhdGEgZnJhbWUpLCBzY2hlZHVsZSBpdCBkaXJlY3RseTsgY29u dGludWUuCiAJCSAqLwpAQCAtNTQyNSw2ICs1NTk1LDcgQEAKIAkJLyogVXBkYXRlIENMUkRNQVNL IGp1c3QgYmVmb3JlIHRoaXMgZnJhbWUgaXMgcXVldWVkICovCiAJCWF0aF90eF91cGRhdGVfY2xy ZG1hc2soc2MsIHRpZCwgYmYpOwogCisJCWJmLT5iZl9zdGF0ZS5iZnNfYWdnciA9IDA7IAogCQkv KiBQcm9ncmFtIGRlc2NyaXB0b3JzICsgcmF0ZSBjb250cm9sICovCiAJCWF0aF90eF9kb19yYXRl bG9va3VwKHNjLCBiZik7CiAJCWF0aF90eF9jYWxjX2R1cmF0aW9uKHNjLCBiZik7CkluZGV4OiBp Zl9hdGguYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Ci0tLSBpZl9hdGguYwkocmV2aXNpb24gMjU0ODI2KQorKysgaWZf YXRoLmMJKHdvcmtpbmcgY29weSkKQEAgLTgyLDYgKzgyLDggQEAKIAogI2luY2x1ZGUgPG5ldDgw MjExL2llZWU4MDIxMV92YXIuaD4KICNpbmNsdWRlIDxuZXQ4MDIxMS9pZWVlODAyMTFfcmVnZG9t YWluLmg+CisKKyNpbmNsdWRlIDxuZXQ4MDIxMS9pZWVlODAyMTFfcmF0ZWN0bC5oPgogI2lmZGVm IElFRUU4MDIxMV9TVVBQT1JUX1NVUEVSRwogI2luY2x1ZGUgPG5ldDgwMjExL2llZWU4MDIxMV9z dXBlcmcuaD4KICNlbmRpZgpAQCAtMzIyLDYgKzMyNCw3IEBACiAJc2MtPnNjX2FoID0gYWg7CiAJ c2MtPnNjX2ludmFsaWQgPSAwOwkvKiByZWFkeSB0byBnbywgZW5hYmxlIGludGVycnVwdCBoYW5k bGluZyAqLwogI2lmZGVmCUFUSF9ERUJVRworCWF0aF9kZWJ1ZyB8PSBBVEhfREVCVUdfTk9ERTsg CiAJc2MtPnNjX2RlYnVnID0gYXRoX2RlYnVnOwogI2VuZGlmCiAKQEAgLTEzODAsNiArMTM4Mywx NiBAQAogCX0KIAlBVEhfVU5MT0NLKHNjKTsKIAorCXVpbnQzMl90IGNhcHMgPSAwOworCWlmIChz Yy0+c2NfbXJyZXRyeSkKKwkJY2FwcyB8PSBJRUVFODAyMTFfUkFURUNUTF9DQVBfTVJSOworCWlm IChzYy0+c2NfbXJycHJvdCkKKwkJY2FwcyB8PSBJRUVFODAyMTFfUkFURUNUTF9DQVBfTVJSUFJP VDsKKwlpZiAoc2MtPnNjX3R4Y2hhaW5tYXNrID4gMSkKKwkJY2FwcyB8PSBJRUVFODAyMTFfUkFU RUNUTF9DQVBfTVVMVFhDSEFJTjsKKworCWllZWU4MDIxMV9yYXRlY3RsX2luaXQodmFwLCBjYXBz KTsKKwkKIAkvKiBjb21wbGV0ZSBzZXR1cCAqLwogCWllZWU4MDIxMV92YXBfYXR0YWNoKHZhcCwg YXRoX21lZGlhX2NoYW5nZSwgaWVlZTgwMjExX21lZGlhX3N0YXR1cyk7CiAJcmV0dXJuIHZhcDsK QEAgLTE0MTQsNiArMTQyNyw3IEBACiAJCWF0aF9zdG9wcmVjdihzYywgMSk7CQkvKiBzdG9wIHJl Y3Ygc2lkZSAqLwogCX0KIAorCWllZWU4MDIxMV9yYXRlY3RsX2RlaW5pdCh2YXApOwogCWllZWU4 MDIxMV92YXBfZGV0YWNoKHZhcCk7CiAKIAkvKgpAQCAtNDA0Miw2ICs0MDU2LDggQEAKIHsKIAlz dHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5pID0gYmYtPmJmX25vZGU7CiAJc3RydWN0IGF0aF9ub2Rl ICphbiA9IE5VTEw7CisJc3RydWN0IGllZWU4MDIxMV9yY19pbmZvICpyY19pbmZvID0gTlVMTDsK KwlzdHJ1Y3QgbV90YWcgKm10YWc7CiAKIAlBVEhfVFhfVU5MT0NLX0FTU0VSVChzYyk7CiAJQVRI X1RYUV9VTkxPQ0tfQVNTRVJUKHR4cSk7CkBAIC00MDY4LDEwICs0MDg0LDM0IEBACiAJCQkgKiBY WFggYXNzdW1lIHRoaXMgaXNuJ3QgYW4gYWdncmVnYXRlCiAJCQkgKiBmcmFtZS4KIAkJCSAqLwor I2lmIDAKIAkJCWF0aF90eF91cGRhdGVfcmF0ZWN0cmwoc2MsIG5pLAogCQkJICAgICBiZi0+YmZf c3RhdGUuYmZzX3JjLCB0cywKIAkJCSAgICBiZi0+YmZfc3RhdGUuYmZzX3BrdGxlbiwgMSwKIAkJ CSAgICAodHMtPnRzX3N0YXR1cyA9PSAwID8gMCA6IDEpKTsKKyNlbmRpZgorCQkJLyogbmV0ODAy MTEgcmF0ZWN0bCAqLworCQkgICAgbXRhZyA9IG1fdGFnX2xvY2F0ZShiZi0+YmZfbSwgTVRBR19B QklfTkVUODAyMTEsIAorCQkJCSAgICAgICAgICAgIE5FVDgwMjExX1RBR19SQVRFQ1RMLCBOVUxM KTsKKwkJCWlmIChOVUxMID09IG10YWcpIHsKKwkJCQlJRUVFODAyMTFfTk9URShuaS0+bmlfdmFw LCBJRUVFODAyMTFfTVNHX1JBVEVDVEwsIG5pLAorCQkJCQkJIiVzOiBubyByYXRlY3RsIG1idWYg dGFnIGZvdW5kLlxuIiwgX19mdW5jX18pOworCQkJCXN0cnVjdCBpZWVlODAyMTFfcmNfaW5mbyB0 bXBfcmNfaW5mbzsKKwkJCQlyY19pbmZvID0gJnRtcF9yY19pbmZvOworCQkJCWJ6ZXJvKHJjX2lu Zm8sIHNpemVvZihyY19pbmZvKSk7CisJCQl9IGVsc2UgeworCQkJCUlFRUU4MDIxMV9OT1RFKG5p LT5uaV92YXAsIElFRUU4MDIxMV9NU0dfUkFURUNUTCwgbmksCisJCQkJCQkiJXM6IGZvdW5kIHJh dGVjdGwgbWJ1ZiB0YWcuXG4iLCBfX2Z1bmNfXyk7CisJCQkJcmNfaW5mbyA9IChzdHJ1Y3QgaWVl ZTgwMjExX3JjX2luZm8qKShtdGFnICsgMSk7CisJCQl9CisJCisJCQlpZWVlODAyMTFfcmF0ZWN0 bF9yY19pbmZvX3NldChyY19pbmZvLAorCQkJCQkxLCAodHMtPnRzX3N0YXR1cyA9PSAwID8gMCA6 IDEpLCAKKwkJCQkJYmYtPmJmX3N0YXRlLmJmc19wa3RsZW4sCisJCQkJCXRzLT50c19zaG9ydHJl dHJ5LCB0cy0+dHNfbG9uZ3JldHJ5LAorCQkJCQl0cy0+dHNfZmluYWx0c2ksIHRzLT50c19yYXRl KTsKKwkJCXJjX2luZm8tPmlyaV9mbGFncyAmPSB+SUVFRTgwMjExX1JBVEVDVExfSU5GT19BR0dS OwkKKwkJCWllZWU4MDIxMV9yYXRlY3RsX3R4X2NvbXBsZXRlKG5pLT5uaV92YXAsIG5pLCByY19p bmZvKTsKIAkJfQogCQlhdGhfdHhfZGVmYXVsdF9jb21wKHNjLCBiZiwgMCk7CiAJfSBlbHNlCkBA IC01NTc0LDkgKzU2MTQsMTUgQEAKIAogCWFuLT5hbl9tY2FzdHJpeCA9IGF0aF90eF9maW5kcml4 KHNjLCB0cC0+bWNhc3RyYXRlKTsKIAlhbi0+YW5fbWdtdHJpeCA9IGF0aF90eF9maW5kcml4KHNj LCB0cC0+bWdtdHJhdGUpOwotCisjaWYgMAogCWF0aF9yYXRlX25ld2Fzc29jKHNjLCBhbiwgaXNu ZXcpOworI2VuZGlmCiAKKwlEUFJJTlRGKHNjLCBBVEhfREVCVUdfTk9ERSwgIiVzOiBuZXdhc3Nv YyBpcyBuZXc6ICVkXG4iLAorCQkJX19mdW5jX18sIGlzbmV3KTsKKwlpZiAoaXNuZXcpCisJCWll ZWU4MDIxMV9yYXRlY3RsX25vZGVfaW5pdChuaSk7CisKIAlpZiAoaXNuZXcgJiYKIAkgICAgKHZh cC0+aXZfZmxhZ3MgJiBJRUVFODAyMTFfRl9QUklWQUNZKSA9PSAwICYmIHNjLT5zY19oYXNjbHJr ZXkgJiYKIAkgICAgbmktPm5pX3VjYXN0a2V5LndrX2tleWl4ID09IElFRUU4MDIxMV9LRVlJWF9O T05FKQo= --20cf30780c5c5f629404e61ef669--