Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 14 May 2011 21:03:44 +0000 (UTC)
From:      Marius Strobl <marius@FreeBSD.org>
To:        cvs-src-old@freebsd.org
Subject:   cvs commit: src/sys/sparc64/include pmap.h tsb.h src/sys/sparc64/sparc64 exception.S genassym.c mp_machdep.c pmap.c tsb.c
Message-ID:  <201105142103.p4EL3vnR017178@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
marius      2011-05-14 21:03:44 UTC

  FreeBSD src repository

  Modified files:        (Branch: RELENG_8)
    sys/sparc64/include  pmap.h tsb.h 
    sys/sparc64/sparc64  exception.S genassym.c mp_machdep.c 
                         pmap.c tsb.c 
  Log:
  SVN rev 221918 on 2011-05-14 21:03:44Z by marius
  
  MFC: r216803, r217058, r217514, r218457
  
  On UltraSPARC-III+ and greater take advantage of ASI_ATOMIC_QUAD_LDD_PHYS,
  which takes an physical address instead of an virtual one, for loading TTEs
  of the kernel TSB so we no longer need to lock the kernel TSB into the dTLB,
  which only has a very limited number of lockable dTLB slots. The net result
  is that we now basically can handle a kernel TSB of any size and no longer
  need to limit the kernel address space based on the number of dTLB slots
  available for locked entries. Consequently, other parts of the trap handlers
  now also only access the the kernel TSB via its physical address in order
  to avoid nested traps, as does the PMAP bootstrap code as we haven't taken
  over the trap table at that point, yet. Apart from that the kernel TSB now
  is accessed via a direct mapping when we are otherwise taking advantage of
  ASI_ATOMIC_QUAD_LDD_PHYS so no further code changes are needed. Most of this
  is implemented by extending the patching of the TSB addresses and mask as
  well as the ASIs used to load it into the trap table so the runtime overhead
  of this change is rather low.
  Theoretically it should be possible to use the same approach also for the
  user TSB, which already is not locked into the dTLB, avoiding nested traps.
  However, for reasons I don't understand yet OpenSolaris only does that with
  SPARC64 CPUs. On the other hand I think that also addressing the user TSB
  physically and thus avoiding nested traps would get us closer to sharing
  this code with sun4v, which only supports trap level 0 and 1, so eventually
  we could have a single kernel which runs on both sun4u and sun4v (as does
  Linux and OpenBSD).
  
  Revision    Changes    Path
  1.49.2.4    +5 -4      src/sys/sparc64/include/pmap.h
  1.19.10.2   +1 -0      src/sys/sparc64/include/tsb.h
  1.80.2.4    +119 -38   src/sys/sparc64/sparc64/exception.S
  1.76.2.6    +1 -0      src/sys/sparc64/sparc64/genassym.c
  1.52.2.11   +7 -2      src/sys/sparc64/sparc64/mp_machdep.c
  1.182.2.13  +200 -72   src/sys/sparc64/sparc64/pmap.c
  1.40.2.3    +5 -2      src/sys/sparc64/sparc64/tsb.c



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