From owner-freebsd-wireless@FreeBSD.ORG Thu Sep 1 09:56:13 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 418D2106566B; Thu, 1 Sep 2011 09:56:13 +0000 (UTC) (envelope-from paradyse@gmail.com) Received: from mail-yw0-f54.google.com (mail-yw0-f54.google.com [209.85.213.54]) by mx1.freebsd.org (Postfix) with ESMTP id D8C2D8FC17; Thu, 1 Sep 2011 09:56:12 +0000 (UTC) Received: by ywo32 with SMTP id 32so1587583ywo.13 for ; Thu, 01 Sep 2011 02:56:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=mime-version:sender:in-reply-to:references:from:date :x-google-sender-auth:message-id:subject:to:cc:content-type; bh=5f1y70+eT+3et+y76MG5Yf6k7FBrWu8o8ZhGoYNZsBw=; b=jYV0tDae4UbHQRsHiuXwu8VDaiVwI8YsLtxJYyKJYtfynSRZMxeEVOxA4tz2YYAVOn z9KFz6u3vfJMyY9m7LtIxbs/OL7MvNjc0He1p0W+SuLrLR6FuICBBlYWzPV6hncv9M2W z5kH0X2EIzb8zwQtnISvLmjIQkn6ir5cDRx0M= Received: by 10.150.198.18 with SMTP id v18mr36522ybf.24.1314870972079; Thu, 01 Sep 2011 02:56:12 -0700 (PDT) MIME-Version: 1.0 Sender: paradyse@gmail.com Received: by 10.150.144.15 with HTTP; Thu, 1 Sep 2011 02:55:52 -0700 (PDT) In-Reply-To: References: From: Kang Yin Su Date: Thu, 1 Sep 2011 17:55:52 +0800 X-Google-Sender-Auth: iZ11cPXzYXT5T9202p8dby7PQbk Message-ID: To: freebsd-wireless@freebsd.org Content-Type: multipart/mixed; boundary=000e0cd3065c375d3104abde4185 Cc: Subject: Re: [PATCH] TDMA beacon from slave station 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: Thu, 01 Sep 2011 09:56:13 -0000 --000e0cd3065c375d3104abde4185 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Hi all, This is the correction from last TDMA patch. 1. Relocate 'ath_hal_*' functions from if_ath.c to appropriate HAL layer and moved those common functions to ah.c 2. The next TBTT register mistakenly used in AR6416 that cause intermittent beacons transmit form a TDMA slave station. - Use AR_NEXT_TBTT instead of AR_TIMER0 for AR5416. 3. Function ath_extend_tsf() assume receive time-stamp is in 15bits TSF that leaks to incorrect beacon timers used for AR5416. The PCU 's timestamp from AR5416 is 32bits while AR5212 is 15bits. Thanks, Yin On Mon, Aug 29, 2011 at 8:01 PM, Kang Yin Su wrote: > Hi all, > > This patch modify the following: > > 1. Relocate 'ath_hal_*' functions from if_ath.c to appropriate HAL > layer and moved those common functions to ah.c > 2. The next TBTT register mistakenly used in AR6416 that cause > intermittent beacons transmit form a TDMA slave station. > =A0- Use AR_NEXT_TBTT instead of AR_TIMER0 for AR5416. > 3. Do not adjust the beacon timers when 'tudelta' value is multiple of > tdmabintval value. It causes the timers to stop and beacon stuck. > > Thanks, > Yin > --000e0cd3065c375d3104abde4185 Content-Type: application/octet-stream; name="11nnexttbtt_fix_and_hal_func_relocate4.diff" Content-Disposition: attachment; filename="11nnexttbtt_fix_and_hal_func_relocate4.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gs1jq9hh1 SW5kZXg6IGlmX2F0aHZhci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGlmX2F0aHZhci5oCShyZXZpc2lvbiAy MjUzMDIpCisrKyBpZl9hdGh2YXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDgyLDYgKzQ4Miw4IEBA CiAJKCgqKF9haCktPmFoX3NldEJlYWNvblRpbWVycykoKF9haCksIChfYnQpKSkKICNkZWZpbmUJ YXRoX2hhbF9iZWFjb250aW1lcnMoX2FoLCBfYnMpIFwKIAkoKCooX2FoKS0+YWhfc2V0U3RhdGlv bkJlYWNvblRpbWVycykoKF9haCksIChfYnMpKSkKKyNkZWZpbmUgYXRoX2hhbF9nZXRuZXh0dGJ0 dChfYWgpIFwKKwkoKCooX2FoKS0+YWhfZ2V0TmV4dFRCVFQpKChfYWgpKSkKICNkZWZpbmUJYXRo X2hhbF9zZXRhc3NvY2lkKF9haCwgX2JzcywgX2Fzc29jaWQpIFwKIAkoKCooX2FoKS0+YWhfd3Jp dGVBc3NvY2lkKSgoX2FoKSwgKF9ic3MpLCAoX2Fzc29jaWQpKSkKICNkZWZpbmUJYXRoX2hhbF9w aHlkaXNhYmxlKF9haCkgXApJbmRleDogYXRoX2hhbC9hcjU0MTYvYXI1NDE2X2F0dGFjaC5jCj09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KLS0tIGF0aF9oYWwvYXI1NDE2L2FyNTQxNl9hdHRhY2guYwkocmV2aXNpb24gMjI1 MzAyKQorKysgYXRoX2hhbC9hcjU0MTYvYXI1NDE2X2F0dGFjaC5jCSh3b3JraW5nIGNvcHkpCkBA IC0xMzYsNiArMTM2LDcgQEAKIAlhaC0+YWhfZ3Bpb0dldAkJCT0gYXI1NDE2R3Bpb0dldDsKIAlh aC0+YWhfZ3Bpb1NldAkJCT0gYXI1NDE2R3Bpb1NldDsKIAlhaC0+YWhfZ3Bpb1NldEludHIJCT0g YXI1NDE2R3Bpb1NldEludHI7CisJYWgtPmFoX2dldFRzZjY0CQkJPSBhcjU0MTZHZXRUc2Y2NDsK IAlhaC0+YWhfcmVzZXRUc2YJCQk9IGFyNTQxNlJlc2V0VHNmOwogCWFoLT5haF9nZXRSZkdhaW4J CT0gYXI1NDE2R2V0UmZnYWluOwogCWFoLT5haF9zZXRBbnRlbm5hU3dpdGNoCQk9IGFyNTQxNlNl dEFudGVubmFTd2l0Y2g7CkBAIC0xNjAsNiArMTYxLDcgQEAKIAlhaC0+YWhfYmVhY29uSW5pdAkJ PSBhcjU0MTZCZWFjb25Jbml0OwogCWFoLT5haF9zZXRTdGF0aW9uQmVhY29uVGltZXJzCT0gYXI1 NDE2U2V0U3RhQmVhY29uVGltZXJzOwogCWFoLT5haF9yZXNldFN0YXRpb25CZWFjb25UaW1lcnMJ PSBhcjU0MTZSZXNldFN0YUJlYWNvblRpbWVyczsKKwlhaC0+YWhfZ2V0TmV4dFRCVFQJCT0gYXI1 NDE2R2V0TmV4dFRCVFQ7CiAKIAkvKiA4MDIuMTFuIEZ1bmN0aW9ucyAqLwogCWFoLT5haF9jaGFp blR4RGVzYwkJPSBhcjU0MTZDaGFpblR4RGVzYzsKSW5kZXg6IGF0aF9oYWwvYXI1NDE2L2FyNTQx Nl9yZXNldC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KLS0tIGF0aF9oYWwvYXI1NDE2L2FyNTQxNl9yZXNldC5jCShy ZXZpc2lvbiAyMjUzMDIpCisrKyBhdGhfaGFsL2FyNTQxNi9hcjU0MTZfcmVzZXQuYwkod29ya2lu ZyBjb3B5KQpAQCAtMTQ3LDcgKzE0Nyw3IEBACiAJLyogRm9yIGNoaXBzIG9uIHdoaWNoIHRoZSBS VEMgcmVzZXQgaXMgZG9uZSwgc2F2ZSBUU0YgYmVmb3JlIGl0IGdldHMgY2xlYXJlZCAqLwogCWlm IChBUl9TUkVWX0hPV0woYWgpIHx8CiAJICAgIChBUl9TUkVWX01FUkxJTihhaCkgJiYgYXRoX2hh bF9lZXByb21HZXRGbGFnKGFoLCBBUl9FRVBfT0xfUFdSQ1RSTCkpKQotCQl0c2YgPSBhcjUyMTJH ZXRUc2Y2NChhaCk7CisJCXRzZiA9IGFyNTQxNkdldFRzZjY0KGFoKTsKIAogCS8qIE1hcmsgUEhZ IGFzIGluYWN0aXZlOyBtYXJrZWQgYWN0aXZlIGluIGFyNTQxNkluaXRCQigpICovCiAJYXI1NDE2 TWFya1BoeUluYWN0aXZlKGFoKTsKQEAgLTE1OSw3ICsxNTksNyBAQAogCiAJLyogUmVzdG9yZSBU U0YgKi8KIAlpZiAodHNmKQotCQlhcjUyMTJTZXRUc2Y2NChhaCwgdHNmKTsKKwkJYXI1NDE2U2V0 VHNmNjQoYWgsIHRzZik7CiAKIAlPU19NQVJLKGFoLCBBSF9NQVJLX1JFU0VUX0xJTkUsIF9fTElO RV9fKTsKIAlpZiAoQVJfU1JFVl9NRVJMSU5fMTBfT1JfTEFURVIoYWgpKQpAQCAtMTkyLDkgKzE5 Miw5IEBACiAJICogdmFsdWUgYWZ0ZXIgdGhlIGluaXR2YWxzIGhhdmUgYmVlbiBhcHBsaWVkLCB3 aXRoIGFuIG9mZnNldAogCSAqIGJhc2VkIG9uIG1lYXN1cmVkIHRpbWUgZGlmZmVyZW5jZQogCSAq LwotCWlmIChBUl9TUkVWX0hPV0woYWgpICYmIChhcjUyMTJHZXRUc2Y2NChhaCkgPCB0c2YpKSB7 CisJaWYgKEFSX1NSRVZfSE9XTChhaCkgJiYgKGFyNTQxNkdldFRzZjY0KGFoKSA8IHRzZikpIHsK IAkJdHNmICs9IDE1MDA7Ci0JCWFyNTIxMlNldFRzZjY0KGFoLCB0c2YpOworCQlhcjU0MTZTZXRU c2Y2NChhaCwgdHNmKTsKIAl9CiAKIAlIQUxERUJVRyhhaCwgSEFMX0RFQlVHX1JFU0VULCAiPj4+ MiAlczogQVJfUEhZX0RBR19DVFJMQ0NLPTB4JXhcbiIsCkBAIC01MDMsNyArNTAzLDcgQEAKIAkJ Y2hhbi0+aWNfc3RhdGUgJj0gfklFRUU4MDIxMV9DSEFOU1RBVEVfQ1dJTlQ7CiAKIAlpY2hhbi0+ Y2hhbm5lbF90aW1lID0gMDsKLQlpY2hhbi0+dHNmX2xhc3QgPSBhcjUyMTJHZXRUc2Y2NChhaCk7 CisJaWNoYW4tPnRzZl9sYXN0ID0gYXI1NDE2R2V0VHNmNjQoYWgpOwogCWFyNTIxMlR4RW5hYmxl KGFoLCBBSF9UUlVFKTsKIAlyZXR1cm4gQUhfVFJVRTsKIH0KSW5kZXg6IGF0aF9oYWwvYXI1NDE2 L2FyNTQxNi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KLS0tIGF0aF9oYWwvYXI1NDE2L2FyNTQxNi5oCShyZXZpc2lv biAyMjUzMDIpCisrKyBhdGhfaGFsL2FyNTQxNi9hcjU0MTYuaAkod29ya2luZyBjb3B5KQpAQCAt MTY5LDYgKzE2OSw3IEBACiBleHRlcm4Jdm9pZCBhcjU0MTZSZXNldFN0YUJlYWNvblRpbWVycyhz dHJ1Y3QgYXRoX2hhbCAqYWgpOwogZXh0ZXJuCXZvaWQgYXI1NDE2U2V0U3RhQmVhY29uVGltZXJz KHN0cnVjdCBhdGhfaGFsICphaCwKIAkJY29uc3QgSEFMX0JFQUNPTl9TVEFURSAqKTsKK2V4dGVy bgl1aW50NjRfdCBhcjU0MTZHZXROZXh0VEJUVChzdHJ1Y3QgYXRoX2hhbCAqKTsKIAogZXh0ZXJu CUhBTF9CT09MIGFyNTQxNkVlcHJvbVJlYWQoc3RydWN0IGF0aF9oYWwgKiwgdV9pbnQgb2ZmLCB1 aW50MTZfdCAqZGF0YSk7CiBleHRlcm4JSEFMX0JPT0wgYXI1NDE2RWVwcm9tV3JpdGUoc3RydWN0 IGF0aF9oYWwgKiwgdV9pbnQgb2ZmLCB1aW50MTZfdCBkYXRhKTsKQEAgLTE4Niw2ICsxODcsOCBA QAogCiBleHRlcm4JdV9pbnQgYXI1NDE2R2V0V2lyZWxlc3NNb2RlcyhzdHJ1Y3QgYXRoX2hhbCAq YWgpOwogZXh0ZXJuCXZvaWQgYXI1NDE2U2V0TGVkU3RhdGUoc3RydWN0IGF0aF9oYWwgKmFoLCBI QUxfTEVEX1NUQVRFIHN0YXRlKTsKK2V4dGVybgl1aW50NjRfdCBhcjU0MTZHZXRUc2Y2NChzdHJ1 Y3QgYXRoX2hhbCAqYWgpOworZXh0ZXJuCXZvaWQgYXI1NDE2U2V0VHNmNjQoc3RydWN0IGF0aF9o YWwgKmFoLCB1aW50NjRfdCB0c2Y2NCk7CiBleHRlcm4Jdm9pZCBhcjU0MTZSZXNldFRzZihzdHJ1 Y3QgYXRoX2hhbCAqYWgpOwogZXh0ZXJuCUhBTF9CT09MIGFyNTQxNlNldEFudGVubmFTd2l0Y2go c3RydWN0IGF0aF9oYWwgKiwgSEFMX0FOVF9TRVRUSU5HKTsKIGV4dGVybglIQUxfQk9PTCBhcjU0 MTZTZXREZWNvbXBNYXNrKHN0cnVjdCBhdGhfaGFsICosIHVpbnQxNl90LCBpbnQpOwpJbmRleDog YXRoX2hhbC9hcjU0MTYvYXI1NDE2X2JlYWNvbi5jCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGF0aF9oYWwvYXI1 NDE2L2FyNTQxNl9iZWFjb24uYwkocmV2aXNpb24gMjI1MzAyKQorKysgYXRoX2hhbC9hcjU0MTYv YXI1NDE2X2JlYWNvbi5jCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSwxNSBAQAogI2RlZmlu ZQlPTkVfRUlHSFRIX1RVX1RPX1VTRUMoX3R1OCkJKChfdHU4KSA8PCA3KQogCiAvKgorICogUmV0 dXJuIHRoZSBoYXJkd2FyZSBOZXh0VEJUVCBpbiBUU0YKKyAqLwordWludDY0X3QKK2FyNTQxNkdl dE5leHRUQlRUKHN0cnVjdCBhdGhfaGFsICphaCkKK3sKKwlyZXR1cm4gT1NfUkVHX1JFQUQoYWgs IEFSX05FWFRfVEJUVCk7Cit9CisKKy8qCiAgKiBJbml0aWFsaXplIGFsbCBvZiB0aGUgaGFyZHdh cmUgcmVnaXN0ZXJzIHVzZWQgdG8KICAqIHNlbmQgYmVhY29ucy4gIE5vdGUgdGhhdCBmb3Igc3Rh dGlvbiBvcGVyYXRpb24gdGhlCiAgKiBkcml2ZXIgY2FsbHMgYXI1NDE2U2V0U3RhQmVhY29uVGlt ZXJzIGluc3RlYWQuCkluZGV4OiBhdGhfaGFsL2FyNTQxNi9hcjU0MTZfbWlzYy5jCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KLS0tIGF0aF9oYWwvYXI1NDE2L2FyNTQxNl9taXNjLmMJKHJldmlzaW9uIDIyNTMwMikKKysr IGF0aF9oYWwvYXI1NDE2L2FyNTQxNl9taXNjLmMJKHdvcmtpbmcgY29weSkKQEAgLTkzLDYgKzkz LDQxIEBACiB9CiAKIC8qCisgKiBHZXQgdGhlIGN1cnJlbnQgaGFyZHdhcmUgdHNmIGZvciBzdGFt bG1lCisgKi8KK3VpbnQ2NF90CithcjU0MTZHZXRUc2Y2NChzdHJ1Y3QgYXRoX2hhbCAqYWgpCit7 CisJdWludDMyX3QgbG93MSwgbG93MiwgdTMyOworCisJLyogc3luYyBtdWx0aS13b3JkIHJlYWQg Ki8KKwlsb3cxID0gT1NfUkVHX1JFQUQoYWgsIEFSX1RTRl9MMzIpOworCXUzMiA9IE9TX1JFR19S RUFEKGFoLCBBUl9UU0ZfVTMyKTsKKwlsb3cyID0gT1NfUkVHX1JFQUQoYWgsIEFSX1RTRl9MMzIp OworCWlmIChsb3cyIDwgbG93MSkgewkvKiByb2xsIG92ZXIgKi8KKwkJLyoKKwkJICogSWYgd2Ug YXJlIG5vdCBwcmVlbXB0ZWQgdGhpcyB3aWxsIHdvcmsuICBJZiB3ZSBhcmUKKwkJICogdGhlbiB3 ZSByZS1yZWFkaW5nIEFSX1RTRl9VMzIgZG9lcyBubyBnb29kIGFzIHRoZQorCQkgKiBsb3cgYml0 cyB3aWxsIGJlIG1lYW5pbmdsZXNzLiAgTGlrZXdpc2UgcmVhZGluZworCQkgKiBMMzIsIFUzMiwg VTMyLCB0aGVuIGNvbXBhcmluZyB0aGUgbGFzdCB0d28gcmVhZHMKKwkJICogdG8gY2hlY2sgZm9y IHJvbGxvdmVyIGRvZXNuJ3QgaGVscCBpZiBwcmVlbXB0ZWQtLXNvCisJCSAqIHdlIHRha2UgdGhp cyBhcHByb2FjaCBhcyBpdCBjb3N0cyBvbmUgbGVzcyBQQ0kgcmVhZAorCQkgKiB3aGljaCBjYW4g YmUgbm90aWNlYWJsZSB3aGVuIGRvaW5nIHRoaW5ncyBsaWtlCisJCSAqIHRpbWVzdGFtcGluZyBw YWNrZXRzIGluIG1vbml0b3IgbW9kZS4KKwkJICovCisJCXUzMisrOworCX0KKwlyZXR1cm4gKCgo dWludDY0X3QpIHUzMikgPDwgMzIpIHwgKCh1aW50NjRfdCkgbG93Mik7Cit9CisKK3ZvaWQKK2Fy NTQxNlNldFRzZjY0KHN0cnVjdCBhdGhfaGFsICphaCwgdWludDY0X3QgdHNmNjQpCit7CisJT1Nf UkVHX1dSSVRFKGFoLCBBUl9UU0ZfTDMyLCB0c2Y2NCAmIDB4ZmZmZmZmZmYpOworCU9TX1JFR19X UklURShhaCwgQVJfVFNGX1UzMiwgKHRzZjY0ID4+IDMyKSAmIDB4ZmZmZmZmZmYpOworfQorCisv KgogICogUmVzZXQgdGhlIGN1cnJlbnQgaGFyZHdhcmUgdHNmIGZvciBzdGFtbG1lLgogICovCiB2 b2lkCkluZGV4OiBhdGhfaGFsL2FoLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYXRoX2hhbC9haC5jCShyZXZp c2lvbiAyMjUzMDIpCisrKyBhdGhfaGFsL2FoLmMJKHdvcmtpbmcgY29weSkKQEAgLTEyMjIsMyAr MTIyMiwzNyBAQAogICAgIH0KICAgICByZXR1cm4gcnY7CiB9CisKKy8qCisgKiBBZGp1c3QgdGhl IFRTRi4KKyAqLwordm9pZAorYXRoX2hhbF9hZGp1c3R0c2Yoc3RydWN0IGF0aF9oYWwgKmFoLCBp bnQzMl90IHRzZmRlbHRhKQoreworCS8qIFhYWCBoYW5kbGUgd3JhcC9vdmVyZmxvdyAqLworCU9T X1JFR19XUklURShhaCwgQVJfVFNGX0wzMiwgT1NfUkVHX1JFQUQoYWgsIEFSX1RTRl9MMzIpICsg dHNmZGVsdGEpOworfQorCisvKgorICogRW5hYmxlIG9yIGRpc2FibGUgQ0NBLgorICovCit2b2lk CithdGhfaGFsX3NldGNjYShzdHJ1Y3QgYXRoX2hhbCAqYWgsIGludCBlbmEpCit7CisJLyoKKwkg KiBOQjogZmlsbCBtZSBpbjsgdGhpcyBpcyBub3QgcHJvdmlkZWQgYnkgZGVmYXVsdCBiZWNhdXNl IGRpc2FibGluZworCSAqICAgICBDQ0EgaW4gbW9zdCBsb2NhbGVzIHZpb2xhdGVzIHJlZ3VsYXRv cnkuCisJICovCit9CisKKy8qCisgKiBHZXQgQ0NBIHNldHRpbmcuCisgKi8KK2ludAorYXRoX2hh bF9nZXRjY2Eoc3RydWN0IGF0aF9oYWwgKmFoKQoreworCXVfaW50MzJfdCBkaWFnOworCWlmIChh dGhfaGFsX2dldGNhcGFiaWxpdHkoYWgsIEhBTF9DQVBfRElBRywgMCwgJmRpYWcpICE9IEhBTF9P SykKKwkJcmV0dXJuIDE7CisJcmV0dXJuICgoZGlhZyAmIDB4NTAwMDAwKSA9PSAwKTsKK30KSW5k ZXg6IGF0aF9oYWwvYXI1MjEwL2FyNTIxMF9hdHRhY2guYwo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBhdGhfaGFs L2FyNTIxMC9hcjUyMTBfYXR0YWNoLmMJKHJldmlzaW9uIDIyNTMwMikKKysrIGF0aF9oYWwvYXI1 MjEwL2FyNTIxMF9hdHRhY2guYwkod29ya2luZyBjb3B5KQpAQCAtMTQ4LDYgKzE0OCw3IEBACiAJ LmFoX2JlYWNvbkluaXQJCQk9IGFyNTIxMEJlYWNvbkluaXQsCiAJLmFoX3NldFN0YXRpb25CZWFj b25UaW1lcnMJPSBhcjUyMTBTZXRTdGFCZWFjb25UaW1lcnMsCiAJLmFoX3Jlc2V0U3RhdGlvbkJl YWNvblRpbWVycwk9IGFyNTIxMFJlc2V0U3RhQmVhY29uVGltZXJzLAorCS5haF9nZXROZXh0VEJU VAkJCT0gYXI1MjEwR2V0TmV4dFRCVFQsCiAKIAkvKiBJbnRlcnJ1cHQgRnVuY3Rpb25zICovCiAJ LmFoX2lzSW50ZXJydXB0UGVuZGluZwkJPSBhcjUyMTBJc0ludGVycnVwdFBlbmRpbmcsCkluZGV4 OiBhdGhfaGFsL2FyNTIxMC9hcjUyMTAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBhdGhfaGFsL2FyNTIxMC9h cjUyMTAuaAkocmV2aXNpb24gMjI1MzAyKQorKysgYXRoX2hhbC9hcjUyMTAvYXI1MjEwLmgJKHdv cmtpbmcgY29weSkKQEAgLTI2OCw2ICsyNjgsNyBAQAogZXh0ZXJuCXZvaWQgYXI1MjEwU2V0U3Rh QmVhY29uVGltZXJzKHN0cnVjdCBhdGhfaGFsICosCiAJCWNvbnN0IEhBTF9CRUFDT05fU1RBVEUg Kik7CiBleHRlcm4Jdm9pZCBhcjUyMTBSZXNldFN0YUJlYWNvblRpbWVycyhzdHJ1Y3QgYXRoX2hh bCAqKTsKK2V4dGVybgl1aW50NjRfdCBhcjUyMTBHZXROZXh0VEJUVChzdHJ1Y3QgYXRoX2hhbCAq KTsKIAogZXh0ZXJuCUhBTF9CT09MIGFyNTIxMElzSW50ZXJydXB0UGVuZGluZyhzdHJ1Y3QgYXRo X2hhbCAqKTsKIGV4dGVybglIQUxfQk9PTCBhcjUyMTBHZXRQZW5kaW5nSW50ZXJydXB0cyhzdHJ1 Y3QgYXRoX2hhbCAqLCBIQUxfSU5UICopOwpJbmRleDogYXRoX2hhbC9hcjUyMTAvYXI1MjEwX2Jl YWNvbi5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KLS0tIGF0aF9oYWwvYXI1MjEwL2FyNTIxMF9iZWFjb24uYwkocmV2 aXNpb24gMjI1MzAyKQorKysgYXRoX2hhbC9hcjUyMTAvYXI1MjEwX2JlYWNvbi5jCSh3b3JraW5n IGNvcHkpCkBAIC0yNyw2ICsyNywxNyBAQAogI2luY2x1ZGUgImFyNTIxMC9hcjUyMTBkZXNjLmgi CiAKIC8qCisgKiBSZXR1cm4gdGhlIGhhcmR3YXJlIE5leHRUQlRUIGluIFRTRgorICovCit1aW50 NjRfdAorYXI1MjEwR2V0TmV4dFRCVFQoc3RydWN0IGF0aF9oYWwgKmFoKQoreworI2RlZmluZSBU VV9UT19UU0YoX3R1KQkoKCh1aW50NjRfdCkoX3R1KSkgPDwgMTApCisJcmV0dXJuIFRVX1RPX1RT RihPU19SRUdfUkVBRChhaCwgQVJfVElNRVIwKSk7CisjdW5kZWYgVFVfVE9fVFNGCit9CisKKy8q CiAgKiBJbml0aWFsaXplIGFsbCBvZiB0aGUgaGFyZHdhcmUgcmVnaXN0ZXJzIHVzZWQgdG8gc2Vu ZCBiZWFjb25zLgogICovCiB2b2lkCkluZGV4OiBhdGhfaGFsL2FyNTIxMS9hcjUyMTFfYXR0YWNo LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQotLS0gYXRoX2hhbC9hcjUyMTEvYXI1MjExX2F0dGFjaC5jCShyZXZpc2lv biAyMjUzMDIpCisrKyBhdGhfaGFsL2FyNTIxMS9hcjUyMTFfYXR0YWNoLmMJKHdvcmtpbmcgY29w eSkKQEAgLTE0OCw2ICsxNDgsNyBAQAogCS5haF9iZWFjb25Jbml0CQkJPSBhcjUyMTFCZWFjb25J bml0LAogCS5haF9zZXRTdGF0aW9uQmVhY29uVGltZXJzCT0gYXI1MjExU2V0U3RhQmVhY29uVGlt ZXJzLAogCS5haF9yZXNldFN0YXRpb25CZWFjb25UaW1lcnMJPSBhcjUyMTFSZXNldFN0YUJlYWNv blRpbWVycywKKwkuYWhfZ2V0TmV4dFRCVFQJCQk9IGFyNTIxMUdldE5leHRUQlRULAogCiAJLyog SW50ZXJydXB0IEZ1bmN0aW9ucyAqLwogCS5haF9pc0ludGVycnVwdFBlbmRpbmcJCT0gYXI1MjEx SXNJbnRlcnJ1cHRQZW5kaW5nLApJbmRleDogYXRoX2hhbC9hcjUyMTEvYXI1MjExLmgKPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQotLS0gYXRoX2hhbC9hcjUyMTEvYXI1MjExLmgJKHJldmlzaW9uIDIyNTMwMikKKysrIGF0 aF9oYWwvYXI1MjExL2FyNTIxMS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOTYsNiArMjk2LDcgQEAK IGV4dGVybgl2b2lkIGFyNTIxMVNldFN0YUJlYWNvblRpbWVycyhzdHJ1Y3QgYXRoX2hhbCAqLAog CQljb25zdCBIQUxfQkVBQ09OX1NUQVRFICopOwogZXh0ZXJuCXZvaWQgYXI1MjExUmVzZXRTdGFC ZWFjb25UaW1lcnMoc3RydWN0IGF0aF9oYWwgKik7CitleHRlcm4JdWludDY0X3QgYXI1MjExR2V0 TmV4dFRCVFQoc3RydWN0IGF0aF9oYWwgKik7CiAKIGV4dGVybglIQUxfQk9PTCBhcjUyMTFJc0lu dGVycnVwdFBlbmRpbmcoc3RydWN0IGF0aF9oYWwgKik7CiBleHRlcm4JSEFMX0JPT0wgYXI1MjEx R2V0UGVuZGluZ0ludGVycnVwdHMoc3RydWN0IGF0aF9oYWwgKiwgSEFMX0lOVCAqKTsKSW5kZXg6 IGF0aF9oYWwvYXI1MjExL2FyNTIxMV9iZWFjb24uYwo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBhdGhfaGFsL2Fy NTIxMS9hcjUyMTFfYmVhY29uLmMJKHJldmlzaW9uIDIyNTMwMikKKysrIGF0aF9oYWwvYXI1MjEx L2FyNTIxMV9iZWFjb24uYwkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsMTcgQEAKICAqLwog CiAvKgorICogUmV0dXJuIHRoZSBoYXJkd2FyZSBOZXh0VEJUVCBpbiBUU0YKKyAqLwordWludDY0 X3QKK2FyNTIxMUdldE5leHRUQlRUKHN0cnVjdCBhdGhfaGFsICphaCkKK3sKKyNkZWZpbmUgVFVf VE9fVFNGKF90dSkJKCgodWludDY0X3QpKF90dSkpIDw8IDEwKQorCXJldHVybiBUVV9UT19UU0Yo T1NfUkVHX1JFQUQoYWgsIEFSX1RJTUVSMCkpOworI3VuZGVmIFRVX1RPX1RTRgorfQorCisvKgog ICogSW5pdGlhbGl6ZSBhbGwgb2YgdGhlIGhhcmR3YXJlIHJlZ2lzdGVycyB1c2VkIHRvIHNlbmQg YmVhY29ucy4KICAqLwogdm9pZApJbmRleDogYXRoX2hhbC9hcjUyMTIvYXI1MjEyX2F0dGFjaC5j Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KLS0tIGF0aF9oYWwvYXI1MjEyL2FyNTIxMl9hdHRhY2guYwkocmV2aXNpb24g MjI1MzAyKQorKysgYXRoX2hhbC9hcjUyMTIvYXI1MjEyX2F0dGFjaC5jCSh3b3JraW5nIGNvcHkp CkBAIC0xNTEsNiArMTUxLDcgQEAKIAkuYWhfYmVhY29uSW5pdAkJCT0gYXI1MjEyQmVhY29uSW5p dCwKIAkuYWhfc2V0U3RhdGlvbkJlYWNvblRpbWVycwk9IGFyNTIxMlNldFN0YUJlYWNvblRpbWVy cywKIAkuYWhfcmVzZXRTdGF0aW9uQmVhY29uVGltZXJzCT0gYXI1MjEyUmVzZXRTdGFCZWFjb25U aW1lcnMsCisJLmFoX2dldE5leHRUQlRUCQkJPSBhcjUyMTJHZXROZXh0VEJUVCwKIAogCS8qIElu dGVycnVwdCBGdW5jdGlvbnMgKi8KIAkuYWhfaXNJbnRlcnJ1cHRQZW5kaW5nCQk9IGFyNTIxMklz SW50ZXJydXB0UGVuZGluZywKSW5kZXg6IGF0aF9oYWwvYXI1MjEyL2FyNTIxMi5oCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KLS0tIGF0aF9oYWwvYXI1MjEyL2FyNTIxMi5oCShyZXZpc2lvbiAyMjUzMDIpCisrKyBhdGhf aGFsL2FyNTIxMi9hcjUyMTIuaAkod29ya2luZyBjb3B5KQpAQCAtNDMwLDYgKzQzMCw3IEBACiBl eHRlcm4Jdm9pZCBhcjUyMTJSZXNldFN0YUJlYWNvblRpbWVycyhzdHJ1Y3QgYXRoX2hhbCAqYWgp OwogZXh0ZXJuCXZvaWQgYXI1MjEyU2V0U3RhQmVhY29uVGltZXJzKHN0cnVjdCBhdGhfaGFsICph aCwKIAkJY29uc3QgSEFMX0JFQUNPTl9TVEFURSAqKTsKK2V4dGVybgl1aW50NjRfdCBhcjUyMTJH ZXROZXh0VEJUVChzdHJ1Y3QgYXRoX2hhbCAqKTsKIAogZXh0ZXJuCUhBTF9CT09MIGFyNTIxMklz SW50ZXJydXB0UGVuZGluZyhzdHJ1Y3QgYXRoX2hhbCAqYWgpOwogZXh0ZXJuCUhBTF9CT09MIGFy NTIxMkdldFBlbmRpbmdJbnRlcnJ1cHRzKHN0cnVjdCBhdGhfaGFsICphaCwgSEFMX0lOVCAqKTsK SW5kZXg6IGF0aF9oYWwvYXI1MjEyL2FyNTIxMl9iZWFjb24uYwo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBhdGhf aGFsL2FyNTIxMi9hcjUyMTJfYmVhY29uLmMJKHJldmlzaW9uIDIyNTMwMikKKysrIGF0aF9oYWwv YXI1MjEyL2FyNTIxMl9iZWFjb24uYwkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsMTcgQEAK ICNpbmNsdWRlICJhcjUyMTIvYXI1MjEyZGVzYy5oIgogCiAvKgorICogUmV0dXJuIHRoZSBoYXJk d2FyZSBOZXh0VEJUVCBpbiBUU0YKKyAqLwordWludDY0X3QKK2FyNTIxMkdldE5leHRUQlRUKHN0 cnVjdCBhdGhfaGFsICphaCkKK3sKKyNkZWZpbmUgVFVfVE9fVFNGKF90dSkJKCgodWludDY0X3Qp KF90dSkpIDw8IDEwKQorCXJldHVybiBUVV9UT19UU0YoT1NfUkVHX1JFQUQoYWgsIEFSX1RJTUVS MCkpOworI3VuZGVmIFRVX1RPX1RTRgorfQorCisvKgogICogSW5pdGlhbGl6ZSBhbGwgb2YgdGhl IGhhcmR3YXJlIHJlZ2lzdGVycyB1c2VkIHRvCiAgKiBzZW5kIGJlYWNvbnMuICBOb3RlIHRoYXQg Zm9yIHN0YXRpb24gb3BlcmF0aW9uIHRoZQogICogZHJpdmVyIGNhbGxzIGFyNTIxMlNldFN0YUJl YWNvblRpbWVycyBpbnN0ZWFkLgpJbmRleDogYXRoX2hhbC9haC5oCj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGF0 aF9oYWwvYWguaAkocmV2aXNpb24gMjI1MzAyKQorKysgYXRoX2hhbC9haC5oCSh3b3JraW5nIGNv cHkpCkBAIC05OTYsNiArOTk2LDcgQEAKIAl2b2lkCSAgX19haGRlY2woKmFoX3NldFN0YXRpb25C ZWFjb25UaW1lcnMpKHN0cnVjdCBhdGhfaGFsKiwKIAkJCQljb25zdCBIQUxfQkVBQ09OX1NUQVRF ICopOwogCXZvaWQJICBfX2FoZGVjbCgqYWhfcmVzZXRTdGF0aW9uQmVhY29uVGltZXJzKShzdHJ1 Y3QgYXRoX2hhbCopOworCXVpbnQ2NF90ICBfX2FoZGVjbCgqYWhfZ2V0TmV4dFRCVFQpKHN0cnVj dCBhdGhfaGFsICopOwogCiAJLyogODAyLjExbiBGdW5jdGlvbnMgKi8KIAlIQUxfQk9PTCAgX19h aGRlY2woKmFoX2NoYWluVHhEZXNjKShzdHJ1Y3QgYXRoX2hhbCAqLApAQCAtMTEzOCw0ICsxMTM5 LDIwIEBACiBleHRlcm4gdWludDE2X3QgX19haGRlY2wgYXRoX2hhbF9jb21wdXRldHh0aW1lKHN0 cnVjdCBhdGhfaGFsICosCiAJCWNvbnN0IEhBTF9SQVRFX1RBQkxFICpyYXRlcywgdWludDMyX3Qg ZnJhbWVMZW4sCiAJCXVpbnQxNl90IHJhdGVpeCwgSEFMX0JPT0wgc2hvcnRQcmVhbWJsZSk7CisK Ky8qCisgKiBBZGp1c3QgdGhlIFRTRi4KKyAqLworZXh0ZXJuIHZvaWQgX19haGRlY2wgYXRoX2hh bF9hZGp1c3R0c2Yoc3RydWN0IGF0aF9oYWwgKmFoLCBpbnQzMl90IHRzZmRlbHRhKTsKKworLyoK KyAqIEVuYWJsZSBvciBkaXNhYmxlIENDQS4KKyAqLwordm9pZCBfX2FoZGVjbCBhdGhfaGFsX3Nl dGNjYShzdHJ1Y3QgYXRoX2hhbCAqYWgsIGludCBlbmEpOworCisvKgorICogR2V0IENDQSBzZXR0 aW5nLgorICovCitpbnQgX19haGRlY2wgYXRoX2hhbF9nZXRjY2Eoc3RydWN0IGF0aF9oYWwgKmFo KTsKKwogI2VuZGlmIC8qIF9BVEhfQUhfSF8gKi8KSW5kZXg6IGlmX2F0aC5jCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K LS0tIGlmX2F0aC5jCShyZXZpc2lvbiAyMjUzMDIpCisrKyBpZl9hdGguYwkod29ya2luZyBjb3B5 KQpAQCAtMjE0LDI0ICsyMTQsNiBAQAogc3RhdGljIHZvaWQJYXRoX3RkbWFfYmVhY29uX3NlbmQo c3RydWN0IGF0aF9zb2Z0YyAqc2MsCiAJCSAgICBzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXApOwog Ci1zdGF0aWMgX19pbmxpbmUgdm9pZAotYXRoX2hhbF9zZXRjY2Eoc3RydWN0IGF0aF9oYWwgKmFo LCBpbnQgZW5hKQotewotCS8qCi0JICogTkI6IGZpbGwgbWUgaW47IHRoaXMgaXMgbm90IHByb3Zp ZGVkIGJ5IGRlZmF1bHQgYmVjYXVzZSBkaXNhYmxpbmcKLQkgKiAgICAgQ0NBIGluIG1vc3QgbG9j YWxlcyB2aW9sYXRlcyByZWd1bGF0b3J5LgotCSAqLwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50 Ci1hdGhfaGFsX2dldGNjYShzdHJ1Y3QgYXRoX2hhbCAqYWgpCi17Ci0JdV9pbnQzMl90IGRpYWc7 Ci0JaWYgKGF0aF9oYWxfZ2V0Y2FwYWJpbGl0eShhaCwgSEFMX0NBUF9ESUFHLCAwLCAmZGlhZykg IT0gSEFMX09LKQotCQlyZXR1cm4gMTsKLQlyZXR1cm4gKChkaWFnICYgMHg1MDAwMDApID09IDAp OwotfQotCiAjZGVmaW5lCVRETUFfRVBfTVVMVElQTElFUgkoMTw8MTApIC8qIHBvdzIgdG8gb3B0 aW1pemUgb3V0ICogYW5kIC8gKi8KICNkZWZpbmUJVERNQV9MUEZfTEVOCQk2CiAjZGVmaW5lCVRE TUFfRFVNTVlfTUFSS0VSCTB4MTI3CkBAIC0zMjk0LDE0ICszMjc2LDQ0IEBACiAgKiBhIGZ1bGwg NjQtYml0IFRTRiB1c2luZyB0aGUgc3BlY2lmaWVkIFRTRi4KICAqLwogc3RhdGljIF9faW5saW5l IHVfaW50NjRfdAotYXRoX2V4dGVuZF90c2YodV9pbnQzMl90IHJzdGFtcCwgdV9pbnQ2NF90IHRz ZikKK2F0aF9leHRlbmRfdHNmX2FyNTIxMih1X2ludDMyX3QgcnN0YW1wLCB1X2ludDY0X3QgdHNm KQogewogCWlmICgodHNmICYgMHg3ZmZmKSA8IHJzdGFtcCkKIAkJdHNmIC09IDB4ODAwMDsKKwog CXJldHVybiAoKHRzZiAmfiAweDdmZmYpIHwgcnN0YW1wKTsKIH0KIAogLyoKKyAqIEV4dGVuZCAz Mi1iaXQgdGltZSBzdGFtcCBmcm9tIHJ4IGRlc2NyaXB0b3IgdG8KKyAqIGEgZnVsbCA2NC1iaXQg VFNGIHVzaW5nIHRoZSBzcGVjaWZpZWQgVFNGLgorICovCitzdGF0aWMgX19pbmxpbmUgdV9pbnQ2 NF90CithdGhfZXh0ZW5kX3RzZl9hcjU0MTYodV9pbnQzMl90IHJzdGFtcCwgdV9pbnQ2NF90IHRz ZikKK3sKKwl1X2ludDMyX3QgdHNmX2xvdyA9IHRzZiAmIDB4ZmZmZmZmZmY7CisJdV9pbnQ2NF90 IHRzZjY0ID0gKHRzZiAmIH4weGZmZmZmZmZmVUxMKSB8IHJzdGFtcDsKKworCWlmIChyc3RhbXAg PiB0c2ZfbG93ICYmIChyc3RhbXAgLSB0c2ZfbG93ID4gMHgxMDAwMDAwMCkpCisJCXRzZjY0IC09 IDB4MTAwMDAwMDAwVUxMOworCisJaWYgKHJzdGFtcCA8IHRzZl9sb3cgJiYgKHRzZl9sb3cgLSBy c3RhbXAgPiAweDEwMDAwMDAwKSkKKwkJdHNmNjQgKz0gMHgxMDAwMDAwMDBVTEw7CisKKwlyZXR1 cm4gdHNmNjQ7Cit9CisKK3N0YXRpYyBfX2lubGluZSB1X2ludDY0X3QKK2F0aF9leHRlbmRfdHNm KHN0cnVjdCBhdGhfc29mdGMgKnNjLHVfaW50MzJfdCByc3RhbXAsIHVfaW50NjRfdCB0c2YpCit7 CisJLyogQVI1NDE2ICovCisJaWYgKHNjLT5zY19haC0+YWhfbWFnaWMgPT0gMHgyMDA2NTQxNikK KwkJcmV0dXJuIGF0aF9leHRlbmRfdHNmX2FyNTQxNihyc3RhbXAsIHRzZik7CisJZWxzZQorCQly ZXR1cm4gYXRoX2V4dGVuZF90c2ZfYXI1MjEyKHJzdGFtcCwgdHNmKTsKK30KKworLyoKICAqIElu dGVyY2VwdCBtYW5hZ2VtZW50IGZyYW1lcyB0byBjb2xsZWN0IGJlYWNvbiByc3NpIGRhdGEKICAq IGFuZCB0byBkbyBpYnNzIG1lcmdlcy4KICAqLwpAQCAtMzMzNCw3ICszMzQ2LDcgQEAKIAkJaWYg KHZhcC0+aXZfb3Btb2RlID09IElFRUU4MDIxMV9NX0lCU1MgJiYKIAkJICAgIHZhcC0+aXZfc3Rh dGUgPT0gSUVFRTgwMjExX1NfUlVOKSB7CiAJCQl1aW50MzJfdCByc3RhbXAgPSBzYy0+c2NfbGFz dHJzLT5yc190c3RhbXA7Ci0JCQl1aW50NjRfdCB0c2YgPSBhdGhfZXh0ZW5kX3RzZihyc3RhbXAs CisJCQl1aW50NjRfdCB0c2YgPSBhdGhfZXh0ZW5kX3RzZihzYywgcnN0YW1wLAogCQkJCWF0aF9o YWxfZ2V0dHNmNjQoc2MtPnNjX2FoKSk7CiAJCQkvKgogCQkJICogSGFuZGxlIGlic3MgbWVyZ2Ug YXMgbmVlZGVkOyBjaGVjayB0aGUgdHNmIG9uIHRoZQpAQCAtMzQwNiw3ICszNDE4LDcgQEAKIAkJ CXNjLT5zY19yeF90aC53cl9mbGFncyB8PSBJRUVFODAyMTFfUkFESU9UQVBfRl9TSE9SVEdJOwog CX0KICNlbmRpZgotCXNjLT5zY19yeF90aC53cl90c2YgPSBodG9sZTY0KGF0aF9leHRlbmRfdHNm KHJzLT5yc190c3RhbXAsIHRzZikpOworCXNjLT5zY19yeF90aC53cl90c2YgPSBodG9sZTY0KGF0 aF9leHRlbmRfdHNmKHNjLCBycy0+cnNfdHN0YW1wLCB0c2YpKTsKIAlpZiAocnMtPnJzX3N0YXR1 cyAmIEhBTF9SWEVSUl9DUkMpCiAJCXNjLT5zY19yeF90aC53cl9mbGFncyB8PSBJRUVFODAyMTFf UkFESU9UQVBfRl9CQURGQ1M7CiAJLyogWFhYIHByb3BhZ2F0ZSBvdGhlciBlcnJvciBmbGFncyBm cm9tIGRlc2NyaXB0b3IgKi8KQEAgLTU0NjAsMjAgKzU0NzIsNiBAQAogfQogCiAjaWZkZWYgSUVF RTgwMjExX1NVUFBPUlRfVERNQQotc3RhdGljIF9faW5saW5lIHVpbnQzMl90Ci1hdGhfaGFsX2dl dG5leHR0YnR0KHN0cnVjdCBhdGhfaGFsICphaCkKLXsKLSNkZWZpbmUJQVJfVElNRVIwCTB4ODAy OAotCXJldHVybiBPU19SRUdfUkVBRChhaCwgQVJfVElNRVIwKTsKLX0KLQotc3RhdGljIF9faW5s aW5lIHZvaWQKLWF0aF9oYWxfYWRqdXN0dHNmKHN0cnVjdCBhdGhfaGFsICphaCwgaW50MzJfdCB0 c2ZkZWx0YSkKLXsKLQkvKiBYWFggaGFuZGxlIHdyYXAvb3ZlcmZsb3cgKi8KLQlPU19SRUdfV1JJ VEUoYWgsIEFSX1RTRl9MMzIsIE9TX1JFR19SRUFEKGFoLCBBUl9UU0ZfTDMyKSArIHRzZmRlbHRh KTsKLX0KLQogc3RhdGljIHZvaWQKIGF0aF90ZG1hX3NldHRpbWVycyhzdHJ1Y3QgYXRoX3NvZnRj ICpzYywgdV9pbnQzMl90IG5leHR0YnR0LCB1X2ludDMyX3QgYmludHZhbCkKIHsKQEAgLTU2Mjks OCArNTYyNyw4IEBACiAJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBpYy0+aWNfaWZwLT5pZl9zb2Z0 YzsKIAlzdHJ1Y3QgYXRoX2hhbCAqYWggPSBzYy0+c2NfYWg7CiAJY29uc3QgSEFMX1JBVEVfVEFC TEUgKnJ0ID0gc2MtPnNjX2N1cnJhdGVzOwotCXVfaW50NjRfdCB0c2YsIHJzdGFtcCwgbmV4dHNs b3Q7Ci0JdV9pbnQzMl90IHR4dGltZSwgbmV4dHNsb3R0dSwgdGltZXIwOworCXVfaW50NjRfdCB0 c2YsIHJzdGFtcCwgbmV4dHNsb3QsIG5leHR0YnR0OworCXVfaW50MzJfdCB0eHRpbWUsIG5leHRz bG90dHU7CiAJaW50MzJfdCB0dWRlbHRhLCB0c2ZkZWx0YTsKIAljb25zdCBzdHJ1Y3QgYXRoX3J4 X3N0YXR1cyAqcnM7CiAJaW50IHJpeDsKQEAgLTU2NjEsNyArNTY1OSw3IEBACiAJLyogZXh0ZW5k IHJ4IHRpbWVzdGFtcCB0byA2NCBiaXRzICovCiAJcnMgPSBzYy0+c2NfbGFzdHJzOwogCXRzZiA9 IGF0aF9oYWxfZ2V0dHNmNjQoYWgpOwotCXJzdGFtcCA9IGF0aF9leHRlbmRfdHNmKHJzLT5yc190 c3RhbXAsIHRzZik7CisJcnN0YW1wID0gYXRoX2V4dGVuZF90c2Yoc2MsIHJzLT5yc190c3RhbXAs IHRzZik7CiAJLyoKIAkgKiBUaGUgcnggdGltZXN0YW1wIGlzIHNldCBieSB0aGUgaGFyZHdhcmUg b24gY29tcGxldGluZwogCSAqIHJlY2VwdGlvbiAoYXQgdGhlIHBvaW50IHdoZXJlIHRoZSByeCBk ZXNjcmlwdG9yIGlzIERNQSdkCkBAIC01Njc3LDE1ICs1Njc1LDE1IEBACiAJbmV4dHNsb3R0dSA9 IFRTRl9UT19UVShuZXh0c2xvdD4+MzIsIG5leHRzbG90KSAmIEhBTF9CRUFDT05fUEVSSU9EOwog CiAJLyoKLQkgKiBUSU1FUjAgaXMgdGhlIGgvdydzIGlkZWEgb2YgTmV4dFRCVFQgKGluIFRVJ3Mp LiAgQ29udmVydAotCSAqIHRvIHVzZWNzIGFuZCBjYWxjdWxhdGUgdGhlIGRpZmZlcmVuY2UgYmV0 d2VlbiB3aGF0IHRoZQorCSAqIFJldHJpZXZlIHRoZSBoYXJkd2FyZSBOZXh0VEJUVCBpbiB1c2Vj cworCSAqIGFuZCBjYWxjdWxhdGUgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB3aGF0IHRoZQogCSAq IG90aGVyIHN0YXRpb24gdGhpbmtzIGFuZCB3aGF0IHdlIGhhdmUgcHJvZ3JhbW1lZC4gIFRoaXMK IAkgKiBsZXRzIHVzIGZpZ3VyZSBob3cgdG8gYWRqdXN0IG91ciB0aW1lcnMgdG8gbWF0Y2guICBU aGUKIAkgKiBhZGp1c3RtZW50cyBhcmUgZG9uZSBieSBwdWxsaW5nIHRoZSBUU0YgZm9yd2FyZCBh bmQgcG9zc2libHkKIAkgKiByZXdyaXRpbmcgdGhlIGJlYWNvbiB0aW1lcnMuCiAJICovCi0JdGlt ZXIwID0gYXRoX2hhbF9nZXRuZXh0dGJ0dChhaCk7Ci0JdHNmZGVsdGEgPSAoaW50MzJfdCkoKG5l eHRzbG90ICUgVFVfVE9fVFNGKEhBTF9CRUFDT05fUEVSSU9EKzEpKSAtIFRVX1RPX1RTRih0aW1l cjApKTsKKwluZXh0dGJ0dCA9IGF0aF9oYWxfZ2V0bmV4dHRidHQoYWgpOworCXRzZmRlbHRhID0g KGludDMyX3QpKChuZXh0c2xvdCAlIFRVX1RPX1RTRihIQUxfQkVBQ09OX1BFUklPRCArIDEpKSAt IG5leHR0YnR0KTsKIAogCURQUklOVEYoc2MsIEFUSF9ERUJVR19URE1BX1RJTUVSLAogCSAgICAi dHNmZGVsdGEgJWQgYXZnICslZC8tJWRcbiIsIHRzZmRlbHRhLApAQCAtNTcwNSw3ICs1NzAzLDcg QEAKIAkJVERNQV9TQU1QTEUoc2MtPnNjX2F2Z3RzZmRlbHRhcCwgMCk7CiAJCVRETUFfU0FNUExF KHNjLT5zY19hdmd0c2ZkZWx0YW0sIDApOwogCX0KLQl0dWRlbHRhID0gbmV4dHNsb3R0dSAtIHRp bWVyMDsKKwl0dWRlbHRhID0gbmV4dHNsb3R0dSAtIFRTRl9UT19UVShuZXh0dGJ0dCA+PiAzMiwg bmV4dHRidHQpOwogCiAJLyoKIAkgKiBDb3B5IHNlbmRlcidzIHRpbWV0c3RhbXAgaW50byB0ZG1h IGllIHNvIHRoZXkgY2FuCkBAIC01NzI0LDEwICs1NzIyLDkgQEAKIAkJJm5pLT5uaV90c3RhbXAu ZGF0YSwgOCk7CiAjaWYgMAogCURQUklOVEYoc2MsIEFUSF9ERUJVR19URE1BX1RJTUVSLAotCSAg ICAidHNmICVsbHUgbmV4dHNsb3QgJWxsdSAoJWQsICVkKSBuZXh0c2xvdHR1ICV1IHRpbWVyMCAl dSAoJWQpXG4iLAorCSAgICAidHNmICVsbHUgbmV4dHNsb3QgJWxsdSAoJWQsICVkKSBuZXh0c2xv dHR1ICV1IG5leHR0YnR0ICVsbHUgKCVkKVxuIiwKIAkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykg dHNmLCAodW5zaWduZWQgbG9uZyBsb25nKSBuZXh0c2xvdCwKLQkgICAgKGludCkobmV4dHNsb3Qg LSB0c2YpLCB0c2ZkZWx0YSwKLQkgICAgbmV4dHNsb3R0dSwgdGltZXIwLCB0dWRlbHRhKTsKKwkg ICAgKGludCkobmV4dHNsb3QgLSB0c2YpLCB0c2ZkZWx0YSwgbmV4dHNsb3R0dSwgbmV4dHRidHQs IHR1ZGVsdGEpOwogI2VuZGlmCiAJLyoKIAkgKiBBZGp1c3QgdGhlIGJlYWNvbiB0aW1lcnMgb25s eSB3aGVuIHB1bGxpbmcgdGhlbSBmb3J3YXJkCg== --000e0cd3065c375d3104abde4185--