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