Bill.Holler wrote: > A callback will work great. The callback interface is in > uts/common/sys/callb.h. We can add a callback class such as > #define CB_CL_CPU_DEEP_IDLE 16 > > cpudrv can register a CB_CL_CPU_DEEP_IDLE callback > in its init function. > /dev/pm can invoke callb_execute_class() CB_CL_CPU_DEEP_IDLE from its > ioctl case. > > The cpudrv callback can do whatever it needs to do to enable/ > disable C-States. The cpudrv callback can call the hpet > interface to enable/disable the cstate_timer. > > > power.conf > | > v > pmconfig > | > v > pm driver's pm_ioctl > callb_execute_class(CB_CL_CPU_DEEP_IDLE) > | > v > cpudrv callback function > | ^ > v | > hpet.cstate_timer_[enable|disable] > > > > I believe there will be only 1 callback into cpudrv, not > 1 callback per driver instance? >
I think so for hpet timer enable/disable. But since idle function is per-cpu now, I think we still need idle_cpu_no_deep_c to check if we need to enter deep cstate on-the-fly. Thanks, -Aubrey
