Friday, 10 August 2012

Future development plans…

I've made an executive decision to roll back to 3.0.31 for the next crespo (Nexus S) release and not apply any mainline patches. This will also give me chance to clean the garbage out of my git which I should have never carried over from the ICS kernel.

There are a few reasons for this:

  1. Mainline stable updates often introduce subtle issues/bugs. I can recall many bugs which have been introduced by merging mainline ‘stable’ code.
  2. They are of little benefit, if any benefit at all to our phones. If you look through a lot of the fixes in mainline stable, it's all for very large systems. All those 3.0.39 mm patches for instance, after looking through them all, they are all for huge systems and will not benefit our devices in the slightest.
  3. Mainline stable has become a complete farce, with far too much code being merged. There are far too many updates, there is far too much code churn. It is supposed to be stable, updates should be small, infrequent and well tested to fix critical bugs or security issues only, but that appears to have been forgotten, with new features being added, unnecessary code refactoring, and general churn that shouldn’t be happening.

My tests on maguro (Nexus Prime) show that between 3.0.31 and 3.0.40, boot time slowed by 4 seconds, which is approximately 15% on that device. This doesn't make me happy, and although I haven't tested specifically on crespo (Nexus S) yet because I’m still waiting for it back from repair, I expect the impact to be just as severe.

And this slowdown is for what benefit? Extra subtle bugs. Having the latest version number. Meh.

As regards user experience, the .31 kernel certainly 'feels' quicker than the .40 kernel on maguro, and 'feel' and perception is what it is about as far as I am concerned.

So, from now on, I won't be applying any mainline stable updates to any of my 3.0 based kernels, except patches for exploitable critical security vulnerabilities.

Latest is certainly not always best, especially when there is as much code churn as there is within the 3.0 kernel.

Saturday, 4 August 2012

Stable Nexus S kernel release 3.0.39-27 (ICS & JB)

So, finally another stable release. This is the first stable release for JB and will be the final release for ICS.

As per usual, my releases aren’t about pointless features. They concentrate on stability and performance.

The most interesting thing about this release is the memory management performance backports which were merged into 3.0.39.

Changelog compared to 3.0.36-14:

  • For ICS, base as is per 3.0.36-14. For JB, base is AOSP 3.0.31 merged up to 3.0.39 from mainline.
  • Various other compiler warnings have been fixed
  • Interactive governor with interactivity boost now in use instead of ondemand as it provides a smoother user experience on JellyBean and apparently also on ICS.
  • Fixed a NULL pointer dereference in the i2c code which was causing occasional kernel panics for some users.


  • Deadline I/O scheduler adjusted for flash for lowest I/O latencies
  • Config: As stock AOSP with the following modifications: Deadline I/O scheduler, Interactive CPU governor, Tiny Preempt RCU, Voodoo sound, cifs, utf8
  • Wifi PM_FAST for bcm4329 (ICS) and bcmdhd (JB)

Features not implemented for this release:

  • IDLE2 – although the code / implementation is stable, there are some issues with the actual powersaving which is being attained, or not, as the case may be due to a bug which I haven’t found yet. Bricking my Nexus S didn’t help with that either, so IDLE2 development is paused until I get by Nexus S back from repair

ICS, JB and i9023 version available here.