• D
    e1000e: prevent division by zero if TIMINCA is zero · 3d05b15b
    Denys Vlasenko 提交于
    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: NDenys Vlasenko <dvlasenk@redhat.com>
    Tested-by: NAaron Brown <aaron.f.brown@intel.com>
    Signed-off-by: NJeff Kirsher <jeffrey.t.kirsher@intel.com>
    3d05b15b
netdev.c 212.1 KB