OXIESEC PANEL
- Current Dir:
/
/
usr
/
src
/
linux-headers-4.15.0-213
/
arch
/
tile
/
include
/
asm
Server IP: 139.59.38.164
Upload:
Create Dir:
Name
Size
Modified
Perms
📁
..
-
05/09/2024 07:14:13 AM
rwxr-xr-x
📄
Kbuild
439 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
asm-offsets.h
35 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
atomic.h
5.14 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
atomic_32.h
8.91 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
atomic_64.h
5.51 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
backtrace.h
3.98 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
barrier.h
2.89 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
bitops.h
2.37 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
bitops_32.h
4.01 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
bitops_64.h
2.67 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
cache.h
2.6 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
cacheflush.h
4.94 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
checksum.h
1.23 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
cmpxchg.h
3.47 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
compat.h
7.38 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
current.h
947 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
delay.h
1.1 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
device.h
978 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
div64.h
319 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
dma-mapping.h
1.82 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
dma.h
762 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
elf.h
5.42 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
fixmap.h
2.73 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
ftrace.h
1.08 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
futex.h
4.23 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
hardirq.h
1.28 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
hardwall.h
1.08 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
highmem.h
2.08 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
homecache.h
4.21 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
hugetlb.h
3.04 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
hv_driver.h
1.92 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
ide.h
758 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
insn.h
1.79 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
io.h
12.43 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
irq.h
3.11 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
irq_work.h
283 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
irqflags.h
10.55 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
jump_label.h
1.47 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
kdebug.h
769 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
kexec.h
2.23 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
kgdb.h
1.99 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
kmap_types.h
1.02 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
kprobes.h
2.19 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
linkage.h
1.46 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
mmu.h
965 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
mmu_context.h
4.5 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
mmzone.h
2.07 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
module.h
1.12 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
page.h
10.32 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
pci.h
6.58 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
percpu.h
1.79 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
perf_event.h
766 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
pgalloc.h
4.76 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
pgtable.h
15.66 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
pgtable_32.h
4.08 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
pgtable_64.h
5.11 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
pmc.h
2.15 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
processor.h
10.62 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
ptrace.h
2.96 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
sections.h
1.37 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
setup.h
1.63 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
sigframe.h
956 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
signal.h
1.07 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
smp.h
3.98 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
spinlock.h
741 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
spinlock_32.h
2.9 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
spinlock_64.h
3.88 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
spinlock_types.h
1.58 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
stack.h
2.59 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
string.h
1.19 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
switch_to.h
2.75 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
syscall.h
2.88 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
syscalls.h
2.35 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
thread_info.h
5.54 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
tile-desc.h
650 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
tile-desc_32.h
12.54 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
tile-desc_64.h
10.83 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
timex.h
1.71 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
tlb.h
878 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
tlbflush.h
3.99 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
topology.h
1.52 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
traps.h
2.44 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
uaccess.h
12.77 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
unaligned.h
1.56 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
unistd.h
777 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
user.h
717 bytes
01/28/2018 09:20:33 PM
rw-r--r--
📄
vdso.h
1.84 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
vga.h
1.05 KB
01/28/2018 09:20:33 PM
rw-r--r--
📄
word-at-a-time.h
1.07 KB
01/28/2018 09:20:33 PM
rw-r--r--
Editing: atomic_64.h
Close
/* * Copyright 2011 Tilera Corporation. All Rights Reserved. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation, version 2. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or * NON INFRINGEMENT. See the GNU General Public License for * more details. * * Do not include directly; use <linux/atomic.h>. */ #ifndef _ASM_TILE_ATOMIC_64_H #define _ASM_TILE_ATOMIC_64_H #ifndef __ASSEMBLY__ #include <asm/barrier.h> #include <arch/spr_def.h> /* First, the 32-bit atomic ops that are "real" on our 64-bit platform. */ #define atomic_set(v, i) WRITE_ONCE((v)->counter, (i)) /* * The smp_mb() operations throughout are to support the fact that * Linux requires memory barriers before and after the operation, * on any routine which updates memory and returns a value. */ /* * Note a subtlety of the locking here. We are required to provide a * full memory barrier before and after the operation. However, we * only provide an explicit mb before the operation. After the * operation, we use barrier() to get a full mb for free, because: * * (1) The barrier directive to the compiler prohibits any instructions * being statically hoisted before the barrier; * (2) the microarchitecture will not issue any further instructions * until the fetchadd result is available for the "+ i" add instruction; * (3) the smb_mb before the fetchadd ensures that no other memory * operations are in flight at this point. */ static inline int atomic_add_return(int i, atomic_t *v) { int val; smp_mb(); /* barrier for proper semantics */ val = __insn_fetchadd4((void *)&v->counter, i) + i; barrier(); /* equivalent to smp_mb(); see block comment above */ return val; } #define ATOMIC_OPS(op) \ static inline int atomic_fetch_##op(int i, atomic_t *v) \ { \ int val; \ smp_mb(); \ val = __insn_fetch##op##4((void *)&v->counter, i); \ smp_mb(); \ return val; \ } \ static inline void atomic_##op(int i, atomic_t *v) \ { \ __insn_fetch##op##4((void *)&v->counter, i); \ } ATOMIC_OPS(add) ATOMIC_OPS(and) ATOMIC_OPS(or) #undef ATOMIC_OPS static inline int atomic_fetch_xor(int i, atomic_t *v) { int guess, oldval = v->counter; smp_mb(); do { guess = oldval; __insn_mtspr(SPR_CMPEXCH_VALUE, guess); oldval = __insn_cmpexch4(&v->counter, guess ^ i); } while (guess != oldval); smp_mb(); return oldval; } static inline void atomic_xor(int i, atomic_t *v) { int guess, oldval = v->counter; do { guess = oldval; __insn_mtspr(SPR_CMPEXCH_VALUE, guess); oldval = __insn_cmpexch4(&v->counter, guess ^ i); } while (guess != oldval); } static inline int __atomic_add_unless(atomic_t *v, int a, int u) { int guess, oldval = v->counter; do { if (oldval == u) break; guess = oldval; oldval = cmpxchg(&v->counter, guess, guess + a); } while (guess != oldval); return oldval; } /* Now the true 64-bit operations. */ #define ATOMIC64_INIT(i) { (i) } #define atomic64_read(v) READ_ONCE((v)->counter) #define atomic64_set(v, i) WRITE_ONCE((v)->counter, (i)) static inline long atomic64_add_return(long i, atomic64_t *v) { int val; smp_mb(); /* barrier for proper semantics */ val = __insn_fetchadd((void *)&v->counter, i) + i; barrier(); /* equivalent to smp_mb; see atomic_add_return() */ return val; } #define ATOMIC64_OPS(op) \ static inline long atomic64_fetch_##op(long i, atomic64_t *v) \ { \ long val; \ smp_mb(); \ val = __insn_fetch##op((void *)&v->counter, i); \ smp_mb(); \ return val; \ } \ static inline void atomic64_##op(long i, atomic64_t *v) \ { \ __insn_fetch##op((void *)&v->counter, i); \ } ATOMIC64_OPS(add) ATOMIC64_OPS(and) ATOMIC64_OPS(or) #undef ATOMIC64_OPS static inline long atomic64_fetch_xor(long i, atomic64_t *v) { long guess, oldval = v->counter; smp_mb(); do { guess = oldval; __insn_mtspr(SPR_CMPEXCH_VALUE, guess); oldval = __insn_cmpexch(&v->counter, guess ^ i); } while (guess != oldval); smp_mb(); return oldval; } static inline void atomic64_xor(long i, atomic64_t *v) { long guess, oldval = v->counter; do { guess = oldval; __insn_mtspr(SPR_CMPEXCH_VALUE, guess); oldval = __insn_cmpexch(&v->counter, guess ^ i); } while (guess != oldval); } static inline long atomic64_add_unless(atomic64_t *v, long a, long u) { long guess, oldval = v->counter; do { if (oldval == u) break; guess = oldval; oldval = cmpxchg(&v->counter, guess, guess + a); } while (guess != oldval); return oldval != u; } #define atomic64_sub_return(i, v) atomic64_add_return(-(i), (v)) #define atomic64_fetch_sub(i, v) atomic64_fetch_add(-(i), (v)) #define atomic64_sub(i, v) atomic64_add(-(i), (v)) #define atomic64_inc_return(v) atomic64_add_return(1, (v)) #define atomic64_dec_return(v) atomic64_sub_return(1, (v)) #define atomic64_inc(v) atomic64_add(1, (v)) #define atomic64_dec(v) atomic64_sub(1, (v)) #define atomic64_inc_and_test(v) (atomic64_inc_return(v) == 0) #define atomic64_dec_and_test(v) (atomic64_dec_return(v) == 0) #define atomic64_sub_and_test(i, v) (atomic64_sub_return((i), (v)) == 0) #define atomic64_add_negative(i, v) (atomic64_add_return((i), (v)) < 0) #define atomic64_inc_not_zero(v) atomic64_add_unless((v), 1, 0) #endif /* !__ASSEMBLY__ */ #endif /* _ASM_TILE_ATOMIC_64_H */