aboutsummaryrefslogtreecommitdiffstats
path: root/fs/xfs/xfs_aops.h
diff options
context:
space:
mode:
Diffstat (limited to 'fs/xfs/xfs_aops.h')
0 files changed, 0 insertions, 0 deletions
0400 committer Ingo Molnar <mingo@elte.hu> 2008-04-17 11:41:21 -0400 include/asm-x86/atomic_32.h: checkpatch cleanups - formatting only' href='/cgit/cgit.cgi/litmus-rt-budgetable-locks.git/.git/commit/include/asm-x86/atomic_32.h?h=update_litmus_2019&id=78ff12eec42a4141d22dac4fdab04994384f6385'>78ff12eec42a
1da177e4c3f4

78ff12eec42a
1da177e4c3f4
78ff12eec42a


1da177e4c3f4


cc38682f356f
1da177e4c3f4

78ff12eec42a
1da177e4c3f4

78ff12eec42a
1da177e4c3f4
78ff12eec42a


1da177e4c3f4





78ff12eec42a
1da177e4c3f4



78ff12eec42a
1da177e4c3f4


78ff12eec42a


1da177e4c3f4





78ff12eec42a
1da177e4c3f4
78ff12eec42a

1da177e4c3f4
78ff12eec42a

1da177e4c3f4




78ff12eec42a
1da177e4c3f4
78ff12eec42a

1da177e4c3f4
78ff12eec42a

1da177e4c3f4




78ff12eec42a
1da177e4c3f4


78ff12eec42a

1da177e4c3f4


78ff12eec42a


1da177e4c3f4



78ff12eec42a
1da177e4c3f4
78ff12eec42a
1da177e4c3f4


78ff12eec42a

1da177e4c3f4


78ff12eec42a


1da177e4c3f4






78ff12eec42a
1da177e4c3f4


78ff12eec42a

1da177e4c3f4


78ff12eec42a


1da177e4c3f4



cc38682f356f
1da177e4c3f4




78ff12eec42a
1da177e4c3f4


1bb858f27ead
78ff12eec42a
1da177e4c3f4



78ff12eec42a


1da177e4c3f4



1bb858f27ead
1da177e4c3f4

1bb858f27ead
1da177e4c3f4



cc38682f356f






78ff12eec42a
1da177e4c3f4
78ff12eec42a
1da177e4c3f4

e656e245d5ad

4a6dae6d382e
8426e1f6af0f
72fd4a35a824
8426e1f6af0f



72fd4a35a824
8426e1f6af0f

78ff12eec42a
2856f5e31c14













8426e1f6af0f

78ff12eec42a

1da177e4c3f4

78ff12eec42a


1da177e4c3f4
78ff12eec42a


1da177e4c3f4






d3cb487149bd
1da177e4c3f4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259


                            

                           
                        





                                                           




                                                                


                    





                                     
  
                                    
   





                                              
  
                                         

                                                      




                                              
  

                            
                                                 
 


                                             


   
                                                     

                                
  

                                   
                                                 
 


                                             





                                                                     
  



                                               
                                                         


                        


                                                      





                                         
  
                                 

                                          
 

                                          




                                         
  
                                 

                                          
 

                                          




                                           
  


                                                          

                                                  


                        


                                                   



                      
                                           
                               
  


                                                           

                                                  


                        


                                                   






                                                 
  


                                            

                                                         


                        


                                                      



                 
                                             




                                               
                                                       


                  
                            
                                             



                                   


                                                  



                                   
                              

                               
                                 



                       






                                                      
                                                       
 
                                        

 

                                                                            
 
   
                                                                     



                                 
                                                              

                                                         
                                                              













                                                      

                                                           

                                                       

                                                       


                                                                 
 


                                                                         






                                                      
                               
      
#ifndef __ARCH_I386_ATOMIC__
#define __ARCH_I386_ATOMIC__

#include <linux/compiler.h>
#include <asm/processor.h>
#include <asm/cmpxchg.h>

/*
 * Atomic operations that C can't guarantee us.  Useful for
 * resource counting etc..
 */

/*
 * Make sure gcc doesn't try to be clever and move things around
 * on us. We need to use _exactly_ the address the user gave us,
 * not some alias that contains the same information.
 */
typedef struct {
	int counter;
} atomic_t;

#define ATOMIC_INIT(i)	{ (i) }

/**
 * atomic_read - read atomic variable
 * @v: pointer of type atomic_t
 *
 * Atomically reads the value of @v.
 */
#define atomic_read(v)		((v)->counter)

/**
 * atomic_set - set atomic variable
 * @v: pointer of type atomic_t
 * @i: required value
 *
 * Atomically sets the value of @v to @i.
 */
