13 Jun, 2009

1 commit


12 Jun, 2009

2 commits

  • * 'for-2.6.31' of git://git.kernel.dk/linux-2.6-block: (153 commits)
    block: add request clone interface (v2)
    floppy: fix hibernation
    ramdisk: remove long-deprecated "ramdisk=" boot-time parameter
    fs/bio.c: add missing __user annotation
    block: prevent possible io_context->refcount overflow
    Add serial number support for virtio_blk, V4a
    block: Add missing bounce_pfn stacking and fix comments
    Revert "block: Fix bounce limit setting in DM"
    cciss: decode unit attention in SCSI error handling code
    cciss: Remove no longer needed sendcmd reject processing code
    cciss: change SCSI error handling routines to work with interrupts enabled.
    cciss: separate error processing and command retrying code in sendcmd_withirq_core()
    cciss: factor out fix target status processing code from sendcmd functions
    cciss: simplify interface of sendcmd() and sendcmd_withirq()
    cciss: factor out core of sendcmd_withirq() for use by SCSI error handling code
    cciss: Use schedule_timeout_uninterruptible in SCSI error handling code
    block: needs to set the residual length of a bidi request
    Revert "block: implement blkdev_readpages"
    block: Fix bounce limit setting in DM
    Removed reference to non-existing file Documentation/PCI/PCI-DMA-mapping.txt
    ...

    Manually fix conflicts with tracing updates in:
    block/blk-sysfs.c
    drivers/ide/ide-atapi.c
    drivers/ide/ide-cd.c
    drivers/ide/ide-floppy.c
    drivers/ide/ide-tape.c
    include/trace/events/block.h
    kernel/trace/blktrace.c

    Linus Torvalds
     
  • * 'for-2.6.31' of git://git.kernel.org/pub/scm/linux/kernel/git/bart/ide-2.6: (28 commits)
    ide-tape: fix debug call
    alim15x3: Remove historical hacks, re-enable init_hwif for PowerPC
    ide-dma: don't reset request fields on dma_timeout_retry()
    ide: drop rq->data handling from ide_map_sg()
    ide-atapi: kill unused fields and callbacks
    ide-tape: simplify read/write functions
    ide-tape: use byte size instead of sectors on rw issue functions
    ide-tape: unify r/w init paths
    ide-tape: kill idetape_bh
    ide-tape: use standard data transfer mechanism
    ide-tape: use single continuous buffer
    ide-atapi,tape,floppy: allow ->pc_callback() to change rq->data_len
    ide-tape,floppy: fix failed command completion after request sense
    ide-pm: don't abuse rq->data
    ide-cd,atapi: use bio for internal commands
    ide-atapi: convert ide-{floppy,tape} to using preallocated sense buffer
    ide-cd: convert to using generic sense request
    ide: add helpers for preparing sense requests
    ide-cd: don't abuse rq->buffer
    ide-atapi: don't abuse rq->buffer
    ...

    Linus Torvalds
     

07 Jun, 2009

2 commits

  • pdc202xx_reset() calls pdc202xx_reset_host() twice, for both channels, while
    that function actually twiddles the single, shared software reset bit -- the
    net effect is a duplicated reset and horrendous 4 second delay happening not
    only on a channel reset but also when dma_lost_irq() and dma_clear() methods
    are called. Fold pdc202xx_reset_host() into pdc202xx_reset(), fix printk(),
    and move it before the actual reset...

    Signed-off-by: Sergei Shtylyov
    Signed-off-by: Bartlomiej Zolnierkiewicz

    Sergei Shtylyov
     
  • Commit ac95beedf8bc97b24f9540d4da9952f07221c023 (ide: add struct ide_port_ops
    (take 2)) erroneously converted the driver's dma_timeout() and dma_lost_irq()
    methods to call the driver's resetproc() method regardless of whether it was
    defined for this specific controller while it hadn't been defined and hence
    called for PDC20246. So the dma_clear() method, the successor of dma_timeout(),
    shouldn't exist and the dma_lost_irq() method should be standard for PDC20246.

    Signed-off-by: Sergei Shtylyov
    Signed-off-by: Bartlomiej Zolnierkiewicz

    Sergei Shtylyov
     

31 May, 2009

