linux/drivers
Arjan van de Ven 5c87579e65 [PATCH] maximum latency tracking infrastructure
Add infrastructure to track "maximum allowable latency" for power saving
policies.

The reason for adding this infrastructure is that power management in the
idle loop needs to make a tradeoff between latency and power savings
(deeper power save modes have a longer latency to running code again).  The
code that today makes this tradeoff just does a rather simple algorithm;
however this is not good enough: There are devices and use cases where a
lower latency is required than that the higher power saving states provide.
 An example would be audio playback, but another example is the ipw2100
wireless driver that right now has a very direct and ugly acpi hook to
disable some higher power states randomly when it gets certain types of
error.

The proposed solution is to have an interface where drivers can

* announce the maximum latency (in microseconds) that they can deal with
* modify this latency
* give up their constraint

and a function where the code that decides on power saving strategy can
query the current global desired maximum.

This patch has a user of each side: on the consumer side, ACPI is patched
to use this, on the producer side the ipw2100 driver is patched.

A generic maximum latency is also registered of 2 timer ticks (more and you
lose accurate time tracking after all).

While the existing users of the patch are x86 specific, the infrastructure
is not.  I'd like to ask the arch maintainers of other architectures if the
infrastructure is generic enough for their use (assuming the architecture
has such a tradeoff as concept at all), and the sound/multimedia driver
owners to look at the driver facing API to see if this is something they
can use.

