diff options
| author | Deepthi Dharwar <deepthi@linux.vnet.ibm.com> | 2011-10-28 06:50:33 -0400 |
|---|---|---|
| committer | Len Brown <len.brown@intel.com> | 2011-11-06 21:13:49 -0500 |
| commit | 4202735e8ab6ecfb0381631a0d0b58fefe0bd4e2 (patch) | |
| tree | 189e5aab466995128c5a9d5a2a4075a5db530674 /include/linux | |
| parent | b25edc42bfb9602f0503474b2c94701d5536ce60 (diff) | |
cpuidle: Split cpuidle_state structure and move per-cpu statistics fields
This is the first step towards global registration of cpuidle
states. The statistics used primarily by the governor are per-cpu
and have to be split from rest of the fields inside cpuidle_state,
which would be made global i.e. single copy. The driver_data field
is also per-cpu and moved.
Signed-off-by: Deepthi Dharwar <deepthi@linux.vnet.ibm.com>
Signed-off-by: Trinabh Gupta <g.trinabh@gmail.com>
Tested-by: Jean Pihet <j-pihet@ti.com>
Reviewed-by: Kevin Hilman <khilman@ti.com>
Acked-by: Arjan van de Ven <arjan@linux.intel.com>
Acked-by: Kevin Hilman <khilman@ti.com>
Signed-off-by: Len Brown <len.brown@intel.com>
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/cpuidle.h | 25 |
1 files changed, 15 insertions, 10 deletions
diff --git a/include/linux/cpuidle.h b/include/linux/cpuidle.h index c6d85cf90eb2..0156540b3f79 100644 --- a/include/linux/cpuidle.h +++ b/include/linux/cpuidle.h | |||
| @@ -28,19 +28,22 @@ struct cpuidle_device; | |||
| 28 | * CPUIDLE DEVICE INTERFACE * | 28 | * CPUIDLE DEVICE INTERFACE * |
| 29 | ****************************/ | 29 | ****************************/ |
| 30 | 30 | ||
| 31 | struct cpuidle_state_usage { | ||
| 32 | void *driver_data; | ||
| 33 | |||
| 34 | unsigned long long usage; | ||
| 35 | unsigned long long time; /* in US */ | ||
| 36 | }; | ||
| 37 | |||
| 31 | struct cpuidle_state { | 38 | struct cpuidle_state { |
| 32 | char name[CPUIDLE_NAME_LEN]; | 39 | char name[CPUIDLE_NAME_LEN]; |
| 33 | char desc[CPUIDLE_DESC_LEN]; | 40 | char desc[CPUIDLE_DESC_LEN]; |
| 34 | void *driver_data; | ||
| 35 | 41 | ||
| 36 | unsigned int flags; | 42 | unsigned int flags; |
| 37 | unsigned int exit_latency; /* in US */ | 43 | unsigned int exit_latency; /* in US */ |
| 38 | unsigned int power_usage; /* in mW */ | 44 | unsigned int power_usage; /* in mW */ |
| 39 | unsigned int target_residency; /* in US */ | 45 | unsigned int target_residency; /* in US */ |
| 40 | 46 | ||
| 41 | unsigned long long usage; | ||
| 42 | unsigned long long time; /* in US */ | ||
| 43 | |||
| 44 | int (*enter) (struct cpuidle_device *dev, | 47 | int (*enter) (struct cpuidle_device *dev, |
| 45 | int index); | 48 | int index); |
| 46 | }; | 49 | }; |
| @@ -52,26 +55,27 @@ struct cpuidle_state { | |||
| 52 | 55 | ||
| 53 | /** | 56 | /** |
| 54 | * cpuidle_get_statedata - retrieves private driver state data | 57 | * cpuidle_get_statedata - retrieves private driver state data |
| 55 | * @state: the state | 58 | * @st_usage: the state usage statistics |
| 56 | */ | 59 | */ |
| 57 | static inline void * cpuidle_get_statedata(struct cpuidle_state *state) | 60 | static inline void *cpuidle_get_statedata(struct cpuidle_state_usage *st_usage) |
| 58 | { | 61 | { |
| 59 | return state->driver_data; | 62 | return st_usage->driver_data; |
| 60 | } | 63 | } |
| 61 | 64 | ||
| 62 | /** | 65 | /** |
| 63 | * cpuidle_set_statedata - stores private driver state data | 66 | * cpuidle_set_statedata - stores private driver state data |
| 64 | * @state: the state | 67 | * @st_usage: the state usage statistics |
| 65 | * @data: the private data | 68 | * @data: the private data |
| 66 | */ | 69 | */ |
| 67 | static inline void | 70 | static inline void |
| 68 | cpuidle_set_statedata(struct cpuidle_state *state, void *data) | 71 | cpuidle_set_statedata(struct cpuidle_state_usage *st_usage, void *data) |
| 69 | { | 72 | { |
| 70 | state->driver_data = data; | 73 | st_usage->driver_data = data; |
| 71 | } | 74 | } |
| 72 | 75 | ||
| 73 | struct cpuidle_state_kobj { | 76 | struct cpuidle_state_kobj { |
| 74 | struct cpuidle_state *state; | 77 | struct cpuidle_state *state; |
| 78 | struct cpuidle_state_usage *state_usage; | ||
| 75 | struct completion kobj_unregister; | 79 | struct completion kobj_unregister; |
| 76 | struct kobject kobj; | 80 | struct kobject kobj; |
| 77 | }; | 81 | }; |
| @@ -85,6 +89,7 @@ struct cpuidle_device { | |||
| 85 | int last_residency; | 89 | int last_residency; |
| 86 | int state_count; | 90 | int state_count; |
| 87 | struct cpuidle_state states[CPUIDLE_STATE_MAX]; | 91 | struct cpuidle_state states[CPUIDLE_STATE_MAX]; |
| 92 | struct cpuidle_state_usage states_usage[CPUIDLE_STATE_MAX]; | ||
| 88 | struct cpuidle_state_kobj *kobjs[CPUIDLE_STATE_MAX]; | 93 | struct cpuidle_state_kobj *kobjs[CPUIDLE_STATE_MAX]; |
| 89 | 94 | ||
| 90 | struct list_head device_list; | 95 | struct list_head device_list; |
