mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH] : Megaraid patch for 2.6 3/5
@ 2004-02-20  2:07 Paul Wagland
  0 siblings, 0 replies; only message in thread
From: Paul Wagland @ 2004-02-20  2:07 UTC (permalink / raw)
  To: Linux SCSI mailing list, Linux kernel mailing list; +Cc: James.Bottomley, atulm


[-- Attachment #1.1: Type: text/plain, Size: 7054 bytes --]

Hi all,

LSI have released a new driver for the 2.4 series of kernels, but the
2.6 driver is still based on a much older version of this driver. This
is the beginnings of my efforts to update the 2.6 driver so that it is
up to date. This patch removes the local copying of the pdev structure,
this has two advantages, a) the error handling is simpler, since we
don't need to clean up memory anymore, and b) the code is smaller, this
change saves about 500 bytes in the module size.

patch is attached and below.

diff --recursive --ignore-all-space --unified linux-2.6.2.o/drivers/scsi/megaraid.c linux-2.6.2.megaraid/drivers/scsi/megaraid.c
--- linux-2.6.2.o/drivers/scsi/megaraid.c	2004-02-20 01:32:26.000000000 +0100
+++ linux-2.6.2.megaraid/drivers/scsi/megaraid.c	2004-02-20 01:32:30.000000000 +0100
@@ -2338,13 +2338,9 @@
 	struct pci_dev	*pdev;
 	int	len = 0;
 
-	if( make_local_pdev(adapter, &pdev) != 0 ) {
-		*eof = 1;
-		return len;
-	}
+	pdev = adapter->dev;
 
 	if( (inquiry = mega_allocate_inquiry(&dma_handle, pdev)) == NULL ) {
-		free_local_pdev(pdev);
 		*eof = 1;
 		return len;
 	}
@@ -2357,8 +2353,6 @@
 
 		mega_free_inquiry(inquiry, dma_handle, pdev);
 
-		free_local_pdev(pdev);
-
 		*eof = 1;
 
 		return len;
@@ -2377,8 +2371,6 @@
 
 	mega_free_inquiry(inquiry, dma_handle, pdev);
 
-	free_local_pdev(pdev);
-
 	*eof = 1;
 
 	return len;
@@ -2408,13 +2400,9 @@
 	char	str[256];
 	int	len = 0;
 
-	if( make_local_pdev(adapter, &pdev) != 0 ) {
-		*eof = 1;
-		return len;
-	}
+	pdev = adapter->dev;
 
 	if( (inquiry = mega_allocate_inquiry(&dma_handle, pdev)) == NULL ) {
-		free_local_pdev(pdev);
 		*eof = 1;
 		return len;
 	}
@@ -2427,8 +2415,6 @@
 
 		mega_free_inquiry(inquiry, dma_handle, pdev);
 
-		free_local_pdev(pdev);
-
 		*eof = 1;
 
 		return len;
@@ -2476,8 +2462,6 @@
 
 	mega_free_inquiry(inquiry, dma_handle, pdev);
 
-	free_local_pdev(pdev);
-
 	*eof = 1;
 
 	return len;
@@ -2599,12 +2583,9 @@
 	char	str[80];
 	int	i;
 
-	if( make_local_pdev(adapter, &pdev) != 0 ) {
-		return len;
-	}
+	pdev = adapter->dev;
 
 	if( (inquiry = mega_allocate_inquiry(&dma_handle, pdev)) == NULL ) {
-		free_local_pdev(pdev);
 		return len;
 	}
 
@@ -2616,8 +2597,6 @@
 
 		mega_free_inquiry(inquiry, dma_handle, pdev);
 
-		free_local_pdev(pdev);
-
 		return len;
 	}
 
@@ -2629,8 +2608,6 @@
 
 		mega_free_inquiry(inquiry, dma_handle, pdev);
 
-		free_local_pdev(pdev);
-
 		return len;
 	}
 
@@ -2713,8 +2690,6 @@
 
 	mega_free_inquiry(inquiry, dma_handle, pdev);
 
