20 Aug, 2019

1 commit

  • As Jason Baron explained in commit 790ba4566c1a ("tcp: set SOCK_NOSPACE
    under memory pressure"), it is crucial we properly set SOCK_NOSPACE
    when needed.

    However, Jason patch had a bug, because the 'nonblocking' status
    as far as sk_stream_wait_memory() is concerned is governed
    by MSG_DONTWAIT flag passed at sendmsg() time :

    long timeo = sock_sndtimeo(sk, flags & MSG_DONTWAIT);

    So it is very possible that tcp sendmsg() calls sk_stream_wait_memory(),
    and that sk_stream_wait_memory() returns -EAGAIN with SOCK_NOSPACE
    cleared, if sk->sk_sndtimeo has been set to a small (but not zero)
    value.

    This patch removes the 'noblock' variable since we must always
    set SOCK_NOSPACE if -EAGAIN is returned.

    It also renames the do_nonblock label since we might reach this
    code path even if we were in blocking mode.

    Fixes: 790ba4566c1a ("tcp: set SOCK_NOSPACE under memory pressure")
    Signed-off-by: Eric Dumazet
    Cc: Jason Baron
    Reported-by: Vladimir Rutsky
    Acked-by: Soheil Hassas Yeganeh
    Acked-by: Neal Cardwell
    Acked-by: Jason Baron
    Signed-off-by: David S. Miller

    Eric Dumazet
     

05 Dec, 2018

1 commit

  • TCP_NOTSENT_LOWAT socket option or sysctl was added in linux-3.12
    as a step to enable bigger tcp sndbuf limits.

    It works reasonably well, but the following happens :

    Once the limit is reached, TCP stack generates
    an [E]POLLOUT event for every incoming ACK packet.

    This causes a high number of context switches.

    This patch implements the strategy David Miller added
    in sock_def_write_space() :

    - If TCP socket has a notsent_lowat constraint of X bytes,
    allow sendmsg() to fill up to X bytes, but send [E]POLLOUT
    only if number of notsent bytes is below X/2

    This considerably reduces TCP_NOTSENT_LOWAT overhead,
    while allowing to keep the pipe full.

    Tested:
    100 ms RTT netem testbed between A and B, 100 concurrent TCP_STREAM

    A:/# cat /proc/sys/net/ipv4/tcp_wmem
    4096 262144 64000000
    A:/# super_netperf 100 -H B -l 1000 -- -K bbr &

    A:/# grep TCP /proc/net/sockstat
    TCP: inuse 203 orphan 0 tw 19 alloc 414 mem 1364904 # This is about 54 MB of memory per flow :/

    A:/# vmstat 5 5
    procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
    r b swpd free buff cache si so bi bo in cs us sy id wa st
    0 0 0 256220672 13532 694976 0 0 10 0 28 14 0 1 99 0 0
    2 0 0 256320016 13532 698480 0 0 512 0 715901 5927 0 10 90 0 0
    0 0 0 256197232 13532 700992 0 0 735 13 771161 5849 0 11 89 0 0
    1 0 0 256233824 13532 703320 0 0 512 23 719650 6635 0 11 89 0 0
    2 0 0 256226880 13532 705780 0 0 642 4 775650 6009 0 12 88 0 0

    A:/# echo 2097152 >/proc/sys/net/ipv4/tcp_notsent_lowat

    A:/# grep TCP /proc/net/sockstat
    TCP: inuse 203 orphan 0 tw 19 alloc 414 mem 86411 # 3.5 MB per flow

    A:/# vmstat 5 5 # check that context switches have not inflated too much.
    procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
    r b swpd free buff cache si so bi bo in cs us sy id wa st
    2 0 0 260386512 13592 662148 0 0 10 0 17 14 0 1 99 0 0
    0 0 0 260519680 13592 604184 0 0 512 13 726843 12424 0 10 90 0 0
    1 1 0 260435424 13592 598360 0 0 512 25 764645 12925 0 10 90 0 0
    1 0 0 260855392 13592 578380 0 0 512 7 722943 13624 0 11 88 0 0
    1 0 0 260445008 13592 601176 0 0 614 34 772288 14317 0 10 90 0 0

    Signed-off-by: Eric Dumazet
    Acked-by: Soheil Hassas Yeganeh
    Signed-off-by: David S. Miller

    Eric Dumazet
     

12 Feb, 2018

1 commit

  • This is the mindless scripted replacement of kernel use of POLL*
    variables as described by Al, done by this script:

    for V in IN OUT PRI ERR RDNORM RDBAND WRNORM WRBAND HUP RDHUP NVAL MSG; do
    L=`git grep -l -w POLL$V | grep -v '^t' | grep -v /um/ | grep -v '^sa' | grep -v '/poll.h$'|grep -v '^D'`
    for f in $L; do sed -i "-es/^\([^\"]*\)\(\\)/\\1E\\2/" $f; done
    done

    with de-mangling cleanups yet to come.

    NOTE! On almost all architectures, the EPOLL* constants have the same
    values as the POLL* constants do. But they keyword here is "almost".
    For various bad reasons they aren't the same, and epoll() doesn't
    actually work quite correctly in some cases due to this on Sparc et al.

    The next patch from Al will sort out the final differences, and we
    should be all done.

    Scripted-by: Al Viro
    Signed-off-by: Linus Torvalds

    Linus Torvalds
     

02 Nov, 2017

1 commit

  • Many source files in the tree are missing licensing information, which
    makes it harder for compliance tools to determine the correct license.

    By default all files without license information are under the default
    license of the kernel, which is GPL version 2.

    Update the files which contain no license information with the 'GPL-2.0'
    SPDX license identifier. The SPDX identifier is a legally binding
    shorthand, which can be used instead of the full boiler plate text.

    This patch is based on work done by Thomas Gleixner and Kate Stewart and
    Philippe Ombredanne.

    How this work was done:

    Patches were generated and checked against linux-4.14-rc6 for a subset of
    the use cases:
    - file had no licensing information it it.
    - file was a */uapi/* one with no licensing information in it,
    - file was a */uapi/* one with existing licensing information,

    Further patches will be generated in subsequent months to fix up cases
    where non-standard license headers were used, and references to license
    had to be inferred by heuristics based on keywords.

    The analysis to determine which SPDX License Identifier to be applied to
    a file was done in a spreadsheet of side by side results from of the
    output of two independent scanners (ScanCode & Windriver) producing SPDX
    tag:value files created by Philippe Ombredanne. Philippe prepared the
    base worksheet, and did an initial spot review of a few 1000 files.

    The 4.13 kernel was the starting point of the analysis with 60,537 files
    assessed. Kate Stewart did a file by file comparison of the scanner
    results in the spreadsheet to determine which SPDX license identifier(s)
    to be applied to the file. She confirmed any determination that was not
    immediately clear with lawyers working with the Linux Foundation.

    Criteria used to select files for SPDX license identifier tagging was:
    - Files considered eligible had to be source code files.
    - Make and config files were included as candidates if they contained >5
    lines of source
    - File already had some variant of a license header in it (even if
    Reviewed-by: Philippe Ombredanne
    Reviewed-by: Thomas Gleixner
    Signed-off-by: Greg Kroah-Hartman

    Greg Kroah-Hartman
     

02 Mar, 2017

1 commit


15 Nov, 2016

1 commit

  • Similar to commit 14135f30e33c ("inet: fix sleeping inside inet_wait_for_connect()"),
    sk_wait_event() needs to fix too, because release_sock() is blocking,
    it changes the process state back to running after sleep, which breaks
    the previous prepare_to_wait().

    Switch to the new wait API.

    Cc: Eric Dumazet
    Cc: Peter Zijlstra
    Signed-off-by: Cong Wang
    Signed-off-by: David S. Miller

    WANG Cong
     

29 Sep, 2016

1 commit


04 Dec, 2015

1 commit


02 Dec, 2015

2 commits

  • Dmitry provided a syzkaller (http://github.com/google/syzkaller)
    triggering a fault in sock_wake_async() when async IO is requested.

    Said program stressed af_unix sockets, but the issue is generic
    and should be addressed in core networking stack.

    The problem is that by the time sock_wake_async() is called,
    we should not access the @flags field of 'struct socket',
    as the inode containing this socket might be freed without
    further notice, and without RCU grace period.

    We already maintain an RCU protected structure, "struct socket_wq"
    so moving SOCKWQ_ASYNC_NOSPACE & SOCKWQ_ASYNC_WAITDATA into it
    is the safe route.

    It also reduces number of cache lines needing dirtying, so might
    provide a performance improvement anyway.

    In followup patches, we might move remaining flags (SOCK_NOSPACE,
    SOCK_PASSCRED, SOCK_PASSSEC) to save 8 bytes and let 'struct socket'
    being mostly read and let it being shared between cpus.

    Reported-by: Dmitry Vyukov
    Signed-off-by: Eric Dumazet
    Signed-off-by: David S. Miller

    Eric Dumazet
     
  • This patch is a cleanup to make following patch easier to
    review.

    Goal is to move SOCK_ASYNC_NOSPACE and SOCK_ASYNC_WAITDATA
    from (struct socket)->flags to a (struct socket_wq)->flags
    to benefit from RCU protection in sock_wake_async()

    To ease backports, we rename both constants.

    Two new helpers, sk_set_bit(int nr, struct sock *sk)
    and sk_clear_bit(int net, struct sock *sk) are added so that
    following patch can change their implementation.

    Signed-off-by: Eric Dumazet
    Signed-off-by: David S. Miller

    Eric Dumazet
     

01 Dec, 2015

1 commit

  • The memory barrier in the helper wq_has_sleeper is needed by just
    about every user of waitqueue_active. This patch generalises it
    by making it take a wait_queue_head_t directly. The existing
    helper is renamed to skwq_has_sleeper.

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

    Herbert Xu
     

10 May, 2015

1 commit

  • Under tcp memory pressure, calling epoll_wait() in edge triggered
    mode after -EAGAIN, can result in an indefinite hang in epoll_wait(),
    even when there is sufficient memory available to continue making
    progress. The problem is that when __sk_mem_schedule() returns 0
    under memory pressure, we do not set the SOCK_NOSPACE flag in the
    tcp write paths (tcp_sendmsg() or do_tcp_sendpages()). Then, since
    SOCK_NOSPACE is used to trigger wakeups when incoming acks create
    sufficient new space in the write queue, all outstanding packets
    are acked, but we never wake up with the the EPOLLOUT that we are
    expecting from epoll_wait().

    This issue is currently limited to epoll() when used in edge trigger
    mode, since 'tcp_poll()', does in fact currently set SOCK_NOSPACE.
    This is sufficient for poll()/select() and epoll() in level trigger
    mode. However, in edge trigger mode, epoll() is relying on the write
    path to set SOCK_NOSPACE. EPOLL(7) says that in edge-trigger mode we
    can only call epoll_wait() after read/write return -EAGAIN. Thus, in
    the case of the socket write, we are relying on the fact that
    tcp_sendmsg()/network write paths are going to issue a wakeup for
    us at some point in the future when we get -EAGAIN.

    Normally, epoll() edge trigger works fine when we've exceeded the
    sk->sndbuf because in that case we do set SOCK_NOSPACE. However, when
    we return -EAGAIN from the write path b/c we are over the tcp memory
    limits and not b/c we are over the sndbuf, we are never going to get
    another wakeup.

    I can reproduce this issue, using SO_SNDBUF, since __sk_mem_schedule()
    will return 0, or failure more readily with SO_SNDBUF:

    1) create socket and set SO_SNDBUF to N
    2) add socket as edge trigger
    3) write to socket and block in epoll on -EAGAIN
    4) cause tcp mem pressure via: echo "" > net.ipv4.tcp_mem

    The fix here is simply to set SOCK_NOSPACE in sk_stream_wait_memory()
    when the socket is non-blocking. Note that SOCK_NOSPACE, in addition
    to waking up outstanding waiters is also used to expand the size of
    the sk->sndbuf. However, we will not expand it by setting it in this
    case because tcp_should_expand_sndbuf(), ensures that no expansion
    occurs when we are under tcp memory pressure.

    Note that we could still hang if sk->sk_wmem_queue is 0, when we get
    the -EAGAIN. In this case the SOCK_NOSPACE bit will not help, since we
    are waiting for and event that will never happen. I believe
    that this case is harder to hit (and did not hit in my testing),
    in that over the tcp 'soft' memory limits, we continue to guarantee a
    minimum write buffer size. Perhaps, we could return -ENOSPC in this
    case, or maybe we simply issue a wakeup in this case, such that we
    keep retrying the write. Note that this case is not specific to
    epoll() ET, but rather would affect blocking sockets as well. So I
    view this patch as bringing epoll() edge-trigger into sync with the
    current poll()/select()/epoll() level trigger and blocking sockets
    behavior.

    Signed-off-by: Jason Baron
    Acked-by: Eric Dumazet
    Signed-off-by: David S. Miller

    Jason Baron
     

15 Jan, 2014

1 commit


25 Jul, 2013

1 commit

  • Several call sites use the hardcoded following condition :

    sk_stream_wspace(sk) >= sk_stream_min_wspace(sk)

    Lets use a helper because TCP_NOTSENT_LOWAT support will change this
    condition for TCP sockets.

    Signed-off-by: Eric Dumazet
    Cc: Neal Cardwell
    Cc: Yuchung Cheng
    Acked-by: Neal Cardwell
    Signed-off-by: David S. Miller

    Eric Dumazet
     

04 Oct, 2010

1 commit

  • This patch fixes the condition (3rd arg) passed to sk_wait_event() in
    sk_stream_wait_memory(). The incorrect check in sk_stream_wait_memory()
    causes the following soft lockup in tcp_sendmsg() when the global tcp
    memory pool has exhausted.

    >>> snip <<<

    localhost kernel: BUG: soft lockup - CPU#3 stuck for 11s! [sshd:6429]
    localhost kernel: CPU 3:
    localhost kernel: RIP: 0010:[sk_stream_wait_memory+0xcd/0x200] [sk_stream_wait_memory+0xcd/0x200] sk_stream_wait_memory+0xcd/0x200
    localhost kernel:
    localhost kernel: Call Trace:
    localhost kernel: [sk_stream_wait_memory+0x1b1/0x200] sk_stream_wait_memory+0x1b1/0x200
    localhost kernel: [] autoremove_wake_function+0x0/0x40
    localhost kernel: [ipv6:tcp_sendmsg+0x6e6/0xe90] tcp_sendmsg+0x6e6/0xce0
    localhost kernel: [sock_aio_write+0x126/0x140] sock_aio_write+0x126/0x140
    localhost kernel: [xfs:do_sync_write+0xf1/0x130] do_sync_write+0xf1/0x130
    localhost kernel: [] autoremove_wake_function+0x0/0x40
    localhost kernel: [hrtimer_start+0xe3/0x170] hrtimer_start+0xe3/0x170
    localhost kernel: [vfs_write+0x185/0x190] vfs_write+0x185/0x190
    localhost kernel: [sys_write+0x50/0x90] sys_write+0x50/0x90
    localhost kernel: [system_call+0x7e/0x83] system_call+0x7e/0x83

    >>> snip <<<

    What is happening is, that the sk_wait_event() condition passed from
    sk_stream_wait_memory() evaluates to true for the case of tcp global memory
    exhaustion. This is because both sk_stream_memory_free() and vm_wait are true
    which causes sk_wait_event() to *not* call schedule_timeout().
    Hence sk_stream_wait_memory() returns immediately to the caller w/o sleeping.
    This causes the caller to again try allocation, which again fails and again
    calls sk_stream_wait_memory(), and so on.

    [ Bug introduced by commit c1cbe4b7ad0bc4b1d98ea708a3fecb7362aa4088
    ("[NET]: Avoid atomic xchg() for non-error case") -DaveM ]

    Signed-off-by: Nagendra Singh Tomar
    Signed-off-by: David S. Miller

    Nagendra Tomar
     

13 Jul, 2010

1 commit


02 May, 2010

1 commit

  • sk_callback_lock rwlock actually protects sk->sk_sleep pointer, so we
    need two atomic operations (and associated dirtying) per incoming
    packet.

    RCU conversion is pretty much needed :

    1) Add a new structure, called "struct socket_wq" to hold all fields
    that will need rcu_read_lock() protection (currently: a
    wait_queue_head_t and a struct fasync_struct pointer).

    [Future patch will add a list anchor for wakeup coalescing]

    2) Attach one of such structure to each "struct socket" created in
    sock_alloc_inode().

    3) Respect RCU grace period when freeing a "struct socket_wq"

    4) Change sk_sleep pointer in "struct sock" by sk_wq, pointer to "struct
    socket_wq"

    5) Change sk_sleep() function to use new sk->sk_wq instead of
    sk->sk_sleep

    6) Change sk_has_sleeper() to wq_has_sleeper() that must be used inside
    a rcu_read_lock() section.

    7) Change all sk_has_sleeper() callers to :
    - Use rcu_read_lock() instead of read_lock(&sk->sk_callback_lock)
    - Use wq_has_sleeper() to eventually wakeup tasks.
    - Use rcu_read_unlock() instead of read_unlock(&sk->sk_callback_lock)

    8) sock_wake_async() is modified to use rcu protection as well.

    9) Exceptions :
    macvtap, drivers/net/tun.c, af_unix use integrated "struct socket_wq"
    instead of dynamically allocated ones. They dont need rcu freeing.

    Some cleanups or followups are probably needed, (possible
    sk_callback_lock conversion to a spinlock for example...).

    Signed-off-by: Eric Dumazet
    Signed-off-by: David S. Miller

    Eric Dumazet
     

21 Apr, 2010

1 commit

  • Define a new function to return the waitqueue of a "struct sock".

    static inline wait_queue_head_t *sk_sleep(struct sock *sk)
    {
    return sk->sk_sleep;
    }

    Change all read occurrences of sk_sleep by a call to this function.

    Needed for a future RCU conversion. sk_sleep wont be a field directly
    available.

    Signed-off-by: Eric Dumazet
    Signed-off-by: David S. Miller

    Eric Dumazet
     

18 May, 2009

1 commit

  • When TCP frees up write buffer space, avoid waking up tasks that have
    done a poll() or select() on the same socket specifying read-side
    events.

    This is an extension of a read-side patch by Eric Dumazet.

    Signed-off-by: John Dykstra
    Acked-by: Eric Dumazet
    Signed-off-by: David S. Miller

    John Dykstra
     

14 Oct, 2008

1 commit

  • Clean up the various different email addresses of mine listed in the code
    to a single current and valid address. As Dave says his network merges
    for 2.6.28 are now done this seems a good point to send them in where
    they won't risk disrupting real changes.

    Signed-off-by: Alan Cox
    Signed-off-by: David S. Miller

    Alan Cox
     

26 Jul, 2008

1 commit

  • Removes legacy reinvent-the-wheel type thing. The generic
    machinery integrates much better to automated debugging aids
    such as kerneloops.org (and others), and is unambiguous due to
    better naming. Non-intuively BUG_TRAP() is actually equal to
    WARN_ON() rather than BUG_ON() though some might actually be
    promoted to BUG_ON() but I left that to future.

    I could make at least one BUILD_BUG_ON conversion.

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

    Ilpo Järvinen
     

29 Jan, 2008

4 commits

  • This patch introduces new memory accounting functions for each network
    protocol. Most of them are renamed from memory accounting functions
    for stream protocols. At the same time, some stream memory accounting
    functions are removed since other functions do same thing.

    Renaming:
    sk_stream_free_skb() -> sk_wmem_free_skb()
    __sk_stream_mem_reclaim() -> __sk_mem_reclaim()
    sk_stream_mem_reclaim() -> sk_mem_reclaim()
    sk_stream_mem_schedule -> __sk_mem_schedule()
    sk_stream_pages() -> sk_mem_pages()
    sk_stream_rmem_schedule() -> sk_rmem_schedule()
    sk_stream_wmem_schedule() -> sk_wmem_schedule()
    sk_charge_skb() -> sk_mem_charge()

    Removeing
    sk_stream_rfree(): consolidates into sock_rfree()
    sk_stream_set_owner_r(): consolidates into skb_set_owner_r()
    sk_stream_mem_schedule()

    The following functions are added.
    sk_has_account(): check if the protocol supports accounting
    sk_mem_uncharge(): do the opposite of sk_mem_charge()

    In addition, to achieve consolidation, updating sk_wmem_queued is
    removed from sk_mem_charge().

    Next, to consolidate memory accounting functions, this patch adds
    memory accounting calls to network core functions. Moreover, present
    memory accounting call is renamed to new accounting call.

    Finally we replace present memory accounting calls with new interface
    in TCP and SCTP.

    Signed-off-by: Takahiro Yasui
    Signed-off-by: Hideo Aoki
    Signed-off-by: David S. Miller

    Hideo Aoki
     
  • sk_forward_alloc being signed, we should take care of divides by
    SK_STREAM_MEM_QUANTUM we do in sk_stream_pages() and
    __sk_stream_mem_reclaim()

    This patchs introduces SK_STREAM_MEM_QUANTUM_SHIFT, defined
    as ilog2(SK_STREAM_MEM_QUANTUM), to be able to use right
    shifts instead of plain divides.

    This should help compiler to choose right shifts instead of
    expensive divides (as seen with CONFIG_CC_OPTIMIZE_FOR_SIZE=y on x86)

    Signed-off-by: Eric Dumazet
    Signed-off-by: David S. Miller

    Eric Dumazet
     
  • The sock_wake_async() performs a bit different actions
    depending on "how" argument. Unfortunately this argument
    ony has numerical magic values.

    I propose to give names to their constants to help people
    reading this function callers understand what's going on
    without looking into this function all the time.

    I suppose this is 2.6.25 material, but if it's not (or the
    naming seems poor/bad/awful), I can rework it against the
    current net-2.6 tree.

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

    Pavel Emelyanov
     
  • This function references sk->sk_prot->xxx for many times.
    It turned out, that there's so many code in it, that gcc
    cannot always optimize access to sk->sk_prot's fields.

    After saving the sk->sk_prot on the stack and comparing
    disassembled code, it turned out that the function became
    ~10 bytes shorter and made less dereferences (on i386 and
    x86_64). Stack consumption didn't grow.

    Besides, this patch drives most of this function into the
    80 columns limit.

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

    Pavel Emelyanov
     

11 Feb, 2007

1 commit


13 Jul, 2006

1 commit

  • __sk_stream_mem_reclaim is only called by sk_stream_mem_reclaim.

    As such the check on sk->sk_forward_alloc is not needed and can be
    removed.

    Signed-off-by: Ian McDonald
    Acked-by: Herbert Xu
    Signed-off-by: David S. Miller

    Ian McDonald
     

20 Apr, 2006

1 commit

  • Add some sanity checking. truesize should be at least sizeof(struct
    sk_buff) plus the current packet length. If not, then truesize is
    seriously mangled and deserves a kernel log message.

    Currently we'll do the check for release of stream socket buffers.

    But we can add checks to more spots over time.

    Incorporating ideas from Herbert Xu.

    Signed-off-by: David S. Miller

    David S. Miller
     

04 Jan, 2006

1 commit

  • It also looks like there were 2 places where the test on sk_err was
    missing from the event wait logic (in sk_stream_wait_connect and
    sk_stream_wait_memory), while the rest of the sock_error() users look
    to be doing the right thing. This version of the patch fixes those,
    and cleans up a few places that were testing ->sk_err directly.

    Signed-off-by: Benjamin LaHaise
    Signed-off-by: David S. Miller

    Benjamin LaHaise
     

06 Nov, 2005

1 commit

  • When sk_stream_wait_connect detects a state transition to ESTABLISHED
    or CLOSE_WAIT prior to it going to sleep, it will return without
    calling finish_wait and decrementing sk_write_pending.

    This may result in crashes and other unintended behaviour.

    The fix is to always call finish_wait and update sk_write_pending since
    it is safe to do so even if the wait entry is no longer on the queue.

    This bug was tracked down with the help of Alex Sidorenko and the
    fix is also based on his suggestion.

    Signed-off-by: Herbert Xu
    Signed-off-by: Arnaldo Carvalho de Melo

    Herbert Xu
     

01 May, 2005

1 commit

  • I have recompiled Linux kernel 2.6.11.5 documentation for me and our
    university students again. The documentation could be extended for more
    sources which are equipped by structured comments for recent 2.6 kernels. I
    have tried to proceed with that task. I have done that more times from 2.6.0
    time and it gets boring to do same changes again and again. Linux kernel
    compiles after changes for i386 and ARM targets. I have added references to
    some more files into kernel-api book, I have added some section names as well.
    So please, check that changes do not break something and that categories are
    not too much skewed.

    I have changed kernel-doc to accept "fastcall" and "asmlinkage" words reserved
    by kernel convention. Most of the other changes are modifications in the
    comments to make kernel-doc happy, accept some parameters description and do
    not bail out on errors. Changed to @pid in the description, moved some
    #ifdef before comments to correct function to comments bindings, etc.

    You can see result of the modified documentation build at
    http://cmp.felk.cvut.cz/~pisa/linux/lkdb-2.6.11.tar.gz

    Some more sources are ready to be included into kernel-doc generated
    documentation. Sources has been added into kernel-api for now. Some more
    section names added and probably some more chaos introduced as result of quick
    cleanup work.

    Signed-off-by: Pavel Pisa
    Signed-off-by: Martin Waitz
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Pavel Pisa
     

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