16 Jan, 2009

1 commit


03 Jan, 2009

1 commit


30 Dec, 2008

2 commits

  • To fix the following lockdep warning we turn the spin_unlock_irq() into
    a spin_unlock() and similarly for the corresponding spin_lock_irq(). We
    can do this because there is no need to enable interrupts in this path
    (thanks to Bring King for the tip).

    Badness at kernel/lockdep.c:2193
    NIP: c0000000000855d0 LR: c0000000000855b4 CTR: c0000000000482d0
    REGS: c00000000fffb8d0 TRAP: 0700 Not tainted (2.6.28-rc5-autokern1)
    MSR: 8000000000021032 CR: 28000022 XER: 00000004
    TASK = c00000000091fa80[0] 'swapper' THREAD: c000000000a3c000 CPU: 0
    GPR00: 0000000000000000 c00000000fffbb50 c000000000a3c2e0 0000000000000001
    GPR04: 000000000000a580 c0000000003870d4 0000000000000000 0000000000000001
    GPR08: 0000000000000000 c00000000112fdf0 c0000000008ed918 c000000000abcfd0
    GPR12: 0000000048000088 c000000000a7f300 0000000000000000 0000000002100000
    GPR16: c000000000644bd0 c000000000643390 0000000000000000 00000000003d0c00
    GPR20: 00000000028372d8 c0000000007372d8 0000000002837548 c000000000737548
    GPR24: c000000000644660 00000000028372d8 000000000000001a c000000076760000
    GPR28: 0000000000000004 c0000000004e8450 c0000000009aafb0 c00000000091fa80
    NIP [c0000000000855d0] .trace_hardirqs_on_caller+0x10c/0x194
    LR [c0000000000855b4] .trace_hardirqs_on_caller+0xf0/0x194
    Call Trace:
    [c00000000fffbb50] [c00000000fffbbe0] 0xc00000000fffbbe0 (unreliable)
    [c00000000fffbbe0] [c0000000004e8450] ._spin_unlock_irq+0x38/0x5c
    [c00000000fffbc70] [c0000000003870d4] .ipr_ioa_reset_done+0x204/0x284
    [c00000000fffbd10] [c00000000037d234] .ipr_reset_ioa_job+0xc4/0xec
    [c00000000fffbda0] [c000000000385ce0] .ipr_isr+0x208/0x484
    [c00000000fffbe50] [c0000000000aaf3c] .handle_IRQ_event+0x58/0xd4
    [c00000000fffbef0] [c0000000000ad978] .handle_fasteoi_irq+0x110/0x1ac
    [c00000000fffbf90] [c000000000025214] .call_handle_irq+0x1c/0x2c
    [c000000000a3f9a0] [c00000000000d168] .do_IRQ+0x120/0x210
    [c000000000a3fa40] [c000000000004804] hardware_interrupt_entry+0x1c/0x98
    --- Exception: 501 at .pseries_dedicated_idle_sleep+0xec/0x1cc
    LR = .pseries_dedicated_idle_sleep+0xdc/0x1cc
    [c000000000a3fd30] [c000000000038208] .pseries_dedicated_idle_sleep+0x74/0x1cc (unreliable)
    [c000000000a3fdd0] [c000000000012134] .cpu_idle+0x114/0x1dc
    [c000000000a3fe60] [c0000000004ecb18] .rest_init+0x7c/0x94
    [c000000000a3fee0] [c000000000700a40] .start_kernel+0x4b8/0x4e0
    [c000000000a3ff90] [c000000000008368] .start_here_common+0x1c/0x34
    Instruction dump:
    e92d01b0 80090894 2f800000 41be002c 481ed1d1 60000000 2fa30000 419e0080
    e93e8090 80090000 2f800000 409e0070 48000068 7fe3fb78 38800001

    Signed-off-by: Mark Nelson
    Acked-by: Brian King
    Signed-off-by: James Bottomley

    Mark Nelson
     
  • Use the newly introduced pci_ioremap_bar() function in drivers/scsi.
    pci_ioremap_bar() just takes a pci device and a bar number, with the goal
    of making it really hard to get wrong, while also having a central place
    to stick sanity checks.

    Signed-off-by: Arjan van de Ven
    Acked-by: Matthew Wilcox
    Cc: Brian King
    Cc: Ed Lin
    Cc: Nick Cheng
    Signed-off-by: James Bottomley

    Arjan van de Ven
     

