Page MenuHomeFreeBSD

D47667.diff
No OneTemporary

D47667.diff

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
@@ -741,7 +741,7 @@
return (0);
maxglobalsize = dtrace_statvar_maxsize + sizeof (uint64_t);
- maxlocalsize = maxglobalsize * NCPU;
+ maxlocalsize = maxglobalsize * (mp_maxid + 1);
for (i = 0; i < nsvars; i++) {
dtrace_statvar_t *svar = svars[i];
@@ -1744,7 +1744,7 @@
dtrace_dynvar_t **rinsep;
int i, j, work = 0;
- for (i = 0; i < NCPU; i++) {
+ CPU_FOREACH(i) {
dcpu = &dstate->dtds_percpu[i];
rinsep = &dcpu->dtdsc_rinsing;
@@ -1782,7 +1782,7 @@
* rinsing list -- and then we borrow this CPU to
* rinse our dirty list.
*/
- for (j = 0; j < NCPU; j++) {
+ CPU_FOREACH(j) {
dtrace_dstate_percpu_t *rinser;
rinser = &dstate->dtds_percpu[j];
@@ -1800,7 +1800,7 @@
break;
}
- if (j == NCPU) {
+ if (j > mp_maxid) {
/*
* We were unable to find another CPU that
* could accept this dirty list -- we are
@@ -1841,7 +1841,7 @@
dtrace_sync();
- for (i = 0; i < NCPU; i++) {
+ CPU_FOREACH(i) {
dcpu = &dstate->dtds_percpu[i];
if (dcpu->dtdsc_rinsing == NULL)
@@ -2190,7 +2190,7 @@
case DTRACE_DSTATE_CLEAN: {
void *sp = &dstate->dtds_state;
- if (++cpu >= NCPU)
+ if (++cpu > mp_maxid)
cpu = 0;
if (dcpu->dtdsc_dirty != NULL &&
@@ -6504,7 +6504,7 @@
size_t lim;
sz += sizeof (uint64_t);
- ASSERT(svar->dtsv_size == NCPU * sz);
+ ASSERT(svar->dtsv_size == (mp_maxid + 1) * sz);
a += curcpu * sz;
if (*(uint8_t *)a == UINT8_MAX) {
@@ -6521,7 +6521,8 @@
break;
}
- ASSERT(svar->dtsv_size == NCPU * sizeof (uint64_t));
+ ASSERT(svar->dtsv_size ==
+ (mp_maxid + 1) * sizeof (uint64_t));
tmp = (uint64_t *)(uintptr_t)svar->dtsv_data;
regs[rd] = tmp[curcpu];
break;
@@ -6544,7 +6545,7 @@
size_t lim;
sz += sizeof (uint64_t);
- ASSERT(svar->dtsv_size == NCPU * sz);
+ ASSERT(svar->dtsv_size == (mp_maxid + 1) * sz);
a += curcpu * sz;
if (regs[rd] == 0) {
@@ -6565,7 +6566,8 @@
break;
}
- ASSERT(svar->dtsv_size == NCPU * sizeof (uint64_t));
+ ASSERT(svar->dtsv_size ==
+ (mp_maxid + 1) * sizeof (uint64_t));
tmp = (uint64_t *)(uintptr_t)svar->dtsv_data;
tmp[curcpu] = regs[rd];
break;
@@ -10678,10 +10680,11 @@
svarp = &vstate->dtvs_locals;
if (v->dtdv_type.dtdt_flags & DIF_TF_BYREF)
- dsize = NCPU * (v->dtdv_type.dtdt_size +
+ dsize = (mp_maxid + 1) *
+ (v->dtdv_type.dtdt_size +
sizeof (uint64_t));
else
- dsize = NCPU * sizeof (uint64_t);
+ dsize = (mp_maxid + 1) * sizeof (uint64_t);
break;
@@ -12603,7 +12606,7 @@
{
int i;
- for (i = 0; i < NCPU; i++) {
+ CPU_FOREACH(i) {
dtrace_buffer_t *buf = &bufs[i];
if (buf->dtb_size == 0)
@@ -12627,7 +12630,7 @@
{
int i;
- for (i = 0; i < NCPU; i++) {
+ CPU_FOREACH(i) {
dtrace_buffer_t *buf = &bufs[i];
if (buf->dtb_tomax == NULL) {
@@ -14379,7 +14382,8 @@
dstate->dtds_size = size;
dstate->dtds_base = base;
dstate->dtds_percpu = kmem_cache_alloc(dtrace_state_cache, KM_SLEEP);
- bzero(dstate->dtds_percpu, NCPU * sizeof (dtrace_dstate_percpu_t));
+ bzero(dstate->dtds_percpu,
+ (mp_maxid + 1) * sizeof (dtrace_dstate_percpu_t));
hashsize = size / (dstate->dtds_chunksize + sizeof (dtrace_dynhash_t));
@@ -14413,14 +14417,10 @@
VERIFY((uintptr_t)start < limit);
VERIFY((uintptr_t)start >= (uintptr_t)base);
- maxper = (limit - (uintptr_t)start) / NCPU;
+ maxper = (limit - (uintptr_t)start) / (mp_maxid + 1);
maxper = (maxper / dstate->dtds_chunksize) * dstate->dtds_chunksize;
-#ifndef illumos
CPU_FOREACH(i) {
-#else
- for (i = 0; i < NCPU; i++) {
-#endif
dstate->dtds_percpu[i].dtdsc_free = dvar = start;
/*
@@ -14430,7 +14430,7 @@
* whatever is left over. In either case, we set the limit to
* be the limit of the dynamic variable space.
*/
- if (maxper == 0 || i == NCPU - 1) {
+ if (maxper == 0 || i == mp_maxid) {
limit = (uintptr_t)base + size;
start = NULL;
} else {
@@ -14603,7 +14603,7 @@
char c[30];
dtrace_state_t *state;
dtrace_optval_t *opt;
- int bufsize = NCPU * sizeof (dtrace_buffer_t), i;
+ int bufsize = (mp_maxid + 1) * sizeof (dtrace_buffer_t), i;
int cpu_it;
ASSERT(MUTEX_HELD(&dtrace_lock));
@@ -14651,12 +14651,6 @@
state->dts_dev = dev;
#endif
- /*
- * We allocate NCPU buffers. On the one hand, this can be quite
- * a bit of memory per instance (nearly 36K on a Starcat). On the
- * other hand, it saves an additional memory reference in the probe
- * path.
- */
state->dts_buffer = kmem_zalloc(bufsize, KM_SLEEP);
state->dts_aggbuffer = kmem_zalloc(bufsize, KM_SLEEP);
@@ -14666,12 +14660,12 @@
* assumed to be seeded at this point (if from Fortuna seed file).
*/
arc4random_buf(&state->dts_rstate[0], 2 * sizeof(uint64_t));
- for (cpu_it = 1; cpu_it < NCPU; cpu_it++) {
+ for (cpu_it = 1; cpu_it <= mp_maxid; cpu_it++) {
/*
* Each CPU is assigned a 2^64 period, non-overlapping
* subsequence.
*/
- dtrace_xoroshiro128_plus_jump(state->dts_rstate[cpu_it-1],
+ dtrace_xoroshiro128_plus_jump(state->dts_rstate[cpu_it - 1],
state->dts_rstate[cpu_it]);
}
@@ -14970,7 +14964,7 @@
cyc_handler_t hdlr;
cyc_time_t when;
#endif
- int rval = 0, i, bufsize = NCPU * sizeof (dtrace_buffer_t);
+ int rval = 0, i, bufsize = (mp_maxid + 1) * sizeof (dtrace_buffer_t);
dtrace_icookie_t cookie;
mutex_enter(&cpu_lock);
@@ -15224,10 +15218,10 @@
* We enable anonymous tracing before APs are started, so we must
* activate buffers using the current CPU.
*/
- if (state == dtrace_anon.dta_state)
- for (int i = 0; i < NCPU; i++)
+ if (state == dtrace_anon.dta_state) {
+ CPU_FOREACH(i)
dtrace_buffer_activate_cpu(state, i);
- else
+ } else
dtrace_xcall(DTRACE_CPUALL,
(dtrace_xcall_t)dtrace_buffer_activate, state);
#else
@@ -15410,7 +15404,7 @@
#ifdef illumos
minor_t minor = getminor(state->dts_dev);
#endif
- int i, bufsize = NCPU * sizeof (dtrace_buffer_t);
+ int i, bufsize = (mp_maxid + 1) * sizeof (dtrace_buffer_t);
dtrace_speculation_t *spec = state->dts_speculations;
int nspec = state->dts_nspeculations;
uint32_t match;
@@ -15724,7 +15718,7 @@
if ((svar = vstate->dtvs_locals[i]) == NULL)
continue;
- ASSERT(svar->dtsv_size >= NCPU * sizeof (uint64_t));
+ ASSERT(svar->dtsv_size >= (mp_maxid + 1) * sizeof (uint64_t));
ent->dtht_locals[i] =
((uint64_t *)(uintptr_t)svar->dtsv_data)[curcpu];
}
diff --git a/sys/cddl/dev/dtrace/dtrace_ioctl.c b/sys/cddl/dev/dtrace/dtrace_ioctl.c
--- a/sys/cddl/dev/dtrace/dtrace_ioctl.c
+++ b/sys/cddl/dev/dtrace/dtrace_ioctl.c
@@ -229,7 +229,7 @@
"DTRACEIOC_AGGSNAP":"DTRACEIOC_BUFSNAP",
curcpu, desc.dtbd_cpu);
- if (desc.dtbd_cpu >= MAXCPU || CPU_ABSENT(desc.dtbd_cpu))
+ if (desc.dtbd_cpu > mp_maxid || CPU_ABSENT(desc.dtbd_cpu))
return (ENOENT);
mutex_enter(&dtrace_lock);
diff --git a/sys/cddl/dev/dtrace/dtrace_load.c b/sys/cddl/dev/dtrace/dtrace_load.c
--- a/sys/cddl/dev/dtrace/dtrace_load.c
+++ b/sys/cddl/dev/dtrace/dtrace_load.c
@@ -100,8 +100,8 @@
mutex_enter(&dtrace_lock);
dtrace_state_cache = kmem_cache_create("dtrace_state_cache",
- sizeof (dtrace_dstate_percpu_t) * NCPU, DTRACE_STATE_ALIGN,
- NULL, NULL, NULL, NULL, NULL, 0);
+ sizeof (dtrace_dstate_percpu_t) * (mp_maxid + 1),
+ DTRACE_STATE_ALIGN, NULL, NULL, NULL, NULL, NULL, 0);
ASSERT(MUTEX_HELD(&cpu_lock));
dtrace_bymod = dtrace_hash_create(offsetof(dtrace_probe_t, dtpr_mod),

File Metadata

Mime Type
text/plain
Expires
Wed, Apr 30, 10:03 AM (19 h, 2 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
17855602
Default Alt Text
D47667.diff (7 KB)

Event Timeline