120, 120
 };
 
-static DEFINE_SPINLOCK(e1000_eeprom_lock);
+static DEFINE_MUTEX(e1000_eeprom_lock);
 static DEFINE_SPINLOCK(e1000_phy_lock);
 
 /**
 s32 e1000_read_eeprom(struct e1000_hw *hw, u16 offset, u16 words, u16 *data)
 {
        s32 ret;
-       spin_lock(&e1000_eeprom_lock);
+       mutex_lock(&e1000_eeprom_lock);
        ret = e1000_do_read_eeprom(hw, offset, words, data);
-       spin_unlock(&e1000_eeprom_lock);
+       mutex_unlock(&e1000_eeprom_lock);
        return ret;
 }
 
                         */
                        data[i] = e1000_shift_in_ee_bits(hw, 16);
                        e1000_standby_eeprom(hw);
+                       cond_resched();
                }
        }
 
 s32 e1000_write_eeprom(struct e1000_hw *hw, u16 offset, u16 words, u16 *data)
 {
        s32 ret;
-       spin_lock(&e1000_eeprom_lock);
+       mutex_lock(&e1000_eeprom_lock);
        ret = e1000_do_write_eeprom(hw, offset, words, data);
-       spin_unlock(&e1000_eeprom_lock);
+       mutex_unlock(&e1000_eeprom_lock);
        return ret;
 }
 
                        return -E1000_ERR_EEPROM;
 
                e1000_standby_eeprom(hw);
+               cond_resched();
 
                /*  Send the WRITE ENABLE command (8 bit opcode )  */
                e1000_shift_out_ee_bits(hw, EEPROM_WREN_OPCODE_SPI,
 
                /* Recover from write */
                e1000_standby_eeprom(hw);
+               cond_resched();
 
                words_written++;
        }