Move CPU_ABSENT() macro to smp.h, where it belongs anyway. It will be
defined to 0 in the non-SMP case, which very much makes sense as it permits its usage in per-CPU initialization loops (for an example, check out subr_mbuf.c). Further, on a UP system, make mb_alloc always use the first per-CPU container, regardless of cpuid (i.e. remove reliability on cpuid in the UP case). Requested by: alfred
This commit is contained in:
parent
db46728f21
commit
cceec8d181
@ -61,21 +61,6 @@
|
|||||||
#define NCPU MAXCPU
|
#define NCPU MAXCPU
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
|
||||||
* Macros allowing us to determine whether or not a given CPU's container
|
|
||||||
* should be configured during mb_init().
|
|
||||||
* XXX: Eventually we may want to provide hooks for CPU spinon/spinoff that
|
|
||||||
* will allow us to configure the containers on spinon/spinoff. As it
|
|
||||||
* stands, booting with CPU x disactivated and activating CPU x only
|
|
||||||
* after bootup will lead to disaster and CPU x's container will be
|
|
||||||
* uninitialized.
|
|
||||||
*/
|
|
||||||
#ifdef SMP
|
|
||||||
#define CPU_ABSENT(x) ((all_cpus & (1 << x)) == 0)
|
|
||||||
#else
|
|
||||||
#define CPU_ABSENT(x) 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The mbuf allocator is heavily based on Alfred Perlstein's
|
* The mbuf allocator is heavily based on Alfred Perlstein's
|
||||||
* (alfred@FreeBSD.org) "memcache" allocator which is itself based
|
* (alfred@FreeBSD.org) "memcache" allocator which is itself based
|
||||||
@ -213,7 +198,11 @@ struct mtx mbuf_gen, mbuf_pcpu[NCPU];
|
|||||||
/*
|
/*
|
||||||
* Local macros for internal allocator structure manipulations.
|
* Local macros for internal allocator structure manipulations.
|
||||||
*/
|
*/
|
||||||
|
#ifdef SMP
|
||||||
#define MB_GET_PCPU_LIST(mb_lst) (mb_lst)->ml_cntlst[PCPU_GET(cpuid)]
|
#define MB_GET_PCPU_LIST(mb_lst) (mb_lst)->ml_cntlst[PCPU_GET(cpuid)]
|
||||||
|
#else
|
||||||
|
#define MB_GET_PCPU_LIST(mb_lst) (mb_lst)->ml_cntlst[0]
|
||||||
|
#endif
|
||||||
|
|
||||||
#define MB_GET_PCPU_LIST_NUM(mb_lst, num) (mb_lst)->ml_cntlst[(num)]
|
#define MB_GET_PCPU_LIST_NUM(mb_lst, num) (mb_lst)->ml_cntlst[(num)]
|
||||||
|
|
||||||
|
@ -27,6 +27,13 @@ extern u_int all_cpus;
|
|||||||
extern volatile u_int started_cpus;
|
extern volatile u_int started_cpus;
|
||||||
extern volatile u_int stopped_cpus;
|
extern volatile u_int stopped_cpus;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Macro allowing us to determine whether a CPU is absent at any given
|
||||||
|
* time, thus permitting us to configure sparse maps of cpuid-dependent
|
||||||
|
* (per-CPU) structures.
|
||||||
|
*/
|
||||||
|
#define CPU_ABSENT(x_cpu) ((all_cpus & (1 << (x_cpu))) == 0)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Machine dependent functions used to initialize MP support.
|
* Machine dependent functions used to initialize MP support.
|
||||||
*
|
*
|
||||||
@ -54,7 +61,8 @@ void smp_rendezvous(void (*)(void *),
|
|||||||
void (*)(void *),
|
void (*)(void *),
|
||||||
void (*)(void *),
|
void (*)(void *),
|
||||||
void *arg);
|
void *arg);
|
||||||
|
#else /* SMP */
|
||||||
|
#define CPU_ABSENT(x_cpu) (0)
|
||||||
#endif /* SMP */
|
#endif /* SMP */
|
||||||
#endif /* !LOCORE */
|
#endif /* !LOCORE */
|
||||||
#endif /* _KERNEL */
|
#endif /* _KERNEL */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user