Remove entirely pc_other_cpus usage and pc_cpumask usage from sparc64.

Tested and reviewed by:	marius
This commit is contained in:
Attilio Rao 2011-06-16 07:25:53 +00:00
parent dbab0763f9
commit 8a9ce51786
3 changed files with 15 additions and 22 deletions

View file

@ -283,7 +283,6 @@ sun4u_startcpu(phandle_t cpu, void *func, u_long arg)
void
cpu_mp_start(void)
{
cpuset_t ocpus;
mtx_init(&ipi_mtx, "ipi", NULL, MTX_SPIN);
@ -300,9 +299,6 @@ cpu_mp_start(void)
KASSERT(!isjbus || mp_ncpus <= IDR_JALAPENO_MAX_BN_PAIRS,
("%s: can only IPI a maximum of %d JBus-CPUs",
__func__, IDR_JALAPENO_MAX_BN_PAIRS));
ocpus = all_cpus;
CPU_CLR(curcpu, &ocpus);
PCPU_SET(other_cpus, ocpus);
smp_active = 1;
}
@ -424,7 +420,6 @@ cpu_mp_unleash(void *v)
void
cpu_mp_bootstrap(struct pcpu *pc)
{
cpuset_t ocpus;
volatile struct cpu_start_args *csa;
csa = &cpu_start_args;
@ -466,9 +461,6 @@ cpu_mp_bootstrap(struct pcpu *pc)
smp_cpus++;
KASSERT(curthread != NULL, ("%s: curthread", __func__));
ocpus = all_cpus;
CPU_CLR(curcpu, &ocpus);
PCPU_SET(other_cpus, ocpus);
printf("SMP: AP CPU #%d Launched!\n", curcpu);
csa->csa_count--;
@ -491,13 +483,14 @@ cpu_mp_shutdown(void)
int i;
critical_enter();
shutdown_cpus = PCPU_GET(other_cpus);
shutdown_cpus = all_cpus;
CPU_CLR(PCPU_GET(cpuid), &shutdown_cpus);
cpus = shutdown_cpus;
/* XXX: Stop all the CPUs which aren't already. */
if (CPU_CMP(&stopped_cpus, &cpus)) {
/* pc_other_cpus is just a flat "on" mask without curcpu. */
/* cpus is just a flat "on" mask without curcpu. */
CPU_NAND(&cpus, &stopped_cpus);
stop_cpus(cpus);
}
@ -520,23 +513,23 @@ cpu_ipi_ast(struct trapframe *tf)
static void
cpu_ipi_stop(struct trapframe *tf)
{
cpuset_t tcmask;
u_int cpuid;
CTR2(KTR_SMP, "%s: stopped %d", __func__, curcpu);
sched_pin();
savectx(&stoppcbs[curcpu]);
tcmask = PCPU_GET(cpumask);
CPU_OR_ATOMIC(&stopped_cpus, &tcmask);
while (!CPU_OVERLAP(&started_cpus, &tcmask)) {
if (CPU_OVERLAP(&shutdown_cpus, &tcmask)) {
CPU_NAND_ATOMIC(&shutdown_cpus, &tcmask);
cpuid = PCPU_GET(cpuid);
CPU_SET_ATOMIC(cpuid, &stopped_cpus);
while (!CPU_ISSET(cpuid, &started_cpus)) {
if (CPU_ISSET(cpuid, &shutdown_cpus)) {
CPU_CLR_ATOMIC(cpuid, &shutdown_cpus);
(void)intr_disable();
for (;;)
;
}
}
CPU_NAND_ATOMIC(&started_cpus, &tcmask);
CPU_NAND_ATOMIC(&stopped_cpus, &tcmask);
CPU_CLR_ATOMIC(cpuid, &started_cpus);
CPU_CLR_ATOMIC(cpuid, &stopped_cpus);
sched_unpin();
CTR2(KTR_SMP, "%s: restarted %d", __func__, curcpu);
}

View file

@ -2230,7 +2230,7 @@ pmap_activate(struct thread *td)
PCPU_SET(tlb_ctx, context + 1);
pm->pm_context[curcpu] = context;
CPU_OR(&pm->pm_active, PCPU_PTR(cpumask));
CPU_SET(PCPU_GET(cpuid), &pm->pm_active);
PCPU_SET(pmap, pm);
stxa(AA_DMMU_TSB, ASI_DMMU, pm->pm_tsb);

View file

@ -80,7 +80,7 @@ tlb_context_demap(struct pmap *pm)
PMAP_STATS_INC(tlb_ncontext_demap);
cookie = ipi_tlb_context_demap(pm);
s = intr_disable();
if (CPU_OVERLAP(&pm->pm_active, PCPU_PTR(cpumask))) {
if (CPU_ISSET(PCPU_GET(cpuid), &pm->pm_active)) {
KASSERT(pm->pm_context[curcpu] != -1,
("tlb_context_demap: inactive pmap?"));
stxa(TLB_DEMAP_PRIMARY | TLB_DEMAP_CONTEXT, ASI_DMMU_DEMAP, 0);
@ -101,7 +101,7 @@ tlb_page_demap(struct pmap *pm, vm_offset_t va)
PMAP_STATS_INC(tlb_npage_demap);
cookie = ipi_tlb_page_demap(pm, va);
s = intr_disable();
if (CPU_OVERLAP(&pm->pm_active, PCPU_PTR(cpumask))) {
if (CPU_ISSET(PCPU_GET(cpuid), &pm->pm_active)) {
KASSERT(pm->pm_context[curcpu] != -1,
("tlb_page_demap: inactive pmap?"));
if (pm == kernel_pmap)
@ -128,7 +128,7 @@ tlb_range_demap(struct pmap *pm, vm_offset_t start, vm_offset_t end)
PMAP_STATS_INC(tlb_nrange_demap);
cookie = ipi_tlb_range_demap(pm, start, end);
s = intr_disable();
if (CPU_OVERLAP(&pm->pm_active, PCPU_PTR(cpumask))) {
if (CPU_ISSET(PCPU_GET(cpuid), &pm->pm_active)) {
KASSERT(pm->pm_context[curcpu] != -1,
("tlb_range_demap: inactive pmap?"));
if (pm == kernel_pmap)