20 Aug, 2008

1 commit


07 Aug, 2008

1 commit


03 Aug, 2008

1 commit

  • Recently, a bug having to do with the alignment of transaction response
    data was fixed. However, some apps such as libdc1394 relied on the
    presence of that bug in order to function correctly. In order to stay
    compatible with old versions of those apps, this patch preserves the bug
    in cases where it is harmless to normal operation (such as the single
    quadlet read) due to a simple duplication of data. This guarantees
    maximum compatability for those users who are using the old app with the
    fixed kernel.

    Signed-off-by: David Moore
    Signed-off-by: Stefan Richter

    David Moore
     

28 Jul, 2008

1 commit

  • * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ieee1394/linux1394-2.6:
    firewire: state userland requirements in Kconfig help
    firewire: avoid memleak after phy config transmit failure
    firewire: fw-ohci: TSB43AB22/A dualbuffer workaround
    firewire: queue the right number of data
    firewire: warn on unfinished transactions during card removal
    firewire: small fw_fill_request cleanup
    firewire: fully initialize fw_transaction before marking it pending
    firewire: fix race of bus reset with request transmission

    Linus Torvalds
     

27 Jul, 2008

1 commit

  • Add per-device dma_mapping_ops support for CONFIG_X86_64 as POWER
    architecture does:

    This enables us to cleanly fix the Calgary IOMMU issue that some devices
    are not behind the IOMMU (http://lkml.org/lkml/2008/5/8/423).

    I think that per-device dma_mapping_ops support would be also helpful for
    KVM people to support PCI passthrough but Andi thinks that this makes it
    difficult to support the PCI passthrough (see the above thread). So I
    CC'ed this to KVM camp. Comments are appreciated.

    A pointer to dma_mapping_ops to struct dev_archdata is added. If the
    pointer is non NULL, DMA operations in asm/dma-mapping.h use it. If it's
    NULL, the system-wide dma_ops pointer is used as before.

    If it's useful for KVM people, I plan to implement a mechanism to register
    a hook called when a new pci (or dma capable) device is created (it works
    with hot plugging). It enables IOMMUs to set up an appropriate
    dma_mapping_ops per device.

    The major obstacle is that dma_mapping_error doesn't take a pointer to the
    device unlike other DMA operations. So x86 can't have dma_mapping_ops per
    device. Note all the POWER IOMMUs use the same dma_mapping_error function
    so this is not a problem for POWER but x86 IOMMUs use different
    dma_mapping_error functions.

    The first patch adds the device argument to dma_mapping_error. The patch
    is trivial but large since it touches lots of drivers and dma-mapping.h in
    all the architecture.

    This patch:

    dma_mapping_error() doesn't take a pointer to the device unlike other DMA
    operations. So we can't have dma_mapping_ops per device.

    Note that POWER already has dma_mapping_ops per device but all the POWER
    IOMMUs use the same dma_mapping_error function. x86 IOMMUs use device
    argument.

    [akpm@linux-foundation.org: fix sge]
    [akpm@linux-foundation.org: fix svc_rdma]
    [akpm@linux-foundation.org: build fix]
    [akpm@linux-foundation.org: fix bnx2x]
    [akpm@linux-foundation.org: fix s2io]
    [akpm@linux-foundation.org: fix pasemi_mac]
    [akpm@linux-foundation.org: fix sdhci]
    [akpm@linux-foundation.org: build fix]
    [akpm@linux-foundation.org: fix sparc]
    [akpm@linux-foundation.org: fix ibmvscsi]
    Signed-off-by: FUJITA Tomonori
    Cc: Muli Ben-Yehuda
    Cc: Andi Kleen
    Cc: Thomas Gleixner
    Cc: Ingo Molnar
    Cc: Avi Kivity
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    FUJITA Tomonori
     

26 Jul, 2008

2 commits


25 Jul, 2008

1 commit

  • Isochronous reception in dualbuffer mode is reportedly broken with
    TI TSB43AB22A on x86-64. Descriptor addresses above 2G have been
    determined as the trigger:
    https://bugzilla.redhat.com/show_bug.cgi?id=435550

    Two fixes are possible:
    - pci_set_consistent_dma_mask(pdev, DMA_31BIT_MASK);
    at least when IR descriptors are allocated, or
    - simply don't use dualbuffer.
    This fix implements the latter workaround.

    But we keep using dualbuffer on x86-32 which won't give us highmen (and
    thus physical addresses outside the 31bit range) in coherent DMA memory
    allocations. Right now we could for example also whitelist PPC32, but
    DMA mapping implementation details are expected to change there.

    Signed-off-by: Stefan Richter
    Signed-off-by: Jarod Wilson

    Stefan Richter
     

