18d59ecb2SHans Petter Selasky /*- 28d59ecb2SHans Petter Selasky * Copyright (c) 2010 Isilon Systems, Inc. 38d59ecb2SHans Petter Selasky * Copyright (c) 2010 iX Systems, Inc. 48d59ecb2SHans Petter Selasky * Copyright (c) 2010 Panasas, Inc. 5abb14a54SHans Petter Selasky * Copyright (c) 2013-2016 Mellanox Technologies, Ltd. 68d59ecb2SHans Petter Selasky * Copyright (c) 2015 François Tigeot 78d59ecb2SHans Petter Selasky * All rights reserved. 88d59ecb2SHans Petter Selasky * 98d59ecb2SHans Petter Selasky * Redistribution and use in source and binary forms, with or without 108d59ecb2SHans Petter Selasky * modification, are permitted provided that the following conditions 118d59ecb2SHans Petter Selasky * are met: 128d59ecb2SHans Petter Selasky * 1. Redistributions of source code must retain the above copyright 138d59ecb2SHans Petter Selasky * notice unmodified, this list of conditions, and the following 148d59ecb2SHans Petter Selasky * disclaimer. 158d59ecb2SHans Petter Selasky * 2. Redistributions in binary form must reproduce the above copyright 168d59ecb2SHans Petter Selasky * notice, this list of conditions and the following disclaimer in the 178d59ecb2SHans Petter Selasky * documentation and/or other materials provided with the distribution. 188d59ecb2SHans Petter Selasky * 198d59ecb2SHans Petter Selasky * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 208d59ecb2SHans Petter Selasky * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 218d59ecb2SHans Petter Selasky * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 228d59ecb2SHans Petter Selasky * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 238d59ecb2SHans Petter Selasky * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 248d59ecb2SHans Petter Selasky * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 258d59ecb2SHans Petter Selasky * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 268d59ecb2SHans Petter Selasky * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 278d59ecb2SHans Petter Selasky * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 288d59ecb2SHans Petter Selasky * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 298d59ecb2SHans Petter Selasky */ 30307f78f3SVladimir Kondratyev #ifndef _LINUXKPI_LINUX_COMPILER_H_ 31307f78f3SVladimir Kondratyev #define _LINUXKPI_LINUX_COMPILER_H_ 328d59ecb2SHans Petter Selasky 338d59ecb2SHans Petter Selasky #include <sys/cdefs.h> 348d59ecb2SHans Petter Selasky 358d59ecb2SHans Petter Selasky #define __user 368d59ecb2SHans Petter Selasky #define __kernel 378d59ecb2SHans Petter Selasky #define __safe 388d59ecb2SHans Petter Selasky #define __force 398d59ecb2SHans Petter Selasky #define __nocast 408d59ecb2SHans Petter Selasky #define __iomem 414e64c625SRyan Libby #define __chk_user_ptr(x) ((void)0) 424e64c625SRyan Libby #define __chk_io_ptr(x) ((void)0) 438d59ecb2SHans Petter Selasky #define __builtin_warning(x, y...) (1) 448d59ecb2SHans Petter Selasky #define __acquires(x) 458d59ecb2SHans Petter Selasky #define __releases(x) 464e64c625SRyan Libby #define __acquire(x) do { } while (0) 474e64c625SRyan Libby #define __release(x) do { } while (0) 488d59ecb2SHans Petter Selasky #define __cond_lock(x,c) (c) 498d59ecb2SHans Petter Selasky #define __bitwise 508d59ecb2SHans Petter Selasky #define __devinitdata 51*16672453SWarner Losh #ifndef __deprecated 52482f0c02SConrad Meyer #define __deprecated 53*16672453SWarner Losh #endif 548d59ecb2SHans Petter Selasky #define __init 55cbea4f29SHans Petter Selasky #define __initconst 568d59ecb2SHans Petter Selasky #define __devinit 578d59ecb2SHans Petter Selasky #define __devexit 588d59ecb2SHans Petter Selasky #define __exit 59abb14a54SHans Petter Selasky #define __rcu 602060ca65SHans Petter Selasky #define __percpu 612060ca65SHans Petter Selasky #define __weak __weak_symbol 62cb564d24SMark Johnston #define __malloc 638d59ecb2SHans Petter Selasky #define __attribute_const__ __attribute__((__const__)) 648d59ecb2SHans Petter Selasky #undef __always_inline 658d59ecb2SHans Petter Selasky #define __always_inline inline 66dc354b15SHans Petter Selasky #define noinline __noinline 6753d821d6SVladimir Kondratyev #define noinline_for_stack __noinline 68abb14a54SHans Petter Selasky #define ____cacheline_aligned __aligned(CACHE_LINE_SIZE) 69da717031SBjoern A. Zeeb #define ____cacheline_aligned_in_smp __aligned(CACHE_LINE_SIZE) 70da717031SBjoern A. Zeeb #define fallthrough /* FALLTHROUGH */ do { } while(0) 718d59ecb2SHans Petter Selasky 722a8c5059SBjoern A. Zeeb #if __has_attribute(__nonstring__) 732a8c5059SBjoern A. Zeeb #define __nonstring __attribute__((__nonstring__)) 742a8c5059SBjoern A. Zeeb #else 752a8c5059SBjoern A. Zeeb #define __nonstring 762a8c5059SBjoern A. Zeeb #endif 772a8c5059SBjoern A. Zeeb #if __has_attribute(__counted_by__) 782a8c5059SBjoern A. Zeeb #define __counted_by(_x) __attribute__((__counted_by__(_x))) 792a8c5059SBjoern A. Zeeb #else 802a8c5059SBjoern A. Zeeb #define __counted_by(_x) 812a8c5059SBjoern A. Zeeb #endif 822a8c5059SBjoern A. Zeeb 838d59ecb2SHans Petter Selasky #define likely(x) __builtin_expect(!!(x), 1) 848d59ecb2SHans Petter Selasky #define unlikely(x) __builtin_expect(!!(x), 0) 858d59ecb2SHans Petter Selasky #define typeof(x) __typeof(x) 868d59ecb2SHans Petter Selasky 878d59ecb2SHans Petter Selasky #define uninitialized_var(x) x = x 88dc354b15SHans Petter Selasky #define __maybe_unused __unused 898d59ecb2SHans Petter Selasky #define __always_unused __unused 908d59ecb2SHans Petter Selasky #define __must_check __result_use_check 918d59ecb2SHans Petter Selasky 928d59ecb2SHans Petter Selasky #define __printf(a,b) __printflike(a,b) 938d59ecb2SHans Petter Selasky 94742088d9SVladimir Kondratyev #define __diag_push() 95742088d9SVladimir Kondratyev #define __diag_pop() 96742088d9SVladimir Kondratyev #define __diag_ignore_all(...) 97742088d9SVladimir Kondratyev 988d59ecb2SHans Petter Selasky #define barrier() __asm__ __volatile__("": : :"memory") 998d59ecb2SHans Petter Selasky 1000bb30b3aSJohannes Lundberg #define lower_32_bits(n) ((u32)(n)) 1010bb30b3aSJohannes Lundberg #define upper_32_bits(n) ((u32)(((n) >> 16) >> 16)) 1020bb30b3aSJohannes Lundberg 103abb14a54SHans Petter Selasky #define ___PASTE(a,b) a##b 104abb14a54SHans Petter Selasky #define __PASTE(a,b) ___PASTE(a,b) 105abb14a54SHans Petter Selasky 106cee21041SHans Petter Selasky #define WRITE_ONCE(x,v) do { \ 107cee21041SHans Petter Selasky barrier(); \ 108046d8d89SBjoern A. Zeeb (*(volatile __typeof(x) *)(uintptr_t)&(x)) = (v); \ 109cee21041SHans Petter Selasky barrier(); \ 110cee21041SHans Petter Selasky } while (0) 111cee21041SHans Petter Selasky 112cee21041SHans Petter Selasky #define READ_ONCE(x) ({ \ 113a767c188SHans Petter Selasky __typeof(x) __var = ({ \ 114cee21041SHans Petter Selasky barrier(); \ 11574e908b3SBjoern A. Zeeb (*(const volatile __typeof(x) *)&(x)); \ 116a767c188SHans Petter Selasky }); \ 117cee21041SHans Petter Selasky barrier(); \ 118cee21041SHans Petter Selasky __var; \ 119cee21041SHans Petter Selasky }) 120cee21041SHans Petter Selasky 121abb14a54SHans Petter Selasky #define lockless_dereference(p) READ_ONCE(p) 122abb14a54SHans Petter Selasky 123abb14a54SHans Petter Selasky #define _AT(T,X) ((T)(X)) 124abb14a54SHans Petter Selasky 12593d70cd3SEmmanuel Vadot #define __same_type(a, b) __builtin_types_compatible_p(typeof(a), typeof(b)) 12693d70cd3SEmmanuel Vadot #define __must_be_array(a) __same_type(a, &(a)[0]) 12793d70cd3SEmmanuel Vadot 128e5b95b22SBjoern A. Zeeb #define sizeof_field(_s, _m) sizeof(((_s *)0)->_m) 129e5b95b22SBjoern A. Zeeb 1303208d4adSVladimir Kondratyev #define is_signed_type(t) ((t)-1 < (t)1) 1313208d4adSVladimir Kondratyev #define is_unsigned_type(t) ((t)-1 > (t)1) 1323208d4adSVladimir Kondratyev 133307f78f3SVladimir Kondratyev #endif /* _LINUXKPI_LINUX_COMPILER_H_ */ 134