lkml.org 
[lkml]   [2003]   [Dec]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: cciss update for 2.4.24-pre1, 2 of 2
    Here's a version of the patch with the flag changed to
    TASK_UNINTERRUPTIBLE. Thanks for the input.

    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, 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_UNINTERRUPTIBLE);
    + schedule_timeout(HZ / 10); /* wait 100ms */
    + }
    + if (!ready) {
    + printk(KERN_WARNING "cciss: Board not ready. Timed out.\n");
    + return -1;
    + }

    /* get the address index number */
    cfg_base_addr = readl(c->vaddr + SA5_CTCFG_OFFSET);
    diff -burN lx2424pre1-p01/drivers/block/cciss.h lx2424pre1/drivers/block/cciss.h
    --- lx2424pre1-p01/drivers/block/cciss.h 2003-11-28 12:26:19.000000000 -0600
    +++ lx2424pre1/drivers/block/cciss.h 2003-12-16 17:30:41.000000000 -0600
    @@ -137,6 +137,7 @@
    #define SA5_REPLY_INTR_MASK_OFFSET 0x34
    #define SA5_REPLY_PORT_OFFSET 0x44
    #define SA5_INTR_STATUS 0x30
    +#define SA5_SCRATCHPAD_OFFSET 0xB0

    #define SA5_CTCFG_OFFSET 0xB4
    #define SA5_CTMEM_OFFSET 0xB8
    -------------------------------------------------------------------------------
    On Thu, 18 Dec 2003, Jens Axboe wrote:
    > On Wed, Dec 17 2003, Andrew Morton wrote:
    > > Jens Axboe <axboe@suse.de> wrote:
    > > >
    > > > > + 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? :)
    > >
    > > It will still be a busy loop if this task has a signal pending.
    > > TASK_UNINTERRUPTIBLE may be more appropriate...
    >
    > Agreed, that would be better.
    >
    > --
    > 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/

    \
     
     \ /
      Last update: 2005-03-22 13:59    [W:0.027 / U:0.448 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site