PERFORCE change 97923 for review
John Birrell
jb at FreeBSD.org
Fri May 26 22:31:55 PDT 2006
http://perforce.freebsd.org/chv.cgi?CH=97923
Change 97923 by jb at jb_freebsd2 on 2006/05/27 05:30:09
Change all the references to the cpu id to the way that FreeBSD does it.
My previous hack, although reducing diffs to OpenSolaris, cause an
occasional NULL pointer reference which *always* ended in tears.
To a FreeBSD developer this code will read the way it works now. Before
you had to understand my hack to make sense of the code.
Affected files ...
.. //depot/projects/dtrace/src/sys/cddl/dev/dtrace/dtrace.c#24 edit
.. //depot/projects/dtrace/src/sys/cddl/dev/dtrace/dtrace_action.c#3 edit
.. //depot/projects/dtrace/src/sys/cddl/dev/dtrace/dtrace_buffer.c#7 edit
.. //depot/projects/dtrace/src/sys/cddl/dev/dtrace/dtrace_context.c#5 edit
.. //depot/projects/dtrace/src/sys/cddl/dev/dtrace/dtrace_dif.c#9 edit
.. //depot/projects/dtrace/src/sys/cddl/dev/dtrace/dtrace_dynvar.c#5 edit
.. //depot/projects/dtrace/src/sys/cddl/dev/dtrace/dtrace_hacks.c#14 edit
.. //depot/projects/dtrace/src/sys/cddl/dev/dtrace/dtrace_helper.c#3 edit
.. //depot/projects/dtrace/src/sys/cddl/dev/dtrace/dtrace_match.c#2 edit
.. //depot/projects/dtrace/src/sys/cddl/dev/dtrace/dtrace_priv.c#3 edit
.. //depot/projects/dtrace/src/sys/cddl/dev/dtrace/dtrace_probe.c#8 edit
.. //depot/projects/dtrace/src/sys/cddl/dev/dtrace/dtrace_speculation.c#3 edit
.. //depot/projects/dtrace/src/sys/cddl/dev/dtrace/dtrace_state.c#9 edit
Differences ...
==== //depot/projects/dtrace/src/sys/cddl/dev/dtrace/dtrace.c#24 (text+ko) ====
@@ -358,7 +358,7 @@
#define DTRACE_ALIGNCHECK(addr, size, flags) \
if (addr & (size - 1)) { \
*flags |= CPU_DTRACE_BADALIGN; \
- cpu_core[CPU->cpu_id].cpuc_dtrace_illval = addr; \
+ cpu_core[curcpu].cpuc_dtrace_illval = addr; \
return (0); \
}
#else
@@ -375,7 +375,7 @@
uint##bits##_t rval; \
int i; \
volatile uint16_t *flags = (volatile uint16_t *) \
- &cpu_core[CPU->cpu_id].cpuc_dtrace_flags; \
+ &cpu_core[curcpu].cpuc_dtrace_flags; \
\
DTRACE_ALIGNCHECK(addr, size, flags); \
\
@@ -390,7 +390,7 @@
* This address falls within a toxic region; return 0. \
*/ \
*flags |= CPU_DTRACE_BADADDR; \
- cpu_core[CPU->cpu_id].cpuc_dtrace_illval = addr; \
+ cpu_core[curcpu].cpuc_dtrace_illval = addr; \
return (0); \
} \
\
==== //depot/projects/dtrace/src/sys/cddl/dev/dtrace/dtrace_action.c#3 (text+ko) ====
@@ -146,7 +146,7 @@
if (dtrace_destructive_disallow)
return;
- flags = (volatile uint16_t *)&cpu_core[cpu->cpu_id].cpuc_dtrace_flags;
+ flags = (volatile uint16_t *)&cpu_core[curcpu].cpuc_dtrace_flags;
now = dtrace_gethrtime();
@@ -194,7 +194,7 @@
char *str = (char *)&pcs[nframes];
int size, offs = 0, i, j;
uintptr_t old = mstate->dtms_scratch_ptr, saved;
- uint16_t *flags = &cpu_core[CPU->cpu_id].cpuc_dtrace_flags;
+ uint16_t *flags = &cpu_core[curcpu].cpuc_dtrace_flags;
char *sym;
/*
==== //depot/projects/dtrace/src/sys/cddl/dev/dtrace/dtrace_buffer.c#7 (text+ko) ====
@@ -49,7 +49,7 @@
dtrace_buffer_t *buf;
dtrace_icookie_t cookie = dtrace_interrupt_disable();
- buf = &state->dts_buffer[CPU->cpu_id];
+ buf = &state->dts_buffer[curcpu];
if (buf->dtb_tomax != NULL) {
/*
==== //depot/projects/dtrace/src/sys/cddl/dev/dtrace/dtrace_context.c#5 (text+ko) ====
@@ -184,7 +184,7 @@
if (s1 == s2 || limit == 0)
return (0);
- flags = (volatile uint16_t *)&cpu_core[CPU->cpu_id].cpuc_dtrace_flags;
+ flags = (volatile uint16_t *)&cpu_core[curcpu].cpuc_dtrace_flags;
do {
if (s1 == NULL) {
@@ -238,13 +238,13 @@
if (kaddr - taddr < tsize) {
DTRACE_CPUFLAG_SET(CPU_DTRACE_BADADDR);
- cpu_core[CPU->cpu_id].cpuc_dtrace_illval = kaddr;
+ cpu_core[curcpu].cpuc_dtrace_illval = kaddr;
return (1);
}
if (taddr - kaddr < size) {
DTRACE_CPUFLAG_SET(CPU_DTRACE_BADADDR);
- cpu_core[CPU->cpu_id].cpuc_dtrace_illval = taddr;
+ cpu_core[curcpu].cpuc_dtrace_illval = taddr;
return (1);
}
}
@@ -328,7 +328,7 @@
{
volatile uint16_t *flags;
- flags = (volatile uint16_t *)&cpu_core[CPU->cpu_id].cpuc_dtrace_flags;
+ flags = (volatile uint16_t *)&cpu_core[curcpu].cpuc_dtrace_flags;
if (s1 == s2)
return (0);
==== //depot/projects/dtrace/src/sys/cddl/dev/dtrace/dtrace_dif.c#9 (text+ko) ====
@@ -60,7 +60,7 @@
if ((lwp = curthread->t_lwp) == NULL) {
DTRACE_CPUFLAG_SET(CPU_DTRACE_BADADDR);
- cpu_core[CPU->cpu_id].cpuc_dtrace_illval = NULL;
+ cpu_core[curcpu].cpuc_dtrace_illval = NULL;
return (0);
}
@@ -331,8 +331,8 @@
dtrace_key_t *tupregs, int nargs,
dtrace_mstate_t *mstate, dtrace_state_t *state)
{
- volatile uint16_t *flags = &cpu_core[CPU->cpu_id].cpuc_dtrace_flags;
- volatile uintptr_t *illval = &cpu_core[CPU->cpu_id].cpuc_dtrace_illval;
+ volatile uint16_t *flags = &cpu_core[curcpu].cpuc_dtrace_flags;
+ volatile uintptr_t *illval = &cpu_core[curcpu].cpuc_dtrace_illval;
#ifdef DOODAD
union {
@@ -1474,8 +1474,8 @@
dtrace_statvar_t *svar;
dtrace_dstate_t *dstate = &vstate->dtvs_dynvars;
dtrace_difv_t *v;
- volatile uint16_t *flags = &cpu_core[CPU->cpu_id].cpuc_dtrace_flags;
- volatile uintptr_t *illval = &cpu_core[CPU->cpu_id].cpuc_dtrace_illval;
+ volatile uint16_t *flags = &cpu_core[curcpu].cpuc_dtrace_flags;
+ volatile uintptr_t *illval = &cpu_core[curcpu].cpuc_dtrace_illval;
dtrace_key_t tupregs[DIF_DTR_NREGS + 2]; /* +2 for thread and id */
uint64_t regs[DIF_DIR_NREGS];
@@ -1846,7 +1846,7 @@
sz += sizeof (uint64_t);
ASSERT(svar->dtsv_size == NCPU * sz);
- a += CPU->cpu_id * sz;
+ a += curcpu * sz;
if (*(uint8_t *)a == UINT8_MAX) {
/*
@@ -1864,7 +1864,7 @@
ASSERT(svar->dtsv_size == NCPU * sizeof (uint64_t));
tmp = (uint64_t *)(uintptr_t)svar->dtsv_data;
- regs[rd] = tmp[CPU->cpu_id];
+ regs[rd] = tmp[curcpu];
break;
case DIF_OP_STLS:
@@ -1885,7 +1885,7 @@
sz += sizeof (uint64_t);
ASSERT(svar->dtsv_size == NCPU * sz);
- a += CPU->cpu_id * sz;
+ a += curcpu * sz;
if (regs[rd] == 0) {
*(uint8_t *)a = UINT8_MAX;
@@ -1902,7 +1902,7 @@
ASSERT(svar->dtsv_size == NCPU * sizeof (uint64_t));
tmp = (uint64_t *)(uintptr_t)svar->dtsv_data;
- tmp[CPU->cpu_id] = regs[rd];
+ tmp[curcpu] = regs[rd];
break;
case DIF_OP_LDTS: {
==== //depot/projects/dtrace/src/sys/cddl/dev/dtrace/dtrace_dynvar.c#5 (text+ko) ====
@@ -112,7 +112,7 @@
uint64_t hashval = DTRACE_DYNHASH_VALID;
dtrace_dynhash_t *hash = dstate->dtds_hash;
dtrace_dynvar_t *free, *new_free, *next, *dvar, *start, *prev = NULL;
- processorid_t me = CPU->cpu_id, cpu = me;
+ processorid_t me = curcpu, cpu = me;
dtrace_dstate_percpu_t *dcpu = &dstate->dtds_percpu[me];
size_t bucket, ksize;
size_t chunksize = dstate->dtds_chunksize;
==== //depot/projects/dtrace/src/sys/cddl/dev/dtrace/dtrace_hacks.c#14 (text+ko) ====
@@ -16,6 +16,7 @@
dtrace_module_unloaded,
dtrace_priv_proc_control,
dtrace_speculation,
+ dtrace_speculation_clean,
dtrace_state_clean,
dtrace_state_deadman,
dtrace_toxrange_add
==== //depot/projects/dtrace/src/sys/cddl/dev/dtrace/dtrace_helper.c#3 (text+ko) ====
@@ -8,7 +8,7 @@
{
uint32_t size, next, nnext, i;
dtrace_helptrace_t *ent;
- uint16_t flags = cpu_core[CPU->cpu_id].cpuc_dtrace_flags;
+ uint16_t flags = cpu_core[curcpu].cpuc_dtrace_flags;
if (!dtrace_helptrace_enabled)
return;
@@ -49,7 +49,7 @@
ent->dtht_fltoffs = (mstate->dtms_present & DTRACE_MSTATE_FLTOFFS) ?
mstate->dtms_fltoffs : -1;
ent->dtht_fault = DTRACE_FLAGS2FLT(flags);
- ent->dtht_illval = cpu_core[CPU->cpu_id].cpuc_dtrace_illval;
+ ent->dtht_illval = cpu_core[curcpu].cpuc_dtrace_illval;
for (i = 0; i < vstate->dtvs_nlocals; i++) {
dtrace_statvar_t *svar;
@@ -59,7 +59,7 @@
ASSERT(svar->dtsv_size >= NCPU * sizeof (uint64_t));
ent->dtht_locals[i] =
- ((uint64_t *)(uintptr_t)svar->dtsv_data)[CPU->cpu_id];
+ ((uint64_t *)(uintptr_t)svar->dtsv_data)[curcpu];
}
}
@@ -67,7 +67,7 @@
dtrace_helper(int which, dtrace_mstate_t *mstate,
dtrace_state_t *state, uint64_t arg0, uint64_t arg1)
{
- uint16_t *flags = &cpu_core[CPU->cpu_id].cpuc_dtrace_flags;
+ uint16_t *flags = &cpu_core[curcpu].cpuc_dtrace_flags;
uint64_t sarg0 = mstate->dtms_arg[0];
uint64_t sarg1 = mstate->dtms_arg[1];
uint64_t rval = 0;
==== //depot/projects/dtrace/src/sys/cddl/dev/dtrace/dtrace_match.c#2 (text+ko) ====
@@ -243,9 +243,9 @@
return (nmatched);
}
- template.dtpr_mod = (char *)pkp->dtpk_mod;
- template.dtpr_func = (char *)pkp->dtpk_func;
- template.dtpr_name = (char *)pkp->dtpk_name;
+ template.dtpr_mod = pkp->dtpk_mod;
+ template.dtpr_func = pkp->dtpk_func;
+ template.dtpr_name = pkp->dtpk_name;
/*
* We want to find the most distinct of the module name, function
==== //depot/projects/dtrace/src/sys/cddl/dev/dtrace/dtrace_priv.c#3 (text+ko) ====
@@ -92,7 +92,7 @@
return (1);
bad:
- cpu_core[CPU->cpu_id].cpuc_dtrace_flags |= CPU_DTRACE_UPRIV;
+ cpu_core[curcpu].cpuc_dtrace_flags |= CPU_DTRACE_UPRIV;
return (0);
}
@@ -108,7 +108,7 @@
dtrace_priv_proc_common_nocd())
return (1);
- cpu_core[CPU->cpu_id].cpuc_dtrace_flags |= CPU_DTRACE_UPRIV;
+ cpu_core[curcpu].cpuc_dtrace_flags |= CPU_DTRACE_UPRIV;
return (0);
}
@@ -119,7 +119,7 @@
if (state->dts_cred.dcr_action & DTRACE_CRA_PROC)
return (1);
- cpu_core[CPU->cpu_id].cpuc_dtrace_flags |= CPU_DTRACE_UPRIV;
+ cpu_core[curcpu].cpuc_dtrace_flags |= CPU_DTRACE_UPRIV;
return (0);
}
@@ -130,7 +130,7 @@
if (state->dts_cred.dcr_action & DTRACE_CRA_KERNEL)
return (1);
- cpu_core[CPU->cpu_id].cpuc_dtrace_flags |= CPU_DTRACE_KPRIV;
+ cpu_core[curcpu].cpuc_dtrace_flags |= CPU_DTRACE_KPRIV;
return (0);
}
@@ -141,7 +141,7 @@
if (state->dts_cred.dcr_action & DTRACE_CRA_KERNEL_DESTRUCTIVE)
return (1);
- cpu_core[CPU->cpu_id].cpuc_dtrace_flags |= CPU_DTRACE_KPRIV;
+ cpu_core[curcpu].cpuc_dtrace_flags |= CPU_DTRACE_KPRIV;
return (0);
}
==== //depot/projects/dtrace/src/sys/cddl/dev/dtrace/dtrace_probe.c#8 (text+ko) ====
@@ -19,21 +19,16 @@
int vtime, onintr = 0;
volatile uint16_t *flags;
hrtime_t now;
+ struct pcpu *cpu = pcpu_find(curcpu);
- /*
- * Kick out immediately if this CPU is still being born (in which case
- * curthread will be set to -1)
- */
-#if defined(sun)
- if ((uintptr_t)curthread & 1)
+ if (cpu == NULL)
return;
-#endif
+
+ onintr = cpu->pc_intr_actv;
+ cpuid = curcpu;
cookie = dtrace_interrupt_disable();
probe = dtrace_probes[id - 1];
- cpuid = CPU->cpu_id;
-
- onintr = CPU_ON_INTR(CPU);
if (!onintr && probe->dtpr_predcache != DTRACE_CACHEIDNONE &&
probe->dtpr_predcache == curthread->t_predcache) {
==== //depot/projects/dtrace/src/sys/cddl/dev/dtrace/dtrace_speculation.c#3 (text+ko) ====
@@ -252,7 +252,7 @@
dtrace_speculation_clean_here(dtrace_state_t *state)
{
dtrace_icookie_t cookie;
- processorid_t cpu = CPU->cpu_id;
+ processorid_t cpu = curcpu;
dtrace_buffer_t *dest = &state->dts_buffer[cpu];
dtrace_specid_t i;
==== //depot/projects/dtrace/src/sys/cddl/dev/dtrace/dtrace_state.c#9 (text+ko) ====
@@ -735,7 +735,7 @@
* level) and to manually activate the buffer for this CPU.
*/
cookie = dtrace_interrupt_disable();
- *cpu = CPU->cpu_id;
+ *cpu = curcpu;
ASSERT(state->dts_buffer[*cpu].dtb_flags & DTRACEBUF_INACTIVE);
state->dts_buffer[*cpu].dtb_flags &= ~DTRACEBUF_INACTIVE;
@@ -836,7 +836,7 @@
state->dts_reserve = 0;
cookie = dtrace_interrupt_disable();
- *cpu = CPU->cpu_id;
+ *cpu = curcpu;
dtrace_probe(dtrace_probeid_end,
(uint64_t)(uintptr_t)state, 0, 0, 0, 0);
dtrace_interrupt_enable(cookie);
More information about the p4-projects
mailing list