• Denys Vlasenko's avatar
    e1000e: prevent division by zero if TIMINCA is zero · 3d05b15b
    Denys Vlasenko authored
    Users report that under VMWare, er32(TIMINCA) returns zero.
    This causes division by zero at init time as follows:
    
     ==>       incvalue = er32(TIMINCA) & E1000_TIMINCA_INCVALUE_MASK;
               for (i = 0; i < E1000_MAX_82574_SYSTIM_REREADS; i++) {
                       /* latch SYSTIMH on read of SYSTIML */
                       systim_next = (cycle_t)er32(SYSTIML);
                       systim_next |= (cycle_t)er32(SYSTIMH) << 32;
    
                       time_delta = systim_next - systim;
                       temp = time_delta;
     ====>             rem = do_div(temp, incvalue);
    
    This change makes kernel survive this, and users report that
    NIC does work after this change.
    
    Since on real hardware incvalue is never zero, this should not affect
    real hardware use case.
    Signed-off-by: default avatarDenys Vlasenko <dvlasenk@redhat.com>
    Tested-by: default avatarAaron Brown <aaron.f.brown@intel.com>
    Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
    3d05b15b
netdev.c 212 KB