2013/4/2 Alan Ott <a...@signal11.us>
> When ops->xmit() fails, immediately retry. Previously the packet was sent
> to the back of the workqueue.
>
> Signed-off-by: Alan Ott <a...@signal11.us>
> ---
> net/mac802154/tx.c | 17 ++++++++---------
> 1 file changed, 8 insertions(+), 9 deletions(-)
>
> diff --git a/net/mac802154/tx.c b/net/mac802154/tx.c
> index 4e09d07..fbf937c 100644
> --- a/net/mac802154/tx.c
> +++ b/net/mac802154/tx.c
> @@ -59,19 +59,18 @@ static void mac802154_xmit_worker(struct work_struct
> *work)
> }
> }
>
> - res = xw->priv->ops->xmit(&xw->priv->hw, xw->skb);
> + do {
> + res = xw->priv->ops->xmit(&xw->priv->hw, xw->skb);
> + if (res && ++xw->xmit_attempts >=
> MAC802154_MAX_XMIT_ATTEMPTS) {
> + pr_debug("transmission failed for %d times",
> + MAC802154_MAX_XMIT_ATTEMPTS);
> + break;
> + }
> + } while (res);
>
> IIRC this 802.15.4 stack uses single-thread-work-queue and all RX/TX are
> performed by using it. Doing TX retry in the way you proposed - it's
> possible that you will block other packets pending in this queue. Despite
> on Linux is already 'slow' system to provide real-time for specific
> 802.15.4 features, I think it's not a good idea to increase nodes
> communication latency.
>
>
> out:
> mutex_unlock(&xw->priv->phy->pib_lock);
>
> - if (res) {
> - if (xw->xmit_attempts++ < MAC802154_MAX_XMIT_ATTEMPTS) {
> - queue_work(xw->priv->dev_workqueue, &xw->work);
> - return;
> - } else
> - pr_debug("transmission failed for %d times",
> - MAC802154_MAX_XMIT_ATTEMPTS);
> - }
>
> dev_kfree_skb(xw->skb);
>
> --
> 1.7.11.2
>
>
------------------------------------------------------------------------------
Minimize network downtime and maximize team effectiveness.
Reduce network management and security costs.Learn how to hire
the most talented Cisco Certified professionals. Visit the
Employer Resources Portal
http://www.cisco.com/web/learning/employer_resources/index.html
_______________________________________________
Linux-zigbee-devel mailing list
Linux-zigbee-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-zigbee-devel