From: Paul Wagland <paul@wagland.net>
To: Linux SCSI mailing list <linux-scsi@vger.kernel.org>,
Linux kernel mailing list <linux-kernel@vger.kernel.org>
Cc: James.Bottomley@HansenPartnership.com, atulm@lsil.com
Subject: [PATCH] : Megaraid patch for 2.6 3/5
Date: Fri, 20 Feb 2004 03:07:45 +0100 [thread overview]
Message-ID: <1077242864.12565.86.camel@morsel.kungfoocoder.org> (raw)
[-- 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 --]
reply other threads:[~2004-02-20 2:09 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1077242864.12565.86.camel@morsel.kungfoocoder.org \
--to=paul@wagland.net \
--cc=James.Bottomley@HansenPartnership.com \
--cc=atulm@lsil.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-scsi@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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®