svn commit: r221790 - projects/largeSMP/sys/sparc64/sparc64
Marius Strobl
marius at FreeBSD.org
Wed May 11 21:10:44 UTC 2011
Author: marius
Date: Wed May 11 21:10:43 2011
New Revision: 221790
URL: http://svn.freebsd.org/changeset/base/221790
Log:
Update for the fact that pm_active and pc_cpumask were changed to cpuset_t.
This now calculates pc_cpumask based on pc_cpuid itself as the former is
slated for being deorbited.
This branch now at least boots UP again. MP needs more things converted and
the existing conversion from cpumask_t to cpuset_t still has bugs.
Modified:
projects/largeSMP/sys/sparc64/sparc64/genassym.c
projects/largeSMP/sys/sparc64/sparc64/swtch.S
Modified: projects/largeSMP/sys/sparc64/sparc64/genassym.c
==============================================================================
--- projects/largeSMP/sys/sparc64/sparc64/genassym.c Wed May 11 20:31:27 2011 (r221789)
+++ projects/largeSMP/sys/sparc64/sparc64/genassym.c Wed May 11 21:10:43 2011 (r221790)
@@ -37,6 +37,7 @@ __FBSDID("$FreeBSD$");
#include <sys/proc.h>
#include <sys/smp.h>
#include <sys/vmmeter.h>
+#include <sys/_cpuset.h>
#include <vm/vm.h>
#include <vm/vm_page.h>
@@ -66,6 +67,8 @@ ASSYM(PCPU_PAGES, PCPU_PAGES);
ASSYM(TAR_VPN_SHIFT, TAR_VPN_SHIFT);
+ASSYM(_NCPUBITS, _NCPUBITS);
+
#ifdef SUN4U
ASSYM(TLB_DEMAP_ALL, TLB_DEMAP_ALL);
#endif
Modified: projects/largeSMP/sys/sparc64/sparc64/swtch.S
==============================================================================
--- projects/largeSMP/sys/sparc64/sparc64/swtch.S Wed May 11 20:31:27 2011 (r221789)
+++ projects/largeSMP/sys/sparc64/sparc64/swtch.S Wed May 11 21:10:43 2011 (r221790)
@@ -164,20 +164,29 @@ ENTRY(cpu_switch)
* If there was no non-kernel pmap, don't try to deactivate it.
*/
brz,pn %l2, 3f
- lduw [PCPU(CPUMASK)], %l4
+ lduw [PCPU(CPUID)], %l3
/*
* Mark the pmap of the last non-kernel vmspace to run as no longer
* active on this CPU.
*/
- lduw [%l2 + PM_ACTIVE], %l3
- andn %l3, %l4, %l3
- stw %l3, [%l2 + PM_ACTIVE]
+ mov _NCPUBITS, %l5
+ mov %g0, %y
+ udiv %l3, %l5, %l6
+ srl %l6, 0, %l4
+ sllx %l4, PTR_SHIFT, %l4
+ add %l4, PM_ACTIVE, %l4
+ smul %l6, %l5, %l5
+ sub %l3, %l5, %l5
+ mov 1, %l6
+ sllx %l6, %l5, %l5
+ ldx [%l2 + %l4], %l6
+ andn %l6, %l5, %l6
+ stx %l6, [%l2 + %l4]
/*
* Take away its context number.
*/
- lduw [PCPU(CPUID)], %l3
sllx %l3, INT_SHIFT, %l3
add %l2, PM_CONTEXT, %l4
mov -1, %l5
@@ -210,18 +219,27 @@ ENTRY(cpu_switch)
/*
* Set the new context number in the pmap.
*/
- lduw [PCPU(CPUID)], %i4
- sllx %i4, INT_SHIFT, %i4
+ lduw [PCPU(CPUID)], %l3
+ sllx %l3, INT_SHIFT, %i4
add %l1, PM_CONTEXT, %i5
stw %i3, [%i4 + %i5]
/*
* Mark the pmap as active on this CPU.
*/
- lduw [%l1 + PM_ACTIVE], %i4
- lduw [PCPU(CPUMASK)], %i5
- or %i4, %i5, %i4
- stw %i4, [%l1 + PM_ACTIVE]
+ mov _NCPUBITS, %l5
+ mov %g0, %y
+ udiv %l3, %l5, %l6
+ srl %l6, 0, %l4
+ sllx %l4, PTR_SHIFT, %l4
+ add %l4, PM_ACTIVE, %l4
+ smul %l6, %l5, %l5
+ sub %l3, %l5, %l5
+ mov 1, %l6
+ sllx %l6, %l5, %l5
+ ldx [%l1 + %l4], %l6
+ or %l6, %l5, %l6
+ stx %l6, [%l1 + %l4]
/*
* Make note of the change in pmap.
More information about the svn-src-projects
mailing list