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:	/sys/devices/.../power/state
	dev->power.power_state
	dpm_runtime_{suspend,resume)()
When:	July 2007
Why:	Broken design for runtime control over driver power states, confusing
	driver-internal runtime power management with:  mechanisms to support
	system-wide sleep state transitions; event codes that distinguish
	different phases of swsusp "sleep" transitions; and userspace policy
	inputs.  This framework was never widely used, and most attempts to
	use it were broken.  Drivers should instead be exposing domain-specific
	interfaces either to kernel or to userspace.
Who:	Pavel Machek <pavel@suse.cz>

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

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:	raw1394: requests of type RAW1394_REQ_ISO_SEND, RAW1394_REQ_ISO_LISTEN
When:	November 2006
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@modernduck.com>

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

What:	Video4Linux API 1 ioctls and video_decoder.h from Video devices.
When:	December 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:	sys_sysctl
When:	January 2007
Why:	The same information is available through /proc/sys and that is the
	interface user space prefers to use. And there do not appear to be
	any existing user in user space of sys_sysctl.  The additional
	maintenance overhead of keeping a set of binary names gets
	in the way of doing a good job of maintaining this interface.

Who:	Eric Biederman <ebiederm@xmission.com>

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

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:	remove EXPORT_SYMBOL(kernel_thread)
When:	August 2006
Files:	arch/*/kernel/*_ksyms.c
Why:	kernel_thread is a low-level implementation detail.  Drivers should
        use the <linux/kthread.h> API instead which shields them from
	implementation details and provides a higherlevel interface that
	prevents bugs and code duplication
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:   eepro100 network driver
When:   January 2007
Why:    replaced by the e100 driver
Who:    Adrian Bunk <bunk@stusta.de>

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

What:  drivers depending on OSS_OBSOLETE_DRIVER
When:  options in 2.6.20, code in 2.6.22
Why:   OSS drivers with ALSA replacements
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:	Usage of invalid timevals in setitimer
When:	March 2007
Why:	POSIX requires to validate timevals in the setitimer call. This
	was never done by Linux. The invalid (e.g. negative timevals) were
	silently converted to more or less random timeouts and intervals.
	Until the removal a per boot limited number of warnings is printed
	and the timevals are sanitized.

Who:	Thomas Gleixner <tglx@linutronix.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:	Unused EXPORT_SYMBOL/EXPORT_SYMBOL_GPL exports
	(temporary transition config option provided until then)
	The transition config option will also be removed at the same time.
When:	before 2.6.19
Why:	Unused symbols are both increasing the size of the kernel binary
	and are often a sign of "wrong API"
Who:	Arjan van de Ven <arjan@linux.intel.com>

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

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:	USB driver API moves to EXPORT_SYMBOL_GPL
When:	February 2008
Files:	include/linux/usb.h, drivers/usb/core/driver.c
Why:	The USB subsystem has changed a lot over time, and it has been
	possible to create userspace USB drivers using usbfs/libusb/gadgetfs
	that operate as fast as the USB bus allows.  Because of this, the USB
	subsystem will not be allowing closed source kernel drivers to
	register with it, after this grace period is over.  If anyone needs
	any help in converting their closed source drivers over to use the
	userspace filesystems, please contact the
	linux-usb-devel@lists.sourceforge.net mailing list, and the developers
	there will be glad to help you out.
Who:	Greg Kroah-Hartman <gregkh@suse.de>

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

What:	find_trylock_page
When:	January 2007
Why:	The interface no longer has any callers left in the kernel. It
	is an odd interface (compared with other find_*_page functions), in
	that it does not take a refcount to the page, only the page lock.
	It should be replaced with find_get_page or find_lock_page if possible.
	This feature removal can be reevaluated if users of the interface
	cannot cleanly use something else.
Who:	Nick Piggin <npiggin@suse.de>

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

What:	Interrupt only SA_* flags
When:	Januar 2007
Why:	The interrupt related SA_* flags are replaced by IRQF_* to move them
	out of the signal namespace.

Who:	Thomas Gleixner <tglx@linutronix.de>

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

What:	i2c-ite and i2c-algo-ite drivers
When:	September 2006
Why:	These drivers never compiled since they were added to the kernel
	tree 5 years ago. This feature removal can be reevaluated if
	someone shows interest in the drivers, fixes them and takes over
	maintenance.
	http://marc.theaimsgroup.com/?l=linux-mips&m=115040510817448
Who:	Jean Delvare <khali@linux-fr.org>

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

What:	Bridge netfilter deferred IPv4/IPv6 output hook calling
When:	January 2007
Why:	The deferred output hooks are a layering violation causing unusual
	and broken behaviour on bridge devices. Examples of things they
	break include QoS classifation using the MARK or CLASSIFY targets,
	the IPsec policy match and connection tracking with VLANs on a
	bridge. Their only use is to enable bridge output port filtering
	within iptables with the physdev match, which can also be done by
	combining iptables and ebtables using netfilter marks. Until it
	will get removed the hook deferral is disabled by default and is
	only enabled when needed.

Who:	Patrick McHardy <kaber@trash.net>

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

What:	frame diverter
When:	November 2006
Why:	The frame diverter is included in most distribution kernels, but is
	broken. It does not correctly handle many things:
	- IPV6
	- non-linear skb's
	- network device RCU on removal
	- input frames not correctly checked for protocol errors
	It also adds allocation overhead even if not enabled.
	It is not clear if anyone is still using it.
Who:	Stephen Hemminger <shemminger@osdl.org>

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


What:	PHYSDEVPATH, PHYSDEVBUS, PHYSDEVDRIVER in the uevent environment
When:	October 2008
Why:	The stacking of class devices makes these values misleading and
	inconsistent.
	Class devices should not carry any of these properties, and bus
	devices have SUBSYTEM and DRIVER as a replacement.
Who:	Kay Sievers <kay.sievers@suse.de>

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

What:	i2c-isa
When:	December 2006
Why:	i2c-isa is a non-sense and doesn't fit in the device driver
	model. Drivers relying on it are better implemented as platform
	drivers.
Who:	Jean Delvare <khali@linux-fr.org>

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

What:	ftape
When:	2.6.20
Why:	Orphaned for ages.  SMP bugs long unfixed.  Few users left
	in the world.
Who:	Jeff Garzik <jeff@garzik.org>

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