• Benjamin Poirier's avatar
    e1000e: Ignore TSYNCRXCTL when getting I219 clock attributes · fff200ca
    Benjamin Poirier authored
    There have been multiple reports of crashes that look like
    kernel: RIP: 0010:[<ffffffff8110303f>] timecounter_read+0xf/0x50
    [...]
    kernel: Call Trace:
    kernel:  [<ffffffffa0806b0f>] e1000e_phc_gettime+0x2f/0x60 [e1000e]
    kernel:  [<ffffffffa0806c5d>] e1000e_systim_overflow_work+0x1d/0x80 [e1000e]
    kernel:  [<ffffffff810992c5>] process_one_work+0x155/0x440
    kernel:  [<ffffffff81099e16>] worker_thread+0x116/0x4b0
    kernel:  [<ffffffff8109f422>] kthread+0xd2/0xf0
    kernel:  [<ffffffff8163184f>] ret_from_fork+0x3f/0x70
    
    These can be traced back to the fact that e1000e_systim_reset() skips the
    timecounter_init() call if e1000e_get_base_timinca() returns -EINVAL, which
    leads to a null deref in timecounter_read().
    
    Commit 83129b37 ("e1000e: fix systim issues", v4.2-rc1) reworked
    e1000e_get_base_timinca() in such a way that it can return -EINVAL for
    e1000_pch_spt if the SYSCFI bit is not set in TSYNCRXCTL.
    
    Some experimentation has shown that on I219 (e1000_pch_spt, "MAC: 12")
    adapters, the E1000_TSYNCRXCTL_SYSCFI flag is unstable; TSYNCRXCTL reads
    sometimes don't have the SYSCFI bit set. Retrying the read shortly after
    finds the bit to be set. This was observed at boot (probe) but also link up
    and link down.
    
    Moreover, the phc (PTP Hardware Clock) seems to operate normally even after
    reads where SYSCFI=0. Therefore, remove this register read and
    unconditionally set the clock parameters.
    Reported-by: default avatarAchim Mildenberger <admin@fph.physik.uni-karlsruhe.de>
    Message-Id: <20180425065243.g5mqewg5irkwgwgv@f2>
    Bugzilla: https://bugzilla.suse.com/show_bug.cgi?id=1075876
    Fixes: 83129b37 ("e1000e: fix systim issues")
    Signed-off-by: default avatarBenjamin Poirier <bpoirier@suse.com>
    Tested-by: default avatarAaron Brown <aaron.f.brown@intel.com>
    Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
    fff200ca
netdev.c 213 KB