lkml.org 
[lkml]   [2008]   [May]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH] ata: fix sleep-while-holding-spinlock in sata_nv

    From: Arjan van de Ven <arjan@linux.intel.com>
    Subject: [PATCH] ata: fix sleep-while-holding-spinlock in sata_nv

    blk_queue_bounce_limit() is a sleeping function, so reorganize
    the code a little to not call it while holding a spinlock.

    Signed-off-by: Arjan van de Ven <arjan@linux.intel.com>
    ---
    drivers/ata/sata_nv.c | 8 +++++---
    1 files changed, 5 insertions(+), 3 deletions(-)

    diff --git a/drivers/ata/sata_nv.c b/drivers/ata/sata_nv.c
    index 858f706..a7bc56d 100644
    --- a/drivers/ata/sata_nv.c
    +++ b/drivers/ata/sata_nv.c
    @@ -671,6 +671,11 @@ static int nv_adma_slave_config(struct scsi_device *sdev)
    port1 = ap->host->ports[1]->private_data;
    sdev0 = ap->host->ports[0]->link.device[0].sdev;
    sdev1 = ap->host->ports[1]->link.device[0].sdev;
    +
    + blk_queue_segment_boundary(sdev->request_queue, segment_boundary);
    + blk_queue_max_hw_segments(sdev->request_queue, sg_tablesize);
    + spin_unlock_irqrestore(ap->lock, flags);
    +
    if ((port0->flags & NV_ADMA_ATAPI_SETUP_COMPLETE) ||
    (port1->flags & NV_ADMA_ATAPI_SETUP_COMPLETE)) {
    /** We have to set the DMA mask to 32-bit if either port is in
    @@ -701,14 +706,11 @@ static int nv_adma_slave_config(struct scsi_device *sdev)
    pp->adma_dma_mask);
    }

    - blk_queue_segment_boundary(sdev->request_queue, segment_boundary);
    - blk_queue_max_hw_segments(sdev->request_queue, sg_tablesize);
    ata_port_printk(ap, KERN_INFO,
    "DMA mask 0x%llX, segment boundary 0x%lX, hw segs %hu\n",
    (unsigned long long)*ap->host->dev->dma_mask,
    segment_boundary, sg_tablesize);

    - spin_unlock_irqrestore(ap->lock, flags);

    return rc;
    }
    --
    1.5.4.5


    \
     
     \ /
      Last update: 2008-05-21 01:01    [W:0.022 / U:1.532 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site