The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/contrib/openzfs/include/os/linux/spl/sys/sysmacros.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*
    2  *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
    3  *  Copyright (C) 2007 The Regents of the University of California.
    4  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
    5  *  Written by Brian Behlendorf <behlendorf1@llnl.gov>.
    6  *  UCRL-CODE-235197
    7  *
    8  *  This file is part of the SPL, Solaris Porting Layer.
    9  *
   10  *  The SPL is free software; you can redistribute it and/or modify it
   11  *  under the terms of the GNU General Public License as published by the
   12  *  Free Software Foundation; either version 2 of the License, or (at your
   13  *  option) any later version.
   14  *
   15  *  The SPL is distributed in the hope that it will be useful, but WITHOUT
   16  *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
   17  *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
   18  *  for more details.
   19  *
   20  *  You should have received a copy of the GNU General Public License along
   21  *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
   22  */
   23 
   24 #ifndef _SPL_SYSMACROS_H
   25 #define _SPL_SYSMACROS_H
   26 
   27 #include <linux/module.h>
   28 #include <linux/sched.h>
   29 #include <linux/sched/rt.h>
   30 #include <linux/cpumask.h>
   31 #include <sys/debug.h>
   32 #include <sys/zone.h>
   33 #include <sys/signal.h>
   34 #include <asm/page.h>
   35 
   36 
   37 #ifndef _KERNEL
   38 #define _KERNEL                         __KERNEL__
   39 #endif
   40 
   41 #define FALSE                           0
   42 #define TRUE                            1
   43 
   44 #define INT8_MAX                        (127)
   45 #define INT8_MIN                        (-128)
   46 #define UINT8_MAX                       (255)
   47 #define UINT8_MIN                       (0)
   48 
   49 #define INT16_MAX                       (32767)
   50 #define INT16_MIN                       (-32768)
   51 #define UINT16_MAX                      (65535)
   52 #define UINT16_MIN                      (0)
   53 
   54 #define INT32_MAX                       INT_MAX
   55 #define INT32_MIN                       INT_MIN
   56 #define UINT32_MAX                      UINT_MAX
   57 #define UINT32_MIN                      UINT_MIN
   58 
   59 #define INT64_MAX                       LLONG_MAX
   60 #define INT64_MIN                       LLONG_MIN
   61 #define UINT64_MAX                      ULLONG_MAX
   62 #define UINT64_MIN                      ULLONG_MIN
   63 
   64 #define NBBY                            8
   65 
   66 #define MAXMSGLEN                       256
   67 #define MAXNAMELEN                      256
   68 #define MAXPATHLEN                      4096
   69 #define MAXOFFSET_T                     LLONG_MAX
   70 #define MAXBSIZE                        8192
   71 #define DEV_BSIZE                       512
   72 #define DEV_BSHIFT                      9 /* log2(DEV_BSIZE) */
   73 
   74 #define proc_pageout                    NULL
   75 #define curproc                         current
   76 #define max_ncpus                       num_possible_cpus()
   77 #define boot_ncpus                      num_online_cpus()
   78 #define CPU_SEQID                       smp_processor_id()
   79 #define CPU_SEQID_UNSTABLE              raw_smp_processor_id()
   80 #define is_system_labeled()             0
   81 
   82 #ifndef RLIM64_INFINITY
   83 #define RLIM64_INFINITY                 (~0ULL)
   84 #endif
   85 
   86 /*
   87  * 0..MAX_PRIO-1:               Process priority
   88  * 0..MAX_RT_PRIO-1:            RT priority tasks
   89  * MAX_RT_PRIO..MAX_PRIO-1:     SCHED_NORMAL tasks
   90  *
   91  * Treat shim tasks as SCHED_NORMAL tasks
   92  */
   93 #define minclsyspri                     (MAX_PRIO-1)
   94 #define maxclsyspri                     (MAX_RT_PRIO)
   95 #define defclsyspri                     (DEFAULT_PRIO)
   96 
   97 #ifndef NICE_TO_PRIO
   98 #define NICE_TO_PRIO(nice)              (MAX_RT_PRIO + (nice) + 20)
   99 #endif
  100 #ifndef PRIO_TO_NICE
  101 #define PRIO_TO_NICE(prio)              ((prio) - MAX_RT_PRIO - 20)
  102 #endif
  103 
  104 /*
  105  * Missing macros
  106  */
  107 #ifndef PAGESIZE
  108 #define PAGESIZE                        PAGE_SIZE
  109 #endif
  110 
  111 #ifndef PAGESHIFT
  112 #define PAGESHIFT                       PAGE_SHIFT
  113 #endif
  114 
  115 /* Missing globals */
  116 extern unsigned long spl_hostid;
  117 
  118 /* Missing misc functions */
  119 extern uint32_t zone_get_hostid(void *zone);
  120 extern void spl_setup(void);
  121 extern void spl_cleanup(void);
  122 
  123 /*
  124  * Only handles the first 4096 majors and first 256 minors. We don't have a
  125  * libc for the kernel module so we define this inline.
  126  */
  127 static inline dev_t
  128 makedev(unsigned int major, unsigned int minor)
  129 {
  130         return ((major & 0xFFF) << 8) | (minor & 0xFF);
  131 }
  132 
  133 #define highbit(x)              __fls(x)
  134 #define lowbit(x)               __ffs(x)
  135 
  136 #define highbit64(x)            fls64(x)
  137 #define makedevice(maj, min)    makedev(maj, min)
  138 
  139 /* common macros */
  140 #ifndef MIN
  141 #define MIN(a, b)               ((a) < (b) ? (a) : (b))
  142 #endif
  143 #ifndef MAX
  144 #define MAX(a, b)               ((a) < (b) ? (b) : (a))
  145 #endif
  146 #ifndef ABS
  147 #define ABS(a)                  ((a) < 0 ? -(a) : (a))
  148 #endif
  149 #ifndef DIV_ROUND_UP
  150 #define DIV_ROUND_UP(n, d)      (((n) + (d) - 1) / (d))
  151 #endif
  152 #ifndef roundup
  153 #define roundup(x, y)           ((((x) + ((y) - 1)) / (y)) * (y))
  154 #endif
  155 #ifndef howmany
  156 #define howmany(x, y)           (((x) + ((y) - 1)) / (y))
  157 #endif
  158 
  159 /*
  160  * Compatibility macros/typedefs needed for Solaris -> Linux port
  161  */
  162 #define P2ALIGN(x, align)       ((x) & -(align))
  163 #define P2CROSS(x, y, align)    (((x) ^ (y)) > (align) - 1)
  164 #define P2ROUNDUP(x, align)     ((((x) - 1) | ((align) - 1)) + 1)
  165 #define P2PHASE(x, align)       ((x) & ((align) - 1))
  166 #define P2NPHASE(x, align)      (-(x) & ((align) - 1))
  167 #define ISP2(x)                 (((x) & ((x) - 1)) == 0)
  168 #define IS_P2ALIGNED(v, a)      ((((uintptr_t)(v)) & ((uintptr_t)(a) - 1)) == 0)
  169 #define P2BOUNDARY(off, len, align) \
  170                                 (((off) ^ ((off) + (len) - 1)) > (align) - 1)
  171 
  172 /*
  173  * Typed version of the P2* macros.  These macros should be used to ensure
  174  * that the result is correctly calculated based on the data type of (x),
  175  * which is passed in as the last argument, regardless of the data
  176  * type of the alignment.  For example, if (x) is of type uint64_t,
  177  * and we want to round it up to a page boundary using "PAGESIZE" as
  178  * the alignment, we can do either
  179  *
  180  * P2ROUNDUP(x, (uint64_t)PAGESIZE)
  181  * or
  182  * P2ROUNDUP_TYPED(x, PAGESIZE, uint64_t)
  183  */
  184 #define P2ALIGN_TYPED(x, align, type)   \
  185         ((type)(x) & -(type)(align))
  186 #define P2PHASE_TYPED(x, align, type)   \
  187         ((type)(x) & ((type)(align) - 1))
  188 #define P2NPHASE_TYPED(x, align, type)  \
  189         (-(type)(x) & ((type)(align) - 1))
  190 #define P2ROUNDUP_TYPED(x, align, type) \
  191         ((((type)(x) - 1) | ((type)(align) - 1)) + 1)
  192 #define P2END_TYPED(x, align, type)     \
  193         (-(~(type)(x) & -(type)(align)))
  194 #define P2PHASEUP_TYPED(x, align, phase, type)  \
  195         ((type)(phase) - (((type)(phase) - (type)(x)) & -(type)(align)))
  196 #define P2CROSS_TYPED(x, y, align, type)        \
  197         (((type)(x) ^ (type)(y)) > (type)(align) - 1)
  198 #define P2SAMEHIGHBIT_TYPED(x, y, type) \
  199         (((type)(x) ^ (type)(y)) < ((type)(x) & (type)(y)))
  200 
  201 #define SET_ERROR(err) \
  202         (__set_error(__FILE__, __func__, __LINE__, err), err)
  203 
  204 #include <linux/sort.h>
  205 #define qsort(base, num, size, cmp)             \
  206         sort(base, num, size, cmp, NULL)
  207 
  208 #if !defined(_KMEMUSER) && !defined(offsetof)
  209 
  210 /* avoid any possibility of clashing with <stddef.h> version */
  211 
  212 #define offsetof(s, m)  ((size_t)(&(((s *)0)->m)))
  213 #endif
  214 
  215 #endif  /* _SPL_SYSMACROS_H */

Cache object: dceefb00f9ff177f382d50482dbbfe34


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.