1. 09 12月, 2008 1 次提交
    • J
      ATA: piix, fix pointer deref on suspend · 9ac62126
      Jiri Slaby 提交于
      Hi,
      
      I've found this issue in the mmotm 2008-12-02-17-08.
      
      --
      
      Commit
      ata_piix: add borked Tecra M4 to broken suspend list
      introduced DMI variables checking, but they can be null, so that
      we possibly dereference null.
      
      Check if they are null and avoid checks in that case.
      
      Solves:
      BUG: unable to handle kernel NULL pointer dereference at 0000000000000000
      IP: [<ffffffff8043da97>] piix_pci_device_suspend+0x117/0x230
      Signed-off-by: NJiri Slaby <jirislaby@gmail.com>
      Cc: Jeff Garzik <jgarzik@redhat.com>
      Cc: Alexandru Romanescu <a_romanescu@yahoo.co.uk>
      Cc: Tejun Heo <tj@kernel.org>
      Signed-off-by: NJeff Garzik <jgarzik@redhat.com>
      9ac62126
  2. 02 12月, 2008 1 次提交
    • T
      ata_piix: add borked Tecra M4 to broken suspend list · 1eedb4a9
      Tejun Heo 提交于
      Tecra M4 sometimes forget what it is and reports bogus data via DMI
      which makes the machine evade broken suspend matching and thus fail
      suspend/resume.  This patch updates piix_broken_suspend() such that it
      can match such case.  As the borked DMI data is a bit generic,
      matching many entries to make the match more specific is necessary.
      As the usual DMI matching is limited to four entries, this patch uses
      hard coded manual matching.
      
      This is reported by Alexandru Romanescu.
      Signed-off-by: NTejun Heo <tj@kernel.org>
      Cc: Alexandru Romanescu <a_romanescu@yahoo.co.uk>
      Signed-off-by: NJeff Garzik <jgarzik@redhat.com>
      1eedb4a9
  3. 31 10月, 2008 1 次提交
    • R
      ATA: remove excess kernel-doc notation · 5b97fbd0
      Randy Dunlap 提交于
      Remove excess kernel-doc function parameter notation from drivers/ata/:
      
      Warning(drivers/ata/libata-core.c:1622): Excess function parameter or struct member 'fn' description in 'ata_pio_queue_task'
      Warning(drivers/ata/libata-core.c:4655): Excess function parameter or struct member 'err_mask' description in 'ata_qc_complete'
      Warning(drivers/ata/ata_piix.c:751): Excess function parameter or struct member 'udma' description in 'do_pata_set_dmamode'
      Signed-off-by: NRandy Dunlap <randy.dunlap@oracle.com>
      Signed-off-by: NJeff Garzik <jgarzik@redhat.com>
      5b97fbd0
  4. 28 10月, 2008 1 次提交
  5. 29 9月, 2008 4 次提交
  6. 14 9月, 2008 1 次提交
  7. 22 8月, 2008 1 次提交
  8. 31 7月, 2008 1 次提交
  9. 19 6月, 2008 1 次提交
  10. 04 6月, 2008 1 次提交
  11. 31 5月, 2008 1 次提交
    • T
      ata_piix: fix macbook ich8m problems · 23cf296e
      Tejun Heo 提交于
      ICH8M on macbooks are peculiar in that some of them lock up when the
      second port is enabled, some return bogus values on SIDPR access while
      yet others hang on SIDPR access.  Also, the ich8m_apple_sata entry was
      wrongly added below generic ich8m entry making it virtually useless.
      
      This patch works around macbook ich8m problems by
      
      * moving ich8m_apple_sata entry above generic ich8m entry
      * dropping PIIX_FLAG_SIDPR from ich8m_apple_sata
      * adding subsystem 106b:00a1 as ich8m_apple_sata
      
      Reported and tested by MATSUBAYASHI.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      Cc: MATSUBAYASHI 'Shaolin' Kohji <shaolin@rhythmaning.org>
      Signed-off-by: NJeff Garzik <jgarzik@redhat.com>
      23cf296e
  12. 06 5月, 2008 1 次提交
  13. 25 4月, 2008 1 次提交
  14. 18 4月, 2008 9 次提交
    • T
      libata: implement and use sata_std_hardreset() · 57c9efdf
      Tejun Heo 提交于
      Implement sata_std_hardreset(), which simply wraps around
      sata_link_hardreset().  sata_std_hardreset() becomes new standard
      hardreset method for sata_port_ops and sata_sff_hardreset() moves from
      ata_base_port_ops to ata_sff_port_ops, which is where it really
      belongs.
      
      ata_is_builtin_hardreset() is added so that both
      ata_std_error_handler() and ata_sff_error_handler() skip both builtin
      hardresets if SCR isn't accessible.
      
      piix_sidpr_hardreset() in ata_piix.c is identical to
      sata_std_hardreset() in functionality and got replaced with the
      standard function.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      57c9efdf
    • T
      libata: move generic hardreset code from sata_sff_hardreset() to sata_link_hardreset() · 9dadd45b
      Tejun Heo 提交于
      sata_sff_hardreset() contains link readiness wait logic which isn't
      SFF specific.  Move that part into sata_link_hardreset(), which now
      takes two more parameters - @online and @check_ready.  Both are
      optional.  The former is out parameter for link onlineness after
      reset.  The latter is used to wait for link readiness after hardreset.
      
      Users of sata_link_hardreset() is updated to use new funtionality and
      ahci_hardreset() is updated to use sata_link_hardreset() instead of
      sata_sff_hardreset().  This doesn't really cause any behavior change.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      9dadd45b
    • T
      libata: rename SFF functions · 9363c382
      Tejun Heo 提交于
      SFF functions have confusing names.  Some have sff prefix, some have
      bmdma, some std, some pci and some none.  Unify the naming by...
      
      * SFF functions which are common to both BMDMA and non-BMDMA are
        prefixed with ata_sff_.
      
      * SFF functions which are specific to BMDMA are prefixed with
        ata_bmdma_.
      
      * SFF functions which are specific to PCI but apply to both BMDMA and
        non-BMDMA are prefixed with ata_pci_sff_.
      
      * SFF functions which are specific to PCI and BMDMA are prefixed with
        ata_pci_bmdma_.
      
      * Drop generic prefixes from LLD specific routines.  For example,
        bfin_std_dev_select -> bfin_dev_select.
      
      The following renames are noteworthy.
      
        ata_qc_issue_prot() -> ata_sff_qc_issue()
        ata_pci_default_filter() -> ata_bmdma_mode_filter()
        ata_dev_try_classify() -> ata_sff_dev_classify()
      
      This rename is in preparation of separating SFF support out of libata
      core layer.  This patch strictly renames functions and doesn't
      introduce any behavior difference.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      9363c382
    • T
      ata_piix: kill ich6_sata_ahci and clean up · 9c0bf675
      Tejun Heo 提交于
      ich6_sata_ahci and ich6_sata are identical.  Kill ich6_sata_ahci and
      drop _ahci postfixes from controller ids, which doesn't really mean
      anything at this point.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      9c0bf675
    • T
      ata_piix: don't attach to ICH6M in ahci mode · 5016d7d2
      Tejun Heo 提交于
      ata_piix when attached to ICH6M in AHCI mode doesn't provide any
      benefit over using ahci and has detection problems.  Don't let
      ata_piix claim ICH6M if it's in AHCI mode.
      
      This change makes ICH6R the only one which ata_piix can attach to even
      when it's in ahci mode which is necessary as some devices don't work
      properly under ahci mode.  Drop PIIX_FLAG_AHCI and match the
      controller directly so that piix_disable_ahci() is called only for it.
      
      This change makes PIIX_SCC no longer used and it gets dropped too.
      
      This fixes bz 9491.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      Cc: Robert M. Albrecht <romal@gmx.de>
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      5016d7d2
    • T
      libata: make reset related methods proper port operations · a1efdaba
      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: NTejun Heo <htejun@gmail.com>
      a1efdaba
    • T
      libata: implement and use ops inheritance · 029cfd6b
      Tejun Heo 提交于
      libata lets low level drivers build ata_port_operations table and
      register it with libata core layer.  This allows low level drivers
      high level of flexibility but also burdens them with lots of
      boilerplate entries.
      
      This becomes worse for drivers which support related similar
      controllers which differ slightly.  They share most of the operations
      except for a few.  However, the driver still needs to list all
      operations for each variant.  This results in large number of
      duplicate entries, which is not only inefficient but also error-prone
      as it becomes very difficult to tell what the actual differences are.
      
      This duplicate boilerplates all over the low level drivers also make
      updating the core layer exteremely difficult and error-prone.  When
      compounded with multi-branched development model, it ends up
      accumulating inconsistencies over time.  Some of those inconsistencies
      cause immediate problems and fixed.  Others just remain there dormant
      making maintenance increasingly difficult.
      
      To rectify the problem, this patch implements ata_port_operations
      inheritance.  To allow LLDs to easily re-use their own ops tables
      overriding only specific methods, this patch implements poor man's
      class inheritance.  An ops table has ->inherits field which can be set
      to any ops table as long as it doesn't create a loop.  When the host
      is started, the inheritance chain is followed and any operation which
      isn't specified is taken from the nearest ancestor which has it
      specified.  This operation is called finalization and done only once
      per an ops table and the LLD doesn't have to do anything special about
      it other than making the ops table non-const such that libata can
      update it.
      
      libata provides four base ops tables lower drivers can inherit from -
      base, sata, pmp, sff and bmdma.  To avoid overriding these ops
      accidentaly, these ops are declared const and LLDs should always
      inherit these instead of using them directly.
      
      After finalization, all the ops table are identical before and after
      the patch except for setting .irq_handler to ata_interrupt in drivers
      which didn't use to.  The .irq_handler doesn't have any actual effect
      and the field will soon be removed by later patch.
      
      * sata_sx4 is still using old style EH and currently doesn't take
        advantage of ops inheritance.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      029cfd6b
    • T
      libata: implement and use SHT initializers · 68d1d07b
      Tejun Heo 提交于
      libata lets low level drivers build scsi_host_template and register it
      to the SCSI layer.  This allows low level drivers high level of
      flexibility but also burdens them with lots of boilerplate entries.
      
      This patch implements SHT initializers which can be used to initialize
      all the boilerplate entries in a sht.  Three variants of them are
      implemented - BASE, BMDMA and NCQ - for different types of drivers.
      Note that entries can be overriden by putting individual initializers
      after the helper macro.
      
      All sht tables are identical before and after this patch.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      68d1d07b
    • T
      libata: normalize port_info, port_operations and sht tables · 6bd99b4e
      Tejun Heo 提交于
      Over the time, port info, ops and sht structures developed quite a bit
      of inconsistencies.  This patch updates drivers.
      
      * Enable/disable_pm callbacks added to all ahci ops tables.
      
      * Every driver for SFF controllers now uses ata_sff_port_start()
        instead of ata_port_start() unless the driver has custom
        implementation.
      
      * Every driver for SFF controllers now uses ata_pci_default_filter()
        unless the driver has custom implementation.
      
      * Removed an odd port_info->sht initialization from ata_piix.c.
        Likely a merge byproduct.
      
      * A port which has ATA_FLAG_SATA set doesn't need to set cable_detect
        to ata_cable_sata().  Remove it from via and mv port ops.
      
      * Some drivers had unnecessary .max_sectors initialization which is
        ignored and was missing .slave_destroy callback.  Fixed.
      
      * Removed unnecessary sht initializations port_info's.
      
      * Removed onsolete scsi device suspend/resume callbacks from
        pata_bf54x.
      
      * No reason to set ata_pci_default_filter() and bmdma functions for
        PIO-only drivers.  Remove those callbacks and replace
        ata_bmdma_irq_clear with ata_noop_irq_clear.
      
      * pata_platform sets port_start to ata_dummy_ret0.  port_start can
        just be set to NULL.
      
      * sata_fsl supports NCQ but was missing qc_defer.  Fixed.
      
      * pata_rb600_cf implements dummy port_start.  Removed.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      6bd99b4e
  15. 24 2月, 2008 1 次提交
    • R
      PM: Introduce PM_EVENT_HIBERNATE callback state · 3a2d5b70
      Rafael J. Wysocki 提交于
      During the last step of hibernation in the "platform" mode (with the
      help of ACPI) we use the suspend code, including the devices'
      ->suspend() methods, to prepare the system for entering the ACPI S4
      system sleep state.
      
      But at least for some devices the operations performed by the
      ->suspend() callback in that case must be different from its operations
      during regular suspend.
      
      For this reason, introduce the new PM event type PM_EVENT_HIBERNATE and
      pass it to the device drivers' ->suspend() methods during the last phase
      of hibernation, so that they can distinguish this case and handle it as
      appropriate.  Modify the drivers that handle PM_EVENT_SUSPEND in a
      special way and need to handle PM_EVENT_HIBERNATE in the same way.
      
      These changes are necessary to fix a hibernation regression related
      to the i915 driver (ref. http://lkml.org/lkml/2008/2/22/488).
      Signed-off-by: NRafael J. Wysocki <rjw@sisk.pl>
      Acked-by: NPavel Machek <pavel@ucw.cz>
      Tested-by: NJeff Chua <jeff.chua.linux@gmail.com>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      3a2d5b70
  16. 16 2月, 2008 1 次提交
  17. 06 2月, 2008 1 次提交
    • A
      ata_piix.c:piix_init_one() must be __devinit · bc5468f5
      Adrian Bunk 提交于
      This patch fixes the following section mismatches:
      
      <--  snip  -->
      
      ...
      WARNING: drivers/ata/built-in.o(.text+0x15072): Section mismatch in reference from the function piix_init_one() to the function .devinit.text:piix_init_sata_map()
      WARNING: drivers/ata/built-in.o(.text+0x150dd): Section mismatch in reference from the function piix_init_one() to the function .devinit.text:piix_init_pcs()
      WARNING: drivers/ata/built-in.o(.text+0x150e5): Section mismatch in reference from the function piix_init_one() to the function .devinit.text:piix_init_sidpr()
      WARNING: drivers/ata/built-in.o(.text+0x15107): Section mismatch in reference from the function piix_init_one() to the function .devinit.text:piix_check_450nx_errata()
      ...
      
      <--  snip  -->
      Signed-off-by: NAdrian Bunk <bunk@kernel.org>
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      bc5468f5
  18. 03 2月, 2008 1 次提交
  19. 02 2月, 2008 2 次提交
  20. 23 1月, 2008 5 次提交
  21. 15 1月, 2008 1 次提交
  22. 08 12月, 2007 1 次提交
  23. 02 12月, 2007 1 次提交
  24. 24 11月, 2007 1 次提交