1 commit

  • We need to explicitly mark words 85-87 as valid ones since
    firmware doesn't do it.

    This should fix support for LBA48 and FLUSH CACHE [EXT] command
    which stopped working after we applied more strict checking of
    identify words in:

    commit 942dcd85bf8edf38cdc3745306ca250684d99a61
    ("ide: idedisk_supports_lba48() -> ata_id_lba48_enabled()")

    and

    commit 4b58f17d7c45a8e5f4acda641bec388398b9c0fa
    ("ide: ide_id_has_flush_cache() -> ata_id_flush_enabled()")

    Reported-and-tested-by: "Trevor Hemsley"
    Signed-off-by: Bartlomiej Zolnierkiewicz

    Bartlomiej Zolnierkiewicz
     

23 May, 2009

4 commits


22 May, 2009

6 commits

  • This patch adds the PCI Device ID 0xc409 to the PCI ID table of via82cxxx.c,
    as well as the 0x8409 south bridge ID.

    This is required to make the IDE driver work on the VX855/VX875 integrated
    chipset.

    Signed-off-by: Harald Welte
    Cc: Joseph Chan
    Cc: Bruce Chang
    Signed-off-by: Bartlomiej Zolnierkiewicz

    Harald Welte
     
  • * change 'hwif' argument to 'drive'
    * report an error on timeout

    Signed-off-by: Bartlomiej Zolnierkiewicz

    Bartlomiej Zolnierkiewicz
     
  • Nowadays we (almost) always store the currently executing command
    in hwif->cmd so we can use it for the failed opcode reporting.

    Cc: Martin Lottermoser
    Signed-off-by: Bartlomiej Zolnierkiewicz

    Bartlomiej Zolnierkiewicz
     
  • Fixes "" in error messages like this one:

    hdc: cdrom_decode_status: error=0x40 { LastFailedSense=0x04 }

    Reported-by: Martin Lottermoser
    Signed-off-by: Bartlomiej Zolnierkiewicz

    Bartlomiej Zolnierkiewicz
     
  • On Tuesday 19 May 2009 20:29:28 Martin Lottermoser wrote:

    > hdc: cdrom_decode_status: error=0x40 { LastFailedSense=0x04 }
    > ide: failed opcode was: unknown
    > hdc: DMA disabled
    > ------------[ cut here ]------------
    > kernel BUG at drivers/ide/ide-io.c:872!

    It is possible for ide-cd to ignore ide_error()'s return value under
    some circumstances. Workaround it in ide_intr() and ide_timer_expiry()
    by checking if there is a device/port reset pending currently.

    Fixes bug #13345:

    http://bugzilla.kernel.org/show_bug.cgi?id=13345

    Reported-by: Martin Lottermoser
    Reported-and-tested-by: Modestas Vainius
    Cc: Borislav Petkov
    Signed-off-by: Bartlomiej Zolnierkiewicz

    Bartlomiej Zolnierkiewicz
     
  • Since 2.6.26 we support UDMA66 on ATAPI devices requiring IVB quirk:

    commit 8588a2b732928b343233af9b1855705b8286bed4
    ("ide: add SH-S202J to ivb_list[]")

    We also later added support for more such devices in:

    commit e97564f362a93f8c248246c19828895950341252
    ("ide: More TSST drives with broken cable detection")

    and in:

    commit 3ced5c49bd2d1f2c7f769e3a54385883de63a652
    ("ide: add TSSTcorp CDDVDW SH-S202H to ivb_list[]")

    It turns out that such devices lack cable detection altogether
    (which in turn results in incorrect detection of 40-wire cables
    by our current cable detection strategy) so always handle them
    by trusting host-side cable detection only.

    v2:
    Model detection fixup from Martin.

    Reported-and-tested-by: Martin Lottermoser
    Signed-off-by: Bartlomiej Zolnierkiewicz

    Bartlomiej Zolnierkiewicz
     

19 May, 2009

1 commit

  • In commit c3a4d78c580de4edc9ef0f7c59812fb02ceb037f, while introducing
    rq->resid_len, the default value of residue count was changed from
    full count to zero. The conversion was done under the assumption that
    when a request fails residue count wasn't defined. However, Boaz and
    James pointed out that this wasn't true and the residue count should
    be preserved for failed requests too.

    This patchset restores the original behavior by setting rq->resid_len
    to blk_rq_bytes(rq) on request start and restoring explicit clearing
    in affected drivers. While at it, take advantage of the fact that
    rq->resid_len is set to full count where applicable.

    * ide-cd: rq->resid_len cleared on pc success

    * mptsas: req->resid_len cleared on success

    * sas_expander: rsp/req->resid_len cleared on success

    * mpt2sas_transport: req->resid_len cleared on success

    * ide-cd, ide-tape, mptsas, sas_host_smp, mpt2sas_transport, ub: take
    advantage of initial full count to simplify code

    Boaz Harrosh spotted bug in resid_len initialization. Fixed as
    suggested.

    Signed-off-by: Tejun Heo
    Acked-by: Borislav Petkov
    Cc: Boaz Harrosh
    Cc: James Bottomley
    Cc: Pete Zaitcev
    Cc: Bartlomiej Zolnierkiewicz
    Cc: Sergei Shtylyov
    Cc: Eric Moore
    Cc: Darrick J. Wong
    Signed-off-by: Jens Axboe

    Tejun Heo
     