24 Oct, 2008

2 commits

  • * git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6: (21 commits)
    [SCSI] sd: fix computation of the full size of the device
    [SCSI] lib: string_get_size(): don't hang on zero; no decimals on exact
    [SCSI] sun3x_esp: Convert && to ||
    [SCSI] sd: remove command-size switching code
    [SCSI] 3w-9xxx: remove unnecessary local_irq_save/restore for scsi sg copy API
    [SCSI] 3w-xxxx: remove unnecessary local_irq_save/restore for scsi sg copy API
    [SCSI] fix netlink kernel-doc
    [SCSI] sd: Fix handling of NO_SENSE check condition
    [SCSI] export busy state via q->lld_busy_fn()
    [SCSI] refactor sdev/starget/shost busy checking
    [SCSI] mptfusion: Increase scsi-timeouts, similariy to the LSI 4.x driver.
    [SCSI] aic7xxx: Take the LED out of diagnostic mode on PM resume
    [SCSI] aic79xx: user visible misuse wrong SI units (not disk size!)
    [SCSI] ipr: use memory_read_from_buffer()
    [SCSI] aic79xx: fix shadowed variables
    [SCSI] aic79xx: fix shadowed variables, add statics
    [SCSI] aic7xxx: update *_shipped files
    [SCSI] aic7xxx: update .reg files
    [SCSI] aic7xxx: introduce "dont_generate_debug_code" keyword in aicasm parser
    [SCSI] scsi_dh: Initialize path state to be passive when path is not owned
    ...

    Linus Torvalds
     
  • Signed-off-by: Akinobu Mita
    Signed-off-by: Andrew Morton
    Acked-by: Brian King
    Signed-off-by: James Bottomley

    Akinobu Mita
     

21 Oct, 2008

1 commit

  • The driver flag dynids.use_driver_data is almost consistently not set,
    and causes more problems than it solves. It was initially intended as a
    flag to indicate whether a driver's usage of driver_data had been
    carefully inspected and was ready for values from userspace. That audit
    was never done, so most drivers just get a 0 for driver_data when new
    IDs are added from userspace via sysfs. So remove the flag, allowing
    drivers to see the data directly (a followon patch validates the passed
    driver_data value against what the drivers expect).

    Acked-by: Greg Kroah-Hartman
    Acked-by: Jean Delvare
    Signed-off-by: Milton Miller
    Signed-off-by: Jesse Barnes

    Milton Miller
     

09 Oct, 2008

1 commit

  • Right now SCSI and others do their own command timeout handling.
    Move those bits to the block layer.

    Instead of having a timer per command, we try to be a bit more clever
    and simply have one per-queue. This avoids the overhead of having to
    tear down and setup a timer for each command, so it will result in a lot
    less timer fiddling.

    Signed-off-by: Mike Anderson
    Signed-off-by: Jens Axboe

    Jens Axboe
     

12 Jul, 2008

1 commit

  • Currently, ipr does not support HDIO_GET_IDENTITY to SATA devices.
    An oops occurs if userspace attempts to send the command. Since hald
    issues the command, ensure we fail the ioctl in ipr. This is a
    temporary solution to the oops. Once the ipr libata EH conversion
    is upstream, ipr will fully support HDIO_GET_IDENTITY.

    Tested-by: Milton Miller
    Signed-off-by: Brian King
    Signed-off-by: James Bottomley

    Brian King
     

30 Apr, 2008

1 commit


20 Apr, 2008

1 commit


18 Apr, 2008

