On 11/08/2016 12:12 PM, Alexander Duyck wrote:
On Monday, November 7, 2016, Cao jin <caoj.f...@cn.fujitsu.com <mailto:caoj.f...@cn.fujitsu.com>> wrote:
We removed head because it isn't really accessed very often, it is only really used for when the ring is configured. Tail is accessed every time we add a descriptor to a ring. The pointer chasing from ring to netdev to adapter to hw is expensive. That is one of the rasons why we cache the pointer to the tail register.
I see. I can submit the patch as you suggested.
Signed-off-by: Cao jin <caoj.f...@cn.fujitsu.com> --- drivers/net/ethernet/intel/igb/igb.h | 1 - drivers/net/ethernet/intel/igb/igb_main.c | 16 +++++++++-------
hw->hw_addr could be alterred to NULL(in igb_rd32), this is why writel oops the kernel, you give a fine solution. But from the oops message, we can find, register reading returns all F's, I also have a question want to consult: when igb device is reset, would reading register(no matter config space or non-PCIe configuration registers) during reset returns all F's? (I guess this is the core of my issue) An all F's value means the read failed. The device is likely off of the bus and the hw_addr may not have been repopulated after the reset. You might want to check the mailing list as I thought someone had submitted a patch recently for one of the drivers to repopulate hw_addr after a reset.
I guess you are saying this one: http://patchwork.ozlabs.org/patch/689592/ Seems they have a similar issue with me. -- Yours Sincerely, Cao jin