1. 29 3月, 2017 7 次提交
    • M
      qed: Use BDQ resource for storage protocols · d0d40a73
      Mintz, Yuval 提交于
      Until now, qed used some port-defined value as BDQ index for both iSCSI
      and FCoE.
      
      As management firmware now treats BDQ as a resource and tells each PF
      its BDQ-range, start using a valure from that range instead.
      Signed-off-by: NYuval Mintz <Yuval.Mintz@cavium.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      d0d40a73
    • T
      qed: Utilize resource-lock based scheme · 9c8517c4
      Tomer Tayar 提交于
      Management firmware is used as an arbiter between the various PFs
      in matters of resources, but some of the resources that need to
      be divided are dependent on the non-management firmware used,
      so management firmware first needs to be told how many resources
      there are before trying to divide them.
      
      As part of the initialization sequence, driver would first inform
      the management firmware of the available resources under
      a dedicated resource lock, and afterwards request for various
      resources which might be based on the previous set values.
      Signed-off-by: NTomer Tayar <Tomer.Tayar@cavium.com>
      Signed-off-by: NYuval Mintz <Yuval.Mintz@cavium.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      9c8517c4
    • T
      qed: Support management-based resource locking · 95691c9c
      Tomer Tayar 提交于
      Global locking can't properly be used to synchronize between different
      PFs in all scenarios, as those instances might reside in different
      logical partitions [e.g., when a PF is assigned via PDA to some VM].
      
      The management firmware provides a generic infrastructure for
      device locks. For each 'resource', it's guaranteed it could be acquired
      by at most a single PF at any given time [or by management firmware].
      
      This patch adds the necessary logic in qed for utilizing said
      infrastructure, implementing lock/unlock internal APIs.
      Signed-off-by: NTomer Tayar <Tomer.Tayar@cavium.com>
      Signed-off-by: NYuval Mintz <Yuval.Mintz@cavium.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      95691c9c
    • M
      qed: Send pf-flr as part of initialization · 18a69e36
      Mintz, Yuval 提交于
      During HW initialization, driver would set various registers to their
      needed values - but it assumes all registers start at their reset-value,
      so there's no need to re-configure a register's default value.
      
      This assumption might be incorrect, e.g., in case of preboot driver
      running and initializing the driver prior to our driver.
      
      To overcome this, we now ask management firmware to initiate a PF-flr
      early during the initialization sequence. That would return everything
      in the PF's scope back to default and prevent previous configurations
      from still being applied.
      Signed-off-by: NYuval Mintz <Yuval.Mintz@cavium.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      18a69e36
    • T
      qed: Move to new load request scheme · 5d24bcf1
      Tomer Tayar 提交于
      Management firmware is used as an arbiter between the various PFs
      in regard to loading - it causes the various PFs to load/unload
      sequentially and informs each of its appropriate rule in the init.
      
      But the existing flow is too weak to handle some scenarios where
      PFs aren't properly cleaned prior to loading.
      The significant scenarios falling under this criteria:
        a. Preboot drivers in some environment can't properly unload.
        b. Unexpected driver replacement [kdump, PDA].
      
      Modern management firmware supports a more intricate loading flow,
      where the driver has the ability to overcome previous limitations.
      This moves qed into using this newer scheme.
      
      Notice new scheme is backward compatible, so new drivers would
      still be able to load properly on top of older management firmwares
      and vice versa.
      Signed-off-by: NTomer Tayar <Tomer.Tayar@cavium.com>
      Signed-off-by: NYuval Mintz <Yuval.Mintz@cavium.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      5d24bcf1
    • M
      qed: hw_init() to receive parameter-struct · c0c2d0b4
      Mintz, Yuval 提交于
      We'll soon need additional information, so start by changing
      the infrastructure to receive the initializing variables
      via a parameter struct.
      Signed-off-by: NYuval Mintz <Yuval.Mintz@cavium.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      c0c2d0b4
    • T
      qed: Correct HW stop flow · 1226337a
      Tomer Tayar 提交于
      Management firmware is used as arbiter between different PFs
      which are loading/unloading, but in order to use the synchronization
      it offers the contending configurations need to be applied either
      between their LOAD_REQ <-> LOAD_DONE or UNLOAD_REQ <-> UNLOAD_DONE
      management firmware commands.
      
      Existing HW stop flow utilizes 2 different functions: qed_hw_stop() and
      qed_hw_reset() which don't abide this requirement; Most of the closure
      is doing outside the scope of the unload request.
      
      This patch removes qed_hw_reset() and places the relevant stop
      functionality underneath the management firmware protection.
      Signed-off-by: NTomer Tayar <Tomer.Tayar@cavium.com>
      Signed-off-by: NYuval Mintz <Yuval.Mintz@cavium.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      1226337a
  2. 24 3月, 2017 6 次提交
  3. 22 3月, 2017 9 次提交
  4. 16 3月, 2017 1 次提交
  5. 15 3月, 2017 8 次提交
  6. 14 3月, 2017 1 次提交
  7. 10 3月, 2017 3 次提交
  8. 28 2月, 2017 1 次提交
  9. 27 2月, 2017 2 次提交
    • M
      qed: Don't use attention PTT for configuring BW · 6f437d43
      Mintz, Yuval 提交于
      Commit 653d2ffd6405 ("qed*: Fix link indication race") introduced another
      race - one of the inner functions called from the link-change flow is
      explicitly using the slowpath context dedicated PTT instead of gaining
      that PTT from the caller. Since this flow can now be called from
      a different context as well, we're in risk of the PTT breaking.
      
      Fixes: 653d2ffd6405 ("qed*: Fix link indication race")
      Signed-off-by: NYuval Mintz <Yuval.Mintz@cavium.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      6f437d43
    • M
      qed: Fix race with multiple VFs · fd3c615a
      Mintz, Yuval 提交于
      A PF syncronizes all IOV activity relating to its VFs
      by using a single workqueue handling the work.
      The workqueue would reach a bitmask of pending VF events
      and act upon each in turn.
      
      Problem is that the indication of a VF message [which sets
      the 'vf event' bit for that VF] arrives and is set in
      the slowpath attention context, which isn't syncronized with
      the processing of the events.
      When multiple VFs are present, it's possible that PF would
      lose the indication of one of the VF's pending evens, leading
      that VF to later timeout.
      
      Instead of adding locks/barriers, simply move from a bitmask
      into a per-VF indication inside that VF entry in the PF database.
      Signed-off-by: NYuval Mintz <Yuval.Mintz@cavium.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      fd3c615a
  10. 23 2月, 2017 2 次提交
    • B
      qlogic: netxen: constify bin_attribute structures · ff292458
      Bhumika Goyal 提交于
      Declare bin_attribute structures as const as they are only passed as an
      arguments to the functions device_remove_bin_file and
      device_create_bin_file. These function arguments are of type const, so
      bin_attribute structures having this property can be made const too.
      Done using Coccinelle:
      
      @r1 disable optional_qualifier @
      identifier i;
      position p;
      @@
      static struct bin_attribute i@p = {...};
      
      @ok1@
      identifier r1.i;
      position p,p1;
      @@
      (
      device_remove_bin_file(...,&i@p)
      |
      device_create_bin_file(..., &i@p1)
      )
      
      @bad@
      position p!={r1.p,ok1.p,ok1.p1};
      identifier r1.i;
      @@
      i@p
      
      @depends on !bad disable optional_qualifier@
      identifier r1.i;
      @@
      +const
      struct bin_attribute i;
      Signed-off-by: NBhumika Goyal <bhumirks@gmail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      ff292458
    • B
      qlogic: qlcnic_sysfs: constify bin_attribute structures · 0ccea221
      Bhumika Goyal 提交于
      Declare bin_attribute structures as const as they are only passed as an
      arguments to the functions device_remove_bin_file and
      device_create_bin_file. These function arguments are of type const, so
      bin_attribute structures having this property can be made const too.
      Done using Coccinelle:
      
      @r1 disable optional_qualifier @
      identifier i;
      position p;
      @@
      static struct bin_attribute i@p = {...};
      
      @ok1@
      identifier r1.i;
      position p,p1;
      @@
      (
      device_remove_bin_file(...,&i@p)
      |
      device_create_bin_file(..., &i@p1)
      )
      
      @bad@
      position p!={r1.p,ok1.p,ok1.p1};
      identifier r1.i;
      @@
      i@p
      
      @depends on !bad disable optional_qualifier@
      identifier r1.i;
      @@
      +const
      struct bin_attribute i;
      Signed-off-by: NBhumika Goyal <bhumirks@gmail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      0ccea221