6 commits

  • Now that SFF assumptions are separated out from non-SFF reset
    sequence, port_ops->sff_dev_select() is no longer necessary for
    non-SFF controllers. Kill ata_noop_dev_select() and ->sff_dev_select
    initialization from base and other non-SFF port_ops.

    Signed-off-by: Tejun Heo

    Tejun Heo
     
  • Now that all SFF stuff is separated out of core layer, core layer
    doesn't call ops->[alt_]check_status(). In fact, no one calls them
    for non-SFF drivers anymore. Kill them.

    Signed-off-by: Tejun Heo

    Tejun Heo
     
  • Now that all SFF stuff is separated out of core layer, core layer
    doesn't call ops->tf_read directly. It gets called only via
    ops->qc_fill_rtf() for non-SFF drivers. This patch directly
    implements private ops->qc_fill_rtf() for non-SFF controllers and kill
    ops->tf_read().

    This is much cleaner for non-SFF controllers as some of them have to
    cache SFF register values in private data structure and report the
    cached values via ops->tf_read(). Also, ops->tf_read() gets nasty for
    controllers which don't have clear notion of TF registers when
    operation is not in progress.

    As this change makes default ops->qc_fill_rtf unnecessary, move
    ata_sff_qc_fill_rtf() form ata_base_port_ops to ata_sff_port_ops where
    it belongs.

    Signed-off-by: Tejun Heo

    Tejun Heo
     
  • On command completion, ata_qc_complete() directly called ops->tf_read
    to fill qc->result_tf. This patch adds ops->qc_fill_rtf to replace
    hardcoded ops->tf_read usage.

    ata_sff_qc_fill_rtf() which uses ops->tf_read to fill result_tf is
    implemented and set in ata_base_port_ops and other ops tables which
    don't inherit from ata_base_port_ops, so this patch doesn't introduce
    any behavior change.

    ops->qc_fill_rtf() is similar to ops->sff_tf_read() but can only be
    called when a command finishes. As some non-SFF controllers don't
    have TF registers defined unless they're associated with in-flight
    commands, this limited operation makes life easier for those drivers
    and help lifting SFF assumptions from libata core layer.

    Signed-off-by: Tejun Heo

    Tejun Heo
     
  • Add sff_ prefix to SFF specific port ops.

    This rename is in preparation of separating SFF support out of libata
    core layer. This patch strictly renames ops and doesn't introduce any
    behavior difference.

    Signed-off-by: Tejun Heo

    Tejun Heo
     
  • Currently reset methods are not specified directly in the
    ata_port_operations table. If a LLD wants to use custom reset
    methods, it should construct and use a error_handler which uses those
    reset methods. It's done this way for two reasons.

    First, the ops table already contained too many methods and adding
    four more of them would noticeably increase the amount of necessary
    boilerplate code all over low level drivers.

    Second, as ->error_handler uses those reset methods, it can get
    confusing. ie. By overriding ->error_handler, those reset ops can be
    made useless making layering a bit hazy.

    Now that ops table uses inheritance, the first problem doesn't exist
    anymore. The second isn't completely solved but is relieved by
    providing default values - most drivers can just override what it has
    implemented and don't have to concern itself about higher level
    callbacks. In fact, there currently is no driver which actually
    modifies error handling behavior. Drivers which override
    ->error_handler just wraps the standard error handler only to prepare
    the controller for EH. I don't think making ops layering strict has
    any noticeable benefit.

    This patch makes ->prereset, ->softreset, ->hardreset, ->postreset and
    their PMP counterparts propoer ops. Default ops are provided in the
    base ops tables and drivers are converted to override individual reset
    methods instead of creating custom error_handler.

    * ata_std_error_handler() doesn't use sata_std_hardreset() if SCRs
    aren't accessible. sata_promise doesn't need to use separate
    error_handlers for PATA and SATA anymore.

    * softreset is broken for sata_inic162x and sata_sx4. As libata now
    always prefers hardreset, this doesn't really matter but the ops are
    forced to NULL using ATA_OP_NULL for documentation purpose.

    * pata_hpt374 needs to use different prereset for the first and second
    PCI functions. This used to be done by branching from
    hpt374_error_handler(). The proper way to do this is to use
    separate ops and port_info tables for each function. Converted.

    Signed-off-by: Tejun Heo

    Tejun Heo
     

19 Feb, 2008

