View | Details | Raw Unified | Return to bug 13111
Collapse All | Expand All

(-)files.i386 (+2 lines)
Lines 117-122 Link Here
117
i386/eisa/eisaconf.c		optional	eisa
117
i386/eisa/eisaconf.c		optional	eisa
118
i386/eisa/if_fea.c		optional	fea
118
i386/eisa/if_fea.c		optional	fea
119
i386/eisa/if_vx_eisa.c		optional	vx
119
i386/eisa/if_vx_eisa.c		optional	vx
120
i386/i386/atomic.c		standard				\
121
	compile-with	"${CC} -c ${CFLAGS} ${DEFINED_PROF:S/^$/-fomit-frame-pointer/} $<"
120
i386/i386/autoconf.c		standard
122
i386/i386/autoconf.c		standard
121
i386/i386/bios.c		standard
123
i386/i386/bios.c		standard
122
i386/i386/bioscall.s		standard
124
i386/i386/bioscall.s		standard
(-)atomic.h (-2 / +13 lines)
Lines 54-62 Link Here
54
 */
54
 */
55
55
56
/*
56
/*
57
 * Make kernel modules portable between UP and SMP.
57
 * The above functions are expanded inline in the statically-linked
58
 * kernel.  Lock prefixes are generated if an SMP kernel is being
59
 * built.
60
 *
61
 * Kernel modules call real functions which are built into the kernel.
62
 * This allows kernel modules to be portable between UP and SMP systems.
58
 */
63
 */
59
#if defined(SMP) || defined(KLD_MODULE)
64
#if defined(KLD_MODULE)
65
#define ATOMIC_ASM(NAME, TYPE, OP, V)			\
66
	extern void atomic_##NAME##_##TYPE(volatile u_##TYPE *p, u_##TYPE v);
67
68
#else /* !KLD_MODULE */
69
#if defined(SMP)
60
#define MPLOCKED	"lock ; "
70
#define MPLOCKED	"lock ; "
61
#else
71
#else
62
#define MPLOCKED
72
#define MPLOCKED
Lines 74-79 Link Here
74
			 : "=m" (*p)			\
84
			 : "=m" (*p)			\
75
			 :  "0" (*p), "ir" (V)); 	\
85
			 :  "0" (*p), "ir" (V)); 	\
76
}
86
}
87
#endif /* KLD_MODULE */
77
88
78
ATOMIC_ASM(set,	     char,  "orb %2,%0",   v)
89
ATOMIC_ASM(set,	     char,  "orb %2,%0",   v)
79
ATOMIC_ASM(clear,    char,  "andb %2,%0", ~v)
90
ATOMIC_ASM(clear,    char,  "andb %2,%0", ~v)
(-)src/sys/i386/i386/atomic.c (+47 lines)
Added Link Here
1
/*-
2
 * Copyright (c) 1999 Peter Jeremy
3
 * All rights reserved.
4
 *
5
 * Redistribution and use in source and binary forms, with or without
6
 * modification, are permitted provided that the following conditions
7
 * are met:
8
 * 1. Redistributions of source code must retain the above copyright
9
 *    notice, this list of conditions and the following disclaimer.
10
 * 2. Redistributions in binary form must reproduce the above copyright
11
 *    notice, this list of conditions and the following disclaimer in the
12
 *    documentation and/or other materials provided with the distribution.
13
 *
14
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24
 * SUCH DAMAGE.
25
 *
26
 *	$Id $
27
 */
28
29
/* This file creates publically callable functions to perform various
30
 * simple arithmetic on memory which is atomic in the presence of
31
 * interrupts and multiple processors.
32
 */
33
#include <sys/types.h>
34
35
/* Firstly make atomic.h generate prototypes as it will for kernel modules */
36
#define KLD_MODULE
37
#include <machine/atomic.h>
38
#undef _MACHINE_ATOMIC_H_	/* forget we included it */
39
#undef KLD_MODULE
40
#undef ATOMIC_ASM
41
42
/* Make atomic.h generate public functions */
43
#define static
44
#undef __inline
45
#define __inline
46
47
#include <machine/atomic.h>

Return to bug 13111