[akpm@osdl.org: cleanups]
Signed-off-by: Arjan van de Ven <arjan@linux.intel.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Acked-by: Jesse Barnes <jesse.barnes@intel.com>
Cc: "Brown, Len" <len.brown@intel.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2006-10-01 00:39:19 -07:00
..
acorn i2c-algo-bit: Discard the mdelay data struct member 2006-09-26 15:38:51 -07:00
acpi [PATCH] maximum latency tracking infrastructure 2006-10-01 00:39:19 -07:00
amba
ata [libata] Don't use old-EH ->eng_timeout() hook when not needed 2006-09-27 05:41:13 -04:00
atm [ATM] he: Fix __init/__devinit conflict 2006-09-24 20:09:33 -07:00
base [PATCH] hot-add-mem x86_64: use CONFIG_MEMORY_HOTPLUG_SPARSE 2006-10-01 00:39:18 -07:00
block [PATCH] Generic boolean 2006-10-01 00:39:18 -07:00
bluetooth [Bluetooth] Code cleanup for the HCI UART driver 2006-09-28 18:01:30 -07:00
cdrom [PATCH] BLOCK: Make it possible to disable the block layer [try #6] 2006-09-30 20:52:31 +02:00
char Merge branch 'block' of git://brick.kernel.dk/data/git/linux-2.6-block 2006-09-30 12:07:01 -07:00
clocksource
connector [PATCH] Process Events: Fix biarch compatibility issue. use __u64 timestamp 2006-07-31 13:28:36 -07:00
cpufreq [CPUFREQ] Fix some more CPU hotplug locking. 2006-09-22 19:15:23 -04:00
crypto [CRYPTO] padlock: Convert padlock-sha to use crypto_hash 2006-09-21 11:46:22 +10:00
dio
dma [I/OAT]: Remove pci_module_init() from Intel I/OAT DMA engine 2006-07-21 14:50:13 -07:00
edac [PATCH] drivers/edac/edac_mc.h must #include <linux/platform_device.h> 2006-08-06 08:57:46 -07:00
eisa [PATCH] EISA bus MODALIAS attributes support 2006-09-27 08:26:19 -07:00
fc4 [PATCH] Remove ->rq_status from struct request 2006-09-30 20:29:23 +02:00
firmware [PATCH] DMI: Decode and save OEM String information 2006-09-29 09:18:09 -07:00
hwmon hwmon: Remove Yuan Mu's address 2006-09-28 15:31:19 -07:00
i2c [PATCH] i2c: Prevent deadlock on i2c client registration 2006-09-30 10:58:47 -07:00
ide [PATCH] BLOCK: Make it possible to disable the block layer [try #6] 2006-09-30 20:52:31 +02:00
ieee1394 Merge branch 'upstream-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ieee1394/linux1394-2.6 2006-09-30 09:38:19 -07:00
infiniband Merge branch 'for-linus' of master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband 2006-09-29 15:18:22 -07:00
input [PATCH] OMAP: Add keypad driver 2006-09-29 09:18:07 -07:00
isdn [IPV4]: annotate struct in_ifaddr 2006-09-28 18:00:55 -07:00
leds [PATCH] Make net48xx-led use scx200_gpio_ops 2006-09-29 09:18:06 -07:00
macintosh [PATCH] windfarm_smu_sat.c: simplify around i2c_add_driver() 2006-09-29 09:18:19 -07:00
mca
md [PATCH] BLOCK: Make it possible to disable the block layer [try #6] 2006-09-30 20:52:31 +02:00
media [PATCH] Generic boolean 2006-10-01 00:39:18 -07:00
message [PATCH] BLOCK: Make it possible to disable the block layer [try #6] 2006-09-30 20:52:31 +02:00
mfd [PATCH] ucb1x00-ts: handle errors from input_register_device() 2006-09-29 09:18:10 -07:00
misc [PATCH] inode-diet: Eliminate i_blksize from the inode structure 2006-09-27 08:26:18 -07:00
mmc [PATCH] BLOCK: Make it possible to disable the block layer [try #6] 2006-09-30 20:52:31 +02:00
mtd [PATCH] BLOCK: Make it possible to disable the block layer [try #6] 2006-09-30 20:52:31 +02:00
net [PATCH] maximum latency tracking infrastructure 2006-10-01 00:39:19 -07:00
nubus Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
oprofile [PATCH] inode-diet: Eliminate i_blksize from the inode structure 2006-09-27 08:26:18 -07:00
parisc [PATCH] irq-flags: PARISC: Use the new IRQF_ constants 2006-07-02 13:58:52 -07:00
parport [PATCH] CONFIG_PM=n slim: drivers/parport/parport_serial.c 2006-09-29 09:18:13 -07:00
pci [PATCH] PCI quirks update 2006-10-01 00:39:17 -07:00
pcmcia [PATCH] pcmcia: fix ioctl GET_CONFIGURATION_INFO for pcmcia_cards 2006-07-31 13:28:41 -07:00
pnp [PATCH] pnpacpi: reject ACPI_PRODUCER resources 2006-08-06 08:57:49 -07:00
rapidio Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
rtc [PATCH] RTC: more XSTP/VDET support for rtc-rs5c348 driver 2006-09-29 09:18:24 -07:00
s390 [PATCH] BLOCK: Make it possible to disable the block layer [try #6] 2006-09-30 20:52:31 +02:00
sbus [OPENPROMIO]: Handle current_node being NULL correctly. 2006-09-18 01:47:13 -07:00
scsi [PATCH] Generic boolean 2006-10-01 00:39:18 -07:00
serial [SERIAL] sunzilog: Mark sunzilog_init_hw as __devinit. 2006-09-29 16:12:43 -07:00
sh
sn [PATCH] irq-flags: misc drivers: Use the new IRQF_ constants 2006-07-02 13:58:50 -07:00
spi [PATCH] lockdep: annotate on-stack completions 2006-07-03 15:27:09 -07:00
tc [PATCH] irq-flags: misc drivers: Use the new IRQF_ constants 2006-07-02 13:58:50 -07:00
telephony
usb [PATCH] BLOCK: Make USB storage depend on SCSI rather than selecting it [try #6] 2006-09-30 20:52:32 +02:00
video Merge branch 'intelfb-patches' of master.kernel.org:/pub/scm/linux/kernel/git/airlied/intelfb-2.6 2006-09-30 09:36:56 -07:00
w1 [PATCH] w1: remove drivers/w1/w1.h 2006-07-12 15:38:28 -07:00
zorro Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
Kconfig Move libata to drivers/ata. 2006-08-10 07:31:37 -04:00
Makefile Move libata to drivers/ata. 2006-08-10 07:31:37 -04:00