On Fri, May 22, 2015 at 12:39:20AM +0200, Mark Kettenis wrote:
> The Tx descriptors have 20 "scatter-gather" slots, but two of those
> are used to transfer the command, so only 18 remain for the actual
> packet data.  So limit the number of dma segments to IWM_NUM_OF_TBS - 2.
> We use the same approach in iwn(4), except that there only one slot is
> used for the command, so it uses IWN_MAX_SCATTER - 1.
> 
> I suspect that this bug is responsible for the
> 
>   iwm0: hardware error, stopping device
> 
> errors I sometimes see when we listing long directories when ssh'ed in
> over iwm(4).  We all know ssh loves creating long fragmented mbuf
> lists.
> 
> ok?
> 

Makes sense to me. OK.

> 
> Index: if_iwm.c
> ===================================================================
> RCS file: /cvs/src/sys/dev/pci/if_iwm.c,v
> retrieving revision 1.40
> diff -u -p -r1.40 if_iwm.c
> --- if_iwm.c  21 May 2015 22:13:55 -0000      1.40
> +++ if_iwm.c  21 May 2015 22:31:46 -0000
> @@ -1113,7 +1113,8 @@ iwm_alloc_tx_ring(struct iwm_softc *sc, 
>               paddr += sizeof(struct iwm_device_cmd);
>  
>               error = bus_dmamap_create(sc->sc_dmat, MCLBYTES,
> -                 IWM_NUM_OF_TBS, MCLBYTES, 0, BUS_DMA_NOWAIT, &data->map);
> +                 IWM_NUM_OF_TBS - 2, MCLBYTES, 0, BUS_DMA_NOWAIT,
> +                 &data->map);
>               if (error != 0) {
>                       printf("%s: could not create TX buf DMA map\n", 
> DEVNAME(sc));
>                       goto fail;
> 

-- 
:wq Claudio

  • iwm(4) fix Mark Kettenis
    • Re: iwm(4) fix Claudio Jeker

Reply via email to