[haiku-commits] haiku: hrev56152 - src/libs/compat/freebsd_network

  • From: waddlesplash <waddlesplash@xxxxxxxxx>
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Fri, 3 Jun 2022 17:25:31 +0000 (UTC)

hrev56152 adds 2 changesets to branch 'master'
old head: cb7e50e0a3fd0b518ecec5eec545ddb5bb38c1d4
new head: 15253c90c3e8662bf4f4de38fb39f774f008397c
overview: 
https://git.haiku-os.org/haiku/log/?qt=range&q=15253c90c3e8+%5Ecb7e50e0a3fd

----------------------------------------------------------------------------

4eac62eb9f55: freebsd_network: Allow destruction of dmamaps with 
BUFFER_PROHIBITED.

15253c90c3e8: freebsd_network: Retry dmamap loads with a bounce buffer in more 
cases.
  
  Instead of just on ERANGE, also do it for EFBIG and other such errors.
  
  Related to #17763 and #17766.

                              [ Augustin Cavalier <waddlesplash@xxxxxxxxx> ]

----------------------------------------------------------------------------

1 file changed, 6 insertions(+), 6 deletions(-)
src/libs/compat/freebsd_network/bus_dma.cpp | 12 ++++++------

############################################################################

Commit:      4eac62eb9f55794f815443639ef95c7d2ad3661b
URL:         https://git.haiku-os.org/haiku/commit/?id=4eac62eb9f55
Author:      Augustin Cavalier <waddlesplash@xxxxxxxxx>
Date:        Fri Jun  3 17:03:42 2022 UTC

freebsd_network: Allow destruction of dmamaps with BUFFER_PROHIBITED.

----------------------------------------------------------------------------

diff --git a/src/libs/compat/freebsd_network/bus_dma.cpp 
b/src/libs/compat/freebsd_network/bus_dma.cpp
index 2ce8ee5842..2de70566e7 100644
--- a/src/libs/compat/freebsd_network/bus_dma.cpp
+++ b/src/libs/compat/freebsd_network/bus_dma.cpp
@@ -234,7 +234,7 @@ bus_dmamap_destroy(bus_dma_tag_t dmat, bus_dmamap_t map)
 {
        if (map == NULL)
                return 0;
-       if (map->buffer_type != bus_dmamap::BUFFER_NONE)
+       if (map->buffer_type > bus_dmamap::BUFFER_PROHIBITED)
                return EBUSY;
 
        atomic_add(&map->dmat->map_count, -1);

############################################################################

Revision:    hrev56152
Commit:      15253c90c3e8662bf4f4de38fb39f774f008397c
URL:         https://git.haiku-os.org/haiku/commit/?id=15253c90c3e8
Author:      Augustin Cavalier <waddlesplash@xxxxxxxxx>
Date:        Fri Jun  3 17:13:14 2022 UTC

Ticket:      https://dev.haiku-os.org/ticket/17763
Ticket:      https://dev.haiku-os.org/ticket/17766

freebsd_network: Retry dmamap loads with a bounce buffer in more cases.

Instead of just on ERANGE, also do it for EFBIG and other such errors.

Related to #17763 and #17766.

----------------------------------------------------------------------------

diff --git a/src/libs/compat/freebsd_network/bus_dma.cpp 
b/src/libs/compat/freebsd_network/bus_dma.cpp
index 2de70566e7..b1bc9a7a06 100644
--- a/src/libs/compat/freebsd_network/bus_dma.cpp
+++ b/src/libs/compat/freebsd_network/bus_dma.cpp
@@ -339,9 +339,6 @@ _bus_load_buffer(bus_dma_tag_t dmat, void* buf, bus_size_t 
buflen,
        bus_addr_t last_phys_addr = *lastaddrp;
        const bus_addr_t boundary_mask = ~(dmat->boundary - 1);
 
-       if (buflen > dmat->maxsize)
-               return EINVAL;
-
        while (buflen > 0) {
                const bus_addr_t phys_addr = pmap_kextract(virtual_addr);
                if (!_validate_address(dmat, phys_addr))
@@ -399,10 +396,13 @@ bus_dmamap_load(bus_dma_tag_t dmat, bus_dmamap_t map, 
void *buf,
        bus_addr_t lastaddr = 0;
        int error, nsegs = 0;
 
+       if (buflen > dmat->maxsize)
+               return EINVAL;
+
        error = _bus_load_buffer(dmat, buf, buflen, flags,
                &lastaddr, map->segments, nsegs, true);
 
-       if (error == ERANGE) {
+       if (error != 0) {
                // Try again using a bounce buffer.
                error = _prepare_bounce_buffer(map, buflen, flags);
                if (error != 0)
@@ -450,7 +450,7 @@ bus_dmamap_load_mbuf_sg(bus_dma_tag_t dmat, bus_dmamap_t 
map, struct mbuf* mb,
                first = false;
        }
 
-       if (error == ERANGE) {
+       if (error != 0) {
                // Try again using a bounce buffer.
                error = _prepare_bounce_buffer(map, mb->m_pkthdr.len, flags);
                if (error != 0)


Other related posts:

  • » [haiku-commits] haiku: hrev56152 - src/libs/compat/freebsd_network - waddlesplash