17 May, 2009

5 commits


11 May, 2009

7 commits

  • Till now block layer allowed two separate modes of request execution.
    A request is always acquired from the request queue via
    elv_next_request(). After that, drivers are free to either dequeue it
    or process it without dequeueing. Dequeue allows elv_next_request()
    to return the next request so that multiple requests can be in flight.

    Executing requests without dequeueing has its merits mostly in
    allowing drivers for simpler devices which can't do sg to deal with
    segments only without considering request boundary. However, the
    benefit this brings is dubious and declining while the cost of the API
    ambiguity is increasing. Segment based drivers are usually for very
    old or limited devices and as converting to dequeueing model isn't
    difficult, it doesn't justify the API overhead it puts on block layer
    and its more modern users.

    Previous patches converted all block low level drivers to dequeueing
    model. This patch completes the API transition by...

    * renaming elv_next_request() to blk_peek_request()

    * renaming blkdev_dequeue_request() to blk_start_request()

    * adding blk_fetch_request() which is combination of peek and start

    * disallowing completion of queued (not started) requests

    * applying new API to all LLDs

    Renamings are for consistency and to break out of tree code so that
    it's apparent that out of tree drivers need updating.

    [ Impact: block request issue API cleanup, no functional change ]

    Signed-off-by: Tejun Heo
    Cc: Rusty Russell
    Cc: James Bottomley
    Cc: Mike Miller
    Cc: unsik Kim
    Cc: Paul Clements
    Cc: Tim Waugh
    Cc: Geert Uytterhoeven
    Cc: David S. Miller
    Cc: Laurent Vivier
    Cc: Jeff Garzik
    Cc: Jeremy Fitzhardinge
    Cc: Grant Likely
    Cc: Adrian McMenamin
    Cc: Stephen Rothwell
    Cc: Bartlomiej Zolnierkiewicz
    Cc: Borislav Petkov
    Cc: Sergei Shtylyov
    Cc: Alex Dubov
    Cc: Pierre Ossman
    Cc: David Woodhouse
    Cc: Markus Lidel
    Cc: Stefan Weinhuber
    Cc: Martin Schwidefsky
    Cc: Pete Zaitcev
    Cc: FUJITA Tomonori
    Signed-off-by: Jens Axboe

    Tejun Heo
     
  • ide generally has single request in flight and tracks it using
    hwif->rq and all state handlers follow the following convention.

    * ide_started is returned if the request is in flight.

    * ide_stopped is returned if the queue needs to be restarted. The
    request might or might not have been processed fully or partially.

    * hwif->rq is set to NULL, when an issued request completes.

    So, dequeueing model can be implemented by dequeueing after fetch,
    requeueing if hwif->rq isn't NULL on ide_stopped return and doing
    about the same thing on completion / port unlock paths. These changes
    can be made in ide-io proper.

    In addition to the above main changes, the following updates are
    necessary.

    * ide-cd shouldn't dequeue a request when issuing REQUEST SENSE for it
    as the request is already dequeued.

    * ide-atapi uses request queue as stack when issuing REQUEST SENSE to
    put the REQUEST SENSE in front of the failed request. This now
    needs to be done using requeueing.

    [ Impact: dequeue in-flight request ]

    Signed-off-by: Tejun Heo
    Cc: Bartlomiej Zolnierkiewicz
    Cc: Borislav Petkov
    Cc: Sergei Shtylyov
    Signed-off-by: Jens Axboe

    Tejun Heo
     
  • With recent unification of fields, it's now guaranteed that
    rq->data_len always equals blk_rq_bytes(). Convert all direct users
    to accessors.

    [ Impact: convert direct rq->data_len usages to blk_rq_bytes() ]

    Signed-off-by: Tejun Heo
    Acked-by: Bartlomiej Zolnierkiewicz
    Cc: Borislav Petkov
    Cc: Sergei Shtylyov
    Signed-off-by: Jens Axboe

    Tejun Heo
     
  • ide doesn't manipulate request fields anymore and thus all hard and
    their soft equivalents are always equal. Convert all references to
    accessors.

    [ Impact: use pos and nr_sectors accessors ]

    Signed-off-by: Tejun Heo
    Acked-by: Bartlomiej Zolnierkiewicz
    Cc: Borislav Petkov
    Cc: Sergei Shtylyov
    Signed-off-by: Jens Axboe

    Tejun Heo
     
  • Implement accessors - blk_rq_pos(), blk_rq_sectors() and
    blk_rq_cur_sectors() which return rq->hard_sector, rq->hard_nr_sectors
    and rq->hard_cur_sectors respectively and convert direct references of
    the said fields to the accessors.

    This is in preparation of request data length handling cleanup.

    Geert : suggested adding const to struct request * parameter to accessors
    Sergei : spotted error in patch description

    [ Impact: cleanup ]

    Signed-off-by: Tejun Heo
    Acked-by: Geert Uytterhoeven
    Acked-by: Stephen Rothwell
    Tested-by: Grant Likely
    Acked-by: Grant Likely
    Ackec-by: Sergei Shtylyov
    Cc: Bartlomiej Zolnierkiewicz
    Cc: Borislav Petkov
    Cc: James Bottomley
    Signed-off-by: Jens Axboe

    Tejun Heo
     
  • rq->data_len served two purposes - the length of data buffer on issue
    and the residual count on completion. This duality creates some
    headaches.

    First of all, block layer and low level drivers can't really determine
    what rq->data_len contains while a request is executing. It could be
    the total request length or it coulde be anything else one of the
    lower layers is using to keep track of residual count. This
    complicates things because blk_rq_bytes() and thus
    [__]blk_end_request_all() relies on rq->data_len for PC commands.
    Drivers which want to report residual count should first cache the
    total request length, update rq->data_len and then complete the
    request with the cached data length.

    Secondly, it makes requests default to reporting full residual count,
    ie. reporting that no data transfer occurred. The residual count is
    an exception not the norm; however, the driver should clear
    rq->data_len to zero to signify the normal cases while leaving it
    alone means no data transfer occurred at all. This reverse default
    behavior complicates code unnecessarily and renders block PC on some
    drivers (ide-tape/floppy) unuseable.

    This patch adds rq->resid_len which is used only for residual count.

    While at it, remove now unnecessasry blk_rq_bytes() caching in
    ide_pc_intr() as rq->data_len is not changed anymore.

    Boaz : spotted missing conversion in osd
    Sergei : spotted too early conversion to blk_rq_bytes() in ide-tape

    [ Impact: cleanup residual count handling, report 0 resid by default ]

    Signed-off-by: Tejun Heo
    Cc: James Bottomley
    Cc: Bartlomiej Zolnierkiewicz
    Cc: Borislav Petkov
    Cc: Sergei Shtylyov
    Cc: Mike Miller
    Cc: Eric Moore
    Cc: Alan Stern
    Cc: FUJITA Tomonori
    Cc: Doug Gilbert
    Cc: Mike Miller
    Cc: Eric Moore
    Cc: Darrick J. Wong
    Cc: Pete Zaitcev
    Cc: Boaz Harrosh
    Signed-off-by: Jens Axboe

    Tejun Heo
     
  • rq->sector is set to the tape->first_frame but it's never actually
    used and not even in the correct unit (512 byte sectors). Don't set
    it.

    [ Impact: cleanup ]

    Signed-off-by: Tejun Heo
    Acked-by: Borislav Petkov
    Acked-by: Bartlomiej Zolnierkiewicz
    Signed-off-by: Jens Axboe

    Tejun Heo
     

