Bugs in wake-queue logic.

Michal Kazior michal.kazior at tieto.com
Sat Dec 5 05:42:08 PST 2015

On 04/12/2015, Ben Greear <greearb at candelatech.com> wrote:
> So, after tweaking a firmware image to actually be able to use
> all tx-buffers, then queues can actually be stopped on the host
> now.
> I'm now getting splats related to tx-queue being
> out of range.
> Why are we using vdev_id as the queue-id below?
> void ath10k_mac_vif_tx_unlock(struct ath10k_vif *arvif, int reason)
> {
>          struct ath10k *ar = arvif->ar;
>          lockdep_assert_held(&ar->htt.tx_lock);
>          WARN_ON(reason >= BITS_PER_LONG);
>          arvif->tx_paused &= ~BIT(reason);
>          if (ar->tx_paused)
>                  return;
>          if (arvif->tx_paused)
>                  return;
>          ieee80211_wake_queue(ar->hw, arvif->vdev_id);

I guess you could try replacing arvif->vdev_id with
arvif->vif->cab_queue. This along with vif->hw_queue[] share the same
queue number associated with vdev_id. Refer to the add_interface()
implementation, please.

You don't need to increase mac80211's max_queues unless you intend to
support a similar host queue control via firmware events like qca6174.


More information about the ath10k mailing list