Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 17395
b: refs/heads/master
c: 5e68d95
h: refs/heads/master
i:
  17393: 1def6de
  17391: e9ec1ff
v: v3
  • Loading branch information
Pierre Ossman authored and Russell King committed Jan 8, 2006
1 parent 4c08ea8 commit 6ca3f2d
Show file tree
Hide file tree
Showing 1,130 changed files with 19,936 additions and 56,042 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: f17578decc40df8fceff82b106582e30bdfb3189
refs/heads/master: 5e68d95d155c94e45f16b521fd4e2bcd6c8481b1
2 changes: 1 addition & 1 deletion trunk/CREDITS
Original file line number Diff line number Diff line change
Expand Up @@ -3203,7 +3203,7 @@ N: Eugene Surovegin
E: ebs@ebshome.net
W: http://kernel.ebshome.net/
P: 1024D/AE5467F1 FF22 39F1 6728 89F6 6E6C 2365 7602 F33D AE54 67F1
D: Embedded PowerPC 4xx: EMAC, I2C, PIC and random hacks/fixes
D: Embedded PowerPC 4xx: I2C, PIC and random hacks/fixes
S: Sunnyvale, California 94085
S: USA

Expand Down
31 changes: 26 additions & 5 deletions trunk/Documentation/Changes
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@ al espa
Eine deutsche Version dieser Datei finden Sie unter
<http://www.stefan-winter.de/Changes-2.4.0.txt>.

Last updated: October 29th, 2002

Chris Ricker (kaboom@gatech.edu or chris.ricker@genetics.utah.edu).

Current Minimal Requirements
Expand All @@ -46,7 +48,7 @@ necessary on all systems; obviously, if you don't have any ISDN
hardware, for example, you probably needn't concern yourself with
isdn4k-utils.

o Gnu C 3.2 # gcc --version
o Gnu C 2.95.3 # gcc --version
o Gnu make 3.79.1 # make --version
o binutils 2.12 # ld -v
o util-linux 2.10o # fdformat --version
Expand All @@ -72,7 +74,26 @@ GCC
---

The gcc version requirements may vary depending on the type of CPU in your
computer.
computer. The next paragraph applies to users of x86 CPUs, but not
necessarily to users of other CPUs. Users of other CPUs should obtain
information about their gcc version requirements from another source.

The recommended compiler for the kernel is gcc 2.95.x (x >= 3), and it
should be used when you need absolute stability. You may use gcc 3.0.x
instead if you wish, although it may cause problems. Later versions of gcc
have not received much testing for Linux kernel compilation, and there are
almost certainly bugs (mainly, but not exclusively, in the kernel) that
will need to be fixed in order to use these compilers. In any case, using
pgcc instead of plain gcc is just asking for trouble.

The Red Hat gcc 2.96 compiler subtree can also be used to build this tree.
You should ensure you use gcc-2.96-74 or later. gcc-2.96-54 will not build
the kernel correctly.

In addition, please pay attention to compiler optimization. Anything
greater than -O2 may not be wise. Similarly, if you choose to use gcc-2.95.x
or derivatives, be sure not to use -fstrict-aliasing (which, depending on
your version of gcc 2.95.x, may necessitate using -fno-strict-aliasing).

Make
----
Expand Down Expand Up @@ -301,9 +322,9 @@ Getting updated software
Kernel compilation
******************

gcc
---
o <ftp://ftp.gnu.org/gnu/gcc/>
gcc 2.95.3
----------
o <ftp://ftp.gnu.org/gnu/gcc/gcc-2.95.3.tar.gz>

Make
----
Expand Down
41 changes: 5 additions & 36 deletions trunk/Documentation/CodingStyle
Original file line number Diff line number Diff line change
Expand Up @@ -344,7 +344,7 @@ Remember: if another thread can find your data structure, and you don't
have a reference count on it, you almost certainly have a bug.


Chapter 11: Macros, Enums and RTL
Chapter 11: Macros, Enums, Inline functions and RTL

Names of macros defining constants and labels in enums are capitalized.

