1. 18 10月, 2008 1 次提交
  2. 17 10月, 2008 1 次提交
  3. 14 10月, 2008 8 次提交
    • E
      ide: Implement disk shock protection support (v4) · 4abdc6ee
      Elias Oltmanns 提交于
      On user request (through sysfs), the IDLE IMMEDIATE command with UNLOAD
      FEATURE as specified in ATA-7 is issued to the device and processing of
      the request queue is stopped thereafter until the specified timeout
      expires or user space asks to resume normal operation. This is supposed
      to prevent the heads of a hard drive from accidentally crashing onto the
      platter when a heavy shock is anticipated (like a falling laptop expected
      to hit the floor). Port resets are deferred whenever a device on that
      port is in the parked state.
      
      v3:
      Elias Oltmanns <eo@nebensachen.de> wrote:
      [...]
      > >> 1. Make sure that no negative value is being passed to
      > >>    jiffies_to_msecs() in ide_park_show().
      > >> 2. Drop the superfluous variable hwif in ide_special_rq().
      > >> 3. Skip initialisation of task and tf in ide_special_rq() if we are not
      > >>    handling a (un)park request.
      > >
      > > Well, #3 should have been done differently because we donn't want to
      > > check for REQ_(UN)?PARK_HEADS more often than is necessary.
      > 
      > While preparing the backport to 2.6.27, it has just occurred to me that
      > we need to clear the IDE_DFLAG_PARKED flag in ide_disk_pre_reset()
      > because this flag must not be set after *any* sort of access to the
      > device.
      
      v4:
      Fix a memory leak due to a missing blk_put_request() in
      issue_park_cmd(). Additionally, we should plug the queue when enqueueing
      the unpark request because there is no guarantee that the park timeout
      has not expired by then. Even though the chance for that to happen is
      very slim, the request might end up hanging in the queue until the next
      I/O operation is queued up. While at it, clean up the code a little:
      - make issue_park_cmd() a function of type void since nobody cares for
        the return value anyway;
      - use blk_start_queueing() instead of __blk_run_queue() since we don't
        have to worry about recursion;
      - remove a superfluous pointer deference in task_no_data_intr().
      Signed-off-by: NElias Oltmanns <eo@nebensachen.de>
      Cc: Jeff Garzik <jeff@garzik.org>,
      Cc: Randy Dunlap <randy.dunlap@oracle.com>
      Cc: Tejun Heo <htejun@gmail.com>
      Signed-off-by: NBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      4abdc6ee
    • E
      ide: Two fixes regarding memory allocation · e415e495
      Elias Oltmanns 提交于
      In function ide_devset_execute() we should use __GFP_WAIT rather than
      GFP_KERNEL. Also, the allocation cannot possibly fail at that point.
      More importantly, there is a potential memory leak in the device probing
      code. The infrastructure seems rather complex and I hope I haven't messed
      anything up by trying to fix this.
      Signed-off-by: NElias Oltmanns <eo@nebensachen.de>
      [bart: remove superfluous ide_lock taking]
      Signed-off-by: NBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      e415e495
    • B
      ide: set IDE_AFLAG_DRQ_INTERRUPT in do_identify() · 4ab3d502
      Bartlomiej Zolnierkiewicz 提交于
      Set IDE_AFLAG_DRQ_INTERRUPT in do_identify() instead of ATAPI
      device drivers *_setup() methods.
      
      While at it:
      - use ata_id_cdb_intr()
      
      There should be no functional changes caused by this patch.
      
      Cc: Borislav Petkov <petkovbb@gmail.com>
      Signed-off-by: NBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      4ab3d502
    • B
      ide: remove ide_host_alloc_all() · a36223b0
      Bartlomiej Zolnierkiewicz 提交于
      * Remove no longer used ide_host_alloc_all().
      
      * Add MAX_HOST_PORTS define and use it instead of MAX_HWIFS
        as the maximum number of host ports possible.
      Signed-off-by: NBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      a36223b0
    • B
      ide: remove [ata_]select_t · 7f612f27
      Bartlomiej Zolnierkiewicz 提交于
      * Use 'drive->dn & 1' in ide_init_disk().
      
      * remove [ata_]select_t.
      
      While at it:
      
      * Use ATA_DEVICE_OBS define in ide_port_init_devices_data().
      Acked-by: NSergei Shtylyov <sshtylyov@ru.mvista.com>
      Signed-off-by: NBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      7f612f27
    • B
      ide: use 'drive->dn & 1' instead of drive->select.b.unit · 123995b9
      Bartlomiej Zolnierkiewicz 提交于
      * Call ide_port_init_devices() in ide_host_register()
        also if 'struct ide_port_info *d' is not available.
      
      * Init drive->dn in ide_port_init_devices() instead of
        ide_probe_port() so it is valid also in ->init_dev.
      
      * Pass device number to ide_dev_apply_params().
      
      * Use 'drive->dn & 1' instead of drive->select.b.unit.
      
      There should be no functional changes caused by this patch.
      Signed-off-by: NBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      123995b9
    • B
      ide: add device flags · 97100fc8
      Bartlomiej Zolnierkiewicz 提交于
      Add 'unsigned long dev_flags' to ide_drive_t and convert bitfields
      to IDE_DFLAG_* flags.
      
      While at it:
      - IDE_DFLAG_ADDRESSING -> IDE_DFLAG_LBA48
      - fixup some comments
      - remove needless g->flags zeroing from ide*_probe()
      
      There should be no functional changes caused by this patch.
      Signed-off-by: NBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      97100fc8
    • B
      ide: remove unnecessary MAX_HWIFS checks from ide-probe.c · 75d21fff
      Bartlomiej Zolnierkiewicz 提交于
      MAX_HWIFS is now always equal to the number of IDE major numbers.
      Signed-off-by: NBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      75d21fff
  4. 11 10月, 2008 15 次提交
    • B
      ide: add proper PCI PM support (v2) · feb22b7f
      Bartlomiej Zolnierkiewicz 提交于
      * Keep pointer to ->init_chipset method also in
        struct ide_host and set it in ide_host_alloc_all().
      
      * Add ide_pci_suspend() and ide_pci_resume() helpers
        (default ->suspend and ->resume implementations).
      
      * ->init_chipset can no longer be marked __devinit.
      
      * Add proper PCI PM support to IDE PCI host drivers
        (rz1000.c and tc86c001.c are skipped for now since
        they need to be converted from using ->init_hwif
        to use ->init_chipset instead).
      
      v2:
      * Cleanup CONFIG_PM #ifdef-s per akpm's suggestion.
      
      Cc: Andrew Morton <akpm@linux-foundation.org>
      Cc: "Rafael J. Wysocki" <rjw@sisk.pl>
      Signed-off-by: NBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      feb22b7f
    • B
      ide: use ata_id_is_cfa() · 718c72e8
      Bartlomiej Zolnierkiewicz 提交于
      Use ata_id_is_cfa() in do_identify() instead of open-coding
      check for CompactFlash devices (the inline helper also takes
      care of detecting CFs advertising themselves as ATA disks).
      Signed-off-by: NBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      718c72e8
    • B
      ide: remove SECTOR_WORDS define · 151a6701
      Bartlomiej Zolnierkiewicz 提交于
      Just use SECTOR_SIZE instead.
      Signed-off-by: NBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      151a6701
    • B
      ide: /proc/ide/hd*/settings rework · 8185d5aa
      Bartlomiej Zolnierkiewicz 提交于
      * Add struct ide_devset, S_* flags, *DEVSET() & ide*_devset_*() macros.
      
      * Add 'const struct ide_devset **settings' to ide_driver_t.
      
      * Use 'const struct ide_devset **settings' in ide_drive_t instead of
        'struct ide_settings_s *settings'.  Then convert core code and device
        drivers to use struct ide_devset and co.:
      
        - device settings are no longer allocated dynamically for each device
          but instead there is an unique struct ide_devset instance per setting
      
        - device driver keeps the pointer to the table of pointers to its
          settings in ide_driver_t.settings
      
        - generic settings are kept in ide_generic_setting[]
      
        - ide_proc_[un]register_driver(), ide_find_setting_by_name(),
          ide_{read,write}_setting() and proc_ide_{read,write}_settings()
          are updated accordingly
      
        - ide*_add_settings() are removed
      
      * Remove no longer used __ide_add_setting(), ide_add_setting(),
        __ide_remove_setting() and auto_remove_settings().
      
      * Remove no longer used TYPE_*, SETTING_*, ide_procset_t
        and ide_settings_t.
      
      * ->keep_settings, ->using_dma, ->unmask, ->noflush, ->dsc_overlap,
        ->nice1, ->addressing, ->wcache and ->nowerr ide_drive_t fields
        can now be bitfield flags.
      
      While at it:
      
      * Rename ide_find_setting_by_name() to ide_find_setting().
      
      * Rename write_wcache() to set_wcache().
      
      There should be no functional changes caused by this patch.
      Signed-off-by: NBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      8185d5aa
    • B
      ide: remove CONFIG_IDEDISK_MULTI_MODE · 7c51c17e
      Bartlomiej Zolnierkiewicz 提交于
      Use multi PIO by default when available and remove no longer
      needed CONFIG_IDEDISK_MULTI_MODE (it should be safe nowadays,
      despite to what help entry has been saying).
      Signed-off-by: NBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      7c51c17e
    • B
      ide: remove IDE_CHIPSET_* macros · a2cdee5a
      Bartlomiej Zolnierkiewicz 提交于
      They just obfuscate the code.
      Signed-off-by: NBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      a2cdee5a
    • B
      ide: remove no longer needed BUG_ON()-s from init_irq() · 7c199a54
      Bartlomiej Zolnierkiewicz 提交于
      init_irq() is now called only during initial host registration
      so these BUG_ON()-s are no loner needed (+ the last one was done
      too late anyway).
      Signed-off-by: NBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      7c199a54
    • B
      ide: enhance ide_busy_sleep() · b163f46d
      Bartlomiej Zolnierkiewicz 提交于
      * Make ide_busy_sleep() take timeout value as a parameter
        and also allow use of AltStatus Register if requested with
        altstatus parameter.  Update existing users accordingly.
      
      * Convert ide_driveid_update() and actual_try_to_identify()
        to use ide_busy_sleep().
      
      There should be no functional changes caused by this patch.
      Signed-off-by: NBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      b163f46d
    • B
      ide: fix EXABYTENEST handling in probe_for_drive() · c36a7e98
      Bartlomiej Zolnierkiewicz 提交于
      Fix EXABYTENEST handling in probe_for_drive() (so drive->present
      is checked for "nested" device) and cleanup enable_nest().
      Signed-off-by: NBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      c36a7e98
    • B
      ide: use ATA_* defines instead of *_STAT and *_ERR ones · 3a7d2484
      Bartlomiej Zolnierkiewicz 提交于
      * ERR_STAT   -> ATA_ERR
      * INDEX_STAT -> ATA_IDX
      * ECC_STAT   -> ATA_CORR
      * DRQ_STAT   -> ATA_DRQ
      * SEEK_STAT  -> ATA_DSC
      * WRERR_STAT -> ATA_DF
      * READY_STAT -> ATA_DRDY
      * BUSY_STAT  -> ATA_BUSY
      
      * MARK_ERR   -> ATA_AMNF
      * TRK0_ERR   -> ATA_TRK0NF
      * ABRT_ERR   -> ATA_ABORTED
      * MCR_ERR    -> ATA_MCR
      * ID_ERR     -> ATA_IDNF
      * MC_ERR     -> ATA_MC
      * ECC_ERR    -> ATA_UNC
      * ICRC_ERR   -> ATA_ICRC
      
      * BBD_ERR    -> ATA_BBK
      
      Also:
      
      * ILI_ERR    -> ATAPI_ILI
      * EOM_ERR    -> ATAPI_EOM
      * LFS_ERR    -> ATAPI_LFS
      
      * CD         -> ATAPI_COD
      * IO         -> ATAPI_IO
      Signed-off-by: NBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      3a7d2484
    • B
      ide: WIN_* -> ATA_CMD_* · aaaade3f
      Bartlomiej Zolnierkiewicz 提交于
      * Use ATA_CMD_* defines instead of WIN_* ones.
      
      While at it:
      
      * EXABYTE_ENABLE_NEXT -> ATA_EXABYTE_ENABLE_NEST
      
      * SETFEATURES_{EN,DIS}_WCACHE -> SETFEATURES_WC_{ON,OFF}
      
      * SETFEATURES_{EN,DIS}_AAM -> SETFEATURES_AAM_{ON,OFF}
      
      * SMART_* -> ATA_SMART_*
      
      * Remove stale comment from ide-proc.c.
      
      Partially based on earlier work by Chris Wedgwood.
      Acked-by: NChris Wedgwood <cw@f00f.org>
      Signed-off-by: NBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      aaaade3f
    • B
      ide: use ata_id_current_chs_valid() · dd8f46f6
      Bartlomiej Zolnierkiewicz 提交于
      Replace open-coded checks by ata_id_current_chs_valid().
      
      There should be no functional changes caused by this patch.
      Signed-off-by: NBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      dd8f46f6
    • B
      ide: remove drive->driveid · 48fb2688
      Bartlomiej Zolnierkiewicz 提交于
      * Factor out HDIO_[OBSOLETE,GET]_IDENTITY ioctls handling
        to ide_get_identity_ioctl().
      
      * Use temporary buffer in ide_get_identity_ioctl() instead
        of accessing drive->id directly.
      
      * Add ide_id_to_hd_driveid() inline to convert raw id into
        struct hd_driveid format (needed on big-endian).
      
      * Use ide_id_to_hd_driveid() in ide_get_identity_ioctl(),
        cleanup ide_fix_driveid() and switch ide to use use raw id.
      
      * Remove no longer needed drive->driveid.
      
        This leaves us with 3 users of struct hd_driveid in tree:
        - arch/um/drivers/ubd_kern.c
        - drivers/block/xsysace.c
        - drivers/usb/storage/isd200.c
      
      While at it:
      
      * Use ata_id_u{32,64}() and ata_id_has_{dma,lba,iordy}() macros.
      
      There should be no functional changes caused by this patch.
      Signed-off-by: NBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      48fb2688
    • B
      ide: make drive->id an union (take 2) · 4dde4492
      Bartlomiej Zolnierkiewicz 提交于
      Make drive->id an unnamed union so id can be accessed either by using
      'u16 *id' or 'struct hd_driveid *driveid'.  Then convert all existing
      drive->id users accordingly (using 'u16 *id' when possible).
      
      This is an intermediate step to make ide 'struct hd_driveid'-free.
      
      While at it:
      
      - Add missing KERN_CONTs in it821x.c.
      
      - Use ATA_ID_WORDS and ATA_ID_*_LEN defines.
      
      - Remove unnecessary checks for drive->id.
      
      - s/drive_table/table/ in ide_in_drive_list().
      
      - Cleanup ide_config_drive_speed() a bit.
      
      - s/drive1/dev1/ & s/drive0/dev0/ in ide_undecoded_slave().
      
      v2:
      Fix typo in drivers/ide/ppc/pmac.c. (From Stephen Rothwell)
      
      There should be no functional changes caused by this patch.
      Signed-off-by: NBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      4dde4492
    • B
      ide: cleanup ide_disk_init_mult_count() · df1f8378
      Bartlomiej Zolnierkiewicz 提交于
      * Remove superfluous checks for drive->mult_req.
      
      * No need to zero drive's fields.
      
      * Move the common code out of #ifdef scope.
      
      There should be no functional changes caused by this patch.
      Signed-off-by: NBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      df1f8378
  5. 09 10月, 2008 1 次提交
  6. 06 10月, 2008 1 次提交
  7. 25 7月, 2008 5 次提交
  8. 24 7月, 2008 8 次提交