Message ID | Pine.WNT.4.63.0809301603030.2188@jbrandeb-desk.amr.corp.intel.com |
---|---|
State | Accepted, archived |
Delegated to: | Jeff Garzik |
Headers | show |
Hi Jesse, Brandeburg, Jesse wrote: > On Wed, 24 Sep 2008, Breno Leitao wrote: > Thanks for the report, I think this patch should fix it. Please test and > let us know. This was compile tested only. I just tested this patch and it fixed that problem. Thanks > ---- > > From: Jesse Brandeburg <jesse.brandeburg@intel.com> > > ixgb: fix bug when freeing resources > > It was pointed out by Breno Leitao <leitao@linux.vnet.ibm.com> that > ixgb would crash on PPC when an IOMMU was in use, if change_mtu was > called. > > It appears to be a pretty simple issue in the driver that wasn't discovered > because most systems don't run with an IOMMU. The driver needs to only unmap > buffers that are mapped (duh). > > CC: Breno Leitao <leitao@linux.vnet.ibm.com> > > Signed-off-by: Jesse Brandeburg <jesse.brandeburg@intel.com> > --- > drivers/net/ixgb/ixgb_main.c | 8 +++++--- > 1 files changed, 5 insertions(+), 3 deletions(-) > > diff --git a/drivers/net/ixgb/ixgb_main.c b/drivers/net/ixgb/ixgb_main.c > index aa75385..be3c7dc 100644 > --- a/drivers/net/ixgb/ixgb_main.c > +++ b/drivers/net/ixgb/ixgb_main.c > @@ -977,15 +977,17 @@ ixgb_clean_rx_ring(struct ixgb_adapter *adapter) > > for (i = 0; i < rx_ring->count; i++) { > buffer_info = &rx_ring->buffer_info[i]; > - if (buffer_info->skb) { > - > + if (buffer_info->dma) { > pci_unmap_single(pdev, > buffer_info->dma, > buffer_info->length, > PCI_DMA_FROMDEVICE); > + buffer_info->dma = 0; > + buffer_info->length = 0; > + } > > + if (buffer_info->skb) { > dev_kfree_skb(buffer_info->skb); > - > buffer_info->skb = NULL; > } > } > -- 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
diff --git a/drivers/net/ixgb/ixgb_main.c b/drivers/net/ixgb/ixgb_main.c index aa75385..be3c7dc 100644 --- a/drivers/net/ixgb/ixgb_main.c +++ b/drivers/net/ixgb/ixgb_main.c @@ -977,15 +977,17 @@ ixgb_clean_rx_ring(struct ixgb_adapter *adapter) for (i = 0; i < rx_ring->count; i++) { buffer_info = &rx_ring->buffer_info[i]; - if (buffer_info->skb) { - + if (buffer_info->dma) { pci_unmap_single(pdev, buffer_info->dma, buffer_info->length, PCI_DMA_FROMDEVICE); + buffer_info->dma = 0; + buffer_info->length = 0; + } + if (buffer_info->skb) { dev_kfree_skb(buffer_info->skb); - buffer_info->skb = NULL; } }