02 Nov, 2011

2 commits

  • * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband: (62 commits)
    mlx4_core: Deprecate log_num_vlan module param
    IB/mlx4: Don't set VLAN in IBoE WQEs' control segment
    IB/mlx4: Enable 4K mtu for IBoE
    RDMA/cxgb4: Mark QP in error before disabling the queue in firmware
    RDMA/cxgb4: Serialize calls to CQ's comp_handler
    RDMA/cxgb3: Serialize calls to CQ's comp_handler
    IB/qib: Fix issue with link states and QSFP cables
    IB/mlx4: Configure extended active speeds
    mlx4_core: Add extended port capabilities support
    IB/qib: Hold links until tuning data is available
    IB/qib: Clean up checkpatch issue
    IB/qib: Remove s_lock around header validation
    IB/qib: Precompute timeout jiffies to optimize latency
    IB/qib: Use RCU for qpn lookup
    IB/qib: Eliminate divide/mod in converting idx to egr buf pointer
    IB/qib: Decode path MTU optimization
    IB/qib: Optimize RC/UC code by IB operation
    IPoIB: Use the right function to do DMA unmap pages
    RDMA/cxgb4: Use correct QID in insert_recv_cqe()
    RDMA/cxgb4: Make sure flush CQ entries are collected on connection close
    ...

    Linus Torvalds
     
  • …sc', 'mlx4', 'misc', 'nes', 'qib' and 'xrc' into for-next

    Roland Dreier
     

29 Oct, 2011

1 commit


19 Oct, 2011

1 commit


14 Oct, 2011

3 commits


27 Jul, 2011

1 commit

  • This allows us to move duplicated code in
    (atomic_inc_not_zero() for now) to

    Signed-off-by: Arun Sharma
    Reviewed-by: Eric Dumazet
    Cc: Ingo Molnar
    Cc: David Miller
    Cc: Eric Dumazet
    Acked-by: Mike Frysinger
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Arun Sharma
     

19 Jul, 2011

5 commits

  • Allocate flow counter per Ethernet/IBoE port, and attach this counter
    to all the QPs created on that port. Based on patch by Eli Cohen
    .

    Signed-off-by: Or Gerlitz
    Signed-off-by: Roland Dreier

    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 .

    Signed-off-by: Or Gerlitz
    Signed-off-by: Roland Dreier

    Or Gerlitz
     
  • Fix the address handle portion of the QP context structure to have the
    correct bit location for the counter index field.

    Signed-off-by: Eli Cohen
    Signed-off-by: Or Gerlitz
    Signed-off-by: Roland Dreier

    Or Gerlitz
     
  • Query another dword containing up to 32 extended device capabilities
    and merge it into struct mlx4_caps.flags. Update the code that
    handles the current extended device capabilities (e.g UDP RSS, WoL,
    vep steering, etc) to use the extended device cap flags field instead
    of a field per extended capability. Initial patch done by Eli Cohen
    .

    Signed-off-by: Or Gerlitz
    Signed-off-by: Roland Dreier

    Or Gerlitz
     
  • The latest firmware adds a second dword containing more device flags,
    so extend the device capabilities flags field from 32 to 64 bits.
    Derived from patch by Eli Cohen

    Signed-off-by: Or Gerlitz
    Signed-off-by: Roland Dreier

    Or Gerlitz
     

24 Mar, 2011

6 commits

  • Using blue flame can improve latency by allowing the HW to more efficiently
    access the WQE. This patch presents two functions that are used to allocate or
    release HW resources for using blue flame; the caller need to supply a struct
    mlx4_bf object when allocating resources. Consumers that make use of this API
    should post doorbells to the UAR object pointed by the initialized struct
    mlx4_bf;

    Signed-off-by: Eli Cohen
    Signed-off-by: David S. Miller

    Eli Cohen
     
  • The mlx4_en module now uses the new steering mechanism.
    The RX packets are now steered through the MCG table instead
    of Mac table for unicast, and default entry for multicast.
    The feature is enabled through INIT_HCA

    Signed-off-by: Yevgeny Petrilin
    Signed-off-by: David S. Miller

    Yevgeny Petrilin
     
  • The same packet steering mechanism would be used both for IB and Ethernet,
    Both multicasts and unicasts.
    This commit prepares the general infrastructure for this.

    Signed-off-by: Yevgeny Petrilin
    Signed-off-by: David S. Miller

    Yevgeny Petrilin
     
  • HW revision is derived from device ID and rev id.

    Signed-off-by: Eugenia Emantayev
    Signed-off-by: Yevgeny Petrilin
    Signed-off-by: David S. Miller

    Yevgeny Petrilin
     
  • The driver queries the FW for WOL support.
    Ethtool get/set_wol is implemented accordingly.
    Only magic packets are supported at the time.

    Signed-off-by: Igor Yarovinsky
    Signed-off-by: Yevgeny Petrilin
    Signed-off-by: David S. Miller

    Yevgeny Petrilin
     
  • Adding a pool of MSI-X vectors and EQs that can be used explicitly by mlx4_core
    customers (mlx4_ib, mlx4_en). The consumers will assign their own names to the
    interrupt vectors. Those vectors are not opened at mlx4 device initialization,
    opened by demand.
    Changed the max number of possible EQs according to the new scheme, no longer relies on
    on number of cores.
    The new functionality is exposed through mlx4_assign_eq() and mlx4_release_eq().
    Customers that do not use the new API will get completion vectors as before.

    Signed-off-by: Markuze Alex
    Signed-off-by: Yevgeny Petrilin
    Signed-off-by: David S. Miller

    Yevgeny Petrilin
     

13 Jan, 2011

1 commit

  • The newest device firmware stores IB vs. Ethernet protocol in two bits
    in members_count field of multicast group table (0: Infiniband, 1:
    Ethernet). When changing the QP members count for a multicast group,
    it important not to reset this information. When calling multicast
    attach first time, the protocol type should be specified. In this
    patch we always set it IB, but in the future we will handle Ethernet
    too. When looking for a QP, the protocol type shoud be checked too.

    Signed-off-by: Aleksey Senin
    Signed-off-by: Roland Dreier

    Aleksey Senin
     

27 Oct, 2010

2 commits

  • * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband: (63 commits)
    IB/qib: clean up properly if pci_set_consistent_dma_mask() fails
    IB/qib: Allow driver to load if PCIe AER fails
    IB/qib: Fix uninitialized pointer if CONFIG_PCI_MSI not set
    IB/qib: Fix extra log level in qib_early_err()
    RDMA/cxgb4: Remove unnecessary KERN_ use
    RDMA/cxgb3: Remove unnecessary KERN_ use
    IB/core: Add link layer type information to sysfs
    IB/mlx4: Add VLAN support for IBoE
    IB/core: Add VLAN support for IBoE
    IB/mlx4: Add support for IBoE
    mlx4_en: Change multicast promiscuous mode to support IBoE
    mlx4_core: Update data structures and constants for IBoE
    mlx4_core: Allow protocol drivers to find corresponding interfaces
    IB/uverbs: Return link layer type to userspace for query port operation
    IB/srp: Sync buffer before posting send
    IB/srp: Use list_first_entry()
    IB/srp: Reduce number of BUSY conditions
    IB/srp: Eliminate two forward declarations
    IB/mlx4: Signal node desc changes to SM by using FW to generate trap 144
    IB: Replace EXTRA_CFLAGS with ccflags-y
    ...

    Linus Torvalds
     
  • …sc', 'mlx4', 'nes', 'qib' and 'srp' into for-next

    Roland Dreier
     

26 Oct, 2010

