diff options
author | adam radford <aradford@gmail.com> | 2006-02-05 17:51:43 -0500 |
---|---|---|
committer | <jejb@mulgrave.il.steeleye.com> | 2006-02-05 18:15:15 -0500 |
commit | 62288f105b3cad0b8643526d2a41b5503d0a1476 (patch) | |
tree | 748417665b1dc2717f7ce50208573c6993f973fd /drivers/scsi/3w-9xxx.c | |
parent | 40cdc840dc337cb17d81bcf028b40834e78c1038 (diff) |
[SCSI] 3ware 9000 driver >4GB memory fix
The attached patch fixes a bug in the 3ware 9000 series driver:
- Fix use_sg == 0 mapping on systems with 4GB or higher.
This fixes REPORT_LUNS (0xa0) failing with 3ware 9000 controllers on systems
with lots of ram, mentioned in bugzilla # 6009:
http://bugzilla.kernel.org/show_bug.cgi?id=6009
Signed-off-by: Adam Radford <linuxraid@amcc.com>
Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
Diffstat (limited to 'drivers/scsi/3w-9xxx.c')
-rw-r--r-- | drivers/scsi/3w-9xxx.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/drivers/scsi/3w-9xxx.c b/drivers/scsi/3w-9xxx.c index 31c497542272..d9152d02088c 100644 --- a/drivers/scsi/3w-9xxx.c +++ b/drivers/scsi/3w-9xxx.c | |||
@@ -61,6 +61,7 @@ | |||
61 | Add support for embedded firmware error strings. | 61 | Add support for embedded firmware error strings. |
62 | 2.26.02.003 - Correctly handle single sgl's with use_sg=1. | 62 | 2.26.02.003 - Correctly handle single sgl's with use_sg=1. |
63 | 2.26.02.004 - Add support for 9550SX controllers. | 63 | 2.26.02.004 - Add support for 9550SX controllers. |
64 | 2.26.02.005 - Fix use_sg == 0 mapping on systems with 4GB or higher. | ||
64 | */ | 65 | */ |
65 | 66 | ||
66 | #include <linux/module.h> | 67 | #include <linux/module.h> |
@@ -84,7 +85,7 @@ | |||
84 | #include "3w-9xxx.h" | 85 | #include "3w-9xxx.h" |
85 | 86 | ||
86 | /* Globals */ | 87 | /* Globals */ |
87 | #define TW_DRIVER_VERSION "2.26.02.004" | 88 | #define TW_DRIVER_VERSION "2.26.02.005" |
88 | static TW_Device_Extension *twa_device_extension_list[TW_MAX_SLOT]; | 89 | static TW_Device_Extension *twa_device_extension_list[TW_MAX_SLOT]; |
89 | static unsigned int twa_device_extension_count; | 90 | static unsigned int twa_device_extension_count; |
90 | static int twa_major = -1; | 91 | static int twa_major = -1; |
@@ -1408,7 +1409,7 @@ static dma_addr_t twa_map_scsi_single_data(TW_Device_Extension *tw_dev, int requ | |||
1408 | dma_addr_t mapping; | 1409 | dma_addr_t mapping; |
1409 | struct scsi_cmnd *cmd = tw_dev->srb[request_id]; | 1410 | struct scsi_cmnd *cmd = tw_dev->srb[request_id]; |
1410 | struct pci_dev *pdev = tw_dev->tw_pci_dev; | 1411 | struct pci_dev *pdev = tw_dev->tw_pci_dev; |
1411 | int retval = 0; | 1412 | dma_addr_t retval = 0; |
1412 | 1413 | ||
1413 | if (cmd->request_bufflen == 0) { | 1414 | if (cmd->request_bufflen == 0) { |
1414 | retval = 0; | 1415 | retval = 0; |
@@ -1798,7 +1799,7 @@ static int twa_scsiop_execute_scsi(TW_Device_Extension *tw_dev, int request_id, | |||
1798 | int i, sg_count; | 1799 | int i, sg_count; |
1799 | struct scsi_cmnd *srb = NULL; | 1800 | struct scsi_cmnd *srb = NULL; |
1800 | struct scatterlist *sglist = NULL; | 1801 | struct scatterlist *sglist = NULL; |
1801 | u32 buffaddr = 0x0; | 1802 | dma_addr_t buffaddr = 0x0; |
1802 | int retval = 1; | 1803 | int retval = 1; |
1803 | 1804 | ||
1804 | if (tw_dev->srb[request_id]) { | 1805 | if (tw_dev->srb[request_id]) { |