1. 13 3月, 2012 3 次提交
  2. 07 3月, 2012 1 次提交
    • O
      mlx4_core: Get rid of redundant ext_port_cap flags · 8154c07f
      Or Gerlitz 提交于
      While doing the work for commit a6f7feae ("IB/mlx4: pass SMP
      vendor-specific attribute MADs to firmware") we realized that the
      firmware would respond on all sorts of vendor-specific MADs.
      Therefore commit 97285b78 ("mlx4_core: Add extended port
      capabilities support") adds redundant code into the driver, since
      there's no real reaon to maintain the extended capabilities of the
      port, as they can be queried on demand (e.g the FDR10 capability).
      
      This patch reverts commit 97285b78 and removes the check for
      extended caps from the mlx4_ib driver port query flow.
      Signed-off-by: NOr Gerlitz <ogerlitz@mellanox.com>
      Signed-off-by: NRoland Dreier <roland@purestorage.com>
      8154c07f
  3. 23 1月, 2012 1 次提交
  4. 14 12月, 2011 10 次提交
    • Y
      7d4b6bcc
    • J
      mlx4_core: Modify driver initialization flow to accommodate SRIOV for Ethernet · ab9c17a0
      Jack Morgenstein 提交于
      1. Added module parameters sr_iov and probe_vf for controlling enablement of
         SRIOV mode.
      2. Increased default max num-qps, num-mpts and log_num_macs to accomodate
         SRIOV mode
      3. Added port_type_array as a module parameter to allow driver startup with
         ports configured as desired.
         In SRIOV mode, only ETH is supported, and this array is ignored; otherwise,
         for the case where the FW supports both port types (ETH and IB), the
         port_type_array parameter is used.
         By default, the port_type_array is set to configure both ports as IB.
      4. When running in sriov mode, the master needs to initialize the ICM eq table
         to hold the eq's for itself and also for all the slaves.
      5. mlx4_set_port_mask() now invoked from mlx4_init_hca, instead of in mlx4_dev_cap.
      6. Introduced sriov VF (slave) device startup/teardown logic (mainly procedures
         mlx4_init_slave, mlx4_slave_exit, mlx4_slave_cap, mlx4_slave_exit and flow
         modifications in __mlx4_init_one, mlx4_init_hca, and mlx4_setup_hca).
         VFs obtain their startup information from the PF (master) device via the
         comm channel.
      7. In SRIOV mode (both PF and VF), MSI_X must be enabled, or the driver
         aborts loading the device.
      8. Do not allow setting port type via sysfs when running in SRIOV mode.
      9. mlx4_get_ownership:  Currently, only one PF is supported by the driver.
         If the HCA is burned with FW which enables more than one PF, only one
         of the PFs is allowed to run.  The first one up grabs a FW ownership
         semaphone -- all other PFs will find that semaphore taken, and the
         driver will not allow them to run.
      Signed-off-by: NJack Morgenstein <jackm@dev.mellanox.co.il>
      Signed-off-by: NYevgeny Petrilin <yevgenyp@mellanox.co.il>
      Signed-off-by: NLiran Liss <liranl@mellanox.co.il>
      Signed-off-by: NMarcel Apfelbaum <marcela@mellanox.co.il>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      ab9c17a0
    • M
      mlx4_core: mtts resources units changed to offset · 2b8fb286
      Marcel Apfelbaum 提交于
      In the previous implementation mtts are managed by:
      1. order     - log(mtt segments), 'mtt segment' groups several mtts together.
      2. first_seg - segment location relative to mtt table.
      In the current implementation:
      1. order     - log(mtts) rather than segments
      2. offset    - mtt index in mtt table
      
      Note: The actual mtt allocation is made in segments but it is
            transparent to callers.
      
      Rational: The mtt resource holders are not interested on how the allocation
                of mtt is done, but rather on how they will use it.
      Signed-off-by: NMarcel Apfelbaum <marcela@dev.mellanox.co.il>
      Reviewed-by: NJack Morgenstein <jackm@dev.mellanox.co.il>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      2b8fb286
    • E
      mlx4: Ethernet port management modifications · ffe455ad
      Eugenia Emantayev 提交于
      The physical port is now common to the PF and VFs.
      The port resources and configuration is managed by the PF, VFs can
      only influence the MTU of the port, it is set as max among all functions,
      Each function allocates RX buffers of required size to meet it's MTU enforcement.
      Port management code was moved to mlx4_core, as the mlx4_en module is
      virtualization unaware
      
      Move handling qp functionality to mlx4_get_eth_qp/mlx4_put_eth_qp
      including reserve/release range and add/release unicast steering.
      Let mlx4_register/unregister_mac deal only with MAC (un)registration.
      Signed-off-by: NEugenia Emantayev <eugenia@mellanox.co.il>
      Signed-off-by: NYevgeny Petrilin <yevgenyp@mellanox.co.il>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      ffe455ad
    • E
      mlx4: Traffic steering management support for SRIOV · 0ec2c0f8
      Eugenia Emantayev 提交于
      Let multicast/unicast attaching flow go through resource tracker.
      The PF is the one responsible for managing all the steering entries.
      Define and use module parameter that determines the number of qps
      per multicast group.
      Minor changes in function calls according to changed prototype.
      Signed-off-by: NEugenia Emantayev <eugenia@mellanox.co.il>
      Signed-off-by: NYevgeny Petrilin <yevgenyp@mellanox.co.il>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      0ec2c0f8
    • E
      mlx4_core: resource tracking for HCA resources used by guests · c82e9aa0
      Eli Cohen 提交于
      The resource tracker is used to track usage of HCA resources by the different
      guests.
      
      Virtual functions (VFs) are attached to guest operating systems but
      resources are allocated from the same pool and are assigned to VFs. It is
      essential that hostile/buggy guests not be able to affect the operation of
      other VFs, possibly attached to other guest OSs since ConnectX firmware is not
      tolerant to misuse of resources.
      
      The resource tracker module associates each resource with a VF and maintains
      state information for the allocated object. It also defines allowed state
      transitions and enforces them.
      
      Relationships between resources are also referred to. For example, CQs are
      pointed to by QPs, so it is forbidden to destroy a CQ if a QP refers to it.
      
      ICM memory is always accessible through the primary function and hence it is
      allocated by the owner of the primary function.
      
      When a guest dies, an FLR is generated for all the VFs it owns and all the
      resources it used are freed.
      
      The tracked resource types are: QPs, CQs, SRQs, MPTs, MTTs, MACs, RES_EQs,
      and XRCDNs.
      Signed-off-by: NEli Cohen <eli@mellanox.co.il>
      Signed-off-by: NJack Morgenstein <jackm@dev.mellanox.co.il>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      c82e9aa0
    • J
      mlx4_core: mtt modifications for SRIOV · ea51b377
      Jack Morgenstein 提交于
      MTTs are resources which are allocated and tracked by the PF driver.
      In multifunction mode, the allocation and icm mapping is done in
      the resource tracker (later patch in this sequence).
      
      To accomplish this, we have "work" functions whose names start with
      "__", and "request" functions (same name, no __). If we are operating
      in multifunction mode, the request function actually results in
      comm-channel commands being sent (ALLOC_RES or FREE_RES).
      The PF-driver comm-channel handler will ultimately invoke the
      "work" (__) function and return the result.
      
      If we are not in multifunction mode, the "work" handler is invoked
      immediately.
      Signed-off-by: NJack Morgenstein <jackm@dev.mellanox.co.il>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      ea51b377
    • M
      mlx4_core: Added FW commands and their wrappers for supporting SRIOV · 5cc914f1
      Marcel Apfelbaum 提交于
      The following commands are added here:
      1. QUERY_FUNC_CAP and its wrapper.  This function is used by VFs when
         they start up to receive configuration information from the PF, such
         as resource quotas for this VF, which ports should be used (currently
         two), what protocol is running on the port (currently Ethernet ONLY,
         or port not active).
      
      2. QUERY_PORT and its wrapper. Previously, this FW command was invoked directly
         by the ETH driver (en_port.c) using mlx4_cmd_box. Virtualization is now
         required here (the VF's MAC address must be substituted for the PFs
         MAC address returned by the FW). We changed the invocation
         in the ETH driver to use mlx4_QUERY_PORT, and added the wrapper.
      
      3. QUERY_HCA. Used by the VF to determine how the HCA was initialized.
         For now, we need only the multicast table member entry size
         (log2_mc_table_entry_sz, in the ConnectX PRM).  No wrapper is needed
         here, because the data may be passed as is to the VF without modification).
      
         In this command, we have added a GLOBAL_CAPS field for passing required
         configuration information from FW to a VF (this field is to allow safely
                         adding new SRIOV capabilities which require support in VF drivers, too).
         Bits will set here by FW in response to PF-driver configuration commands which
         will activate as yet undefined new SRIOV features. The VF will test to see that
         all required capabilities indicated by this field are supported (i.e., if a bit
         is set and the VF driver does not recognize that bit, it must abort
         its initialization).  Currently, no bits are set.
      
      4. Added a CLOSE_PORT wrapper.  The PF context needs to keep track of how many VF contexts
         have the port open.  The PF context will not actually issue the FW close port command
         until the last port user issues a CLOSE_PORT request.
      Signed-off-by: NJack Morgenstein <jackm@dev.mellanox.co.il>
      Signed-off-by: NYevgeny Petrilin <yevgenyp@mellanox.co.il>
      Signed-off-by: NMarcel Apfelbaum <marcela@mellanox.co.il>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      5cc914f1
    • J
      mlx4_core: Reduce number of PD bits to 17 · f5311ac1
      Jack Morgenstein 提交于
      When SRIOV is enabled on the chip (at FW burning time),
      the HCA uses only 17 bits for the PD. The remaining 7 high-order bits
      are ignored.
      
      Change the allocator to return only 17 bits for the PD.  The MSB 7
      bits will be used to encode the slave number for consistency
      checking later on in the resource tracker.
      Signed-off-by: NJack Morgenstein <jackm@dev.mellanox.co.il>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      f5311ac1
    • J
      mlx4_core: initial header-file changes for SRIOV support · 623ed84b
      Jack Morgenstein 提交于
      These changes will not affect module operation as yet. They
      are only to get some structs and enums in place for use by
      subsequent patches (making those smaller).
      
      Added here:
      * sriov state structs and inlines (mlx4_is_master/slave/mfunc)
      * comm-channel and vhcr support structures
      * enum values for new FW and comm-channel virtual commands
        (i.e., commands, passed via the comm channel to the PF-driver).
      * prototypes for many command wrapper functions (used by the
        PF context for processing FW commands passed to it by the VFs).
      * struct mlx4_eqe is moved from eq.c to mlx4.h (it will be used
        by other mlx4_core source files).
      Signed-off-by: NJack Morgenstein <jackm@dev.mellanox.co.il>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      623ed84b
  5. 11 8月, 2011 1 次提交
  6. 22 7月, 2011 1 次提交
  7. 19 7月, 2011 1 次提交
    • O
      mlx4_core: Add network flow counters · f2a3f6a3
      Or Gerlitz 提交于
      ConnectX devices support a set of flow counters that can be attached
      to a set containing one or more QPs.  Each such counter tracks receive
      and transmit packets and bytes of these QPs.  This patch queries the
      device to check support for counters, handles initialization of the
      HCA to enable counters, and initializes a bitmap allocator to control
      counter allocations.  Derived from patch by Eli Cohen <eli@mellanox.co.il>.
      Signed-off-by: NOr Gerlitz <ogerlitz@mellanox.co.il>
      Signed-off-by: NRoland Dreier <roland@purestorage.com>
      f2a3f6a3
  8. 08 4月, 2011 1 次提交
  9. 24 3月, 2011 5 次提交
  10. 16 7月, 2010 1 次提交
    • J
      drivers/net/mlx4: Use %pV, pr_<level>, printk_once · 0a645e80
      Joe Perches 提交于
      Remove near duplication of format string constants by using the newly
      introduced vsprintf extention %pV to reduce text by 20k or so.
      
      $ size drivers/net/mlx4/built-in.o*
         text	   data	    bss	    dec	    hex	filename
       161367	   1866	  48784	 212017	  33c31	drivers/net/mlx4/built-in.o
       142621	   1866	  46248	 190735	  2e90f	drivers/net/mlx4/built-in.o.new
      
      Use printk_once as appropriate.
      Convert printks to pr_<level>, some bare printks now use pr_cont.
      Remove now unused #define PFX.
      Signed-off-by: NJoe Perches <joe@perches.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      0a645e80
  11. 22 5月, 2010 1 次提交
  12. 06 9月, 2009 1 次提交
    • R
      mlx4_core: Allocate and map sufficient ICM memory for EQ context · fa0681d2
      Roland Dreier 提交于
      The current implementation allocates a single host page for EQ context
      memory, which was OK when we only allocated a few EQs.  However, since
      we now allocate an EQ for each CPU core, this patch removes the
      hard-coded limit (which we exceed with 4 KB pages and 128 byte EQ
      context entries with 32 CPUs) and uses the same ICM table code as all
      other context tables, which ends up simplifying the code quite a bit
      while fixing the problem.
      
      This problem was actually hit in practice on a dual-socket Nehalem box
      with 16 real hardware threads and sufficiently odd ACPI tables that it
      shows on boot
      
          SMP: Allowing 32 CPUs, 16 hotplug CPUs
      
      so num_possible_cpus() ends up 32, and mlx4 ends up creating 33 MSI-X
      interrupts and 33 EQs.  This mlx4 bug means that mlx4 can't even
      initialize at all on this quite mainstream system.
      
      Cc: <stable@kernel.org>
      Reported-by: NEli Cohen <eli@mellanox.co.il>
      Tested-by: NChristoph Lameter <cl@linux-foundation.org>
      Signed-off-by: NRoland Dreier <rolandd@cisco.com>
      fa0681d2
  13. 19 3月, 2009 1 次提交
  14. 22 12月, 2008 1 次提交
  15. 29 11月, 2008 1 次提交
  16. 05 11月, 2008 1 次提交
  17. 23 10月, 2008 3 次提交
  18. 11 10月, 2008 1 次提交
  19. 26 7月, 2008 1 次提交
  20. 23 7月, 2008 1 次提交
    • R
      mlx4_core: Keep free count for MTT buddy allocator · e4044cfc
      Roland Dreier 提交于
      MTT entries are allocated with a buddy allocator, which just keeps
      bitmaps for each level of the buddy table.  However, all free space
      starts out at the highest order, and small allocations start scanning
      from the lowest order.  When the lowest order tables have no free
      space, this can lead to scanning potentially millions of bits before
      finding a free entry at a higher order.
      
      We can avoid this by just keeping a count of how many free entries
      each order has, and skipping the bitmap scan when an order is
      completely empty.  This provides a nice performance boost for a
      negligible increase in memory usage.
      Signed-off-by: NRoland Dreier <rolandd@cisco.com>
      e4044cfc
  21. 24 4月, 2008 1 次提交
  22. 17 4月, 2008 1 次提交
    • R
      mlx4_core: Fix confusion between mlx4_event and mlx4_dev_event enums · 37608eea
      Roland Dreier 提交于
      The struct mlx4_interface.event() method was supposed to get an enum
      mlx4_dev_event, but the driver code was actually passing in the
      hardware enum mlx4_event values.  Fix up the callers of
      mlx4_dispatch_event() so that they pass in the right type of value,
      and fix up the event method in mlx4_ib so that it can handle the enum
      mlx4_dev_event values.
      
      This eliminates the need for the subtype parameter to the event
      method, so remove it.
      
      This also fixes the sparse warning
      
          drivers/net/mlx4/intf.c:127:48: warning: mixing different enum types
          drivers/net/mlx4/intf.c:127:48:     int enum mlx4_event  versus
          drivers/net/mlx4/intf.c:127:48:     int enum mlx4_dev_event
      Signed-off-by: NRoland Dreier <rolandd@cisco.com>
      37608eea
  23. 10 10月, 2007 1 次提交