04 Jan, 2006

2 commits

  • To help in reducing the number of include dependencies, several files were
    touched as they were getting needed headers indirectly for stuff they use.

    Thanks also to Alan Menegotto for pointing out that net/dccp/proto.c had
    linux/dccp.h include twice.

    Signed-off-by: Arnaldo Carvalho de Melo
    Signed-off-by: David S. Miller

    Arnaldo Carvalho de Melo
     
  • Here is a new feature for netem in 2.6.16. It adds the ability to
    randomly corrupt packets with netem. A version was done by
    Hagen Paul Pfeifer, but I redid it to handle the cases of backwards
    compatibility with netlink interface and presence of hardware checksum
    offload. It is useful for testing hardware offload in devices.

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

    Stephen Hemminger
     

14 Dec, 2005

1 commit


21 Nov, 2005

1 commit

  • If two packets were queued to be sent at the same time in the future,
    their order would be reversed. This would occur because the queue is
    traversed back to front, and a position is found by checking whether
    the new packet needs to be sent before the packet being examined. If
    the new packet is to be sent at the same time of a previous packet, it
    would end up before the old packet in the queue. This patch places
    packets in the correct order when they are queued to be sent at a same
    time in the future.

    Signed-off-by: Andrea Bittau
    Signed-off-by: David S. Miller

    Andrea Bittau
     

18 Nov, 2005

1 commit

  • On Thu, 17 Nov 2005, David Gómez wrote:

    > I found out that if i select NET_CLS_ROUTE4, save my changes and exit
    > menuconfig, execute again make menuconfig and go to QoS options, then the new
    > available options are visible. So menuconfig has some problem refreshing
    > contents :?

    No, they were there before too, but you have to go up one level to see
    them.

    It's better in 2.6.15-rc1-git5, but the menu structure is still a little
    messed up, the patch below properly indents all menu entries.

    Signed-off-by: Roman Zippel
    Signed-off-by: David S. Miller

    Roman Zippel
     

09 Nov, 2005

2 commits

  • From: Jesper Juhl

    This is the net/ part of the big kfree cleanup patch.

    Remove pointless checks for NULL prior to calling kfree() in net/.

    Signed-off-by: Jesper Juhl
    Cc: "David S. Miller"
    Cc: Arnaldo Carvalho de Melo
    Acked-by: Marcel Holtmann
    Acked-by: YOSHIFUJI Hideaki
    Signed-off-by: Andrew Morton

    Jesper Juhl
     
  • Fixes an invalid memory reference when the basic classifier
    is used without any ematches but just actions.

    Signed-off-by: Thomas Graf
    Signed-off-by: David S. Miller

    Thomas Graf
     

06 Nov, 2005

28 commits


03 Nov, 2005

1 commit

  • Make "QoS and/or fair queueing" have its own menu, it's too big to be
    inlined into "Network options". Remove the obsolete NET_QOS option.
    Automatically select NET_CLS if needed. Do the same for NET_ESTIMATOR
    but allow it to be selected manually for statistical purposes. Add
    comments to separate queueing from classification. Fix dependencies
    and ordering of classifiers. Improve descriptions/help texts and
    remove outdated pieces.

    Signed-off-by: Thomas Graf
    Signed-off-by: Arnaldo Carvalho de Melo

    Thomas Graf
     

14 Oct, 2005

1 commit

  • Opterons with frequency scaling have fully unsynchronized TSCs
    running at different frequencies, so using TSCs there is not a good idea.
    Also some other x86 boxes have this problem. gettimeofday should be good
    enough, so just disable it.

    Signed-off-by: Andi Kleen
    Signed-off-by: David S. Miller

    Andi Kleen
     

04 Oct, 2005

1 commit

  • Arnaldo and I agreed it could be applied now, because I have other
    pending patches depending on this one (Thank you Arnaldo)

    (The other important patch moves skc_refcnt in a separate cache line,
    so that the SMP/NUMA performance doesnt suffer from cache line ping pongs)

    1) First some performance data :
    --------------------------------

    tcp_v4_rcv() wastes a *lot* of time in __inet_lookup_established()

    The most time critical code is :

    sk_for_each(sk, node, &head->chain) {
    if (INET_MATCH(sk, acookie, saddr, daddr, ports, dif))
    goto hit; /* You sunk my battleship! */
    }

    The sk_for_each() does use prefetch() hints but only the begining of
    "struct sock" is prefetched.

    As INET_MATCH first comparison uses inet_sk(__sk)->daddr, wich is far
    away from the begining of "struct sock", it has to bring into CPU
    cache cold cache line. Each iteration has to use at least 2 cache
    lines.

    This can be problematic if some chains are very long.

    2) The goal
    -----------

    The idea I had is to change things so that INET_MATCH() may return
    FALSE in 99% of cases only using the data already in the CPU cache,
    using one cache line per iteration.

    3) Description of the patch
    ---------------------------

    Adds a new 'unsigned int skc_hash' field in 'struct sock_common',
    filling a 32 bits hole on 64 bits platform.

    struct sock_common {
    unsigned short skc_family;
    volatile unsigned char skc_state;
    unsigned char skc_reuse;
    int skc_bound_dev_if;
    struct hlist_node skc_node;
    struct hlist_node skc_bind_node;
    atomic_t skc_refcnt;
    + unsigned int skc_hash;
    struct proto *skc_prot;
    };

    Store in this 32 bits field the full hash, not masked by (ehash_size -
    1) Using this full hash as the first comparison done in INET_MATCH
    permits us immediatly skip the element without touching a second cache
    line in case of a miss.

    Suppress the sk_hashent/tw_hashent fields since skc_hash (aliased to
    sk_hash and tw_hash) already contains the slot number if we mask with
    (ehash_size - 1)

    File include/net/inet_hashtables.h

    64 bits platforms :
    #define INET_MATCH(__sk, __hash, __cookie, __saddr, __daddr, __ports, __dif)\
    (((__sk)->sk_hash == (__hash))
    ((*((__u64 *)&(inet_sk(__sk)->daddr)))== (__cookie)) && \
    ((*((__u32 *)&(inet_sk(__sk)->dport))) == (__ports)) && \
    (!((__sk)->sk_bound_dev_if) || ((__sk)->sk_bound_dev_if == (__dif))))

    32bits platforms:
    #define TCP_IPV4_MATCH(__sk, __hash, __cookie, __saddr, __daddr, __ports, __dif)\
    (((__sk)->sk_hash == (__hash)) && \
    (inet_sk(__sk)->daddr == (__saddr)) && \
    (inet_sk(__sk)->rcv_saddr == (__daddr)) && \
    (!((__sk)->sk_bound_dev_if) || ((__sk)->sk_bound_dev_if == (__dif))))

    - Adds a prefetch(head->chain.first) in
    __inet_lookup_established()/__tcp_v4_check_established() and
    __inet6_lookup_established()/__tcp_v6_check_established() and
    __dccp_v4_check_established() to bring into cache the first element of the
    list, before the {read|write}_lock(&head->lock);

    Signed-off-by: Eric Dumazet
    Acked-by: Arnaldo Carvalho de Melo
    Signed-off-by: David S. Miller

    Eric Dumazet
     

10 Sep, 2005

1 commit


30 Aug, 2005

1 commit