Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F177462342
D55132.1794475376.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Authored By
Unknown
Size
4 KB
Referenced Files
None
Subscribers
None
D55132.1794475376.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
Thu, Nov 12, 9:22 AM (16 m, 47 s)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
41674235
Default Alt Text
D55132.1794475376.diff (4 KB)
Attached To
Mode
D55132: mpr: Don't consume entire DMA bounce buffer memory
Attached
Detach File
Event Timeline