01 May, 2009

3 commits

  • Some time ago we had to disable init_hwif callback for PowerPC builds.
    That was because of a historical IRQ overwrite in the driver, which
    was causing IDE malfunction on the MPC8610HPCD PowerPC boards.

    It's unclear whether this overwrite is still useful, but it is proven
    to cause a bit of harm, and today some PowerPC targets (Xilinx ML510,
    as reported by Roderick Colenbrander) need the init_hwif, so we have
    to re-enable it and remove the overwrite.

    Reported-by: Roderick Colenbrander
    Suggested-by: Bartlomiej Zolnierkiewicz
    Cc: Benjamin Herrenschmidt
    Signed-off-by: Anton Vorontsov
    Signed-off-by: Bartlomiej Zolnierkiewicz

    Anton Vorontsov
     
  • Bartlomiej Zolnierkiewicz
     
  • Original patch (dfa4411cc3a690011cab90e9a536938795366cf9) was buggy.
    This is a more proper fix which introduces blk_rq_quiet() macro
    alleviating the need for dumb, too short caching variables.

    Thanks to Helge Deller and Bart for debugging this.

    Signed-off-by: Borislav Petkov
    Cc: Jens Axboe
    Cc: Sergei Shtylyov
    Reported-and-tested-by: Helge Deller
    Signed-off-by: Bartlomiej Zolnierkiewicz

    Borislav Petkov
     

