Author: mjg
Date: Sun Sep 22 20:44:24 2019
New Revision: 352611
URL: https://svnweb.freebsd.org/changeset/base/352611

Log:
  lockprof: move per-cpu data to dpcpu
  
  Reviewed by:  kib
  Sponsored by: The FreeBSD Foundation
  Differential Revision:        https://reviews.freebsd.org/D21747

Modified:
  head/sys/kern/subr_lock.c

Modified: head/sys/kern/subr_lock.c
==============================================================================
--- head/sys/kern/subr_lock.c   Sun Sep 22 20:03:25 2019        (r352610)
+++ head/sys/kern/subr_lock.c   Sun Sep 22 20:44:24 2019        (r352611)
@@ -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_pro
        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, 
                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
                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();
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to