Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 26 Apr 2023 14:13:59 GMT
From:      Mark Johnston <markj@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: 78cfa762ebf2 - main - callout: Move per-CPU callout state into the dpcpu region
Message-ID:  <202304261413.33QEDxBD086666@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch main has been updated by markj:

URL: https://cgit.FreeBSD.org/src/commit/?id=78cfa762ebf2afc821e49e41c7bc72cc9044c233

commit 78cfa762ebf2afc821e49e41c7bc72cc9044c233
Author:     Mark Johnston <markj@FreeBSD.org>
AuthorDate: 2023-04-26 14:09:09 +0000
Commit:     Mark Johnston <markj@FreeBSD.org>
CommitDate: 2023-04-26 14:09:09 +0000

    callout: Move per-CPU callout state into the dpcpu region
    
    This eliminates some static bloat in amd64 kernels and reduces the
    penalty of increasing MAXCPU.  The structures now also maintain NUMA
    affinity.  No functional change intended.
    
    PR:             269572
    Reviewed by:    mjg, kib
    MFC after:      2 weeks
    Sponsored by:   The FreeBSD Foundation
    Differential Revision:  https://reviews.freebsd.org/D39807
---
 sys/kern/kern_timeout.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/sys/kern/kern_timeout.c b/sys/kern/kern_timeout.c
index 05497f3d46d7..374e8f2b172a 100644
--- a/sys/kern/kern_timeout.c
+++ b/sys/kern/kern_timeout.c
@@ -195,9 +195,9 @@ struct callout_cpu {
 #define	cc_migration_time(cc, dir)	cc->cc_exec_entity[dir].ce_migration_time
 #define	cc_migration_prec(cc, dir)	cc->cc_exec_entity[dir].ce_migration_prec
 
-static struct callout_cpu cc_cpu[MAXCPU];
+DPCPU_DEFINE_STATIC(struct callout_cpu, cc_cpu);
 #define	CPUBLOCK	MAXCPU
-#define	CC_CPU(cpu)	(&cc_cpu[(cpu)])
+#define	CC_CPU(cpu)	DPCPU_ID_PTR(cpu, cc_cpu)
 #define	CC_SELF()	CC_CPU(PCPU_GET(cpuid))
 #else
 static struct callout_cpu cc_cpu;
@@ -321,7 +321,7 @@ callout_cpu_init(struct callout_cpu *cc, int cpu)
 {
 	int i;
 
-	mtx_init(&cc->cc_lock, "callout", NULL, MTX_SPIN);
+	mtx_init(&cc->cc_lock, "callout", NULL, MTX_SPIN | MTX_NEW);
 	cc->cc_callwheel = malloc_domainset(sizeof(struct callout_list) *
 	    callwheelsize, M_CALLOUT,
 	    DOMAINSET_PREF(pcpu_find(cpu)->pc_domain), M_WAITOK);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202304261413.33QEDxBD086666>