diff options
| -rw-r--r-- | drivers/scsi/3w-9xxx.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/drivers/scsi/3w-9xxx.c b/drivers/scsi/3w-9xxx.c index 0d2b447c50ed..caeb6d246e57 100644 --- a/drivers/scsi/3w-9xxx.c +++ b/drivers/scsi/3w-9xxx.c | |||
| @@ -65,6 +65,7 @@ | |||
| 65 | 2.26.02.005 - Fix use_sg == 0 mapping on systems with 4GB or higher. | 65 | 2.26.02.005 - Fix use_sg == 0 mapping on systems with 4GB or higher. |
| 66 | 2.26.02.006 - Fix 9550SX pchip reset timeout. | 66 | 2.26.02.006 - Fix 9550SX pchip reset timeout. |
| 67 | Add big endian support. | 67 | Add big endian support. |
| 68 | 2.26.02.007 - Disable local interrupts during kmap/unmap_atomic(). | ||
| 68 | */ | 69 | */ |
| 69 | 70 | ||
| 70 | #include <linux/module.h> | 71 | #include <linux/module.h> |
| @@ -88,7 +89,7 @@ | |||
| 88 | #include "3w-9xxx.h" | 89 | #include "3w-9xxx.h" |
| 89 | 90 | ||
| 90 | /* Globals */ | 91 | /* Globals */ |
| 91 | #define TW_DRIVER_VERSION "2.26.02.006" | 92 | #define TW_DRIVER_VERSION "2.26.02.007" |
| 92 | static TW_Device_Extension *twa_device_extension_list[TW_MAX_SLOT]; | 93 | static TW_Device_Extension *twa_device_extension_list[TW_MAX_SLOT]; |
| 93 | static unsigned int twa_device_extension_count; | 94 | static unsigned int twa_device_extension_count; |
| 94 | static int twa_major = -1; | 95 | static int twa_major = -1; |
| @@ -1942,9 +1943,13 @@ static void twa_scsiop_execute_scsi_complete(TW_Device_Extension *tw_dev, int re | |||
| 1942 | } | 1943 | } |
| 1943 | if (tw_dev->srb[request_id]->use_sg == 1) { | 1944 | if (tw_dev->srb[request_id]->use_sg == 1) { |
| 1944 | struct scatterlist *sg = (struct scatterlist *)tw_dev->srb[request_id]->request_buffer; | 1945 | struct scatterlist *sg = (struct scatterlist *)tw_dev->srb[request_id]->request_buffer; |
| 1945 | char *buf = kmap_atomic(sg->page, KM_IRQ0) + sg->offset; | 1946 | char *buf; |
| 1947 | unsigned long flags = 0; | ||
| 1948 | local_irq_save(flags); | ||
| 1949 | buf = kmap_atomic(sg->page, KM_IRQ0) + sg->offset; | ||
| 1946 | memcpy(buf, tw_dev->generic_buffer_virt[request_id], sg->length); | 1950 | memcpy(buf, tw_dev->generic_buffer_virt[request_id], sg->length); |
| 1947 | kunmap_atomic(buf - sg->offset, KM_IRQ0); | 1951 | kunmap_atomic(buf - sg->offset, KM_IRQ0); |
| 1952 | local_irq_restore(flags); | ||
| 1948 | } | 1953 | } |
| 1949 | } | 1954 | } |
| 1950 | } /* End twa_scsiop_execute_scsi_complete() */ | 1955 | } /* End twa_scsiop_execute_scsi_complete() */ |