1 commit

  • that provided by the block layer

    ATA requires that all DMA transfers begin and end on word boundaries.
    Because of this, a large amount of machinery grew up in ide to adjust
    scatterlists on this basis. However, as of 2.5, the block layer has a
    dma_alignment variable which ensures both the beginning and length of a
    DMA transfer are aligned on the dma_alignment boundary. Although the
    block layer does adjust the beginning of the transfer to ensure this
    happens, it doesn't actually adjust the length, it merely makes sure
    that space is allocated for transfers beyond the declared length. The
    upshot of this is that scatterlists may be padded to any size between
    the actual length and the length adjusted to the dma_alignment safely
    knowing that memory is allocated in this region.

    Right at the moment, SCSI takes the default dma_aligment which is on a
    512 byte boundary. Note that this aligment only applies to transfers
    coming in from user space. However, since all kernel allocations are
    automatically aligned on a minimum of 32 byte boundaries, it is safe to
    adjust them in this manner as well.

    tj: * Adjusting sg after padding is done in block layer. Make libata
    set queue alignment correctly for ATAPI devices and drop broken
    sg mangling from ata_sg_setup().
    * Use request->raw_data_len for ATAPI transfer chunk size.
    * Killed qc->raw_nbytes.
    * Separated out killing qc->n_iter.

    Signed-off-by: James Bottomley
    Signed-off-by: Tejun Heo
    Signed-off-by: Jens Axboe

    James Bottomley
     

03 Feb, 2008

1 commit


26 Jan, 2008

1 commit

  • * git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6: (200 commits)
    [SCSI] usbstorage: use last_sector_bug flag universally
    [SCSI] libsas: abstract STP task status into a function
    [SCSI] ultrastor: clean up inline asm warnings
    [SCSI] aic7xxx: fix firmware build
    [SCSI] aacraid: fib context lock for management ioctls
    [SCSI] ch: remove forward declarations
    [SCSI] ch: fix device minor number management bug
    [SCSI] ch: handle class_device_create failure properly
    [SCSI] NCR5380: fix section mismatch
    [SCSI] sg: fix /proc/scsi/sg/devices when no SCSI devices
    [SCSI] IB/iSER: add logical unit reset support
    [SCSI] don't use __GFP_DMA for sense buffers if not required
    [SCSI] use dynamically allocated sense buffer
    [SCSI] scsi.h: add macro for enclosure bit of inquiry data
    [SCSI] sd: add fix for devices with last sector access problems
    [SCSI] fix pcmcia compile problem
    [SCSI] aacraid: add Voodoo Lite class of cards.
    [SCSI] aacraid: add new driver features flags
    [SCSI] qla2xxx: Update version number to 8.02.00-k7.
    [SCSI] qla2xxx: Issue correct MBC_INITIALIZE_FIRMWARE command.
    ...

    Linus Torvalds
     

23 Jan, 2008

2 commits

  • libata used private sg iterator to handle padding sg. Now that sg can
    be chained, padding can be handled using standard sg ops. Convert to
    chained sg.

    * s/qc->__sg/qc->sg/

    * s/qc->pad_sgent/qc->extra_sg[]/. Because chaining consumes one sg
    entry. There need to be two extra sg entries. The renaming is also
    for future addition of other extra sg entries.

    * Padding setup is moved into ata_sg_setup_extra() which is organized
    in a way that future addition of other extra sg entries is easy.

    * qc->orig_n_elem is unused and removed.

    * qc->n_elem now contains the number of sg entries that LLDs should
    map. qc->mapped_n_elem is added to carry the original number of
    mapped sgs for unmapping.

    * The last sg of the original sg list is used to chain to extra sg
    list. The original last sg is pointed to by qc->last_sg and the
    content is stored in qc->saved_last_sg. It's restored during
    ata_sg_clean().

    * All sg walking code has been updated. Unnecessary assertions and
    checks for conditions the core layer already guarantees are removed.

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

    Tejun Heo
     
  • ATA_PROT_ATAPI_* are ugly and naming schemes between ATA_PROT_* and
    ATA_PROT_ATAPI_* are inconsistent causing confusion. Rename them to
    ATAPI_PROT_* and make them consistent with ATA counterpart.

    Signed-off-by: Tejun Heo
    Signed-off-by: Jeff Garzik

    Tejun Heo
     

