Skip to content

Commit

Permalink
Merge branches 'release', 'bugzilla-9916', 'bugzilla-9982', 'bugzilla…
Browse files Browse the repository at this point in the history
…-9989', 'misc', 'suspend', 'thermal', 'thinkpad' and 'tsc' into release
  • Loading branch information
lenb committed Feb 21, 2008
8 parents 208c70a + f28bb45 + 1186974 + e85ff4b + 19e20c9 + 69f6b8d + 6c231bd + 6133116 commit 1f1519e
Show file tree
Hide file tree
Showing 684 changed files with 20,693 additions and 10,625 deletions.
2 changes: 2 additions & 0 deletions Documentation/00-INDEX
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,8 @@ cpu-hotplug.txt
- document describing CPU hotplug support in the Linux kernel.
cpu-load.txt
- document describing how CPU load statistics are collected.
cpuidle/
- info on CPU_IDLE, CPU idle state management subsystem.
cpusets.txt
- documents the cpusets feature; assign CPUs and Mem to a set of tasks.
cputopology.txt
Expand Down
23 changes: 23 additions & 0 deletions Documentation/cpuidle/core.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@

Supporting multiple CPU idle levels in kernel

cpuidle

General Information:

Various CPUs today support multiple idle levels that are differentiated
by varying exit latencies and power consumption during idle.
cpuidle is a generic in-kernel infrastructure that separates
idle policy (governor) from idle mechanism (driver) and provides a
standardized infrastructure to support independent development of
governors and drivers.

cpuidle resides under drivers/cpuidle.

Boot options:
"cpuidle_sysfs_switch"
enables current_governor interface in /sys/devices/system/cpu/cpuidle/,
which can be used to switch governors at run time. This boot option
is meant for developer testing only. In normal usage, kernel picks the
best governor based on governor ratings.
SEE ALSO: sysfs.txt in this directory.
31 changes: 31 additions & 0 deletions Documentation/cpuidle/driver.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@


Supporting multiple CPU idle levels in kernel

cpuidle drivers




cpuidle driver hooks into the cpuidle infrastructure and handles the
architecture/platform dependent part of CPU idle states. Driver
provides the platform idle state detection capability and also
has mechanisms in place to support actual entry-exit into CPU idle states.

cpuidle driver initializes the cpuidle_device structure for each CPU device
and registers with cpuidle using cpuidle_register_device.

It can also support the dynamic changes (like battery <-> AC), by using
cpuidle_pause_and_lock, cpuidle_disable_device and cpuidle_enable_device,
cpuidle_resume_and_unlock.

Interfaces:
extern int cpuidle_register_driver(struct cpuidle_driver *drv);
extern void cpuidle_unregister_driver(struct cpuidle_driver *drv);
extern int cpuidle_register_device(struct cpuidle_device *dev);
extern void cpuidle_unregister_device(struct cpuidle_device *dev);

extern void cpuidle_pause_and_lock(void);
extern void cpuidle_resume_and_unlock(void);
extern int cpuidle_enable_device(struct cpuidle_device *dev);
extern void cpuidle_disable_device(struct cpuidle_device *dev);
29 changes: 29 additions & 0 deletions Documentation/cpuidle/governor.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@



Supporting multiple CPU idle levels in kernel

cpuidle governors




cpuidle governor is policy routine that decides what idle state to enter at
any given time. cpuidle core uses different callbacks to the governor.

* enable() to enable governor for a particular device
* disable() to disable governor for a particular device
* select() to select an idle state to enter
* reflect() called after returning from the idle state, which can be used
by the governor for some record keeping.

More than one governor can be registered at the same time and
users can switch between drivers using /sysfs interface (when enabled).
More than one governor part is supported for developers to easily experiment
with different governors. By default, most optimal governor based on your
kernel configuration and platform will be selected by cpuidle.

Interfaces:
extern int cpuidle_register_governor(struct cpuidle_governor *gov);
extern void cpuidle_unregister_governor(struct cpuidle_governor *gov);
struct cpuidle_governor
79 changes: 79 additions & 0 deletions Documentation/cpuidle/sysfs.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@


Supporting multiple CPU idle levels in kernel

cpuidle sysfs

System global cpuidle related information and tunables are under
/sys/devices/system/cpu/cpuidle

The current interfaces in this directory has self-explanatory names:
* current_driver
* current_governor_ro