-	free_local_pdev(pdev);
-
 	return len;
 }
 
@@ -2883,12 +2858,9 @@
 	int	len = 0;
 	int	i;
 
-	if( make_local_pdev(adapter, &pdev) != 0 ) {
-		return len;
-	}
+	pdev = adapter->dev;
 
 	if( (inquiry = mega_allocate_inquiry(&dma_handle, pdev)) == NULL ) {
-		free_local_pdev(pdev);
 		return len;
 	}
 
@@ -2900,8 +2872,6 @@
 
 		mega_free_inquiry(inquiry, dma_handle, pdev);
 
-		free_local_pdev(pdev);
-
 		return len;
 	}
 
@@ -2932,8 +2902,6 @@
 
 		mega_free_inquiry(inquiry, dma_handle, pdev);
 
-		free_local_pdev(pdev);
-
 		return len;
 	}
 
@@ -2952,8 +2920,6 @@
 			pci_free_consistent(pdev, array_sz, disk_array,
 					disk_array_dma_handle);
 
-			free_local_pdev(pdev);
-
 			return len;
 		}
 
@@ -2977,8 +2943,6 @@
 						disk_array,
 						disk_array_dma_handle);
 
-				free_local_pdev(pdev);
-
 				return len;
 			}
 		}
@@ -3103,8 +3067,6 @@
 	pci_free_consistent(pdev, array_sz, disk_array,
 			disk_array_dma_handle);
 
-	free_local_pdev(pdev);
-
 	return len;
 }
 
@@ -3478,8 +3440,7 @@
 		 * For all internal commands, the buffer must be allocated in
 		 * <4GB address range
 		 */
-		if( make_local_pdev(adapter, &pdev) != 0 )
-			return -EIO;
+		pdev = adapter->dev;
 
 		/* Is it a passthru command or a DCMD */
 		if( uioc.uioc_rmbox[0] == MEGA_MBOXCMD_PASSTHRU ) {
@@ -3490,7 +3451,6 @@
 					&pthru_dma_hndl);
 
 			if( pthru == NULL ) {
-				free_local_pdev(pdev);
 				return (-ENOMEM);
 			}
 
@@ -3509,8 +3469,6 @@
 						sizeof(mega_passthru), pthru,
 						pthru_dma_hndl);
 
-				free_local_pdev(pdev);
-
 				return (-EFAULT);
 			}
 
@@ -3528,8 +3486,6 @@
 							pthru,
 							pthru_dma_hndl);
 
-					free_local_pdev(pdev);
-
 					return (-ENOMEM);
 				}
 
@@ -3598,8 +3554,6 @@
 			pci_free_consistent(pdev, sizeof(mega_passthru),
 					pthru, pthru_dma_hndl);
 
-			free_local_pdev(pdev);
-
 			return rval;
 		}
 		else {
@@ -3613,7 +3567,6 @@
 						uioc.xferlen, &data_dma_hndl);
 
 				if( data == NULL ) {
-					free_local_pdev(pdev);
 					return (-ENOMEM);
 				}
 
@@ -3634,8 +3587,6 @@
 							uioc.xferlen,
 							data, data_dma_hndl);
 
-					free_local_pdev(pdev);
-
 					return (-EFAULT);
 				}
 			}
@@ -3658,8 +3609,6 @@
 							data_dma_hndl);
 				}
 
-				free_local_pdev(pdev);
-
 				return rval;
 			}
 
@@ -3680,8 +3629,6 @@
 						data_dma_hndl);
 			}
 
-			free_local_pdev(pdev);
-
 			return rval;
 		}
 
@@ -4413,13 +4360,12 @@
 	 * For all internal commands, the buffer must be allocated in <4GB
 	 * address range
 	 */
-	if( make_local_pdev(adapter, &pdev) != 0 ) return -1;
+	pdev = adapter->dev;
 
 	pthru = pci_alloc_consistent(pdev, sizeof(mega_passthru),
 			&pthru_dma_handle);
 
 	if( pthru == NULL ) {
-		free_local_pdev(pdev);
 		return -1;
 	}
 
