Merge branches 'acpi-ec' and 'acpi-button'
[cascardo/linux.git] / drivers / staging / lustre / lnet / libcfs / linux / linux-prim.c
1 /*
2  * GPL HEADER START
3  *
4  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License version 2 only,
8  * as published by the Free Software Foundation.
9  *
10  * This program is distributed in the hope that it will be useful, but
11  * WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  * General Public License version 2 for more details (a copy is included
14  * in the LICENSE file that accompanied this code).
15  *
16  * You should have received a copy of the GNU General Public License
17  * version 2 along with this program; If not, see
18  * http://www.gnu.org/licenses/gpl-2.0.html
19  *
20  * GPL HEADER END
21  */
22 /*
23  * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
24  * Use is subject to license terms.
25  *
26  * Copyright (c) 2011, 2012, Intel Corporation.
27  */
28 /*
29  * This file is part of Lustre, http://www.lustre.org/
30  * Lustre is a trademark of Sun Microsystems, Inc.
31  */
32
33 #define DEBUG_SUBSYSTEM S_LNET
34 #include <linux/module.h>
35 #include <linux/kernel.h>
36 #include <linux/fs_struct.h>
37 #include <linux/sched.h>
38
39 #include "../../../include/linux/libcfs/libcfs.h"
40
41 #if defined(CONFIG_KGDB)
42 #include <linux/kgdb.h>
43 #endif
44
45 sigset_t
46 cfs_block_allsigs(void)
47 {
48         unsigned long     flags;
49         sigset_t        old;
50
51         spin_lock_irqsave(&current->sighand->siglock, flags);
52         old = current->blocked;
53         sigfillset(&current->blocked);
54         recalc_sigpending();
55         spin_unlock_irqrestore(&current->sighand->siglock, flags);
56
57         return old;
58 }
59 EXPORT_SYMBOL(cfs_block_allsigs);
60
61 sigset_t cfs_block_sigs(unsigned long sigs)
62 {
63         unsigned long  flags;
64         sigset_t        old;
65
66         spin_lock_irqsave(&current->sighand->siglock, flags);
67         old = current->blocked;
68         sigaddsetmask(&current->blocked, sigs);
69         recalc_sigpending();
70         spin_unlock_irqrestore(&current->sighand->siglock, flags);
71         return old;
72 }
73 EXPORT_SYMBOL(cfs_block_sigs);
74
75 /* Block all signals except for the @sigs */
76 sigset_t cfs_block_sigsinv(unsigned long sigs)
77 {
78         unsigned long flags;
79         sigset_t old;
80
81         spin_lock_irqsave(&current->sighand->siglock, flags);
82         old = current->blocked;
83         sigaddsetmask(&current->blocked, ~sigs);
84         recalc_sigpending();
85         spin_unlock_irqrestore(&current->sighand->siglock, flags);
86
87         return old;
88 }
89 EXPORT_SYMBOL(cfs_block_sigsinv);
90
91 void
92 cfs_restore_sigs(sigset_t old)
93 {
94         unsigned long  flags;
95
96         spin_lock_irqsave(&current->sighand->siglock, flags);
97         current->blocked = old;
98         recalc_sigpending();
99         spin_unlock_irqrestore(&current->sighand->siglock, flags);
100 }
101 EXPORT_SYMBOL(cfs_restore_sigs);
102
103 void
104 cfs_clear_sigpending(void)
105 {
106         unsigned long flags;
107
108         spin_lock_irqsave(&current->sighand->siglock, flags);
109         clear_tsk_thread_flag(current, TIF_SIGPENDING);
110         spin_unlock_irqrestore(&current->sighand->siglock, flags);
111 }
112 EXPORT_SYMBOL(cfs_clear_sigpending);