}
        }
        qlge_irq_type = LEG_IRQ;
+       set_bit(QL_LEGACY_ENABLED, &qdev->flags);
        netif_printk(qdev, ifup, KERN_DEBUG, qdev->ndev,
                     "Running with legacy interrupts.\n");
 }
                intr_context->intr_dis_mask =
                    INTR_EN_TYPE_MASK | INTR_EN_INTR_MASK |
                    INTR_EN_TYPE_DISABLE;
+               if (test_bit(QL_LEGACY_ENABLED, &qdev->flags)) {
+                       /* Experience shows that when using INTx interrupts,
+                        * the device does not always auto-mask INTR_EN_EN.
+                        * Moreover, masking INTR_EN_EN manually does not
+                        * immediately prevent interrupt generation.
+                        */
+                       intr_context->intr_en_mask |= INTR_EN_EI << 16 |
+                               INTR_EN_EI;
+                       intr_context->intr_dis_mask |= INTR_EN_EI << 16;
+               }
                intr_context->intr_read_mask =
                    INTR_EN_TYPE_MASK | INTR_EN_INTR_MASK | INTR_EN_TYPE_READ;
                /*