Hi,

I have read the manual page ofbus_dmamap_load and other dmamap-load related functions. These calls will always return immediately and will not block for any reason.
Sorry for my wrong report, please ignore it.

Thanks,
Jia-Ju Bai

On 2017/6/18 15:47, Jia-Ju Bai wrote:
Thanks a lot, your advice is very helpful :)
I will submit a patch according to your advice, and update my bug report.

By the way, I have found many similar possible bugs in network drivers in FreeBSD. And they are all caused by "BUS_DMA_WAITOK" in bus_dmamap_load and other dmamap-load related functions. If my reported bugs can be quickly confirmed, I will write and submit patches for them as soon as possible.
I am looking forward to helpful comments and advice :)

Thanks,
Jia-Ju Bai

On 2017/6/18 13:31, Kevin Oberman wrote:
On Fri, Jun 16, 2017 at 2:03 AM, Jia-Ju Bai <[email protected] <mailto:[email protected]>> wrote:

    The alc driver may sleep under a mutex, and the function call
    paths in file
    "sys/dev/alc/if_alc.c" in FreeBSD 11.0 is:
    alc_resume [line 2648: acquire the mutex]
      alc_init_locked [line 2664]
        alc_init_rx_ring [line 3911]
          alc_newbuf [line 4469]
            bus_dmamap_load_mbuf_sg(BUS_DMA_WAITOK) [line 3472] -->
    may sleep

    alc_int_task [line 3330: acquire the mutex]
      alc_start_locked [line 3372]
        alc_encap [line 2942]
          bus_dmamap_load_mbuf_sg(BUS_DMA_WAITOK) [line 2780] --> may
    sleep

    The possible fix of these bugs is to set the last parameter in
    bus_dmamap_load_mbuf_sg 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.

    By the way, I am a freshman in developing FreeBSD drivers, and I
    am willing to
    submit a patch. But I do not know how to write and submit a
    patch, and where to
    submit, so I am looking forward to useful advice :)

    Jia-Ju Bai


To submit a patch, use svn to download the source from a repository. Be sure the file in your source directory is the current, unmodified file.
Edit the file or files as needed to correct the bug
Generate the diff with the command "svn diff path-to-directory-containing-file(s) > diff-file.diff"
Update the bug report attaching the patch (with a brief description)
--
Kevin Oberman, Part time kid herder and retired Network Engineer
E-mail: [email protected] <mailto:[email protected]>
PGP Fingerprint: D03FB98AFA78E3B78C1694B318AB39EF1B055683


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

Reply via email to