--- cpufreq/arch/i386/kernel/cpu/cpufreq/longhaul.c~	2005-06-08 19:53:28.000000000 -0700
+++ cpufreq/arch/i386/kernel/cpu/cpufreq/longhaul.c	2005-06-08 19:59:57.289167153 -0700
@@ -262,6 +262,10 @@ static void longhaul_setstate(unsigned i
 	 */
 	case TYPE_LONGHAUL_V1:
 	case TYPE_LONGHAUL_V2:
+		preempt_disable();
+		local_irq_save(flags);
+		disable_mastering();
+
 		rdmsrl (MSR_VIA_BCR2, bcr2.val);
 		/* Enable software clock multiplier */
 		bcr2.bits.ESOFTBF = 1;
@@ -278,6 +282,10 @@ static void longhaul_setstate(unsigned i
 		local_irq_disable();
 		wrmsrl (MSR_VIA_BCR2, bcr2.val);
 		local_irq_enable();
+
+		restore_mastering();
+		local_irq_restore(flags);
+		preempt_enable();
 		break;
 
 	/*
