* [PATCHv1 0/2] Adds support for block based flow ctrl
@ 2012-02-03 14:27 Emeltchenko Andrei
2012-02-03 14:27 ` [PATCHv1 1/2] Bluetooth: Recalculate sched HCI blk/pkt " Emeltchenko Andrei
` (2 more replies)
0 siblings, 3 replies; 9+ messages in thread
From: Emeltchenko Andrei @ 2012-02-03 14:27 UTC (permalink / raw)
To: linux-bluetooth
From: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
Split HCI scheduling for block and packet flow control.
Changes:
No change from RFC I've sent some time ago since I've got
no comments.
Andrei Emeltchenko (2):
Bluetooth: Recalculate sched HCI blk/pkt flow ctrl
Bluetooth: Helper removes duplicated code
net/bluetooth/hci_core.c | 92 ++++++++++++++++++++++++++++++++++++++++------
1 files changed, 80 insertions(+), 12 deletions(-)
--
1.7.8.3
^ permalink raw reply [flat|nested] 9+ messages in thread* [PATCHv1 1/2] Bluetooth: Recalculate sched HCI blk/pkt flow ctrl 2012-02-03 14:27 [PATCHv1 0/2] Adds support for block based flow ctrl Emeltchenko Andrei @ 2012-02-03 14:27 ` Emeltchenko Andrei 2012-02-03 16:01 ` Marcel Holtmann 2012-02-03 14:27 ` [PATCHv1 2/2] Bluetooth: Helper removes duplicated code Emeltchenko Andrei 2012-02-03 18:52 ` [PATCHv1 0/2] Adds support for block based flow ctrl Johan Hedberg 2 siblings, 1 reply; 9+ messages in thread From: Emeltchenko Andrei @ 2012-02-03 14:27 UTC (permalink / raw) To: linux-bluetooth From: Andrei Emeltchenko <andrei.emeltchenko@intel.com> Split HCI scheduling for block and packet flow control. Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com> --- net/bluetooth/hci_core.c | 85 ++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 79 insertions(+), 6 deletions(-) diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c index 76dc153..9a56a40 100644 --- a/net/bluetooth/hci_core.c +++ b/net/bluetooth/hci_core.c @@ -2384,18 +2384,19 @@ static void hci_prio_recalculate(struct hci_dev *hdev, __u8 type) } -static inline void hci_sched_acl(struct hci_dev *hdev) +static inline int __get_blocks(struct hci_dev *hdev, struct sk_buff *skb) +{ + /* Calculate count of blocks used by this packet */ + return DIV_ROUND_UP(skb->len - HCI_ACL_HDR_SIZE, hdev->block_len); +} + +static inline void hci_sched_acl_pkt(struct hci_dev *hdev) { struct hci_chan *chan; struct sk_buff *skb; int quote; unsigned int cnt; - BT_DBG("%s", hdev->name); - - if (!hci_conn_num(hdev, ACL_LINK)) - return; - if (!test_bit(HCI_RAW, &hdev->flags)) { /* ACL tx timeout must be longer than maximum * link supervision timeout (40.9 seconds) */ @@ -2435,6 +2436,78 @@ static inline void hci_sched_acl(struct hci_dev *hdev) hci_prio_recalculate(hdev, ACL_LINK); } +static inline void hci_sched_acl_blk(struct hci_dev *hdev) +{ + struct hci_chan *chan; + struct sk_buff *skb; + int quote; + unsigned int cnt; + + if (!test_bit(HCI_RAW, &hdev->flags)) { + /* ACL tx timeout must be longer than maximum + * link supervision timeout (40.9 seconds) */ + if (!hdev->block_cnt && time_after(jiffies, hdev->acl_last_tx + + msecs_to_jiffies(HCI_ACL_TX_TIMEOUT))) + hci_link_tx_to(hdev, ACL_LINK); + } + + cnt = hdev->block_cnt; + + while (hdev->block_cnt > 0 && + (chan = hci_chan_sent(hdev, ACL_LINK, "e))) { + u32 priority = (skb_peek(&chan->data_q))->priority; + while (quote > 0 && (skb = skb_peek(&chan->data_q))) { + int blocks; + + BT_DBG("chan %p skb %p len %d priority %u", chan, skb, + skb->len, skb->priority); + + /* Stop if priority has changed */ + if (skb->priority < priority) + break; + + skb = skb_dequeue(&chan->data_q); + + blocks = __get_blocks(hdev, skb); + if (blocks > hdev->block_cnt) + return; + + hci_conn_enter_active_mode(chan->conn, + bt_cb(skb)->force_active); + + hci_send_frame(skb); + hdev->acl_last_tx = jiffies; + + hdev->block_cnt -= blocks; + quote -= blocks; + + chan->sent += blocks; + chan->conn->sent += blocks; + } + } + + if (cnt != hdev->block_cnt) + hci_prio_recalculate(hdev, ACL_LINK); +} + +static inline void hci_sched_acl(struct hci_dev *hdev) +{ + BT_DBG("%s", hdev->name); + + if (!hci_conn_num(hdev, ACL_LINK)) + return; + + switch (hdev->flow_ctl_mode) { + case HCI_FLOW_CTL_MODE_PACKET_BASED: + hci_sched_acl_pkt(hdev); + break; + + case HCI_FLOW_CTL_MODE_BLOCK_BASED: + hci_sched_acl_blk(hdev); + break; + } +} + /* Schedule SCO */ static inline void hci_sched_sco(struct hci_dev *hdev) { -- 1.7.8.3 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCHv1 1/2] Bluetooth: Recalculate sched HCI blk/pkt flow ctrl 2012-02-03 14:27 ` [PATCHv1 1/2] Bluetooth: Recalculate sched HCI blk/pkt " Emeltchenko Andrei @ 2012-02-03 16:01 ` Marcel Holtmann 0 siblings, 0 replies; 9+ messages in thread From: Marcel Holtmann @ 2012-02-03 16:01 UTC (permalink / raw) To: Emeltchenko Andrei; +Cc: linux-bluetooth Hi Andrei, > Split HCI scheduling for block and packet flow control. > > Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com> > --- > net/bluetooth/hci_core.c | 85 ++++++++++++++++++++++++++++++++++++++++++--- > 1 files changed, 79 insertions(+), 6 deletions(-) Acked-by: Marcel Holtmann <marcel@holtmann.org> Regards Marcel ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCHv1 2/2] Bluetooth: Helper removes duplicated code 2012-02-03 14:27 [PATCHv1 0/2] Adds support for block based flow ctrl Emeltchenko Andrei 2012-02-03 14:27 ` [PATCHv1 1/2] Bluetooth: Recalculate sched HCI blk/pkt " Emeltchenko Andrei @ 2012-02-03 14:27 ` Emeltchenko Andrei 2012-02-03 16:03 ` Marcel Holtmann ` (2 more replies) 2012-02-03 18:52 ` [PATCHv1 0/2] Adds support for block based flow ctrl Johan Hedberg 2 siblings, 3 replies; 9+ messages in thread From: Emeltchenko Andrei @ 2012-02-03 14:27 UTC (permalink / raw) To: linux-bluetooth From: Andrei Emeltchenko <andrei.emeltchenko@intel.com> Use __check_timout helper to remove duplicated code Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com> --- net/bluetooth/hci_core.c | 31 +++++++++++++------------------ 1 files changed, 13 insertions(+), 18 deletions(-) diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c index 9a56a40..95eeae5 100644 --- a/net/bluetooth/hci_core.c +++ b/net/bluetooth/hci_core.c @@ -2390,22 +2390,25 @@ static inline int __get_blocks(struct hci_dev *hdev, struct sk_buff *skb) return DIV_ROUND_UP(skb->len - HCI_ACL_HDR_SIZE, hdev->block_len); } -static inline void hci_sched_acl_pkt(struct hci_dev *hdev) +static inline void __check_timeout(struct hci_dev *hdev, unsigned int cnt) { - struct hci_chan *chan; - struct sk_buff *skb; - int quote; - unsigned int cnt; - if (!test_bit(HCI_RAW, &hdev->flags)) { /* ACL tx timeout must be longer than maximum * link supervision timeout (40.9 seconds) */ - if (!hdev->acl_cnt && time_after(jiffies, hdev->acl_last_tx + + if (!cnt && time_after(jiffies, hdev->acl_last_tx + msecs_to_jiffies(HCI_ACL_TX_TIMEOUT))) hci_link_tx_to(hdev, ACL_LINK); } +} - cnt = hdev->acl_cnt; +static inline void hci_sched_acl_pkt(struct hci_dev *hdev) +{ + unsigned int cnt = hdev->acl_cnt; + struct hci_chan *chan; + struct sk_buff *skb; + int quote; + + __check_timeout(hdev, cnt); while (hdev->acl_cnt && (chan = hci_chan_sent(hdev, ACL_LINK, "e))) { @@ -2438,20 +2441,12 @@ static inline void hci_sched_acl_pkt(struct hci_dev *hdev) static inline void hci_sched_acl_blk(struct hci_dev *hdev) { + unsigned int cnt = hdev->block_cnt; struct hci_chan *chan; struct sk_buff *skb; int quote; - unsigned int cnt; - - if (!test_bit(HCI_RAW, &hdev->flags)) { - /* ACL tx timeout must be longer than maximum - * link supervision timeout (40.9 seconds) */ - if (!hdev->block_cnt && time_after(jiffies, hdev->acl_last_tx + - msecs_to_jiffies(HCI_ACL_TX_TIMEOUT))) - hci_link_tx_to(hdev, ACL_LINK); - } - cnt = hdev->block_cnt; + __check_timeout(hdev, cnt); while (hdev->block_cnt > 0 && (chan = hci_chan_sent(hdev, ACL_LINK, "e))) { -- 1.7.8.3 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCHv1 2/2] Bluetooth: Helper removes duplicated code 2012-02-03 14:27 ` [PATCHv1 2/2] Bluetooth: Helper removes duplicated code Emeltchenko Andrei @ 2012-02-03 16:03 ` Marcel Holtmann 2012-02-03 17:00 ` Ulisses Furquim 2012-02-03 16:52 ` Vinicius Costa Gomes 2012-02-03 17:02 ` Marcel Holtmann 2 siblings, 1 reply; 9+ messages in thread From: Marcel Holtmann @ 2012-02-03 16:03 UTC (permalink / raw) To: Emeltchenko Andrei; +Cc: linux-bluetooth Hi Andrei, > Use __check_timout helper to remove duplicated code > > Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com> > --- > net/bluetooth/hci_core.c | 31 +++++++++++++------------------ > 1 files changed, 13 insertions(+), 18 deletions(-) > > diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c > index 9a56a40..95eeae5 100644 > --- a/net/bluetooth/hci_core.c > +++ b/net/bluetooth/hci_core.c > @@ -2390,22 +2390,25 @@ static inline int __get_blocks(struct hci_dev *hdev, struct sk_buff *skb) > return DIV_ROUND_UP(skb->len - HCI_ACL_HDR_SIZE, hdev->block_len); > } > > -static inline void hci_sched_acl_pkt(struct hci_dev *hdev) > +static inline void __check_timeout(struct hci_dev *hdev, unsigned int cnt) > { > - struct hci_chan *chan; > - struct sk_buff *skb; > - int quote; > - unsigned int cnt; > - > if (!test_bit(HCI_RAW, &hdev->flags)) { > /* ACL tx timeout must be longer than maximum > * link supervision timeout (40.9 seconds) */ > - if (!hdev->acl_cnt && time_after(jiffies, hdev->acl_last_tx + > + if (!cnt && time_after(jiffies, hdev->acl_last_tx + > msecs_to_jiffies(HCI_ACL_TX_TIMEOUT))) > hci_link_tx_to(hdev, ACL_LINK); > } > +} > > - cnt = hdev->acl_cnt; > +static inline void hci_sched_acl_pkt(struct hci_dev *hdev) > +{ > + unsigned int cnt = hdev->acl_cnt; > + struct hci_chan *chan; > + struct sk_buff *skb; > + int quote; > + > + __check_timeout(hdev, cnt); > > while (hdev->acl_cnt && > (chan = hci_chan_sent(hdev, ACL_LINK, "e))) { > @@ -2438,20 +2441,12 @@ static inline void hci_sched_acl_pkt(struct hci_dev *hdev) > > static inline void hci_sched_acl_blk(struct hci_dev *hdev) > { > + unsigned int cnt = hdev->block_cnt; > struct hci_chan *chan; > struct sk_buff *skb; > int quote; > - unsigned int cnt; > - > - if (!test_bit(HCI_RAW, &hdev->flags)) { > - /* ACL tx timeout must be longer than maximum > - * link supervision timeout (40.9 seconds) */ > - if (!hdev->block_cnt && time_after(jiffies, hdev->acl_last_tx + > - msecs_to_jiffies(HCI_ACL_TX_TIMEOUT))) > - hci_link_tx_to(hdev, ACL_LINK); > - } > > - cnt = hdev->block_cnt; maybe the patch is just funnily trying to be too smart, but I am missing the cnt init here. > + __check_timeout(hdev, cnt); > > while (hdev->block_cnt > 0 && > (chan = hci_chan_sent(hdev, ACL_LINK, "e))) { Regards Marcel ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCHv1 2/2] Bluetooth: Helper removes duplicated code 2012-02-03 16:03 ` Marcel Holtmann @ 2012-02-03 17:00 ` Ulisses Furquim 0 siblings, 0 replies; 9+ messages in thread From: Ulisses Furquim @ 2012-02-03 17:00 UTC (permalink / raw) To: Marcel Holtmann; +Cc: Emeltchenko Andrei, linux-bluetooth Hi Marcel, On Fri, Feb 3, 2012 at 2:03 PM, Marcel Holtmann <marcel@holtmann.org> wrote= : > Hi Andrei, > >> Use __check_timout helper to remove duplicated code >> >> Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com> >> --- >> =A0net/bluetooth/hci_core.c | =A0 31 +++++++++++++------------------ >> =A01 files changed, 13 insertions(+), 18 deletions(-) >> >> diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c >> index 9a56a40..95eeae5 100644 >> --- a/net/bluetooth/hci_core.c >> +++ b/net/bluetooth/hci_core.c >> @@ -2390,22 +2390,25 @@ static inline int __get_blocks(struct hci_dev *h= dev, struct sk_buff *skb) >> =A0 =A0 =A0 return DIV_ROUND_UP(skb->len - HCI_ACL_HDR_SIZE, hdev->block= _len); >> =A0} >> >> -static inline void hci_sched_acl_pkt(struct hci_dev *hdev) >> +static inline void __check_timeout(struct hci_dev *hdev, unsigned int c= nt) >> =A0{ >> - =A0 =A0 struct hci_chan *chan; >> - =A0 =A0 struct sk_buff *skb; >> - =A0 =A0 int quote; >> - =A0 =A0 unsigned int cnt; >> - >> =A0 =A0 =A0 if (!test_bit(HCI_RAW, &hdev->flags)) { >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 /* ACL tx timeout must be longer than maximu= m >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0* link supervision timeout (40.9 seconds)= */ >> - =A0 =A0 =A0 =A0 =A0 =A0 if (!hdev->acl_cnt && time_after(jiffies, hdev= ->acl_last_tx + >> + =A0 =A0 =A0 =A0 =A0 =A0 if (!cnt && time_after(jiffies, hdev->acl_last= _tx + >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 msecs_to_jiffies(HCI_ACL_TX_TIMEOUT))) >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 hci_link_tx_to(hdev, ACL_LIN= K); >> =A0 =A0 =A0 } >> +} >> >> - =A0 =A0 cnt =3D hdev->acl_cnt; >> +static inline void hci_sched_acl_pkt(struct hci_dev *hdev) >> +{ >> + =A0 =A0 unsigned int cnt =3D hdev->acl_cnt; cnt is initialized here. >> + =A0 =A0 struct hci_chan *chan; >> + =A0 =A0 struct sk_buff *skb; >> + =A0 =A0 int quote; >> + >> + =A0 =A0 __check_timeout(hdev, cnt); >> >> =A0 =A0 =A0 while (hdev->acl_cnt && >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 (chan =3D hci_chan_sent(hdev= , ACL_LINK, "e))) { >> @@ -2438,20 +2441,12 @@ static inline void hci_sched_acl_pkt(struct hci_= dev *hdev) >> >> =A0static inline void hci_sched_acl_blk(struct hci_dev *hdev) >> =A0{ >> + =A0 =A0 unsigned int cnt =3D hdev->block_cnt; And cnt is initialized here, for block count. >> =A0 =A0 =A0 struct hci_chan *chan; >> =A0 =A0 =A0 struct sk_buff *skb; >> =A0 =A0 =A0 int quote; >> - =A0 =A0 unsigned int cnt; >> - >> - =A0 =A0 if (!test_bit(HCI_RAW, &hdev->flags)) { >> - =A0 =A0 =A0 =A0 =A0 =A0 /* ACL tx timeout must be longer than maximum >> - =A0 =A0 =A0 =A0 =A0 =A0 =A0* link supervision timeout (40.9 seconds) *= / >> - =A0 =A0 =A0 =A0 =A0 =A0 if (!hdev->block_cnt && time_after(jiffies, hd= ev->acl_last_tx + >> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 msecs_to_jiffies(HCI_ACL_TX_TIMEOUT))) >> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 hci_link_tx_to(hdev, ACL_LINK)= ; >> - =A0 =A0 } >> >> - =A0 =A0 cnt =3D hdev->block_cnt; > > maybe the patch is just funnily trying to be too smart, but I am missing > the cnt init here. And yes, the patch itself looks confusing but it was because of how git created the changes. I think the patch looks good. >> + =A0 =A0 __check_timeout(hdev, cnt); >> >> =A0 =A0 =A0 while (hdev->block_cnt > 0 && >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 (chan =3D hci_chan_sent(hdev= , ACL_LINK, "e))) { > > Regards > > Marcel Regards, --=20 Ulisses Furquim ProFUSION embedded systems http://profusion.mobi Mobile: +55 19 9250 0942 Skype: ulissesffs ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCHv1 2/2] Bluetooth: Helper removes duplicated code 2012-02-03 14:27 ` [PATCHv1 2/2] Bluetooth: Helper removes duplicated code Emeltchenko Andrei 2012-02-03 16:03 ` Marcel Holtmann @ 2012-02-03 16:52 ` Vinicius Costa Gomes 2012-02-03 17:02 ` Marcel Holtmann 2 siblings, 0 replies; 9+ messages in thread From: Vinicius Costa Gomes @ 2012-02-03 16:52 UTC (permalink / raw) To: Emeltchenko Andrei; +Cc: linux-bluetooth Hi Andrei, On 16:27 Fri 03 Feb, Emeltchenko Andrei wrote: > From: Andrei Emeltchenko <andrei.emeltchenko@intel.com> > > Use __check_timout helper to remove duplicated code Typo here: __check_timeout > > Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com> > --- > net/bluetooth/hci_core.c | 31 +++++++++++++------------------ > 1 files changed, 13 insertions(+), 18 deletions(-) > > diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c > index 9a56a40..95eeae5 100644 > --- a/net/bluetooth/hci_core.c > +++ b/net/bluetooth/hci_core.c > @@ -2390,22 +2390,25 @@ static inline int __get_blocks(struct hci_dev *hdev, struct sk_buff *skb) > return DIV_ROUND_UP(skb->len - HCI_ACL_HDR_SIZE, hdev->block_len); [ snip ] Cheers, -- Vinicius ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCHv1 2/2] Bluetooth: Helper removes duplicated code 2012-02-03 14:27 ` [PATCHv1 2/2] Bluetooth: Helper removes duplicated code Emeltchenko Andrei 2012-02-03 16:03 ` Marcel Holtmann 2012-02-03 16:52 ` Vinicius Costa Gomes @ 2012-02-03 17:02 ` Marcel Holtmann 2 siblings, 0 replies; 9+ messages in thread From: Marcel Holtmann @ 2012-02-03 17:02 UTC (permalink / raw) To: Emeltchenko Andrei; +Cc: linux-bluetooth Hi Andrei, > Use __check_timout helper to remove duplicated code > > Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com> > --- > net/bluetooth/hci_core.c | 31 +++++++++++++------------------ > 1 files changed, 13 insertions(+), 18 deletions(-) Reviewed-by: Ulisses Furquim <ulisses@profusion.mobi> Acked-by: Marcel Holtmann <marcel@holtmann.org> Regards Marcel ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCHv1 0/2] Adds support for block based flow ctrl 2012-02-03 14:27 [PATCHv1 0/2] Adds support for block based flow ctrl Emeltchenko Andrei 2012-02-03 14:27 ` [PATCHv1 1/2] Bluetooth: Recalculate sched HCI blk/pkt " Emeltchenko Andrei 2012-02-03 14:27 ` [PATCHv1 2/2] Bluetooth: Helper removes duplicated code Emeltchenko Andrei @ 2012-02-03 18:52 ` Johan Hedberg 2 siblings, 0 replies; 9+ messages in thread From: Johan Hedberg @ 2012-02-03 18:52 UTC (permalink / raw) To: Emeltchenko Andrei; +Cc: linux-bluetooth Hi Andrei, On Fri, Feb 03, 2012, Emeltchenko Andrei wrote: > From: Andrei Emeltchenko <andrei.emeltchenko@intel.com> > > Split HCI scheduling for block and packet flow control. > > Changes: > No change from RFC I've sent some time ago since I've got > no comments. > > Andrei Emeltchenko (2): > Bluetooth: Recalculate sched HCI blk/pkt flow ctrl > Bluetooth: Helper removes duplicated code > > net/bluetooth/hci_core.c | 92 ++++++++++++++++++++++++++++++++++++++++------ > 1 files changed, 80 insertions(+), 12 deletions(-) Both patches have been applied to my bluetooth-next tree. Thanks. Johan ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2012-02-03 18:52 UTC | newest] Thread overview: 9+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2012-02-03 14:27 [PATCHv1 0/2] Adds support for block based flow ctrl Emeltchenko Andrei 2012-02-03 14:27 ` [PATCHv1 1/2] Bluetooth: Recalculate sched HCI blk/pkt " Emeltchenko Andrei 2012-02-03 16:01 ` Marcel Holtmann 2012-02-03 14:27 ` [PATCHv1 2/2] Bluetooth: Helper removes duplicated code Emeltchenko Andrei 2012-02-03 16:03 ` Marcel Holtmann 2012-02-03 17:00 ` Ulisses Furquim 2012-02-03 16:52 ` Vinicius Costa Gomes 2012-02-03 17:02 ` Marcel Holtmann 2012-02-03 18:52 ` [PATCHv1 0/2] Adds support for block based flow ctrl Johan Hedberg
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.