diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-01-13 13:50:24 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-01-13 13:50:24 -0500 |
commit | 7b0cb1bdac9e941141e3790785955ed933d476f3 (patch) | |
tree | 8652bdbe540f5552696b3b8827189eda4b2e01e4 /drivers/block/cciss.c | |
parent | 275220f0fcff1adf28a717076e00f575edf05fda (diff) | |
parent | e6e1ee936d61d697735d17517678a626b7701ce4 (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.c | 23 |
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 | */ |
241 | static inline void addQ(struct hlist_head *list, CommandList_struct *c) | 241 | static 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 | ||
246 | static inline void removeQ(CommandList_struct *c) | 246 | static 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 | ||
264 | static void enqueue_cmd_and_start_io(ctlr_info_t *h, | 264 | static 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) |