From owner-freebsd-wireless@FreeBSD.ORG Mon May 2 06:43:28 2011 Return-Path: Delivered-To: freebsd-wireless@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 431C5106566C for ; Mon, 2 May 2011 06:43:28 +0000 (UTC) (envelope-from adrian.chadd@gmail.com) Received: from mail-vw0-f54.google.com (mail-vw0-f54.google.com [209.85.212.54]) by mx1.freebsd.org (Postfix) with ESMTP id EE2B48FC19 for ; Mon, 2 May 2011 06:43:27 +0000 (UTC) Received: by vws18 with SMTP id 18so5350148vws.13 for ; Sun, 01 May 2011 23:43:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:sender:date:x-google-sender-auth :message-id:subject:from:to:content-type; bh=lMX9hxGkihTOsIHphGOSwiREeJVsSt4nMbVCzQyH90c=; b=GhoSSrXC7k4s1p8dG6HoUufdFG4mXawDKuBR8+qXbTeM7cLWyyn3OQlSSD7KkPrHi6 2fK2LSmiYW5SkhTR7x/AXGoZKVDwSjDeJQowP/vfyudqaoUdjWkABP1/Grf+8Au5Fn5J ardyfc5SeQ9EvRNpQvogiR3hF0DTM8+w4eWO4= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:sender:date:x-google-sender-auth:message-id:subject :from:to:content-type; b=l5k0l59bHOdE9ifSMAZamiKQ2xkgXrcZyNef9XsdNZDWSk7lS699fg07orCu5a8GkT l4zAdKiu3vAHp/Jk2dMYSkZlTnLNZow5QJLUFDWFc+EtpkaJvkeDf3dVvls7XgFjzSra bSGV2EhGjkWyAie+wEQdMLB5uj5dXPu+j+UNo= MIME-Version: 1.0 Received: by 10.52.183.136 with SMTP id em8mr6814777vdc.262.1304318607270; Sun, 01 May 2011 23:43:27 -0700 (PDT) Sender: adrian.chadd@gmail.com Received: by 10.52.157.202 with HTTP; Sun, 1 May 2011 23:43:27 -0700 (PDT) Date: Mon, 2 May 2011 14:43:27 +0800 X-Google-Sender-Auth: hRm10ZwYsG7jSw8AkgIWNumvthM Message-ID: From: Adrian Chadd To: freebsd-wireless@freebsd.org Content-Type: multipart/mixed; boundary=bcaec5489e4342a47904a24557cf Subject: [net80211] patch: properly handle sequence checking for HT non-aggregation; refactor out shared code X-BeenThere: freebsd-wireless@freebsd.org X-Mailman-Version: 2.1.5 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: Mon, 02 May 2011 06:43:28 -0000 --bcaec5489e4342a47904a24557cf Content-Type: text/plain; charset=ISO-8859-1 Hi, The attached patch does two things: Firstly, it abstracts out the sequence number checks in {sta,hostap,mesh,adhoc,wds} into a new function, ieee80211_check_rxseq(). A lot of the input path code is shared; I'm not going to try and refactor all of it. Secondly, it attempts to do the HT mode checking correctly. The existing code assumes HT == AMPDU, so don't worry about re-ordering. Instead, my replacement code checks whether QOS/WME is enabled and if so, checks whether AMPDU-RX is running. If it is, it ignores the sequence number check. If it isn't running AMPDU-RX, it enforces the same sequence number check for non-HT modes. This gets rid of the duplicate packet issues I've seen when doing 11n (non AMPDU-RX) but it doesn't fix the out of order TCP packet behaviour plaguing performance. Adrian --bcaec5489e4342a47904a24557cf Content-Type: application/octet-stream; name="net80211-rxseq-ht.diff" Content-Disposition: attachment; filename="net80211-rxseq-ht.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gn71g7qe0 SW5kZXg6IHN5cy9uZXQ4MDIxMS9pZWVlODAyMTFfc3RhLmMKPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL25l dDgwMjExL2llZWU4MDIxMV9zdGEuYwkocmV2aXNpb24gMjIwOTExKQorKysgc3lzL25ldDgwMjEx L2llZWU4MDIxMV9zdGEuYwkod29ya2luZyBjb3B5KQpAQCAtNTEyLDcgKzUxMiw2IEBACiBzdGF0 aWMgaW50CiBzdGFfaW5wdXQoc3RydWN0IGllZWU4MDIxMV9ub2RlICpuaSwgc3RydWN0IG1idWYg Km0sIGludCByc3NpLCBpbnQgbmYpCiB7Ci0jZGVmaW5lCVNFUV9MRVEoYSxiKQkoKGludCkoKGEp LShiKSkgPD0gMCkKICNkZWZpbmUJSEFTX1NFUSh0eXBlKQkoKHR5cGUgJiAweDQpID09IDApCiAJ c3RydWN0IGllZWU4MDIxMXZhcCAqdmFwID0gbmktPm5pX3ZhcDsKIAlzdHJ1Y3QgaWVlZTgwMjEx Y29tICppYyA9IG5pLT5uaV9pYzsKQEAgLTU5MSw5ICs1OTAsNyBAQAogCQkJICAgIFRJRF9UT19X TUVfQUModGlkKSA+PSBXTUVfQUNfVkkpCiAJCQkJaWMtPmljX3dtZS53bWVfaGlwcmlfdHJhZmZp YysrOwogCQkJcnhzZXEgPSBsZTE2dG9oKCoodWludDE2X3QgKil3aC0+aV9zZXEpOwotCQkJaWYg KChuaS0+bmlfZmxhZ3MgJiBJRUVFODAyMTFfTk9ERV9IVCkgPT0gMCAmJgotCQkJICAgICh3aC0+ aV9mY1sxXSAmIElFRUU4MDIxMV9GQzFfUkVUUlkpICYmCi0JCQkgICAgU0VRX0xFUShyeHNlcSwg bmktPm5pX3J4c2Vxc1t0aWRdKSkgeworCQkJaWYgKCEgaWVlZTgwMjExX2NoZWNrX3J4c2VxKG5p LCB3aCkpIHsKIAkJCQkvKiBkdXBsaWNhdGUsIGRpc2NhcmQgKi8KIAkJCQlJRUVFODAyMTFfRElT Q0FSRF9NQUModmFwLCBJRUVFODAyMTFfTVNHX0lOUFVULAogCQkJCSAgICBic3NpZCwgImR1cGxp Y2F0ZSIsCkBAIC05MTAsNyArOTA3LDYgQEAKIAkJbV9mcmVlbShtKTsKIAl9CiAJcmV0dXJuIHR5 cGU7Ci0jdW5kZWYgU0VRX0xFUQogfQogCiBzdGF0aWMgdm9pZApJbmRleDogc3lzL25ldDgwMjEx L2llZWU4MDIxMV93ZHMuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMvbmV0ODAyMTEvaWVlZTgwMjExX3dk cy5jCShyZXZpc2lvbiAyMjA5MTEpCisrKyBzeXMvbmV0ODAyMTEvaWVlZTgwMjExX3dkcy5jCSh3 b3JraW5nIGNvcHkpCkBAIC00MDYsNyArNDA2LDYgQEAKIHN0YXRpYyBpbnQKIHdkc19pbnB1dChz dHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5pLCBzdHJ1Y3QgbWJ1ZiAqbSwgaW50IHJzc2ksIGludCBu ZikKIHsKLSNkZWZpbmUJU0VRX0xFUShhLGIpCSgoaW50KSgoYSktKGIpKSA8PSAwKQogI2RlZmlu ZQlIQVNfU0VRKHR5cGUpCSgodHlwZSAmIDB4NCkgPT0gMCkKIAlzdHJ1Y3QgaWVlZTgwMjExdmFw ICp2YXAgPSBuaS0+bmlfdmFwOwogCXN0cnVjdCBpZWVlODAyMTFjb20gKmljID0gbmktPm5pX2lj OwpAQCAtNDk1LDkgKzQ5NCw3IEBACiAJCSAgICBUSURfVE9fV01FX0FDKHRpZCkgPj0gV01FX0FD X1ZJKQogCQkJaWMtPmljX3dtZS53bWVfaGlwcmlfdHJhZmZpYysrOwogCQlyeHNlcSA9IGxlMTZ0 b2goKih1aW50MTZfdCAqKXdoLT5pX3NlcSk7Ci0JCWlmICgobmktPm5pX2ZsYWdzICYgSUVFRTgw MjExX05PREVfSFQpID09IDAgJiYKLQkJICAgICh3aC0+aV9mY1sxXSAmIElFRUU4MDIxMV9GQzFf UkVUUlkpICYmCi0JCSAgICBTRVFfTEVRKHJ4c2VxLCBuaS0+bmlfcnhzZXFzW3RpZF0pKSB7CisJ CWlmICghIGllZWU4MDIxMV9jaGVja19yeHNlcShuaSwgd2gpKSB7CiAJCQkvKiBkdXBsaWNhdGUs IGRpc2NhcmQgKi8KIAkJCUlFRUU4MDIxMV9ESVNDQVJEX01BQyh2YXAsIElFRUU4MDIxMV9NU0df SU5QVVQsCiAJCQkgICAgd2gtPmlfYWRkcjEsICJkdXBsaWNhdGUiLApAQCAtNzQxLDcgKzczOCw2 IEBACiAJCW1fZnJlZW0obSk7CiAJfQogCXJldHVybiB0eXBlOwotI3VuZGVmIFNFUV9MRVEKIH0K IAogc3RhdGljIHZvaWQKSW5kZXg6IHN5cy9uZXQ4MDIxMS9pZWVlODAyMTFfaG9zdGFwLmMKPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQotLS0gc3lzL25ldDgwMjExL2llZWU4MDIxMV9ob3N0YXAuYwkocmV2aXNpb24gMjIw OTExKQorKysgc3lzL25ldDgwMjExL2llZWU4MDIxMV9ob3N0YXAuYwkod29ya2luZyBjb3B5KQpA QCAtNDcyLDcgKzQ3Miw2IEBACiBzdGF0aWMgaW50CiBob3N0YXBfaW5wdXQoc3RydWN0IGllZWU4 MDIxMV9ub2RlICpuaSwgc3RydWN0IG1idWYgKm0sIGludCByc3NpLCBpbnQgbmYpCiB7Ci0jZGVm aW5lCVNFUV9MRVEoYSxiKQkoKGludCkoKGEpLShiKSkgPD0gMCkKICNkZWZpbmUJSEFTX1NFUSh0 eXBlKQkoKHR5cGUgJiAweDQpID09IDApCiAJc3RydWN0IGllZWU4MDIxMXZhcCAqdmFwID0gbmkt Pm5pX3ZhcDsKIAlzdHJ1Y3QgaWVlZTgwMjExY29tICppYyA9IG5pLT5uaV9pYzsKQEAgLTU3Miw5 ICs1NzEsNyBAQAogCQkJICAgIFRJRF9UT19XTUVfQUModGlkKSA+PSBXTUVfQUNfVkkpCiAJCQkJ aWMtPmljX3dtZS53bWVfaGlwcmlfdHJhZmZpYysrOwogCQkJcnhzZXEgPSBsZTE2dG9oKCoodWlu dDE2X3QgKil3aC0+aV9zZXEpOwotCQkJaWYgKChuaS0+bmlfZmxhZ3MgJiBJRUVFODAyMTFfTk9E RV9IVCkgPT0gMCAmJgotCQkJICAgICh3aC0+aV9mY1sxXSAmIElFRUU4MDIxMV9GQzFfUkVUUlkp ICYmCi0JCQkgICAgU0VRX0xFUShyeHNlcSwgbmktPm5pX3J4c2Vxc1t0aWRdKSkgeworCQkJaWYg KCEgaWVlZTgwMjExX2NoZWNrX3J4c2VxKG5pLCB3aCkpIHsKIAkJCQkvKiBkdXBsaWNhdGUsIGRp c2NhcmQgKi8KIAkJCQlJRUVFODAyMTFfRElTQ0FSRF9NQUModmFwLCBJRUVFODAyMTFfTVNHX0lO UFVULAogCQkJCSAgICBic3NpZCwgImR1cGxpY2F0ZSIsCkBAIC05MTQsNyArOTExLDYgQEAKIAkJ bV9mcmVlbShtKTsKIAl9CiAJcmV0dXJuIHR5cGU7Ci0jdW5kZWYgU0VRX0xFUQogfQogCiBzdGF0 aWMgdm9pZApJbmRleDogc3lzL25ldDgwMjExL2llZWU4MDIxMV9tZXNoLmMKPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot LS0gc3lzL25ldDgwMjExL2llZWU4MDIxMV9tZXNoLmMJKHJldmlzaW9uIDIyMDkxMSkKKysrIHN5 cy9uZXQ4MDIxMS9pZWVlODAyMTFfbWVzaC5jCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQwLDcgKzEw NDAsNiBAQAogc3RhdGljIGludAogbWVzaF9pbnB1dChzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5p LCBzdHJ1Y3QgbWJ1ZiAqbSwgaW50IHJzc2ksIGludCBuZikKIHsKLSNkZWZpbmUJU0VRX0xFUShh LGIpCSgoaW50KSgoYSktKGIpKSA8PSAwKQogI2RlZmluZQlIQVNfU0VRKHR5cGUpCSgodHlwZSAm IDB4NCkgPT0gMCkKIAlzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXAgPSBuaS0+bmlfdmFwOwogCXN0 cnVjdCBpZWVlODAyMTFjb20gKmljID0gbmktPm5pX2ljOwpAQCAtMTA5NCw5ICsxMDkzLDcgQEAK IAkJCSAgICBUSURfVE9fV01FX0FDKHRpZCkgPj0gV01FX0FDX1ZJKQogCQkJCWljLT5pY193bWUu d21lX2hpcHJpX3RyYWZmaWMrKzsKIAkJCXJ4c2VxID0gbGUxNnRvaCgqKHVpbnQxNl90ICopd2gt Pmlfc2VxKTsKLQkJCWlmICgobmktPm5pX2ZsYWdzICYgSUVFRTgwMjExX05PREVfSFQpID09IDAg JiYKLQkJCSAgICAod2gtPmlfZmNbMV0gJiBJRUVFODAyMTFfRkMxX1JFVFJZKSAmJgotCQkJICAg IFNFUV9MRVEocnhzZXEsIG5pLT5uaV9yeHNlcXNbdGlkXSkpIHsKKwkJCWlmICghIGllZWU4MDIx MV9jaGVja19yeHNlcShuaSwgd2gpKSB7CiAJCQkJLyogZHVwbGljYXRlLCBkaXNjYXJkICovCiAJ CQkJSUVFRTgwMjExX0RJU0NBUkRfTUFDKHZhcCwgSUVFRTgwMjExX01TR19JTlBVVCwKIAkJCQkg ICAgd2gtPmlfYWRkcjEsICJkdXBsaWNhdGUiLApJbmRleDogc3lzL25ldDgwMjExL2llZWU4MDIx MV9pbnB1dC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9uZXQ4MDIxMS9pZWVlODAyMTFfaW5wdXQuYwko cmV2aXNpb24gMjIwOTExKQorKysgc3lzL25ldDgwMjExL2llZWU4MDIxMV9pbnB1dC5jCSh3b3Jr aW5nIGNvcHkpCkBAIC03NjAsNiArNzYwLDU3IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgKiBD aGVjayB0aGUgY3VycmVudCBmcmFtZSBzZXF1ZW5jZSBudW1iZXIgYWdhaW5zdCB0aGUgY3VycmVu dCBUSUQKKyAqIHN0YXRlIGFuZCByZXR1cm4gd2hldGhlciBpdCdzIGluIHNlcXVlbmNlIG9yIHNo b3VsZCBiZSBkcm9wcGVkLgorICovCitpbnQKK2llZWU4MDIxMV9jaGVja19yeHNlcShzdHJ1Y3Qg aWVlZTgwMjExX25vZGUgKm5pLCBzdHJ1Y3QgaWVlZTgwMjExX2ZyYW1lICp3aCkKK3sKKyNkZWZp bmUJU0VRX0xFUShhLGIpCSgoaW50KSgoYSktKGIpKSA8PSAwKQorI2RlZmluZQlIQVNfU0VRKHR5 cGUpCSgodHlwZSAmIDB4NCkgPT0gMCkKKwl1aW50MTZfdCByeHNlcTsKKwl1aW50OF90IHR5cGU7 CisJdWludDhfdCB0aWQ7CisJc3RydWN0IGllZWU4MDIxMV9yeF9hbXBkdSAqcmFwOworCisJcnhz ZXEgPSBsZTE2dG9oKCoodWludDE2X3QgKil3aC0+aV9zZXEpOworCXR5cGUgPSB3aC0+aV9mY1sw XSAmIElFRUU4MDIxMV9GQzBfVFlQRV9NQVNLOworCisJLyogVHlwZXMgd2l0aCBubyBzZXF1ZW5j ZSBudW1iZXIgYXJlIGFsd2F5cyB0cmVhdGVkIHZhbGlkICovCisJaWYgKCEgSEFTX1NFUSh0eXBl KSkKKwkJcmV0dXJuIDE7CisKKwl0aWQgPSBpZWVlODAyMTFfZ2V0dGlkKHdoKTsKKworCS8qCisJ ICogT25seSBkbyB0aGUgSFQgQU1QRFUgY2hlY2sgZm9yIFdNRSBzdGF0aW9uczsgbm9uLVdNRSBI VCBzdGF0aW9ucworCSAqIHNob3VsZG4ndCBleGlzdCBvdXRzaWRlIG9mIGRlYnVnZ2luZy4gV2Ug c2hvdWxkIGF0IGxlYXN0CisJICogaGFuZGxlIHRoYXQuCisJICovCisJaWYgKHRpZCA8IFdNRV9O VU1fVElEKSB7CisJCXJhcCA9ICZuaS0+bmlfcnhfYW1wZHVbdGlkXTsKKwkJLyogSFQgbm9kZXMg Y3VycmVudGx5IGRvaW5nIFJYIEFNUERVIGFyZSBhbHdheXMgdmFsaWQgKi8KKwkJaWYgKChuaS0+ bmlfZmxhZ3MgJiBJRUVFODAyMTFfTk9ERV9IVCkgJiYKKwkJICAgIChyYXAtPnJ4YV9mbGFncyAm IElFRUU4MDIxMV9BR0dSX1JVTk5JTkcpKQorCQkJcmV0dXJuIDE7CisJfQorCisJLyoJCisJICog T3RoZXJ3aXNlLCByZXRyaWVzIGZvciBwYWNrZXRzIGJlbG93IG9yIGVxdWFsIHRvIHRoZSBsYXN0 CisJICogc2VlbiBzZXF1ZW5jZSBudW1iZXIgc2hvdWxkIGJlIGRyb3BwZWQuCisJICoKKwkgKiBY WFggVGhpcyBzaG91bGQgYmUgcmV2aXNpdGVkIHRvIHRydWVseSBpZGVudGlmeS9sb2cgdmVyeQor CSAqIFhYWCBvdXQgb2Ygb3JkZXIgcGFja2V0cyAoZHVlIHRvIHZlbmRvciBidWdzKSwgcmF0aGVy IHRoYW4KKwkgKiBYWFggc2ltcGx5IHJldHJhbnNtaXRzLgorCSAqLworCWlmICgod2gtPmlfZmNb MV0gJiBJRUVFODAyMTFfRkMxX1JFVFJZKSAmJgorCSAgICBTRVFfTEVRKHJ4c2VxLCBuaS0+bmlf cnhzZXFzW3RpZF0pKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworfQorCiAjaWZkZWYgSUVF RTgwMjExX0RFQlVHCiAvKgogICogRGVidWdnaW5nIHN1cHBvcnQuCkluZGV4OiBzeXMvbmV0ODAy MTEvaWVlZTgwMjExX2lucHV0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL25ldDgwMjExL2llZWU4MDIx MV9pbnB1dC5oCShyZXZpc2lvbiAyMjA5MTEpCisrKyBzeXMvbmV0ODAyMTEvaWVlZTgwMjExX2lu cHV0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE1Nyw0ICsxNTcsNiBAQAogaW50CWllZWU4MDIxMV9w YXJzZV9iZWFjb24oc3RydWN0IGllZWU4MDIxMV9ub2RlICosIHN0cnVjdCBtYnVmICosCiAJCXN0 cnVjdCBpZWVlODAyMTFfc2NhbnBhcmFtcyAqKTsKIGludAlpZWVlODAyMTFfcGFyc2VfYWN0aW9u KHN0cnVjdCBpZWVlODAyMTFfbm9kZSAqLCBzdHJ1Y3QgbWJ1ZiAqKTsKK2ludAlpZWVlODAyMTFf Y2hlY2tfcnhzZXEoc3RydWN0IGllZWU4MDIxMV9ub2RlICpuaSwKKwkJc3RydWN0IGllZWU4MDIx MV9mcmFtZSAqd2gpOwogI2VuZGlmIC8qIF9ORVQ4MDIxMV9JRUVFODAyMTFfSU5QVVRfSF8gKi8K SW5kZXg6IHN5cy9uZXQ4MDIxMS9pZWVlODAyMTFfYWRob2MuYwo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMv bmV0ODAyMTEvaWVlZTgwMjExX2FkaG9jLmMJKHJldmlzaW9uIDIyMDkxMSkKKysrIHN5cy9uZXQ4 MDIxMS9pZWVlODAyMTFfYWRob2MuYwkod29ya2luZyBjb3B5KQpAQCAtMjg1LDcgKzI4NSw2IEBA CiBzdGF0aWMgaW50CiBhZGhvY19pbnB1dChzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5pLCBzdHJ1 Y3QgbWJ1ZiAqbSwgaW50IHJzc2ksIGludCBuZikKIHsKLSNkZWZpbmUJU0VRX0xFUShhLGIpCSgo aW50KSgoYSktKGIpKSA8PSAwKQogI2RlZmluZQlIQVNfU0VRKHR5cGUpCSgodHlwZSAmIDB4NCkg PT0gMCkKIAlzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXAgPSBuaS0+bmlfdmFwOwogCXN0cnVjdCBp ZWVlODAyMTFjb20gKmljID0gbmktPm5pX2ljOwpAQCAtNDEyLDkgKzQxMSw3IEBACiAJCQkgICAg VElEX1RPX1dNRV9BQyh0aWQpID49IFdNRV9BQ19WSSkKIAkJCQlpYy0+aWNfd21lLndtZV9oaXBy aV90cmFmZmljKys7CiAJCQlyeHNlcSA9IGxlMTZ0b2goKih1aW50MTZfdCAqKXdoLT5pX3NlcSk7 Ci0JCQlpZiAoKG5pLT5uaV9mbGFncyAmIElFRUU4MDIxMV9OT0RFX0hUKSA9PSAwICYmCi0JCQkg ICAgKHdoLT5pX2ZjWzFdICYgSUVFRTgwMjExX0ZDMV9SRVRSWSkgJiYKLQkJCSAgICBTRVFfTEVR KHJ4c2VxLCBuaS0+bmlfcnhzZXFzW3RpZF0pKSB7CisJCQlpZiAoISBpZWVlODAyMTFfY2hlY2tf cnhzZXEobmksIHdoKSkgewogCQkJCS8qIGR1cGxpY2F0ZSwgZGlzY2FyZCAqLwogCQkJCUlFRUU4 MDIxMV9ESVNDQVJEX01BQyh2YXAsIElFRUU4MDIxMV9NU0dfSU5QVVQsCiAJCQkJICAgIGJzc2lk LCAiZHVwbGljYXRlIiwKQEAgLTY2MCw3ICs2NTcsNiBAQAogCQltX2ZyZWVtKG0pOwogCX0KIAly ZXR1cm4gdHlwZTsKLSN1bmRlZiBTRVFfTEVRCiB9CiAKIHN0YXRpYyBpbnQK --bcaec5489e4342a47904a24557cf--