23 Apr, 2010

2 commits


03 Mar, 2010

1 commit


19 Jan, 2010

3 commits


12 Jan, 2010

1 commit

  • On Sun, Jan 03, 2010 at 12:23:14AM +0000, Russell King wrote:
    > - with IDE
    > - locks the interrupt line, and makes the machine extremely painful -
    > about an hour to get to the point of being able to unload the
    > pdc202xx_old module.

    Having manually bisected kernel versions, I've narrowed it down to some
    change between 2.6.30 and 2.6.31. There's not much which has changed
    between the two kernels, but one change stands out like a sore thumb:

    +static int pdc202xx_test_irq(ide_hwif_t *hwif)
    +{
    + struct pci_dev *dev = to_pci_dev(hwif->dev);
    + unsigned long high_16 = pci_resource_start(dev, 4);
    + u8 sc1d = inb(high_16 + 0x1d);
    +
    + if (hwif->channel) {
    + /*
    + * bit 7: error, bit 6: interrupting,
    + * bit 5: FIFO full, bit 4: FIFO empty
    + */
    + return ((sc1d & 0x50) == 0x40) ? 1 : 0;
    + } else {
    + /*
    + * bit 3: error, bit 2: interrupting,
    + * bit 1: FIFO full, bit 0: FIFO empty
    + */
    + return ((sc1d & 0x05) == 0x04) ? 1 : 0;
    + }
    +}

    Reading the (documented as a 32-bit) system control register when the
    interface is idle gives: 0x01da110c

    So, the byte at 0x1d is 0x11, which is documented as meaning that the
    primary and secondary FIFOs are empty.

    The code above, which is trying to see whether an IRQ is pending, checks
    for the IRQ bit to be one, and the FIFO bit to be zero - or in English,
    to be non-empty.

    Since during a BM-DMA read, the FIFOs will naturally be drained to the
    PCI bus, the chance of us getting to the interface before this happens
    are extremely small - and if we don't, it means we decide not to service
    the interrupt. Hence, the screaming interrupt problem with drivers/ide.

    Fix this by only indicating an interrupt is ready if both the interrupt
    and FIFO empty bits are at '1'.

    This bug only affects PDC20246/PDC20247 (Promise Ultra33) based cards,
    and has been tested on 2.6.31 and 2.6.33-rc2.

    Signed-off-by: Russell King
    Tested-by: Russell King
    Signed-off-by: David S. Miller

    Russell King
     

04 Dec, 2009

1 commit


16 Jun, 2009

2 commits


13 Jun, 2009

1 commit

  • * 'for-2.6.31' of git://git.kernel.org/pub/scm/linux/kernel/git/bart/ide-2.6: (29 commits)
    ide: re-implement ide_pci_init_one() on top of ide_pci_init_two()
    ide: unexport ide_find_dma_mode()
    ide: fix PowerMac bootup oops
    ide: skip probe if there are no devices on the port (v2)
    sl82c105: add printk() logging facility
    ide-tape: fix proc warning
    ide: add IDE_DFLAG_NIEN_QUIRK device flag
    ide: respect quirk_drives[] list on all controllers
    hpt366: enable all quirks for devices on quirk_drives[] list
    hpt366: sync quirk_drives[] list with pdc202xx_{new,old}.c
    ide: remove superfluous SELECT_MASK() call from do_rw_taskfile()
    ide: remove superfluous SELECT_MASK() call from ide_driveid_update()
    icside: remove superfluous ->maskproc method
    ide-tape: fix IDE_AFLAG_* atomic accesses
    ide-tape: change IDE_AFLAG_IGNORE_DSC non-atomically
    pdc202xx_old: kill resetproc() method
    pdc202xx_old: don't call pdc202xx_reset() on IRQ timeout
    pdc202xx_old: use ide_dma_test_irq()
    ide: preserve Host Protected Area by default (v2)
    ide-gd: implement block device ->set_capacity method (v2)
    ...

    Linus Torvalds
     

12 Jun, 2009

1 commit

  • * '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
     

07 Jun, 2009

