iptables support for H.323 protocol, compatibility for 32-bit iptables userspace tools running in a 64-bit kernel

Add support for Router Preference (RFC4191), Router Reachability Probing (RFC4191) and experimental support for Route Information Option in RA (RFC4191) in IPV6

CCID2 support for DCCP

Softmac layer to the wireless stack

Updates for JFS, ALSA, NFS, V4L/DVB (many new devices added), and many bugfixes and minor updates.

Kernel Core changes

Introduce the splice(), tee() and vmsplice() system calls, a new I/O method. (LWN article about splice()), (LWN article about tee()), (LWN article about vmsplice()) The idea behind splice is the availability of a in-kernel buffer that the user has control over, where "splice()" moves data to/from the buffer from/to an arbitrary file descriptor, while "tee()" copies the data in one buffer to another, ie: it "duplicates" it. The in-buffer however is implemented as a set of reference-counted pointers which the kernel copies around without actually copying the data. So while tee() "duplicates" the in-kernel buffer, in practice it doesn't copy the data but increments the reference pointers, avoiding extra copies of the data. In the same way, splice() can move data from one end to another, but instead of bringing the data from the source to the process' memory and sending back to the destination it just moves it avoiding the extra copy. This new scheme can be used anywhere where a process needs to send something from one end to another, but it doesn't need to touch or even look at the data, just forward it: Avoiding extra copies of data means you don't waste time copying data around (huge performance improvement). For example, you could forward data that comes from a MPEG-4 hardware encoder, and tee() it to duplicate the stream, and write one of the streams to disk, and the other one to a socket for a real-time network broadcast. Again, all without actually physically copying it around in memory. vmsplice() does the same than splice(), but instead of splicing from fd to fd as splice() does, it splices from a user address range into a file. The idea and first implementation were done by Linus Torvalds, the final implementation by Jens Axboe (email 1), (email 2), (email 3), (email 4), (commit 1), (commit 2), (commit 3)

Introduce the sync_file_range() syscall, due to concerns about extending in non-POSIX-compatible ways the fadvise() interface. Interface: long sync_file_range(int fd, loff_t offset, loff_t nbytes, int flags). This is used to synchronize a file's data to disk, starting at offset and proceeding for nbytes bytes. More details in (this LWN article)(commit)

Add a new scheduler domain for representing multi-core with shared caches between cores. This makes possible to make smarter cpu scheduling decisions on such systems, improving performance greatly for some cases (see commit) (commit)

Lightweight robust futexes: if a process exits prematurely while holding a pthread_mutex_t lock shared with some other process (e.g. yum segfaults or it's kill -9-ed), then waiters for that lock need to be notified that the last owner of the lock exited in some irregular way. This creates a API to fix that Documentation, ABI documentation, (LWN article)(commit 1), (commit 2), (commit 3)

Block queue IO tracing support (blktrace). This allows users to see any traffic happening on a block device queue. In other words, you can get very detailed statistics of what your disks are doing. User space support tools available in: git://brick.kernel.dk/data/git/blktrace.git (commit)

Cpuset memory spread implementation: Alternative memory allocation policy, if enabled it spreads out these kinds of memory allocations over all the nodes allowed to a task, instead of preferring to place them on the node where the task is executing. All other kinds of allocations, including anonymous pages for a tasks stack and data regions, are not affected by this policy choice, and continue to be allocated preferring the node local to execution, as modified by the NUMA mempolicy (commit 1), (commit 2), (commit 3), (commit 4)

Add blkcnt_t as the type of inode.i_blocks. This enables you to make the size of blkcnt_t either 4 bytes or 8 bytes on 32 bits architecture with CONFIG_LSF. On h8300, i386, mips, powerpc, s390 and sh that define sector_t, blkcnt_t is defined as u64 if CONFIG_LSF is enabled; otherwise it is defined as unsigned long. On other architectures, it is defined as unsigned long (commit)

Notifier chain: Introduces three new, parallel APIs: one for blocking notifiers, one for atomic notifiers, and one for "raw" notifiers (which is really just the old API under a new name) LWN article)(commit)