4 commits

  • This patch allows IBoE traffic to be encapsulated in 802.1Q tagged
    VLAN frames. The VLAN tag is encoded in the GID and derived from it
    by a simple computation.

    The netdev notifier callback is modified to catch VLAN device
    addition/removal and the port's GID table is updated to reflect the
    change, so that for each netdevice there is an entry in the GID table.
    When the port's GID table is exhausted, GID entries will not be added.
    Only children of the main interfaces can add to the GID table; if a
    VLAN interface is added on another VLAN interface (e.g. "vconfig add
    eth2.6 8"), then that interfaces will not add an entry to the GID
    table.

    Signed-off-by: Eli Cohen
    Signed-off-by: Roland Dreier

    Eli Cohen
     
  • Add support for IBoE to mlx4_ib. The bulk of the code is handling the
    new address vector fields; mlx4 needs the MAC address of a remote node
    to include it in a WQE (for datagrams) or in the QP context (for
    connected QPs). Address resolution is done by assuming all unicast
    GIDs are either link-local IPv6 addresses.

    Multicast group attach/detach needs to update the NIC's multicast
    filters; but since attaching a QP to a multicast group can be done
    before the QP is bound to a port, for IBoE we need to keep track of
    all multicast groups that a QP is attached too before it transitions
    from INIT to RTR (since it does not have a port in the INIT state).

    Signed-off-by: Eli Cohen

    [ Many things cleaned up and otherwise monkeyed with; hope I didn't
    introduce too many bugs. - Roland ]

    Signed-off-by: Roland Dreier

    Eli Cohen
     
  • Add fields to hardware data structures and add new constants required for IBoE
    support.

    Signed-off-by: Eli Cohen
    Signed-off-by: Roland Dreier

    Eli Cohen
     
  • Add a mechanism for mlx4 protocol drivers to get a pointer to other
    drivers's device objects. For this, an exported function,
    mlx4_get_protocol_dev() is added, which allows a driver to get some
    other driver's device based on the protocol that the driver
    implements. Two protocols are added: MLX4_PROTOCOL_IB and
    MLX4_PROTOCOL_EN.

    This will be used in mlx4 IBoE support so that mlx4_ib can find the
    corresponding mlx4_en netdev.

    Signed-off-by: Eli Cohen

    [ Clean up and rename a few things. - Roland ]

    Signed-off-by: Roland Dreier

    Eli Cohen
     

24 Oct, 2010

1 commit

  • The Node Description cannot be changed via MADs (it is read-only).
    Until now, it was changed in the driver via sysfs, and the new Node
    Description was simply inserted by the driver into MAD responses
    (replacing the description returned by FW).

    System startup scripts use the sysfs interface to change the node
    description at driver startup to show the hostname, etc. However, this
    has a race condition: the SM could discover the original FW node
    description rather than the system-specific description if it queried the
    port before the startup scripts finish running.

    For mlx4, we fix this with a new FW command (SET_NODE) that allows
    passing the new node description to FW. When this command is invoked,
    FW sends a trap 144 to the SM. When it gets this trap, the SM can
    query the node to obtain the new node description -- thus eliminating
    the effects of the race.

    This patch simply calls SET_NODE command when a new node description
    is entered via sysfs (thus causing trap 144 to be issued by the FW).
    We ignore all failures of the SET_NODE command (including those caused
    by using a device FW that predates the SET_NODE command), since in
    that case things work just as before.

    Signed-off-by: Jack Morgenstein
    Signed-off-by: Roland Dreier

    Jack Morgenstein
     

12 Oct, 2010

1 commit


25 Aug, 2010

3 commits

  • Adding capability for RSS for UDP traffic, hashing is done based on
    IP addresses and UDP port number.
    The support depends on HW/FW capabilities.

    Signed-off-by: Yevgeny Petrilin
    Signed-off-by: David S. Miller

    Yevgeny Petrilin
     
  • The report now based on query from FW, giving the correct tranciever type
    and link speed.

    Signed-off-by: Yevgeny Petrilin
    Signed-off-by: David S. Miller

    Yevgeny Petrilin
     
  • The selftest includes 5 features:
    1. Interrupt test: Executing commands and receiving command completion
    on all our interrupt vectors.
    2. Link test: Verifying we are connected to valid link partner.
    3. Speed test: Check that we negotiated link speed correctly.
    4. Registers test: Activate HW health check command.
    5. Loopback test: Send a packet on loopback interface and catch it on RX side.

    Signed-off-by: Yevgeny Petrilin
    Signed-off-by: David S. Miller

    Yevgeny Petrilin
     

22 Apr, 2010

1 commit


13 Nov, 2009

1 commit

  • Current code has a limitation: an LSO header is not allowed to cross a
    64 byte boundary. This patch removes this limitation by setting the
    WQE RR for large headers thus allowing LSO headers of any size. The
    extra buffer reserved for MLX4_IB_QP_LSO QPs has been doubled, from 64
    to 128 bytes, assuming this is reasonable upper limit for header
    length. Also, this patch will cause IB_DEVICE_UD_TSO to be set only
    for HCA FW versions that set MLX4_DEV_CAP_FLAG_BLH; e.g. FW version
    2.6.000 and higher.

    Signed-off-by: Eli Cohen
    Signed-off-by: Roland Dreier

    Eli Cohen
     

06 Jun, 2009

1 commit

  • The ConnectX Programmer's Reference Manual states that the "SO" bit
    must be set when posting Fast Register and Local Invalidate send work
    requests. When this bit is set, the work request will be executed
    only after all previous work requests on the send queue have been
    executed. (If the bit is not set, Fast Register and Local Invalidate
    WQEs may begin execution too early, which violates the defined
    semantics for these operations)

    This fixes the issue with NFS/RDMA reported in

    Signed-off-by: Jack Morgenstein
    Cc:
    Signed-off-by: Roland Dreier

    Jack Morgenstein
     

28 May, 2009

1 commit

  • The current MTT allocator uses kmalloc() to allocate a buffer for its
    buddy allocator, and thus is limited in the amount of MTT segments
    that it can control. As a result, the size of memory that can be
    registered is limited too. This patch uses a module parameter to
    control the number of MTT entries that each segment represents,
    allowing more memory to be registered with the same number of
    segments.

    Signed-off-by: Eli Cohen
    Signed-off-by: Roland Dreier

    Eli Cohen
     

19 Mar, 2009

1 commit

  • When a port's link is down (except to driver restart) and the port is
    configured for auto sensing, we try to sense port link type (Ethernet
    or InfiniBand) in order to determine how to initialize the port. If
    the port type needs to be changed, all mlx4 for the device interfaces
    are unregistered and then registered again with the new port
    types. Sensing is done with intervals of 3 seconds.

    Signed-off-by: Yevgeny Petrilin
    Signed-off-by: Roland Dreier

    Yevgeny Petrilin
     

22 Dec, 2008

1 commit

  • When using MSI-X mode, create a completion event queue for each CPU.
    Report the number of completion EQs in a new struct mlx4_caps member,
    num_comp_vectors, and extend the mlx4_cq_alloc() interface with a
    vector parameter so that consumers can specify which completion EQ
    should be used to report events for the CQ being created.

    Signed-off-by: Yevgeny Petrilin
    Signed-off-by: Roland Dreier

    Yevgeny Petrilin
     

29 Nov, 2008

1 commit

  • Commit 7ff93f8b ("mlx4_core: Multiple port type support") introduced
    support for different port types. As part of that support, SET_PORT
    is invoked to set the port type during driver startup. However, as a
    side-effect, for IB ports the invocation of this command also sets the
    port's capability mask to zero (losing the default value set by FW).

    To fix this, get the default ib port capabilities (via a MAD_IFC Port
    Info query) during driver startup, and save them for use in the
    mlx4_SET_PORT command when setting the port-type to Infiniband.

    This patch fixes problems with subnet manager (SM) failover such as
    , which occurred
    because the IsTrapSupported bit in the capability mask was zeroed.

    Signed-off-by: Jack Morgenstein
    Signed-off-by: Roland Dreier

    Jack Morgenstein
     

23 Oct, 2008

2 commits

  • Multi-protocol adapters support different port types. Each consumer
    of mlx4_core queries for supported port types; in particular mlx4_ib
    can no longer assume that all physical ports belong to it. Port type
    is configured through a sysfs interface. When the type of a port is
    changed, all mlx4 interfaces are unregistered, and then registered
    again with the new port types.

    Signed-off-by: Yevgeny Petrilin
    Signed-off-by: Roland Dreier

    Yevgeny Petrilin
     
  • Add support for managing MAC and VLAN filters for each port.

    Signed-off-by: Yevgeny Petrilin
    Signed-off-by: Oren Duer
    Signed-off-by: Roland Dreier

    Yevgeny Petrilin