Using a winmodem with a Conexant driver in linux 3.x kernels

Many facts shook linux world recently: the development of the new kernel 3, GNOME 3, Unity. My PC is now full of bugs. Most of them are known, but the to-do list of open-source developers seems to be full since these bugs are being resolved quite slowly (at least for Ubuntu 11.10 and Debian Wheezy).
I take it easy. Many geeks are going to improve Debian and Ubuntu. I thing everything will return as smooth as Ubuntu 10.04 by April. Nevertheless, upgrading to 3.0 kernel made my Conexant internal 56K modem unusable. Any attempt of compiling source to obtain new HSF modules did not work. Of course, nobody seemed to be interested in me unable to send faxes. Therefore, I decided to try to solve this problem on my own. It’s quite simple.

In the new kernel some libraries employed to compile HSF modules changed their syntax. Just upgrading to the new syntax, and commenting two lines made the work. Just follow the instructions given here with the following changes.

modules/osdcp.c
+ static DEFINE_SPINLOCK(dcp_lock );
- static spinlock_t dcp_lock = SPIN_LOCK_UNLOCKED;

modules/osdiag.c
+ static DEFINE_SPINLOCK(diag_lock );
- static spinlock_t diag_lock = SPIN_LOCK_UNLOCKED;

modules/osfloat.c
+ static DEFINE_SPINLOCK(fpstates_lock __attribute__((unused)));
- static spinlock_t fpstates_lock __attribute__((unused)) = SPIN_LOCK_UNLOCKED;

modules/osservices.c
- #include "linux/smp_lock.h"
[...]
+ static DEFINE_SPINLOCK(atomic_lock __attribute__((unused)));
- static spinlock_t atomic_lock __attribute__((unused)) = SPIN_LOCK_UNLOCKED;
[...]
- lock_kernel();
[...]
- unlock_kernel();

modules/GPL/oscompat.h
+ static DEFINE_SPINLOCK(tqueue_lock __attribute__((unused)));
- static spinlock_t tqueue_lock __attribute__((unused)) = SPIN_LOCK_UNLOCKED;

P.S. In these hours I’ve found also this thread that should allow one to get working modules for Conexant modems. I can’t confirm it yet.