Solaris 10 si3124 backport (workaround for bug #6566207)

Do you think you can get a fast cheap SATA mass storage at home with Solaris 10 and ZFS just plugging a cheap si3124 controller?

Not so easily: on Solaris 10 you will be afflicted by some boring bug known as bug #6566207 which gets your controller stuck for around a minute after some heavy I/O.

This means you cannot move data (eg. a dvd iso file) within reasonable amount of time because your controller will get stuck on 100% busy state and your transfer will freeze for 60 seconds. In my case this behaviour was showing often, enough to drop an gig ethernet ftp transfer rate to ~2Mb/s, as you can see:

4641337344 bytes transferred in 2413 seconds (1.83M/s)

Looking on internet you can find some people complaining about this bug (some of them switched to other OSes for this issue) but no workaround has been posted for Solaris 10: too bad.

Sun knows the bug exists but they seem to ignore this issue (who cares about crappy hardware?). OpenSolaris people knows the bug exists and they already patched it (there’s an error in interrupt handling routine: interrupts get cleared twice), but their si3124 module simply won’t load on Solaris 10.

So the trick is to compile the OpenSolaris’ si3124 driver for Solaris 10, and that’s what I did. I got from OpenSolaris an si3124 source (old enough to be close to the one shipped on S10), backported the patch and rebuilt it.

Now my system is working fine, I never experienced these lockups again. Below is attached a tarball containing the si3124 sources and driver compiled for x86 (32bit). If you want to build a SPARC or 64bit version of the driver you need Sun Studio 10 plus some Makefile CFLAGS tweaking.

To install the binary driver follow these steps:

  1. Copy /kernel/drv/si3124 to a safe place (the original driver)
  2. Download the tarball below
  3. Untar the the tarball and copy si3124 to /kernel/drv
  4. Reboot

If everything works fine, your system should boot with the new driver. You can check the version you’re running using modinfo, as shown here:

root@siona:~# modinfo | grep si3124
141 f8ee2000 4c94 206 1 si3124 (si3124 driver v1.3bp)
root@siona:~#

The patched driver has been tested on:

  1. Solaris 10 update 3 (native driver is 1.2)
  2. Solaris 10 update 5 (native driver is 1.2)

The backported driver shows version v1.3bp. You can download the si3124 backport (binary and sources) tarball here.