1. 16 2月, 2012 1 次提交
    • B
      sfc: Leave interrupts and event queues enabled whenever we can · 9f2cb71c
      Ben Hutchings 提交于
      When SR-IOV is enabled we may receive FLR (Function-Level Reset)
      events, associated queue flush events and requests from VF drivers at
      any time.  Therefore we need to keep event queues and interrupts
      enabled whenever possible.
      
      Currently we stop interrupt-driven event processing before flushing RX
      and TX queues; efx_nic_flush_queues() then polls event queues for
      flush events and discards any others it finds.  Change it to work with
      the regular event handling functions.
      
      Currently efx_start_channel() fills RX queues synchronously when a
      device is brought up.  This could now race with NAPI, so change it to
      send fill events.
      
      This was almost entirely written by Steve Hodgson, formerly
      shodgson@solarflare.com.
      Signed-off-by: NBen Hutchings <bhutchings@solarflare.com>
      9f2cb71c
  2. 14 2月, 2012 3 次提交
  3. 27 1月, 2012 11 次提交
  4. 10 1月, 2012 3 次提交
  5. 06 1月, 2012 2 次提交
  6. 17 12月, 2011 1 次提交
  7. 07 12月, 2011 1 次提交
  8. 17 11月, 2011 1 次提交
  9. 17 9月, 2011 3 次提交
  10. 18 8月, 2011 1 次提交
  11. 11 8月, 2011 1 次提交
  12. 14 7月, 2011 1 次提交
  13. 25 6月, 2011 2 次提交
    • B
      sfc: Fix mapping of reset reasons and flags to methods · 0e2a9c7c
      Ben Hutchings 提交于
      There are certain hardware bugs that may occur on Falcon during normal
      operation, that require a reset to recover from.  We try to minimise
      disruption by keeping the PHY running, following a reset sequence
      labelled as 'invisible'.
      
      Siena does not suffer from these hardware bugs, so we have not
      implemented an 'invisible' reset sequence.  However, if a similar
      error does occur (due to a hardware fault or software bug) then the
      code shared with Falcon will wrongly assume that the PHY is not being
      reset.
      
      Since the mapping of reset reasons (internal) and flags (ethtool) to
      methods must differ significantly between NIC types, move it into
      per-NIC-type functions (replacing the insufficient reset_world_flags
      field).
      Signed-off-by: NBen Hutchings <bhutchings@solarflare.com>
      0e2a9c7c
    • B
      sfc: Allow resets to be upgraded; use atomic ops for safety · a7d529ae
      Ben Hutchings 提交于
      Currently an attempt to schedule any reset is ignored if a reset
      is already pending.  This ignores the relative scopes - if the
      requested reset is greater in scope then the scheduled reset should
      be upgraded accordingly.
      
      There are also some race conditions which could lead to a reset
      request being lost.  Deal with them by using atomic operations on a
      bitmask.  This also makes tests on reset_pending easier to get right.
      Signed-off-by: NBen Hutchings <bhutchings@solarflare.com>
      a7d529ae
  14. 18 5月, 2011 1 次提交
  15. 17 5月, 2011 2 次提交
  16. 15 4月, 2011 1 次提交
  17. 12 4月, 2011 2 次提交
    • B
      sfc: Do not use efx_process_channel_now() in online self-test · d4fabcc8
      Ben Hutchings 提交于
      During self-tests we use efx_process_channel_now() to handle
      completion and other events synchronously.  This disables interrupts
      and NAPI processing for the channel in question, but it may still be
      interrupted by another channel.  A single socket may receive packets
      from multiple net devices or even multiple channels of the same net
      device, so this can result in deadlock on a socket lock.
      
      Receiving packets in process context will also result in incorrect
      classification by the network cgroup classifier.
      
      Therefore, we must only use efx_process_channel_now() in the offline
      loopback tests (which never deliver packets up the stack) and not for
      the online interrupt and event tests.
      
      For the interrupt test, there is no reason to process events.  We
      only care that an interrupt is raised.
      
      For the event test, we want to know whether events have been received,
      and there may be many events ahead of the one we inject.  Therefore
      remove efx_channel::magic_count and instead test whether
      efx_channel::eventq_read_ptr advances.  This is currently an event
      queue index and might wrap around to exactly the same value, resulting
      in a false negative.  Therefore move the masking to efx_event() and
      efx_nic_eventq_read_ack() so that it cannot wrap within the time of
      the test.
      
      The event test also tries to diagnose failures by checking whether an
      event was delivered without causing an interrupt.  Add and use a
      helper function that only does this.
      Signed-off-by: NBen Hutchings <bhutchings@solarflare.com>
      d4fabcc8
    • N
      sfc: Stop the TX queues during loopback self-tests · 9d1aea62
      Neil Turton 提交于
      If the TX queues are running during loopback self tests, host
      traffic gets looped back which causes the test to fail.  Avoid
      restarting the TX queues after the port reset so that any packets
      sent by the host get held back until after the tests have completed.
      
      [bwh: Also wake all TX queues at the end of self-tests.]
      Signed-off-by: NBen Hutchings <bhutchings@solarflare.com>
      9d1aea62
  18. 05 4月, 2011 2 次提交
  19. 23 3月, 2011 1 次提交