1. 23 6月, 2016 1 次提交
    • Y
      IB/core: Introduce Work Queue object and its verbs · 5fd251c8
      Yishai Hadas 提交于
      Introduce Work Queue object and its create/destroy/modify verbs.
      
      QP can be created without internal WQs "packaged" inside it,
      this QP can be configured to use "external" WQ object as its
      receive/send queue.
      WQ is a necessary component for RSS technology since RSS mechanism
      is supposed to distribute the traffic between multiple
      Receive Work Queues.
      
      WQ associated (many to one) with Completion Queue and it owns WQ
      properties (PD, WQ size, etc.).
      WQ has a type, this patch introduces the IB_WQT_RQ (i.e.receive queue),
      it may be extend to others such as IB_WQT_SQ. (send queue).
      WQ from type IB_WQT_RQ contains receive work requests.
      
      PD is an attribute of a work queue (i.e. send/receive queue), it's used
      by the hardware for security validation before scattering to a memory
      region which is pointed by the WQ. For that, an external WQ object
      needs a PD, letting the hardware makes that validation.
      
      When accessing a memory region that is pointed by the WQ its PD
      is used and not the QP's PD, this behavior is similar
      to a SRQ and a QP.
      
      WQ context is subject to a well-defined state transitions done by
      the modify_wq verb.
      When WQ is created its initial state becomes IB_WQS_RESET.
      >From IB_WQS_RESET it can be modified to itself or to IB_WQS_RDY.
      >From IB_WQS_RDY it can be modified to itself, to IB_WQS_RESET
      or to IB_WQS_ERR.
      >From IB_WQS_ERR it can be modified to IB_WQS_RESET.
      
      Note: transition to IB_WQS_ERR might occur implicitly in case there
      was some HW error.
      Signed-off-by: NYishai Hadas <yishaih@mellanox.com>
      Signed-off-by: NMatan Barak <matanb@mellanox.com>
      Reviewed-by: NSagi Grimberg <sagi@grimberg.me>
      Reviewed-by: NSagi Grimberg <sagi@grimberg.me>
      Signed-off-by: NDoug Ledford <dledford@redhat.com>
      5fd251c8
  2. 07 6月, 2016 2 次提交
  3. 27 5月, 2016 1 次提交
    • C
      IB/core: Make device counter infrastructure dynamic · b40f4757
      Christoph Lameter 提交于
      In practice, each RDMA device has a unique set of counters that the
      hardware implements.  Having a central set of counters that they must
      all adhere to is limiting and causes many useful counters to not be
      available.
      
      Therefore we create a dynamic counter registration infrastructure.
      
      The driver must implement a stats structure allocation routine, in
      which the driver must place the directory name it wants, a list of
      names for all of the counters, an array of u64 counters themselves,
      plus a few generic configuration options.
      
      We then implement a core routine to create a sysfs file for each
      of the named stats elements, and a core routine to retrieve the
      stats when any of the sysfs attribute files are read.
      
      To avoid excessive beating on the stats generation routine in the
      drivers, the core code also caches the stats for a short period of
      time so that someone attempting to read all of the stats in a
      given device's directory will not result in a stats generation
      call per file read.
      
      Future work will attempt to standardize just the shared stats
      elements, and possibly add a method to get the stats via netlink
      in addition to sysfs.
      Signed-off-by: NChristoph Lameter <cl@linux.com>
      Signed-off-by: NMark Bloch <markb@mellanox.com>
      Reviewed-by: NSteve Wise <swise@opengridcomputing.com>
      Signed-off-by: NDoug Ledford <dledford@redhat.com>
      [ Add caching, make structure names more informative, add i40iw support,
        other significant rewrites from the original patch ]
      b40f4757
  4. 14 5月, 2016 9 次提交
  5. 22 3月, 2016 4 次提交
    • E
      IB/core: Add interfaces to control VF attributes · 50174a7f
      Eli Cohen 提交于
      Following the practice exercised for network devices which allow the PF
      net device to configure attributes of its virtual functions, we
      introduce the following functions to be used by IPoIB which is the
      network driver implementation for IB devices.
      
      ib_set_vf_link_state - set the policy for a VF link. More below.
      ib_get_vf_config - read configuration information of a VF
      ib_get_vf_stats - read VF statistics
      ib_set_vf_guid - set the node or port GUID of a VF
      
      Also add an indication in the device cap flags that indicates that this
      IB devices is based on a virtual function.
      
      A VF shares the physical port with the PF and other VFs. When setting
      the link state we have three options:
      
      1. Auto - in this mode, the virtual port follows the state of the
         physical port and becomes active only if the physical port's state is
         active. In all other cases it remains in a Down state.
      2. Down - sets the state of the virtual port to Down
      3. Up - causes the virtual port to transition into Initialize state if
         it was not already in this state. A virtualization aware subnet manager
         can then bring the state of the port into the Active state.
      Signed-off-by: NEli Cohen <eli@mellanox.com>
      Reviewed-by: NOr Gerlitz <ogerlitz@mellanox.com>
      Signed-off-by: NDoug Ledford <dledford@redhat.com>
      50174a7f
    • E
      IB/core: Support accessing SA in virtualized environment · a0c1b2a3
      Eli Cohen 提交于
      Per the ongoing standardisation process, when virtual HCAs are present
      in a network, traffic is routed based on a destination GID. In order to
      access the SA we use the well known SA GID.
      
      We also add a GRH required boolean field to the port attributes which is
      used to report to the verbs consumer whether this port is connected to a
      virtual network. We use this field to realize whether we need to create
      an address vector with GRH to access the subnet administrator. We clear
      the port attributes struct before calling the hardware driver to make
      sure the default remains that GRH is not required.
      Signed-off-by: NEli Cohen <eli@mellanox.com>
      Reviewed-by: NOr Gerlitz <ogerlitz@mellanox.com>
      Signed-off-by: NDoug Ledford <dledford@redhat.com>
      a0c1b2a3
    • E
      IB/core: Add subnet prefix to port info · fad61ad4
      Eli Cohen 提交于
      The subnet prefix is a part of the port_info MAD returned and should be
      available at the ib_port_attr struct. We define it here and provide a
      default implementation in case the hardware driver does not provide one.
      The subnet prefix is required when creating the address vector to access
      the SA in networks where GRH must be used.
      Signed-off-by: NEli Cohen <eli@mellanox.com>
      Reviewed-by: NOr Gerlitz <ogerlitz@mellanox.com>
      Signed-off-by: NDoug Ledford <dledford@redhat.com>
      fad61ad4
    • L
      IB/{core, ulp} Support above 32 possible device capability flags · fb532d6a
      Leon Romanovsky 提交于
      The old bitwise device_cap_flags variable was limited to u32 which
      has all bits already defined. In order to overcome it, we converted
      device_cap_flags variable to be u64 type.
      Signed-off-by: NLeon Romanovsky <leonro@mellanox.com>
      Reviewed-by: NMatan Barak <matanb@mellanox.com>
      Signed-off-by: NDoug Ledford <dledford@redhat.com>
      fb532d6a
  6. 11 3月, 2016 1 次提交
  7. 05 3月, 2016 1 次提交
  8. 02 3月, 2016 1 次提交
  9. 01 3月, 2016 2 次提交
    • M
      IB/core: Add don't trap flag to flow creation · a3100a78
      Marina Varshaver 提交于
      Don't trap flag (i.e. IB_FLOW_ATTR_FLAGS_DONT_TRAP) indicates that QP
      will receive traffic, but will not steal it.
      
      When a packet matches a flow steering rule that was created with
      the don't trap flag, the QPs assigned to this rule will get this
      packet, but matching will continue to other equal/lower priority
      rules. This will let other QPs assigned to those rules to get the
      packet too.
      
      If both don't trap rule and other rules have the same priority
      and match the same packet, the behavior is undefined.
      
      The don't trap flag can't be set with default rule types
      (i.e. IB_FLOW_ATTR_ALL_DEFAULT, IB_FLOW_ATTR_MC_DEFAULT) as default rules
      don't have rules after them and don't trap has no meaning here.
      Signed-off-by: NMarina Varshaver <marinav@mellanox.com>
      Reviewed-by: NMatan Barak <matanb@mellanox.com>
      Reviewed-by: NYishai Hadas <yishaih@mellanox.com>
      Signed-off-by: NDoug Ledford <dledford@redhat.com>
      a3100a78
    • S
      IB: new common API for draining queues · 765d6774
      Steve Wise 提交于
      Add provider-specific drain_sq/drain_rq functions for providers needing
      special drain logic.
      
      Add static functions __ib_drain_sq() and __ib_drain_rq() which post noop
      WRs to the SQ or RQ and block until their completions are processed.
      This ensures the applications completions for work requests posted prior
      to the drain work request have all been processed.
      
      Add API functions ib_drain_sq(), ib_drain_rq(), and ib_drain_qp().
      
      For the drain logic to work, the caller must:
      
      ensure there is room in the CQ(s) and QP for the drain work request
      and completion.
      
      allocate the CQ using ib_alloc_cq() and the CQ poll context cannot be
      IB_POLL_DIRECT.
      
      ensure that there are no other contexts that are posting WRs concurrently.
      Otherwise the drain is not guaranteed.
      Reviewed-by: NChuck Lever <chuck.lever@oracle.com>
      Signed-off-by: NSteve Wise <swise@opengridcomputing.com>
      Signed-off-by: NDoug Ledford <dledford@redhat.com>
      765d6774
  10. 20 1月, 2016 1 次提交
  11. 24 12月, 2015 9 次提交
  12. 23 12月, 2015 5 次提交
  13. 12 12月, 2015 1 次提交
    • C
      IB: add a proper completion queue abstraction · 14d3a3b2
      Christoph Hellwig 提交于
      This adds an abstraction that allows ULPs to simply pass a completion
      object and completion callback with each submitted WR and let the RDMA
      core handle the nitty gritty details of how to handle completion
      interrupts and poll the CQ.
      
      In detail there is a new ib_cqe structure which just contains the
      completion callback, and which can be used to get at the containing
      object using container_of.  It is pointed to by the WR and WC as an
      alternative to the wr_id field, similar to how many ULPs already use
      the field to store a pointer using casts.
      
      A driver using the new completion callbacks allocates it's CQs using
      the new ib_create_cq API, which in addition to the number of CQEs and
      the completion vectors also takes a mode on how we poll for CQEs.
      Three modes are available: direct for drivers that never take CQ
      interrupts and just poll for them, softirq to poll from softirq context
      using the to be renamed blk-iopoll infrastructure which takes care of
      rearming and budgeting, or a workqueue for consumer who want to be
      called from user context.
      
      Thanks a lot to Sagi Grimberg who helped reviewing the API, wrote
      the current version of the workqueue code because my two previous
      attempts sucked too much and converted the iSER initiator to the new
      API.
      Signed-off-by: NChristoph Hellwig <hch@lst.de>
      14d3a3b2
  14. 08 12月, 2015 1 次提交
  15. 31 10月, 2015 1 次提交