When the hang-up occurs at the first write, it must be in snd_mpu401_uart_cmd(). At the very beginning, it calls mpu->write(mpu, 0x00, MPU401D(mpu)); Try to comment out this and see what happens.
I had tried that - I think that I just commented out the reset command. It would not crash or reboot, but it did not haver functionality either.
Do I understand correctly that this bug happens when you open a rawmidi device for read, e.g. % cat /dev/snd/midiC0D0 > /dev/null
yes. I usually used amidi -p hw:0 -d
Perhaps an easiest but foolishest way to trace this is to put printk at each io-port access and any other important points, and give some sleep at each point, then watch the kernel message. You can get rid of spin_lock_*() around that, just for testing.
I've done this until I traced it to the first outb() call, i.e. the initialization mentioned above. The first outb() will cause the reboot.
Florian
??
Takashi