12 Jan, 2008

1 commit


24 Oct, 2007

1 commit


23 Oct, 2007

1 commit


19 Oct, 2007

1 commit

  • Short term, this works around a bug introduced by early sg-chaining
    work.

    Long term, removing this function eliminates a branch from a hot
    path loop in each scatter/gather table build. Also, as this code
    demonstrates, we don't need to _track_ the end of the s/g list, as
    long as we mark it in some way. And doing so programatically is nice.
    So its a useful cleanup, regardless of its short term effects.

    Based conceptually on a quick patch by Jens Axboe.

    Signed-off-by: Jeff Garzik

    Jeff Garzik
     

13 Oct, 2007

3 commits

  • It was always set to ata_port_disable(). Removed the hook, and replaced
    the very few ap->ops->port_disable() callsites with direct calls to
    ata_port_disable().

    Signed-off-by: Jeff Garzik

    Jeff Garzik
     
  • Make reset methods and related functions deal with ata_link instead of
    ata_port.

    * ata_do_reset()
    * ata_eh_reset()
    * all prereset/reset/postreset methods and related functions

    This patch introduces no behavior change.

    Signed-off-by: Tejun Heo
    Signed-off-by: Jeff Garzik

    Tejun Heo
     
  • Introduce ata_link. It abstracts PHY and sits between ata_port and
    ata_device. This new level of abstraction is necessary to support
    SATA Port Multiplier, which basically adds a bunch of links (PHYs) to
    a ATA host port. Fields related to command execution, spd_limit and
    EH are per-link and thus moved to ata_link.

    This patch only defines the host link. Multiple link handling will be
    added later. Also, a lot of ap->link derefences are added but many of
    them will be removed as each part is converted to deal directly with
    ata_link instead of ata_port.

    This patch introduces no behavior change.

    Signed-off-by: Tejun Heo
    Cc: James Bottomley
    Signed-off-by: Jeff Garzik

    Tejun Heo
     

16 Jul, 2007

1 commit

  • * master.kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6: (166 commits)
    [SCSI] ibmvscsi: convert to use the data buffer accessors
    [SCSI] dc395x: convert to use the data buffer accessors
    [SCSI] ncr53c8xx: convert to use the data buffer accessors
    [SCSI] sym53c8xx: convert to use the data buffer accessors
    [SCSI] ppa: coding police and printk levels
    [SCSI] aic7xxx_old: remove redundant GFP_ATOMIC from kmalloc
    [SCSI] i2o: remove redundant GFP_ATOMIC from kmalloc from device.c
    [SCSI] remove the dead CYBERSTORMIII_SCSI option
    [SCSI] don't build scsi_dma_{map,unmap} for !HAS_DMA
    [SCSI] Clean up scsi_add_lun a bit
    [SCSI] 53c700: Remove printk, which triggers because of low scsi clock on SNI RMs
    [SCSI] sni_53c710: Cleanup
    [SCSI] qla4xxx: Fix underrun/overrun conditions
    [SCSI] megaraid_mbox: use mutex instead of semaphore
    [SCSI] aacraid: add 51245, 51645 and 52245 adapters to documentation.
    [SCSI] qla2xxx: update version to 8.02.00-k1.
    [SCSI] qla2xxx: add support for NPIV
    [SCSI] stex: use resid for xfer len information
    [SCSI] Add Brownie 1200U3P to blacklist
    [SCSI] scsi.c: convert to use the data buffer accessors
    ...

    Linus Torvalds
     

13 Jul, 2007