28 Apr, 2009

8 commits

  • Impact: drop unnecessary code

    Now that everything uses bio and block operations, there is no need to
    reset request fields manually when retrying a request. Every field is
    guaranteed to be always valid. Drop unnecessary request field
    resetting from ide_dma_timeout_retry().

    Signed-off-by: Tejun Heo

    Tejun Heo
     
  • Impact: remove code path which is no longer necessary

    All IDE data transfers now use rq->bio. Simplify ide_map_sg()
    accordingly.

    Signed-off-by: Tejun Heo
    Cc: Jens Axboe

    Tejun Heo
     
  • Impact: remove fields and code paths which are no longer necessary

    Now that ide-tape uses standard mechanisms to transfer data, special
    case handling for bh handling can be dropped from ide-atapi. Drop the
    followings.

    * pc->cur_pos, b_count, bh and b_data
    * drive->pc_update_buffers() and pc_io_buffers().

    Signed-off-by: Tejun Heo

    Tejun Heo
     
  • Impact: cleanup

    idetape_chrdev_read/write() functions are unnecessarily complex when
    everything can be handled in a single loop. Collapse
    idetape_add_chrdev_read/write_request() into the rw functions and
    simplify the implementation.

    Signed-off-by: Tejun Heo

    Tejun Heo
     
  • Impact: cleanup

    Byte size is what most issue functions deal with, make
    idetape_queue_rw_tail() and its wrappers take byte size instead of
    sector counts. idetape_chrdev_read() and write() functions are
    converted to use tape->buffer_size instead of ctl from tape->cap.

    This cleans up code a little bit and will ease the next r/w
    reimplementation.

    Signed-off-by: Tejun Heo

    Tejun Heo
     
  • Impact: cleanup

    Read and write init paths are almost identical. Unify them into
    idetape_init_rw().

    Signed-off-by: Tejun Heo

    Tejun Heo
     
  • Impact: kill now unnecessary idetape_bh

    With everything using standard mechanisms, there is no need for
    idetape_bh anymore. Kill it and use tape->buf, cur and valid to
    describe data buffer instead.

    Changes worth mentioning are...

    * idetape_queue_rq_tail() now always queue tape->buf and and adjusts
    buffer state properly before completion.

    * idetape_pad_zeros() clears the buffer only once.

    Signed-off-by: Tejun Heo

    Tejun Heo
     
  • Impact: use standard way to transfer data

    ide-tape uses rq in an interesting way. For r/w requests, rq->special
    is used to carry a private buffer management structure idetape_bh and
    rq->nr_sectors and current_nr_sectors are initialized to the number of
    idetape blocks which isn't necessary 512 bytes. Also,
    rq->current_nr_sectors is used to report back the residual count in
    units of idetape blocks.

    This peculiarity taxes both block layer and ide. ide-atapi has
    different paths and hooks to accomodate it and what a rq means becomes
    quite confusing and making changes at the block layer becomes quite
    difficult and error-prone.

    This patch makes ide-tape use bio instead. With the previous patch,
    ide-tape currently is using single contiguos buffer so replacing it
    isn't difficult. Data buffer is mapped into bio using
    blk_rq_map_kern() in idetape_queue_rw_tail(). idetape_io_buffers()
    and idetape_update_buffers() are dropped and pc->bh is set to null to
    tell ide-atapi to use standard data transfer mechanism and idetape_bh
    byte counts are updated by the issuer on completion using the residual
    count.

    This change also nicely removes the FIXME in ide_pc_intr() where
    ide-tape rqs need to be completed using ide_rq_bytes() instead of
    blk_rq_bytes() (although this didn't really matter as the request
    didn't have bio).

    Signed-off-by: Tejun Heo
    Cc: Jens Axboe

    Tejun Heo