]> git.baikalelectronics.ru Git - kernel.git/commit
e1000: save skb counts in TX to avoid cache misses
authorDean Nelson <dnelson@redhat.com>
Thu, 25 Aug 2011 14:39:24 +0000 (14:39 +0000)
committerDavid S. Miller <davem@davemloft.net>
Fri, 26 Aug 2011 16:55:18 +0000 (12:55 -0400)
commit04fb0aa3ce8dc687f076afaaa031a1cdef4cc471
treeef89d4b94c4f41f6d18c923490441189ff95b52d
parent32e1a31a76565816d8ec4be42d9a359d12b6f306
e1000: save skb counts in TX to avoid cache misses

Virtual Machines with emulated e1000 network adapter running on Parallels'
server were seeing kernel panics due to the e1000 driver dereferencing an
unexpected NULL pointer retrieved from buffer_info->skb.

The problem has been addressed for the e1000e driver, but not for the e1000.
Since the two drivers share similar code in the affected area, a port of the
following e1000e driver commit solves the issue for the e1000 driver:

commit 8ea1d58a5f95b6dad7a0456bbe4ac1f79e8b3fa9
Author: Tom Herbert <therbert@google.com>
Date:   Wed May 5 14:02:27 2010 +0000

    e1000e: save skb counts in TX to avoid cache misses

    In e1000_tx_map, precompute number of segements and bytecounts which
    are derived from fields in skb; these are stored in buffer_info.  When
    cleaning tx in e1000_clean_tx_irq use the values in the associated
    buffer_info for statistics counting, this eliminates cache misses
    on skb fields.

Signed-off-by: Dean Nelson <dnelson@redhat.com>
Acked-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/intel/e1000/e1000.h
drivers/net/ethernet/intel/e1000/e1000_main.c