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

  • From: waddlesplash <waddlesplash@xxxxxxxxx>
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Tue, 14 Jun 2022 04:39:22 +0000 (UTC)

hrev56191 adds 2 changesets to branch 'master'
old head: e206b2f350bee2c103529de8eb388c51ac88b15a
new head: d621ee6564d749847029b0f0e1b8a7e46f6d7831
overview: 
https://git.haiku-os.org/haiku/log/?qt=range&q=d621ee6564d7+%5Ee206b2f350be

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

c6c03b01c33c: freebsd_network: Validate ranges but not alignment when 
coalescing in bus_dma.

d621ee6564d7: freebsd_network: Move up Giant ownership during attach.
  
  device_attach can be recursed for MIIbus drivers, so avoid the complexity
  and lock Giant from init_drivers() instead.

                              [ Augustin Cavalier <waddlesplash@xxxxxxxxx> ]

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

3 files changed, 10 insertions(+), 7 deletions(-)
src/libs/compat/freebsd_network/bus_dma.cpp | 8 +++++---
src/libs/compat/freebsd_network/device.c    | 4 ----
src/libs/compat/freebsd_network/driver.c    | 5 +++++

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

Commit:      c6c03b01c33c524daf8b85cb3a578f155c4d445a
URL:         https://git.haiku-os.org/haiku/commit/?id=c6c03b01c33c
Author:      Augustin Cavalier <waddlesplash@xxxxxxxxx>
Date:        Tue Jun 14 04:30:14 2022 UTC

freebsd_network: Validate ranges but not alignment when coalescing in bus_dma.

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

diff --git a/src/libs/compat/freebsd_network/bus_dma.cpp 
b/src/libs/compat/freebsd_network/bus_dma.cpp
index d11faddcf2..a65fbcd793 100644
--- a/src/libs/compat/freebsd_network/bus_dma.cpp
+++ b/src/libs/compat/freebsd_network/bus_dma.cpp
@@ -310,7 +310,7 @@ bus_dmamem_free(bus_dma_tag_t dmat, void* vaddr, 
bus_dmamap_t map)
 
 
 static bool
-_validate_address(bus_dma_tag_t dmat, bus_addr_t paddr)
+_validate_address(bus_dma_tag_t dmat, bus_addr_t paddr, bool 
validate_alignment = true)
 {
        do {
                if (dmat->filter != NULL) {
@@ -319,7 +319,7 @@ _validate_address(bus_dma_tag_t dmat, bus_addr_t paddr)
                } else {
                        if (paddr > dmat->lowaddr && paddr <= dmat->highaddr)
                                return false;
-                       if (!vm_addr_align_ok(paddr, dmat->alignment))
+                       if (validate_alignment && !vm_addr_align_ok(paddr, 
dmat->alignment))
                                return false;
                }
 
@@ -360,7 +360,9 @@ _bus_load_buffer(bus_dma_tag_t dmat, void* buf, bus_size_t 
buflen,
                                && (dmat->boundary == 0
                                        || (segs[seg].ds_addr & boundary_mask)
                                                == (phys_addr & 
boundary_mask))) {
-                       // No need to validate the address here.
+                       if (!_validate_address(dmat, phys_addr, false))
+                               return ERANGE;
+
                        segs[seg].ds_len += segment_size;
                } else {
                        if (first)

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

Revision:    hrev56191
Commit:      d621ee6564d749847029b0f0e1b8a7e46f6d7831
URL:         https://git.haiku-os.org/haiku/commit/?id=d621ee6564d7
Author:      Augustin Cavalier <waddlesplash@xxxxxxxxx>
Date:        Tue Jun 14 04:34:46 2022 UTC

freebsd_network: Move up Giant ownership during attach.

device_attach can be recursed for MIIbus drivers, so avoid the complexity
and lock Giant from init_drivers() instead.

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

diff --git a/src/libs/compat/freebsd_network/device.c 
b/src/libs/compat/freebsd_network/device.c
index 05adbf5505..7504d35cc0 100644
--- a/src/libs/compat/freebsd_network/device.c
+++ b/src/libs/compat/freebsd_network/device.c
@@ -481,9 +481,6 @@ device_attach(device_t device)
                || device->methods.attach == NULL)
                return B_ERROR;
 
-       // Always hold the giant lock during attach.
-       mtx_lock(&Giant);
-
        result = device->methods.attach(device);
 
        if (result == 0)
@@ -492,7 +489,6 @@ device_attach(device_t device)
        if (result == 0 && HAIKU_DRIVER_REQUIRES(FBSD_WLAN_FEATURE))
                result = start_wlan(device);
 
-       mtx_unlock(&Giant);
        return result;
 }
 
diff --git a/src/libs/compat/freebsd_network/driver.c 
b/src/libs/compat/freebsd_network/driver.c
index 4eada982ff..762e392e9a 100644
--- a/src/libs/compat/freebsd_network/driver.c
+++ b/src/libs/compat/freebsd_network/driver.c
@@ -310,6 +310,9 @@ _fbsd_init_drivers()
        if (status < B_OK)
                goto err6;
 
+       // Always hold the giant lock during attach.
+       mtx_lock(&Giant);
+
        for (int p = 0; sProbedDevices[p].bus != BUS_INVALID; p++) {
                device_t root, device = NULL;
                status = init_root_device(&root, sProbedDevices[p].bus);
@@ -341,6 +344,8 @@ _fbsd_init_drivers()
                        device_delete_child(NULL, root);
        }
 
+       mtx_unlock(&Giant);
+
        if (gDeviceCount > 0)
                return B_OK;
 


Other related posts:

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