forked from rpms/kernel
		
	Linux v3.6-rc4-53-g5b716ac
- Add patch to fix ibmveth issue from Santiago Leon (rhbz 852842)
This commit is contained in:
		
							parent
							
								
									221b79a9ac
								
							
						
					
					
						commit
						4755af6ee4
					
				
							
								
								
									
										80
									
								
								ibmveth-Fix-alignment-of-rx-queue-bug.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										80
									
								
								ibmveth-Fix-alignment-of-rx-queue-bug.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,80 @@ | |||||||
|  | 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 | ||||||
							
								
								
									
										14
									
								
								kernel.spec
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								kernel.spec
									
									
									
									
									
								
							| @ -62,7 +62,7 @@ Summary: The Linux kernel | |||||||
| # For non-released -rc kernels, this will be appended after the rcX and | # For non-released -rc kernels, this will be appended after the rcX and | ||||||
| # gitX tags, so a 3 here would become part of release "0.rcX.gitX.3" | # gitX tags, so a 3 here would become part of release "0.rcX.gitX.3" | ||||||
| # | # | ||||||
| %global baserelease 2 | %global baserelease 1 | ||||||
| %global fedora_build %{baserelease} | %global fedora_build %{baserelease} | ||||||
| 
 | 
 | ||||||
| # base_sublevel is the kernel version we're starting with and patching | # base_sublevel is the kernel version we're starting with and patching | ||||||
| @ -95,7 +95,7 @@ Summary: The Linux kernel | |||||||
| # The rc snapshot level | # The rc snapshot level | ||||||
| %define rcrev 4 | %define rcrev 4 | ||||||
| # The git snapshot level | # The git snapshot level | ||||||
| %define gitrev 0 | %define gitrev 1 | ||||||
| # Set rpm version accordingly | # Set rpm version accordingly | ||||||
| %define rpmversion 3.%{upstream_sublevel}.0 | %define rpmversion 3.%{upstream_sublevel}.0 | ||||||
| %endif | %endif | ||||||
| @ -756,6 +756,9 @@ Patch22066: virtio-scsi-Initialize-scatterlist-structure.patch | |||||||
| #rhbz 846037 | #rhbz 846037 | ||||||
| Patch22067: selinux-Fix-sel_netnode_insert-suspicious-rcu-dereference.patch | Patch22067: selinux-Fix-sel_netnode_insert-suspicious-rcu-dereference.patch | ||||||
| 
 | 
 | ||||||
|  | #rhbz 852842 | ||||||
|  | Patch22068: ibmveth-Fix-alignment-of-rx-queue-bug.patch | ||||||
|  | 
 | ||||||
| Patch30000: 0001-ALSA-snd-usb-Fix-URB-cancellation-at-stream-start.patch | Patch30000: 0001-ALSA-snd-usb-Fix-URB-cancellation-at-stream-start.patch | ||||||
| 
 | 
 | ||||||
| # END OF PATCH DEFINITIONS | # END OF PATCH DEFINITIONS | ||||||
| @ -1457,6 +1460,9 @@ ApplyPatch virtio-scsi-Initialize-scatterlist-structure.patch | |||||||
| #rhbz 846037 | #rhbz 846037 | ||||||
| ApplyPatch selinux-Fix-sel_netnode_insert-suspicious-rcu-dereference.patch | ApplyPatch selinux-Fix-sel_netnode_insert-suspicious-rcu-dereference.patch | ||||||
| 
 | 
 | ||||||
|  | #rhbz 852842 | ||||||
|  | ApplyPatch ibmveth-Fix-alignment-of-rx-queue-bug.patch | ||||||
|  | 
 | ||||||
| ApplyPatch 0001-ALSA-snd-usb-Fix-URB-cancellation-at-stream-start.patch | ApplyPatch 0001-ALSA-snd-usb-Fix-URB-cancellation-at-stream-start.patch | ||||||
| 
 | 
 | ||||||
| # END OF PATCH APPLICATIONS | # END OF PATCH APPLICATIONS | ||||||
| @ -2321,6 +2327,10 @@ fi | |||||||
| #                 ||----w | | #                 ||----w | | ||||||
| #                 ||     || | #                 ||     || | ||||||
| %changelog | %changelog | ||||||
|  | * Wed Sep 05 2012 Josh Boyer <jwboyer@redhat.com> - 3.6.0-0.rc4.git1.1 | ||||||
|  | - Linux v3.6-rc4-53-g5b716ac | ||||||
|  | - Add patch to fix ibmveth issue from Santiago Leon (rhbz 852842) | ||||||
|  | 
 | ||||||
| * Wed Sep 05 2012 Josh Boyer <jwboyer@redhat.com> - 3.6.0-0.rc4.git0.2 | * Wed Sep 05 2012 Josh Boyer <jwboyer@redhat.com> - 3.6.0-0.rc4.git0.2 | ||||||
| - Reenable debugging options. | - Reenable debugging options. | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user