Expand Down Expand Up @@ -429,35 +429,7 @@ from void pointer to any other pointer type is guaranteed by the C programming
language.


Chapter 14: The inline disease

There appears to be a common misperception that gcc has a magic "make me
faster" speedup option called "inline". While the use of inlines can be
appropriate (for example as a means of replacing macros, see Chapter 11), it
very often is not. Abundant use of the inline keyword leads to a much bigger
kernel, which in turn slows the system as a whole down, due to a bigger
icache footprint for the CPU and simply because there is less memory
available for the pagecache. Just think about it; a pagecache miss causes a
disk seek, which easily takes 5 miliseconds. There are a LOT of cpu cycles
that can go into these 5 miliseconds.

A reasonable rule of thumb is to not put inline at functions that have more
than 3 lines of code in them. An exception to this rule are the cases where
a parameter is known to be a compiletime constant, and as a result of this
constantness you *know* the compiler will be able to optimize most of your
function away at compile time. For a good example of this later case, see
the kmalloc() inline function.

Often people argue that adding inline to functions that are static and used
only once is always a win since there is no space tradeoff. While this is
technically correct, gcc is capable of inlining these automatically without
help, and the maintenance issue of removing the inline when a second user
appears outweighs the potential value of the hint that tells gcc to do
something it would have done anyway.



Chapter 15: References
Chapter 14: References

The C Programming Language, Second Edition
by Brian W. Kernighan and Dennis M. Ritchie.
Expand All @@ -472,13 +444,10 @@ ISBN 0-201-61586-X.
URL: http://cm.bell-labs.com/cm/cs/tpop/

GNU manuals - where in compliance with K&R and this text - for cpp, gcc,
gcc internals and indent, all available from http://www.gnu.org/manual/
gcc internals and indent, all available from http://www.gnu.org

WG14 is the international standardization working group for the programming
language C, URL: http://www.open-std.org/JTC1/SC22/WG14/

Kernel CodingStyle, by greg@kroah.com at OLS 2002:
http://www.kroah.com/linux/talks/ols_2002_kernel_codingstyle_talk/html/
language C, URL: http://std.dkuug.dk/JTC1/SC22/WG14/

--
Last updated on 30 December 2005 by a community effort on LKML.
Last updated on 16 February 2004 by a community effort on LKML.
87 changes: 47 additions & 40 deletions trunk/Documentation/RCU/rcuref.txt
Original file line number Diff line number Diff line change
@@ -1,67 +1,74 @@
Refcounter design for elements of lists/arrays protected by RCU.
Refcounter framework for elements of lists/arrays protected by
RCU.

Refcounting on elements of lists which are protected by traditional
reader/writer spinlocks or semaphores are straight forward as in:

1. 2.
add() search_and_reference()
{ {
alloc_object read_lock(&list_lock);
... search_for_element
atomic_set(&el->rc, 1); atomic_inc(&el->rc);
write_lock(&list_lock); ...
add_element read_unlock(&list_lock);
... ...
write_unlock(&list_lock); }
1. 2.
add() search_and_reference()
{ {
alloc_object read_lock(&list_lock);
... search_for_element
atomic_set(&el->rc, 1); atomic_inc(&el->rc);
write_lock(&list_lock); ...
add_element read_unlock(&list_lock);
... ...
write_unlock(&list_lock); }
}

3. 4.
release_referenced() delete()
{ {
... write_lock(&list_lock);
atomic_dec(&el->rc, relfunc) ...
... delete_element
} write_unlock(&list_lock);
...
if (atomic_dec_and_test(&el->rc))
kfree(el);
...
... write_lock(&list_lock);
atomic_dec(&el->rc, relfunc) ...
... delete_element
} write_unlock(&list_lock);
...
if (atomic_dec_and_test(&el->rc))
kfree(el);
...
}

If this list/array is made lock free using rcu as in changing the
write_lock in add() and delete() to spin_lock and changing read_lock
in search_and_reference to rcu_read_lock(), the atomic_get in
in search_and_reference to rcu_read_lock(), the rcuref_get in
search_and_reference could potentially hold reference to an element which
has already been deleted from the list/array. atomic_inc_not_zero takes
has already been deleted from the list/array. rcuref_lf_get_rcu takes
care of this scenario. search_and_reference should look as;