20 Jul, 2008

1 commit

  • There will be 4 padding bytes in struct fw_cdev_event_response on some platforms
    The member:__u32 data will point to these padding bytes. While queue the
    response and data in complete_transaction in fw-cdev.c, it will queue like this:
    |response(excluding padding bytes)|4 padding bytes|4 padding bytes|data.
    It queue 4 extra bytes. That is to say it use "&response + sizeof(response)"
    while other place of kernel and userspace library use "&response + offsetof
    (typeof(response), data)". So it will lost the last 4 bytes of data. This patch
    can fix it while not changing the struct definition.

    Signed-off-by: JiSheng Zhang

    This fixes responses to outbound block read requests on 64bit architectures.
    Tested on i686, x86-64, and x86-64 with i686 userland, using firecontrol and
    gscanbus.

    Signed-off-by: Stefan Richter

    JiSheng Zhang
     

16 Jul, 2008

1 commit


14 Jul, 2008

11 commits

  • After card->done and card->work are completed, any remaining pending
    request would be a bug. We cannot safely complete a transaction at
    that point anymore.

    IOW card users must not drop their last fw_card reference (usually
    indirect references through fw_device references) before their last
    outbound transaction through that card was finished.

    Signed-off-by: Stefan Richter

    Stefan Richter
     
  • - better name for a function argument
    - removal of a local variable which became unnecessary after
    "fully initialize fw_transaction before marking it pending"

    Signed-off-by: Stefan Richter

    Stefan Richter
     
  • In theory, card->flush_timer could already access a transaction between
    fw_send_request()'s spin_unlock_irqrestore and the rest of what happens
    in fw_send_request(). This would happen if the process which sends the
    request is preempted and put to sleep right after spin_unlock_irqrestore
    for longer than 100ms.

    Therefore we fill in everything in struct fw_transaction at which the
    flush_timer might look at before we lift the lock.

    To do: Ensure that the timer does not pick up the transaction before
    the time of the AT request event plus split transaction timeout.

    Signed-off-by: Stefan Richter

    Stefan Richter
     
  • Reported by Jay Fenlason: A bus reset tasklet may call
    fw_flush_transactions and touch transactions (call their callback which
    will free them) while the context which submitted the transaction is
    still inserting it into the transmission queue.

    A simple solution to this problem is to _not_ "flush" the transactions
    because of a bus reset (complete the transcations as 'cancelled'). They
    will now simply time out (completed as 'cancelled' by the split-timeout
    timer).

    Jay Fenlason thought of this fix too but I was quicker to type it out.
    :-)

    Background:
    Contexts which access an instance of struct fw_transaction are:
    1. the submitter, until it inserted the packet which is embedded in the
    transaction into the AT req DMA,
    2. the AsReqTrContext tasklet when the request packet was acked by the
    responder node or transmission to the responder failed,
    3. the AsRspRcvContext tasklet when it found a request which matched
    an incoming response,
    4. the card->flush_timer when it picks up timed-out transactions to
    cancel them,
    5. the bus reset tasklet when it cancels transactions (this access is
    eliminated by this patch),
    6. a process which shuts down an fw_card (unregisters it from fw-core
    when the controller is unbound from fw-ohci) --- although in this
    case there shouldn't really be any transactions anymore because we
    wait until all card users finished their business with the card.

    All of these contexts run concurrently (except for the 6th, presumably).
    The 1st is safe against the 2nd and 3rd because of the way how a request
    packet is carefully submitted to the hardware. A race between 2nd and
    3rd has been fixed a while ago (bug 9617). The 4th is almost safe
    against 1st, 2nd, 3rd; there are issues with it if huge scheduling
    latencies occur, to be fixed separately. The 5th looks safe against
    2nd, 3rd, and 4th but is unsafe against 1st. Maybe this could be fixed
    with an explicit state variable in struct fw_transaction. But this
    would require fw_transaction to be rewritten as only dynamically
    allocatable object with reference counting --- not a good solution if we
    also can simply kill this 5th accessing context (replace it by the 4th).

    Signed-off-by: Stefan Richter

    Stefan Richter
     
  • Contrary to a comment in the source, request->ack of a broadcast write
    request can be ACK_PENDING. Hence the existing check is insufficient.

    Debug dmesg before:
    AR spd 0 tl 00, ffc0 -> ffff, ack_pending , QW req, fffff0000234 = ffffffff
    AT spd 0 tl 00, ffff -> ffc0, ack_complete, W resp
    And the requesting node (linux1394) reports an unsolicited response.

    Debug dmesg after:
    AR spd 0 tl 00, ffc0 -> ffff, ack_pending , QW req, fffff0000234 = ffffffff

    Signed-off-by: Stefan Richter

    Stefan Richter
     
  • This is a functionally equivalent replacement of the current reference
    counting of struct fw_card instances. It only converts it to common
    idioms as suggested by Kristian Høgsberg:
    - struct kref replaces atomic_t as the counter.
    - wait_for_completion is used to wait for all card users to complete.

    BTW, it may make sense to count card->flush_timer and card->work as
    card users too.

    Signed-off-by: Stefan Richter

    Stefan Richter
     
  • Signed-off-by: Stefan Richter

    Stefan Richter
     
  • Signed-off-by: Stefan Richter

    Stefan Richter
     
  • See IEEE 1394a clause 8.3.2.3.11.

    Signed-off-by: Stefan Richter

    Stefan Richter
     
  • This instructs sd_mod to send START STOP UNIT on suspend and resume,
    and on driver unbinding or unloading (including when the system is shut
    down).

    We don't do this though if multiple initiators may log in to the target.

    Signed-off-by: Stefan Richter
    Tested-by: Tino Keitel

    Stefan Richter
     
  • Reported by Tino Keitel: PL-3507 with firmware from Prolific does not
    spin down the disk on START STOP UNIT with power condition = 0 and start
    = 0. It does however work with power condition = 2 or 3.

    Also found while investigating this: DViCO Momobay CX-1 and FX-3A (TI
    TSB42AA9/A based) become unresponsive after START STOP UNIT with power
    condition = 0 and start = 0. They stay responsive if power condition is
    set when stopping the motor.

    Signed-off-by: Stefan Richter
    Tested-by: Tino Keitel

    Stefan Richter
     

