The following is a list of files and features that are going to be
removed in the kernel source tree.  Every entry should contain what
exactly is going away, why it is happening, and who is going to be doing
the work.  When the feature is removed from the kernel, it should also
be removed from this file.

---------------------------

What:	devfs
When:	July 2005
Files:	fs/devfs/*, include/linux/devfs_fs*.h and assorted devfs
	function calls throughout the kernel tree
Why:	It has been unmaintained for a number of years, has unfixable
	races, contains a naming policy within the kernel that is
	against the LSB, and can be replaced by using udev.
Who:	Greg Kroah-Hartman <greg@kroah.com>

---------------------------

What:	RAW driver (CONFIG_RAW_DRIVER)
When:	December 2005
Why:	declared obsolete since kernel 2.6.3
	O_DIRECT can be used instead
Who:	Adrian Bunk <bunk@stusta.de>

---------------------------

What:	drivers depending on OBSOLETE_OSS_DRIVER
When:	January 2006
Why:	OSS drivers with ALSA replacements
Who:	Adrian Bunk <bunk@stusta.de>

---------------------------

What:	RCU API moves to EXPORT_SYMBOL_GPL
When:	April 2006
Files:	include/linux/rcupdate.h, kernel/rcupdate.c
Why:	Outside of Linux, the only implementations of anything even
	vaguely resembling RCU that I am aware of are in DYNIX/ptx,
	VM/XA, Tornado, and K42.  I do not expect anyone to port binary
	drivers or kernel modules from any of these, since the first two
	are owned by IBM and the last two are open-source research OSes.
	So these will move to GPL after a grace period to allow
	people, who might be using implementations that I am not aware
	of, to adjust to this upcoming change.
Who:	Paul E. McKenney <paulmck@us.ibm.com>

---------------------------

What:	raw1394: requests of type RAW1394_REQ_ISO_SEND, RAW1394_REQ_ISO_LISTEN
When:	November 2005
Why:	Deprecated in favour of the new ioctl-based rawiso interface, which is
	more efficient.  You should really be using libraw1394 for raw1394
	access anyway.
Who:	Jody McIntyre <scjody@steamballoon.com>

---------------------------

What:	Video4Linux API 1 ioctls and video_decoder.h from Video devices.
When:	July 2006
Why:	V4L1 AP1 was replaced by V4L2 API. during migration from 2.4 to 2.6
	series. The old API have lots of drawbacks and don't provide enough
	means to work with all video and audio standards. The newer API is
	already available on the main drivers and should be used instead.
	Newer drivers should use v4l_compat_translate_ioctl function to handle
	old calls, replacing to newer ones.
	Decoder iocts are using internally to allow video drivers to
	communicate with video decoders. This should also be improved to allow
	V4L2 calls being translated into compatible internal ioctls.
Who:	Mauro Carvalho Chehab <mchehab@brturbo.com.br>

---------------------------

What:	remove EXPORT_SYMBOL(panic_timeout)
When:	April 2006
Files:	kernel/panic.c
Why:	No modular usage in the kernel.
Who:	Adrian Bunk <bunk@stusta.de>

---------------------------

What:	remove EXPORT_SYMBOL(insert_resource)
When:	April 2006
Files:	kernel/resource.c
Why:	No modular usage in the kernel.
Who:	Adrian Bunk <bunk@stusta.de>

---------------------------

What:	PCMCIA control ioctl (needed for pcmcia-cs [cardmgr, cardctl])
When:	November 2005
Files:	drivers/pcmcia/: pcmcia_ioctl.c
Why:	With the 16-bit PCMCIA subsystem now behaving (almost) like a
	normal hotpluggable bus, and with it using the default kernel
	infrastructure (hotplug, driver core, sysfs) keeping the PCMCIA
	control ioctl needed by cardmgr and cardctl from pcmcia-cs is
	unnecessary, and makes further cleanups and integration of the
	PCMCIA subsystem into the Linux kernel device driver model more
	difficult. The features provided by cardmgr and cardctl are either
	handled by the kernel itself now or are available in the new
	pcmciautils package available at
	http://kernel.org/pub/linux/utils/kernel/pcmcia/
Who:	Dominik Brodowski <linux@brodo.de>

---------------------------

What:	ip_queue and ip6_queue (old ipv4-only and ipv6-only netfilter queue)
When:	December 2005
Why:	This interface has been obsoleted by the new layer3-independent
	"nfnetlink_queue".  The Kernel interface is compatible, so the old
	ip[6]tables "QUEUE" targets still work and will transparently handle
	all packets into nfnetlink queue number 0.  Userspace users will have
	to link against API-compatible library on top of libnfnetlink_queue 
	instead of the current 'libipq'.
Who:	Harald Welte <laforge@netfilter.org>

---------------------------

What:	EXPORT_SYMBOL(lookup_hash)
When:	January 2006
Why:	Too low-level interface.  Use lookup_one_len or lookup_create instead.
Who:	Christoph Hellwig <hch@lst.de>

---------------------------

What:	CONFIG_FORCED_INLINING
When:	June 2006
Why:	Config option is there to see if gcc is good enough. (in january
        2006). If it is, the behavior should just be the default. If it's not,
	the option should just go away entirely.
Who:    Arjan van de Ven

---------------------------

What:	START_ARRAY ioctl for md
When:	July 2006
Files:	drivers/md/md.c
Why:	Not reliable by design - can fail when most needed.
	Alternatives exist
Who:	NeilBrown <neilb@suse.de>

---------------------------

What:	au1x00_uart driver
When:	January 2006
Why:	The 8250 serial driver now has the ability to deal with the differences
	between the standard 8250 family of UARTs and their slightly strange
	brother on Alchemy SOCs.  The loss of features is not considered an
	issue.
Who:	Ralf Baechle <ralf@linux-mips.org>

---------------------------

What:	Legacy /proc/pci interface (PCI_LEGACY_PROC)
When:	March 2006
Why:	deprecated since 2.5.53 in favor of lspci(8)
Who:	Adrian Bunk <bunk@stusta.de>

---------------------------

What:	pci_module_init(driver)
When:	January 2007
Why:	Is replaced by pci_register_driver(pci_driver).
Who:	Richard Knutsson <ricknu-0@student.ltu.se> and Greg Kroah-Hartman <gregkh@suse.de>

---------------------------

What:	I2C interface of the it87 driver
When:	January 2007
Why:	The ISA interface is faster and should be always available. The I2C
	probing is also known to cause trouble in at least one case (see
	bug #5889.)
Who:	Jean Delvare <khali@linux-fr.org>

---------------------------

What:	mount/umount uevents
When:	February 2007
Why:	These events are not correct, and do not properly let userspace know
	when a file system has been mounted or unmounted.  Userspace should
	poll the /proc/mounts file instead to detect this properly.
Who:	Greg Kroah-Hartman <gregkh@suse.de>

---------------------------

What:	Support for NEC DDB5074 and DDB5476 evaluation boards.
When:	June 2006
Why:	Board specific code doesn't build anymore since ~2.6.0 and no
	users have complained indicating there is no more need for these
	boards.  This should really be considered a last call.
Who:	Ralf Baechle <ralf@linux-mips.org>
