The branch stable/14 has been updated by markj:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=07c5a2486cc6f8e64715b5d7c31ccfa02f9f3745

commit 07c5a2486cc6f8e64715b5d7c31ccfa02f9f3745
Author:     Mark Johnston <ma...@freebsd.org>
AuthorDate: 2025-03-31 10:45:14 +0000
Commit:     Mark Johnston <ma...@freebsd.org>
CommitDate: 2025-04-15 02:25:24 +0000

    hyperv/storvsc: Fix busdma constraints
    
    - The BUS_DMA_KEEP_PG_OFFSET flag is needed, since
      storvsc_xferbuf_prepare() assumes that only the first segment may have
      a non-zero offset, and that all following segments are page-sized and
      -aligned.
    - storvsc_xferbuf_prepare() handles 64-bit bus addresses, so avoid
      unneeded bouncing on i386.
    
    PR:             285681
    Reported by:    dim
    Tested by:      dim, whu
    MFC after:      2 weeks
    
    (cherry picked from commit a319ba694538a38429115aaaf1d4b3946ea3a8b5)
---
 sys/dev/hyperv/storvsc/hv_storvsc_drv_freebsd.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/sys/dev/hyperv/storvsc/hv_storvsc_drv_freebsd.c 
b/sys/dev/hyperv/storvsc/hv_storvsc_drv_freebsd.c
index d7e7bd85ae29..076b436a2191 100644
--- a/sys/dev/hyperv/storvsc/hv_storvsc_drv_freebsd.c
+++ b/sys/dev/hyperv/storvsc/hv_storvsc_drv_freebsd.c
@@ -954,13 +954,18 @@ storvsc_init_requests(device_t dev)
                bus_get_dma_tag(dev),           /* parent */
                1,                              /* alignment */
                PAGE_SIZE,                      /* boundary */
+#if defined(__i386__) && defined(PAE)
+               BUS_SPACE_MAXADDR_48BIT,        /* lowaddr */
+               BUS_SPACE_MAXADDR_48BIT,        /* highaddr */
+#else
                BUS_SPACE_MAXADDR,              /* lowaddr */
                BUS_SPACE_MAXADDR,              /* highaddr */
+#endif
                NULL, NULL,                     /* filter, filterarg */
                STORVSC_DATA_SIZE_MAX,          /* maxsize */
                STORVSC_DATA_SEGCNT_MAX,        /* nsegments */
                STORVSC_DATA_SEGSZ_MAX,         /* maxsegsize */
-               0,                              /* flags */
+               BUS_DMA_KEEP_PG_OFFSET,         /* flags */
                NULL,                           /* lockfunc */
                NULL,                           /* lockfuncarg */
                &sc->storvsc_req_dtag);

Reply via email to