With cpuidle_sysfs_switch boot option (meant for developer testing)
following objects are visible instead.
* current_driver
* available_governors
* current_governor
In this case users can switch the governor at run time by writing
to current_governor.


Per logical CPU specific cpuidle information are under
/sys/devices/system/cpu/cpuX/cpuidle
for each online cpu X

--------------------------------------------------------------------------------
# ls -lR /sys/devices/system/cpu/cpu0/cpuidle/
/sys/devices/system/cpu/cpu0/cpuidle/:
total 0
drwxr-xr-x 2 root root 0 Feb 8 10:42 state0
drwxr-xr-x 2 root root 0 Feb 8 10:42 state1
drwxr-xr-x 2 root root 0 Feb 8 10:42 state2
drwxr-xr-x 2 root root 0 Feb 8 10:42 state3

/sys/devices/system/cpu/cpu0/cpuidle/state0:
total 0
-r--r--r-- 1 root root 4096 Feb 8 10:42 desc
-r--r--r-- 1 root root 4096 Feb 8 10:42 latency
-r--r--r-- 1 root root 4096 Feb 8 10:42 name
-r--r--r-- 1 root root 4096 Feb 8 10:42 power
-r--r--r-- 1 root root 4096 Feb 8 10:42 time
-r--r--r-- 1 root root 4096 Feb 8 10:42 usage

/sys/devices/system/cpu/cpu0/cpuidle/state1:
total 0
-r--r--r-- 1 root root 4096 Feb 8 10:42 desc
-r--r--r-- 1 root root 4096 Feb 8 10:42 latency
-r--r--r-- 1 root root 4096 Feb 8 10:42 name
-r--r--r-- 1 root root 4096 Feb 8 10:42 power
-r--r--r-- 1 root root 4096 Feb 8 10:42 time
-r--r--r-- 1 root root 4096 Feb 8 10:42 usage

/sys/devices/system/cpu/cpu0/cpuidle/state2:
total 0
-r--r--r-- 1 root root 4096 Feb 8 10:42 desc
-r--r--r-- 1 root root 4096 Feb 8 10:42 latency
-r--r--r-- 1 root root 4096 Feb 8 10:42 name
-r--r--r-- 1 root root 4096 Feb 8 10:42 power
-r--r--r-- 1 root root 4096 Feb 8 10:42 time
-r--r--r-- 1 root root 4096 Feb 8 10:42 usage

/sys/devices/system/cpu/cpu0/cpuidle/state3:
total 0
-r--r--r-- 1 root root 4096 Feb 8 10:42 desc
-r--r--r-- 1 root root 4096 Feb 8 10:42 latency
-r--r--r-- 1 root root 4096 Feb 8 10:42 name
-r--r--r-- 1 root root 4096 Feb 8 10:42 power
-r--r--r-- 1 root root 4096 Feb 8 10:42 time
-r--r--r-- 1 root root 4096 Feb 8 10:42 usage
--------------------------------------------------------------------------------


* desc : Small description about the idle state (string)
* latency : Latency to exit out of this idle state (in microseconds)
* name : Name of the idle state (string)
* power : Power consumed while in this idle state (in milliwatts)
* time : Total time spent in this idle state (in microseconds)
* usage : Number of times this state was entered (count)
32 changes: 17 additions & 15 deletions Documentation/i386/IO-APIC.txt
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
Most (all) Intel-MP compliant SMP boards have the so-called 'IO-APIC',
which is an enhanced interrupt controller, it enables us to route
hardware interrupts to multiple CPUs, or to CPU groups.
which is an enhanced interrupt controller. It enables us to route
hardware interrupts to multiple CPUs, or to CPU groups. Without an
IO-APIC, interrupts from hardware will be delivered only to the
CPU which boots the operating system (usually CPU#0).

Linux supports all variants of compliant SMP boards, including ones with
multiple IO-APICs. (multiple IO-APICs are used in high-end servers to
distribute IRQ load further).
multiple IO-APICs. Multiple IO-APICs are used in high-end servers to
distribute IRQ load further.

There are (a few) known breakages in certain older boards, which bugs are
There are (a few) known breakages in certain older boards, such bugs are
usually worked around by the kernel. If your MP-compliant SMP board does
not boot Linux, then consult the linux-smp mailing list archives first.

Expand All @@ -28,18 +30,18 @@ If your box boots fine with enabled IO-APIC IRQs, then your
hell:~>
<----------------------------

some interrupts are still listed as 'XT PIC', but this is not a problem,
Some interrupts are still listed as 'XT PIC', but this is not a problem;
none of those IRQ sources is performance-critical.


in the unlikely case that your board does not create a working mp-table,
In the unlikely case that your board does not create a working mp-table,
you can use the pirq= boot parameter to 'hand-construct' IRQ entries. This
is nontrivial though and cannot be automated. One sample /etc/lilo.conf
is non-trivial though and cannot be automated. One sample /etc/lilo.conf
entry:

append="pirq=15,11,10"

the actual numbers depend on your system, on your PCI cards and on their
The actual numbers depend on your system, on your PCI cards and on their
PCI slot position. Usually PCI slots are 'daisy chained' before they are
connected to the PCI chipset IRQ routing facility (the incoming PIRQ1-4
lines):
Expand All @@ -54,7 +56,7 @@ lines):
PIRQ1 ----| |- `----| |- `----| |- `----| |--------| |
`-' `-' `-' `-' `-'

