From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from mail.toke.dk ([2001:470:dc45:1000::1]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1gMz9u-0007af-WF for ath10k@lists.infradead.org; Wed, 14 Nov 2018 17:41:01 +0000 From: Toke =?utf-8?Q?H=C3=B8iland-J=C3=B8rgensen?= Subject: Re: [PATCH v3 3/6] mac80211: Add airtime accounting and scheduling to TXQs In-Reply-To: References: <1542063113-22438-1-git-send-email-rmanohar@codeaurora.org> <1542063113-22438-4-git-send-email-rmanohar@codeaurora.org> Date: Wed, 14 Nov 2018 09:40:38 -0800 Message-ID: <871s7nv9pl.fsf@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: Felix Fietkau , Rajkumar Manoharan , linux-wireless@vger.kernel.org, ath10k@lists.infradead.org Cc: make-wifi-fast@lists.bufferbloat.net RmVsaXggRmlldGthdSA8bmJkQG5iZC5uYW1lPiB3cml0ZXM6Cgo+IE9uIDIwMTgtMTEtMTIgMjM6 NTEsIFJhamt1bWFyIE1hbm9oYXJhbiB3cm90ZToKPj4gRnJvbTogVG9rZSBIw7hpbGFuZC1Kw7hy Z2Vuc2VuIDx0b2tlQHRva2UuZGs+Cj4+IAo+PiBUaGlzIGFkZHMgYWlydGltZSBhY2NvdW50aW5n IGFuZCBzY2hlZHVsaW5nIHRvIHRoZSBtYWM4MDIxMSBUWFEKPj4gc2NoZWR1bGVyLiBBIG5ldyBj YWxsYmFjaywgaWVlZTgwMjExX3N0YV9yZWdpc3Rlcl9haXJ0aW1lKCksIGlzIGFkZGVkCj4+IHRo YXQgZHJpdmVycyBjYW4gY2FsbCB0byByZXBvcnQgYWlydGltZSB1c2FnZSBmb3Igc3RhdGlvbnMu Cj4+IAo+PiBXaGVuIGFpcnRpbWUgaW5mb3JtYXRpb24gaXMgcHJlc2VudCwgbWFjODAyMTEgd2ls bCBzY2hlZHVsZSBUWFFzCj4+ICh0aHJvdWdoIGllZWU4MDIxMV9uZXh0X3R4cSgpKSBpbiBhIHdh eSB0aGF0IGVuZm9yY2VzIGFpcnRpbWUgZmFpcm5lc3MKPj4gYmV0d2VlbiBhY3RpdmUgc3RhdGlv bnMuIFRoaXMgc2NoZWR1bGluZyB3b3JrcyB0aGUgc2FtZSB3YXkgYXMgdGhlIGF0aDlrCj4+IGlu LWRyaXZlciBhaXJ0aW1lIGZhaXJuZXNzIHNjaGVkdWxpbmcuIElmIG5vIGFpcnRpbWUgdXNhZ2Ug aXMgcmVwb3J0ZWQKPj4gYnkgdGhlIGRyaXZlciwgdGhlIHNjaGVkdWxlciB3aWxsIGRlZmF1bHQg dG8gcm91bmQtcm9iaW4gc2NoZWR1bGluZy4KPj4gCj4+IEZvciBkcml2ZXJzIHRoYXQgZG9uJ3Qg Y29udHJvbCBUWFEgc2NoZWR1bGluZyBpbiBzb2Z0d2FyZSwgYSBuZXcgQVBJCj4+IGZ1bmN0aW9u LCBpZWVlODAyMTFfdHhxX21heV90cmFuc21pdCgpLCBpcyBhZGRlZCB3aGljaCB0aGUgZHJpdmVy IGNhbiB1c2UKPj4gdG8gY2hlY2sgaWYgdGhlIFRYUSBpcyBlbGlnaWJsZSBmb3IgdHJhbnNtaXNz aW9uLCBvciBzaG91bGQgYmUgdGhyb3R0bGVkIHRvCj4+IGVuZm9yY2UgZmFpcm5lc3MuIENhbGxz IHRvIHRoaXMgZnVuY3Rpb24gbXVzdCBhbHNvIGJlIGVuY2xvc2VkIGluCj4+IGllZWU4MDIxMV90 eHFfc2NoZWR1bGVfe3N0YXJ0LGVuZH0oKSBjYWxscyB0byBlbnN1cmUgcHJvcGVyIGxvY2tpbmcu Cj4+IAo+PiBUaGUgQVBJIGllZWU4MDIxMV90eHFfbWF5X3RyYW5zbWl0KCkgYWxzbyBlbnN1cmVz IHRoYXQgVFhRIGxpc3Qgd2lsbCBiZQo+PiBhbGlnbmVkIGFnaW5zdCBkcml2ZXIncyBvd24gcm91 bmQtcm9iaW4gc2NoZWR1bGVyIGxpc3QuIGkuZSBpdCByb3RhdGVzCj4+IHRoZSBUWFEgbGlzdCB0 aWxsIGl0IG1ha2VzIHRoZSByZXF1ZXN0ZWQgbm9kZSBiZWNvbWVzIHRoZSBmaXJzdCBlbnRyeQo+ PiBpbiBUWFEgbGlzdC4gVGh1cyBib3RoIHRoZSBUWFEgbGlzdCBhbmQgZHJpdmVyJ3MgbGlzdCBh cmUgaW4gc3luYy4KPj4gCj4+IENvLURldmVsb3BlZC1ieTogUmFqa3VtYXIgTWFub2hhcmFuIDxy bWFub2hhckBjb2RlYXVyb3JhLm9yZz4KPj4gU2lnbmVkLW9mZi1ieTogVG9rZSBIw7hpbGFuZC1K w7hyZ2Vuc2VuIDx0b2tlQHRva2UuZGs+Cj4+IFNpZ25lZC1vZmYtYnk6IFJhamt1bWFyIE1hbm9o YXJhbiA8cm1hbm9oYXJAY29kZWF1cm9yYS5vcmc+Cj4+IC0tLQo+PiAgaW5jbHVkZS9uZXQvbWFj ODAyMTEuaCAgICAgfCA1OSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPj4gIG5ldC9t YWM4MDIxMS9jZmcuYyAgICAgICAgIHwgIDMgKysKPj4gIG5ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmMg ICAgIHwgIDMgKysKPj4gIG5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX3N0YS5jIHwgNTAgKysrKysrKysr KysrKysrKysrKysrKysrLS0KPj4gIG5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oIHwgIDIgKysK Pj4gIG5ldC9tYWM4MDIxMS9tYWluLmMgICAgICAgIHwgIDQgKysrCj4+ICBuZXQvbWFjODAyMTEv c3RhX2luZm8uYyAgICB8IDQ0ICsrKysrKysrKysrKysrKysrKysrKy0tCj4+ICBuZXQvbWFjODAy MTEvc3RhX2luZm8uaCAgICB8IDEzICsrKysrKysKPj4gIG5ldC9tYWM4MDIxMS9zdGF0dXMuYyAg ICAgIHwgIDYgKysrKwo+PiAgbmV0L21hYzgwMjExL3R4LmMgICAgICAgICAgfCA5MCArKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tCj4+ICAxMCBmaWxlcyBjaGFu Z2VkLCAyNjQgaW5zZXJ0aW9ucygrKSwgMTAgZGVsZXRpb25zKC0pCj4+IAo+PiBkaWZmIC0tZ2l0 IGEvbmV0L21hYzgwMjExL3N0YXR1cy5jIGIvbmV0L21hYzgwMjExL3N0YXR1cy5jCj4+IGluZGV4 IGFhNGFmYmYwYWJhZi4uYTFmMTI1NjQ0OGY1IDEwMDY0NAo+PiAtLS0gYS9uZXQvbWFjODAyMTEv c3RhdHVzLmMKPj4gKysrIGIvbmV0L21hYzgwMjExL3N0YXR1cy5jCj4+IEBAIC04MTgsNiArODE4 LDEyIEBAIHN0YXRpYyB2b2lkIF9faWVlZTgwMjExX3R4X3N0YXR1cyhzdHJ1Y3QgaWVlZTgwMjEx X2h3ICpodywKPj4gIAkJCWllZWU4MDIxMV9zdGFfdHhfbm90aWZ5KHN0YS0+c2RhdGEsICh2b2lk ICopIHNrYi0+ZGF0YSwKPj4gIAkJCQkJCWFja2VkLCBpbmZvLT5zdGF0dXMudHhfdGltZSk7Cj4+ ICAKPj4gKwkJaWYgKGluZm8tPnN0YXR1cy50eF90aW1lICYmCj4+ICsJCSAgICB3aXBoeV9leHRf ZmVhdHVyZV9pc3NldChsb2NhbC0+aHcud2lwaHksCj4+ICsJCQkJCSAgICBOTDgwMjExX0VYVF9G RUFUVVJFX0FJUlRJTUVfRkFJUk5FU1MpKQo+PiArCQkJaWVlZTgwMjExX3N0YV9yZWdpc3Rlcl9h aXJ0aW1lKCZzdGEtPnN0YSwgdGlkLAo+PiArCQkJCQkJICAgICAgIGluZm8tPnN0YXR1cy50eF90 aW1lLCAwKTsKPj4gKwo+PiAgCQlpZiAoaWVlZTgwMjExX2h3X2NoZWNrKCZsb2NhbC0+aHcsIFJF UE9SVFNfVFhfQUNLX1NUQVRVUykpIHsKPj4gIAkJCWlmIChpbmZvLT5mbGFncyAmIElFRUU4MDIx MV9UWF9TVEFUX0FDSykgewo+PiAgCQkJCWlmIChzdGEtPnN0YXR1c19zdGF0cy5sb3N0X3BhY2tl dHMpCj4gSSB0aGluayB0aGUgc2FtZSBpcyBuZWVkZWQgaW4gaWVlZTgwMjExX3R4X3N0YXR1c19l eHQuCgpSaWdodCwgZ29vZCBwb2ludC4KCj4+IGRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvdHgu YyBiL25ldC9tYWM4MDIxMS90eC5jCj4+IGluZGV4IDMwNTk2NTI4MzUwNi4uM2Y0MTdlODBlMDQx IDEwMDY0NAo+PiAtLS0gYS9uZXQvbWFjODAyMTEvdHguYwo+PiArKysgYi9uZXQvbWFjODAyMTEv dHguYwo+PiBAQCAtMzY2MCwxMiArMzY4MCw3NCBAQCB2b2lkIGllZWU4MDIxMV9yZXR1cm5fdHhx KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAo+PiAgCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmxvY2Fs LT5hY3RpdmVfdHhxX2xvY2tbdHhxLT5hY10pOwo+PiAgCj4+ICAJaWYgKGxpc3RfZW1wdHkoJnR4 cWktPnNjaGVkdWxlX29yZGVyKSAmJgo+PiAtCSAgICAoIXNrYl9xdWV1ZV9lbXB0eSgmdHhxaS0+ ZnJhZ3MpIHx8IHR4cWktPnRpbi5iYWNrbG9nX3BhY2tldHMpKQo+PiAtCQlsaXN0X2FkZF90YWls KCZ0eHFpLT5zY2hlZHVsZV9vcmRlciwKPj4gLQkJCSAgICAgICZsb2NhbC0+YWN0aXZlX3R4cXNb dHhxLT5hY10pOwo+PiArCSAgICAoIXNrYl9xdWV1ZV9lbXB0eSgmdHhxaS0+ZnJhZ3MpIHx8IHR4 cWktPnRpbi5iYWNrbG9nX3BhY2tldHMpKSB7Cj4+ICsJCS8qIElmIGFpcnRpbWUgYWNjb3VudGlu ZyBpcyBhY3RpdmUsIGFsd2F5cyBlbnF1ZXVlIFNUQXMgYXQgdGhlCj4+ICsJCSAqIGhlYWQgb2Yg dGhlIGxpc3QgdG8gZW5zdXJlIHRoYXQgdGhleSBvbmx5IGdldCBtb3ZlZCB0byB0aGUKPj4gKwkJ ICogYmFjayBieSB0aGUgYWlydGltZSBEUlIgc2NoZWR1bGVyIG9uY2UgdGhleSBoYXZlIGEgbmVn YXRpdmUKPj4gKwkJICogZGVmaWNpdC4gQSBzdGF0aW9uIHRoYXQgYWxyZWFkeSBoYXMgYSBuZWdh dGl2ZSBkZWZpY2l0IHdpbGwKPj4gKwkJICogZ2V0IGltbWVkaWF0ZWx5IG1vdmVkIHRvIHRoZSBi YWNrIG9mIHRoZSBsaXN0IG9uIHRoZSBuZXh0Cj4+ICsJCSAqIGNhbGwgdG8gaWVlZTgwMjExX25l eHRfdHhxKCkuCj4+ICsJCSAqLwo+PiArCQlpZiAodHhxaS0+dHhxLnN0YSAmJgo+PiArCQkgICAg d2lwaHlfZXh0X2ZlYXR1cmVfaXNzZXQobG9jYWwtPmh3LndpcGh5LAo+PiArCQkJCQkgICAgTkw4 MDIxMV9FWFRfRkVBVFVSRV9BSVJUSU1FX0ZBSVJORVNTKSkKPj4gKwkJCWxpc3RfYWRkKCZ0eHFp LT5zY2hlZHVsZV9vcmRlciwKPj4gKwkJCQkgJmxvY2FsLT5hY3RpdmVfdHhxc1t0eHEtPmFjXSk7 Cj4+ICsJCWVsc2UKPj4gKwkJCWxpc3RfYWRkX3RhaWwoJnR4cWktPnNjaGVkdWxlX29yZGVyLAo+ PiArCQkJCSAgICAgICZsb2NhbC0+YWN0aXZlX3R4cXNbdHhxLT5hY10pOwo+PiArCX0KPj4gIH0K PiBUaGlzIHBhcnQgZG9lc24ndCByZWFsbHkgbWFrZSBtdWNoIHNlbnNlIHRvIG1lLCBidXQgbWF5 YmUgSSdtCj4gbWlzdW5kZXJzdGFuZGluZyBob3cgdGhlIGNvZGUgd29ya3MuCj4gTGV0J3MgYXNz dW1lIHdlIGhhdmUgYSBkcml2ZXIgbGlrZSBhdGg5ayBvciBtdDc2LCB3aGljaCB0cmllcyB0byBr ZWVwIGEKPiBudW1iZXIgb2YgYWdncmVnYXRlcyBpbiB0aGUgaGFyZHdhcmUgcXVldWUsIGFuZCB0 aGUgaGFyZHdhcmUgcXVldWUgaXMKPiBjdXJyZW50bHkgZW1wdHkuCj4gSWYgdGhlIGN1cnJlbnQg dHhxIGVudHJ5IGlzIGtlcHQgYXQgdGhlIGhlYWQgb2YgdGhlIHNjaGVkdWxlIGxpc3QsCj4gd291 bGRuJ3QgdGhlIGNvZGUganVzdCBwdWxsIGZyb20gdGhhdCBvbmUgb3ZlciBhbmQgb3ZlciBhZ2Fp biwgdW50aWwKPiBlbm91Z2ggcGFja2V0cyBhcmUgdHJhbnNtaXR0ZWQgYnkgdGhlIGhhcmR3YXJl IGFuZCB0aGVpciB0eCBzdGF0dXMKPiBwcm9jZXNzZWQ/Cj4gSXQgc2VlbXMgdG8gbWUgdGhhdCB3 aGlsZSBmYWlybmVzcyBpcyBzdGlsbCBwcmVzZXJ2ZWQgaW4gdGhlIGxvbmcgcnVuLAo+IHRoaXMg Y291bGQgbGVhZCB0byByYXRoZXIgYnVyc3R5IHNjaGVkdWxpbmcsIHdoaWNoIG1heSBub3QgYmUK PiBwYXJ0aWN1bGFybHkgbGF0ZW5jeSBmcmllbmRseS4KClllcywgaXQnbGwgYmUgYSBiaXQgbW9y ZSBidXJzdHkgd2hlbiB0aGUgaGFyZHdhcmUgcXVldWUgaXMgY29tcGxldGVseQplbXB0eS4gSG93 ZXZlciwgd2hlbiBhIFRYIGNvbXBsZXRpb24gY29tZXMgYmFjaywgdGhhdCB3aWxsIGFkanVzdCB0 aGUKZGVmaWNpdCBvZiB0aGF0IHN0YSBhbmQgY2F1c2UgaXQgdG8gYmUgcm90YXRlZCBvbiB0aGUg bmV4dCBkZXF1ZXVlLiBUaGlzCm9idmlvdXNseSByZWxpZXMgb24gdGhlIGZhY3QgdGhhdCB0aGUg bG93ZXItbGV2ZWwgaGFyZHdhcmUgcXVldWUgaXMKc3VmZmljaWVudGx5IHNoYWxsb3cgdG8gbm90 IGFkZCBhIGxvdCBvZiBsYXRlbmN5LiBCdXQgd2Ugd2FudCB0aGF0IHRvIGJlCnRoZSBjYXNlIGFu eXdheS4gSW4gcHJhY3RpY2UsIGl0IHdvcmtzIHF1aXRlIHdlbGwgZm9yIGF0aDlrLCBidXQgbm90 IHNvCndlbGwgZm9yIGF0aDEwayBiZWNhdXNlIGl0IGhhcyBhIGxhcmdlIGJ1ZmZlciBpbiBmaXJt d2FyZS4KCklmIHdlIHJlcXVldWUgdGhlIFRYUSBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0LCBhIHN0 YXRpb24gdGhhdCBpcyB0YWtpbmcKdXAgdG9vIG11Y2ggYWlydGltZSB3aWxsIGZhaWwgdG8gYmUg dGhyb3R0bGVkIHByb3Blcmx5LCBzbyB0aGUKcXVldWUtYXQtaGVhZCBpcyBraW5kYSBuZWVkZWQg dG8gZW5zdXJlIGZhaXJuZXNzLi4uCgotVG9rZQoKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KYXRoMTBrIG1haWxpbmcgbGlzdAphdGgxMGtAbGlzdHMuaW5m cmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2F0 aDEwawo= 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=-7.1 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_PASS,URIBL_BLOCKED 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 66C86C43441 for ; Wed, 14 Nov 2018 17:40:45 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 1601D2145D for ; Wed, 14 Nov 2018 17:40:45 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=toke.dk header.i=@toke.dk header.b="gq/Bz5MY" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 1601D2145D Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=toke.dk Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-wireless-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731231AbeKODov (ORCPT ); Wed, 14 Nov 2018 22:44:51 -0500 Received: from mail.toke.dk ([52.28.52.200]:57649 "EHLO mail.toke.dk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725759AbeKODov (ORCPT ); Wed, 14 Nov 2018 22:44:51 -0500 From: Toke =?utf-8?Q?H=C3=B8iland-J=C3=B8rgensen?= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=toke.dk; s=20161023; t=1542217241; bh=Iuv3WYVxNIS4kR3kN1xGY4Z8dxMXie06FtiAXqitQ7M=; h=From:To:Cc:Subject:In-Reply-To:References:Date:From; b=gq/Bz5MYLgeXC17uiiBdooP0cjAHqIk1z3GiIn5pNlLhi41mIwvj19R1yV8rOnyWQ qiYANXDN/zTpkjhaXrQT3zRRFSv2h3xYizWfCFyyzNTMRdnJwxdy/RxrIbrIo6Oyja w/MsoJifmy/sshIN12nft2tlqReXzQQq9gHc1IlienIFqcF9ICQWrd+FobriJzDeSl PN2Iaz8vj/A+HBqGmF6U+mnim/77Jdss/+Wt9k4d8RdSJiVPt50vq9zapFlKTuUhxA QB4OEWgrBRXXqClx813TkjVaPoaUGYOYVc1qxaExACUbssaIH8PUGuxjKKBcHY8ciC e5Kdtwyxq2hrA== To: Felix Fietkau , Rajkumar Manoharan , linux-wireless@vger.kernel.org, ath10k@lists.infradead.org Cc: make-wifi-fast@lists.bufferbloat.net Subject: Re: [PATCH v3 3/6] mac80211: Add airtime accounting and scheduling to TXQs In-Reply-To: References: <1542063113-22438-1-git-send-email-rmanohar@codeaurora.org> <1542063113-22438-4-git-send-email-rmanohar@codeaurora.org> Date: Wed, 14 Nov 2018 09:40:38 -0800 X-Clacks-Overhead: GNU Terry Pratchett Message-ID: <871s7nv9pl.fsf@toke.dk> MIME-Version: 1.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 Felix Fietkau writes: > On 2018-11-12 23:51, Rajkumar Manoharan wrote: >> From: Toke H=C3=B8iland-J=C3=B8rgensen >>=20 >> This adds airtime accounting and scheduling to the mac80211 TXQ >> scheduler. A new callback, ieee80211_sta_register_airtime(), is added >> that drivers can call to report airtime usage for stations. >>=20 >> When airtime information is present, mac80211 will schedule TXQs >> (through ieee80211_next_txq()) in a way that enforces airtime fairness >> between active stations. This scheduling works the same way as the ath9k >> in-driver airtime fairness scheduling. If no airtime usage is reported >> by the driver, the scheduler will default to round-robin scheduling. >>=20 >> For drivers that don't control TXQ scheduling in software, a new API >> function, ieee80211_txq_may_transmit(), is added which the driver can use >> to check if the TXQ is eligible for transmission, or should be throttled= to >> enforce fairness. Calls to this function must also be enclosed in >> ieee80211_txq_schedule_{start,end}() calls to ensure proper locking. >>=20 >> The API ieee80211_txq_may_transmit() also ensures that TXQ list will be >> aligned aginst driver's own round-robin scheduler list. i.e it rotates >> the TXQ list till it makes the requested node becomes the first entry >> in TXQ list. Thus both the TXQ list and driver's list are in sync. >>=20 >> Co-Developed-by: Rajkumar Manoharan >> Signed-off-by: Toke H=C3=B8iland-J=C3=B8rgensen >> Signed-off-by: Rajkumar Manoharan >> --- >> include/net/mac80211.h | 59 ++++++++++++++++++++++++++++++ >> net/mac80211/cfg.c | 3 ++ >> net/mac80211/debugfs.c | 3 ++ >> net/mac80211/debugfs_sta.c | 50 ++++++++++++++++++++++++-- >> net/mac80211/ieee80211_i.h | 2 ++ >> net/mac80211/main.c | 4 +++ >> net/mac80211/sta_info.c | 44 +++++++++++++++++++++-- >> net/mac80211/sta_info.h | 13 +++++++ >> net/mac80211/status.c | 6 ++++ >> net/mac80211/tx.c | 90 +++++++++++++++++++++++++++++++++++++++= ++++--- >> 10 files changed, 264 insertions(+), 10 deletions(-) >>=20 >> diff --git a/net/mac80211/status.c b/net/mac80211/status.c >> index aa4afbf0abaf..a1f1256448f5 100644 >> --- a/net/mac80211/status.c >> +++ b/net/mac80211/status.c >> @@ -818,6 +818,12 @@ static void __ieee80211_tx_status(struct ieee80211_= hw *hw, >> ieee80211_sta_tx_notify(sta->sdata, (void *) skb->data, >> acked, info->status.tx_time); >>=20=20 >> + if (info->status.tx_time && >> + wiphy_ext_feature_isset(local->hw.wiphy, >> + NL80211_EXT_FEATURE_AIRTIME_FAIRNESS)) >> + ieee80211_sta_register_airtime(&sta->sta, tid, >> + info->status.tx_time, 0); >> + >> if (ieee80211_hw_check(&local->hw, REPORTS_TX_ACK_STATUS)) { >> if (info->flags & IEEE80211_TX_STAT_ACK) { >> if (sta->status_stats.lost_packets) > I think the same is needed in ieee80211_tx_status_ext. Right, good point. >> diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c >> index 305965283506..3f417e80e041 100644 >> --- a/net/mac80211/tx.c >> +++ b/net/mac80211/tx.c >> @@ -3660,12 +3680,74 @@ void ieee80211_return_txq(struct ieee80211_hw *h= w, >> lockdep_assert_held(&local->active_txq_lock[txq->ac]); >>=20=20 >> if (list_empty(&txqi->schedule_order) && >> - (!skb_queue_empty(&txqi->frags) || txqi->tin.backlog_packets)) >> - list_add_tail(&txqi->schedule_order, >> - &local->active_txqs[txq->ac]); >> + (!skb_queue_empty(&txqi->frags) || txqi->tin.backlog_packets)) { >> + /* If airtime accounting is active, always enqueue STAs at the >> + * head of the list to ensure that they only get moved to the >> + * back by the airtime DRR scheduler once they have a negative >> + * deficit. A station that already has a negative deficit will >> + * get immediately moved to the back of the list on the next >> + * call to ieee80211_next_txq(). >> + */ >> + if (txqi->txq.sta && >> + wiphy_ext_feature_isset(local->hw.wiphy, >> + NL80211_EXT_FEATURE_AIRTIME_FAIRNESS)) >> + list_add(&txqi->schedule_order, >> + &local->active_txqs[txq->ac]); >> + else >> + list_add_tail(&txqi->schedule_order, >> + &local->active_txqs[txq->ac]); >> + } >> } > This part doesn't really make much sense to me, but maybe I'm > misunderstanding how the code works. > Let's assume we have a driver like ath9k or mt76, which tries to keep a > number of aggregates in the hardware queue, and the hardware queue is > currently empty. > If the current txq entry is kept at the head of the schedule list, > wouldn't the code just pull from that one over and over again, until > enough packets are transmitted by the hardware and their tx status > processed? > It seems to me that while fairness is still preserved in the long run, > this could lead to rather bursty scheduling, which may not be > particularly latency friendly. Yes, it'll be a bit more bursty when the hardware queue is completely empty. However, when a TX completion comes back, that will adjust the deficit of that sta and cause it to be rotated on the next dequeue. This obviously relies on the fact that the lower-level hardware queue is sufficiently shallow to not add a lot of latency. But we want that to be the case anyway. In practice, it works quite well for ath9k, but not so well for ath10k because it has a large buffer in firmware. If we requeue the TXQ at the end of the list, a station that is taking up too much airtime will fail to be throttled properly, so the queue-at-head is kinda needed to ensure fairness... -Toke