cam: kern.cam.max_high_power tuneable / sysctl
Create a tunable for the maxinum number of 'high power' commands to schedule, kern.cam.max_high_power. Default remains at 4. Differential Revision: https://reviews.freebsd.org/D56462
This commit is contained in:
+8
-2
@@ -86,8 +86,8 @@ SDT_PROBE_DEFINE4(cam, , xpt, async__cb, "void *", "uint32_t",
|
|||||||
_Static_assert(XPT_PRINT_LEN <= XPT_PRINT_MAXLEN, "XPT_PRINT_LEN is too large");
|
_Static_assert(XPT_PRINT_LEN <= XPT_PRINT_MAXLEN, "XPT_PRINT_LEN is too large");
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This is the maximum number of high powered commands (e.g. start unit)
|
* This sets a default for the the maximum number of high powered commands
|
||||||
* that can be outstanding at a particular time.
|
* (e.g. start unit) that can be outstanding at a particular time.
|
||||||
*/
|
*/
|
||||||
#ifndef CAM_MAX_HIGHPOWER
|
#ifndef CAM_MAX_HIGHPOWER
|
||||||
#define CAM_MAX_HIGHPOWER 4
|
#define CAM_MAX_HIGHPOWER 4
|
||||||
@@ -168,6 +168,9 @@ SYSCTL_INT(_kern_cam, OID_AUTO, boot_delay, CTLFLAG_RDTUN,
|
|||||||
&xsoftc.boot_delay, 0, "Bus registration wait time");
|
&xsoftc.boot_delay, 0, "Bus registration wait time");
|
||||||
SYSCTL_UINT(_kern_cam, OID_AUTO, xpt_generation, CTLFLAG_RD,
|
SYSCTL_UINT(_kern_cam, OID_AUTO, xpt_generation, CTLFLAG_RD,
|
||||||
&xsoftc.xpt_generation, 0, "CAM peripheral generation count");
|
&xsoftc.xpt_generation, 0, "CAM peripheral generation count");
|
||||||
|
SYSCTL_INT(_kern_cam, OID_AUTO, max_high_power, CTLFLAG_RWTUN,
|
||||||
|
&xsoftc.num_highpower, 0,
|
||||||
|
"Max number of high power commands to be issued at once");
|
||||||
|
|
||||||
struct cam_doneq {
|
struct cam_doneq {
|
||||||
struct mtx_padalign cam_doneq_mtx;
|
struct mtx_padalign cam_doneq_mtx;
|
||||||
@@ -892,6 +895,9 @@ xpt_init(void *dummy)
|
|||||||
TAILQ_INIT(&xsoftc.xpt_busses);
|
TAILQ_INIT(&xsoftc.xpt_busses);
|
||||||
TAILQ_INIT(&xsoftc.ccb_scanq);
|
TAILQ_INIT(&xsoftc.ccb_scanq);
|
||||||
STAILQ_INIT(&xsoftc.highpowerq);
|
STAILQ_INIT(&xsoftc.highpowerq);
|
||||||
|
|
||||||
|
/* Fall back to a default if the kenv tunable isn't set */
|
||||||
|
if (xsoftc.num_highpower == 0)
|
||||||
xsoftc.num_highpower = CAM_MAX_HIGHPOWER;
|
xsoftc.num_highpower = CAM_MAX_HIGHPOWER;
|
||||||
|
|
||||||
mtx_init(&xsoftc.xpt_highpower_lock, "XPT highpower lock", NULL, MTX_DEF);
|
mtx_init(&xsoftc.xpt_highpower_lock, "XPT highpower lock", NULL, MTX_DEF);
|
||||||
|
|||||||
Reference in New Issue
Block a user