unsigned int cpu = smp_processor_id();
        u32 low = 0, high = 0, address = 0;
        unsigned int bank, block;
-       int offset = -1;
+       int offset = -1, new;
 
        for (bank = 0; bank < mca_cfg.banks; ++bank) {
                for (block = 0; block < NR_BLOCKS; ++block) {
                        b.address               = address;
                        b.interrupt_capable     = lvt_interrupt_supported(bank, high);
 
-                       if (b.interrupt_capable) {
-                               int new = (high & MASK_LVTOFF_HI) >> 20;
-                               offset  = setup_APIC_mce(offset, new);
-                       }
+                       if (!b.interrupt_capable)
+                               goto init;
 
-                       mce_threshold_block_init(&b, offset);
+                       new     = (high & MASK_LVTOFF_HI) >> 20;
+                       offset  = setup_APIC_mce(offset, new);
 
-                       if (mce_threshold_vector != amd_threshold_interrupt)
+                       if ((offset == new) &&
+                           (mce_threshold_vector != amd_threshold_interrupt))
                                mce_threshold_vector = amd_threshold_interrupt;
+
+init:
+                       mce_threshold_block_init(&b, offset);
                }
        }
 }