Linux v3.6-rc5-315-g3f0c3c8
This commit is contained in:
		
							parent
							
								
									f6771f41a8
								
							
						
					
					
						commit
						9c840a0709
					
				| @ -1,80 +0,0 @@ | ||||
| This patch fixes a bug found by Nish Aravamudan  | ||||
| (https://lkml.org/lkml/2012/5/15/220) where the driver is not following | ||||
| the spec (it is not aligning the rx buffer on a 16-byte boundary) and the | ||||
| hypervisor aborts the registration, making the device unusable.  | ||||
| 
 | ||||
| The fix follows BenH's recommendation (https://lkml.org/lkml/2012/7/20/461) | ||||
| to replace the kmalloc+map for a single call to dma_alloc_coherent() | ||||
| because that function always aligns to a 16-byte boundary. | ||||
| 
 | ||||
| The stable trees will run into this bug whenever the rx buffer kmalloc call | ||||
| returns something not aligned on a 16-byte boundary. | ||||
| 
 | ||||
| Cc: <stable@vger.kernel.org> | ||||
| Signed-off-by: Santiago Leon <santil@linux.vnet.ibm.com> | ||||
| ---
 | ||||
|  ibmveth.c |   26 +++++++++----------------- | ||||
|  1 file changed, 9 insertions(+), 17 deletions(-) | ||||
| 
 | ||||
| --- a/drivers/net/ethernet/ibm/ibmveth.c	2012-07-09 16:00:53.000000000 -0400
 | ||||
| +++ b/drivers/net/ethernet/ibm/ibmveth.c	2012-08-17 19:51:02.840000188 -0400
 | ||||
| @@ -472,14 +472,9 @@ static void ibmveth_cleanup(struct ibmve
 | ||||
|  	} | ||||
|   | ||||
|  	if (adapter->rx_queue.queue_addr != NULL) { | ||||
| -		if (!dma_mapping_error(dev, adapter->rx_queue.queue_dma)) {
 | ||||
| -			dma_unmap_single(dev,
 | ||||
| -					adapter->rx_queue.queue_dma,
 | ||||
| -					adapter->rx_queue.queue_len,
 | ||||
| -					DMA_BIDIRECTIONAL);
 | ||||
| -			adapter->rx_queue.queue_dma = DMA_ERROR_CODE;
 | ||||
| -		}
 | ||||
| -		kfree(adapter->rx_queue.queue_addr);
 | ||||
| +		dma_free_coherent(dev, adapter->rx_queue.queue_len,
 | ||||
| +				  adapter->rx_queue.queue_addr,
 | ||||
| +				  adapter->rx_queue.queue_dma);
 | ||||
|  		adapter->rx_queue.queue_addr = NULL; | ||||
|  	} | ||||
|   | ||||
| @@ -556,10 +551,13 @@ static int ibmveth_open(struct net_devic
 | ||||
|  		goto err_out; | ||||
|  	} | ||||
|   | ||||
| +	dev = &adapter->vdev->dev;
 | ||||
| +
 | ||||
|  	adapter->rx_queue.queue_len = sizeof(struct ibmveth_rx_q_entry) * | ||||
|  						rxq_entries; | ||||
| -	adapter->rx_queue.queue_addr = kmalloc(adapter->rx_queue.queue_len,
 | ||||
| -						GFP_KERNEL);
 | ||||
| +	adapter->rx_queue.queue_addr =
 | ||||
| +	    dma_alloc_coherent(dev, adapter->rx_queue.queue_len,
 | ||||
| +			       &adapter->rx_queue.queue_dma, GFP_KERNEL);
 | ||||
|   | ||||
|  	if (!adapter->rx_queue.queue_addr) { | ||||
|  		netdev_err(netdev, "unable to allocate rx queue pages\n"); | ||||
| @@ -567,19 +565,13 @@ static int ibmveth_open(struct net_devic
 | ||||
|  		goto err_out; | ||||
|  	} | ||||
|   | ||||
| -	dev = &adapter->vdev->dev;
 | ||||
| -
 | ||||
|  	adapter->buffer_list_dma = dma_map_single(dev, | ||||
|  			adapter->buffer_list_addr, 4096, DMA_BIDIRECTIONAL); | ||||
|  	adapter->filter_list_dma = dma_map_single(dev, | ||||
|  			adapter->filter_list_addr, 4096, DMA_BIDIRECTIONAL); | ||||
| -	adapter->rx_queue.queue_dma = dma_map_single(dev,
 | ||||
| -			adapter->rx_queue.queue_addr,
 | ||||
| -			adapter->rx_queue.queue_len, DMA_BIDIRECTIONAL);
 | ||||
|   | ||||
|  	if ((dma_mapping_error(dev, adapter->buffer_list_dma)) || | ||||
| -	    (dma_mapping_error(dev, adapter->filter_list_dma)) ||
 | ||||
| -	    (dma_mapping_error(dev, adapter->rx_queue.queue_dma))) {
 | ||||
| +	    (dma_mapping_error(dev, adapter->filter_list_dma))) {
 | ||||
|  		netdev_err(netdev, "unable to map filter or buffer list " | ||||
|  			   "pages\n"); | ||||
|  		rc = -ENOMEM; | ||||
| 
 | ||||
| --
 | ||||
| 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 | ||||
							
								
								
									
										11
									
								
								kernel.spec
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								kernel.spec
									
									
									
									
									
								
							| @ -95,7 +95,7 @@ Summary: The Linux kernel | ||||
| # The rc snapshot level | ||||
| %define rcrev 5 | ||||
| # The git snapshot level | ||||
| %define gitrev 2 | ||||
| %define gitrev 3 | ||||
| # Set rpm version accordingly | ||||
| %define rpmversion 3.%{upstream_sublevel}.0 | ||||
| %endif | ||||
| @ -755,9 +755,6 @@ Patch22066: virtio-scsi-Initialize-scatterlist-structure.patch | ||||
| #rhbz 846037 | ||||
| Patch22067: selinux-Fix-sel_netnode_insert-suspicious-rcu-dereference.patch | ||||
| 
 | ||||
| #rhbz 852842 | ||||
| Patch22068: ibmveth-Fix-alignment-of-rx-queue-bug.patch | ||||
| 
 | ||||
| # END OF PATCH DEFINITIONS | ||||
| 
 | ||||
| %endif | ||||
| @ -1456,9 +1453,6 @@ ApplyPatch virtio-scsi-Initialize-scatterlist-structure.patch | ||||
| #rhbz 846037 | ||||
| ApplyPatch selinux-Fix-sel_netnode_insert-suspicious-rcu-dereference.patch | ||||
| 
 | ||||
| #rhbz 852842 | ||||
| ApplyPatch ibmveth-Fix-alignment-of-rx-queue-bug.patch | ||||
| 
 | ||||
| # END OF PATCH APPLICATIONS | ||||
| 
 | ||||
| %endif | ||||
| @ -2321,6 +2315,9 @@ fi | ||||
| #                 ||----w | | ||||
| #                 ||     || | ||||
| %changelog | ||||
| * Sun Sep 16 2012 Josh Boyer <jwboyer@redhat.com> - 3.6.0-0.rc5.git3.1 | ||||
| - Linux v3.6-rc5-315-g3f0c3c8 | ||||
| 
 | ||||
| * Fri Sep 14 2012 Dave Jones <davej@redhat.com> | ||||
| - Enable CONFIG_DRM_LOAD_EDID_FIRMWARE (rhbz 857511) | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user