26 Apr, 2007

2 commits

  • This is (mostly) automated change using magic:

    sed -e '/struct sock \*sk/ N' -e '/struct sock \*sk/ N'
    -e '/struct sock \*sk/ N' -e '/struct sock \*sk/ N'
    -e 's|struct sock \*sk,[\n\t ]*struct tcp_sock \*tp\([^{]*\n{\n\)|
    struct sock \*sk\1\tstruct tcp_sock *tp = tcp_sk(sk);\n|g'
    -e 's|struct sock \*sk, struct tcp_sock \*tp|
    struct sock \*sk|g' -e 's|sk, tp\([^-]\)|sk\1|g'

    Fixed four unused variable (tp) warnings that were introduced.

    In addition, manually added newlines after local variables and
    tweaked function arguments positioning.

    $ gcc --version
    gcc (GCC) 4.1.1 20060525 (Red Hat 4.1.1-1)
    ...
    $ codiff -fV built-in.o.old built-in.o.new
    net/ipv4/route.c:
    rt_cache_flush | +14
    1 function changed, 14 bytes added

    net/ipv4/tcp.c:
    tcp_setsockopt | -5
    tcp_sendpage | -25
    tcp_sendmsg | -16
    3 functions changed, 46 bytes removed

    net/ipv4/tcp_input.c:
    tcp_try_undo_recovery | +3
    tcp_try_undo_dsack | +2
    tcp_mark_head_lost | -12
    tcp_ack | -15
    tcp_event_data_recv | -32
    tcp_rcv_state_process | -10
    tcp_rcv_established | +1
    7 functions changed, 6 bytes added, 69 bytes removed, diff: -63

    net/ipv4/tcp_output.c:
    update_send_head | -9
    tcp_transmit_skb | +19
    tcp_cwnd_validate | +1
    tcp_write_wakeup | -17
    __tcp_push_pending_frames | -25
    tcp_push_one | -8
    tcp_send_fin | -4
    7 functions changed, 20 bytes added, 63 bytes removed, diff: -43

    built-in.o.new:
    18 functions changed, 40 bytes added, 178 bytes removed, diff: -138

    Signed-off-by: Ilpo Järvinen
    Signed-off-by: David S. Miller

    Ilpo Järvinen
     
  • Signed-off-by: Arnaldo Carvalho de Melo
    Signed-off-by: David S. Miller

    Arnaldo Carvalho de Melo
     

01 Jul, 2006

1 commit

  • This patch adds GSO support for IPv6 and TCPv6. This is based on a patch
    by Ananda Raju . His original description is:

    This patch enables TSO over IPv6. Currently Linux network stacks
    restricts TSO over IPv6 by clearing of the NETIF_F_TSO bit from
    "dev->features". This patch will remove this restriction.

    This patch will introduce a new flag NETIF_F_TSO6 which will be used
    to check whether device supports TSO over IPv6. If device support TSO
    over IPv6 then we don't clear of NETIF_F_TSO and which will make the
    TCP layer to create TSO packets. Any device supporting TSO over IPv6
    will set NETIF_F_TSO6 flag in "dev->features" along with NETIF_F_TSO.

    In case when user disables TSO using ethtool, NETIF_F_TSO will get
    cleared from "dev->features". So even if we have NETIF_F_TSO6 we don't
    get TSO packets created by TCP layer.

    SKB_GSO_TCPV4 renamed to SKB_GSO_TCP to make it generic GSO packet.
    SKB_GSO_UDPV4 renamed to SKB_GSO_UDP as UFO is not a IPv4 feature.
    UFO is supported over IPv6 also

    The following table shows there is significant improvement in
    throughput with normal frames and CPU usage for both normal and jumbo.

    --------------------------------------------------
    | | 1500 | 9600 |
    | ------------------|-------------------|
    | | thru CPU | thru CPU |
    --------------------------------------------------
    | TSO OFF | 2.00 5.5% id | 5.66 20.0% id |
    --------------------------------------------------
    | TSO ON | 2.63 78.0 id | 5.67 39.0% id |
    --------------------------------------------------

    Signed-off-by: Herbert Xu
    Signed-off-by: David S. Miller

    Herbert Xu
     

30 Jun, 2006

1 commit

  • In the current TSO implementation, NETIF_F_TSO and ECN cannot be
    turned on together in a TCP connection. The problem is that most
    hardware that supports TSO does not handle CWR correctly if it is set
    in the TSO packet. Correct handling requires CWR to be set in the
    first packet only if it is set in the TSO header.

    This patch adds the ability to turn on NETIF_F_TSO and ECN using
    GSO if necessary to handle TSO packets with CWR set. Hardware
    that handles CWR correctly can turn on NETIF_F_TSO_ECN in the dev->
    features flag.

    All TSO packets with CWR set will have the SKB_GSO_TCPV4_ECN set. If
    the output device does not have the NETIF_F_TSO_ECN feature set, GSO
    will split the packet up correctly with CWR only set in the first
    segment.

    With help from Herbert Xu .

    Since ECN can always be enabled with TSO, the SOCK_NO_LARGESEND sock
    flag is completely removed.

    Signed-off-by: Michael Chan
    Signed-off-by: David S. Miller

    Michael Chan
     

30 Aug, 2005

1 commit

  • This creates struct inet_connection_sock, moving members out of struct
    tcp_sock that are shareable with other INET connection oriented
    protocols, such as DCCP, that in my private tree already uses most of
    these members.

    The functions that operate on these members were renamed, using a
    inet_csk_ prefix while not being moved yet to a new file, so as to
    ease the review of these changes.

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

    Arnaldo Carvalho de Melo
     

19 Jun, 2005

2 commits

  • Ok, this one just renames some stuff to have a better namespace and to
    dissassociate it from TCP:

    struct open_request -> struct request_sock
    tcp_openreq_alloc -> reqsk_alloc
    tcp_openreq_free -> reqsk_free
    tcp_openreq_fastfree -> __reqsk_free

    With this most of the infrastructure closely resembles a struct
    sock methods subset.

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

    Arnaldo Carvalho de Melo
     
  • Kept this first changeset minimal, without changing existing names to
    ease peer review.

    Basicaly tcp_openreq_alloc now receives the or_calltable, that in turn
    has two new members:

    ->slab, that replaces tcp_openreq_cachep
    ->obj_size, to inform the size of the openreq descendant for
    a specific protocol

    The protocol specific fields in struct open_request were moved to a
    class hierarchy, with the things that are common to all connection
    oriented PF_INET protocols in struct inet_request_sock, the TCP ones
    in tcp_request_sock, that is an inet_request_sock, that is an
    open_request.

    I.e. this uses the same approach used for the struct sock class
    hierarchy, with sk_prot indicating if the protocol wants to use the
    open_request infrastructure by filling in sk_prot->rsk_prot with an
    or_calltable.

    Results? Performance is improved and TCP v4 now uses only 64 bytes per
    open request minisock, down from 96 without this patch :-)

    Next changeset will rename some of the structs, fields and functions
    mentioned above, struct or_calltable is way unclear, better name it
    struct request_sock_ops, s/struct open_request/struct request_sock/g,
    etc.

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

    Arnaldo Carvalho de Melo
     

17 Apr, 2005

1 commit

  • Initial git repository build. I'm not bothering with the full history,
    even though we have it. We can create a separate "historical" git
    archive of that later if we want to, and in the meantime it's about
    3.2GB when imported into git - space that would just make the early
    git days unnecessarily complicated, when we don't have a lot of good
    infrastructure for it.

    Let it rip!

    Linus Torvalds