@@ -4455,8 +4401,6 @@
 	pci_free_consistent(pdev, sizeof(mega_passthru), pthru,
 			pthru_dma_handle);
 
-	free_local_pdev(pdev);
-
 	return rval;
 }
 
@@ -4590,29 +4534,6 @@
 }
 
 
-static inline int
-make_local_pdev(adapter_t *adapter, struct pci_dev **pdev)
-{
-	*pdev = kmalloc(sizeof(struct pci_dev), GFP_KERNEL);
-
-	if( *pdev == NULL ) return -1;
-
-	memcpy(*pdev, adapter->dev, sizeof(struct pci_dev));
-
-	if( pci_set_dma_mask(*pdev, 0xffffffff) != 0 ) {
-		kfree(*pdev);
-		return -1;
-	}
-
-	return 0;
-}
-
-static inline void
-free_local_pdev(struct pci_dev *pdev)
-{
-	kfree(pdev);
-}
-
 static struct scsi_host_template megaraid_template = {
 	.module				= THIS_MODULE,
 	.name				= "MegaRAID",
diff --recursive --ignore-all-space --unified linux-2.6.2.o/drivers/scsi/megaraid.h linux-2.6.2.megaraid/drivers/scsi/megaraid.h
--- linux-2.6.2.o/drivers/scsi/megaraid.h	2004-02-20 00:40:05.000000000 +0100
+++ linux-2.6.2.megaraid/drivers/scsi/megaraid.h	2004-02-20 01:32:30.000000000 +0100
@@ -1055,8 +1055,6 @@
 static int mega_internal_dev_inquiry(adapter_t *, u8, u8, dma_addr_t);
 static inline caddr_t mega_allocate_inquiry(dma_addr_t *, struct pci_dev *);
 static inline void mega_free_inquiry(caddr_t, dma_addr_t, struct pci_dev *);
-static inline int make_local_pdev(adapter_t *, struct pci_dev **);
-static inline void free_local_pdev(struct pci_dev *);
 
 static int mega_support_ext_cdb(adapter_t *);
 static mega_passthru* mega_prepare_passthru(adapter_t *, scb_t *,


[-- Attachment #1.2: 3-megaraid.pdev.patch --]
[-- Type: text/x-patch, Size: 6527 bytes --]

diff --recursive --ignore-all-space --unified linux-2.6.2.o/drivers/scsi/megaraid.c linux-2.6.2.megaraid/drivers/scsi/megaraid.c
--- linux-2.6.2.o/drivers/scsi/megaraid.c	2004-02-20 01:32:26.000000000 +0100
+++ linux-2.6.2.megaraid/drivers/scsi/megaraid.c	2004-02-20 01:32:30.000000000 +0100
@@ -2338,13 +2338,9 @@
 	struct pci_dev	*pdev;
 	int	len = 0;
 
-	if( make_local_pdev(adapter, &pdev) != 0 ) {
-		*eof = 1;
-		return len;
-	}
+	pdev = adapter->dev;
 
 	if( (inquiry = mega_allocate_inquiry(&dma_handle, pdev)) == NULL ) {
-		free_local_pdev(pdev);
 		*eof = 1;
 		return len;
 	}
@@ -2357,8 +2353,6 @@
 
 		mega_free_inquiry(inquiry, dma_handle, pdev);
 
-		free_local_pdev(pdev);
-
 		*eof = 1;
 
 		return len;
@@ -2377,8 +2371,6 @@
 
 	mega_free_inquiry(inquiry, dma_handle, pdev);
 
-	free_local_pdev(pdev);
-
 	*eof = 1;
 
 	return len;
@@ -2408,13 +2400,9 @@
 	char	str[256];
 	int	len = 0;
 
-	if( make_local_pdev(adapter, &pdev) != 0 ) {
-		*eof = 1;
-		return len;
-	}
+	pdev = adapter->dev;
 
 	if( (inquiry = mega_allocate_inquiry(&dma_handle, pdev)) == NULL ) {
-		free_local_pdev(pdev);
 		*eof = 1;
 		return len;
 	}
@@ -2427,8 +2415,6 @@
 
 		mega_free_inquiry(inquiry, dma_handle, pdev);
 
-		free_local_pdev(pdev);
-
 		*eof = 1;
 
 		return len;
@@ -2476,8 +2462,6 @@
 
 	mega_free_inquiry(inquiry, dma_handle, pdev);
 
-	free_local_pdev(pdev);
-
 	*eof = 1;
 
 	return len;
@@ -2599,12 +2583,9 @@
 	char	str[80];
 	int	i;
 
-	if( make_local_pdev(adapter, &pdev) != 0 ) {
-		return len;
-	}
+	pdev = adapter->dev;
 
 	if( (inquiry = mega_allocate_inquiry(&dma_handle, pdev)) == NULL ) {
-		free_local_pdev(pdev);
 		return len;
 	}
 
@@ -2616,8 +2597,6 @@
 
 		mega_free_inquiry(inquiry, dma_handle, pdev);
 
-		free_local_pdev(pdev);
-
 		return len;
 	}
 
@@ -2629,8 +2608,6 @@
 
 		mega_free_inquiry(inquiry, dma_handle, pdev);
 
-		free_local_pdev(pdev);
-
 		return len;
 	}
 
@@ -2713,8 +2690,6 @@
 
 	mega_free_inquiry(inquiry, dma_handle, pdev);
 
-	free_local_pdev(pdev);
-
 	return len;
 }
 