28 Jun, 2008

1 commit


19 Jun, 2008

8 commits

  • Emphasize the recommendation to build only one stack.
    Trim the prompts to better fit into short attention spans.

    Signed-off-by: Stefan Richter

    Stefan Richter
     
  • If the low-level driver failed to initialize a card properly without
    noticing it, fw-core was blocked indefinitely when trying to send a
    PHY config packet. This hung up the events kernel thread, e.g. locked
    up keyboard input.
    https://bugzilla.redhat.com/show_bug.cgi?id=444694
    https://bugzilla.redhat.com/show_bug.cgi?id=446763

    This problem was introduced between 2.6.25 and 2.6.26-rc1 by commit
    2a0a2590498be7b92e3e76409c9b8ee722e23c8f "firewire: wait until PHY
    configuration packet was transmitted (fix bus reset loop)".

    The solution is to wait with timeout. I tested it with 7 different
    working controllers and 1 non-working controller. On the working ones,
    the packet callback complete()s usually --- but not always --- before a
    timeout of 10ms. Hence I chose a safer timeout of 100ms.

    On the few tests with the non-working controller ALi M5271, PHY config
    packet transmission always timed out so far. (Fw-ohci needs to be fixed
    for this controller independently of this deadline fix. Often the core
    doesn't even attempt to send a phy config because not even self ID
    reception works.)

    Signed-off-by: Stefan Richter

    Stefan Richter
     
  • The messages which can be enabled by fw-ohci's debug module parameter
    are changed from KERN_DEBUG to KERN_NOTICE level and uniformly prefixed
    with "firewire_ohci: ". This further simplifies communication with
    users when we ask them to capture debug messages.

    Signed-off-by: Stefan Richter

    Stefan Richter
     
  • Callers of fill_bus_reset_event() have to take card->lock. Otherwise
    access to node data may oops if node removal is in progress.

    A lockless alternative would be

    - event->local_node_id = card->local_node->node_id;
    + tmp = fw_node_get(card->local_node);
    + event->local_node_id = tmp->node_id;
    + fw_node_put(tmp);

    and ditto with the other node pointers which fill_bus_reset_event()
    accesses. But I went the locked route because one of the two callers
    already holds the lock. As a bonus, we don't need the memory barrier
    anymore because device->generation and device->node_id are written in
    a card->lock protected section.

    Signed-off-by: Stefan Richter
    Signed-off-by: Kristian Høgsberg

    Stefan Richter
     
  • OHCI 1.1 clause 5.10 requires that selfIDBufferPtr is valid when a 1 is
    written into LinkControl.rcvSelfID.

    This driver bug has so far not been known to cause harm because most
    chips obviously accept a later selfIDBufferPtr write, at least before
    HCControl.linkEnable is written.

    Signed-off-by: Stefan Richter
    Signed-off-by: Jarod Wilson
    Signed-off-by: Kristian Høgsberg

    Stefan Richter
     
  • We want the rcvPhyPkt bit in LinkControl off before we start using the
    chip. However, the spec says that the reset value of it is undefined.
    Hence switch it explicitly off.

    https://bugzilla.redhat.com/show_bug.cgi?id=244576#c48 shows that for
    example the nForce2 integrated FireWire controller seems to have it on
    by default.

    Signed-off-by: Stefan Richter
    Signed-off-by: Jarod Wilson

    Stefan Richter
     
  • header_length and payload_length are filled with random data if an
    unknown tcode was read from the AR buffer (i.e. if the AR buffer
    contained invalid data).

    We still need a better strategy to recover from this, but at least
    handle_ar_packet now doesn't return out of bound buffer addresses
    anymore.

    Signed-off-by: Stefan Richter

    Stefan Richter
     
  • BUG() at this place is wrong. (Unless if the low level driver would
    already do higher-level input validation of incoming request headers.)

    Invalid incoming requests or bugs in the controller which corrupt the
    AR-req buffer needlessly crashed the box because this is run in tasklet
    context.

    Signed-off-by: Stefan Richter

    Stefan Richter
     

