git: kernel - Add support for up to 63 cpus & 512G of ram for 64-bit builds.
Matthew Dillon
dillon at crater.dragonflybsd.org
Thu Dec 9 14:55:04 PST 2010
commit da23a592849ab6010314c28c571f343b43c9b6d5
Author: Matthew Dillon <dillon at apollo.backplane.com>
Date: Thu Dec 9 14:09:17 2010 -0800
kernel - Add support for up to 63 cpus & 512G of ram for 64-bit builds.
* Increase SMP_MAXCPU to 63 for 64-bit builds.
* cpumask_t is 64 bits on 64-bit builds now. It remains 32 bits on 32-bit
builds.
* Add #define's for atomic_set_cpumask(), atomic_clear_cpumask, and
atomic_cmpset_cpumask(). Replace all use cases on cpu masks with
these functions.
* Add CPUMASK(), BSRCPUMASK(), and BSFCPUMASK() macros. Replace all
use cases on cpu masks with these functions.
In particular note that (1 << cpu) just doesn't work with a 64-bit
cpumask.
Numerous bits of assembly also had to be adjusted to use e.g. btq instead
of btl, etc.
* Change __uint32_t declarations that were meant to be cpu masks to use
cpumask_t (most already have).
Also change other bits of code which work on cpu masks to be more agnostic.
For example, poll_cpumask0 and lwp_cpumask.
* 64-bit atomic ops cannot use "iq", they must use "r", because most x86-64
do NOT have 64-bit immediate value support.
* Rearrange initial kernel memory allocations to start from KvaStart and
not KERNBASE, because only 2GB of KVM is available after KERNBASE.
Certain VM allocations with > 32G of ram can exceed 2GB. For example,
vm_page_array[]. 2GB was not enough.
* Remove numerous mdglobaldata fields that are not used.
* Align CPU_prvspace[] for now. Eventually it will be moved into a
mapped area. Reserve sufficient space at MPPTDI now, but it is
still unused.
* When pre-allocating kernel page table PD entries calculate the number
of page table pages at KvaStart and at KERNBASE separately, since
the KVA space starting at KERNBASE caps out at 2GB.
* Change kmem_init() and vm_page_startup() to not take memory range
arguments. Instead the globals (virtual_start and virtual_end) are
manipualted directly.
Summary of changes:
sys/cpu/i386/include/atomic.h | 5 ++
sys/cpu/i386/include/types.h | 3 +
sys/cpu/x86_64/include/atomic.h | 55 ++++++++------
sys/cpu/x86_64/include/param.h | 2 +-
sys/cpu/x86_64/include/types.h | 7 ++-
sys/dev/acpica5/acpi_cpu.c | 2 +-
sys/kern/init_main.c | 4 +-
sys/kern/kern_mplock.c | 10 ++--
sys/kern/kern_poll.c | 14 ++--
sys/kern/kern_proc.c | 2 +-
sys/kern/kern_synch.c | 10 ++--
sys/kern/kern_usched.c | 15 ++--
sys/kern/lwkt_ipiq.c | 12 ++--
sys/kern/usched_bsd4.c | 40 +++++-----
sys/kern/usched_dummy.c | 30 ++++----
sys/netinet/tcp_subr.c | 2 +-
sys/platform/pc32/acpica5/madt.c | 2 +-
sys/platform/pc32/apic/mpapic.c | 6 +-
sys/platform/pc32/i386/genassym.c | 3 +-
sys/platform/pc32/i386/machdep.c | 2 +-
sys/platform/pc32/i386/mp_machdep.c | 42 ++++++-----
sys/platform/pc32/i386/pmap.c | 7 +-
sys/platform/pc32/i386/pmap_inval.c | 4 +-
sys/platform/pc32/i386/vm_machdep.c | 4 +-
sys/platform/pc32/include/globaldata.h | 6 +-
sys/platform/pc32/include/pmap.h | 3 +-
sys/platform/pc32/include/smp.h | 10 ++--
sys/platform/pc64/acpica5/madt.c | 2 +-
sys/platform/pc64/apic/apic_vector.s | 14 ++--
sys/platform/pc64/apic/mpapic.c | 12 +---
sys/platform/pc64/include/globaldata.h | 35 ++++-----
sys/platform/pc64/include/pmap.h | 21 ++++--
sys/platform/pc64/include/smp.h | 10 ++--
sys/platform/pc64/include/vmparam.h | 9 ++-
sys/platform/pc64/isa/clock.c | 2 +-
sys/platform/pc64/x86_64/db_interface.c | 14 ++--
sys/platform/pc64/x86_64/genassym.c | 3 +-
sys/platform/pc64/x86_64/global.s | 10 ---
sys/platform/pc64/x86_64/machdep.c | 8 +--
sys/platform/pc64/x86_64/mp_machdep.c | 100 ++++++++++---------------
sys/platform/pc64/x86_64/pmap.c | 53 +++++++-------
sys/platform/pc64/x86_64/pmap_inval.c | 4 +-
sys/platform/pc64/x86_64/swtch.s | 16 ++--
sys/platform/vkernel/i386/cpu_regs.c | 2 +-
sys/platform/vkernel/i386/db_interface.c | 8 +-
sys/platform/vkernel/i386/genassym.c | 3 +-
sys/platform/vkernel/i386/mp.c | 40 +++++-----
sys/platform/vkernel/include/globaldata.h | 6 +-
sys/platform/vkernel/include/pmap.h | 3 +-
sys/platform/vkernel/include/smp.h | 12 ++--
sys/platform/vkernel/platform/pmap.c | 34 +++++----
sys/platform/vkernel64/include/globaldata.h | 6 +-
sys/platform/vkernel64/include/pmap.h | 3 +
sys/platform/vkernel64/include/smp.h | 12 ++--
sys/platform/vkernel64/platform/pmap.c | 8 +-
sys/platform/vkernel64/x86_64/cpu_regs.c | 2 +-
sys/platform/vkernel64/x86_64/db_interface.c | 8 +-
sys/platform/vkernel64/x86_64/mp.c | 40 +++++-----
sys/platform/vkernel64/x86_64/swtch.s | 12 ++--
sys/sys/globaldata.h | 2 +-
sys/sys/mplock2.h | 6 +-
sys/sys/thread2.h | 4 +-
sys/vm/vm_extern.h | 2 +-
sys/vm/vm_init.c | 6 +-
sys/vm/vm_kern.c | 22 +++----
sys/vm/vm_page.c | 25 ++++---
sys/vm/vm_page.h | 2 +-
67 files changed, 447 insertions(+), 436 deletions(-)
http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/da23a592849ab6010314c28c571f343b43c9b6d5
--
DragonFly BSD source repository
More information about the Commits
mailing list