@@ -2883,12 +2858,9 @@
 	int	len = 0;
 	int	i;
 
-	if( make_local_pdev(adapter, &pdev) != 0 ) {
-		return len;
-	}
+	pdev = adapter->dev;
 
 	if( (inquiry = mega_allocate_inquiry(&dma_handle, pdev)) == NULL ) {
-		free_local_pdev(pdev);
 		return len;
 	}
 
@@ -2900,8 +2872,6 @@
 
 		mega_free_inquiry(inquiry, dma_handle, pdev);
 
-		free_local_pdev(pdev);
-
 		return len;
 	}
 
@@ -2932,8 +2902,6 @@
 
 		mega_free_inquiry(inquiry, dma_handle, pdev);
 
-		free_local_pdev(pdev);
-
 		return len;
 	}
 
@@ -2952,8 +2920,6 @@
 			pci_free_consistent(pdev, array_sz, disk_array,
 					disk_array_dma_handle);
 
-			free_local_pdev(pdev);
-
 			return len;
 		}
 
@@ -2977,8 +2943,6 @@
 						disk_array,
 						disk_array_dma_handle);
 
-				free_local_pdev(pdev);
-
 				return len;
 			}
 		}
@@ -3103,8 +3067,6 @@
 	pci_free_consistent(pdev, array_sz, disk_array,
 			disk_array_dma_handle);
 
-	free_local_pdev(pdev);
-
 	return len;
 }
 
@@ -3478,8 +3440,7 @@
 		 * For all internal commands, the buffer must be allocated in
 		 * <4GB address range
 		 */
-		if( make_local_pdev(adapter, &pdev) != 0 )
-			return -EIO;
+		pdev = adapter->dev;
 
 		/* Is it a passthru command or a DCMD */
 		if( uioc.uioc_rmbox[0] == MEGA_MBOXCMD_PASSTHRU ) {
@@ -3490,7 +3451,6 @@
 					&pthru_dma_hndl);
 
 			if( pthru == NULL ) {
-				free_local_pdev(pdev);
 				return (-ENOMEM);
 			}
 
@@ -3509,8 +3469,6 @@
 						sizeof(mega_passthru), pthru,
 						pthru_dma_hndl);
 
-				free_local_pdev(pdev);
-
 				return (-EFAULT);
 			}
 
