[haiku-gsoc] final report of cpuidle gsoc project

  • From: Yongcong Du <ycdu.vmcore@xxxxxxxxx>
  • To: haiku-gsoc@xxxxxxxxxxxxx
  • Date: Mon, 20 Aug 2012 01:01:49 +0800

Hi all,

Sorry for being silent for about two weeks, but I watched maillist and was
still busy with coding and debugging. The reason I'm seen on irc is that
the acpi is so complex that I must read ACPI spec and NetBSD, FreeBSD and
Linux source code to verify. Since I can't test acpi cstate related
function with qemu or something else, I must modify code then rebuild and
reboot every time. It's too frustrating..

Fortunately, the acpi cpuidle driver began to work yesterday! Currently,
the following features are missing:

1. cstate changing notification.
As we know, the underlying acpi will change the cstates when AC is
connected/disconnected. For example, add one deeper C-State. So we should
update the cstate status and call the generic cpuidle module to update.

2. we don't support the legacy platform which doesn't support bus master
control.
we assume cache is shared by all CPUs so bus master control is a must to
keep cache coherent. It's true on almost all x86 platforms. But some rare
platforms the cache is not shared and require flush cache before entering
ACPI C3 state

3. we don't support the legacy platform which doesn't support ARAT(always
running APIC timer)
On legacy platforms, APIC timer is also stopped in C3, so we have no
choice. To support C3 on these platforms, we need to change the timer
interrupt source(and make the interrupt broadcasted to all cpus if
necessary) on the fly before entering C3, and restore back to lapic after
exiting C3. We need something like FreeBSD's timer event infrastructure.

I want to continue the following work after gsoc:
a. the acpi lcd brightness driver( it doesn't work on my laptop)
b. implement the above missing features 1 and 2
c. try to find and remove non-necessary wakeups
d. implement so called timer event

PS: I'll clean up and push all the code to my github repo tomorrow. I just
want to keep all the kitchen bits locally so that my commit looks clean.

Thanks,
Yongcong

Other related posts: