1. 22 12月, 2011 1 次提交
  2. 21 12月, 2011 1 次提交
  3. 20 12月, 2011 13 次提交
  4. 17 12月, 2011 5 次提交
  5. 16 12月, 2011 5 次提交
  6. 15 12月, 2011 1 次提交
  7. 14 12月, 2011 14 次提交
    • Y
      6edf91da
    • 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
    • J
      mlx4_core: adjust catas operation for SRIOV mode · d81c7186
      Jack Morgenstein 提交于
      When running in SRIOV mode, driver should not automatically start/stop
      the mlx4_core upon sensing an HCA internal error -- doing this disables/enables
      sriov, which will cause the hypervisor to hang if there are running VMs with
      attached VFs.
      
      In addition, on VMs the catas process should not run at all, since the HCA
      error buffer is not available to VMs in the BARs.
      Signed-off-by: NJack Morgenstein <jackm@dev.mellanox.co.il>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      d81c7186
    • 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_en: Allow communication between functions on same host · 5b4c4d36
      Eugenia Emantayev 提交于
      To enable internal loopback, always fill DMAC in control segment
      when transmitting the packet, once this is done, the packet is subject
      for loopback for if the DMAC mathces one of the multicast/unicast addresses
      registered on the physical port.
      In receive path if source MAC is our own MAC and we are not in selftest,
      or not in force LB mode - drop this packet.
      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>
      5b4c4d36
    • 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: Add wrapper functions and comm channel and slave event support to EQs · acba2420
      Jack Morgenstein 提交于
      Passing async events to slaves:
      In SRIOV mode, each slave creates its own async EQ, but only the master can
      register directly with the FW to receive async events.  Async events which
      should be passed to slaves (such as a WQ_ACCESS_ERROR for a QP owned by a slave)
      are generated at the slave by the master using the GEN_EQE FW command.
      
      Wrapper functions: mlx4_MAP_EQ_wrapper
      Only the master can map an EQ. The slave commands to map their EQs arrive
      at the master via the comm channel.  The master then invokes the wrapper
      function to do the work (and enter the resource in the tracking database).
      
      New events: COMM_CHANNEL and FLR
      The COMM_CHANNEL event arrives only at the master, and signals that
      a slave has posted a command on the comm channel.
      The FLR event is generated by the FW when a guest operating a VF
      unexpectedly goes down.
      Signed-off-by: NJack Morgenstein <jackm@dev.mellanox.co.il>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      acba2420
    • 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
    • J
      mlx4_core: cq modifications for SRIOV · d7233386
      Jack Morgenstein 提交于
      CQs 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>
      d7233386
    • J
      mlx4_core: qp modifications for SRIOV · fe9a2603
      Jack Morgenstein 提交于
      QPs 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>
      fe9a2603
    • J
      mlx4_core: srq modifications for SRIOV · 3ec65b2b
      Jack Morgenstein 提交于
      SRQs 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>
      3ec65b2b