@@ -3528,8 +3486,6 @@
 							pthru,
 							pthru_dma_hndl);
 
-					free_local_pdev(pdev);
-
 					return (-ENOMEM);
 				}
 
@@ -3598,8 +3554,6 @@
 			pci_free_consistent(pdev, sizeof(mega_passthru),
 					pthru, pthru_dma_hndl);
 
-			free_local_pdev(pdev);
-
 			return rval;
 		}
 		else {
@@ -3613,7 +3567,6 @@
 						uioc.xferlen, &data_dma_hndl);
 
 				if( data == NULL ) {
-					free_local_pdev(pdev);
 					return (-ENOMEM);
 				}
 
@@ -3634,8 +3587,6 @@
 							uioc.xferlen,
 							data, data_dma_hndl);
 
-					free_local_pdev(pdev);
-
 					return (-EFAULT);
 				}
 			}
@@ -3658,8 +3609,6 @@
 							data_dma_hndl);
 				}
 
-				free_local_pdev(pdev);
-
 				return rval;
 			}
 
@@ -3680,8 +3629,6 @@
 						data_dma_hndl);
 			}
 
-			free_local_pdev(pdev);
-
 			return rval;
 		}
 
@@ -4413,13 +4360,12 @@
 	 * For all internal commands, the buffer must be allocated in <4GB
 	 * address range
 	 */
-	if( make_local_pdev(adapter, &pdev) != 0 ) return -1;
+	pdev = adapter->dev;
 
 	pthru = pci_alloc_consistent(pdev, sizeof(mega_passthru),
 			&pthru_dma_handle);
 
 	if( pthru == NULL ) {
-		free_local_pdev(pdev);
 		return -1;
 	}
 
@@ -4455,8 +4401,6 @@
 	pci_free_consistent(pdev, sizeof(mega_passthru), pthru,
 			pthru_dma_handle);
 
-	free_local_pdev(pdev);
-
 	return rval;
 }
 
@@ -4590,29 +4534,6 @@
 }
 
 
-static inline int
-make_local_pdev(adapter_t *adapter, struct pci_dev **pdev)
-{
-	*pdev = kmalloc(sizeof(struct pci_dev), GFP_KERNEL);
-
-	if( *pdev == NULL ) return -1;
-
-	memcpy(*pdev, adapter->dev, sizeof(struct pci_dev));
-
-	if( pci_set_dma_mask(*pdev, 0xffffffff) != 0 ) {
-		kfree(*pdev);
-		return -1;
-	}
-
-	return 0;
-}
-
-static inline void
-free_local_pdev(struct pci_dev *pdev)
-{
-	kfree(pdev);
-}
-
 static struct scsi_host_template megaraid_template = {
 	.module				= THIS_MODULE,
 	.name				= "MegaRAID",
diff --recursive --ignore-all-space --unified linux-2.6.2.o/drivers/scsi/megaraid.h linux-2.6.2.megaraid/drivers/scsi/megaraid.h
--- linux-2.6.2.o/drivers/scsi/megaraid.h	2004-02-20 00:40:05.000000000 +0100
+++ linux-2.6.2.megaraid/drivers/scsi/megaraid.h	2004-02-20 01:32:30.000000000 +0100
@@ -1055,8 +1055,6 @@
 static int mega_internal_dev_inquiry(adapter_t *, u8, u8, dma_addr_t);
 static inline caddr_t mega_allocate_inquiry(dma_addr_t *, struct pci_dev *);
 static inline void mega_free_inquiry(caddr_t, dma_addr_t, struct pci_dev *);
-static inline int make_local_pdev(adapter_t *, struct pci_dev **);
-static inline void free_local_pdev(struct pci_dev *);
 
 static int mega_support_ext_cdb(adapter_t *);
 static mega_passthru* mega_prepare_passthru(adapter_t *, scb_t *,

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2004-02-20  2:09 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2004-02-20  2:07 [PATCH] : Megaraid patch for 2.6 3/5 Paul Wagland

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®