every PCI card emits a PCI IRQ, which can be INTA,INTB,INTC,INTD:
Every PCI card emits a PCI IRQ, which can be INTA, INTB, INTC or INTD:

,-.
INTD--| |
Expand Down Expand Up @@ -95,21 +97,21 @@ card (IRQ11) in Slot3, and have Slot1 empty:
[value '0' is a generic 'placeholder', reserved for empty (or non-IRQ emitting)
slots.]

generally, it's always possible to find out the correct pirq= settings, just
Generally, it's always possible to find out the correct pirq= settings, just
permute all IRQ numbers properly ... it will take some time though. An
'incorrect' pirq line will cause the booting process to hang, or a device
won't function properly (if it's inserted as eg. a module).
won't function properly (e.g. if it's inserted as a module).

If you have 2 PCI buses, then you can use up to 8 pirq values. Although such
If you have 2 PCI buses, then you can use up to 8 pirq values, although such
boards tend to have a good configuration.

Be prepared that it might happen that you need some strange pirq line:

append="pirq=0,0,0,0,0,0,9,11"

use smart try-and-err techniques to find out the correct pirq line ...
Use smart trial-and-error techniques to find out the correct pirq line ...

good luck and mail to linux-smp@vger.kernel.org or
Good luck and mail to linux-smp@vger.kernel.org or
linux-kernel@vger.kernel.org if you have any problems that are not covered
by this document.

Expand Down
37 changes: 35 additions & 2 deletions Documentation/kernel-parameters.txt
Original file line number Diff line number Diff line change
Expand Up @@ -950,6 +950,41 @@ and is between 256 and 4096 characters. It is defined in the file
when set.
Format: <int>

libata.force= [LIBATA] Force configurations. The format is comma
separated list of "[ID:]VAL" where ID is
PORT[:DEVICE]. PORT and DEVICE are decimal numbers
matching port, link or device. Basically, it matches
the ATA ID string printed on console by libata. If
the whole ID part is omitted, the last PORT and DEVICE
values are used. If ID hasn't been specified yet, the
configuration applies to all ports, links and devices.

If only DEVICE is omitted, the parameter applies to
the port and all links and devices behind it. DEVICE
number of 0 either selects the first device or the
first fan-out link behind PMP device. It does not
select the host link. DEVICE number of 15 selects the
host link and device attached to it.

The VAL specifies the configuration to force. As long
as there's no ambiguity shortcut notation is allowed.
For example, both 1.5 and 1.5G would work for 1.5Gbps.
The following configurations can be forced.

* Cable type: 40c, 80c, short40c, unk, ign or sata.
Any ID with matching PORT is used.

* SATA link speed limit: 1.5Gbps or 3.0Gbps.

* Transfer mode: pio[0-7], mwdma[0-4] and udma[0-7].
udma[/][16,25,33,44,66,100,133] notation is also
allowed.

* [no]ncq: Turn on or off NCQ.

If there are multiple matching configurations changing
the same attribute, the last one is used.

load_ramdisk= [RAM] List of ramdisks to load from floppy
See Documentation/ramdisk.txt.

Expand Down Expand Up @@ -1056,8 +1091,6 @@ and is between 256 and 4096 characters. It is defined in the file
[SCSI] Maximum number of LUNs received.
Should be between 1 and 16384.

mca-pentium [BUGS=X86-32]

mcatest= [IA-64]

mce [X86-32] Machine Check Exception
Expand Down
Loading

0 comments on commit 1f1519e

Please sign in to comment.