Message ID | 20100716145724.GA25385@linux.vnet.ibm.com |
---|---|
State | Accepted, archived |
Delegated to: | David Miller |
Headers | show |
From: Robert Jennings <rcj@linux.vnet.ibm.com> Date: Fri, 16 Jul 2010 09:57:25 -0500 > The order of freeing the IRQ and freeing the device in firmware > in ibmveth_close can cause the adapter to become unusable after a > subsequent ibmveth_open. Only a reboot of the OS will make the > network device usable again. This is seen when cycling the adapter > up and down while there is network activity. > > There is a window where an IRQ will be left unserviced (H_EOI will not > be called). The solution is to make a VIO_IRQ_DISABLE h_call, free the > device with firmware, and then call free_irq. > > Signed-off-by: Robert Jennings <rcj@linux.vnet.ibm.com> Applied, thanks. > No changes to the patch, I realized I left out '[PATCH]' in the subject > and I didn't want any automated tools missing this fix. Rules may be sometimes seen as anal, but they are not _that_ anal. Also you can always look in patchwork to see if your change is there, and your original patch was. You actually make more work for me if you resubmit patches already sitting in the queue :-/ -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Index: b/drivers/net/ibmveth.c =================================================================== --- a/drivers/net/ibmveth.c +++ b/drivers/net/ibmveth.c @@ -677,7 +677,7 @@ static int ibmveth_close(struct net_devi if (!adapter->pool_config) netif_stop_queue(netdev); - free_irq(netdev->irq, netdev); + h_vio_signal(adapter->vdev->unit_address, VIO_IRQ_DISABLE); do { lpar_rc = h_free_logical_lan(adapter->vdev->unit_address); @@ -689,6 +689,8 @@ static int ibmveth_close(struct net_devi lpar_rc); } + free_irq(netdev->irq, netdev); + adapter->rx_no_buffer = *(u64*)(((char*)adapter->buffer_list_addr) + 4096 - 8); ibmveth_cleanup(adapter);
The order of freeing the IRQ and freeing the device in firmware in ibmveth_close can cause the adapter to become unusable after a subsequent ibmveth_open. Only a reboot of the OS will make the network device usable again. This is seen when cycling the adapter up and down while there is network activity. There is a window where an IRQ will be left unserviced (H_EOI will not be called). The solution is to make a VIO_IRQ_DISABLE h_call, free the device with firmware, and then call free_irq. Signed-off-by: Robert Jennings <rcj@linux.vnet.ibm.com> --- No changes to the patch, I realized I left out '[PATCH]' in the subject and I didn't want any automated tools missing this fix. --- drivers/net/ibmveth.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html