1. 24 Jan, 2009 2 commits
  2. 20 Jan, 2009 3 commits
    • Stefan Richter's avatar
      firewire: keep highlevel drivers attached during brief connection loss · 3d36a0df
      Stefan Richter authored
      There are situations when nodes vanish from the bus and come back
      quickly thereafter:
        - When certain bus-powered hubs are plugged in,
        - when certain devices are plugged into 6-port hubs,
        - when certain disk enclosures are switched from self-power to bus
          power or vice versa and break the daisy chain during the transition,
        - when the user plugs a cable out and quickly plugs it back in, e.g.
          to reorder a daisy chain (works on Mac OS X if done quickly enough),
        - when certain hubs temporarily malfunction during high bus traffic.
      
      Until now, firewire-core reported affected nodes as lost to the
      highlevel drivers (firewire-sbp2 and userspace drivers).  We now delay
      the destruction of device representations until after at least two
      seconds after the last bus reset.  If a "new" device is detected in this
      period whose bus information block and root directory header match that
      of a device which is pending for deletion, we resurrect that device and
      send update calls to highlevel drivers.
      Signed-off-by: default avatarStefan Richter <stefanr@s5r6.in-berlin.de>
      3d36a0df
    • Stefan Richter's avatar
      firewire: unnecessary BM delay after generation rollover · 8cd0bbbd
      Stefan Richter authored
      Noticed by Jarod Wilson:  The bus manager work was unnecessarily delayed
      each time the bus generation counter rolled over.
      Signed-off-by: default avatarStefan Richter <stefanr@s5r6.in-berlin.de>
      Signed-off-by: default avatarJarod Wilson <jwilson@redhat.com>
      8cd0bbbd
    • Stefan Richter's avatar
      firewire: insist on successive self ID complete events · a5c7f471
      Stefan Richter authored
      The whole topology code only works if the old and new topologies which
      are compared come from immediately successive self ID complete events.
      
      If there happened bus resets without self ID complete events in the
      meantime, or self ID complete events with invalid selfIDs, the topology
      comparison could identify nodes wrongly, or more likely just corrupt
      kernel memory or panic right away.
      
      We now discard all nodes of the old topology and treat all current nodes
      as new ones if the current self ID generation is not the previous one
      plus 1.
      Signed-off-by: default avatarStefan Richter <stefanr@s5r6.in-berlin.de>
      Signed-off-by: default avatarJarod Wilson <jwilson@redhat.com>
      a5c7f471
  3. 16 Jan, 2009 35 commits