Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F152774414
D55132.id.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
4 KB
Referenced Files
None
Subscribers
None
D55132.id.diff
View Options
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
Details
Attached
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)
Attached To
Mode
D55132: mpr: Don't consume entire DMA bounce buffer memory
Attached
Detach File
Event Timeline
Log In to Comment