Page MenuHomeFreeBSD

D55132.id.diff
No OneTemporary

D55132.id.diff

diff --git a/share/man/man4/mpr.4 b/share/man/man4/mpr.4
--- a/share/man/man4/mpr.4
+++ b/share/man/man4/mpr.4
@@ -3,6 +3,7 @@
.\" Copyright (c) 2014 LSI Corp
.\" Copyright (c) 2015-2017 Avago Technologies
.\" Copyright (c) 2015-2022 Broadcom Ltd.
+.\" Copyright (c) 2026 Raptor Engineering, LLC
.\" All rights reserved.
.\"
.\" Redistribution and use in source and binary forms, with or without
@@ -224,6 +225,15 @@
.Xr sysctl 8
variable.
.Pp
+To set the maximum size of the DMA buffer in bytes, set the
+.Va dev.mpr.X.dma_buffer_size
+tunable in
+.Xr loader.conf 5.
+.Pp
+The default
+.Va dma_buffer_size
+value is either 64 * MAXPHYS or the system page size, whichever is larger.
+.Pp
Devices can be excluded from
.Nm
control for all adapters by setting this tunable in
diff --git a/sys/dev/mpr/mpr.c b/sys/dev/mpr/mpr.c
--- a/sys/dev/mpr/mpr.c
+++ b/sys/dev/mpr/mpr.c
@@ -3,6 +3,7 @@
* Copyright (c) 2011-2015 LSI Corp.
* Copyright (c) 2013-2016 Avago Technologies
* Copyright 2000-2020 Broadcom Inc.
+ * Copyright (c) 2026 Raptor Engineering, LLC
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -1563,8 +1564,8 @@
nsegs = (sc->maxio / PAGE_SIZE) + 1;
bus_dma_template_init(&t, sc->mpr_parent_dmat);
- BUS_DMA_TEMPLATE_FILL(&t, BD_MAXSIZE(BUS_SPACE_MAXSIZE_32BIT),
- BD_NSEGMENTS(nsegs), BD_MAXSEGSIZE(BUS_SPACE_MAXSIZE_32BIT),
+ BUS_DMA_TEMPLATE_FILL(&t, BD_MAXSIZE(sc->dma_buffer_size-1),
+ BD_NSEGMENTS(nsegs), BD_MAXSEGSIZE(sc->dma_buffer_size-1),
BD_FLAGS(BUS_DMA_ALLOCNOW), BD_LOCKFUNC(busdma_lock_mutex),
BD_LOCKFUNCARG(&sc->mpr_mtx),
BD_BOUNDARY(BUS_SPACE_MAXSIZE_32BIT+1));
@@ -1734,6 +1735,7 @@
sc->max_prireqframes = MPR_PRI_REQ_FRAMES;
sc->max_replyframes = MPR_REPLY_FRAMES;
sc->max_evtframes = MPR_EVT_REPLY_FRAMES;
+ sc->dma_buffer_size = MPR_DEFAULT_DMA_BUFFER;
/*
* Grab the global variables.
@@ -1754,6 +1756,7 @@
TUNABLE_INT_FETCH("hw.mpr.max_prireqframes", &sc->max_prireqframes);
TUNABLE_INT_FETCH("hw.mpr.max_replyframes", &sc->max_replyframes);
TUNABLE_INT_FETCH("hw.mpr.max_evtframes", &sc->max_evtframes);
+ TUNABLE_INT_FETCH("hw.mpr.dma_buffer_size", &sc->dma_buffer_size);
/* Grab the unit-instance variables */
snprintf(tmpstr, sizeof(tmpstr), "dev.mpr.%d.debug_level",
@@ -1818,6 +1821,10 @@
snprintf(tmpstr, sizeof(tmpstr), "dev.mpr.%d.max_evtframes",
device_get_unit(sc->mpr_dev));
TUNABLE_INT_FETCH(tmpstr, &sc->max_evtframes);
+
+ snprintf(tmpstr, sizeof(tmpstr), "dev.mpr.%d.dma_buffer_size",
+ device_get_unit(sc->mpr_dev));
+ TUNABLE_INT_FETCH(tmpstr, &sc->dma_buffer_size);
}
static void
@@ -1882,6 +1889,10 @@
OID_AUTO, "max_evtframes", CTLFLAG_RD, &sc->max_evtframes, 0,
"Total number of event frames allocated");
+ SYSCTL_ADD_INT(sysctl_ctx, SYSCTL_CHILDREN(sysctl_tree),
+ OID_AUTO, "dma_buffer_size", CTLFLAG_RD, &sc->dma_buffer_size, 0,
+ "Maximum size of DMA buffer in bytes");
+
SYSCTL_ADD_STRING(sysctl_ctx, SYSCTL_CHILDREN(sysctl_tree),
OID_AUTO, "firmware_version", CTLFLAG_RD, sc->fw_version,
strlen(sc->fw_version), "firmware version");
diff --git a/sys/dev/mpr/mprvar.h b/sys/dev/mpr/mprvar.h
--- a/sys/dev/mpr/mprvar.h
+++ b/sys/dev/mpr/mprvar.h
@@ -3,6 +3,7 @@
* Copyright (c) 2011-2015 LSI Corp.
* Copyright (c) 2013-2016 Avago Technologies
* Copyright 2000-2020 Broadcom Inc.
+ * Copyright (c) 2026 Raptor Engineering, LLC
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -34,6 +35,7 @@
#include <sys/lock.h>
#include <sys/mutex.h>
+#include <sys/_maxphys.h>
#define MPR_DRIVER_VERSION "23.00.00.00-fbsd"
@@ -54,6 +56,9 @@
#define MPR_DEFAULT_CHAIN_SEG_SIZE 8
#define MPR_MAX_CHAIN_ELEMENT_SIZE 16
+#define MPR_DEFAULT_MAXPHYS MAX(MAXPHYS, PAGE_SIZE)
+#define MPR_DEFAULT_DMA_BUFFER (64 * MPR_DEFAULT_MAXPHYS)
+
/*
* PCIe NVMe Specific defines
*/
@@ -507,6 +512,7 @@
u_int max_prireqframes;
u_int max_replyframes;
u_int max_evtframes;
+ u_int dma_buffer_size;
char exclude_ids[80];
struct timeval lastfail;

File Metadata

Mime Type
text/plain
Expires
Sat, Apr 18, 12:54 AM (16 h, 22 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
31688869
Default Alt Text
D55132.id.diff (4 KB)

Event Timeline