lockprof: move per-cpu data to dpcpu
Reviewed by: kib Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D21747
This commit is contained in:
parent
66eb1d6347
commit
d2be3ef05c
@ -241,7 +241,9 @@ struct lock_prof_cpu {
|
||||
struct lock_prof_type lpc_types[2]; /* One for spin one for other. */
|
||||
};
|
||||
|
||||
struct lock_prof_cpu *lp_cpu[MAXCPU];
|
||||
DPCPU_DEFINE_STATIC(struct lock_prof_cpu, lp);
|
||||
#define LP_CPU_SELF (DPCPU_PTR(lp))
|
||||
#define LP_CPU(cpu) (DPCPU_ID_PTR((cpu), lp))
|
||||
|
||||
volatile int __read_mostly lock_prof_enable;
|
||||
static volatile int lock_prof_resetting;
|
||||
@ -288,10 +290,8 @@ lock_prof_init(void *arg)
|
||||
int cpu;
|
||||
|
||||
CPU_FOREACH(cpu) {
|
||||
lp_cpu[cpu] = malloc(sizeof(*lp_cpu[cpu]), M_DEVBUF,
|
||||
M_WAITOK | M_ZERO);
|
||||
lock_prof_init_type(&lp_cpu[cpu]->lpc_types[0]);
|
||||
lock_prof_init_type(&lp_cpu[cpu]->lpc_types[1]);
|
||||
lock_prof_init_type(&LP_CPU(cpu)->lpc_types[0]);
|
||||
lock_prof_init_type(&LP_CPU(cpu)->lpc_types[1]);
|
||||
}
|
||||
}
|
||||
SYSINIT(lockprof, SI_SUB_SMP, SI_ORDER_ANY, lock_prof_init, NULL);
|
||||
@ -331,14 +331,14 @@ lock_prof_reset(void)
|
||||
* into per-thread lists as well.
|
||||
*/
|
||||
CPU_FOREACH(cpu) {
|
||||
lpc = lp_cpu[cpu];
|
||||
lpc = LP_CPU(cpu);
|
||||
for (i = 0; i < LPROF_CACHE_SIZE; i++) {
|
||||
LIST_REMOVE(&lpc->lpc_types[0].lpt_objs[i], lpo_link);
|
||||
LIST_REMOVE(&lpc->lpc_types[1].lpt_objs[i], lpo_link);
|
||||
}
|
||||
}
|
||||
CPU_FOREACH(cpu) {
|
||||
lpc = lp_cpu[cpu];
|
||||
lpc = LP_CPU(cpu);
|
||||
bzero(lpc, sizeof(*lpc));
|
||||
lock_prof_init_type(&lpc->lpc_types[0]);
|
||||
lock_prof_init_type(&lpc->lpc_types[1]);
|
||||
@ -379,7 +379,7 @@ lock_prof_sum(struct lock_prof *match, struct lock_prof *dst, int hash,
|
||||
dst->name = match->name;
|
||||
|
||||
CPU_FOREACH(cpu) {
|
||||
type = &lp_cpu[cpu]->lpc_types[spin];
|
||||
type = &LP_CPU(cpu)->lpc_types[spin];
|
||||
SLIST_FOREACH(l, &type->lpt_hash[hash], link) {
|
||||
if (l->ticks == t)
|
||||
continue;
|
||||
@ -436,8 +436,8 @@ dump_lock_prof_stats(SYSCTL_HANDLER_ARGS)
|
||||
quiesce_all_cpus("profstat", 0);
|
||||
t = ticks;
|
||||
CPU_FOREACH(cpu) {
|
||||
lock_prof_type_stats(&lp_cpu[cpu]->lpc_types[0], sb, 0, t);
|
||||
lock_prof_type_stats(&lp_cpu[cpu]->lpc_types[1], sb, 1, t);
|
||||
lock_prof_type_stats(&LP_CPU(cpu)->lpc_types[0], sb, 0, t);
|
||||
lock_prof_type_stats(&LP_CPU(cpu)->lpc_types[1], sb, 1, t);
|
||||
}
|
||||
lock_prof_enable = enabled;
|
||||
|
||||
@ -503,7 +503,7 @@ lock_profile_lookup(struct lock_object *lo, int spin, const char *file,
|
||||
p = unknown;
|
||||
hash = (uintptr_t)lo->lo_name * 31 + (uintptr_t)p * 31 + line;
|
||||
hash &= LPROF_HASH_MASK;
|
||||
type = &lp_cpu[PCPU_GET(cpuid)]->lpc_types[spin];
|
||||
type = &LP_CPU_SELF->lpc_types[spin];
|
||||
head = &type->lpt_hash[hash];
|
||||
SLIST_FOREACH(lp, head, link) {
|
||||
if (lp->line == line && lp->file == p &&
|
||||
@ -538,7 +538,7 @@ lock_profile_object_lookup(struct lock_object *lo, int spin, const char *file,
|
||||
if (l->lpo_obj == lo && l->lpo_file == file &&
|
||||
l->lpo_line == line)
|
||||
return (l);
|
||||
type = &lp_cpu[PCPU_GET(cpuid)]->lpc_types[spin];
|
||||
type = &LP_CPU_SELF->lpc_types[spin];
|
||||
l = LIST_FIRST(&type->lpt_lpoalloc);
|
||||
if (l == NULL) {
|
||||
lock_prof_rejected++;
|
||||
@ -674,7 +674,7 @@ lock_profile_release_lock(struct lock_object *lo)
|
||||
lp->cnt_cur += l->lpo_cnt;
|
||||
release:
|
||||
LIST_REMOVE(l, lpo_link);
|
||||
type = &lp_cpu[PCPU_GET(cpuid)]->lpc_types[spin];
|
||||
type = &LP_CPU_SELF->lpc_types[spin];
|
||||
LIST_INSERT_HEAD(&type->lpt_lpoalloc, l, lpo_link);
|
||||
out:
|
||||
critical_exit();
|
||||
|
Loading…
x
Reference in New Issue
Block a user