From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from smtp.codeaurora.org ([198.145.29.96]) by bombadil.infradead.org with esmtps (Exim 4.92.2 #3 (Red Hat Linux)) id 1iAXB9-0002BK-I3 for ath10k@lists.infradead.org; Wed, 18 Sep 2019 10:27:21 +0000 MIME-Version: 1.0 Date: Wed, 18 Sep 2019 18:27:17 +0800 From: Yibo Zhao Subject: Re: [PATCH 2/4] mac80211: defer txqs removal from rbtree In-Reply-To: <87pnjyiq7o.fsf@toke.dk> References: <1568639388-27291-1-git-send-email-yiboz@codeaurora.org> <1568639388-27291-2-git-send-email-yiboz@codeaurora.org> <87pnjyiq7o.fsf@toke.dk> Message-ID: List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "ath10k" Errors-To: ath10k-bounces+kvalo=adurom.com@lists.infradead.org To: =?UTF-8?Q?Toke_H=C3=B8iland-J=C3=B8rgensen?= Cc: linux-wireless@vger.kernel.org, ath10k@lists.infradead.org T24gMjAxOS0wOS0xOCAwNToxMCwgVG9rZSBIw7hpbGFuZC1Kw7hyZ2Vuc2VuIHdyb3RlOgo+IFlp Ym8gWmhhbyA8eWlib3pAY29kZWF1cm9yYS5vcmc+IHdyaXRlczoKPiAKPj4gSW4gYSBsb29wIHR4 cXMgZGVxdWV1ZSBzY2VuYXJpbywgaWYgdGhlIGZpcnN0IHR4cSBpbiB0aGUgcmJ0cmVlIGdldHMK Pj4gcmVtb3ZlZCBmcm9tIHJidHJlZSBpbW1lZGlhdGVseSBpbiB0aGUgaWVlZTgwMjExX3JldHVy bl90eHEoKSwgdGhlCj4+IGxvb3Agd2lsbCBicmVhayBzb29uIGluIHRoZSBpZWVlODAyMTFfbmV4 dF90eHEoKSBkdWUgdG8gc2NoZWR1bGVfcG9zCj4+IG5vdCBsZWFkaW5nIHRvIHRoZSBzZWNvbmQg dHhxIGluIHRoZSByYnRyZWUuIFRodXMsIGRlZmVyaW5nIHRoZQo+PiByZW1vdmFsIHJpZ2h0IGJl Zm9yZSB0aGUgZW5kIG9mIHRoaXMgc2NoZWR1bGUgcm91bmQuCj4+IAo+PiBDby1kZXZlbG9wZWQt Ynk6IFlpYm8gWmhhbyA8eWlib3pAY29kZWF1cm9yYS5vcmc+Cj4+IFNpZ25lZC1vZmYtYnk6IFlp Ym8gWmhhbyA8eWlib3pAY29kZWF1cm9yYS5vcmc+Cj4+IFNpZ25lZC1vZmYtYnk6IFRva2UgSMO4 aWxhbmQtSsO4cmdlbnNlbiA8dG9rZUB0b2tlLmRrPgo+IAo+IEkgZGlkbid0IHdyaXRlIHRoaXMg cGF0Y2gsIHNvIHBsZWFzZSBkb24ndCB1c2UgbXkgc2lnbi1vZmYuIEknbGwgYWRkCj4gYWNrIG9y IHJldmlldyB0YWdzIGFzIGFwcHJvcHJpYXRlIGluIHJlcGx5OyBidXQgYSBmZXcgY29tbWVudHMg Zmlyc3Q6Cj4gCj4+IC0tLQo+PiAgaW5jbHVkZS9uZXQvbWFjODAyMTEuaCAgICAgfCAxNiArKysr KysrKysrLS0KPj4gIG5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oIHwgIDMgKysrCj4+ICBuZXQv bWFjODAyMTEvbWFpbi5jICAgICAgICB8ICA2ICsrKysrCj4+ICBuZXQvbWFjODAyMTEvdHguYyAg ICAgICAgICB8IDYzIAo+PiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrLS0tCj4+ICA0IGZpbGVzIGNoYW5nZWQsIDgzIGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25z KC0pCj4+IAo+PiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbWFjODAyMTEuaCBiL2luY2x1ZGUv bmV0L21hYzgwMjExLmgKPj4gaW5kZXggYWMyZWQ4ZS4uYmE1YTM0NSAxMDA2NDQKPj4gLS0tIGEv aW5jbHVkZS9uZXQvbWFjODAyMTEuaAo+PiArKysgYi9pbmNsdWRlL25ldC9tYWM4MDIxMS5oCj4+ IEBAIC05MjUsNiArOTI1LDggQEAgc3RydWN0IGllZWU4MDIxMV90eF9yYXRlIHsKPj4gCj4+ICAj ZGVmaW5lIElFRUU4MDIxMV9NQVhfVFhfUkVUUlkJCTMxCj4+IAo+PiArI2RlZmluZSBJRUVFODAy MTFfQUlSVElNRV9UWFFfUk1fQ0hLX0lOVFZfSU5fTVMgMTAwCj4+ICsKPj4gIHN0YXRpYyBpbmxp bmUgdm9pZCBpZWVlODAyMTFfcmF0ZV9zZXRfdmh0KHN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZSAK Pj4gKnJhdGUsCj4+ICAJCQkJCSAgdTggbWNzLCB1OCBuc3MpCj4+ICB7Cj4+IEBAIC02MjMyLDcg KzYyMzQsOCBAQCBzdHJ1Y3Qgc2tfYnVmZiAqaWVlZTgwMjExX3R4X2RlcXVldWUoc3RydWN0IAo+ PiBpZWVlODAyMTFfaHcgKmh3LAo+PiAgICogQGFjOiBBQyBudW1iZXIgdG8gcmV0dXJuIHBhY2tl dHMgZnJvbS4KPj4gICAqCj4+ICAgKiBTaG91bGQgb25seSBiZSBjYWxsZWQgYmV0d2VlbiBjYWxs cyB0byAKPj4gaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9zdGFydCgpCj4+IC0gKiBhbmQgaWVlZTgw MjExX3R4cV9zY2hlZHVsZV9lbmQoKS4KPj4gKyAqIGFuZCBpZWVlODAyMTFfdHhxX3NjaGVkdWxl X2VuZCgpLiBJZiB0aGUgdHhxIGlzIGVtcHR5LCBpdCB3aWxsIGJlIAo+PiBhZGRlZAo+PiArICog dG8gYSByZW1vdmUgbGlzdCBhbmQgZ2V0IHJlbW92ZWQgbGF0ZXIuCj4+ICAgKiBSZXR1cm5zIHRo ZSBuZXh0IHR4cSBpZiBzdWNjZXNzZnVsLCAlTlVMTCBpZiBubyBxdWV1ZSBpcyBlbGlnaWJsZS4g Cj4+IElmIGEgdHhxCj4+ICAgKiBpcyByZXR1cm5lZCwgaXQgc2hvdWxkIGJlIHJldHVybmVkIHdp dGggaWVlZTgwMjExX3JldHVybl90eHEoKSAKPj4gYWZ0ZXIgdGhlCj4+ICAgKiBkcml2ZXIgaGFz IGZpbmlzaGVkIHNjaGVkdWxpbmcgaXQuCj4+IEBAIC02MjY4LDcgKzYyNzEsOCBAQCB2b2lkIGll ZWU4MDIxMV90eHFfc2NoZWR1bGVfc3RhcnQoc3RydWN0IAo+PiBpZWVlODAyMTFfaHcgKmh3LCB1 OCBhYykKPj4gICAqIEBodzogcG9pbnRlciBhcyBvYnRhaW5lZCBmcm9tIGllZWU4MDIxMV9hbGxv Y19odygpCj4+ICAgKiBAYWM6IEFDIG51bWJlciB0byBhY3F1aXJlIGxvY2tzIGZvcgo+PiAgICoK Pj4gLSAqIFJlbGVhc2UgbG9ja3MgcHJldmlvdXNseSBhY3F1aXJlZCBieSBpZWVlODAyMTFfdHhx X3NjaGVkdWxlX2VuZCgpLgo+PiArICogUmVsZWFzZSBsb2NrcyBwcmV2aW91c2x5IGFjcXVpcmVk IGJ5IGllZWU4MDIxMV90eHFfc2NoZWR1bGVfZW5kKCkuIAo+PiBDaGVjawo+PiArICogYW5kIHJl bW92ZSB0aGUgZW1wdHkgdHhxIGZyb20gcmItdHJlZS4KPj4gICAqLwo+PiAgdm9pZCBpZWVlODAy MTFfdHhxX3NjaGVkdWxlX2VuZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggYWMpCj4+ICAJ X19yZWxlYXNlcyh0eHFfbG9jayk7Cj4+IEBAIC02Mjg3LDYgKzYyOTEsMTQgQEAgdm9pZCBpZWVl ODAyMTFfc2NoZWR1bGVfdHhxKHN0cnVjdCBpZWVlODAyMTFfaHcgCj4+ICpodywgc3RydWN0IGll ZWU4MDIxMV90eHEgKnR4cSkKPj4gIAlfX2FjcXVpcmVzKHR4cV9sb2NrKSBfX3JlbGVhc2VzKHR4 cV9sb2NrKTsKPj4gCj4+ICAvKioKPj4gKyAqIGllZWU4MDIxMV90eHFzX2NoZWNrIC0gQ2hlY2sg dHhxcyB3YWl0aW5nIGZvciByZW1vdmFsCj4+ICsgKgo+PiArICogQHRtcjogcG9pbnRlciBhcyBv YnRhaW5lZCBmcm9tIGxvY2FsCj4+ICsgKgo+PiArICovCj4+ICt2b2lkIGllZWU4MDIxMV90eHFz X2NoZWNrKHN0cnVjdCB0aW1lcl9saXN0ICp0bXIpOwo+PiArCj4+ICsvKioKPj4gICAqIGllZWU4 MDIxMV90eHFfbWF5X3RyYW5zbWl0IC0gY2hlY2sgd2hldGhlciBUWFEgaXMgYWxsb3dlZCB0byAK Pj4gdHJhbnNtaXQKPj4gICAqCj4+ICAgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gY2hlY2sg d2hldGhlciBnaXZlbiB0eHEgaXMgYWxsb3dlZCB0byAKPj4gdHJhbnNtaXQgYnkKPj4gZGlmZiAt LWdpdCBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oIGIvbmV0L21hYzgwMjExL2llZWU4MDIx MV9pLmgKPj4gaW5kZXggYTQ1NTZmOS4uNDlhYTE0M2UgMTAwNjQ0Cj4+IC0tLSBhL25ldC9tYWM4 MDIxMS9pZWVlODAyMTFfaS5oCj4+ICsrKyBiL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oCj4+ IEBAIC04NDcsNiArODQ3LDcgQEAgc3RydWN0IHR4cV9pbmZvIHsKPj4gIAlzdHJ1Y3QgY29kZWxf c3RhdHMgY3N0YXRzOwo+PiAgCXN0cnVjdCBza19idWZmX2hlYWQgZnJhZ3M7Cj4+ICAJc3RydWN0 IHJiX25vZGUgc2NoZWR1bGVfb3JkZXI7Cj4+ICsJc3RydWN0IGxpc3RfaGVhZCBjYW5kaWRhdGU7 Cj4+ICAJdW5zaWduZWQgbG9uZyBmbGFnczsKPj4gCj4+ICAJLyoga2VlcCBsYXN0ISAqLwo+PiBA QCAtMTE0NSw2ICsxMTQ2LDggQEAgc3RydWN0IGllZWU4MDIxMV9sb2NhbCB7Cj4+ICAJdTY0IGFp cnRpbWVfdl90W0lFRUU4MDIxMV9OVU1fQUNTXTsKPj4gIAl1NjQgYWlydGltZV93ZWlnaHRfc3Vt W0lFRUU4MDIxMV9OVU1fQUNTXTsKPj4gCj4+ICsJc3RydWN0IGxpc3RfaGVhZCByZW1vdmVfbGlz dFtJRUVFODAyMTFfTlVNX0FDU107Cj4+ICsJc3RydWN0IHRpbWVyX2xpc3QgcmVtb3ZlX3RpbWVy Owo+PiAgCXUxNiBhaXJ0aW1lX2ZsYWdzOwo+PiAKPj4gIAljb25zdCBzdHJ1Y3QgaWVlZTgwMjEx X29wcyAqb3BzOwo+PiBkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL21haW4uYyBiL25ldC9tYWM4 MDIxMS9tYWluLmMKPj4gaW5kZXggZTlmZmE4ZS4uNzhmZTI0YSAxMDA2NDQKPj4gLS0tIGEvbmV0 L21hYzgwMjExL21haW4uYwo+PiArKysgYi9uZXQvbWFjODAyMTEvbWFpbi5jCj4+IEBAIC02Njcs MTAgKzY2NywxNSBAQCBzdHJ1Y3QgaWVlZTgwMjExX2h3IAo+PiAqaWVlZTgwMjExX2FsbG9jX2h3 X25tKHNpemVfdCBwcml2X2RhdGFfbGVuLAo+PiAKPj4gIAlmb3IgKGkgPSAwOyBpIDwgSUVFRTgw MjExX05VTV9BQ1M7IGkrKykgewo+PiAgCQlsb2NhbC0+YWN0aXZlX3R4cXNbaV0gPSBSQl9ST09U X0NBQ0hFRDsKPj4gKwkJSU5JVF9MSVNUX0hFQUQoJmxvY2FsLT5yZW1vdmVfbGlzdFtpXSk7Cj4+ ICAJCXNwaW5fbG9ja19pbml0KCZsb2NhbC0+YWN0aXZlX3R4cV9sb2NrW2ldKTsKPj4gIAl9Cj4+ ICAJbG9jYWwtPmFpcnRpbWVfZmxhZ3MgPSBBSVJUSU1FX1VTRV9UWCB8IEFJUlRJTUVfVVNFX1JY Owo+PiAKPj4gKwl0aW1lcl9zZXR1cCgmbG9jYWwtPnJlbW92ZV90aW1lciwgaWVlZTgwMjExX3R4 cXNfY2hlY2ssIDApOwo+PiArCW1vZF90aW1lcigmbG9jYWwtPnJlbW92ZV90aW1lciwKPj4gKwkJ ICBqaWZmaWVzICsgCj4+IG1zZWNzX3RvX2ppZmZpZXMoSUVFRTgwMjExX0FJUlRJTUVfVFhRX1JN X0NIS19JTlRWX0lOX01TKSk7Cj4+ICsKPj4gIAlJTklUX0xJU1RfSEVBRCgmbG9jYWwtPmNoYW5j dHhfbGlzdCk7Cj4+ICAJbXV0ZXhfaW5pdCgmbG9jYWwtPmNoYW5jdHhfbXR4KTsKPj4gCj4+IEBA IC0xMzA1LDYgKzEzMTAsNyBAQCB2b2lkIGllZWU4MDIxMV91bnJlZ2lzdGVyX2h3KHN0cnVjdCBp ZWVlODAyMTFfaHcgCj4+ICpodykKPj4gIAl0YXNrbGV0X2tpbGwoJmxvY2FsLT50eF9wZW5kaW5n X3Rhc2tsZXQpOwo+PiAgCXRhc2tsZXRfa2lsbCgmbG9jYWwtPnRhc2tsZXQpOwo+PiAKPj4gKwlk ZWxfdGltZXJfc3luYygmbG9jYWwtPnJlbW92ZV90aW1lcik7Cj4+ICAjaWZkZWYgQ09ORklHX0lO RVQKPj4gIAl1bnJlZ2lzdGVyX2luZXRhZGRyX25vdGlmaWVyKCZsb2NhbC0+aWZhX25vdGlmaWVy KTsKPj4gICNlbmRpZgo+PiBkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3R4LmMgYi9uZXQvbWFj ODAyMTEvdHguYwo+PiBpbmRleCBkMDBiYWFhLi40MmNhMDEwIDEwMDY0NAo+PiAtLS0gYS9uZXQv bWFjODAyMTEvdHguYwo+PiArKysgYi9uZXQvbWFjODAyMTEvdHguYwo+PiBAQCAtMTQ1MCw2ICsx NDUwLDcgQEAgdm9pZCBpZWVlODAyMTFfdHhxX2luaXQoc3RydWN0IAo+PiBpZWVlODAyMTFfc3Vi X2lmX2RhdGEgKnNkYXRhLAo+PiAgCWNvZGVsX3N0YXRzX2luaXQoJnR4cWktPmNzdGF0cyk7Cj4+ ICAJX19za2JfcXVldWVfaGVhZF9pbml0KCZ0eHFpLT5mcmFncyk7Cj4+ICAJUkJfQ0xFQVJfTk9E RSgmdHhxaS0+c2NoZWR1bGVfb3JkZXIpOwo+PiArCUlOSVRfTElTVF9IRUFEKCZ0eHFpLT5jYW5k aWRhdGUpOwo+PiAKPj4gIAl0eHFpLT50eHEudmlmID0gJnNkYXRhLT52aWY7Cj4+IAo+PiBAQCAt MzcyNCw2ICszNzI1LDkgQEAgdm9pZCBpZWVlODAyMTFfc2NoZWR1bGVfdHhxKHN0cnVjdCBpZWVl ODAyMTFfaHcgCj4+ICpodywKPj4gCj4+ICAJc3Bpbl9sb2NrX2JoKCZsb2NhbC0+YWN0aXZlX3R4 cV9sb2NrW2FjXSk7Cj4+IAo+PiArCWlmICghbGlzdF9lbXB0eSgmdHhxaS0+Y2FuZGlkYXRlKSkK Pj4gKwkJbGlzdF9kZWxfaW5pdCgmdHhxaS0+Y2FuZGlkYXRlKTsKPj4gKwo+PiAgCWlmICghUkJf RU1QVFlfTk9ERSgmdHhxaS0+c2NoZWR1bGVfb3JkZXIpKQo+PiAgCQlnb3RvIG91dDsKPj4gCj4+ IEBAIC0zNzgzLDYgKzM3ODcsMjAgQEAgc3RhdGljIHZvaWQgX19pZWVlODAyMTFfdW5zY2hlZHVs ZV90eHEoc3RydWN0IAo+PiBpZWVlODAyMTFfaHcgKmh3LAo+PiAgCVJCX0NMRUFSX05PREUoJnR4 cWktPnNjaGVkdWxlX29yZGVyKTsKPj4gIH0KPj4gCj4+ICt2b2lkIGllZWU4MDIxMV9yZW1vdmVf dHhxKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAo+PiArCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3R4 cSAqdHhxKQo+PiArewo+PiArCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9f bG9jYWwoaHcpOwo+PiArCXN0cnVjdCB0eHFfaW5mbyAqdHhxaSA9IHRvX3R4cV9pbmZvKHR4cSk7 Cj4+ICsKPj4gKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZsb2NhbC0+YWN0aXZlX3R4cV9sb2NrW3R4 cS0+YWNdKTsKPj4gKwo+PiArCWlmICghUkJfRU1QVFlfTk9ERSgmdHhxaS0+c2NoZWR1bGVfb3Jk ZXIpKSB7Cj4+ICsJCV9faWVlZTgwMjExX3Vuc2NoZWR1bGVfdHhxKGh3LCB0eHEpOwo+PiArCQls aXN0X2RlbF9pbml0KCZ0eHFpLT5jYW5kaWRhdGUpOwo+PiArCX0KPj4gK30KPj4gKwo+PiAgdm9p ZCBpZWVlODAyMTFfdW5zY2hlZHVsZV90eHEoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCj4+ICAJ CQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4cSAqdHhxKQo+PiAgCV9fYWNxdWlyZXModHhxX2xv Y2spIF9fcmVsZWFzZXModHhxX2xvY2spCj4+IEBAIC0zNzkwLDcgKzM4MDgsNyBAQCB2b2lkIGll ZWU4MDIxMV91bnNjaGVkdWxlX3R4cShzdHJ1Y3QgCj4+IGllZWU4MDIxMV9odyAqaHcsCj4+ICAJ c3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7Cj4+IAo+PiAg CXNwaW5fbG9ja19iaCgmbG9jYWwtPmFjdGl2ZV90eHFfbG9ja1t0eHEtPmFjXSk7Cj4+IC0JX19p ZWVlODAyMTFfdW5zY2hlZHVsZV90eHEoaHcsIHR4cSk7Cj4+ICsJaWVlZTgwMjExX3JlbW92ZV90 eHEoaHcsIHR4cSk7Cj4+ICAJc3Bpbl91bmxvY2tfYmgoJmxvY2FsLT5hY3RpdmVfdHhxX2xvY2tb dHhxLT5hY10pOwo+PiAgfQo+PiAKPj4gQEAgLTM4MDMsMTEgKzM4MjEsNDggQEAgdm9pZCBpZWVl ODAyMTFfcmV0dXJuX3R4cShzdHJ1Y3QgaWVlZTgwMjExX2h3IAo+PiAqaHcsCj4+ICAJbG9ja2Rl cF9hc3NlcnRfaGVsZCgmbG9jYWwtPmFjdGl2ZV90eHFfbG9ja1t0eHEtPmFjXSk7Cj4+IAo+PiAg CWlmICghUkJfRU1QVFlfTk9ERSgmdHhxaS0+c2NoZWR1bGVfb3JkZXIpICYmCj4+IC0JICAgIChz a2JfcXVldWVfZW1wdHkoJnR4cWktPmZyYWdzKSAmJiAhdHhxaS0+dGluLmJhY2tsb2dfcGFja2V0 cykpCj4+IC0JCV9faWVlZTgwMjExX3Vuc2NoZWR1bGVfdHhxKGh3LCB0eHEpOwo+PiArCQkhdHhx X2hhc19xdWV1ZSgmdHhxaS0+dHhxKSAmJgo+PiArCQlsaXN0X2VtcHR5KCZ0eHFpLT5jYW5kaWRh dGUpKQo+PiArCQlsaXN0X2FkZF90YWlsKCZ0eHFpLT5jYW5kaWRhdGUsICZsb2NhbC0+cmVtb3Zl X2xpc3RbdHhxLT5hY10pOwo+PiArCj4+ICB9Cj4+ICBFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9y ZXR1cm5fdHhxKTsKPj4gCj4+ICt2b2lkIF9faWVlZTgwMjExX2NoZWNrX3R4cXMoc3RydWN0IGll ZWU4MDIxMV9sb2NhbCAqbG9jYWwsIGludCBhYykKPj4gK3sKPj4gKwlzdHJ1Y3QgdHhxX2luZm8g Kml0ZXIsICp0bXA7Cj4+ICsJc3RydWN0IHN0YV9pbmZvICpzdGE7Cj4+ICsKPj4gKwlsb2NrZGVw X2Fzc2VydF9oZWxkKCZsb2NhbC0+YWN0aXZlX3R4cV9sb2NrW2FjXSk7Cj4+ICsKPj4gKwlsaXN0 X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaXRlciwgdG1wLCAmbG9jYWwtPnJlbW92ZV9saXN0W2FjXSwK Pj4gKwkJCQkgY2FuZGlkYXRlKSB7Cj4+ICsJCXN0YSA9IGNvbnRhaW5lcl9vZihpdGVyLT50eHEu c3RhLCBzdHJ1Y3Qgc3RhX2luZm8sIHN0YSk7Cj4+ICsKPj4gKwkJaWYgKHR4cV9oYXNfcXVldWUo Jml0ZXItPnR4cSkpCj4+ICsJCQlsaXN0X2RlbF9pbml0KCZpdGVyLT5jYW5kaWRhdGUpOwo+PiAr CQllbHNlCj4+ICsJCQlpZWVlODAyMTFfcmVtb3ZlX3R4cSgmbG9jYWwtPmh3LCAmaXRlci0+dHhx KTsKPj4gKwl9Cj4+ICt9Cj4+ICsKPj4gK3ZvaWQgaWVlZTgwMjExX3R4cXNfY2hlY2soc3RydWN0 IHRpbWVyX2xpc3QgKnQpCj4+ICt7Cj4+ICsJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwg PSBmcm9tX3RpbWVyKGxvY2FsLCB0LCByZW1vdmVfdGltZXIpOwo+PiArCXN0cnVjdCB0eHFfaW5m byAqaXRlciwgKnRtcDsKPj4gKwlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKPj4gKwlpbnQgYWM7Cj4+ ICsKPj4gKwlmb3IgKGFjID0gMDsgYWMgPCBJRUVFODAyMTFfTlVNX0FDUzsgYWMrKykgewo+PiAr CQlzcGluX2xvY2tfYmgoJmxvY2FsLT5hY3RpdmVfdHhxX2xvY2tbYWNdKTsKPj4gKwkJX19pZWVl ODAyMTFfY2hlY2tfdHhxcyhsb2NhbCwgYWMpOwo+PiArCQlzcGluX3VubG9ja19iaCgmbG9jYWwt PmFjdGl2ZV90eHFfbG9ja1thY10pOwo+PiArCX0KPj4gKwo+PiArCW1vZF90aW1lcigmbG9jYWwt PnJlbW92ZV90aW1lciwKPj4gKwkJICBqaWZmaWVzICsgCj4+IG1zZWNzX3RvX2ppZmZpZXMoSUVF RTgwMjExX0FJUlRJTUVfVFhRX1JNX0NIS19JTlRWX0lOX01TKSk7Cj4+ICt9Cj4gCj4gSSdsbCBh c2sgdGhlIHNhbWUgYXMgSSBkaWQgbGFzdCB0aW1lICh3aGVyZSB5b3UgdG9sZCBtZSB0byBob2xk IG9mZgo+IHVudGlsIHRoaXMgcm91bmQpOgo+IAo+IFdoeSBkbyB5b3UgbmVlZCB0aGUgdGltZXIg YW5kIHRoZSBwZXJpb2RpYyBjaGVjaz8gSWYgVFhRcyBhcmUgYWRkZWQgdG8KPiB0aGUgcmVtb3Zl IGxpc3QgZHVyaW5nIHRoZSBzY2hlZHVsaW5nIHJ1biwgYW5kIF9faWVlZTgwMjExX2NoZWNrX3R4 cXMoKQo+IGlzIHJ1biBmcm9tIHNjaGVkdWxlX2VuZCgpLCBpc24ndCB0aGF0IHN1ZmZpY2llbnQg dG8gY2xlYXIgdGhlIGxpc3Q/CklzIGl0IHBvc3NpYmxlIHRoYXQgYSB0eHEgaXMgbm90IGFkZGVk IHRvIHRoZSByZW1vdmUgbGlzdCBidXQgdGhlbiAKcGFja2V0cyBpbiBpdCBhcmUgZHJvcHBlZCBi eSBmcV9jb2RlbCBhbGdvPyBMaWtlIHRoZSBzdGF0aW9uIGRpc2Nvbm5lY3RzIAp3aXRob3V0IGFu eSBub3RpZmljYXRpb24uCgo+IAo+IC1Ub2tlCgotLSAKWWlibwoKX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KYXRoMTBrIG1haWxpbmcgbGlzdAphdGgxMGtA bGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2F0aDEwawo= 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.5 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,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 49021C4CEC9 for ; Wed, 18 Sep 2019 10:27:21 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 0C191205F4 for ; Wed, 18 Sep 2019 10:27:21 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="key not found in DNS" (0-bit key) header.d=codeaurora.org header.i=@codeaurora.org header.b="VbMrlJtx"; dkim=fail reason="key not found in DNS" (0-bit key) header.d=codeaurora.org header.i=@codeaurora.org header.b="R3ovPBEj" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729049AbfIRK1U (ORCPT ); Wed, 18 Sep 2019 06:27:20 -0400 Received: from smtp.codeaurora.org ([198.145.29.96]:56132 "EHLO smtp.codeaurora.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725298AbfIRK1U (ORCPT ); Wed, 18 Sep 2019 06:27:20 -0400 Received: by smtp.codeaurora.org (Postfix, from userid 1000) id 8C2746074F; Wed, 18 Sep 2019 10:27:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1568802438; bh=+vnQlH4Ej7GJBcWJlwGenw34PDJu5Coejm9Xf4/CIRo=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=VbMrlJtxt6Uv746du5x/Q2muRgBGiQr3Dk18tbD09ruf1fnWb0zLvEZw+iv8DTtQG exjeFx5EcldwTj4frwxqpUvPpFJ5TGyPyTV/ChkLeINYvm4H3fwTrFHFGixzGQ6QZl kzxTxQdRqPQX3RSskPuaOkauyXmhDilhn1rbVvJs= Received: from mail.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.codeaurora.org (Postfix) with ESMTP id 733296050D; Wed, 18 Sep 2019 10:27:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1568802437; bh=+vnQlH4Ej7GJBcWJlwGenw34PDJu5Coejm9Xf4/CIRo=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=R3ovPBEjpqDh9ZsxfJ/5CMDjAM2M2+aZuY/9QVG+O1qs/rhyqnZlo+sJKV1Dq3Je9 i7Wg9vrDpugfUfpSYAAAGOvHd9nNIh27034Xx6XO6Qa5kRKBNWzpMLtV87kGIJULDF XNt/sjIEFiSBjpaZVsi2BEUx/Ex6tO4r1aFFkxU4= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Date: Wed, 18 Sep 2019 18:27:17 +0800 From: Yibo Zhao To: =?UTF-8?Q?Toke_H=C3=B8iland-J=C3=B8rgensen?= Cc: ath10k@lists.infradead.org, linux-wireless@vger.kernel.org Subject: Re: [PATCH 2/4] mac80211: defer txqs removal from rbtree In-Reply-To: <87pnjyiq7o.fsf@toke.dk> References: <1568639388-27291-1-git-send-email-yiboz@codeaurora.org> <1568639388-27291-2-git-send-email-yiboz@codeaurora.org> <87pnjyiq7o.fsf@toke.dk> Message-ID: X-Sender: yiboz@codeaurora.org User-Agent: Roundcube Webmail/1.2.5 Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org On 2019-09-18 05:10, Toke Høiland-Jørgensen wrote: > Yibo Zhao writes: > >> In a loop txqs dequeue scenario, if the first txq in the rbtree gets >> removed from rbtree immediately in the ieee80211_return_txq(), the >> loop will break soon in the ieee80211_next_txq() due to schedule_pos >> not leading to the second txq in the rbtree. Thus, defering the >> removal right before the end of this schedule round. >> >> Co-developed-by: Yibo Zhao >> Signed-off-by: Yibo Zhao >> Signed-off-by: Toke Høiland-Jørgensen > > I didn't write this patch, so please don't use my sign-off. I'll add > ack or review tags as appropriate in reply; but a few comments first: > >> --- >> include/net/mac80211.h | 16 ++++++++++-- >> net/mac80211/ieee80211_i.h | 3 +++ >> net/mac80211/main.c | 6 +++++ >> net/mac80211/tx.c | 63 >> +++++++++++++++++++++++++++++++++++++++++++--- >> 4 files changed, 83 insertions(+), 5 deletions(-) >> >> diff --git a/include/net/mac80211.h b/include/net/mac80211.h >> index ac2ed8e..ba5a345 100644 >> --- a/include/net/mac80211.h >> +++ b/include/net/mac80211.h >> @@ -925,6 +925,8 @@ struct ieee80211_tx_rate { >> >> #define IEEE80211_MAX_TX_RETRY 31 >> >> +#define IEEE80211_AIRTIME_TXQ_RM_CHK_INTV_IN_MS 100 >> + >> static inline void ieee80211_rate_set_vht(struct ieee80211_tx_rate >> *rate, >> u8 mcs, u8 nss) >> { >> @@ -6232,7 +6234,8 @@ struct sk_buff *ieee80211_tx_dequeue(struct >> ieee80211_hw *hw, >> * @ac: AC number to return packets from. >> * >> * Should only be called between calls to >> ieee80211_txq_schedule_start() >> - * and ieee80211_txq_schedule_end(). >> + * and ieee80211_txq_schedule_end(). If the txq is empty, it will be >> added >> + * to a remove list and get removed later. >> * Returns the next txq if successful, %NULL if no queue is eligible. >> If a txq >> * is returned, it should be returned with ieee80211_return_txq() >> after the >> * driver has finished scheduling it. >> @@ -6268,7 +6271,8 @@ void ieee80211_txq_schedule_start(struct >> ieee80211_hw *hw, u8 ac) >> * @hw: pointer as obtained from ieee80211_alloc_hw() >> * @ac: AC number to acquire locks for >> * >> - * Release locks previously acquired by ieee80211_txq_schedule_end(). >> + * Release locks previously acquired by ieee80211_txq_schedule_end(). >> Check >> + * and remove the empty txq from rb-tree. >> */ >> void ieee80211_txq_schedule_end(struct ieee80211_hw *hw, u8 ac) >> __releases(txq_lock); >> @@ -6287,6 +6291,14 @@ void ieee80211_schedule_txq(struct ieee80211_hw >> *hw, struct ieee80211_txq *txq) >> __acquires(txq_lock) __releases(txq_lock); >> >> /** >> + * ieee80211_txqs_check - Check txqs waiting for removal >> + * >> + * @tmr: pointer as obtained from local >> + * >> + */ >> +void ieee80211_txqs_check(struct timer_list *tmr); >> + >> +/** >> * ieee80211_txq_may_transmit - check whether TXQ is allowed to >> transmit >> * >> * This function is used to check whether given txq is allowed to >> transmit by >> diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h >> index a4556f9..49aa143e 100644 >> --- a/net/mac80211/ieee80211_i.h >> +++ b/net/mac80211/ieee80211_i.h >> @@ -847,6 +847,7 @@ struct txq_info { >> struct codel_stats cstats; >> struct sk_buff_head frags; >> struct rb_node schedule_order; >> + struct list_head candidate; >> unsigned long flags; >> >> /* keep last! */ >> @@ -1145,6 +1146,8 @@ struct ieee80211_local { >> u64 airtime_v_t[IEEE80211_NUM_ACS]; >> u64 airtime_weight_sum[IEEE80211_NUM_ACS]; >> >> + struct list_head remove_list[IEEE80211_NUM_ACS]; >> + struct timer_list remove_timer; >> u16 airtime_flags; >> >> const struct ieee80211_ops *ops; >> diff --git a/net/mac80211/main.c b/net/mac80211/main.c >> index e9ffa8e..78fe24a 100644 >> --- a/net/mac80211/main.c >> +++ b/net/mac80211/main.c >> @@ -667,10 +667,15 @@ struct ieee80211_hw >> *ieee80211_alloc_hw_nm(size_t priv_data_len, >> >> for (i = 0; i < IEEE80211_NUM_ACS; i++) { >> local->active_txqs[i] = RB_ROOT_CACHED; >> + INIT_LIST_HEAD(&local->remove_list[i]); >> spin_lock_init(&local->active_txq_lock[i]); >> } >> local->airtime_flags = AIRTIME_USE_TX | AIRTIME_USE_RX; >> >> + timer_setup(&local->remove_timer, ieee80211_txqs_check, 0); >> + mod_timer(&local->remove_timer, >> + jiffies + >> msecs_to_jiffies(IEEE80211_AIRTIME_TXQ_RM_CHK_INTV_IN_MS)); >> + >> INIT_LIST_HEAD(&local->chanctx_list); >> mutex_init(&local->chanctx_mtx); >> >> @@ -1305,6 +1310,7 @@ void ieee80211_unregister_hw(struct ieee80211_hw >> *hw) >> tasklet_kill(&local->tx_pending_tasklet); >> tasklet_kill(&local->tasklet); >> >> + del_timer_sync(&local->remove_timer); >> #ifdef CONFIG_INET >> unregister_inetaddr_notifier(&local->ifa_notifier); >> #endif >> diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c >> index d00baaa..42ca010 100644 >> --- a/net/mac80211/tx.c >> +++ b/net/mac80211/tx.c >> @@ -1450,6 +1450,7 @@ void ieee80211_txq_init(struct >> ieee80211_sub_if_data *sdata, >> codel_stats_init(&txqi->cstats); >> __skb_queue_head_init(&txqi->frags); >> RB_CLEAR_NODE(&txqi->schedule_order); >> + INIT_LIST_HEAD(&txqi->candidate); >> >> txqi->txq.vif = &sdata->vif; >> >> @@ -3724,6 +3725,9 @@ void ieee80211_schedule_txq(struct ieee80211_hw >> *hw, >> >> spin_lock_bh(&local->active_txq_lock[ac]); >> >> + if (!list_empty(&txqi->candidate)) >> + list_del_init(&txqi->candidate); >> + >> if (!RB_EMPTY_NODE(&txqi->schedule_order)) >> goto out; >> >> @@ -3783,6 +3787,20 @@ static void __ieee80211_unschedule_txq(struct >> ieee80211_hw *hw, >> RB_CLEAR_NODE(&txqi->schedule_order); >> } >> >> +void ieee80211_remove_txq(struct ieee80211_hw *hw, >> + struct ieee80211_txq *txq) >> +{ >> + struct ieee80211_local *local = hw_to_local(hw); >> + struct txq_info *txqi = to_txq_info(txq); >> + >> + lockdep_assert_held(&local->active_txq_lock[txq->ac]); >> + >> + if (!RB_EMPTY_NODE(&txqi->schedule_order)) { >> + __ieee80211_unschedule_txq(hw, txq); >> + list_del_init(&txqi->candidate); >> + } >> +} >> + >> void ieee80211_unschedule_txq(struct ieee80211_hw *hw, >> struct ieee80211_txq *txq) >> __acquires(txq_lock) __releases(txq_lock) >> @@ -3790,7 +3808,7 @@ void ieee80211_unschedule_txq(struct >> ieee80211_hw *hw, >> struct ieee80211_local *local = hw_to_local(hw); >> >> spin_lock_bh(&local->active_txq_lock[txq->ac]); >> - __ieee80211_unschedule_txq(hw, txq); >> + ieee80211_remove_txq(hw, txq); >> spin_unlock_bh(&local->active_txq_lock[txq->ac]); >> } >> >> @@ -3803,11 +3821,48 @@ void ieee80211_return_txq(struct ieee80211_hw >> *hw, >> lockdep_assert_held(&local->active_txq_lock[txq->ac]); >> >> if (!RB_EMPTY_NODE(&txqi->schedule_order) && >> - (skb_queue_empty(&txqi->frags) && !txqi->tin.backlog_packets)) >> - __ieee80211_unschedule_txq(hw, txq); >> + !txq_has_queue(&txqi->txq) && >> + list_empty(&txqi->candidate)) >> + list_add_tail(&txqi->candidate, &local->remove_list[txq->ac]); >> + >> } >> EXPORT_SYMBOL(ieee80211_return_txq); >> >> +void __ieee80211_check_txqs(struct ieee80211_local *local, int ac) >> +{ >> + struct txq_info *iter, *tmp; >> + struct sta_info *sta; >> + >> + lockdep_assert_held(&local->active_txq_lock[ac]); >> + >> + list_for_each_entry_safe(iter, tmp, &local->remove_list[ac], >> + candidate) { >> + sta = container_of(iter->txq.sta, struct sta_info, sta); >> + >> + if (txq_has_queue(&iter->txq)) >> + list_del_init(&iter->candidate); >> + else >> + ieee80211_remove_txq(&local->hw, &iter->txq); >> + } >> +} >> + >> +void ieee80211_txqs_check(struct timer_list *t) >> +{ >> + struct ieee80211_local *local = from_timer(local, t, remove_timer); >> + struct txq_info *iter, *tmp; >> + struct sta_info *sta; >> + int ac; >> + >> + for (ac = 0; ac < IEEE80211_NUM_ACS; ac++) { >> + spin_lock_bh(&local->active_txq_lock[ac]); >> + __ieee80211_check_txqs(local, ac); >> + spin_unlock_bh(&local->active_txq_lock[ac]); >> + } >> + >> + mod_timer(&local->remove_timer, >> + jiffies + >> msecs_to_jiffies(IEEE80211_AIRTIME_TXQ_RM_CHK_INTV_IN_MS)); >> +} > > I'll ask the same as I did last time (where you told me to hold off > until this round): > > Why do you need the timer and the periodic check? If TXQs are added to > the remove list during the scheduling run, and __ieee80211_check_txqs() > is run from schedule_end(), isn't that sufficient to clear the list? Is it possible that a txq is not added to the remove list but then packets in it are dropped by fq_codel algo? Like the station disconnects without any notification. > > -Toke -- Yibo