1 commit

  • * master.kernel.org:/pub/scm/linux/kernel/git/gregkh/pci-2.6: (34 commits)
    PCI: Only build PCI syscalls on architectures that want them
    PCI: limit pci_get_bus_and_slot to domain 0
    PCI: hotplug: acpiphp: avoid acpiphp "cannot get bridge info" PCI hotplug failure
    PCI: hotplug: acpiphp: remove hot plug parameter write to PCI host bridge
    PCI: hotplug: acpiphp: fix slot poweroff problem on systems without _PS3
    PCI: hotplug: pciehp: wait for 1 second after power off slot
    PCI: pci_set_power_state(): check for PM capabilities earlier
    PCI: cpci_hotplug: Convert to use the kthread API
    PCI: add pci_try_set_mwi
    PCI: pcie: remove SPIN_LOCK_UNLOCKED
    PCI: ROUND_UP macro cleanup in drivers/pci
    PCI: remove pci_dac_dma_... APIs
    PCI: pci-x-pci-express-read-control-interfaces cleanups
    PCI: Fix typo in include/linux/pci.h
    PCI: pci_ids, remove double or more empty lines
    PCI: pci_ids, add atheros and 3com_2 vendors
    PCI: pci_ids, reorder some entries
    PCI: i386: traps, change VENDOR to DEVICE
    PCI: ATM: lanai, change VENDOR to DEVICE
    PCI: Change all drivers to use pci_device->revision
    ...

    Linus Torvalds
     

12 Jul, 2007

2 commits

  • Well, first of all, I don't want to change so many files either.

    What I do:
    Adding a new parameter "struct bin_attribute *" in the
    .read/.write methods for the sysfs binary attributes.

    In fact, only the four lines change in fs/sysfs/bin.c and
    include/linux/sysfs.h do the real work.
    But I have to update all the files that use binary attributes
    to make them compatible with the new .read and .write methods.
    I'm not sure if I missed any. :(

    Why I do this:
    For a sysfs attribute, we can get a pointer pointing to the
    struct attribute in the .show/.store method,
    while we can't do this for the binary attributes.
    I don't know why this is different, but this does make it not
    so handy to use the binary attributes as the regular ones.
    So I think this patch is reasonable. :)

    Who benefits from it:
    The patch that exposes ACPI tables in sysfs
    requires such an improvement.
    All the table binary attributes share the same .read method.
    Parameter "struct bin_attribute *" is used to get
    the table signature and instance number which are used to
    distinguish different ACPI table binary attributes.

    Without this parameter, we need to offer different .read methods
    for different ACPI table binary attributes.
    This is impossible as there are various ACPI tables on different
    platforms, and we don't know what they are until they are loaded.

    Signed-off-by: Zhang Rui
    Signed-off-by: Greg Kroah-Hartman

    Zhang Rui
     
  • Instead of all drivers reading pci config space to get the revision
    ID, they can now use the pci_device->revision member.

    This exposes some issues where drivers where reading a word or a dword
    for the revision number, and adding useless error-handling around the
    read. Some drivers even just read it for no purpose of all.

    In devices where the revision ID is being copied over and used in what
    appears to be the equivalent of hotpath, I have left the copy code
    and the cached copy as not to influence the driver's performance.

    Compile tested with make all{yes,mod}config on x86_64 and i386.

    Signed-off-by: Auke Kok
    Acked-by: Dave Jones
    Signed-off-by: Greg Kroah-Hartman

    Auke Kok
     

31 May, 2007

1 commit


30 May, 2007

1 commit


17 May, 2007

1 commit

  • Currently ipr always returns success from eh_dev_reset when
    called for a SATA device. If ata_do_eh is unable to recover
    for some reason, this can result in commands that are still
    outstanding when ata_do_eh returns. Change ipr to verify no
    commands are outstanding before returning success.

    Signed-off-by: Brian King
    Signed-off-by: James Bottomley

    Brian King
     

09 May, 2007

1 commit

  • Use a newly added PCI API to issue a PCI Fundamental reset
    (warm reset) to a new ipr PCI-E adapter. Typically, the
    ipr adapter uses the start BIST bit in config space to reset
    an adapter. Issuing start BIST on this particular adapter
    results in the PCI-E logic on the card losing sync, which
    causes PCI-E errors, making the card unusable. The only reset
    mechanism that exists on this hardware that does not have this
    problem is PCI Fundamental reset (warm reset).

    Signed-off-by: Brian King
    Signed-off-by: James Bottomley

    Brian King
     

06 May, 2007

3 commits