Whamcloud - gitweb
Revert "b=19325 adjust waiting extent locks during 1st enqueue"
[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 cfs_cpu_online(cpu) ((1<<cpu) & (cpu_online_map))
132 #else
133 #define cfs_cpu_online(cpu) cpu_online(cpu)
134 #endif
135 #ifndef HAVE_CPUMASK_T
136 typedef unsigned long cfs_cpumask_t;
137 #define cfs_cpu_set(cpu, map) set_bit(cpu, &(map))
138 #define cpus_clear(map) memset(&(map), 0, sizeof(cfs_cpumask_t))
139 #endif
140
141 #ifndef __user
142 #define __user
143 #endif
144
145 #ifndef __fls
146 #define __cfs_fls fls
147 #else
148 #define __cfs_fls __fls
149 #endif
150
151 #ifdef HAVE_5ARGS_SYSCTL_PROC_HANDLER
152 #define ll_proc_dointvec(table, write, filp, buffer, lenp, ppos)        \
153         proc_dointvec(table, write, buffer, lenp, ppos);
154
155 #define ll_proc_dolongvec(table, write, filp, buffer, lenp, ppos)        \
156         proc_doulongvec_minmax(table, write, buffer, lenp, ppos);
157 #define ll_proc_dostring(table, write, filp, buffer, lenp, ppos)        \
158         proc_dostring(table, write, buffer, lenp, ppos);
159 #define LL_PROC_PROTO(name)                                             \
160         name(cfs_sysctl_table_t *table, int write,                      \
161              void __user *buffer, size_t *lenp, loff_t *ppos)
162 #else
163 #define ll_proc_dointvec(table, write, filp, buffer, lenp, ppos)        \
164         proc_dointvec(table, write, filp, buffer, lenp, ppos);
165
166 #define ll_proc_dolongvec(table, write, filp, buffer, lenp, ppos)        \
167         proc_doulongvec_minmax(table, write, filp, buffer, lenp, ppos);
168 #define ll_proc_dostring(table, write, filp, buffer, lenp, ppos)        \
169         proc_dostring(table, write, filp, buffer, lenp, ppos);
170 #define LL_PROC_PROTO(name)                                             \
171         name(cfs_sysctl_table_t *table, int write, struct file *filp,   \
172              void __user *buffer, size_t *lenp, loff_t *ppos)
173 #endif
174 #define DECLARE_LL_PROC_PPOS_DECL
175
176 /* helper for sysctl handlers */
177 int proc_call_handler(void *data, int write,
178                       loff_t *ppos, void *buffer, size_t *lenp,
179                       int (*handler)(void *data, int write,
180                                      loff_t pos, void *buffer, int len));
181
182 #endif /* _PORTALS_COMPAT_H */