Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
drivers
edac
edac_stub.c
Go to the documentation of this file.
1
/*
2
* common EDAC components that must be in kernel
3
*
4
* Author: Dave Jiang <
[email protected]
>
5
*
6
* 2007 (c) MontaVista Software, Inc.
7
* 2010 (c) Advanced Micro Devices Inc.
8
* Borislav Petkov <
[email protected]
>
9
*
10
* This file is licensed under the terms of the GNU General Public
11
* License version 2. This program is licensed "as is" without any
12
* warranty of any kind, whether express or implied.
13
*
14
*/
15
#include <linux/module.h>
16
#include <
linux/edac.h
>
17
#include <
linux/atomic.h
>
18
#include <linux/device.h>
19
#include <asm/edac.h>
20
21
int
edac_op_state
=
EDAC_OPSTATE_INVAL
;
22
EXPORT_SYMBOL_GPL
(
edac_op_state
);
23
24
atomic_t
edac_handlers
=
ATOMIC_INIT
(0);
25
EXPORT_SYMBOL_GPL
(edac_handlers);
26
27
int
edac_err_assert
= 0;
28
EXPORT_SYMBOL_GPL
(
edac_err_assert
);
29
30
static
atomic_t
edac_subsys_valid =
ATOMIC_INIT
(0);
31
32
/*
33
* called to determine if there is an EDAC driver interested in
34
* knowing an event (such as NMI) occurred
35
*/
36
int
edac_handler_set
(
void
)
37
{
38
if
(
edac_op_state
==
EDAC_OPSTATE_POLL
)
39
return
0;
40
41
return
atomic_read
(&edac_handlers);
42
}
43
EXPORT_SYMBOL_GPL
(
edac_handler_set
);
44
45
/*
46
* handler for NMI type of interrupts to assert error
47
*/
48
void
edac_atomic_assert_error
(
void
)
49
{
50
edac_err_assert
++;
51
}
52
EXPORT_SYMBOL_GPL
(
edac_atomic_assert_error
);
53
54
/*
55
* sysfs object: /sys/devices/system/edac
56
* need to export to other files
57
*/
58
struct
bus_type
edac_subsys
= {
59
.name =
"edac"
,
60
.dev_name =
"edac"
,
61
};
62
EXPORT_SYMBOL_GPL
(edac_subsys);
63
64
/* return pointer to the 'edac' node in sysfs */
65
struct
bus_type
*
edac_get_sysfs_subsys
(
void
)
66
{
67
int
err
= 0;
68
69
if
(
atomic_read
(&edac_subsys_valid))
70
goto
out
;
71
72
/* create the /sys/devices/system/edac directory */
73
err =
subsys_system_register
(&edac_subsys,
NULL
);
74
if
(err) {
75
printk
(
KERN_ERR
"Error registering toplevel EDAC sysfs dir\n"
);
76
return
NULL
;
77
}
78
79
out
:
80
atomic_inc
(&edac_subsys_valid);
81
return
&
edac_subsys
;
82
}
83
EXPORT_SYMBOL_GPL
(
edac_get_sysfs_subsys
);
84
85
void
edac_put_sysfs_subsys
(
void
)
86
{
87
/* last user unregisters it */
88
if
(
atomic_dec_and_test
(&edac_subsys_valid))
89
bus_unregister
(&edac_subsys);
90
}
91
EXPORT_SYMBOL_GPL
(
edac_put_sysfs_subsys
);
Generated on Thu Jan 10 2013 13:29:58 for Linux Kernel by
1.8.2