#define atomic_set(v, i)	(((v)->counter) = (i))

/**
 * atomic_add - add integer to atomic variable
 * @i: integer value to add
 * @v: pointer of type atomic_t
 *
 * Atomically adds @i to @v.
 */
static inline void atomic_add(int i, atomic_t *v)
{
	asm volatile(LOCK_PREFIX "addl %1,%0"
		     : "+m" (v->counter)
		     : "ir" (i));
}

/**
 * atomic_sub - subtract integer from atomic variable
 * @i: integer value to subtract
 * @v: pointer of type atomic_t
 *
 * Atomically subtracts @i from @v.
 */
static inline void atomic_sub(int i, atomic_t *v)
{
	asm volatile(LOCK_PREFIX "subl %1,%0"
		     : "+m" (v->counter)
		     : "ir" (i));
}

/**
 * atomic_sub_and_test - subtract value from variable and test result
 * @i: integer value to subtract
 * @v: pointer of type atomic_t
 *
 * Atomically subtracts @i from @v and returns
 * true if the result is zero, or false for all
 * other cases.
 */
static inline int atomic_sub_and_test(int i, atomic_t *v)
{
	unsigned char c;

	asm volatile(LOCK_PREFIX "subl %2,%0; sete %1"
		     : "+m" (v->counter), "=qm" (c)
		     : "ir" (i) : "memory");
	return c;
}

/**
 * atomic_inc - increment atomic variable
 * @v: pointer of type atomic_t
 *
 * Atomically increments @v by 1.
 */
static inline void atomic_inc(atomic_t *v)
{
	asm volatile(LOCK_PREFIX "incl %0"
		     : "+m" (v->counter));
}

/**
 * atomic_dec - decrement atomic variable
 * @v: pointer of type atomic_t
 *
 * Atomically decrements @v by 1.
 */
static inline void atomic_dec(atomic_t *v)
{
	asm volatile(LOCK_PREFIX "decl %0"
		     : "+m" (v->counter));
}

/**
 * atomic_dec_and_test - decrement and test
 * @v: pointer of type atomic_t
 *
 * Atomically decrements @v by 1 and
 * returns true if the result is 0, or false for all other
 * cases.
 */
static inline int atomic_dec_and_test(atomic_t *v)
{
	unsigned char c;

	asm volatile(LOCK_PREFIX "decl %0; sete %1"
		     : "+m" (v->counter), "=qm" (c)
		     : : "memory");
	return c != 0;
}

/**
 * atomic_inc_and_test - increment and test
 * @v: pointer of type atomic_t
 *
 * Atomically increments @v by 1
 * and returns true if the result is zero, or false for all
 * other cases.
 */
static inline int atomic_inc_and_test(atomic_t *v)
{
	unsigned char c;

	asm volatile(LOCK_PREFIX "incl %0; sete %1"
		     : "+m" (v->counter), "=qm" (c)
		     : : "memory");
	return c != 0;
}

/**
 * atomic_add_negative - add and test if negative
 * @v: pointer of type atomic_t
 * @i: integer value to add
 *
 * Atomically adds @i to @v and returns true
 * if the result is negative, or false when
 * result is greater than or equal to zero.
 */
static inline int atomic_add_negative(int i, atomic_t *v)
{
	unsigned char c;

	asm volatile(LOCK_PREFIX "addl %2,%0; sets %1"
		     : "+m" (v->counter), "=qm" (c)
		     : "ir" (i) : "memory");
	return c;
}

/**
 * atomic_add_return - add integer and return
 * @v: pointer of type atomic_t
 * @i: integer value to add
 *
 * Atomically adds @i to @v and returns @i + @v
 */
static inline int atomic_add_return(int i, atomic_t *v)
{
	int __i;
#ifdef CONFIG_M386
	unsigned long flags;
	if (unlikely(boot_cpu_data.x86 <= 3))
		goto no_xadd;
#endif
	/* Modern 486+ processor */
	__i = i;
	asm volatile(LOCK_PREFIX "xaddl %0, %1"
		     : "+r" (i), "+m" (v->counter)
		     : : "memory");
	return i + __i;

#ifdef CONFIG_M386
no_xadd: /* Legacy 386 processor */
	local_irq_save(flags);
	__i = atomic_read(v);
	atomic_set(v, i + __i);
	local_irq_restore(flags);
	return i + __i;
#endif
}

/**
 * atomic_sub_return - subtract integer and return
 * @v: pointer of type atomic_t
 * @i: integer value to subtract
 *
 * Atomically subtracts @i from @v and returns @v - @i
 */
static inline int atomic_sub_return(int i, atomic_t *v)
{