~ubuntu-branches/ubuntu/wily/spl-linux/wily

« back to all changes in this revision

Viewing changes to include/sys/atomic.h

  • Committer: Package Import Robot
  • Author(s): Liang Guo
  • Date: 2014-07-31 15:16:53 UTC
  • Revision ID: package-import@ubuntu.com-20140731151653-tgao12alohj26jcs
Tags: upstream-0.6.3+git20140731
ImportĀ upstreamĀ versionĀ 0.6.3+git20140731

Show diffs side-by-side

added added

removed removed

Lines of Context:
156
156
        return rc;
157
157
}
158
158
 
 
159
static __inline__ uint32_t
 
160
atomic_swap_32(volatile uint32_t *target,  uint32_t newval)
 
161
{
 
162
        uint32_t rc;
 
163
 
 
164
        spin_lock(&atomic32_lock);
 
165
        rc = *target;
 
166
        *target = newval;
 
167
        spin_unlock(&atomic32_lock);
 
168
 
 
169
        return rc;
 
170
}
 
171
 
159
172
static __inline__ void
160
173
atomic_inc_64(volatile uint64_t *target)
161
174
{
253
266
        return rc;
254
267
}
255
268
 
 
269
static __inline__ uint64_t
 
270
atomic_swap_64(volatile uint64_t *target,  uint64_t newval)
 
271
{
 
272
        uint64_t rc;
 
273
 
 
274
        spin_lock(&atomic64_lock);
 
275
        rc = *target;
 
276
        *target = newval;
 
277
        spin_unlock(&atomic64_lock);
 
278
 
 
279
        return rc;
 
280
}
256
281
 
257
282
#else /* ATOMIC_SPINLOCK */
258
283
 
265
290
#define atomic_add_32_nv(v, i)  atomic_add_return((i), (atomic_t *)(v))
266
291
#define atomic_sub_32_nv(v, i)  atomic_sub_return((i), (atomic_t *)(v))
267
292
#define atomic_cas_32(v, x, y)  atomic_cmpxchg((atomic_t *)(v), x, y)
 
293
#define atomic_swap_32(v, x)    atomic_xchg((atomic_t *)(v), x)
268
294
#define atomic_inc_64(v)        atomic64_inc((atomic64_t *)(v))
269
295
#define atomic_dec_64(v)        atomic64_dec((atomic64_t *)(v))
270
296
#define atomic_add_64(v, i)     atomic64_add((i), (atomic64_t *)(v))
274
300
#define atomic_add_64_nv(v, i)  atomic64_add_return((i), (atomic64_t *)(v))
275
301
#define atomic_sub_64_nv(v, i)  atomic64_sub_return((i), (atomic64_t *)(v))
276
302
#define atomic_cas_64(v, x, y)  atomic64_cmpxchg((atomic64_t *)(v), x, y)
 
303
#define atomic_swap_64(v, x)    atomic64_xchg((atomic64_t *)(v), x)
277
304
 
278
305
#endif /* ATOMIC_SPINLOCK */
279
306