????JFIF??x?x????'
Server IP : 79.136.114.73 / Your IP : 3.141.38.5 Web Server : Apache/2.4.7 (Ubuntu) PHP/5.5.9-1ubuntu4.29 OpenSSL/1.0.1f System : Linux b8009 3.13.0-170-generic #220-Ubuntu SMP Thu May 9 12:40:49 UTC 2019 x86_64 User : www-data ( 33) PHP Version : 5.5.9-1ubuntu4.29 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority, MySQL : ON | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /usr/src/linux-headers-3.13.0-35/arch/tile/include/asm/ |
Upload File : |
/* * cmpxchg.h -- forked from asm/atomic.h with this copyright: * * Copyright 2010 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. * */ #ifndef _ASM_TILE_CMPXCHG_H #define _ASM_TILE_CMPXCHG_H #ifndef __ASSEMBLY__ #include <asm/barrier.h> /* Nonexistent functions intended to cause compile errors. */ extern void __xchg_called_with_bad_pointer(void) __compiletime_error("Bad argument size for xchg"); extern void __cmpxchg_called_with_bad_pointer(void) __compiletime_error("Bad argument size for cmpxchg"); #ifndef __tilegx__ /* Note the _atomic_xxx() routines include a final mb(). */ int _atomic_xchg(int *ptr, int n); int _atomic_xchg_add(int *v, int i); int _atomic_xchg_add_unless(int *v, int a, int u); int _atomic_cmpxchg(int *ptr, int o, int n); long long _atomic64_xchg(long long *v, long long n); long long _atomic64_xchg_add(long long *v, long long i); long long _atomic64_xchg_add_unless(long long *v, long long a, long long u); long long _atomic64_cmpxchg(long long *v, long long o, long long n); #define xchg(ptr, n) \ ({ \ if (sizeof(*(ptr)) != 4) \ __xchg_called_with_bad_pointer(); \ smp_mb(); \ (typeof(*(ptr)))_atomic_xchg((int *)(ptr), (int)(n)); \ }) #define cmpxchg(ptr, o, n) \ ({ \ if (sizeof(*(ptr)) != 4) \ __cmpxchg_called_with_bad_pointer(); \ smp_mb(); \ (typeof(*(ptr)))_atomic_cmpxchg((int *)ptr, (int)o, \ (int)n); \ }) #define xchg64(ptr, n) \ ({ \ if (sizeof(*(ptr)) != 8) \ __xchg_called_with_bad_pointer(); \ smp_mb(); \ (typeof(*(ptr)))_atomic64_xchg((long long *)(ptr), \ (long long)(n)); \ }) #define cmpxchg64(ptr, o, n) \ ({ \ if (sizeof(*(ptr)) != 8) \ __cmpxchg_called_with_bad_pointer(); \ smp_mb(); \ (typeof(*(ptr)))_atomic64_cmpxchg((long long *)ptr, \ (long long)o, (long long)n); \ }) #else #define xchg(ptr, n) \ ({ \ typeof(*(ptr)) __x; \ smp_mb(); \ switch (sizeof(*(ptr))) { \ case 4: \ __x = (typeof(__x))(unsigned long) \ __insn_exch4((ptr), \ (u32)(unsigned long)(n)); \ break; \ case 8: \ __x = (typeof(__x)) \ __insn_exch((ptr), (unsigned long)(n)); \ break; \ default: \ __xchg_called_with_bad_pointer(); \ break; \ } \ smp_mb(); \ __x; \ }) #define cmpxchg(ptr, o, n) \ ({ \ typeof(*(ptr)) __x; \ __insn_mtspr(SPR_CMPEXCH_VALUE, (unsigned long)(o)); \ smp_mb(); \ switch (sizeof(*(ptr))) { \ case 4: \ __x = (typeof(__x))(unsigned long) \ __insn_cmpexch4((ptr), \ (u32)(unsigned long)(n)); \ break; \ case 8: \ __x = (typeof(__x))__insn_cmpexch((ptr), \ (long long)(n)); \ break; \ default: \ __cmpxchg_called_with_bad_pointer(); \ break; \ } \ smp_mb(); \ __x; \ }) #define xchg64 xchg #define cmpxchg64 cmpxchg #endif #define tas(ptr) xchg((ptr), 1) #endif /* __ASSEMBLY__ */ #endif /* _ASM_TILE_CMPXCHG_H */