diff options
Diffstat (limited to 'drivers/scsi')
-rw-r--r-- | drivers/scsi/aacraid/commctrl.c | 13 | ||||
-rw-r--r-- | drivers/scsi/fcoe/fcoe_ctlr.c | 2 | ||||
-rw-r--r-- | drivers/scsi/megaraid/megaraid_sas_base.c | 6 | ||||
-rw-r--r-- | drivers/scsi/megaraid/megaraid_sas_fusion.c | 2 | ||||
-rw-r--r-- | drivers/scsi/mpt3sas/mpt3sas_base.c | 22 | ||||
-rw-r--r-- | drivers/scsi/ses.c | 3 |
6 files changed, 29 insertions, 19 deletions
diff --git a/drivers/scsi/aacraid/commctrl.c b/drivers/scsi/aacraid/commctrl.c index b381b3718a98..5648b715fed9 100644 --- a/drivers/scsi/aacraid/commctrl.c +++ b/drivers/scsi/aacraid/commctrl.c | |||
@@ -63,7 +63,7 @@ static int ioctl_send_fib(struct aac_dev * dev, void __user *arg) | |||
63 | struct fib *fibptr; | 63 | struct fib *fibptr; |
64 | struct hw_fib * hw_fib = (struct hw_fib *)0; | 64 | struct hw_fib * hw_fib = (struct hw_fib *)0; |
65 | dma_addr_t hw_fib_pa = (dma_addr_t)0LL; | 65 | dma_addr_t hw_fib_pa = (dma_addr_t)0LL; |
66 | unsigned size; | 66 | unsigned int size, osize; |
67 | int retval; | 67 | int retval; |
68 | 68 | ||
69 | if (dev->in_reset) { | 69 | if (dev->in_reset) { |
@@ -87,7 +87,8 @@ static int ioctl_send_fib(struct aac_dev * dev, void __user *arg) | |||
87 | * will not overrun the buffer when we copy the memory. Return | 87 | * will not overrun the buffer when we copy the memory. Return |
88 | * an error if we would. | 88 | * an error if we would. |
89 | */ | 89 | */ |
90 | size = le16_to_cpu(kfib->header.Size) + sizeof(struct aac_fibhdr); | 90 | osize = size = le16_to_cpu(kfib->header.Size) + |
91 | sizeof(struct aac_fibhdr); | ||
91 | if (size < le16_to_cpu(kfib->header.SenderSize)) | 92 | if (size < le16_to_cpu(kfib->header.SenderSize)) |
92 | size = le16_to_cpu(kfib->header.SenderSize); | 93 | size = le16_to_cpu(kfib->header.SenderSize); |
93 | if (size > dev->max_fib_size) { | 94 | if (size > dev->max_fib_size) { |
@@ -118,6 +119,14 @@ static int ioctl_send_fib(struct aac_dev * dev, void __user *arg) | |||
118 | goto cleanup; | 119 | goto cleanup; |
119 | } | 120 | } |
120 | 121 | ||
122 | /* Sanity check the second copy */ | ||
123 | if ((osize != le16_to_cpu(kfib->header.Size) + | ||
124 | sizeof(struct aac_fibhdr)) | ||
125 | || (size < le16_to_cpu(kfib->header.SenderSize))) { | ||
126 | retval = -EINVAL; | ||
127 | goto cleanup; | ||
128 | } | ||
129 | |||
121 | if (kfib->header.Command == cpu_to_le16(TakeABreakPt)) { | 130 | if (kfib->header.Command == cpu_to_le16(TakeABreakPt)) { |
122 | aac_adapter_interrupt(dev); | 131 | aac_adapter_interrupt(dev); |
123 | /* | 132 | /* |
diff --git a/drivers/scsi/fcoe/fcoe_ctlr.c b/drivers/scsi/fcoe/fcoe_ctlr.c index a569c65f22b1..dcf36537a767 100644 --- a/drivers/scsi/fcoe/fcoe_ctlr.c +++ b/drivers/scsi/fcoe/fcoe_ctlr.c | |||
@@ -2923,7 +2923,7 @@ static int fcoe_ctlr_vlan_recv(struct fcoe_ctlr *fip, struct sk_buff *skb) | |||
2923 | mutex_unlock(&fip->ctlr_mutex); | 2923 | mutex_unlock(&fip->ctlr_mutex); |
2924 | 2924 | ||
2925 | drop: | 2925 | drop: |
2926 | kfree(skb); | 2926 | kfree_skb(skb); |
2927 | return rc; | 2927 | return rc; |
2928 | } | 2928 | } |
2929 | 2929 | ||
diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c b/drivers/scsi/megaraid/megaraid_sas_base.c index 2dab3dc2aa69..c1ed25adb17e 100644 --- a/drivers/scsi/megaraid/megaraid_sas_base.c +++ b/drivers/scsi/megaraid/megaraid_sas_base.c | |||
@@ -5037,7 +5037,7 @@ static int megasas_init_fw(struct megasas_instance *instance) | |||
5037 | /* Find first memory bar */ | 5037 | /* Find first memory bar */ |
5038 | bar_list = pci_select_bars(instance->pdev, IORESOURCE_MEM); | 5038 | bar_list = pci_select_bars(instance->pdev, IORESOURCE_MEM); |
5039 | instance->bar = find_first_bit(&bar_list, sizeof(unsigned long)); | 5039 | instance->bar = find_first_bit(&bar_list, sizeof(unsigned long)); |
5040 | if (pci_request_selected_regions(instance->pdev, instance->bar, | 5040 | if (pci_request_selected_regions(instance->pdev, 1<<instance->bar, |
5041 | "megasas: LSI")) { | 5041 | "megasas: LSI")) { |
5042 | dev_printk(KERN_DEBUG, &instance->pdev->dev, "IO memory region busy!\n"); | 5042 | dev_printk(KERN_DEBUG, &instance->pdev->dev, "IO memory region busy!\n"); |
5043 | return -EBUSY; | 5043 | return -EBUSY; |
@@ -5339,7 +5339,7 @@ fail_ready_state: | |||
5339 | iounmap(instance->reg_set); | 5339 | iounmap(instance->reg_set); |
5340 | 5340 | ||
5341 | fail_ioremap: | 5341 | fail_ioremap: |
5342 | pci_release_selected_regions(instance->pdev, instance->bar); | 5342 | pci_release_selected_regions(instance->pdev, 1<<instance->bar); |
5343 | 5343 | ||
5344 | return -EINVAL; | 5344 | return -EINVAL; |
5345 | } | 5345 | } |
@@ -5360,7 +5360,7 @@ static void megasas_release_mfi(struct megasas_instance *instance) | |||
5360 | 5360 | ||
5361 | iounmap(instance->reg_set); | 5361 | iounmap(instance->reg_set); |
5362 | 5362 | ||
5363 | pci_release_selected_regions(instance->pdev, instance->bar); | 5363 | pci_release_selected_regions(instance->pdev, 1<<instance->bar); |
5364 | } | 5364 | } |
5365 | 5365 | ||
5366 | /** | 5366 | /** |
diff --git a/drivers/scsi/megaraid/megaraid_sas_fusion.c b/drivers/scsi/megaraid/megaraid_sas_fusion.c index ec837544f784..52d8bbf7feb5 100644 --- a/drivers/scsi/megaraid/megaraid_sas_fusion.c +++ b/drivers/scsi/megaraid/megaraid_sas_fusion.c | |||
@@ -2603,7 +2603,7 @@ megasas_release_fusion(struct megasas_instance *instance) | |||
2603 | 2603 | ||
2604 | iounmap(instance->reg_set); | 2604 | iounmap(instance->reg_set); |
2605 | 2605 | ||
2606 | pci_release_selected_regions(instance->pdev, instance->bar); | 2606 | pci_release_selected_regions(instance->pdev, 1<<instance->bar); |
2607 | } | 2607 | } |
2608 | 2608 | ||
2609 | /** | 2609 | /** |
diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c index 751f13edece0..750f82c339d4 100644 --- a/drivers/scsi/mpt3sas/mpt3sas_base.c +++ b/drivers/scsi/mpt3sas/mpt3sas_base.c | |||
@@ -2188,6 +2188,17 @@ mpt3sas_base_map_resources(struct MPT3SAS_ADAPTER *ioc) | |||
2188 | } else | 2188 | } else |
2189 | ioc->msix96_vector = 0; | 2189 | ioc->msix96_vector = 0; |
2190 | 2190 | ||
2191 | if (ioc->is_warpdrive) { | ||
2192 | ioc->reply_post_host_index[0] = (resource_size_t __iomem *) | ||
2193 | &ioc->chip->ReplyPostHostIndex; | ||
2194 | |||
2195 | for (i = 1; i < ioc->cpu_msix_table_sz; i++) | ||
2196 | ioc->reply_post_host_index[i] = | ||
2197 | (resource_size_t __iomem *) | ||
2198 | ((u8 __iomem *)&ioc->chip->Doorbell + (0x4000 + ((i - 1) | ||
2199 | * 4))); | ||
2200 | } | ||
2201 | |||
2191 | list_for_each_entry(reply_q, &ioc->reply_queue_list, list) | 2202 | list_for_each_entry(reply_q, &ioc->reply_queue_list, list) |
2192 | pr_info(MPT3SAS_FMT "%s: IRQ %d\n", | 2203 | pr_info(MPT3SAS_FMT "%s: IRQ %d\n", |
2193 | reply_q->name, ((ioc->msix_enable) ? "PCI-MSI-X enabled" : | 2204 | reply_q->name, ((ioc->msix_enable) ? "PCI-MSI-X enabled" : |
@@ -5280,17 +5291,6 @@ mpt3sas_base_attach(struct MPT3SAS_ADAPTER *ioc) | |||
5280 | if (r) | 5291 | if (r) |
5281 | goto out_free_resources; | 5292 | goto out_free_resources; |
5282 | 5293 | ||
5283 | if (ioc->is_warpdrive) { | ||
5284 | ioc->reply_post_host_index[0] = (resource_size_t __iomem *) | ||
5285 | &ioc->chip->ReplyPostHostIndex; | ||
5286 | |||
5287 | for (i = 1; i < ioc->cpu_msix_table_sz; i++) | ||
5288 | ioc->reply_post_host_index[i] = | ||
5289 | (resource_size_t __iomem *) | ||
5290 | ((u8 __iomem *)&ioc->chip->Doorbell + (0x4000 + ((i - 1) | ||
5291 | * 4))); | ||
5292 | } | ||
5293 | |||
5294 | pci_set_drvdata(ioc->pdev, ioc->shost); | 5294 | pci_set_drvdata(ioc->pdev, ioc->shost); |
5295 | r = _base_get_ioc_facts(ioc, CAN_SLEEP); | 5295 | r = _base_get_ioc_facts(ioc, CAN_SLEEP); |
5296 | if (r) | 5296 | if (r) |
diff --git a/drivers/scsi/ses.c b/drivers/scsi/ses.c index 53ef1cb6418e..0e8601aa877a 100644 --- a/drivers/scsi/ses.c +++ b/drivers/scsi/ses.c | |||
@@ -778,6 +778,8 @@ static void ses_intf_remove_enclosure(struct scsi_device *sdev) | |||
778 | if (!edev) | 778 | if (!edev) |
779 | return; | 779 | return; |
780 | 780 | ||
781 | enclosure_unregister(edev); | ||
782 | |||
781 | ses_dev = edev->scratch; | 783 | ses_dev = edev->scratch; |
782 | edev->scratch = NULL; | 784 | edev->scratch = NULL; |
783 | 785 | ||
@@ -789,7 +791,6 @@ static void ses_intf_remove_enclosure(struct scsi_device *sdev) | |||
789 | kfree(edev->component[0].scratch); | 791 | kfree(edev->component[0].scratch); |
790 | 792 | ||
791 | put_device(&edev->edev); | 793 | put_device(&edev->edev); |
792 | enclosure_unregister(edev); | ||
793 | } | 794 | } |
794 | 795 | ||
795 | static void ses_intf_remove(struct device *cdev, | 796 | static void ses_intf_remove(struct device *cdev, |