6 commits

  • * Add ide_check_nien_quirk_list() helper to the core code
    and then use it in ide_port_tune_devices().

    * Remove no longer needed ->quirkproc methods from hpt366.c
    and pdc202xx_{new,old}.c.

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

    Bartlomiej Zolnierkiewicz
     
  • The driver's resetproc() method resets both channels at once -- most probably
    by driving RESET- on them. Not only such reset can severely disturb concurrent
    operations on another channel, it also ensues 2-second delay, while there's no
    apparent reason why SRST reset being performed prior to resetproc() call needs
    to be followed up by another reset.

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

    Sergei Shtylyov
     
  • The driver's dma_lost_irq() and dma_clear() methods call pdc202xx_reset()
    which resets both channels at once -- most probably by driving RESET- on them.
    Not only such reset can severely disturb concurrent operations on another
    channel, it is also a clear overkill (especially in the first case) and is
    completely unexpected and thus not properly handled by the IDE core in this
    context (in the second case the usual SRST reset would most probably ensue
    anyway though); it also causes quite arbitrary 2-second delay. Hence, use the
    standard ide_dma_lost_irq() method and don't install the optional dma_clear()
    method at all -- the driver should do well without this age-old cruft...

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

    Sergei Shtylyov
     
  • The driver's dma_test_irq() method, although tests some chip specific interrupt
    bits, finally always relies on the SFF-8038i standard interrupt bit. I see no
    point in testing the bits that are not trusted anyway -- the driver should be
    fully able to use the standard method implemetation, ide_dma_test_irq().

    With this change 'pdc202xx_dma_ops' finally becomes identical to 'sff_dma_ops',
    and we can get rid of it...

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

    Sergei Shtylyov
     
  • 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
     

11 May, 2009

1 commit

  • 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
     

01 Apr, 2009

1 commit

  • All custom ->dma_timeout implementations call the generic one thus it is
    possible to have only an optional method for resetting DMA engine instead:

    * Add ->dma_clear method and convert hpt366, pdc202xx_old and sl82c105
    host drivers to use it.

    * Always use ide_dma_timeout() in ide_dma_timeout_retry() and remove
    ->dma_timeout method.

    * Make ide_dma_timeout() static.

    There should be no functional changes caused by this patch.

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

    Bartlomiej Zolnierkiewicz
     

27 Mar, 2009

1 commit

  • * Rename dma_timer_expiry() to ide_dma_sff_timer_expiry() and export it.

    * Add ->dma_timer_expiry method and use it to set hwif->expiry for
    ATA_PROT_DMA protocol in do_rw_taskfile().

    * Initialize ->dma_timer_expiry to ide_dma_sff_timer_expiry() for SFF hosts.

    * Move setting hwif->expiry from ide_execute_command() to its users and drop
    'expiry' argument.

    * Use ide_execute_command() instead of ->dma_exec_cmd in do_rw_taskfile().

    * Remove ->dma_exec_cmd method and its implementations.

    * Unexport ide_execute_command() and ide_dma_intr().

    v2:
    * Fix CONFIG_BLK_DEV_IDEDMA=n build (noticed by Randy Dunlap).

    * Fix *dma_expiry naming (suggested by Sergei Shtylyov).

    There should be no functional changes caused by this patch.

    Cc: Randy Dunlap
    Cc: Sergei Shtylyov
    Signed-off-by: Bartlomiej Zolnierkiewicz

    Bartlomiej Zolnierkiewicz
     

25 Mar, 2009

1 commit


07 Jan, 2009

3 commits


30 Dec, 2008

1 commit

  • * Add ->max_sectors field to struct ide_port_info to allow host drivers
    to specify value used for hwif->rqsize (if smaller than the default).

    * Convert pdc202xx_old to use ->max_sectors and remove no longer needed
    IDE_HFLAG_RQSIZE_256 flag.

    There should be no functional changes caused by this patch.

    Acked-by: Sergei Shtyltov
    Signed-off-by: Bartlomiej Zolnierkiewicz

    Bartlomiej Zolnierkiewicz
     

22 Oct, 2008

1 commit