1. 01 Sep, 2005 6 commits
    • Michael Ellerman's avatar
      [PATCH] iseries_veth: Replace lock-protected atomic with an ordinary variable · b08bd5c0
      Michael Ellerman authored
      The iseries_veth driver uses atomic ops to manipulate the in_use field of
      one of its per-connection structures. However all references to the
      flag occur while the connection's lock is held, so the atomic ops aren't
      necessary.
      Signed-off-by: default avatarMichael Ellerman <michael@ellerman.id.au>
      Signed-off-by: default avatarJeff Garzik <jgarzik@pobox.com>
      b08bd5c0
    • Michael Ellerman's avatar
      [PATCH] iseries_veth: Remove redundant message stack lock · d7893ddd
      Michael Ellerman authored
      The iseries_veth driver keeps a stack of messages for each connection
      and a lock to protect the stack. However there is also a per-connection lock
      which makes the message stack lock redundant.
      
      Remove the message stack lock and document the fact that callers of the
      stack-manipulation functions must hold the connection's lock.
      Signed-off-by: default avatarMichael Ellerman <michael@ellerman.id.au>
      Signed-off-by: default avatarJeff Garzik <jgarzik@pobox.com>
      d7893ddd
    • Michael Ellerman's avatar
      [PATCH] iseries_veth: Fix broken promiscuous handling · 2a5391a1
      Michael Ellerman authored
      Due to a logic bug, once promiscuous mode is enabled in the iseries_veth
      driver it is never disabled.
      
      The driver keeps two flags, promiscuous and all_mcast which have exactly the
      same effect. This is because we only ever receive packets destined for us,
      or multicast packets. So consolidate them into one promiscuous flag for
      simplicity.
      Signed-off-by: default avatarMichael Ellerman <michael@ellerman.id.au>
      Signed-off-by: default avatarJeff Garzik <jgarzik@pobox.com>
      2a5391a1
    • Michael Ellerman's avatar
      [PATCH] iseries_veth: Try to avoid pathological reset behaviour · 58c5900b
      Michael Ellerman authored
      The iseries_veth driver contains a state machine which is used to manage
      how connections are setup and neogotiated between LPARs.
      
      If one side of a connection resets for some reason, the two LPARs can get
      stuck in a race to re-setup the connection. This can lead to the connection
      being declared dead by one or both ends. In practice the connection is
      declared dead by one or both ends approximately 8/10 times a connection is
      reset, although it is rare for connections to be reset.
      
      (an example here: http://michael.ellerman.id.au/files/misc/veth-trace.html)
      
      The core of the problem is that the end that resets the connection doesn't
      wait for the other end to become aware of the reset. So the resetting end
      starts setting the connection back up, and then receives a reset from the
      other end (which is the response to the initial reset). And so on.
      
      We're severely limited in what we can do to fix this. The protocol between
      LPARs is essentially fixed, as we have to interoperate with both OS/400
      and old Linux drivers. Which also means we need a fix that only changes the
      code on one end.
      
      The only fix I've found given that, is to just blindly sleep for a bit when
      resetting the connection, in the hope that the other end will get itself
      sorted.  Needless to say I'd love it if someone has a better idea.
      
      This does work, I've so far been unable to get it to break, whereas without
      the fix a reset of one end will lead to a dead connection ~8/10 times.
      Signed-off-by: default avatarMichael Ellerman <michael@ellerman.id.au>
      Signed-off-by: default avatarJeff Garzik <jgarzik@pobox.com>
      58c5900b
    • Michael Ellerman's avatar
      [PATCH] iseries_veth: Remove a FIXME WRT deletion of the ack_timer · abfda471
      Michael Ellerman authored
      The iseries_veth driver has a timer which we use to send acks. When the
      connection is reset or stopped we need to delete the timer.
      
      Currently we only call del_timer() when resetting a connection, which means
      the timer might run again while the connection is being re-setup. As it turns
      out that's ok, because the flags the timer consults have been reset.
      
      It's cleaner though to call del_timer_sync() once we've dropped the lock,
      although the timer may still run between us dropping the lock and calling
      del_timer_sync(), but as above that's ok.
      Signed-off-by: default avatarMichael Ellerman <michael@ellerman.id.au>
      Signed-off-by: default avatarJeff Garzik <jgarzik@pobox.com>
      abfda471
    • Michael Ellerman's avatar
      [PATCH] iseries_veth: Cleanup error and debug messages · 61a3c696
      Michael Ellerman authored
      Currently the iseries_veth driver prints the file name and line number in its
      error messages. This isn't very useful for most users, so just print
      "iseries_veth: message" instead.
      
       - convert uses of veth_printk() to veth_debug()/veth_error()/veth_info()
       - make terminology consistent, ie. always refer to LPAR not lpar
       - be consistent about printing return codes as %d not %x
       - make format strings fit in 80 columns
      Signed-off-by: default avatarMichael Ellerman <michael@ellerman.id.au>
      Signed-off-by: default avatarJeff Garzik <jgarzik@pobox.com>
      61a3c696
  2. 31 Aug, 2005 2 commits
  3. 30 Aug, 2005 32 commits