All of lore.kernel.org
 help / color / mirror / Atom feed
From: Keller, Jacob E <jacob.e.keller@intel.com>
To: intel-wired-lan@osuosl.org
Subject: [Intel-wired-lan] [PATCH net v2] igb: re-assign hw address pointer on reset after PCI error
Date: Fri, 2 Dec 2016 16:41:59 +0000	[thread overview]
Message-ID: <1480696918.16244.2.camel@intel.com> (raw)
In-Reply-To: <58416F5C.20602@linux.vnet.ibm.com>

On Fri, 2016-12-02 at 10:55 -0200, Guilherme G. Piccoli wrote:
> On 11/10/2016 04:46 PM, Guilherme G. Piccoli wrote:
> > Whenever the igb driver detects the result of a read operation
> > returns
> > a value composed only by F's (like 0xFFFFFFFF), it will detach the
> > net_device, clear the hw_addr pointer and warn to the user that
> > adapter's
> > link is lost - those steps happen on igb_rd32().
> > 
> > In case a PCI error happens on Power architecture, there's a
> > recovery
> > mechanism called EEH, that will reset the PCI slot and call
> > driver's
> > handlers to reset the adapter and network functionality as well.
> > 
> > We observed that once hw_addr is NULL after the error is detected
> > on
> > igb_rd32(), it's never assigned back, so in the process of
> > resetting
> > the network functionality we got a NULL pointer dereference in both
> > igb_configure_tx_ring() and igb_configure_rx_ring(). In order to
> > avoid
> > such bug, this patch re-assigns the hw_addr value in the slot_reset
> > handler.
> > 
> > Reported-by: Anthony H. Thai <ahthai@us.ibm.com>
> > Reported-by: Harsha Thyagaraja <hathyaga@in.ibm.com>
> > Signed-off-by: Guilherme G. Piccoli <gpiccoli@linux.vnet.ibm.com>
> > ---
> > ?drivers/net/ethernet/intel/igb/igb_main.c | 5 +++++
> > ?1 file changed, 5 insertions(+)
> > 
> > diff --git a/drivers/net/ethernet/intel/igb/igb_main.c
> > b/drivers/net/ethernet/intel/igb/igb_main.c
> > index edc9a6a..136ee9e 100644
> > --- a/drivers/net/ethernet/intel/igb/igb_main.c
> > +++ b/drivers/net/ethernet/intel/igb/igb_main.c
> > @@ -7878,6 +7878,11 @@ static pci_ers_result_t
> > igb_io_slot_reset(struct pci_dev *pdev)
> > ?		pci_enable_wake(pdev, PCI_D3hot, 0);
> > ?		pci_enable_wake(pdev, PCI_D3cold, 0);
> > 
> > +		/* In case of PCI error, adapter lose its HW
> > address
> > +		?* so we should re-assign it here.
> > +		?*/
> > +		hw->hw_addr = adapter->io_addr;
> > +
> > ?		igb_reset(adapter);
> > ?		wr32(E1000_WUS, ~0);
> > ?		result = PCI_ERS_RESULT_RECOVERED;
> > 
> 
> Ping?
> 
> Sorry to annoy, any news on this?
> Thanks in advance!
> 
> Cheers,
> 
> 
> Guilherme
> 

This seems reasonable. It's similar to what fm10k driver does under
this circumstance.

Thanks,
Jake

WARNING: multiple messages have this Message-ID (diff)
From: "Keller, Jacob E" <jacob.e.keller@intel.com>
To: "gpiccoli@linux.vnet.ibm.com" <gpiccoli@linux.vnet.ibm.com>,
	"intel-wired-lan@lists.osuosl.org"
	<intel-wired-lan@lists.osuosl.org>,
	"Kirsher, Jeffrey T" <jeffrey.t.kirsher@intel.com>,
	"alexander.duyck@gmail.com" <alexander.duyck@gmail.com>
Cc: "netdev@vger.kernel.org" <netdev@vger.kernel.org>,
	"Fujinaka, Todd" <todd.fujinaka@intel.com>