21 May, 2008

1 commit

  • If userspace ignores the POLLERR bit from poll(), and only attempts to
    read() the device when POLLIN is set, it can still make ioctl() calls on
    a device that has been removed from the system. The node_id and
    generation returned by GET_INFO will be outdated, but INITIATE_BUS_RESET
    would still cause a bus reset, and GET_CYCLE_TIMER will return data.
    And if you guess the correct generation to use, you can send requests to
    a different device on the bus, and get responses back.

    This patch prevents open, ioctl, compat_ioctl, and mmap against shutdown
    devices.

    Signed-off-by: Jay Fenlason
    Signed-off-by: Stefan Richter

    Jay Fenlason
     

03 May, 2008

1 commit

  • * git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6:
    [SCSI] aic94xx: fix section mismatch
    [SCSI] u14-34f: Fix 32bit only problem
    [SCSI] dpt_i2o: sysfs code
    [SCSI] dpt_i2o: 64 bit support
    [SCSI] dpt_i2o: move from virt_to_bus/bus_to_virt to dma_alloc_coherent
    [SCSI] dpt_i2o: use standard __init / __exit code
    [SCSI] megaraid_sas: fix suspend/resume sections
    [SCSI] aacraid: Add Power Management support
    [SCSI] aacraid: Fix jbod operations scan issues
    [SCSI] aacraid: Fix warning about macro side-effects
    [SCSI] add support for variable length extended commands
    [SCSI] Let scsi_cmnd->cmnd use request->cmd buffer
    [SCSI] bsg: add large command support
    [SCSI] aacraid: Fix down_interruptible() to check the return value correctly
    [SCSI] megaraid_sas; Update the Version and Changelog
    [SCSI] ibmvscsi: Handle non SCSI error status
    [SCSI] bug fix for free list handling
    [SCSI] ipr: Rename ipr's state scsi host attribute to prevent collisions
    [SCSI] megaraid_mbox: fix Dell CERC firmware problem

    Linus Torvalds
     

