3aa565f53c
When a CPU is offlined on POWER currently, we call rtas_stop_self() and hand the CPU back to the resource pool. This path is used for DLPAR which will cause a change in the LPAR configuration which will be visible outside. This patch changes the default state a CPU is put into when it is offlined. On platforms which support ceding the processor to the hypervisor with latency hint specifier value, during a cpu offline operation, instead of calling rtas_stop_self(), we cede the vCPU to the hypervisor while passing a latency hint specifier value. The Hypervisor can use this hint to provide better energy savings. Also, during the offline operation, the control of the vCPU remains with the LPAR as oppposed to returning it to the resource pool. The patch achieves this by creating an infrastructure to set the preferred_offline_state() which can be either - CPU_STATE_OFFLINE: which is the current behaviour of calling rtas_stop_self() - CPU_STATE_INACTIVE: which cedes the vCPU to the hypervisor with the latency hint specifier. The codepath which wants to perform a DLPAR operation can set the preferred_offline_state() of a CPU to CPU_STATE_OFFLINE before invoking cpu_down(). The patch also provides a boot-time command line argument to disable/enable CPU_STATE_INACTIVE. Signed-off-by: Gautham R Shenoy <ego@in.ibm.com> Signed-off-by: Nathan Fontenot <nfont@austin.ibm.com> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
18 lines
559 B
C
18 lines
559 B
C
#ifndef _OFFLINE_STATES_H_
|
|
#define _OFFLINE_STATES_H_
|
|
|
|
/* Cpu offline states go here */
|
|
enum cpu_state_vals {
|
|
CPU_STATE_OFFLINE,
|
|
CPU_STATE_INACTIVE,
|
|
CPU_STATE_ONLINE,
|
|
CPU_MAX_OFFLINE_STATES
|
|
};
|
|
|
|
extern enum cpu_state_vals get_cpu_current_state(int cpu);
|
|
extern void set_cpu_current_state(int cpu, enum cpu_state_vals state);
|
|
extern enum cpu_state_vals get_preferred_offline_state(int cpu);
|
|
extern void set_preferred_offline_state(int cpu, enum cpu_state_vals state);
|
|
extern void set_default_offline_state(int cpu);
|
|
extern int start_secondary(void);
|
|
#endif
|