(void (*)(void *, dtrace_id_t, void *))dtrace_nullop
};
-dtrace_toxrange_t *dtrace_toxrange;
-int dtrace_toxranges;
-
static size_t dtrace_retain_max = 1024;
+dtrace_toxrange_t *dtrace_toxrange;
+int dtrace_toxranges;
static int dtrace_toxranges_max;
+struct kmem_cache *dtrace_state_cachep;
+
static dtrace_pattr_t dtrace_provider_attr = {
{ DTRACE_STABILITY_STABLE, DTRACE_STABILITY_STABLE, DTRACE_CLASS_COMMON },
{ DTRACE_STABILITY_PRIVATE, DTRACE_STABILITY_PRIVATE, DTRACE_CLASS_UNKNOWN },
{ DTRACE_STABILITY_STABLE, DTRACE_STABILITY_STABLE, DTRACE_CLASS_COMMON },
};
+DEFINE_MUTEX(dtrace_lock);
+
void (*dtrace_modload)(struct module *);
void (*dtrace_modunload)(struct module *);
0);
#endif
- dtrace_state_cache = kmem_cache_create("dtrace_state_cache",
- sizeof(dtrace_dstate_percpu_t) * NR_CPUS,
- __alignof__(dtrace_dstate_percpu_t),
- SLAB_PANIC, NULL);
+ dtrace_state_cachep = kmem_cache_create("dtrace_state_cache",
+ sizeof(dtrace_dstate_percpu_t) * NR_CPUS, 0,
+ SLAB_HWCACHE_ALIGN|SLAB_PANIC|SLAB_NOTRACK,
+ NULL);
/*
* Create the probe hashtables.
dtrace_byfunc = NULL;
dtrace_byname = NULL;
- kmem_cache_destroy(dtrace_state_cache);
+ kmem_cache_destroy(dtrace_state_cachep);
misc_deregister(&helper_dev);
misc_deregister(&dtrace_dev);
return err;
dtrace_hash_add(hash, new);
- return;
+ return 0;
}
bucket = vzalloc(sizeof(dtrace_hashbucket_t));
bucket->dthb_chain = new;
bucket->dthb_len++;
+
+ return 0;
}
dtrace_probe_t *dtrace_hash_lookup(dtrace_hash_t *hash,
dtrace_meta_t *dtrace_meta_pid;
dtrace_helpers_t *dtrace_deferred_pid;
-DEFINE_MUTEX(dtrace_lock);
DEFINE_MUTEX(dtrace_provider_lock);
DEFINE_MUTEX(dtrace_meta_lock);
#include "dtrace.h"
-struct kmem_cache *dtrace_state_cache;
int dtrace_destructive_disallow = 0;
dtrace_optval_t dtrace_nspec_default = 1;
dtrace_optval_t dtrace_specsize_default = 32 * 1024;
base = dtrace_vzalloc_try(size);
if (base == NULL)
return -ENOMEM;
- percpu = kmem_cache_alloc(dtrace_state_cache, GFP_KERNEL);
+ percpu = kmem_cache_alloc(dtrace_state_cachep, GFP_KERNEL);
if (percpu == NULL) {
vfree(base);
return -ENOMEM;
return;
vfree(dstate->dtds_base);
- kmem_cache_free(dtrace_state_cache, dstate->dtds_percpu);
+ kmem_cache_free(dtrace_state_cachep, dstate->dtds_percpu);
}
void dtrace_vstate_fini(dtrace_vstate_t *vstate)
return (*(const uint32_t *)ap - *(const uint32_t *)bp);
}
+#if 0
static int fasttrap_uint64_cmp(const void *ap, const void *bp)
{
return (*(const uint64_t *)ap - *(const uint64_t *)bp);
}
+#endif
void fasttrap_meta_create_probe(void *arg, void *parg,
dtrace_helper_probedesc_t *dhpb)
/*
* DTrace Consumer State Functions
*/
-extern struct kmem_cache *dtrace_state_cache;
+extern struct kmem_cache *dtrace_state_cachep;
extern size_t dtrace_strsize_default;
extern ktime_t dtrace_deadman_timeout;
static void profile_tick(void *arg)
{
profile_probe_t *prof = arg;
- struct pt_regs *regs = get_irq_regs();
unsigned long pc = 0, upc = 0;
-
#ifdef PROBE_PCS
+ struct pt_regs *regs = get_irq_regs();
+
if (user_mode(regs))
upc = GET_IP(regs);
else
int _profile_enable(void *arg, dtrace_id_t id, void *parg)
{
profile_probe_t *prof = parg;
+#ifdef OMNI_CYCLICS
cyc_omni_handler_t omni;
+#endif
cyc_handler_t hdlr;
cyc_time_t when;