* [RFC v2 4/5] Bluetooth: Schedule links by tx buffer use @ 2011-08-18 0:37 Peter Hurley 2011-08-18 8:18 ` Luiz Augusto von Dentz 0 siblings, 1 reply; 2+ messages in thread From: Peter Hurley @ 2011-08-18 0:37 UTC (permalink / raw) To: linux-bluetooth Q29tYmluZSB0eCBsaW5rIHR5cGVzIHdoaWNoIHVzZSB0aGUgc2FtZSB0eCBidWZmZXJzLiBTbyBT Q08gYW5kIEVTQ08NCmxpbmtzIGFyZSBzY2hlZHVsZWQgdG9nZXRoZXIgYW5kIGFsc28gc2NoZWR1 bGUgTEUgbGlua3Mgd2l0aCBBQ0wNCmxpbmtzICppZiogdGhlIGNvbnRyb2xsZXIgdXNlcyBzaGFy ZWQgQUNMIGJ1ZmZlcnMgZm9yIExFIHR4Lg0KDQpUaGlzIGFsc28gZml4ZXMgdHggdGltZW91dHMg aWYgdGhlIGNvbnRyb2xsZXIgdXNlcyBzaGFyZWQgQUNMIGJ1ZmZlcnMNCmZvciBMRSB0eC4NCg0K U2lnbmVkLW9mZi1ieTogUGV0ZXIgSHVybGV5IDxwZXRlckBodXJsZXlzb2Z0d2FyZS5jb20+DQot LS0NCiBpbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpLmggfCAgIDEwICsrKysrKw0KIG5ldC9ibHVl dG9vdGgvaGNpX2NvcmUuYyAgICB8ICAgNjkgKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQ0KIDIgZmlsZXMgY2hhbmdlZCwgMzcgaW5zZXJ0aW9ucygrKSwgNDIgZGVs ZXRpb25zKC0pDQoNCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpLmggYi9p bmNsdWRlL25ldC9ibHVldG9vdGgvaGNpLmgNCmluZGV4IDBjMjAyMjcuLmM4MzE5ZTUgMTAwNjQ0 DQotLS0gYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpLmgNCisrKyBiL2luY2x1ZGUvbmV0L2Js dWV0b290aC9oY2kuaA0KQEAgLTE3NCw2ICsxNzQsMTYgQEAgZW51bSB7DQogLyogTG93IEVuZXJn eSBsaW5rcyBkbyBub3QgaGF2ZSBkZWZpbmVkIGxpbmsgdHlwZS4gVXNlIGludmVudGVkIG9uZSAq Lw0KICNkZWZpbmUgTEVfTElOSwkJMHg4MA0KIA0KKyNkZWZpbmUgTEVfTUFTSwkJMHg4MA0KKyNk ZWZpbmUgU0NPX01BU0sJMHgwMQ0KKyNkZWZpbmUgQUNMX01BU0sJMHgwMg0KKyNkZWZpbmUgRVND T19NQVNLCTB4MDQNCisNCitzdGF0aWMgaW5saW5lIF9fdTggbGlua19tYXNrKF9fdTggdHlwZSkN Cit7DQorCXJldHVybiB0eXBlIDwgTEVfTElOSyA/IDEgPDwgdHlwZSA6IExFX01BU0s7DQorfQ0K Kw0KIC8qIExNUCBmZWF0dXJlcyAqLw0KICNkZWZpbmUgTE1QXzNTTE9UCTB4MDENCiAjZGVmaW5l IExNUF81U0xPVAkweDAyDQpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oY2lfY29yZS5jIGIv bmV0L2JsdWV0b290aC9oY2lfY29yZS5jDQppbmRleCBiMmExYjlhLi5jOWI0NGM1IDEwMDY0NA0K LS0tIGEvbmV0L2JsdWV0b290aC9oY2lfY29yZS5jDQorKysgYi9uZXQvYmx1ZXRvb3RoL2hjaV9j b3JlLmMNCkBAIC0xNzk4LDcgKzE3OTgsNyBAQCBFWFBPUlRfU1lNQk9MKGhjaV9zZW5kX3Njbyk7 DQogLyogLS0tLSBIQ0kgVFggdGFzayAob3V0Z29pbmcgZGF0YSkgLS0tLSAqLw0KIA0KIC8qIEhD SSBDb25uZWN0aW9uIHNjaGVkdWxlciAqLw0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IGhjaV9jb25u ICpoY2lfbG93X3NlbnQoc3RydWN0IGhjaV9kZXYgKmhkZXYsIF9fdTggdHlwZSwNCitzdGF0aWMg aW5saW5lIHN0cnVjdCBoY2lfY29ubiAqaGNpX2xvd19zZW50KHN0cnVjdCBoY2lfZGV2ICpoZGV2 LCBfX3U4IHNlbGVjdCwNCiAJCQkJCQkJaW50IGNudCwgaW50ICpxdW90ZSkNCiB7DQogCXN0cnVj dCBoY2lfY29ubl9oYXNoICpoID0gJmhkZXYtPmNvbm5faGFzaDsNCkBAIC0xODEyLDcgKzE4MTIs MTAgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgaGNpX2Nvbm4gKmhjaV9sb3dfc2VudChzdHJ1Y3Qg aGNpX2RldiAqaGRldiwgX191OCB0eXBlLA0KIAkJc3RydWN0IGhjaV9jb25uICpjOw0KIAkJYyA9 IGxpc3RfZW50cnkocCwgc3RydWN0IGhjaV9jb25uLCBsaXN0KTsNCiANCi0JCWlmIChjLT50eXBl ICE9IHR5cGUgfHwgc2tiX3F1ZXVlX2VtcHR5KCZjLT5kYXRhX3EpKQ0KKwkJaWYgKGxpbmtfbWFz ayhjLT50eXBlKSAmIH5zZWxlY3QpDQorCQkJY29udGludWU7DQorDQorCQlpZiAoc2tiX3F1ZXVl X2VtcHR5KCZjLT5kYXRhX3EpKQ0KIAkJCWNvbnRpbnVlOw0KIA0KIAkJaWYgKGMtPnN0YXRlICE9 IEJUX0NPTk5FQ1RFRCAmJiBjLT5zdGF0ZSAhPSBCVF9DT05GSUcpDQpAQCAtMTgzMyw3ICsxODM2 LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgaGNpX2Nvbm4gKmhjaV9sb3dfc2VudChzdHJ1Y3Qg aGNpX2RldiAqaGRldiwgX191OCB0eXBlLA0KIAlyZXR1cm4gY29ubjsNCiB9DQogDQotc3RhdGlj IGlubGluZSB2b2lkIGhjaV9saW5rX3R4X3RvKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBfX3U4IHR5 cGUpDQorc3RhdGljIGlubGluZSB2b2lkIGhjaV9saW5rX3R4X3RvKHN0cnVjdCBoY2lfZGV2ICpo ZGV2LCBfX3U4IHNlbGVjdCkNCiB7DQogCXN0cnVjdCBoY2lfY29ubl9oYXNoICpoID0gJmhkZXYt PmNvbm5faGFzaDsNCiAJc3RydWN0IGxpc3RfaGVhZCAqcDsNCkBAIC0xODQ0LDcgKzE4NDcsNyBA QCBzdGF0aWMgaW5saW5lIHZvaWQgaGNpX2xpbmtfdHhfdG8oc3RydWN0IGhjaV9kZXYgKmhkZXYs IF9fdTggdHlwZSkNCiAJLyogS2lsbCBzdGFsbGVkIGNvbm5lY3Rpb25zICovDQogCWxpc3RfZm9y X2VhY2gocCwgJmgtPmxpc3QpIHsNCiAJCWMgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCBoY2lfY29u biwgbGlzdCk7DQotCQlpZiAoYy0+dHlwZSA9PSB0eXBlICYmIGMtPnNlbnQpIHsNCisJCWlmIChs aW5rX21hc2soYy0+dHlwZSkgJiBzZWxlY3QgJiYgYy0+c2VudCkgew0KIAkJCUJUX0VSUigiJXMg a2lsbGluZyBzdGFsbGVkIGNvbm5lY3Rpb24gJXMiLA0KIAkJCQloZGV2LT5uYW1lLCBiYXRvc3Ry KCZjLT5kc3QpKTsNCiAJCQloY2lfYWNsX2Rpc2Nvbm4oYywgMHgxMyk7DQpAQCAtMTg1OCw2ICsx ODYxLDExIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBoY2lfc2NoZWRfYWNsKHN0cnVjdCBoY2lfZGV2 ICpoZGV2KQ0KIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOw0KIAlpbnQgcXVvdGUgPSAwOw0KIAlpbnQg Y250ID0gaGRldi0+YWNsX2NudDsNCisJX191OCBzZWxlY3QgPSBBQ0xfTUFTSzsNCisNCisJLyog QWxzbyBzZWxlY3QgTEUgbGlua3MgaWYgQUNMIGJ1ZmZlcnMgYXJlIHNoYXJlZCAqLw0KKwlpZiAo IWhkZXYtPmxlX3BrdHMpDQorCQlzZWxlY3QgfD0gTEVfTUFTSzsNCiANCiAJQlRfREJHKCIlcyIs IGhkZXYtPm5hbWUpOw0KIA0KQEAgLTE4NjUsMTQgKzE4NzMsMTUgQEAgc3RhdGljIGlubGluZSB2 b2lkIGhjaV9zY2hlZF9hY2woc3RydWN0IGhjaV9kZXYgKmhkZXYpDQogCQkvKiBBQ0wgdHggdGlt ZW91dCBtdXN0IGJlIGxvbmdlciB0aGFuIG1heGltdW0NCiAJCSAqIGxpbmsgc3VwZXJ2aXNpb24g dGltZW91dCAoNDAuOSBzZWNvbmRzKSAqLw0KIAkJaWYgKCFjbnQgJiYgdGltZV9hZnRlcihqaWZm aWVzLCBoZGV2LT5hY2xfbGFzdF90eCArIEhaICogNDUpKQ0KLQkJCWhjaV9saW5rX3R4X3RvKGhk ZXYsIEFDTF9MSU5LKTsNCisJCQloY2lfbGlua190eF90byhoZGV2LCBzZWxlY3QpOw0KIAl9DQog DQotCXdoaWxlIChjbnQgJiYgKGNvbm4gPSBoY2lfbG93X3NlbnQoaGRldiwgQUNMX0xJTkssIGNu dCwgJnF1b3RlKSkpIHsNCisJd2hpbGUgKGNudCAmJiAoY29ubiA9IGhjaV9sb3dfc2VudChoZGV2 LCBzZWxlY3QsIGNudCwgJnF1b3RlKSkpIHsNCiAJCXdoaWxlIChxdW90ZS0tICYmIChza2IgPSBz a2JfZGVxdWV1ZSgmY29ubi0+ZGF0YV9xKSkpIHsNCiAJCQlCVF9EQkcoInNrYiAlcCBsZW4gJWQi LCBza2IsIHNrYi0+bGVuKTsNCiANCi0JCQloY2lfY29ubl9lbnRlcl9hY3RpdmVfbW9kZShjb25u KTsNCisJCQlpZiAoY29ubi0+dHlwZSA9PSBBQ0xfTElOSykNCisJCQkJaGNpX2Nvbm5fZW50ZXJf YWN0aXZlX21vZGUoY29ubik7DQogDQogCQkJaGNpX3NlbmRfZnJhbWUoc2tiKTsNCiAJCQloZGV2 LT5hY2xfbGFzdF90eCA9IGppZmZpZXM7DQpAQCAtMTg5MSwzMSArMTkwMCwxMSBAQCBzdGF0aWMg aW5saW5lIHZvaWQgaGNpX3NjaGVkX3NjbyhzdHJ1Y3QgaGNpX2RldiAqaGRldikNCiAJc3RydWN0 IHNrX2J1ZmYgKnNrYjsNCiAJaW50IHF1b3RlID0gMDsNCiAJaW50IGNudCA9IGhkZXYtPnNjb19j bnQ7DQorCV9fdTggc2VsZWN0ID0gU0NPX01BU0sgfCBFU0NPX01BU0s7DQogDQogCUJUX0RCRygi JXMiLCBoZGV2LT5uYW1lKTsNCiANCi0Jd2hpbGUgKGNudCAmJiAoY29ubiA9IGhjaV9sb3dfc2Vu dChoZGV2LCBTQ09fTElOSywgY250LCAmcXVvdGUpKSkgew0KLQkJd2hpbGUgKHF1b3RlLS0gJiYg KHNrYiA9IHNrYl9kZXF1ZXVlKCZjb25uLT5kYXRhX3EpKSkgew0KLQkJCUJUX0RCRygic2tiICVw IGxlbiAlZCIsIHNrYiwgc2tiLT5sZW4pOw0KLQkJCWhjaV9zZW5kX2ZyYW1lKHNrYik7DQotDQot CQkJY29ubi0+c2VudCsrOw0KLQkJCWlmIChjb25uLT5zZW50ID09IH4wKQ0KLQkJCQljb25uLT5z ZW50ID0gMDsNCi0JCX0NCi0JfQ0KLX0NCi0NCi1zdGF0aWMgaW5saW5lIHZvaWQgaGNpX3NjaGVk X2VzY28oc3RydWN0IGhjaV9kZXYgKmhkZXYpDQotew0KLQlzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm47 DQotCXN0cnVjdCBza19idWZmICpza2I7DQotCWludCBxdW90ZSA9IDA7DQotCWludCBjbnQgPSBo ZGV2LT5zY29fY250Ow0KLQ0KLQlCVF9EQkcoIiVzIiwgaGRldi0+bmFtZSk7DQotDQotCXdoaWxl IChjbnQgJiYgKGNvbm4gPSBoY2lfbG93X3NlbnQoaGRldiwgRVNDT19MSU5LLCBjbnQsICZxdW90 ZSkpKSB7DQorCXdoaWxlIChjbnQgJiYgKGNvbm4gPSBoY2lfbG93X3NlbnQoaGRldiwgc2VsZWN0 LCBjbnQsICZxdW90ZSkpKSB7DQogCQl3aGlsZSAocXVvdGUtLSAmJiAoc2tiID0gc2tiX2RlcXVl dWUoJmNvbm4tPmRhdGFfcSkpKSB7DQogCQkJQlRfREJHKCJza2IgJXAgbGVuICVkIiwgc2tiLCBz a2ItPmxlbik7DQogCQkJaGNpX3NlbmRfZnJhbWUoc2tiKTsNCkBAIC0xOTMyLDE5ICsxOTIxLDE4 IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBoY2lfc2NoZWRfbGUoc3RydWN0IGhjaV9kZXYgKmhkZXYp DQogCXN0cnVjdCBoY2lfY29ubiAqY29ubjsNCiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsNCiAJaW50 IHF1b3RlID0gMDsNCi0JaW50IGNudCA9IGhkZXYtPmxlX3BrdHMgPyBoZGV2LT5sZV9jbnQgOiBo ZGV2LT5hY2xfY250Ow0KKwlpbnQgY250ID0gaGRldi0+bGVfY250Ow0KIA0KIAlCVF9EQkcoIiVz IiwgaGRldi0+bmFtZSk7DQogDQogCWlmICghdGVzdF9iaXQoSENJX1JBVywgJmhkZXYtPmZsYWdz KSkgew0KIAkJLyogTEUgdHggdGltZW91dCBtdXN0IGJlIGxvbmdlciB0aGFuIG1heGltdW0NCiAJ CSAqIGxpbmsgc3VwZXJ2aXNpb24gdGltZW91dCAoNDAuOSBzZWNvbmRzKSAqLw0KLQkJaWYgKCFo ZGV2LT5sZV9jbnQgJiYgaGRldi0+bGVfcGt0cyAmJg0KLQkJCQl0aW1lX2FmdGVyKGppZmZpZXMs IGhkZXYtPmxlX2xhc3RfdHggKyBIWiAqIDQ1KSkNCi0JCQloY2lfbGlua190eF90byhoZGV2LCBM RV9MSU5LKTsNCisJCWlmICghY250ICYmIHRpbWVfYWZ0ZXIoamlmZmllcywgaGRldi0+bGVfbGFz dF90eCArIEhaICogNDUpKQ0KKwkJCWhjaV9saW5rX3R4X3RvKGhkZXYsIExFX01BU0spOw0KIAl9 DQogDQotCXdoaWxlIChjbnQgJiYgKGNvbm4gPSBoY2lfbG93X3NlbnQoaGRldiwgTEVfTElOSywg Y250LCAmcXVvdGUpKSkgew0KKwl3aGlsZSAoY250ICYmIChjb25uID0gaGNpX2xvd19zZW50KGhk ZXYsIExFX01BU0ssIGNudCwgJnF1b3RlKSkpIHsNCiAJCXdoaWxlIChxdW90ZS0tICYmIChza2Ig PSBza2JfZGVxdWV1ZSgmY29ubi0+ZGF0YV9xKSkpIHsNCiAJCQlCVF9EQkcoInNrYiAlcCBsZW4g JWQiLCBza2IsIHNrYi0+bGVuKTsNCiANCkBAIC0xOTU1LDEwICsxOTQzLDcgQEAgc3RhdGljIGlu bGluZSB2b2lkIGhjaV9zY2hlZF9sZShzdHJ1Y3QgaGNpX2RldiAqaGRldikNCiAJCQljb25uLT5z ZW50Kys7DQogCQl9DQogCX0NCi0JaWYgKGhkZXYtPmxlX3BrdHMpDQotCQloZGV2LT5sZV9jbnQg PSBjbnQ7DQotCWVsc2UNCi0JCWhkZXYtPmFjbF9jbnQgPSBjbnQ7DQorCWhkZXYtPmxlX2NudCA9 IGNudDsNCiB9DQogDQogc3RhdGljIHZvaWQgaGNpX3R4X3Rhc2sodW5zaWduZWQgbG9uZyBhcmcp DQpAQCAtMTk3MywxNCArMTk1OCwxNCBAQCBzdGF0aWMgdm9pZCBoY2lfdHhfdGFzayh1bnNpZ25l ZCBsb25nIGFyZykNCiANCiAJLyogU2NoZWR1bGUgcXVldWVzIGFuZCBzZW5kIHN0dWZmIHRvIEhD SSBkcml2ZXIgKi8NCiANCisJLyogQWxzbyBzY2hlZHVsZXMgTEUgbGlua3MgaWYgYWNsIGJ1ZmZl cnMgYXJlIHNoYXJlZCAqLw0KIAloY2lfc2NoZWRfYWNsKGhkZXYpOw0KIA0KKwkvKiBBbHNvIHNj aGVkdWxlcyBlc2NvIGxpbmtzICovDQogCWhjaV9zY2hlZF9zY28oaGRldik7DQogDQotCWhjaV9z Y2hlZF9lc2NvKGhkZXYpOw0KLQ0KLQkvKiBPbmx5IHNjaGVkdWxlIGxlIGxpbmtzIGlmIGRldmlj ZSBpcyBsZS1jYXBhYmxlICovDQotCWlmIChsbXBfbGVfY2FwYWJsZShoZGV2KSkNCisJLyogT25s eSBzY2hlZHVsZSBMRSBsaW5rcyBoZXJlIGlmIGFjbCBidWZmZXJzIGFyZSBub3Qgc2hhcmVkICov DQorCWlmIChoZGV2LT5sZV9wa3RzKQ0KIAkJaGNpX3NjaGVkX2xlKGhkZXYpOw0KIA0KIAkvKiBT ZW5kIG5leHQgcXVldWVkIHJhdyAodW5rbm93biB0eXBlKSBwYWNrZXQgKi8NCi0tIA0KMS43LjQu MQ0KDQo= ^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [RFC v2 4/5] Bluetooth: Schedule links by tx buffer use 2011-08-18 0:37 [RFC v2 4/5] Bluetooth: Schedule links by tx buffer use Peter Hurley @ 2011-08-18 8:18 ` Luiz Augusto von Dentz 0 siblings, 0 replies; 2+ messages in thread From: Luiz Augusto von Dentz @ 2011-08-18 8:18 UTC (permalink / raw) To: Peter Hurley; +Cc: linux-bluetooth Hi Peter, On Thu, Aug 18, 2011 at 3:37 AM, Peter Hurley <peter@hurleysoftware.com> wrote: > Combine tx link types which use the same tx buffers. So SCO and ESCO > links are scheduled together and also schedule LE links with ACL > links *if* the controller uses shared ACL buffers for LE tx. > > This also fixes tx timeouts if the controller uses shared ACL buffers > for LE tx. > > Signed-off-by: Peter Hurley <peter@hurleysoftware.com> > --- > include/net/bluetooth/hci.h | 10 ++++++ > net/bluetooth/hci_core.c | 69 +++++++++++++++++-------------------------- > 2 files changed, 37 insertions(+), 42 deletions(-) > > diff --git a/include/net/bluetooth/hci.h b/include/net/bluetooth/hci.h > index 0c20227..c8319e5 100644 > --- a/include/net/bluetooth/hci.h > +++ b/include/net/bluetooth/hci.h > @@ -174,6 +174,16 @@ enum { > /* Low Energy links do not have defined link type. Use invented one */ > #define LE_LINK 0x80 > > +#define LE_MASK 0x80 > +#define SCO_MASK 0x01 > +#define ACL_MASK 0x02 > +#define ESCO_MASK 0x04 > + > +static inline __u8 link_mask(__u8 type) > +{ > + return type < LE_LINK ? 1 << type : LE_MASK; > +} > + > /* LMP features */ > #define LMP_3SLOT 0x01 > #define LMP_5SLOT 0x02 > diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c > index b2a1b9a..c9b44c5 100644 > --- a/net/bluetooth/hci_core.c > +++ b/net/bluetooth/hci_core.c > @@ -1798,7 +1798,7 @@ EXPORT_SYMBOL(hci_send_sco); > /* ---- HCI TX task (outgoing data) ---- */ > > /* HCI Connection scheduler */ > -static inline struct hci_conn *hci_low_sent(struct hci_dev *hdev, __u8 type, > +static inline struct hci_conn *hci_low_sent(struct hci_dev *hdev, __u8 select, > int cnt, int *quote) > { > struct hci_conn_hash *h = &hdev->conn_hash; > @@ -1812,7 +1812,10 @@ static inline struct hci_conn *hci_low_sent(struct hci_dev *hdev, __u8 type, > struct hci_conn *c; > c = list_entry(p, struct hci_conn, list); > > - if (c->type != type || skb_queue_empty(&c->data_q)) > + if (link_mask(c->type) & ~select) > + continue; > + > + if (skb_queue_empty(&c->data_q)) > continue; > > if (c->state != BT_CONNECTED && c->state != BT_CONFIG) > @@ -1833,7 +1836,7 @@ static inline struct hci_conn *hci_low_sent(struct hci_dev *hdev, __u8 type, > return conn; > } > > -static inline void hci_link_tx_to(struct hci_dev *hdev, __u8 type) > +static inline void hci_link_tx_to(struct hci_dev *hdev, __u8 select) > { > struct hci_conn_hash *h = &hdev->conn_hash; > struct list_head *p; > @@ -1844,7 +1847,7 @@ static inline void hci_link_tx_to(struct hci_dev *hdev, __u8 type) > /* Kill stalled connections */ > list_for_each(p, &h->list) { > c = list_entry(p, struct hci_conn, list); > - if (c->type == type && c->sent) { > + if (link_mask(c->type) & select && c->sent) { > BT_ERR("%s killing stalled connection %s", > hdev->name, batostr(&c->dst)); > hci_acl_disconn(c, 0x13); > @@ -1858,6 +1861,11 @@ static inline void hci_sched_acl(struct hci_dev *hdev) > struct sk_buff *skb; > int quote = 0; > int cnt = hdev->acl_cnt; > + __u8 select = ACL_MASK; > + > + /* Also select LE links if ACL buffers are shared */ > + if (!hdev->le_pkts) > + select |= LE_MASK; > > BT_DBG("%s", hdev->name); > > @@ -1865,14 +1873,15 @@ static inline void hci_sched_acl(struct hci_dev *hdev) > /* ACL tx timeout must be longer than maximum > * link supervision timeout (40.9 seconds) */ > if (!cnt && time_after(jiffies, hdev->acl_last_tx + HZ * 45)) > - hci_link_tx_to(hdev, ACL_LINK); > + hci_link_tx_to(hdev, select); > } > > - while (cnt && (conn = hci_low_sent(hdev, ACL_LINK, cnt, "e))) { > + while (cnt && (conn = hci_low_sent(hdev, select, cnt, "e))) { > while (quote-- && (skb = skb_dequeue(&conn->data_q))) { > BT_DBG("skb %p len %d", skb, skb->len); > > - hci_conn_enter_active_mode(conn); > + if (conn->type == ACL_LINK) > + hci_conn_enter_active_mode(conn); > > hci_send_frame(skb); > hdev->acl_last_tx = jiffies; > @@ -1891,31 +1900,11 @@ static inline void hci_sched_sco(struct hci_dev *hdev) > struct sk_buff *skb; > int quote = 0; > int cnt = hdev->sco_cnt; > + __u8 select = SCO_MASK | ESCO_MASK; > > BT_DBG("%s", hdev->name); > > - while (cnt && (conn = hci_low_sent(hdev, SCO_LINK, cnt, "e))) { > - while (quote-- && (skb = skb_dequeue(&conn->data_q))) { > - BT_DBG("skb %p len %d", skb, skb->len); > - hci_send_frame(skb); > - > - conn->sent++; > - if (conn->sent == ~0) > - conn->sent = 0; > - } > - } > -} > - > -static inline void hci_sched_esco(struct hci_dev *hdev) > -{ > - struct hci_conn *conn; > - struct sk_buff *skb; > - int quote = 0; > - int cnt = hdev->sco_cnt; > - > - BT_DBG("%s", hdev->name); > - > - while (cnt && (conn = hci_low_sent(hdev, ESCO_LINK, cnt, "e))) { > + while (cnt && (conn = hci_low_sent(hdev, select, cnt, "e))) { > while (quote-- && (skb = skb_dequeue(&conn->data_q))) { > BT_DBG("skb %p len %d", skb, skb->len); > hci_send_frame(skb); > @@ -1932,19 +1921,18 @@ static inline void hci_sched_le(struct hci_dev *hdev) > struct hci_conn *conn; > struct sk_buff *skb; > int quote = 0; > - int cnt = hdev->le_pkts ? hdev->le_cnt : hdev->acl_cnt; > + int cnt = hdev->le_cnt; > > BT_DBG("%s", hdev->name); > > if (!test_bit(HCI_RAW, &hdev->flags)) { > /* LE tx timeout must be longer than maximum > * link supervision timeout (40.9 seconds) */ > - if (!hdev->le_cnt && hdev->le_pkts && > - time_after(jiffies, hdev->le_last_tx + HZ * 45)) > - hci_link_tx_to(hdev, LE_LINK); > + if (!cnt && time_after(jiffies, hdev->le_last_tx + HZ * 45)) > + hci_link_tx_to(hdev, LE_MASK); > } > > - while (cnt && (conn = hci_low_sent(hdev, LE_LINK, cnt, "e))) { > + while (cnt && (conn = hci_low_sent(hdev, LE_MASK, cnt, "e))) { > while (quote-- && (skb = skb_dequeue(&conn->data_q))) { > BT_DBG("skb %p len %d", skb, skb->len); > > @@ -1955,10 +1943,7 @@ static inline void hci_sched_le(struct hci_dev *hdev) > conn->sent++; > } > } > - if (hdev->le_pkts) > - hdev->le_cnt = cnt; > - else > - hdev->acl_cnt = cnt; > + hdev->le_cnt = cnt; > } > > static void hci_tx_task(unsigned long arg) > @@ -1973,14 +1958,14 @@ static void hci_tx_task(unsigned long arg) > > /* Schedule queues and send stuff to HCI driver */ > > + /* Also schedules LE links if acl buffers are shared */ > hci_sched_acl(hdev); > > + /* Also schedules esco links */ > hci_sched_sco(hdev); > > - hci_sched_esco(hdev); > - > - /* Only schedule le links if device is le-capable */ > - if (lmp_le_capable(hdev)) > + /* Only schedule LE links here if acl buffers are not shared */ > + if (hdev->le_pkts) > hci_sched_le(hdev); > > /* Send next queued raw (unknown type) packet */ > -- > 1.7.4.1 > > I wonder if it wouldn't be simpler to just have another type e.g. sched_type in hci_conn, so when initializing the connection we already define which sched_type to use e.g. for LE sched_type = hdev->le_pkts ? LE_LINK : ACL_LINK. -- Luiz Augusto von Dentz ^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2011-08-18 8:18 UTC | newest] Thread overview: 2+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2011-08-18 0:37 [RFC v2 4/5] Bluetooth: Schedule links by tx buffer use Peter Hurley 2011-08-18 8:18 ` Luiz Augusto von Dentz
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.