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>
This commit is contained in:

committed by
Len Brown

parent
b25edc42bf
commit
4202735e8a
@@ -28,19 +28,22 @@ struct cpuidle_device;
|
||||
* CPUIDLE DEVICE INTERFACE *
|
||||
****************************/
|
||||
|
||||
struct cpuidle_state_usage {
|
||||
void *driver_data;
|
||||
|
||||
unsigned long long usage;
|
||||
unsigned long long time; /* in US */
|
||||
};
|
||||
|
||||
struct cpuidle_state {
|
||||
char name[CPUIDLE_NAME_LEN];
|
||||
char desc[CPUIDLE_DESC_LEN];
|
||||
void *driver_data;
|
||||
|
||||
unsigned int flags;
|
||||
unsigned int exit_latency; /* in US */
|
||||
unsigned int power_usage; /* in mW */
|
||||
unsigned int target_residency; /* in US */
|
||||
|
||||
unsigned long long usage;
|
||||
unsigned long long time; /* in US */
|
||||
|
||||
int (*enter) (struct cpuidle_device *dev,
|
||||
int index);
|
||||
};
|
||||
@@ -52,26 +55,27 @@ struct cpuidle_state {
|
||||
|
||||
/**
|
||||
* cpuidle_get_statedata - retrieves private driver state data
|
||||
* @state: the state
|
||||
* @st_usage: the state usage statistics
|
||||
*/
|
||||
static inline void * cpuidle_get_statedata(struct cpuidle_state *state)
|
||||
static inline void *cpuidle_get_statedata(struct cpuidle_state_usage *st_usage)
|
||||
{
|
||||
return state->driver_data;
|
||||
return st_usage->driver_data;
|
||||
}
|
||||
|
||||
/**
|
||||
* cpuidle_set_statedata - stores private driver state data
|
||||
* @state: the state
|
||||
* @st_usage: the state usage statistics
|
||||
* @data: the private data
|
||||
*/
|
||||
static inline void
|
||||
cpuidle_set_statedata(struct cpuidle_state *state, void *data)
|
||||
cpuidle_set_statedata(struct cpuidle_state_usage *st_usage, void *data)
|
||||
{
|
||||
state->driver_data = data;
|
||||
st_usage->driver_data = data;
|
||||
}
|
||||
|
||||
struct cpuidle_state_kobj {
|
||||
struct cpuidle_state *state;
|
||||
struct cpuidle_state_usage *state_usage;
|
||||
struct completion kobj_unregister;
|
||||
struct kobject kobj;
|
||||
};
|
||||
@@ -85,6 +89,7 @@ struct cpuidle_device {
|
||||
int last_residency;
|
||||
int state_count;
|
||||
struct cpuidle_state states[CPUIDLE_STATE_MAX];
|
||||
struct cpuidle_state_usage states_usage[CPUIDLE_STATE_MAX];
|
||||
struct cpuidle_state_kobj *kobjs[CPUIDLE_STATE_MAX];
|
||||
|
||||
struct list_head device_list;
|
||||
|
Reference in New Issue
Block a user