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:
Bosko Milekic 2001-08-01 00:54:00 +00:00
parent 46da4bc6fc
commit bb6f838c79
2 changed files with 13 additions and 16 deletions

View File

@ -61,21 +61,6 @@
#define NCPU MAXCPU
#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
* (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.
*/
#ifdef SMP
#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)]

View File

@ -27,6 +27,13 @@ extern u_int all_cpus;
extern volatile u_int started_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.
*
@ -54,7 +61,8 @@ void smp_rendezvous(void (*)(void *),
void (*)(void *),
void (*)(void *),
void *arg);
#else /* SMP */
#define CPU_ABSENT(x_cpu) (0)
#endif /* SMP */
#endif /* !LOCORE */
#endif /* _KERNEL */