Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/drivers/cpuidle/driver.c
15109 views
1
/*
2
* driver.c - driver support
3
*
4
* (C) 2006-2007 Venkatesh Pallipadi <[email protected]>
5
* Shaohua Li <[email protected]>
6
* Adam Belay <[email protected]>
7
*
8
* This code is licenced under the GPL.
9
*/
10
11
#include <linux/mutex.h>
12
#include <linux/module.h>
13
#include <linux/cpuidle.h>
14
15
#include "cpuidle.h"
16
17
static struct cpuidle_driver *cpuidle_curr_driver;
18
DEFINE_SPINLOCK(cpuidle_driver_lock);
19
20
/**
21
* cpuidle_register_driver - registers a driver
22
* @drv: the driver
23
*/
24
int cpuidle_register_driver(struct cpuidle_driver *drv)
25
{
26
if (!drv)
27
return -EINVAL;
28
29
spin_lock(&cpuidle_driver_lock);
30
if (cpuidle_curr_driver) {
31
spin_unlock(&cpuidle_driver_lock);
32
return -EBUSY;
33
}
34
cpuidle_curr_driver = drv;
35
spin_unlock(&cpuidle_driver_lock);
36
37
return 0;
38
}
39
40
EXPORT_SYMBOL_GPL(cpuidle_register_driver);
41
42
/**
43
* cpuidle_get_driver - return the current driver
44
*/
45
struct cpuidle_driver *cpuidle_get_driver(void)
46
{
47
return cpuidle_curr_driver;
48
}
49
EXPORT_SYMBOL_GPL(cpuidle_get_driver);
50
51
/**
52
* cpuidle_unregister_driver - unregisters a driver
53
* @drv: the driver
54
*/
55
void cpuidle_unregister_driver(struct cpuidle_driver *drv)
56
{
57
if (drv != cpuidle_curr_driver) {
58
WARN(1, "invalid cpuidle_unregister_driver(%s)\n",
59
drv->name);
60
return;
61
}
62
63
spin_lock(&cpuidle_driver_lock);
64
cpuidle_curr_driver = NULL;
65
spin_unlock(&cpuidle_driver_lock);
66
}
67
68
EXPORT_SYMBOL_GPL(cpuidle_unregister_driver);
69
70