diff options
| author | Emil Tantilov <emil.s.tantilov@intel.com> | 2012-07-28 05:07:48 +0000 | 
|---|---|---|
| committer | Peter P Waskiewicz Jr <peter.p.waskiewicz.jr@intel.com> | 2012-08-09 02:36:05 -0700 | 
| commit | b669588abaceb5c6d70699b6c009e5cedc42449b (patch) | |
| tree | b268a3acb349a5cae8efd16b80a2d04efc5fc428 /drivers/net/ethernet/intel/igb/igb_main.c | |
| parent | 36471012e2ae28ca3178f84d4687a2d88a36593e (diff) | |
| download | olio-linux-3.10-b669588abaceb5c6d70699b6c009e5cedc42449b.tar.xz olio-linux-3.10-b669588abaceb5c6d70699b6c009e5cedc42449b.zip  | |
igb: fix panic while dumping packets on Tx hang with IOMMU
This patch resolves a "BUG: unable to handle kernel paging request at ..."
oops while dumping packet data. The issue occurs with IOMMU enabled due to
the address provided by phys_to_virt().
This patch avoids phys_to_virt() by making using skb->data and the address
of the pages allocated for Rx.
Signed-off-by: Emil Tantilov <emil.s.tantilov@intel.com>
Tested-by: Jeff Pieper <jeffrey.e.pieper@intel.com>
Signed-off-by: Peter P Waskiewicz Jr <peter.p.waskiewicz.jr@intel.com>
Diffstat (limited to 'drivers/net/ethernet/intel/igb/igb_main.c')
| -rw-r--r-- | drivers/net/ethernet/intel/igb/igb_main.c | 19 | 
1 files changed, 9 insertions, 10 deletions
diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c index b7c2d505057..48cc4fb1a30 100644 --- a/drivers/net/ethernet/intel/igb/igb_main.c +++ b/drivers/net/ethernet/intel/igb/igb_main.c @@ -462,10 +462,10 @@ static void igb_dump(struct igb_adapter *adapter)  				(u64)buffer_info->time_stamp,  				buffer_info->skb, next_desc); -			if (netif_msg_pktdata(adapter) && buffer_info->dma != 0) +			if (netif_msg_pktdata(adapter) && buffer_info->skb)  				print_hex_dump(KERN_INFO, "",  					DUMP_PREFIX_ADDRESS, -					16, 1, phys_to_virt(buffer_info->dma), +					16, 1, buffer_info->skb->data,  					buffer_info->length, true);  		}  	} @@ -547,18 +547,17 @@ rx_ring_summary:  					(u64)buffer_info->dma,  					buffer_info->skb, next_desc); -				if (netif_msg_pktdata(adapter)) { +				if (netif_msg_pktdata(adapter) && +				    buffer_info->dma && buffer_info->skb) {  					print_hex_dump(KERN_INFO, "", -						DUMP_PREFIX_ADDRESS, -						16, 1, -						phys_to_virt(buffer_info->dma), -						IGB_RX_HDR_LEN, true); +						  DUMP_PREFIX_ADDRESS, +						  16, 1, buffer_info->skb->data, +						  IGB_RX_HDR_LEN, true);  					print_hex_dump(KERN_INFO, "",  					  DUMP_PREFIX_ADDRESS,  					  16, 1, -					  phys_to_virt( -					    buffer_info->page_dma + -					    buffer_info->page_offset), +					  page_address(buffer_info->page) + +						      buffer_info->page_offset,  					  PAGE_SIZE/2, true);  				}  			}  |