Messages in this thread | | | Date | Wed, 17 Dec 2003 23:50:07 +0100 | From | Jens Axboe <> | Subject | Re: cciss update for 2.4.24-pre1, 2 of 2 |
| |
On Tue, Dec 16 2003, mikem@beardog.cca.cpqcorp.net wrote: > Some older cciss controllers may take a long time to become ready after > hot replacing the controller. This patch addresses that problem by adding > a check of the scratchpad register. This patch is intended to supplement > the monitor thread when cciss is used in an md environment. In the event > of a controller failure the failed board can now be more reliably > replaced. This is patch #2 of 2. > Please consider this patch for inclusion in the 2.4.24 kernel. > > Thanks, > mikem > mike.miller@hp.com > ------------------------------------------------------------------------------ > diff -burN lx2424pre1-p01/drivers/block/cciss.c lx2424pre1/drivers/block/cciss.c > --- lx2424pre1-p01/drivers/block/cciss.c 2003-12-16 17:25:50.000000000 -0600 > +++ lx2424pre1/drivers/block/cciss.c 2003-12-16 17:30:41.000000000 -0600 > @@ -2537,8 +2537,8 @@ > static int cciss_pci_init(ctlr_info_t *c, struct pci_dev *pdev) > { > ushort subsystem_vendor_id, subsystem_device_id, command; > - unchar irq = pdev->irq; > - __u32 board_id; > + unchar irq = pdev->irq, revision, ready = 0; > + __u32 board_id, scratchpad; > __u64 cfg_offset; > __u32 cfg_base_addr; > __u64 cfg_base_addr_index; > @@ -2609,6 +2609,21 @@ > printk("address 0 = %x\n", c->paddr); > #endif /* CCISS_DEBUG */ > c->vaddr = remap_pci_mem(c->paddr, 200); > + /* Wait for the board to become ready. (PCI hotplug needs this.) > + * We poll for up to 120 secs, once per 100ms. */ > + for (i=0; i < 1200; i++) { > + scratchpad = readl(c->vaddr + SA5_SCRATCHPAD_OFFSET); > + if (scratchpad == 0xffff0000) { > + ready = 1; > + break; > + } > + set_current_state(TASK_INTERRUPTIBLE); > + schedule_timeout(HZ / 10); /* wait 100ms */ > + } > + if (!ready) { > + printk(KERN_WARNING "cciss: Board not ready. Timed out.\n"); > + return -1; > + }
Fine as well, aren't you happy you changed this to schedule_timeout() instead of busy looping? :)
-- Jens Axboe
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |