diff options
author | jhb <jhb@FreeBSD.org> | 2001-01-24 19:49:13 +0000 |
---|---|---|
committer | jhb <jhb@FreeBSD.org> | 2001-01-24 19:49:13 +0000 |
commit | 9f8dbccd5690e7781a608a577902eb6238522fc3 (patch) | |
tree | bac5bcae1d8dfdc0eee292920a4f526b8ed89e11 /sys | |
parent | 1acb4466b06b7dde27e22ccf97f77182199cd3b0 (diff) | |
download | FreeBSD-src-9f8dbccd5690e7781a608a577902eb6238522fc3.zip FreeBSD-src-9f8dbccd5690e7781a608a577902eb6238522fc3.tar.gz |
- Remove some unused and unneeded atomic operations sitting in mp_machdep.c
that are already implemented in atomic.h.
- Fix SMP kernel builds.
Diffstat (limited to 'sys')
-rw-r--r-- | sys/alpha/alpha/mp_machdep.c | 70 | ||||
-rw-r--r-- | sys/alpha/alpha/pmap.c | 4 |
2 files changed, 13 insertions, 61 deletions
diff --git a/sys/alpha/alpha/mp_machdep.c b/sys/alpha/alpha/mp_machdep.c index af9d943..bf61c11 100644 --- a/sys/alpha/alpha/mp_machdep.c +++ b/sys/alpha/alpha/mp_machdep.c @@ -268,7 +268,7 @@ smp_start_secondary(int cpuid) void globaldata_register(struct globaldata *globaldata) { - cpuid_to_globaldata[globaldata->cpuid] = globaldata; + cpuid_to_globaldata[globaldata->gd_cpuid] = globaldata; } struct globaldata * @@ -912,32 +912,13 @@ smp_ipi_self(u_int64_t ipi) smp_ipi_selected(1 << PCPU_GET(cpuid), ipi); } -static u_int64_t -atomic_readandclear(u_int64_t* p) -{ - u_int64_t v, temp; - __asm__ __volatile__ ( - "wmb\n" /* ensure pending writes have drained */ - "1:\tldq_l %0,%3\n\t" /* load current value, asserting lock */ - "ldiq %1,0\n\t" /* value to store */ - "stq_c %1,%2\n\t" /* attempt to store */ - "beq %1,2f\n\t" /* if the store failed, spin */ - "br 3f\n" /* it worked, exit */ - "2:\tbr 1b\n" /* *p not updated, loop */ - "3:\tmb\n" /* it worked */ - : "=&r"(v), "=&r"(temp), "=m" (*p) - : "m"(*p) - : "memory"); - return v; -} - /* * Handle an IPI sent to this processor. */ void smp_handle_ipi(struct trapframe *frame) { - u_int64_t ipis = atomic_readandclear(PCPU_PTR(pending_ipis)); + u_int64_t ipis = atomic_readandclear_64(PCPU_PTR(pending_ipis)); u_int64_t ipi; int cpumask; @@ -970,12 +951,15 @@ smp_handle_ipi(struct trapframe *frame) case IPI_CHECKSTATE: CTR0(KTR_SMP, "IPI_CHECKSTATE"); if (frame->tf_regs[FRAME_PS] & ALPHA_PSL_USERMODE) - checkstate_cpustate[cpuid] = CHECKSTATE_USER; + checkstate_cpustate[PCPU_GET(cpuid)] = + CHECKSTATE_USER; else if (curproc->p_intr_nesting_level == 1) - checkstate_cpustate[cpuid] = CHECKSTATE_SYS; + checkstate_cpustate[PCPU_GET(cpuid)] = + CHECKSTATE_SYS; else - checkstate_cpustate[cpuid] = CHECKSTATE_INTR; - checkstate_curproc[cpuid] = PCPU_GET(curproc); + checkstate_cpustate[PCPU_GET(cpuid)] = + CHECKSTATE_INTR; + checkstate_curproc[PCPU_GET(cpuid)] = curproc; atomic_set_int(&checkstate_probed_cpus, cpumask); break; @@ -999,39 +983,3 @@ smp_handle_ipi(struct trapframe *frame) alpha_mb(); } } - -#if 0 - -/* - * Atomically compare the value stored at *p with cmpval and if the - * two values are equal, update the value of *p with newval. Returns - * zero if the compare failed, nonzero otherwise. - */ -u_int64_t -atomic_cmpset_64(volatile u_int64_t* p, u_int64_t cmpval, u_int64_t newval) -{ - u_int64_t ret, temp; - - - printf("atomic_cmpset_64: *p=%lx, cmpval=%lx, newval=%lx\n", - *p, cmpval, newval); - __asm __volatile ( - "1:\tldq_l %1, %5\n\t" /* load old value */ - "cmpeq %1, %3, %0\n\t" /* compare */ - "beq %0, 2f\n\t" /* exit if not equal */ - "mov %4, %1\n\t" /* value to store */ - "stq_c %1, %2\n\t" /* attempt to store */ - "beq %1, 3f\n\t" /* if it failed, spin */ - "2:\n" /* done */ - ".section .text3,\"ax\"\n" /* improve branch prediction */ - "3:\tbr 1b\n" /* try again */ - ".previous\n" - : "=&r" (ret), "=r" (temp), "=m" (*p) - : "r" (cmpval), "r" (newval), "m" (*p) - : "memory"); - printf("atomic_cmpset_64: *p=%lx\n", *p); - - return ret; -} - -#endif diff --git a/sys/alpha/alpha/pmap.c b/sys/alpha/alpha/pmap.c index 0a8fc4d..cbd44ae 100644 --- a/sys/alpha/alpha/pmap.c +++ b/sys/alpha/alpha/pmap.c @@ -359,6 +359,10 @@ static int pmap_release_free_page __P((pmap_t pmap, vm_page_t p)); static vm_page_t _pmap_allocpte __P((pmap_t pmap, unsigned ptepindex)); static vm_page_t pmap_page_lookup __P((vm_object_t object, vm_pindex_t pindex)); static int pmap_unuse_pt __P((pmap_t, vm_offset_t, vm_page_t)); +#ifdef SMP +static void pmap_invalidate_page_action __P((void *arg)); +static void pmap_invalidate_all_action __P((void *arg)); +#endif /* |