02 May, 2008

3 commits

  • - struct scsi_cmnd had a 16 bytes command buffer of its own.
    This is an unnecessary duplication and copy of request's
    cmd. It is probably left overs from the time that scsi_cmnd
    could function without a request attached. So clean that up.

    - Once above is done, few places, apart from scsi-ml, needed
    adjustments due to changing the data type of scsi_cmnd->cmnd.

    - Lots of drivers still use MAX_COMMAND_SIZE. So I have left
    that #define but equate it to BLK_MAX_CDB. The way I see it
    and is reflected in the patch below is.
    MAX_COMMAND_SIZE - means: The longest fixed-length (*) SCSI CDB
    as per the SCSI standard and is not related
    to the implementation.
    BLK_MAX_CDB. - The allocated space at the request level

    - I have audit all ISA drivers and made sure none use ->cmnd in a DMA
    Operation. Same audit was done by Andi Kleen.

    (*)fixed-length here means commands that their size can be determined
    by their opcode and the CDB does not carry a length specifier, (unlike
    the VARIABLE_LENGTH_CMD(0x7f) command). This is actually not exactly
    true and the SCSI standard also defines extended commands and
    vendor specific commands that can be bigger than 16 bytes. The kernel
    will support these using the same infrastructure used for VARLEN CDB's.
    So in effect MAX_COMMAND_SIZE means the maximum size command
    scsi-ml supports without specifying a cmd_len by ULD's

    Signed-off-by: Boaz Harrosh
    Signed-off-by: James Bottomley

    Boaz Harrosh
     
  • * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ieee1394/linux1394-2.6:
    firewire: fw-sbp2: log scsi_target ID at release
    ieee1394: fix NULL pointer dereference in sysfs access

    Linus Torvalds
     
  • Makes the good-by message more informative.

    Signed-off-by: Stefan Richter
    Signed-off-by: Jarod Wilson

    Stefan Richter
     

19 Apr, 2008

2 commits


18 Apr, 2008

3 commits

  • This patch contains the following cleanups:
    - #if 0 the following unused structs:
    - fw-transaction.c:fw_low_memory_region
    - fw-transaction.c:fw_private_region
    - fw-transaction.c:fw_csr_region
    - fw-transaction.c:fw_unit_space_region
    - remove the following unused EXPORT_SYMBOL's:
    - fw-card.c:fw_core_add_descriptor
    - fw-card.c:fw_core_remove_descriptor
    - fw-iso.c:fw_iso_context_create
    - fw-iso.c:fw_iso_context_destroy
    - fw-iso.c:fw_iso_context_start
    - fw-iso.c:fw_iso_context_queue
    - fw-iso.c:fw_iso_context_stop

    Signed-off-by: Adrian Bunk
    Signed-off-by: Stefan Richter

    Adrian Bunk
     
  • Fix: The fact that nodes had different gap counts would be overlooked
    if the bus manager code would pick gap count 63 because of beta
    repeaters or because of very large hop counts. In this case, the bus
    manager code would miss that it actually has to send the PHY config
    packet with gap count 63.

    Related trivial changes: Use bool for an int used as bool, touch up
    some comments.

    Signed-off-by: Stefan Richter

    Stefan Richter
     
  • We now exit fw_send_phy_config /after/ the PHY config packet has been
    transmitted, instead of before. A subsequent fw_core_initiate_bus_reset
    will therefore not overlap with the transmission. This is meant to make
    the send PHY config packet + reset bus routine more deterministic.

    Fixes bus reset loop and eventual panic with
    - VIA VT6307 + IOGEAR hub + Unibrain Fire-i camera
    http://bugzilla.kernel.org/show_bug.cgi?id=10128
    - JMicron card

    Signed-off-by: Stefan Richter
    Signed-off-by: Jarod Wilson

    Stefan Richter