diff --git a/sys/cddl/contrib/opensolaris/uts/common/dtrace/dtrace.c b/sys/cddl/contrib/opensolaris/uts/common/dtrace/dtrace.c --- a/sys/cddl/contrib/opensolaris/uts/common/dtrace/dtrace.c +++ b/sys/cddl/contrib/opensolaris/uts/common/dtrace/dtrace.c @@ -207,6 +207,7 @@ hrtime_t dtrace_unregister_defunct_reap = (hrtime_t)60 * NANOSEC; #ifndef illumos int dtrace_memstr_max = 4096; +int dtrace_bufsize_max_frac = 128; #endif /* @@ -12205,7 +12206,8 @@ * ask to malloc, so let's place a limit here before trying * to do something that might well end in tears at bedtime. */ - if (size > physmem * PAGE_SIZE / (128 * (mp_maxid + 1))) + int bufsize_percpu_frac = dtrace_bufsize_max_frac * mp_ncpus; + if (size > physmem * PAGE_SIZE / bufsize_percpu_frac) return (ENOMEM); #endif diff --git a/sys/cddl/dev/dtrace/dtrace_sysctl.c b/sys/cddl/dev/dtrace/dtrace_sysctl.c --- a/sys/cddl/dev/dtrace/dtrace_sysctl.c +++ b/sys/cddl/dev/dtrace/dtrace_sysctl.c @@ -96,5 +96,9 @@ SYSCTL_QUAD(_kern_dtrace, OID_AUTO, helper_actions_max, CTLFLAG_RW, &dtrace_helper_actions_max, 0, "maximum number of allowed helper actions"); +SYSCTL_INT(_kern_dtrace, OID_AUTO, bufsize_max, CTLFLAG_RWTUN, + &dtrace_bufsize_max_frac, 0, + "maximum fraction (1/n-th) of physical memory for principal buffers"); + SYSCTL_INT(_security_bsd, OID_AUTO, allow_destructive_dtrace, CTLFLAG_RDTUN, &dtrace_allow_destructive, 1, "Allow destructive mode DTrace scripts");