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)