[Bug 256482] [genet] gen_encap() dma loads into active map when 'tx_queue' is full

[email protected]
Newsgroups gmane.os.freebsd.devel.arm
Message-ID <[email protected]/bugzilla/>
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=256482

            Bug ID: 256482
           Summary: [genet] gen_encap() dma loads into active map when
                    'tx_queue' is full
           Product: Base System
           Version: CURRENT
          Hardware: arm64
                OS: Any
            Status: New
          Severity: Affects Only Me
          Priority: ---
         Component: arm
          Assignee: [email protected]
          Reporter: [email protected]

Created attachment 225638
  --> https://bugs.freebsd.org/bugzilla/attachment.cgi?id=225638&action=edit
Potential Fix

In gen_encap() #n1053 it always calls bus_dmamap_load_mbuf_sg() into 'map'
(which is the current tx_queue).  If the tx_queue is full, it will load with a
'map' that already has a currently active mapping.

https://www.freebsd.org/cgi/man.cgi?query=busdma&sektion=9
bus_dmamap_load: "map     A DMA map without a currently active mapping."

Also "(if nsegs == 0)" #n1077 shouldn't bus_dmamap_unload() be called as
bus_dmamap_load_mbuf_sq() was successful?

See
https://cgit.freebsd.org/src/tree/sys/arm64/broadcom/genet/if_genet.c?id=f66a1f40740c63741b6ebe48cb0cbce9e52ef34e
for line number references.

Attached is diff with a potential fix.

Checking for a full queue and returning ENOMEM will allow gen_start_locked() to
set the IFF_DRV_OACTIVE faster without having to needlessly check if the mbuf
will fit (it won't).

-- 
You are receiving this mail because:
You are the assignee for the bug.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.