Subject: Re: [PATCH net v2] igb: re-assign hw address pointer on reset after PCI error
Date: Fri, 2 Dec 2016 16:41:59 +0000	[thread overview]
Message-ID: <1480696918.16244.2.camel@intel.com> (raw)
In-Reply-To: <58416F5C.20602@linux.vnet.ibm.com>

On Fri, 2016-12-02 at 10:55 -0200, Guilherme G. Piccoli wrote:
> On 11/10/2016 04:46 PM, Guilherme G. Piccoli wrote:
> > Whenever the igb driver detects the result of a read operation
> > returns
> > a value composed only by F's (like 0xFFFFFFFF), it will detach the
> > net_device, clear the hw_addr pointer and warn to the user that
> > adapter's
> > link is lost - those steps happen on igb_rd32().
> > 
> > In case a PCI error happens on Power architecture, there's a
> > recovery
> > mechanism called EEH, that will reset the PCI slot and call
> > driver's
> > handlers to reset the adapter and network functionality as well.
> > 
> > We observed that once hw_addr is NULL after the error is detected
> > on
> > igb_rd32(), it's never assigned back, so in the process of
> > resetting
> > the network functionality we got a NULL pointer dereference in both
> > igb_configure_tx_ring() and igb_configure_rx_ring(). In order to
> > avoid
> > such bug, this patch re-assigns the hw_addr value in the slot_reset
> > handler.
> > 
> > Reported-by: Anthony H. Thai <ahthai@us.ibm.com>
> > Reported-by: Harsha Thyagaraja <hathyaga@in.ibm.com>
> > Signed-off-by: Guilherme G. Piccoli <gpiccoli@linux.vnet.ibm.com>
> > ---
> >  drivers/net/ethernet/intel/igb/igb_main.c | 5 +++++
> >  1 file changed, 5 insertions(+)
> > 
> > diff --git a/drivers/net/ethernet/intel/igb/igb_main.c
> > b/drivers/net/ethernet/intel/igb/igb_main.c
> > index edc9a6a..136ee9e 100644
> > --- a/drivers/net/ethernet/intel/igb/igb_main.c
> > +++ b/drivers/net/ethernet/intel/igb/igb_main.c
> > @@ -7878,6 +7878,11 @@ static pci_ers_result_t
> > igb_io_slot_reset(struct pci_dev *pdev)
> >  		pci_enable_wake(pdev, PCI_D3hot, 0);
> >  		pci_enable_wake(pdev, PCI_D3cold, 0);
> > 
> > +		/* In case of PCI error, adapter lose its HW
> > address
> > +		 * so we should re-assign it here.
> > +		 */
> > +		hw->hw_addr = adapter->io_addr;
> > +
> >  		igb_reset(adapter);
> >  		wr32(E1000_WUS, ~0);
> >  		result = PCI_ERS_RESULT_RECOVERED;
> > 
> 
> Ping?
> 
> Sorry to annoy, any news on this?
> Thanks in advance!
> 
> Cheers,
> 
> 
> Guilherme
> 

This seems reasonable. It's similar to what fm10k driver does under
this circumstance.

Thanks,
Jake

  reply	other threads:[~2016-12-02 16:41 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-11-10 18:46 [Intel-wired-lan] [PATCH net v2] igb: re-assign hw address pointer on reset after PCI error Guilherme G. Piccoli
2016-11-10 18:46 ` Guilherme G. Piccoli
2016-12-02 12:55 ` [Intel-wired-lan] " Guilherme G. Piccoli
2016-12-02 12:55   ` Guilherme G. Piccoli
2016-12-02 16:41   ` Keller, Jacob E [this message]
2016-12-02 16:41     ` Keller, Jacob E
2016-12-13 20:51 ` [Intel-wired-lan] " Brown, Aaron F
2016-12-13 20:51   ` Brown, Aaron F

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1480696918.16244.2.camel@intel.com \
    --to=jacob.e.keller@intel.com \
    --cc=intel-wired-lan@osuosl.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.