add EXPORT_SYMBOL_GPL_FUTURE(): This patch adds the ability to mark symbols that will be changed in the future, so that kernel modules that don't include MODULE_LICENSE("GPL") and use the symbols, will be flagged and printed out to the system log (LWN article)(commit)

Introduce FMODE_EXEC file flag, to indicate that file is being opened for execution. This is useful for distributed filesystems to maintain consistent behavior for returning ETXTBUSY when opening for write and execution happens on different nodes (commit)

SMP "alternatives" for x86-32. This features detects the configuration of the system at boot time, and patches certain instructions in the kernel image on the fly with optimized versions for UP or SMP, depending on what system is running. This is useful for distros, who can provide a single kernel which auto-optimizes itself for UP or SMP environments. The feature can patch both SMP->UP and UP->SMP. The UP->SMP case is useful for CPU hotplug (which may be useful in virtualized environments to hot-add/remove CPUs in virtualized guests in reaction to load changes in the host) (LWN article)(commit)

Make CONFIG_REGPARM enabled by default. With this option, GCC passes the first 3 function parameters in registers. It's a noticeable win both for size and for performance, and gcc[34] handles it correctly (commit)

Use -mtune=generic for generic kernels. The upcoming gcc 4.2 got a new option -mtune=generic to tune code for both common AMD and Intel CPUs. Use this option when available for generic kernels. On x86-64 it is used with CONFIG_GENERIC_CPU. On i386 it is enabled with CONFIG_X86_GENERIC. It won't affect the base line CPU support in any ways and also not the minimum supported CPU (commit)

Increase the variability of the process stack on x86-64 for now. 8 MB is not really very random, use 1GB (or more with larger page sizes) instead(commit)

Allow disabling the "sep" feature (X86_FEATURE_SEP) at boot. This forces use of the int80 vsyscall, useful mainly for testing or benchmarking the int80 vsyscall code (commit)

"make isoimage" support, FDINITRD= support. This adds a "make isoimage" to i386 and x86-64, which allows the automatic creation of a bootable CD image. It also adds an option FDINITRD= to include an initrd of the user's choice in generated floppy- or CD boot images (commit)

SUNRPC: provide a mechanism for collecting stats in the RPC client (commit)

CIFS

Add posix (advisory) byte range locking support to cifs client: Samba (version 3) server support for this is also currently being done. This client code is in an experimental path (requires enabling /proc/fs/cifs/Experimental) while it is being tested (commit)

usb-audio: Add a quirk entry for the Edirol PC-50 (commit), Miditech Play'n Roll support (commit), Roland G-70 support (commit), support for the Yamaha MDP-5 and EZ-J24 (commit), quirk for the Casio AP-80R (commit), mixer control names for the Audiotrak Maya44 USB (commit), quirk entry for the Casio PL-40R. (commit),

V4L/DVB

Add new internal VIDIOC_INT commands for setting the tuner mode, for putting a chip into standby mode and to set/get the routing of inputs/outputs of audio or video of a chip. These new commands will replace older commands that are no longer up to the task (commit)

Add standard for South Korean NTSC-M using A2 audio, South Korea uses NTSC-M but with A2 audio instead of BTSC and several audio chips need this information in order to set the correct audio processing registers (commit)

Add support for the FE6600 tuner used on the DViCO FusionHDTV DVB-T Hybrid board, and add support for the Zarlink ZL10353 DVB-T demodulator, which supersedes the MT352, used on the DViCO FusionHDTV DVB-T Hybrid and later model Plus boards (commit)

Creates a virtual video device driver. The Virtual Video Device Driver (aka vivi) is a device that can be used to test core v4l functionalities or be a prototype for newer development. When loaded, it provides a video device that generates a standard color bar, with a timestamp placed at top left corner (commit)

Add support for the Intel Pentium M series to the hwmon-vid driver (commit)

Add support for the Winbond W83687THF chip to the w83627hf hardware monitoring driver. This new chip is almost similar to the already supported W83627THF chip, except for VID and a few other minor changes (commit)