Message ID | 20200729155234.547679-1-brian.gix@intel.com (mailing list archive) |
---|---|
State | Accepted |
Headers | show |
Series | [BlueZ] mesh: Add guard against wedging outbound queue | expand |
Applied On Wed, 2020-07-29 at 08:52 -0700, Brian Gix wrote: > When using HCI command chains, the first packet send that starts an > outbound sequence needs to still exist when command chain completes, or > the outbound queue will wedge. The simplest solution is to send packets > at least twice on an empty queue, if there is a chance it could be canceled. > --- > mesh/mesh-io-generic.c | 8 ++++++++ > 1 file changed, 8 insertions(+) > > diff --git a/mesh/mesh-io-generic.c b/mesh/mesh-io-generic.c > index 86952516e..4b26b1181 100644 > --- a/mesh/mesh-io-generic.c > +++ b/mesh/mesh-io-generic.c > @@ -714,6 +714,14 @@ static bool send_tx(struct mesh_io *io, struct mesh_io_send_info *info, > sending = !l_queue_isempty(pvt->tx_pkts); > > l_queue_push_tail(pvt->tx_pkts, tx); > + > + /* > + * If transmitter is idle, send packets at least twice to > + * guard against in-line cancelation of HCI command chain. > + */ > + if (info->type == MESH_IO_TIMING_TYPE_GENERAL && !sending && > + tx->info.u.gen.cnt == 1) > + tx->info.u.gen.cnt++; > } > > if (!sending) {
diff --git a/mesh/mesh-io-generic.c b/mesh/mesh-io-generic.c index 86952516e..4b26b1181 100644 --- a/mesh/mesh-io-generic.c +++ b/mesh/mesh-io-generic.c @@ -714,6 +714,14 @@ static bool send_tx(struct mesh_io *io, struct mesh_io_send_info *info, sending = !l_queue_isempty(pvt->tx_pkts); l_queue_push_tail(pvt->tx_pkts, tx); + + /* + * If transmitter is idle, send packets at least twice to + * guard against in-line cancelation of HCI command chain. + */ + if (info->type == MESH_IO_TIMING_TYPE_GENERAL && !sending && + tx->info.u.gen.cnt == 1) + tx->info.u.gen.cnt++; } if (!sending) {