Whamcloud - gitweb
Branch HEAD
[fs/lustre-release.git] / libcfs / include / libcfs / linux / portals_compat25.h
1 /* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
2  * vim:expandtab:shiftwidth=8:tabstop=8:
3  *
4  * GPL HEADER START
5  *
6  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License version 2 only,
10  * as published by the Free Software Foundation.
11  *
12  * This program is distributed in the hope that it will be useful, but
13  * WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15  * General Public License version 2 for more details (a copy is included
16  * in the LICENSE file that accompanied this code).
17  *
18  * You should have received a copy of the GNU General Public License
19  * version 2 along with this program; If not, see
20  * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf
21  *
22  * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
23  * CA 95054 USA or visit www.sun.com if you need additional information or
24  * have any questions.
25  *
26  * GPL HEADER END
27  */
28 /*
29  * Copyright  2008 Sun Microsystems, Inc. All rights reserved
30  * Use is subject to license terms.
31  */
32 /*
33  * This file is part of Lustre, http://www.lustre.org/
34  * Lustre is a trademark of Sun Microsystems, Inc.
35  */
36
37 #ifndef __LIBCFS_LINUX_PORTALS_COMPAT_H__
38 #define __LIBCFS_LINUX_PORTALS_COMPAT_H__
39
40 // XXX BUG 1511 -- remove this stanza and all callers when bug 1511 is resolved
41 #if defined(SPINLOCK_DEBUG) && SPINLOCK_DEBUG
42 # if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)) || defined(CONFIG_RH_2_4_20)
43 #  define SIGNAL_MASK_ASSERT() \
44    LASSERT(current->sighand->siglock.magic == SPINLOCK_MAGIC)
45 # else
46 #  define SIGNAL_MASK_ASSERT() \
47    LASSERT(current->sigmask_lock.magic == SPINLOCK_MAGIC)
48 # endif
49 #else
50 # define SIGNAL_MASK_ASSERT()
51 #endif
52 // XXX BUG 1511 -- remove this stanza and all callers when bug 1511 is resolved
53
54 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0))
55
56 # define SIGNAL_MASK_LOCK(task, flags)                                  \
57   spin_lock_irqsave(&task->sighand->siglock, flags)
58 # define SIGNAL_MASK_UNLOCK(task, flags)                                \
59   spin_unlock_irqrestore(&task->sighand->siglock, flags)
60 # define USERMODEHELPER(path, argv, envp)                               \
61   call_usermodehelper(path, argv, envp, 1)
62 # define RECALC_SIGPENDING         recalc_sigpending()
63 # define CLEAR_SIGPENDING          clear_tsk_thread_flag(current,       \
64                                                          TIF_SIGPENDING)
65 # define CURRENT_SECONDS           get_seconds()
66 # define smp_num_cpus              num_online_cpus()
67
68
69 #elif defined(CONFIG_RH_2_4_20) /* RH 2.4.x */
70
71 # define SIGNAL_MASK_LOCK(task, flags)                                  \
72   spin_lock_irqsave(&task->sighand->siglock, flags)
73 # define SIGNAL_MASK_UNLOCK(task, flags)                                \
74   spin_unlock_irqrestore(&task->sighand->siglock, flags)
75 # define USERMODEHELPER(path, argv, envp)                               \
76   call_usermodehelper(path, argv, envp)
77 # define RECALC_SIGPENDING         recalc_sigpending()
78 # define CLEAR_SIGPENDING          (current->sigpending = 0)
79 # define CURRENT_SECONDS           CURRENT_TIME
80 # define wait_event_interruptible_exclusive(wq, condition)              \
81         wait_event_interruptible(wq, condition)
82
83 #else /* 2.4.x */
84
85 # define SIGNAL_MASK_LOCK(task, flags)                                  \
86   spin_lock_irqsave(&task->sigmask_lock, flags)
87 # define SIGNAL_MASK_UNLOCK(task, flags)                                \
88   spin_unlock_irqrestore(&task->sigmask_lock, flags)
89 # define USERMODEHELPER(path, argv, envp)                               \
90   call_usermodehelper(path, argv, envp)
91 # define RECALC_SIGPENDING         recalc_sigpending(current)
92 # define CLEAR_SIGPENDING          (current->sigpending = 0)
93 # define CURRENT_SECONDS           CURRENT_TIME
94 # define wait_event_interruptible_exclusive(wq, condition)              \
95         wait_event_interruptible(wq, condition)
96
97 #endif
98
99 # define cfs_wait_event_interruptible(wq, condition, ret)               \
100          ret = wait_event_interruptible(wq, condition)
101 # define cfs_wait_event_interruptible_exclusive(wq, condition, ret)     \
102          ret = wait_event_interruptible(wq, condition)
103
104 #if defined(__arch_um__) && (LINUX_VERSION_CODE < KERNEL_VERSION(2,4,20))
105 #define UML_PID(tsk) ((tsk)->thread.extern_pid)
106 #elif defined(__arch_um__) && (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0))
107 #define UML_PID(tsk) ((tsk)->thread.mode.tt.extern_pid)
108 #else
109 #define UML_PID(tsk) ((tsk)->pid)
110 #endif
111
112 #if defined(__arch_um__) && (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0))
113 # define THREAD_NAME(comm, len, fmt, a...)                              \
114         snprintf(comm, len,fmt"|%d", ## a, UML_PID(current))
115 #else
116 # define THREAD_NAME(comm, len, fmt, a...)                              \
117         snprintf(comm, len, fmt, ## a)
118 #endif
119
120 #ifdef HAVE_PAGE_LIST
121 /* 2.4 alloc_page users can use page->list */
122 #define PAGE_LIST_ENTRY list
123 #define PAGE_LIST(page) ((page)->list)
124 #else
125 /* 2.6 alloc_page users can use page->lru */
126 #define PAGE_LIST_ENTRY lru
127 #define PAGE_LIST(page) ((page)->lru)
128 #endif
129
130 #ifndef HAVE_CPU_ONLINE
131 #define cpu_online(cpu) ((1<<cpu) & (cpu_online_map))
132 #endif
133 #ifndef HAVE_CPUMASK_T
134 typedef unsigned long cpumask_t;
135 #define cpu_set(cpu, map) set_bit(cpu, &(map))
136 #define cpus_clear(map) memset(&(map), 0, sizeof(cpumask_t))
137 #endif
138
139 #ifndef __user
140 #define __user
141 #endif
142
143 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,8)
144 #define ll_proc_dointvec(table, write, filp, buffer, lenp, ppos)        \
145         proc_dointvec(table, write, filp, buffer, lenp)
146 #define ll_proc_dostring(table, write, filp, buffer, lenp, ppos)        \
147         proc_dostring(table, write, filp, buffer, lenp)
148 #define LL_PROC_PROTO(name)                                             \
149         name(cfs_sysctl_table_t *table, int write, struct file *filp,   \
150              void __user *buffer, size_t *lenp)
151 #define DECLARE_LL_PROC_PPOS_DECL  loff_t *ppos = &filp->f_pos
152 #else
153 #define ll_proc_dointvec(table, write, filp, buffer, lenp, ppos)        \
154         proc_dointvec(table, write, filp, buffer, lenp, ppos);
155 #define ll_proc_dostring(table, write, filp, buffer, lenp, ppos)        \
156         proc_dostring(table, write, filp, buffer, lenp, ppos);
157 #define LL_PROC_PROTO(name)                                             \
158         name(cfs_sysctl_table_t *table, int write, struct file *filp,   \
159              void __user *buffer, size_t *lenp, loff_t *ppos)
160 #define DECLARE_LL_PROC_PPOS_DECL
161 #endif
162
163 #endif /* _PORTALS_COMPAT_H */