07 May, 2008

10 commits

  • When HMAC gets a key longer than the block size of the hash, it needs
    to feed it as input to the hash to reduce it to a fixed length. As
    it is HMAC converts the key to a scatter and gather list. However,
    this doesn't work on certain platforms if the key is not allocated
    via kmalloc. For example, the keys from tcrypt are stored in the
    rodata section and this causes it to fail with HMAC on x86-64.

    This patch fixes this by copying the key to memory obtained via
    kmalloc before hashing it.

    Signed-off-by: Herbert Xu

    Herbert Xu
     
  • This reverts commit 22eecde2f9034764a3fd095eecfa3adfb8ec9a98. Uli
    reports that it breaks UML on x86-64 with the Fedora 8 gcc (gcc 4.1.2),
    causing a crash on startup. See

    http://marc.info/?l=linux-kernel&m=121011722806093&w=2

    for a trace.

    Reported-by: Ulrich Drepper
    Cc: Ingo Molnar
    Cc: Thomas Gleixner
    Cc: Andrew Morton
    Signed-off-by: Linus Torvalds

    Linus Torvalds
     
  • if ((drv->entry.next != drv->entry.prev) ||
    (drv->entry.next != NULL)) {

    warns list_empty(&drv->entry).

    Signed-off-by: OGAWA Hirofumi
    Cc: Greg KH
    Cc: Len Brown
    [ Version 2 totally redone based on suggestions from Linus & Greg ]
    Signed-off-by: Linus Torvalds

    OGAWA Hirofumi
     
  • Commit 33dcdac2df54e66c447ae03f58c95c7251aa5649 ("kill ->put_inode")
    removed the final use of i_op->put_inode, but left the now totally
    unused "op" variable in iput().

    Get rid of it.

    Signed-off-by: Linus Torvalds

    Linus Torvalds
     
  • Fix warning from pmd_bad() at bootup on a HIGHMEM64G HIGHPTE x86_32.

    That came from 9fc34113f6880b215cbea4e7017fc818700384c2 x86: debug pmd_bad();
    but we understand now that the typecasting was wrong for PAE in the previous
    version: pagetable pages above 4GB looked bad and stopped Arjan from booting.

    And revert that cded932b75ab0a5f9181ee3da34a0a488d1a14fd x86: fix pmd_bad
    and pud_bad to support huge pages. It was the wrong way round: we shouldn't
    weaken every pmd_bad and pud_bad check to let huge pages slip through - in
    part they check that we _don't_ have a huge page where it's not expected.

    Put the x86 pmd_bad() and pud_bad() definitions back to what they have long
    been: they can be improved (x86_32 should use PTE_MASK, to stop PAE thinking
    junk in the upper word is good; and x86_64 should follow x86_32's stricter
    comparison, to stop thinking any subset of required bits is good); but that
    should be a later patch.

    Fix Hans' good observation that follow_page() will never find pmd_huge()
    because that would have already failed the pmd_bad test: test pmd_huge in
    between the pmd_none and pmd_bad tests. Tighten x86's pmd_huge() check?
    No, once it's a hugepage entry, it can get quite far from a good pmd: for
    example, PROT_NONE leaves it with only ACCESSED of the KERN_PGTABLE bits.

    However... though follow_page() contains this and another test for huge
    pages, so it's nice to keep it working on them, where does it actually get
    called on a huge page? get_user_pages() checks is_vm_hugetlb_page(vma) to
    to call alternative hugetlb processing, as does unmap_vmas() and others.

    Signed-off-by: Hugh Dickins
    Earlier-version-tested-by: Ingo Molnar
    Cc: Thomas Gleixner
    Cc: Jeff Chua
    Cc: Hans Rosenfeld
    Cc: Arjan van de Ven
    Signed-off-by: Linus Torvalds

    Hugh Dickins
     
  • * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6:
    [PATCH] fix SMP ordering hole in fcntl_setlk()
    [PATCH] kill ->put_inode
    [PATCH] fix reservation discarding in affs

    Linus Torvalds
     
  • fcntl_setlk()/close() race prevention has a subtle hole - we need to
    make sure that if we *do* have an fcntl/close race on SMP box, the
    access to descriptor table and inode->i_flock won't get reordered.

    As it is, we get STORE inode->i_flock, LOAD descriptor table entry vs.
    STORE descriptor table entry, LOAD inode->i_flock with not a single
    lock in common on both sides. We do have BKL around the first STORE,
    but check in locks_remove_posix() is outside of BKL and for a good
    reason - we don't want BKL on common path of close(2).

    Solution is to hold ->file_lock around fcheck() in there; that orders
    us wrt removal from descriptor table that preceded locks_remove_posix()
    on close path and we either come first (in which case eviction will be
    handled by the close side) or we'll see the effect of close and do
    eviction ourselves. Note that even though it's read-only access,
    we do need ->file_lock here - rcu_read_lock() won't be enough to
    order the things.

    Signed-off-by: Al Viro

    Al Viro
     
  • And with that last patch to affs killing the last put_inode instance we
    can finally, after many years of transition kill this racy and awkward
    interface.

    (It's kinda funny that even the description in
    Documentation/filesystems/vfs.txt was entirely wrong..)

    Also remove a very misleading comment above the defintion of
    struct super_operations.

    Signed-off-by: Christoph Hellwig
    Signed-off-by: Al Viro

    Christoph Hellwig
     
  • - remove affs_put_inode, so preallocations aren't discared unnecessarily
    often.
    - remove affs_drop_inode, it's called with a spinlock held, so it can't
    use a mutex.
    - make i_opencnt atomic
    - avoid direct b_count manipulations
    - a few allocation failure fixes, so that these are more gracefully
    handled now.
    Signed-off-by: Roman Zippel
    Signed-off-by: Christoph Hellwig
    Signed-off-by: Al Viro

    Roman Zippel
     
  • * 'upstream-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jgarzik/libata-dev: (27 commits)
    pata_atiixp: Don't disable
    sata_inic162x: update intro comment, up the version and drop EXPERIMENTAL
    sata_inic162x: add cardbus support
    sata_inic162x: kill now unused SFF related stuff
    sata_inic162x: use IDMA for ATAPI commands
    sata_inic162x: use IDMA for non DMA ATA commands
    sata_inic162x: kill now unused bmdma related stuff
    sata_inic162x: use IDMA for ATA_PROT_DMA
    sata_inic162x: update TF read handling
    sata_inic162x: add / update constants
    sata_inic162x: misc clean ups
    sata_mv use hweight16() for bit counting (V2)
    sata_mv NCQ-EH for FIS-based switching
    sata_mv delayed eh handling
    libata: export ata_eh_analyze_ncq_error
    sata_mv new mv_port_intr function
    sata_mv fix mv_host_intr bug for hc_irq_cause
    sata_mv NCQ and SError fixes for mv_err_intr
    sata_mv rearrange mv_config_fbs
    sata_mv errata workaround for sata25 part 1
    ...

    Linus Torvalds
     

06 May, 2008

30 commits

  • A couple of distributions (Fedora, Ubuntu) were having weird problems with the
    ATI IXP series PATA controllers being reported as simplex. At the heart of
    the problem is that both distros ignored the recommendations to load pata_acpi
    and ata_generic *AFTER* specific host drivers.

    The underlying cause however is that if you D3 and then D0 an ATI IXP it
    helpfully throws away some configuration and won't let you rewrite it.

    Add checks to ata_generic and pata_acpi to pin ATIIXP devices. Possibly the
    real answer here is to quirk them and pin them, but right now we can't do that
    before they've been pcim_enable()'d by a driver.

    I'm indebted to David Gero for this. His bug report not only reported the
    problem but identified the cause correctly and he had tested the right values
    to prove what was going on

    [If you backport this for 2.6.24 you will need to pull in the 2.6.25
    removal of the bogus WARN_ON() in pcim_enagle]

    Signed-off-by: Alan Cox
    Tested-by: David Gero
    Signed-off-by: Andrew Morton
    Signed-off-by: Jeff Garzik

    Alan Cox
     
  • sata_inic162x is now ready for production use. Bump the version,
    explain what's working and what's not and drop EXPERIMENTAL.

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

    Tejun Heo
     
  • When attached to cardbus, mmio region is at BAR 1. Other than that,
    everything else is the same. Add support for it.

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

    Tejun Heo
     
  • sata_inic162x now doesn't use any SFF features. Remove all SFF
    related stuff.

    * Mask unsolicited ATA interrupts. This removes our primary source of
    spurious interrupts and spurious interrupt handling can be tightened
    up. There's no need to clear ATA interrupts by reading status
    register either.

    * Don't dance with IDMA_CTL_ATA_NIEN and simplify accesses to
    IDMA_CTL.

    * Inherit from sata_port_ops instead of ata_sff_port_ops.

    * Don't initialize or use ioaddr. There's no need to map BAR0-4
    anymore.

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

    Tejun Heo
     
  • Use IDMA for ATAPI commands. Write and some misc commands time out
    when executed using ATAPI_PROT_DMA but ATAPI_PROT_PIO works fine. As
    PIO is driven by DMA too, it doesn't make any noticeable difference
    for native SATA devices. inic_check_atapi_dma() is implemented to
    force PIO for those ATAPI commands.

    After this change, sata_inic162x issues all commands using IDMA.

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

    Tejun Heo
     
  • Use IDMA for PIO and non-data commands. This allows sata_inic162x to
    safely drive LBA48 devices. Kill inic_dev_config() which contains
    code to reject LBA48 devices.

    With this change, status checking in inic_qc_issue() to avoid hard
    lock up after hotplug can go away too.

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

    Tejun Heo
     
  • sata_inic162x doesn't use BMDMA anymore. Kill bmdma related stuff.

    * prdctl manipulation

    * port IRQ mask manipulation

    * inherit ATA_BASE_SHT instead of ATA_BMDMA_SHT

    * BMDMA methods

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

    Tejun Heo
     
  • The modified driver on initio site has enough clue on how to use IDMA.
    Use IDMA for ATA_PROT_DMA.

    * LBA48 now works as long as it uses DMA (LBA48 devices still aren't
    allowed as it can destroy data if PIO is used for any reason).

    * No need to mask IRQs for read DMAs as IDMA_DONE is properly raised
    after transfer to memory is actually completed. There will be some
    spurious interrupts but host_intr will handle it correctly and
    manipulating port IRQ mask interacts badly with the other port for
    some reason, so command type dependent port IRQ masking is not used
    anymore.

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

    Tejun Heo
     
  • inic162x can't reliably read back TF or at least we don't know how to
    do it yet. The only values which seem reliable are status and error.
    This patch updates access to TF.

    * implement inic_tf_read() which reads the TF area in mmio area

    * implement custom inic_qc_fill_rtf() which only returns true if
    status indicates device error. it'll be returning bogus addresses
    for device errors but it'll be able to report why it failed at
    least.

    * implement custom inic_check_ready() and use ata_wait_after_reset()
    instead of the SFF version.

    * use inic_tf_read() for classification.

    This is not perfect but it fixes hotplug detection failure and at
    least makes the driver report 0's instead of random garbages while
    reporting valid status and error for device errors.

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

    Tejun Heo
     
  • * add a bunch of constants, most are from the datasheet, a few
    undocumented ones are from initio's modified driver

    * HCTL_PWRDWN is bit 12 not 13

    This is in preparation of further inic162x updates.

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

    Tejun Heo
     
  • * use larger indents for structure member definitions

    * kill unused variable @addr in inic_scr_write()

    * kill unnecessary flushes in inic_freeze/thaw()

    * kill buggy explicit kfree() on devres managed port private data

    This is in preparation of further inic162x updates.

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

    Tejun Heo
     
  • Some tidying as suggested by Grant Grundler.

    Nuke local bit-counting function from sata_mv in favour of using hweight16().
    Also add a short explanation for the 15msec timeout used when waiting for empty/idle.

    Signed-off-by: Mark Lord
    Signed-off-by: Jeff Garzik

    Mark Lord
     
  • Convert sata_mv's EH for FIS-based switching (FBS) over to the
    sequence recommended by Marvell. This enables us to catch/analyze
    multiple failed links on a port-multiplier when using NCQ.

    To do this, we clear the ERR_DEV bit in the EDMA Halt-Conditions register,
    so that the EDMA engine doesn't self-disable on the first NCQ error.

    Our EH code sets the MV_PP_FLAG_DELAYED_EH flag to prevent new commands
    being queued while we await completion of all outstanding NCQ commands
    on all links of the failed PM.

    The SATA Test Control register tells us which links have failed,
    so we must only wait for any other active links to finish up
    before we stop the EDMA and run the .error_handler afterward.

    The patch also includes skeleton code for handling of non-NCQ FBS operation.
    This is more for documentation purposes right now, as that mode is not yet
    enabled in sata_mv.

    Signed-off-by: Mark Lord
    Signed-off-by: Jeff Garzik

    Mark Lord
     
  • Introduce a new "delayed error handling" mechanism in sata_mv,
    to enable us to eventually deal with multiple simultaneous NCQ
    failures on a single host link when a PM is present.

    This involves a port flag (MV_PP_FLAG_DELAYED_EH) to prevent new
    commands being queued, and a pmp bitmap to indicate which pmp links
    had NCQ errors.

    The new mv_pmp_error_handler() uses those values to invoke
    ata_eh_analyze_ncq_error() on each failed link, prior to freezing
    the port and passing control to sata_pmp_error_handler().

    This is based upon a strategy suggested by Tejun.

    For now, we just implement the delayed mechanism.
    The next patch in this series will add the multiple-NCQ EH code
    to take advantage of it.

    Signed-off-by: Mark Lord
    Signed-off-by: Jeff Garzik

    Mark Lord
     
  • Export ata_eh_analyze_ncq_error() for subsequent use by sata_mv,
    as suggested by Tejun.

    Signed-off-by: Mark Lord
    Signed-off-by: Jeff Garzik

    Mark Lord
     
  • Separate out the inner loop body of mv_host_intr()
    into it's own function called mv_port_intr().

    This should help maintainabilty.

    Signed-off-by: Mark Lord
    Signed-off-by: Jeff Garzik

    Mark Lord
     
  • Remove the unwanted reads of hc_irq_cause from mv_host_intr(),
    thereby removing a bug whereby we were not always reading it when needed..

    Signed-off-by: Mark Lord
    Signed-off-by: Jeff Garzik

    Mark Lord
     
  • Sigh. Undo some earlier changes to mv_port_intr(),
    so that we now read/clear SError again in all cases.

    Arrange the top of the function to be as close as possible
    to what we need for a later update (in this series) for ERR_DEV handling.

    Fix things so that libata-eh can attempt a READ_LOG_EXT_10H
    in response to a failed NCQ command, by just doing a local
    mv_eh_freeze() rather than ata_port_freeze().

    This will now fully handle NCQ errors much of the time,
    but more fixes are needed for FBS/PMP, and for certain chip errata.

    Signed-off-by: Mark Lord
    Signed-off-by: Jeff Garzik

    Mark Lord
     
  • Rearrange mv_config_fbs() to more closely follow the (corrected) datasheet
    recommendations for NCQ and FIS-based switching (FBS).

    Also, maintain a port flag to let us know when FBS is enabled.
    We will make more use of that flag later in this patch series.

    Signed-off-by: Mark Lord
    Signed-off-by: Jeff Garzik

    Mark Lord
     
  • Part 1 of workaround for errata "sata#25" for the 60x1 series
    (the second half of this errata workaround is still in development.

    Bit22 of the GPIO port has to be set "on" when in NCQ mode.

    Signed-off-by: Mark Lord
    Signed-off-by: Jeff Garzik

    Mark Lord
     
  • The EDMA engine cannot tolerate a mix of NCQ/non-NCQ commands,
    and cannot be used for PIO at all. So we need to prevent libata
    from trying to feed us such mixtures.

    Introduce mv_qc_defer() for this purpose, and use it for all chip versions.

    Signed-off-by: Mark Lord
    Signed-off-by: Jeff Garzik

    Mark Lord
     
  • When performing EH, it is recommended to wait for the EDMA engine
    to empty out requests-in-progress before disabling EDMA.

    Introduce code to poll the EDMA_STATUS register for idle/empty bits
    before disabling EDMA. For non-EH operation, this will normally exit
    without delay, other than the register read.

    A later series of patches may focus on eliminating this and various
    other register reads (when possible) throughout the driver,
    but for now we're focussing on solid reliablity.

    Signed-off-by: Mark Lord
    Signed-off-by: Jeff Garzik

    Mark Lord
     
  • Some of the GenIIe EDMA optimizations should not be used
    for non-PCI (SOC) devices, and nor for certain configurations
    of conventional PCI (non PCI-X, PCIe) buses.

    Logic taken/simplified from that in the Marvell proprietary driver.

    Signed-off-by: Mark Lord
    Signed-off-by: Jeff Garzik

    Mark Lord
     
  • More cosmetic changes; no code changes.

    -- try and improve consistency of naming.
    -- add missing _OFS to tails of register offset definitions.
    -- rename mv_setup_ifctl() to mv_setup_ifcfg(), since that's what it really does.
    -- remove/move some dead comments

    Signed-off-by: Mark Lord
    Signed-off-by: Jeff Garzik

    Mark Lord
     
  • This patch adds Intel SCH chipsets (AF82US15W, AF82US15L, AF82UL11L)
    PATA controller support.

    Signed-off-by: Alek Du
    Signed-off-by: Jeff Garzik

    Alek Du
     
  • On certain configurations (certain macbooks), even though all the
    conditions for SIDPR access described in the datasheet are met,
    actually reading those registers just returns 0 and have no effect on
    write. Verify SIDPR is actually working before enabling it.

    This is reported by Ryan Roth in bz#10512.

    Signed-off-by: Tejun Heo
    Cc: Ryan Roth
    Signed-off-by: Jeff Garzik

    Tejun Heo
     
  • Some controllers (jmb and inic162x) use 0x77 and 0x7f to indicate that
    the device isn't ready yet. It looks like they use 0xff if device
    presence is detected but connection isn't established. 0x77 or 0x7f
    after connection is established and use the value from signature FIS
    after receiving it.

    This patch implements ata_check_ready(), which takes TF status value
    and determines whether the port is ready or not considering the above
    and other conditions, and use it in @check_ready() functions. This is
    safe as both 0x77 and 0x7f aren't valid ready status value even though
    they have BSY bit cleared.

    This fixes hot plug detection failures which can be triggered with
    certain drives if they aren't already spun up when the data connector
    is hot plugged.

    Tested on sil, sil24, ahci (jmb/ich), piix and inic162x combined with
    eight drives from all major vendors.

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

    Tejun Heo
     
  • * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6:
    net_cls_act: act_simple dont ignore realloc code
    iwlwifi: make IWLWIFI a tristate
    Revert "atm: Do not free already unregistered net device."
    dccp: return -EINVAL on invalid feature length
    irda: fix !PNP support for drivers/net/irda/smsc-ircc2.c
    irda: fix !PNP support in drivers/net/irda/nsc-ircc.c
    net_cls_act: Make act_simple use of netlink policy.
    ip: Use inline function dst_metric() instead of direct access to dst->metric[]
    ip: Make use of the inline function dst_metric_locked()
    atm: Bad locking on br2684_devs modifications.
    atm: Do not free already unregistered net device.
    mac80211: Do not free net device after it is unregistered.
    bridge: Consolidate error paths in br_add_bridge().
    bridge: Net device leak in br_add_bridge().
    niu: Fix probing regression for maramba on-board chips.
    lapbeth: Release ->ethdev when unregistering device.
    xfrm: convert empty xfrm_audit_* macros to functions
    net: Fix useless comment reference loop.
    sch_htb: remove from event queue in htb_parent_to_leaf()

    Linus Torvalds
     
  • reallocation of the policy data was being ignored. It could fail.
    Simplify so that there is no need for reallocating.

    Signed-off-by: Jamal Hadi Salim
    Signed-off-by: David S. Miller

    Jamal Hadi Salim
     
  • IWLWIFI should be a tristate so that if IWLCORE and/or IWL3945 are m
    and none of them is y kbuild doesn't create an empty
    drivers/net/wireless/built-in.o

    This patch also removes the pointless "default n".

    Signed-off-by: Adrian Bunk
    Signed-off-by: David S. Miller

    Adrian Bunk