From f6cea17c365d0350493e0faa4318339e0e89d52f Mon Sep 17 00:00:00 2001 From: thorpej Date: Tue, 23 May 2000 05:12:53 +0000 Subject: [PATCH] Rename the atomic operations to have generic machine-independent names, and define __HAVE_ATOMIC_OPERATIONS to indicate their existence. --- sys/arch/alpha/alpha/cpu.c | 12 +++--- sys/arch/alpha/alpha/interrupt.c | 6 +-- sys/arch/alpha/alpha/ipifuncs.c | 10 ++--- sys/arch/alpha/alpha/machdep.c | 6 +-- sys/arch/alpha/alpha/pmap.c | 16 +++---- sys/arch/alpha/include/atomic.h | 74 +++++++++++++++++--------------- sys/arch/alpha/include/intr.h | 4 +- sys/arch/alpha/include/pmap.h | 4 +- sys/arch/alpha/include/types.h | 3 +- 9 files changed, 70 insertions(+), 65 deletions(-) diff --git a/sys/arch/alpha/alpha/cpu.c b/sys/arch/alpha/alpha/cpu.c index 00ac809502cb..73a3fc9bb201 100644 --- a/sys/arch/alpha/alpha/cpu.c +++ b/sys/arch/alpha/alpha/cpu.c @@ -1,4 +1,4 @@ -/* $NetBSD: cpu.c,v 1.43 2000/04/03 01:47:28 thorpej Exp $ */ +/* $NetBSD: cpu.c,v 1.44 2000/05/23 05:12:53 thorpej Exp $ */ /*- * Copyright (c) 1998, 1999 The NetBSD Foundation, Inc. @@ -66,7 +66,7 @@ #include /* RCS ID & Copyright macro defns */ -__KERNEL_RCSID(0, "$NetBSD: cpu.c,v 1.43 2000/04/03 01:47:28 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: cpu.c,v 1.44 2000/05/23 05:12:53 thorpej Exp $"); #include "opt_multiprocessor.h" @@ -373,7 +373,7 @@ recognized: */ if (ma->ma_slot == hwrpb->rpb_primary_cpu_id) { ci->ci_flags |= CPUF_PRIMARY; - alpha_atomic_setbits_q(&cpus_running, (1UL << ma->ma_slot)); + atomic_setbits_ulong(&cpus_running, (1UL << ma->ma_slot)); } #endif /* MULTIPROCESSOR */ } @@ -523,7 +523,7 @@ cpu_hatch(ci) curpcb = ci->ci_idle_pcb_paddr; /* Mark the kernel pmap active on this processor. */ - alpha_atomic_setbits_q(&pmap_kernel()->pm_cpus, cpumask); + atomic_setbits_ulong(&pmap_kernel()->pm_cpus, cpumask); /* Initialize trap vectors for this processor. */ trap_init(); @@ -531,7 +531,7 @@ cpu_hatch(ci) /* Yahoo! We're running kernel code! Announce it! */ printf("%s: processor ID %lu running\n", ci->ci_dev->dv_xname, alpha_pal_whami()); - alpha_atomic_setbits_q(&cpus_running, cpumask); + atomic_setbits_ulong(&cpus_running, cpumask); /* * Lower interrupt level so that we can get IPIs. Don't use @@ -571,7 +571,7 @@ cpu_iccb_send(cpu_id, msg) */ strcpy(pcsp->pcs_iccb.iccb_rxbuf, msg); pcsp->pcs_iccb.iccb_rxlen = strlen(msg); - alpha_atomic_setbits_q(&hwrpb->rpb_rxrdy, cpumask); + atomic_setbits_ulong(&hwrpb->rpb_rxrdy, cpumask); /* Wait for the message to be received. */ for (timeout = 10000; timeout != 0; timeout--) { diff --git a/sys/arch/alpha/alpha/interrupt.c b/sys/arch/alpha/alpha/interrupt.c index 3b391e4ceb15..be4638ce1acb 100644 --- a/sys/arch/alpha/alpha/interrupt.c +++ b/sys/arch/alpha/alpha/interrupt.c @@ -1,4 +1,4 @@ -/* $NetBSD: interrupt.c,v 1.43 2000/02/29 21:42:54 thorpej Exp $ */ +/* $NetBSD: interrupt.c,v 1.44 2000/05/23 05:12:53 thorpej Exp $ */ /* * Copyright (c) 1994, 1995, 1996 Carnegie-Mellon University. @@ -36,7 +36,7 @@ #include /* RCS ID & Copyright macro defns */ -__KERNEL_RCSID(0, "$NetBSD: interrupt.c,v 1.43 2000/02/29 21:42:54 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: interrupt.c,v 1.44 2000/05/23 05:12:53 thorpej Exp $"); #include #include @@ -93,7 +93,7 @@ interrupt(a0, a1, a2, framep) } #endif - pending_ipis = alpha_atomic_loadlatch_q(&ci->ci_ipis, 0); + pending_ipis = atomic_loadlatch_ulong(&ci->ci_ipis, 0); for (bit = 0; bit < ALPHA_NIPIS; bit++) if (pending_ipis & (1UL << bit)) (*ipifuncs[bit])(); diff --git a/sys/arch/alpha/alpha/ipifuncs.c b/sys/arch/alpha/alpha/ipifuncs.c index 43e170653141..8c25598b9720 100644 --- a/sys/arch/alpha/alpha/ipifuncs.c +++ b/sys/arch/alpha/alpha/ipifuncs.c @@ -1,4 +1,4 @@ -/* $NetBSD: ipifuncs.c,v 1.9 1999/12/02 01:09:11 thorpej Exp $ */ +/* $NetBSD: ipifuncs.c,v 1.10 2000/05/23 05:12:54 thorpej Exp $ */ /*- * Copyright (c) 1998, 1999 The NetBSD Foundation, Inc. @@ -39,7 +39,7 @@ #include /* RCS ID & Copyright macro defns */ -__KERNEL_RCSID(0, "$NetBSD: ipifuncs.c,v 1.9 1999/12/02 01:09:11 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ipifuncs.c,v 1.10 2000/05/23 05:12:54 thorpej Exp $"); /* * Interprocessor interrupt handlers. @@ -90,7 +90,7 @@ alpha_send_ipi(cpu_id, ipimask) panic("alpha_sched_ipi: bogus cpu_id"); #endif - alpha_atomic_setbits_q(&cpu_info[cpu_id].ci_ipis, ipimask); + atomic_setbits_ulong(&cpu_info[cpu_id].ci_ipis, ipimask); printf("SENDING IPI TO %lu\n", cpu_id); alpha_pal_wripir(cpu_id); printf("IPI SENT\n"); @@ -122,7 +122,7 @@ alpha_ipi_halt() (void) splhigh(); printf("%s: shutting down...\n", cpu_info[cpu_id].ci_dev->dv_xname); - alpha_atomic_clearbits_q(&cpus_running, (1UL << cpu_id)); + atomic_clearbits_ulong(&cpus_running, (1UL << cpu_id)); pcsp->pcs_flags &= ~(PCS_RC | PCS_HALT_REQ); pcsp->pcs_flags |= PCS_HALT_STAY_HALTED; @@ -136,7 +136,7 @@ alpha_ipi_tbia() u_long cpu_id = alpha_pal_whami(); /* If we're doing a TBIA, we don't need to do a TBIAP or a SHOOTDOWN. */ - alpha_atomic_clearbits_q(&cpu_info[cpu_id].ci_ipis, + atomic_clearbits_ulong(&cpu_info[cpu_id].ci_ipis, ALPHA_IPI_TBIAP|ALPHA_IPI_SHOOTDOWN); ALPHA_TBIA(); diff --git a/sys/arch/alpha/alpha/machdep.c b/sys/arch/alpha/alpha/machdep.c index aae170360e5f..440b7079d93b 100644 --- a/sys/arch/alpha/alpha/machdep.c +++ b/sys/arch/alpha/alpha/machdep.c @@ -1,4 +1,4 @@ -/* $NetBSD: machdep.c,v 1.205 2000/05/22 17:13:53 thorpej Exp $ */ +/* $NetBSD: machdep.c,v 1.206 2000/05/23 05:12:54 thorpej Exp $ */ /*- * Copyright (c) 1998, 1999 The NetBSD Foundation, Inc. @@ -79,7 +79,7 @@ #include /* RCS ID & Copyright macro defns */ -__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.205 2000/05/22 17:13:53 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.206 2000/05/23 05:12:54 thorpej Exp $"); #include #include @@ -1840,7 +1840,7 @@ do_sir() { u_int64_t n; - while ((n = alpha_atomic_loadlatch_q(&ssir, 0)) != 0) { + while ((n = atomic_loadlatch_ulong(&ssir, 0)) != 0) { #define COUNT_SOFT uvmexp.softs++ #define DO_SIR(bit, fn) \ diff --git a/sys/arch/alpha/alpha/pmap.c b/sys/arch/alpha/alpha/pmap.c index 0d292065d414..37f358e5a978 100644 --- a/sys/arch/alpha/alpha/pmap.c +++ b/sys/arch/alpha/alpha/pmap.c @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.c,v 1.131 2000/04/10 00:48:35 thorpej Exp $ */ +/* $NetBSD: pmap.c,v 1.132 2000/05/23 05:12:54 thorpej Exp $ */ /*- * Copyright (c) 1998, 1999, 2000 The NetBSD Foundation, Inc. @@ -154,7 +154,7 @@ #include /* RCS ID & Copyright macro defns */ -__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.131 2000/04/10 00:48:35 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.132 2000/05/23 05:12:54 thorpej Exp $"); #include #include @@ -737,8 +737,8 @@ do { \ * * Increment or decrement a pmap statistic. */ -#define PMAP_STAT_INCR(s, v) alpha_atomic_add_q((unsigned long *)(&(s)), (v)) -#define PMAP_STAT_DECR(s, v) alpha_atomic_sub_q((unsigned long *)(&(s)), (v)) +#define PMAP_STAT_INCR(s, v) atomic_add_ulong((unsigned long *)(&(s)), (v)) +#define PMAP_STAT_DECR(s, v) atomic_sub_ulong((unsigned long *)(&(s)), (v)) /* * pmap_bootstrap: @@ -980,7 +980,7 @@ pmap_bootstrap(ptaddr, maxasn, ncpuids) /* * Mark the kernel pmap `active' on this processor. */ - alpha_atomic_setbits_q(&pmap_kernel()->pm_cpus, + atomic_setbits_ulong(&pmap_kernel()->pm_cpus, (1UL << cpu_number())); } @@ -2275,7 +2275,7 @@ pmap_activate(p) /* * Mark the pmap in use by this processor. */ - alpha_atomic_setbits_q(&pmap->pm_cpus, (1UL << cpu_id)); + atomic_setbits_ulong(&pmap->pm_cpus, (1UL << cpu_id)); /* * Move the pmap to the end of the LRU list. @@ -2321,7 +2321,7 @@ pmap_deactivate(p) /* * Mark the pmap no longer in use by this processor. */ - alpha_atomic_clearbits_q(&pmap->pm_cpus, (1UL << cpu_number())); + atomic_clearbits_ulong(&pmap->pm_cpus, (1UL << cpu_number())); } /* @@ -3983,7 +3983,7 @@ pmap_asn_alloc(pmap, cpu_id) * Have a new ASN, so there's no need to sync the I-stream * on the way back out to userspace. */ - alpha_atomic_clearbits_q(&pmap->pm_needisync, (1UL << cpu_id)); + atomic_clearbits_ulong(&pmap->pm_needisync, (1UL << cpu_id)); #endif } diff --git a/sys/arch/alpha/include/atomic.h b/sys/arch/alpha/include/atomic.h index 9f7e204f4567..a9a0bf69326a 100644 --- a/sys/arch/alpha/include/atomic.h +++ b/sys/arch/alpha/include/atomic.h @@ -1,4 +1,4 @@ -/* $NetBSD: atomic.h,v 1.3 2000/03/05 18:46:14 thorpej Exp $ */ +/* $NetBSD: atomic.h,v 1.4 2000/05/23 05:12:55 thorpej Exp $ */ /*- * Copyright (c) 1998, 1999 The NetBSD Foundation, Inc. @@ -44,32 +44,36 @@ #ifndef _ALPHA_ATOMIC_H_ #define _ALPHA_ATOMIC_H_ -static __inline void alpha_atomic_setbits_q __P((__volatile unsigned long *, - unsigned long)) __attribute__((__unused__)); -static __inline void alpha_atomic_clearbits_q __P((__volatile unsigned long *, - unsigned long)) __attribute__((__unused__)); +static __inline void atomic_setbits_ulong + __P((__volatile unsigned long *, unsigned long)) + __attribute__((__unused__)); +static __inline void atomic_clearbits_ulong + __P((__volatile unsigned long *, unsigned long)) + __attribute__((__unused__)); -static __inline void alpha_atomic_add_q __P((__volatile unsigned long *, - unsigned long)) __attribute__((__unused__)); -static __inline void alpha_atomic_sub_q __P((__volatile unsigned long *, - unsigned long)) __attribute__((__unused__)); +static __inline void atomic_add_ulong + __P((__volatile unsigned long *, unsigned long)) + __attribute__((__unused__)); +static __inline void atomic_sub_ulong + __P((__volatile unsigned long *, unsigned long)) + __attribute__((__unused__)); -static __inline unsigned long alpha_atomic_loadlatch_q +static __inline unsigned long atomic_loadlatch_ulong __P((__volatile unsigned long *, unsigned long)) __attribute__((__unused__)); /* - * alpha_atomic_setbits_q: + * atomic_setbits_ulong: * - * Atomically set bits in a quadword. + * Atomically set bits in a `unsigned long'. */ static __inline void -alpha_atomic_setbits_q(__volatile unsigned long *ulp, unsigned long v) +atomic_setbits_ulong(__volatile unsigned long *ulp, unsigned long v) { unsigned long t0; __asm __volatile( - "# BEGIN alpha_atomic_setbits_q\n" + "# BEGIN atomic_setbits_ulong\n" "1: ldq_l %0, %3 \n" " or %0, %2, %0 \n" " stq_c %0, %1 \n" @@ -78,23 +82,23 @@ alpha_atomic_setbits_q(__volatile unsigned long *ulp, unsigned long v) " br 3f \n" "2: br 1b \n" "3: \n" - " # END alpha_atomic_setbits_q" + " # END atomic_setbits_ulong" : "=r" (t0), "=m" (*ulp) : "r" (v), "1" (*ulp)); } /* - * alpha_atomic_clearbits_q: + * atomic_clearbits_ulong: * - * Atomically clear bits in a quadword. + * Atomically clear bits in a `unsigned long'. */ static __inline void -alpha_atomic_clearbits_q(__volatile unsigned long *ulp, unsigned long v) +atomic_clearbits_ulong(__volatile unsigned long *ulp, unsigned long v) { unsigned long t0; __asm __volatile( - "# BEGIN alpha_atomic_clearbits_q\n" + "# BEGIN atomic_clearbits_ulong\n" "1: ldq_l %0, %3 \n" " and %0, %2, %0 \n" " stq_c %0, %1 \n" @@ -103,23 +107,23 @@ alpha_atomic_clearbits_q(__volatile unsigned long *ulp, unsigned long v) " br 3f \n" "2: br 1b \n" "3: \n" - " # END alpha_atomic_clearbits_q" + " # END atomic_clearbits_ulong" : "=r" (t0), "=m" (*ulp) : "r" (~v), "1" (*ulp)); } /* - * alpha_atomic_add_q: + * atomic_add_ulong: * - * Atomically add a value to a quadword. + * Atomically add a value to a `unsigned long'. */ static __inline void -alpha_atomic_add_q(__volatile unsigned long *ulp, unsigned long v) +atomic_add_ulong(__volatile unsigned long *ulp, unsigned long v) { unsigned long t0; __asm __volatile( - "# BEGIN alpha_atomic_add_q\n" + "# BEGIN atomic_add_ulong\n" "1: ldq_l %0, %3 \n" " addq %0, %2, %0 \n" " stq_c %0, %1 \n" @@ -128,23 +132,23 @@ alpha_atomic_add_q(__volatile unsigned long *ulp, unsigned long v) " br 3f \n" "2: br 1b \n" "3: \n" - " # END alpha_atomic_add_q" + " # END atomic_add_ulong" : "=r" (t0), "=m" (*ulp) : "r" (v), "1" (*ulp)); } /* - * alpha_atomic_sub_q: + * atomic_sub_ulong: * - * Atomically subtract a value from a quadword. + * Atomically subtract a value from a `unsigned long'. */ static __inline void -alpha_atomic_sub_q(__volatile unsigned long *ulp, unsigned long v) +atomic_sub_ulong(__volatile unsigned long *ulp, unsigned long v) { unsigned long t0; __asm __volatile( - "# BEGIN alpha_atomic_sub_q\n" + "# BEGIN atomic_sub_ulong\n" "1: ldq_l %0, %3 \n" " subq %0, %2, %0 \n" " stq_c %0, %1 \n" @@ -153,23 +157,23 @@ alpha_atomic_sub_q(__volatile unsigned long *ulp, unsigned long v) " br 3f \n" "2: br 1b \n" "3: \n" - " # END alpha_atomic_sub_q" + " # END atomic_sub_ulong" : "=r" (t0), "=m" (*ulp) : "r" (v), "1" (*ulp)); } /* - * alpha_atomic_loadlatch_q: + * atomic_loadlatch_ulong: * - * Atomically load and latch a quadword value. + * Atomically load and latch a `unsigned long' value. */ static __inline unsigned long -alpha_atomic_loadlatch_q(__volatile unsigned long *ulp, unsigned long v) +atomic_loadlatch_ulong(__volatile unsigned long *ulp, unsigned long v) { unsigned long t0, v0; __asm __volatile( - "# BEGIN alpha_atomic_loadlatch_q\n" + "# BEGIN atomic_loadlatch_ulong\n" "1: mov %3, %0 \n" " ldq_l %1, %4 \n" " stq_c %0, %2 \n" @@ -178,7 +182,7 @@ alpha_atomic_loadlatch_q(__volatile unsigned long *ulp, unsigned long v) " br 3f \n" "2: br 1b \n" "3: \n" - " # END alpha_atomic_loadlatch_q" + " # END atomic_loadlatch_ulong" : "=r" (t0), "=r" (v0), "=m" (*ulp) : "r" (v), "2" (*ulp)); diff --git a/sys/arch/alpha/include/intr.h b/sys/arch/alpha/include/intr.h index 311f3ef98534..91b330fc3467 100644 --- a/sys/arch/alpha/include/intr.h +++ b/sys/arch/alpha/include/intr.h @@ -1,4 +1,4 @@ -/* $NetBSD: intr.h,v 1.24 2000/03/19 01:46:18 thorpej Exp $ */ +/* $NetBSD: intr.h,v 1.25 2000/05/23 05:12:56 thorpej Exp $ */ /* * Copyright (c) 1997 Christopher G. Demetriou. All rights reserved. @@ -88,7 +88,7 @@ extern u_int64_t ssir; #define SIR_CLOCK 0x2 #define SIR_SERIAL 0x4 -#define setsoft(x) alpha_atomic_setbits_q(&ssir, (x)) +#define setsoft(x) atomic_setbits_ulong(&ssir, (x)) #define setsoftnet() setsoft(SIR_NET) #define setsoftclock() setsoft(SIR_CLOCK) diff --git a/sys/arch/alpha/include/pmap.h b/sys/arch/alpha/include/pmap.h index c6fe7bb8451d..c7ce6c9b2e4d 100644 --- a/sys/arch/alpha/include/pmap.h +++ b/sys/arch/alpha/include/pmap.h @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.h,v 1.33 2000/03/01 02:22:03 thorpej Exp $ */ +/* $NetBSD: pmap.h,v 1.34 2000/05/23 05:12:56 thorpej Exp $ */ /*- * Copyright (c) 1998, 1999, 2000 The NetBSD Foundation, Inc. @@ -314,7 +314,7 @@ do { \ u_long cpu_mask = (1UL << cpu_number()); \ \ if ((pmap)->pm_needisync & cpu_mask) { \ - alpha_atomic_clearbits_q(&(pmap)->pm_needisync, \ + atomic_clearbits_ulong(&(pmap)->pm_needisync, \ cpu_mask); \ alpha_pal_imb(); \ } \ diff --git a/sys/arch/alpha/include/types.h b/sys/arch/alpha/include/types.h index e1563eabd9fe..c388514a6b9b 100644 --- a/sys/arch/alpha/include/types.h +++ b/sys/arch/alpha/include/types.h @@ -1,4 +1,4 @@ -/* $NetBSD: types.h,v 1.14 2000/02/05 00:07:30 cgd Exp $ */ +/* $NetBSD: types.h,v 1.15 2000/05/23 05:12:56 thorpej Exp $ */ /*- * Copyright (c) 1990, 1993 @@ -72,5 +72,6 @@ typedef int64_t register_t; #define __HAVE_DEVICE_REGISTER #define __HAVE_NWSCONS +#define __HAVE_ATOMIC_OPERATIONS #endif /* _MACHTYPES_H_ */