The ixgb driver may sleep under a mutex, and the function call path is:
ixgb_init [acquire the mutex]
  ixgb_init_locked
    ixgb_setup_receive_structures
      ixgb_allocate_receive_structures
        ixgb_get_buf
          bus_dmamap_load(BUS_DMA_WAITOK) --> may sleep

The possible fix of these bugs is to set the last parameter in bus_dmamap_load 
to "BUS_DMA_NOWAIT".

This bug is found by a static analysis tool written by myself, and it is 
checked by my review of the FreeBSD code.

Signed-off-by: Jia-Ju Bai <[email protected]>
---
 sys/dev/ixgb/if_ixgb.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sys/dev/ixgb/if_ixgb.c b/sys/dev/ixgb/if_ixgb.c
index 430c13c72d1..e6d02dd172e 100644
--- a/sys/dev/ixgb/if_ixgb.c
+++ b/sys/dev/ixgb/if_ixgb.c
@@ -1811,7 +1811,7 @@ ixgb_get_buf(int i, struct adapter * adapter,
         */
        error = bus_dmamap_load(adapter->rxtag, rx_buffer->map,
                                mtod(mp, void *), mp->m_len,
-                               ixgb_dmamap_cb, &paddr, 0);
+                               ixgb_dmamap_cb, &paddr, BUS_DMA_NOWAIT);
        if (error) {
                m_free(mp);
                return (error);
-- 
2.13.0


_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "[email protected]"

Reply via email to