Using a gang scheduler for SMP would allow Forbid/Permit-style disabling of the multitasking to be implemented. Nasty code that uses Forbid to speed things up will have the dubious distinction of being slower though because it will still run on one core only.
I think gang scheduler would work if Forbid()/Permit() would only be used by user programs. Problems is that Forbid()/Permit() pairs are used throughout drivers, system libs and user programs. Therefor I think a gang scheduler will either severely limit heavy IO task by CPU intensive tasks or the other way around.
In the end you will need to replace all the Forbid()/Permit() around IOs by specific locking mechanism in order to combine heavy IO with efficient SMP.
greets,
Staf.