On Thursday, June 20, 2013 03:45:25 PM Kirshenbaum Erez wrote: > The vring index (MAC queue id) must be set in all TX descriptors > otherwise HW will fail to release descriptors for a specific vring > (disconnect or vring switch flows). > This is normally occurs when fragmentation required, if vring index > will not be the same for all SKB descriptors HW will fail to flush this > MAC queue. > > Signed-off-by: Kirshenbaum Erez <erezk@xxxxxxxxxxxx> > --- > drivers/net/wireless/ath/wil6210/txrx.c | 9 +++++---- > 1 file changed, 5 insertions(+), 4 deletions(-) > > diff --git a/drivers/net/wireless/ath/wil6210/txrx.c b/drivers/net/wireless/ath/wil6210/txrx.c > index e1c492b..b79ba10 100644 > --- a/drivers/net/wireless/ath/wil6210/txrx.c > +++ b/drivers/net/wireless/ath/wil6210/txrx.c > @@ -621,7 +621,8 @@ static struct vring *wil_find_tx_vring(struct wil6210_priv *wil, > return NULL; > } > > -static int wil_tx_desc_map(struct vring_tx_desc *d, dma_addr_t pa, u32 len) > +static int wil_tx_desc_map(struct vring_tx_desc *d, dma_addr_t pa, u32 len, > + int vring_index) > { > wil_desc_addr_set(&d->dma.addr, pa); > d->dma.ip_length = 0; > @@ -631,6 +632,7 @@ static int wil_tx_desc_map(struct vring_tx_desc *d, dma_addr_t pa, u32 len) > d->dma.status = 0; /* BIT(0) should be 0 for HW_OWNED */ > d->dma.length = cpu_to_le16((u16)len); > d->dma.d0 = 0; Then, remove line above > + d->dma.d0 = (vring_index << DMA_CFG_DESC_TX_0_QID_POS); > d->mac.d[0] = 0; > d->mac.d[1] = 0; > d->mac.d[2] = 0; <skip> The rest looks fine Thanks, Vladimir -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html