On 09/24/08 18:45, Li, Aubrey wrote: > 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 >
Can the callback change the per-cpu idle function pointers? Bill
