24 Feb, 2011

33 commits

  • Signed-off-by: David S. Miller

    David S. Miller
     
  • David S. Miller
     
  • Enhance TIPC to skip unnecessary (and, in some cases, redundant)
    preparation work when sending a broadcast link NACK message, since this
    preparation is only required for broadcast messages that are sent in a
    reliable manner. This change also fixes a bug that caused NACK messages
    to be improperly counted as "TX packets" in TIPC's broadcast link
    statistics.

    Signed-off-by: Allan Stephens
    Signed-off-by: Paul Gortmaker

    Allan Stephens
     
  • Eliminates support for the "number of requested links" field in a neighbor
    discovery message. This field was never used and has been removed from
    the TIPC 2.0 protocol specification.

    Signed-off-by: Allan Stephens
    Signed-off-by: Paul Gortmaker

    Allan Stephens
     
  • Eliminates TIPC's prototype support for message sequence numbering
    on routable connections (i.e. connections requiring more than one hop).
    This capability isn't currently used, and can be removed since TIPC
    only supports systems in which all inter-node communication can be
    achieved in a single hop.

    Signed-off-by: Allan Stephens
    Signed-off-by: Paul Gortmaker

    Allan Stephens
     
  • Ensure that the routine that starts up processing on a newly created
    link endpoint takes the spinlock of the node object that owns the link,
    to prevent possible conflicts with processing involving other links
    owned by that node object.

    Signed-off-by: Allan Stephens
    Signed-off-by: Paul Gortmaker

    Allan Stephens
     
  • Modifies TIPC's congestion control between a connected port and its
    peer so that it works as documented. The following changes have been
    made:

    1) The counter of the number of messages sent by a port now starts
    at zero, rather than one. This prevents the port from reporting port
    congestion one message earlier than it was supposed to.

    2) The counter of the number of messages sent by a port is now
    incremented only if a non-empty message is sent successfully.
    This prevents the port from becoming permanently congested if
    too many send attempts are unsuccessful because of congestion
    (or other reasons). It also removes the risk that empty hand-
    shaking messages used during connection setup might cause the
    port to report congestion earlier than it was supposed to.

    3) The counter of the number of unacknowledged messages received by
    a port controlled by an internal TIPC service is now incremented
    only if the message is non-empty, in order to be consistent with
    the aforementioned changes.

    Signed-off-by: Allan Stephens
    Signed-off-by: Paul Gortmaker

    Allan Stephens
     
  • Eliminates a local iovec structure containing no data, which was
    previously used during the establishment of a topology service connection,
    since the same effect can be achieved by passing in a NULL pointer and
    an iovec length of zero.

    Signed-off-by: Allan Stephens
    Signed-off-by: Paul Gortmaker

    Allan Stephens
     
  • Ensures that a link reset or activate message has a "probe" field
    of zero. (This field is currently unused in these messages, but this
    could potentially change in future versions of TIPC.)

    Signed-off-by: Allan Stephens
    Signed-off-by: Paul Gortmaker

    Allan Stephens
     
  • Enhances TIPC's unicast and broadcast link code to update the transmit
    queue maximum size counter in a single place, namely the routine that
    adds messages to the queue. This ensures that the maximum size statistic
    reported for unicast links is completely accurate, rather than being
    partially based on statistical sampling.

    The changes to link.h are just documenting the roles of the variables.

    Signed-off-by: Allan Stephens
    Signed-off-by: Paul Gortmaker

    Allan Stephens
     
  • Modifies the initialization code for TIPC's topology service to
    avoid taking the spinlock protecting the subscriber list, since
    there is no need to do this.

    Signed-off-by: Allan Stephens
    Signed-off-by: Paul Gortmaker

    Allan Stephens
     
  • Allows the broadcast link to track the node that is requesting a retransmit
    in a new field dedicated to that purpose. This replaces the existing
    mechanism that (ab)uses an existing node structure linked list field to do
    the tracking.

    Signed-off-by: Allan Stephens
    Signed-off-by: Paul Gortmaker

    Allan Stephens
     
  • Remove all instances of legacy or proposed-but-not-implemented code
    that lives within an #if 0 ... #endif block. If some of it is needed
    in the future it can recovered out of history, but there is no need
    for it to clutter up the active code base.

    Signed-off-by: Allan Stephens
    Signed-off-by: Paul Gortmaker

    Allan Stephens
     
  • Corrects print statements that use %x to print pointer values to use
    %p instead, so that 64-bit pointer values are displayed correctly.

    Signed-off-by: Allan Stephens
    Signed-off-by: Paul Gortmaker

    Allan Stephens
     
  • Enhances TIPC link code to ignore an invalid link tolerance value
    contained in an incoming LINK_PROTOCOL message, rather than
    processing the value and potentially causing a divide-by-zero error.

    Also add a compile-time check that catches attempts to redefine
    TIPC's minimum link tolerance value in a manner that might result
    in the same divide-by-zero error at run-time.

    Signed-off-by: Allan Stephens
    Signed-off-by: Paul Gortmaker

    Allan Stephens
     
  • Reject TIPC configuration service messages without a full message
    header. Previously, an application that sent a message to the
    configuration service that was too short could cause the validation
    code to access an uninitialized field in the msghdr structure,
    resulting in a memory access exception.

    Signed-off-by: Allan Stephens
    Signed-off-by: Paul Gortmaker

    Allan Stephens
     
  • Eliminates a global variable that was previously used by TIPC's user
    registry to track the number of distinct applications using TIPC. Due to
    the recent elimination of the user registry this variable no longer serves
    any purpose and can be removed.

    Signed-off-by: Allan Stephens
    Signed-off-by: Paul Gortmaker

    Allan Stephens
     
  • Combines two distinct structures containing information about a TIPC bearer
    into a single structure. The structures were previously kept separate so
    that public information about a bearer could be made available to plug-in
    media types using TIPC's native API, while the remaining information was
    kept private for use by TIPC itself. However, now that the native API has
    been removed there is no longer any need for this arrangement.

    Since one of the structures was already embedded within the other, the
    change largely involves replacing instances of "publ.foo" with "foo".
    The changes do not otherwise alter the operation of TIPC bearers.

    Signed-off-by: Allan Stephens
    Signed-off-by: Paul Gortmaker

    Allan Stephens
     
  • Merge two distinct structures containing information about a TIPC port
    into a single structure. The structures were previously kept separate
    so that public information about a port could be made available to
    applications using TIPC's native API, while the remaining information
    was kept private for use by TIPC itself. However, now that the native
    API has been removed there is no longer any need for this somewhat
    confusing arrangement.

    Since one of the structures was already embedded within the other, the
    change largely involves replacing instances of "publ.foo" with "foo".
    The changes do not otherwise alter the operation of TIPC ports.

    Signed-off-by: Allan Stephens
    Signed-off-by: Paul Gortmaker

    Allan Stephens
     
  • Max rx queues and tx queues are governed by fimware.
    So driver should not validate these values.

    Signed-off-by: Rajesh Borundia
    Signed-off-by: Amit Kumar Salecha
    Signed-off-by: David S. Miller

    Rajesh Borundia
     
  • o Remove checks of 1 for auto_fw_reset module parameter.
    auto_fw_reset is of type int and can have value > 1.
    o Remove unnecessary #define for 1

    Signed-off-by: Amit Kumar Salecha
    Signed-off-by: David S. Miller

    amit salecha
     
  • Use discrete setting ops for not updated drivers. This will not make
    them conform to full G/SFEATURES semantics, though.

    Signed-off-by: Michał Mirosław
    Signed-off-by: David S. Miller

    Michał Mirosław
     
  • Implement getting rx checksum state for not updated drivers.

    Signed-off-by: Michał Mirosław
    Signed-off-by: David S. Miller

    Michał Mirosław
     
  • Avoid "Features changed" message and ndo_set_features call on device
    registration caused by automatic enabling of GSO and GRO. Driver should
    have enabled hardware offloads it set in features, so the ndo_set_features()
    is not needed at registration time.

    Signed-off-by: Michał Mirosław
    Signed-off-by: David S. Miller

    Michał Mirosław
     
  • Fix netdev_update_features() messages on register time by moving
    the call further in register_netdevice(). When
    netdev->reg_state != NETREG_REGISTERED, netdev_name() returns
    "(unregistered netdevice)" even if the dev's name is already filled.

    Signed-off-by: Michał Mirosław
    Signed-off-by: David S. Miller

    Michał Mirosław
     
  • Signed-off-by: Florian Fainelli
    Signed-off-by: David S. Miller

    Florian Fainelli
     
  • The original code does not work well when the number of mulitcast
    address to handle is greater than MCAST_MAX. It only enable promiscous
    mode instead of multicast hash table mode, so the hash table function
    will not be activated and all multicast frames will be recieved in this
    condition.

    This patch fixes the following issues with the r6040 NIC operating in
    multicast:

    1) When the IFF_ALLMULTI flag is set, we should write 0xffff to the NIC
    hash table registers to make it process multicast traffic.

    2) When the number of multicast address to handle is smaller than
    MCAST_MAX, we should use the NIC multicast registers MID1_{L,M,H}.

    3) The hashing of the address was not correct, due to an invalid
    substraction (15 - (crc & 0x0f)) instead of (crc & 0x0f) and an
    incorrect crc algorithm (ether_crc_le) instead of (ether_crc).

    4) If necessary, we should set HASH_EN flag in MCR0 to enable multicast
    hash table function.

    Reported-by: Marc Leclerc
    Tested-by: Marc Leclerc
    Signed-off-by: Shawn Lin
    Signed-off-by: Albert Chen
    Signed-off-by: Florian Fainelli
    Signed-off-by: David S. Miller

    Shawn Lin
     
  • gfp_t needs to be cast to integer.

    Signed-off-by: Stephen Hemminger
    Signed-off-by: David S. Miller

    stephen hemminger
     
  • * make qdisc_ops local
    * add sparse annotation about expected unlock/unlock in dump_class_stats
    * fix indentation

    Signed-off-by: Stephen Hemminger
    Signed-off-by: David S. Miller

    stephen hemminger
     
  • Signed-off-by: Stephen Hemminger
    Signed-off-by: David S. Miller

    stephen hemminger
     
  • The dmaw_block is an enum and max_pay_load is u32. Therefore
    sparse gives warning about comparison of unsigned and signed value.
    Resolve by using min_t to force cast.

    Signed-off-by: Stephen Hemminger
    Signed-off-by: David S. Miller

    stephen hemminger
     
  • Use __force to quiet sparse warnings for cases where the code
    is simulating user space pointers.

    Signed-off-by: Stephen Hemminger
    Signed-off-by: David S. Miller

    stephen hemminger
     
  • This is the Stochastic Fair Blue scheduler, based on work from :

    W. Feng, D. Kandlur, D. Saha, K. Shin. Blue: A New Class of Active Queue
    Management Algorithms. U. Michigan CSE-TR-387-99, April 1999.

    http://www.thefengs.com/wuchang/blue/CSE-TR-387-99.pdf

    This implementation is based on work done by Juliusz Chroboczek

    General SFB algorithm can be found in figure 14, page 15:

    B[l][n] : L x N array of bins (L levels, N bins per level)
    enqueue()
    Calculate hash function values h{0}, h{1}, .. h{L-1}
    Update bins at each level
    for i = 0 to L - 1
    if (B[i][h{i}].qlen > bin_size)
    B[i][h{i}].p_mark += p_increment;
    else if (B[i][h{i}].qlen == 0)
    B[i][h{i}].p_mark -= p_decrement;
    p_min = min(B[0][h{0}].p_mark ... B[L-1][h{L-1}].p_mark);
    if (p_min == 1.0)
    ratelimit();
    else
    mark/drop with probabilty p_min;

    I did the adaptation of Juliusz code to meet current kernel standards,
    and various changes to address previous comments :

    http://thread.gmane.org/gmane.linux.network/90225
    http://thread.gmane.org/gmane.linux.network/90375

    Default flow classifier is the rxhash introduced by RPS in 2.6.35, but
    we can use an external flow classifier if wanted.

    tc qdisc add dev $DEV parent 1:11 handle 11: \
    est 0.5sec 2sec sfb limit 128

    tc filter add dev $DEV protocol ip parent 11: handle 3 \
    flow hash keys dst divisor 1024

    Notes:

    1) SFB default child qdisc is pfifo_fast. It can be changed by another
    qdisc but a child qdisc MUST not drop a packet previously queued. This
    is because SFB needs to handle a dequeued packet in order to maintain
    its virtual queue states. pfifo_head_drop or CHOKe should not be used.

    2) ECN is enabled by default, unlike RED/CHOKe/GRED

    With help from Patrick McHardy & Andi Kleen

    Signed-off-by: Eric Dumazet
    CC: Juliusz Chroboczek
    CC: Stephen Hemminger
    CC: Patrick McHardy
    CC: Andi Kleen
    CC: John W. Linville
    Signed-off-by: David S. Miller

    Eric Dumazet
     

23 Feb, 2011

7 commits