From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id E5D83C10F14 for ; Tue, 15 Oct 2019 17:19:06 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id B69BD20854 for ; Tue, 15 Oct 2019 17:19:06 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="IhyczgNU" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730806AbfJORTF (ORCPT ); Tue, 15 Oct 2019 13:19:05 -0400 Received: from us-smtp-2.mimecast.com ([207.211.31.81]:52838 "EHLO us-smtp-delivery-1.mimecast.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1730579AbfJORTF (ORCPT ); Tue, 15 Oct 2019 13:19:05 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1571159943; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=2qf8HGaC9XYB4yCBmVPA2/e9VNoQoe0I/AoOfC2m9mE=; b=IhyczgNUMdFCijTG2/3feMwdNG6tVuWkf3WNE8/F/bZLRJ/yUokHTGv8BaNX9led1481al FQm/duG+OeuYAUWpgeUegLJsmfMhVpbWJa/6501zIGOcTsXG7E/nOsmr2aUQEQB877b4JW /nqM5W2DjFhVEHsaumTrp5Ev5p6lmmY= Received: from mail-lj1-f200.google.com (mail-lj1-f200.google.com [209.85.208.200]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-265-LHnuATfuMC2lXYZXGnCTtg-1; Tue, 15 Oct 2019 13:19:01 -0400 Received: by mail-lj1-f200.google.com with SMTP id v24so4037058ljh.23 for ; Tue, 15 Oct 2019 10:19:01 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:from:to:cc:date:message-id:in-reply-to :references:user-agent:mime-version:content-transfer-encoding; bh=Xz0DFDu36TCFLND3BKlsyYv/TX/+u1NMntE7P/QH1z8=; b=tQ3/TXNwgq/BbAmGNi843CPAabe0Z7Ia0NDSXPd1waJzXmvFurIo3N32CllvfzPCAG +mdbQQw10DtfaRPxaSiYZTUaMZFJxyhW2A8cBxH+a9fNDlsNJyu/xOvv9dwN4+qq3tCN rIC21wouIxLhjKbhYbPtwg1hcvL0NTSkU9MLeZT1OAUO+2RGkK6sHJqq1neuFjCRyZoE JX4i1HQXrT67OZYJT2NF8a+E9B0tg1W/bbEd+bkFjVoqoQW2lahgZ/HbWFocpXmZ6uou /3mn7tDNOmsX0T/e4ZMTMNwVTXM7XNH3kj8diS2U1zEYHQ9ARAg7TypJddgk2AHKJg/v Ynwg== X-Gm-Message-State: APjAAAXEolMIWO8v4JIEQRMqvaMi1VTuobY4eI0VxRs3vD2l+rpLSoY0 Cq5wB67Hdg6crFOSeCXr5jZg1dd4z3g8RAYgdd4a/M7h6ibPE1AuCJWHe9ccYq96J0mUEDMXznE XFQo85KoFbHKmYYvGUdtXWvvhTOY= X-Received: by 2002:a19:dc14:: with SMTP id t20mr3205381lfg.21.1571159940384; Tue, 15 Oct 2019 10:19:00 -0700 (PDT) X-Google-Smtp-Source: APXvYqzjLO6aCJGIyJgLbMmJuwRaVWDfTwy3zvUgeePNCzfGgSDv/H65WMQjzv2MbphmgGo+wiStTQ== X-Received: by 2002:a19:dc14:: with SMTP id t20mr3205368lfg.21.1571159940122; Tue, 15 Oct 2019 10:19:00 -0700 (PDT) Received: from alrua-x1.borgediget.toke.dk (borgediget.toke.dk. [85.204.121.218]) by smtp.gmail.com with ESMTPSA id z72sm5664042ljb.98.2019.10.15.10.18.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 15 Oct 2019 10:18:59 -0700 (PDT) Received: by alrua-x1.borgediget.toke.dk (Postfix, from userid 1000) id B680A1803A9; Tue, 15 Oct 2019 19:18:58 +0200 (CEST) Subject: [PATCH v2 1/4] mac80211: Rearrange ieee80211_tx_info to make room for tx_time_est From: =?utf-8?q?Toke_H=C3=B8iland-J=C3=B8rgensen?= To: Johannes Berg Cc: linux-wireless@vger.kernel.org, make-wifi-fast@lists.bufferbloat.net, ath10k@lists.infradead.org, John Crispin , Lorenzo Bianconi , Felix Fietkau , Kan Yan , Rajkumar Manoharan , Kevin Hayes Date: Tue, 15 Oct 2019 19:18:58 +0200 Message-ID: <157115993866.2500430.13989567853855880476.stgit@toke.dk> In-Reply-To: <157115993755.2500430.12214017471129215800.stgit@toke.dk> References: <157115993755.2500430.12214017471129215800.stgit@toke.dk> User-Agent: StGit/0.20 MIME-Version: 1.0 X-MC-Unique: LHnuATfuMC2lXYZXGnCTtg-1 X-Mimecast-Spam-Score: 0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org From: Toke H=C3=B8iland-J=C3=B8rgensen To implement airtime queue limiting, we need to keep a running account of the estimated airtime of all skbs queued into the device. Do to this correctly, we need to store the airtime estimate into the skb so we can decrease the outstanding balance when the skb is freed. This means that the time estimate must be stored somewhere that will survive for the lifetime of the skb. Fortunately, we had a couple of bytes left in the 'status' field in the ieee80211_tx_info; and since we only plan to calculate the airtime estimate after the skb is dequeued from the FQ structure, on the control side we can share the space with the codel enqueue time. And by rearranging the order of elements it is possible to have the position of the new tx_time_est line up between the control and status structs, so the value will survive from when mac80211 hands the packet to the driver, and until the driver either frees it, or hands it back through TX status. Signed-off-by: Toke H=C3=B8iland-J=C3=B8rgensen --- include/net/mac80211.h | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/include/net/mac80211.h b/include/net/mac80211.h index d69081c38788..49f8ea0af5f8 100644 --- a/include/net/mac80211.h +++ b/include/net/mac80211.h @@ -975,20 +975,23 @@ ieee80211_rate_get_vht_nss(const struct ieee80211_tx_= rate *rate) * @control.short_preamble: use short preamble (CCK only) * @control.skip_table: skip externally configured rate table * @control.jiffies: timestamp for expiry on powersave clients + * @control.enqueue_time: enqueue time (for iTXQs) + * @control.tx_time_est: estimated airtime usage (shared with @status) + * @control.reserved: unused field to ensure alignment of data structure + * @control.flags: control flags, see &enum mac80211_tx_control_flags * @control.vif: virtual interface (may be NULL) * @control.hw_key: key to encrypt with (may be NULL) - * @control.flags: control flags, see &enum mac80211_tx_control_flags - * @control.enqueue_time: enqueue time (for iTXQs) * @driver_rates: alias to @control.rates to reserve space * @pad: padding * @rate_driver_data: driver use area if driver needs @control.rates * @status: union part for status data * @status.rates: attempted rates * @status.ack_signal: ACK signal + * @status.tx_time_est: estimated airtime of skb (shared with @control) + * @status.tx_time: actual airtime consumed for transmission * @status.ampdu_ack_len: AMPDU ack length * @status.ampdu_len: AMPDU length * @status.antenna: (legacy, kept only for iwlegacy) - * @status.tx_time: airtime consumed for transmission * @status.is_valid_ack_signal: ACK signal is valid * @status.status_driver_data: driver use area * @ack: union part for pure ACK data @@ -1026,11 +1029,17 @@ struct ieee80211_tx_info { =09=09=09=09/* only needed before rate control */ =09=09=09=09unsigned long jiffies; =09=09=09}; +=09=09=09union { +=09=09=09=09codel_time_t enqueue_time; +=09=09=09=09struct { +=09=09=09=09=09u16 tx_time_est; /* shared with status */ +=09=09=09=09=09u16 reserved; /* padding for alignment */ +=09=09=09=09}; +=09=09=09}; +=09=09=09u32 flags; =09=09=09/* NB: vif can be NULL for injected frames */ =09=09=09struct ieee80211_vif *vif; =09=09=09struct ieee80211_key_conf *hw_key; -=09=09=09u32 flags; -=09=09=09codel_time_t enqueue_time; =09=09} control; =09=09struct { =09=09=09u64 cookie; @@ -1038,12 +1047,13 @@ struct ieee80211_tx_info { =09=09struct { =09=09=09struct ieee80211_tx_rate rates[IEEE80211_TX_MAX_RATES]; =09=09=09s32 ack_signal; +=09=09=09u16 tx_time_est; /* shared with control */ +=09=09=09u16 tx_time; =09=09=09u8 ampdu_ack_len; =09=09=09u8 ampdu_len; =09=09=09u8 antenna; -=09=09=09u16 tx_time; =09=09=09bool is_valid_ack_signal; -=09=09=09void *status_driver_data[19 / sizeof(void *)]; +=09=09=09void *status_driver_data[16 / sizeof(void *)]; =09=09} status; =09=09struct { =09=09=09struct ieee80211_tx_rate driver_rates[ @@ -1126,6 +1136,8 @@ ieee80211_tx_info_clear_status(struct ieee80211_tx_in= fo *info) =09=09 offsetof(struct ieee80211_tx_info, control.rates)); =09BUILD_BUG_ON(offsetof(struct ieee80211_tx_info, status.rates) !=3D =09=09 offsetof(struct ieee80211_tx_info, driver_rates)); +=09BUILD_BUG_ON(offsetof(struct ieee80211_tx_info, control.tx_time_est) != =3D +=09=09 offsetof(struct ieee80211_tx_info, status.tx_time_est)); =09BUILD_BUG_ON(offsetof(struct ieee80211_tx_info, status.rates) !=3D 8); =09/* clear the rate counts */ =09for (i =3D 0; i < IEEE80211_TX_MAX_RATES; i++) From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from us-smtp-delivery-1.mimecast.com ([205.139.110.120] helo=us-smtp-1.mimecast.com) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1iKQTW-0006yZ-Sk for ath10k@lists.infradead.org; Tue, 15 Oct 2019 17:19:12 +0000 Received: by mail-lj1-f197.google.com with SMTP id y28so4049781ljn.2 for ; Tue, 15 Oct 2019 10:19:02 -0700 (PDT) Subject: [PATCH v2 1/4] mac80211: Rearrange ieee80211_tx_info to make room for tx_time_est From: =?utf-8?q?Toke_H=C3=B8iland-J=C3=B8rgensen?= Date: Tue, 15 Oct 2019 19:18:58 +0200 Message-ID: <157115993866.2500430.13989567853855880476.stgit@toke.dk> In-Reply-To: <157115993755.2500430.12214017471129215800.stgit@toke.dk> References: <157115993755.2500430.12214017471129215800.stgit@toke.dk> 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: Johannes Berg Cc: Kan Yan , Rajkumar Manoharan , Kevin Hayes , make-wifi-fast@lists.bufferbloat.net, linux-wireless@vger.kernel.org, ath10k@lists.infradead.org, John Crispin , Lorenzo Bianconi , Felix Fietkau RnJvbTogVG9rZSBIw7hpbGFuZC1Kw7hyZ2Vuc2VuIDx0b2tlQHJlZGhhdC5jb20+CgpUbyBpbXBs ZW1lbnQgYWlydGltZSBxdWV1ZSBsaW1pdGluZywgd2UgbmVlZCB0byBrZWVwIGEgcnVubmluZyBh Y2NvdW50IG9mCnRoZSBlc3RpbWF0ZWQgYWlydGltZSBvZiBhbGwgc2ticyBxdWV1ZWQgaW50byB0 aGUgZGV2aWNlLiBEbyB0byB0aGlzCmNvcnJlY3RseSwgd2UgbmVlZCB0byBzdG9yZSB0aGUgYWly dGltZSBlc3RpbWF0ZSBpbnRvIHRoZSBza2Igc28gd2UgY2FuCmRlY3JlYXNlIHRoZSBvdXRzdGFu ZGluZyBiYWxhbmNlIHdoZW4gdGhlIHNrYiBpcyBmcmVlZC4gVGhpcyBtZWFucyB0aGF0IHRoZQp0 aW1lIGVzdGltYXRlIG11c3QgYmUgc3RvcmVkIHNvbWV3aGVyZSB0aGF0IHdpbGwgc3Vydml2ZSBm b3IgdGhlIGxpZmV0aW1lCm9mIHRoZSBza2IuCgpGb3J0dW5hdGVseSwgd2UgaGFkIGEgY291cGxl IG9mIGJ5dGVzIGxlZnQgaW4gdGhlICdzdGF0dXMnIGZpZWxkIGluIHRoZQppZWVlODAyMTFfdHhf aW5mbzsgYW5kIHNpbmNlIHdlIG9ubHkgcGxhbiB0byBjYWxjdWxhdGUgdGhlIGFpcnRpbWUgZXN0 aW1hdGUKYWZ0ZXIgdGhlIHNrYiBpcyBkZXF1ZXVlZCBmcm9tIHRoZSBGUSBzdHJ1Y3R1cmUsIG9u IHRoZSBjb250cm9sIHNpZGUgd2UgY2FuCnNoYXJlIHRoZSBzcGFjZSB3aXRoIHRoZSBjb2RlbCBl bnF1ZXVlIHRpbWUuIEFuZCBieSByZWFycmFuZ2luZyB0aGUgb3JkZXIKb2YgZWxlbWVudHMgaXQg aXMgcG9zc2libGUgdG8gaGF2ZSB0aGUgcG9zaXRpb24gb2YgdGhlIG5ldyB0eF90aW1lX2VzdCBs aW5lCnVwIGJldHdlZW4gdGhlIGNvbnRyb2wgYW5kIHN0YXR1cyBzdHJ1Y3RzLCBzbyB0aGUgdmFs dWUgd2lsbCBzdXJ2aXZlIGZyb20Kd2hlbiBtYWM4MDIxMSBoYW5kcyB0aGUgcGFja2V0IHRvIHRo ZSBkcml2ZXIsIGFuZCB1bnRpbCB0aGUgZHJpdmVyIGVpdGhlcgpmcmVlcyBpdCwgb3IgaGFuZHMg aXQgYmFjayB0aHJvdWdoIFRYIHN0YXR1cy4KClNpZ25lZC1vZmYtYnk6IFRva2UgSMO4aWxhbmQt SsO4cmdlbnNlbiA8dG9rZUByZWRoYXQuY29tPgotLS0KIGluY2x1ZGUvbmV0L21hYzgwMjExLmgg fCAgIDI2ICsrKysrKysrKysrKysrKysrKystLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMTkgaW5z ZXJ0aW9ucygrKSwgNyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9tYWM4 MDIxMS5oIGIvaW5jbHVkZS9uZXQvbWFjODAyMTEuaAppbmRleCBkNjkwODFjMzg3ODguLjQ5Zjhl YTBhZjVmOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbWFjODAyMTEuaAorKysgYi9pbmNsdWRl L25ldC9tYWM4MDIxMS5oCkBAIC05NzUsMjAgKzk3NSwyMyBAQCBpZWVlODAyMTFfcmF0ZV9nZXRf dmh0X25zcyhjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4X3JhdGUgKnJhdGUpCiAgKiBAY29udHJv bC5zaG9ydF9wcmVhbWJsZTogdXNlIHNob3J0IHByZWFtYmxlIChDQ0sgb25seSkKICAqIEBjb250 cm9sLnNraXBfdGFibGU6IHNraXAgZXh0ZXJuYWxseSBjb25maWd1cmVkIHJhdGUgdGFibGUKICAq IEBjb250cm9sLmppZmZpZXM6IHRpbWVzdGFtcCBmb3IgZXhwaXJ5IG9uIHBvd2Vyc2F2ZSBjbGll bnRzCisgKiBAY29udHJvbC5lbnF1ZXVlX3RpbWU6IGVucXVldWUgdGltZSAoZm9yIGlUWFFzKQor ICogQGNvbnRyb2wudHhfdGltZV9lc3Q6IGVzdGltYXRlZCBhaXJ0aW1lIHVzYWdlIChzaGFyZWQg d2l0aCBAc3RhdHVzKQorICogQGNvbnRyb2wucmVzZXJ2ZWQ6IHVudXNlZCBmaWVsZCB0byBlbnN1 cmUgYWxpZ25tZW50IG9mIGRhdGEgc3RydWN0dXJlCisgKiBAY29udHJvbC5mbGFnczogY29udHJv bCBmbGFncywgc2VlICZlbnVtIG1hYzgwMjExX3R4X2NvbnRyb2xfZmxhZ3MKICAqIEBjb250cm9s LnZpZjogdmlydHVhbCBpbnRlcmZhY2UgKG1heSBiZSBOVUxMKQogICogQGNvbnRyb2wuaHdfa2V5 OiBrZXkgdG8gZW5jcnlwdCB3aXRoIChtYXkgYmUgTlVMTCkKLSAqIEBjb250cm9sLmZsYWdzOiBj b250cm9sIGZsYWdzLCBzZWUgJmVudW0gbWFjODAyMTFfdHhfY29udHJvbF9mbGFncwotICogQGNv bnRyb2wuZW5xdWV1ZV90aW1lOiBlbnF1ZXVlIHRpbWUgKGZvciBpVFhRcykKICAqIEBkcml2ZXJf cmF0ZXM6IGFsaWFzIHRvIEBjb250cm9sLnJhdGVzIHRvIHJlc2VydmUgc3BhY2UKICAqIEBwYWQ6 IHBhZGRpbmcKICAqIEByYXRlX2RyaXZlcl9kYXRhOiBkcml2ZXIgdXNlIGFyZWEgaWYgZHJpdmVy IG5lZWRzIEBjb250cm9sLnJhdGVzCiAgKiBAc3RhdHVzOiB1bmlvbiBwYXJ0IGZvciBzdGF0dXMg ZGF0YQogICogQHN0YXR1cy5yYXRlczogYXR0ZW1wdGVkIHJhdGVzCiAgKiBAc3RhdHVzLmFja19z aWduYWw6IEFDSyBzaWduYWwKKyAqIEBzdGF0dXMudHhfdGltZV9lc3Q6IGVzdGltYXRlZCBhaXJ0 aW1lIG9mIHNrYiAoc2hhcmVkIHdpdGggQGNvbnRyb2wpCisgKiBAc3RhdHVzLnR4X3RpbWU6IGFj dHVhbCBhaXJ0aW1lIGNvbnN1bWVkIGZvciB0cmFuc21pc3Npb24KICAqIEBzdGF0dXMuYW1wZHVf YWNrX2xlbjogQU1QRFUgYWNrIGxlbmd0aAogICogQHN0YXR1cy5hbXBkdV9sZW46IEFNUERVIGxl bmd0aAogICogQHN0YXR1cy5hbnRlbm5hOiAobGVnYWN5LCBrZXB0IG9ubHkgZm9yIGl3bGVnYWN5 KQotICogQHN0YXR1cy50eF90aW1lOiBhaXJ0aW1lIGNvbnN1bWVkIGZvciB0cmFuc21pc3Npb24K ICAqIEBzdGF0dXMuaXNfdmFsaWRfYWNrX3NpZ25hbDogQUNLIHNpZ25hbCBpcyB2YWxpZAogICog QHN0YXR1cy5zdGF0dXNfZHJpdmVyX2RhdGE6IGRyaXZlciB1c2UgYXJlYQogICogQGFjazogdW5p b24gcGFydCBmb3IgcHVyZSBBQ0sgZGF0YQpAQCAtMTAyNiwxMSArMTAyOSwxNyBAQCBzdHJ1Y3Qg aWVlZTgwMjExX3R4X2luZm8gewogCQkJCS8qIG9ubHkgbmVlZGVkIGJlZm9yZSByYXRlIGNvbnRy b2wgKi8KIAkJCQl1bnNpZ25lZCBsb25nIGppZmZpZXM7CiAJCQl9OworCQkJdW5pb24geworCQkJ CWNvZGVsX3RpbWVfdCBlbnF1ZXVlX3RpbWU7CisJCQkJc3RydWN0IHsKKwkJCQkJdTE2IHR4X3Rp bWVfZXN0OyAvKiBzaGFyZWQgd2l0aCBzdGF0dXMgKi8KKwkJCQkJdTE2IHJlc2VydmVkOyAvKiBw YWRkaW5nIGZvciBhbGlnbm1lbnQgKi8KKwkJCQl9OworCQkJfTsKKwkJCXUzMiBmbGFnczsKIAkJ CS8qIE5COiB2aWYgY2FuIGJlIE5VTEwgZm9yIGluamVjdGVkIGZyYW1lcyAqLwogCQkJc3RydWN0 IGllZWU4MDIxMV92aWYgKnZpZjsKIAkJCXN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmh3X2tl eTsKLQkJCXUzMiBmbGFnczsKLQkJCWNvZGVsX3RpbWVfdCBlbnF1ZXVlX3RpbWU7CiAJCX0gY29u dHJvbDsKIAkJc3RydWN0IHsKIAkJCXU2NCBjb29raWU7CkBAIC0xMDM4LDEyICsxMDQ3LDEzIEBA IHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyB7CiAJCXN0cnVjdCB7CiAJCQlzdHJ1Y3QgaWVlZTgw MjExX3R4X3JhdGUgcmF0ZXNbSUVFRTgwMjExX1RYX01BWF9SQVRFU107CiAJCQlzMzIgYWNrX3Np Z25hbDsKKwkJCXUxNiB0eF90aW1lX2VzdDsgLyogc2hhcmVkIHdpdGggY29udHJvbCAqLworCQkJ dTE2IHR4X3RpbWU7CiAJCQl1OCBhbXBkdV9hY2tfbGVuOwogCQkJdTggYW1wZHVfbGVuOwogCQkJ dTggYW50ZW5uYTsKLQkJCXUxNiB0eF90aW1lOwogCQkJYm9vbCBpc192YWxpZF9hY2tfc2lnbmFs OwotCQkJdm9pZCAqc3RhdHVzX2RyaXZlcl9kYXRhWzE5IC8gc2l6ZW9mKHZvaWQgKildOworCQkJ dm9pZCAqc3RhdHVzX2RyaXZlcl9kYXRhWzE2IC8gc2l6ZW9mKHZvaWQgKildOwogCQl9IHN0YXR1 czsKIAkJc3RydWN0IHsKIAkJCXN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZSBkcml2ZXJfcmF0ZXNb CkBAIC0xMTI2LDYgKzExMzYsOCBAQCBpZWVlODAyMTFfdHhfaW5mb19jbGVhcl9zdGF0dXMoc3Ry dWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvKQogCQkgICAgIG9mZnNldG9mKHN0cnVjdCBpZWVl ODAyMTFfdHhfaW5mbywgY29udHJvbC5yYXRlcykpOwogCUJVSUxEX0JVR19PTihvZmZzZXRvZihz dHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8sIHN0YXR1cy5yYXRlcykgIT0KIAkJICAgICBvZmZzZXRv ZihzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8sIGRyaXZlcl9yYXRlcykpOworCUJVSUxEX0JVR19P TihvZmZzZXRvZihzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8sIGNvbnRyb2wudHhfdGltZV9lc3Qp ICE9CisJCSAgICAgb2Zmc2V0b2Yoc3RydWN0IGllZWU4MDIxMV90eF9pbmZvLCBzdGF0dXMudHhf dGltZV9lc3QpKTsKIAlCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IGllZWU4MDIxMV90eF9p bmZvLCBzdGF0dXMucmF0ZXMpICE9IDgpOwogCS8qIGNsZWFyIHRoZSByYXRlIGNvdW50cyAqLwog CWZvciAoaSA9IDA7IGkgPCBJRUVFODAyMTFfVFhfTUFYX1JBVEVTOyBpKyspCgoKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KYXRoMTBrIG1haWxpbmcgbGlz dAphdGgxMGtAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2F0aDEwawo=