aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/block/cciss.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2011-01-13 13:50:24 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2011-01-13 13:50:24 -0500
commit7b0cb1bdac9e941141e3790785955ed933d476f3 (patch)
tree8652bdbe540f5552696b3b8827189eda4b2e01e4 /drivers/block/cciss.c
parent275220f0fcff1adf28a717076e00f575edf05fda (diff)
parente6e1ee936d61d697735d17517678a626b7701ce4 (diff)
Merge branch 'for-2.6.38/drivers' of git://git.kernel.dk/linux-2.6-block
* 'for-2.6.38/drivers' of git://git.kernel.dk/linux-2.6-block: cciss: reinstate proper FIFO order of command queue list floppy: replace NO_GEOM macro with a function
Diffstat (limited to 'drivers/block/cciss.c')
-rw-r--r--drivers/block/cciss.c23
1 files changed, 11 insertions, 12 deletions
diff --git a/drivers/block/cciss.c b/drivers/block/cciss.c
index 8e0f9256eb58..516d5bbec2b6 100644
--- a/drivers/block/cciss.c
+++ b/drivers/block/cciss.c
@@ -238,9 +238,9 @@ static void set_performant_mode(ctlr_info_t *h, CommandList_struct *c)
238/* 238/*
239 * Enqueuing and dequeuing functions for cmdlists. 239 * Enqueuing and dequeuing functions for cmdlists.
240 */ 240 */
241static inline void addQ(struct hlist_head *list, CommandList_struct *c) 241static inline void addQ(struct list_head *list, CommandList_struct *c)
242{ 242{
243 hlist_add_head(&c->list, list); 243 list_add_tail(&c->list, list);
244} 244}
245 245
246static inline void removeQ(CommandList_struct *c) 246static inline void removeQ(CommandList_struct *c)
@@ -253,12 +253,12 @@ static inline void removeQ(CommandList_struct *c)
253 * them off as 'stale' to prevent the driver from 253 * them off as 'stale' to prevent the driver from
254 * falling over. 254 * falling over.
255 */ 255 */
256 if (WARN_ON(hlist_unhashed(&c->list))) { 256 if (WARN_ON(list_empty(&c->list))) {
257 c->cmd_type = CMD_MSG_STALE; 257 c->cmd_type = CMD_MSG_STALE;
258 return; 258 return;
259 } 259 }
260 260
261 hlist_del_init(&c->list); 261 list_del_init(&c->list);
262} 262}
263 263
264static void enqueue_cmd_and_start_io(ctlr_info_t *h, 264static void enqueue_cmd_and_start_io(ctlr_info_t *h,
@@ -905,7 +905,7 @@ static CommandList_struct *cmd_alloc(ctlr_info_t *h)
905 905
906 c->cmdindex = i; 906 c->cmdindex = i;
907 907
908 INIT_HLIST_NODE(&c->list); 908 INIT_LIST_HEAD(&c->list);
909 c->busaddr = (__u32) cmd_dma_handle; 909 c->busaddr = (__u32) cmd_dma_handle;
910 temp64.val = (__u64) err_dma_handle; 910 temp64.val = (__u64) err_dma_handle;
911 c->ErrDesc.Addr.lower = temp64.val32.lower; 911 c->ErrDesc.Addr.lower = temp64.val32.lower;
@@ -944,7 +944,7 @@ static CommandList_struct *cmd_special_alloc(ctlr_info_t *h)
944 } 944 }
945 memset(c->err_info, 0, sizeof(ErrorInfo_struct)); 945 memset(c->err_info, 0, sizeof(ErrorInfo_struct));
946 946
947 INIT_HLIST_NODE(&c->list); 947 INIT_LIST_HEAD(&c->list);
948 c->busaddr = (__u32) cmd_dma_handle; 948 c->busaddr = (__u32) cmd_dma_handle;
949 temp64.val = (__u64) err_dma_handle; 949 temp64.val = (__u64) err_dma_handle;
950 c->ErrDesc.Addr.lower = temp64.val32.lower; 950 c->ErrDesc.Addr.lower = temp64.val32.lower;
@@ -2888,8 +2888,8 @@ static void start_io(ctlr_info_t *h)
2888{ 2888{
2889 CommandList_struct *c; 2889 CommandList_struct *c;
2890 2890
2891 while (!hlist_empty(&h->reqQ)) { 2891 while (!list_empty(&h->reqQ)) {
2892 c = hlist_entry(h->reqQ.first, CommandList_struct, list); 2892 c = list_entry(h->reqQ.next, CommandList_struct, list);
2893 /* can't do anything if fifo is full */ 2893 /* can't do anything if fifo is full */
2894 if ((h->access.fifo_full(h))) { 2894 if ((h->access.fifo_full(h))) {
2895 dev_warn(&h->pdev->dev, "fifo full\n"); 2895 dev_warn(&h->pdev->dev, "fifo full\n");
@@ -3402,11 +3402,10 @@ static inline u32 process_nonindexed_cmd(ctlr_info_t *h, u32 raw_tag)
3402{ 3402{
3403 u32 tag; 3403 u32 tag;
3404 CommandList_struct *c = NULL; 3404 CommandList_struct *c = NULL;
3405 struct hlist_node *tmp;
3406 __u32 busaddr_masked, tag_masked; 3405 __u32 busaddr_masked, tag_masked;
3407 3406
3408 tag = cciss_tag_discard_error_bits(raw_tag); 3407 tag = cciss_tag_discard_error_bits(raw_tag);
3409 hlist_for_each_entry(c, tmp, &h->cmpQ, list) { 3408 list_for_each_entry(c, &h->cmpQ, list) {
3410 busaddr_masked = cciss_tag_discard_error_bits(c->busaddr); 3409 busaddr_masked = cciss_tag_discard_error_bits(c->busaddr);
3411 tag_masked = cciss_tag_discard_error_bits(tag); 3410 tag_masked = cciss_tag_discard_error_bits(tag);
3412 if (busaddr_masked == tag_masked) { 3411 if (busaddr_masked == tag_masked) {
@@ -4572,8 +4571,8 @@ static int __devinit cciss_init_one(struct pci_dev *pdev,
4572 h = hba[i]; 4571 h = hba[i];
4573 h->pdev = pdev; 4572 h->pdev = pdev;
4574 h->busy_initializing = 1; 4573 h->busy_initializing = 1;
4575 INIT_HLIST_HEAD(&h->cmpQ); 4574 INIT_LIST_HEAD(&h->cmpQ);
4576 INIT_HLIST_HEAD(&h->reqQ); 4575 INIT_LIST_HEAD(&h->reqQ);
4577 mutex_init(&h->busy_shutting_down); 4576 mutex_init(&h->busy_shutting_down);
4578 4577
4579 if (cciss_pci_init(h) != 0) 4578 if (cciss_pci_init(h) != 0)