1. 2.
add() search_and_reference()
{ {
alloc_object rcu_read_lock();
... search_for_element
atomic_set(&el->rc, 1); if (atomic_inc_not_zero(&el->rc)) {
write_lock(&list_lock); rcu_read_unlock();
return FAIL;
add_element }
... ...
write_unlock(&list_lock); rcu_read_unlock();
alloc_object rcu_read_lock();
... search_for_element
atomic_set(&el->rc, 1); if (rcuref_inc_lf(&el->rc)) {
write_lock(&list_lock); rcu_read_unlock();
return FAIL;
add_element }
... ...
write_unlock(&list_lock); rcu_read_unlock();
} }
3. 4.
release_referenced() delete()
{ {
... write_lock(&list_lock);
atomic_dec(&el->rc, relfunc) ...
... delete_element
} write_unlock(&list_lock);
...
if (atomic_dec_and_test(&el->rc))
call_rcu(&el->head, el_free);
...
... write_lock(&list_lock);
rcuref_dec(&el->rc, relfunc) ...
... delete_element
} write_unlock(&list_lock);
...
if (rcuref_dec_and_test(&el->rc))
call_rcu(&el->head, el_free);
...
}

Sometimes, reference to the element need to be obtained in the
update (write) stream. In such cases, atomic_inc_not_zero might be an
overkill since the spinlock serialising list updates are held. atomic_inc
update (write) stream. In such cases, rcuref_inc_lf might be an overkill
since the spinlock serialising list updates are held. rcuref_inc
is to be used in such cases.

For arches which do not have cmpxchg rcuref_inc_lf
api uses a hashed spinlock implementation and the same hashed spinlock
is acquired in all rcuref_xxx primitives to preserve atomicity.
Note: Use rcuref_inc api only if you need to use rcuref_inc_lf on the
refcounter atleast at one place. Mixing rcuref_inc and atomic_xxx api
might lead to races. rcuref_inc_lf() must be used in lockfree
RCU critical sections only.
24 changes: 8 additions & 16 deletions trunk/Documentation/SubmittingDrivers
Original file line number Diff line number Diff line change
Expand Up @@ -27,17 +27,18 @@ Who To Submit Drivers To
------------------------

Linux 2.0:
No new drivers are accepted for this kernel tree.
No new drivers are accepted for this kernel tree

Linux 2.2:
No new drivers are accepted for this kernel tree.

Linux 2.4:
If the code area has a general maintainer then please submit it to
the maintainer listed in MAINTAINERS in the kernel file. If the
maintainer does not respond or you cannot find the appropriate
maintainer then please contact Marcelo Tosatti
<marcelo.tosatti@cyclades.com>.
maintainer then please contact the 2.2 kernel maintainer:
Marc-Christian Petersen <m.c.p@wolk-project.de>.

Linux 2.4:
The same rules apply as 2.2. The final contact point for Linux 2.4
submissions is Marcelo Tosatti <marcelo.tosatti@cyclades.com>.

Linux 2.6:
The same rules apply as 2.4 except that you should follow linux-kernel
Expand All @@ -52,7 +53,6 @@ Licensing: The code must be released to us under the
of exclusive GPL licensing, and if you wish the driver
to be useful to other communities such as BSD you may well
wish to release under multiple licenses.
See accepted licenses at include/linux/module.h

Copyright: The copyright owner must agree to use of GPL.
It's best if the submitter and copyright owner
Expand Down Expand Up @@ -143,13 +143,5 @@ KernelNewbies:
http://kernelnewbies.org/

Linux USB project:
http://linux-usb.sourceforge.net/

How to NOT write kernel driver by arjanv@redhat.com
http://people.redhat.com/arjanv/olspaper.pdf

Kernel Janitor:
http://janitor.kernelnewbies.org/
http://sourceforge.net/projects/linux-usb/

--
Last updated on 17 Nov 2005.
Loading

0 comments on commit 6ca3f2d

Please sign in to comment.