diff options
Diffstat (limited to 'Documentation')
-rw-r--r-- | Documentation/feature-removal-schedule.txt | 9 | ||||
-rw-r--r-- | Documentation/fujitsu/frv/kernel-ABI.txt | 234 | ||||
-rw-r--r-- | Documentation/hwmon/f71805f | 105 | ||||
-rw-r--r-- | Documentation/hwmon/it87 | 2 | ||||
-rw-r--r-- | Documentation/hwmon/sysfs-interface | 18 | ||||
-rw-r--r-- | Documentation/hwmon/w83627hf | 4 | ||||
-rw-r--r-- | Documentation/i2c/busses/i2c-sis96x (renamed from Documentation/i2c/busses/i2c-sis69x) | 4 | ||||
-rw-r--r-- | Documentation/kernel-parameters.txt | 2 | ||||
-rw-r--r-- | Documentation/kprobes.txt | 81 | ||||
-rw-r--r-- | Documentation/mips/AU1xxx_IDE.README | 6 | ||||
-rw-r--r-- | Documentation/powerpc/booting-without-of.txt | 68 | ||||
-rw-r--r-- | Documentation/spi/butterfly | 23 | ||||
-rw-r--r-- | Documentation/unshare.txt | 295 | ||||
-rw-r--r-- | Documentation/video4linux/CARDLIST.cx88 | 2 | ||||
-rw-r--r-- | Documentation/video4linux/CARDLIST.saa7134 | 6 | ||||
-rw-r--r-- | Documentation/x86_64/boot-options.txt | 12 |
16 files changed, 816 insertions, 55 deletions
diff --git a/Documentation/feature-removal-schedule.txt b/Documentation/feature-removal-schedule.txt index 4d4897c8ef96..b730d765b525 100644 --- a/Documentation/feature-removal-schedule.txt +++ b/Documentation/feature-removal-schedule.txt | |||
@@ -162,3 +162,12 @@ What: pci_module_init(driver) | |||
162 | When: January 2007 | 162 | When: January 2007 |
163 | Why: Is replaced by pci_register_driver(pci_driver). | 163 | Why: Is replaced by pci_register_driver(pci_driver). |
164 | Who: Richard Knutsson <ricknu-0@student.ltu.se> and Greg Kroah-Hartman <gregkh@suse.de> | 164 | Who: Richard Knutsson <ricknu-0@student.ltu.se> and Greg Kroah-Hartman <gregkh@suse.de> |
165 | |||
166 | --------------------------- | ||
167 | |||
168 | What: I2C interface of the it87 driver | ||
169 | When: January 2007 | ||
170 | Why: The ISA interface is faster and should be always available. The I2C | ||
171 | probing is also known to cause trouble in at least one case (see | ||
172 | bug #5889.) | ||
173 | Who: Jean Delvare <khali@linux-fr.org> | ||
diff --git a/Documentation/fujitsu/frv/kernel-ABI.txt b/Documentation/fujitsu/frv/kernel-ABI.txt new file mode 100644 index 000000000000..0ed9b0a779bc --- /dev/null +++ b/Documentation/fujitsu/frv/kernel-ABI.txt | |||
@@ -0,0 +1,234 @@ | |||
1 | ================================= | ||
2 | INTERNAL KERNEL ABI FOR FR-V ARCH | ||
3 | ================================= | ||
4 | |||
5 | The internal FRV kernel ABI is not quite the same as the userspace ABI. A number of the registers | ||
6 | are used for special purposed, and the ABI is not consistent between modules vs core, and MMU vs | ||
7 | no-MMU. | ||
8 | |||
9 | This partly stems from the fact that FRV CPUs do not have a separate supervisor stack pointer, and | ||
10 | most of them do not have any scratch registers, thus requiring at least one general purpose | ||
11 | register to be clobbered in such an event. Also, within the kernel core, it is possible to simply | ||
12 | jump or call directly between functions using a relative offset. This cannot be extended to modules | ||
13 | for the displacement is likely to be too far. Thus in modules the address of a function to call | ||
14 | must be calculated in a register and then used, requiring two extra instructions. | ||
15 | |||
16 | This document has the following sections: | ||
17 | |||
18 | (*) System call register ABI | ||
19 | (*) CPU operating modes | ||
20 | (*) Internal kernel-mode register ABI | ||
21 | (*) Internal debug-mode register ABI | ||
22 | (*) Virtual interrupt handling | ||
23 | |||
24 | |||
25 | ======================== | ||
26 | SYSTEM CALL REGISTER ABI | ||
27 | ======================== | ||
28 | |||
29 | When a system call is made, the following registers are effective: | ||
30 | |||
31 | REGISTERS CALL RETURN | ||
32 | =============== ======================= ======================= | ||
33 | GR7 System call number Preserved | ||
34 | GR8 Syscall arg #1 Return value | ||
35 | GR9-GR13 Syscall arg #2-6 Preserved | ||
36 | |||
37 | |||
38 | =================== | ||
39 | CPU OPERATING MODES | ||
40 | =================== | ||
41 | |||
42 | The FR-V CPU has three basic operating modes. In order of increasing capability: | ||
43 | |||
44 | (1) User mode. | ||
45 | |||
46 | Basic userspace running mode. | ||
47 | |||
48 | (2) Kernel mode. | ||
49 | |||
50 | Normal kernel mode. There are many additional control registers available that may be | ||
51 | accessed in this mode, in addition to all the stuff available to user mode. This has two | ||
52 | submodes: | ||
53 | |||
54 | (a) Exceptions enabled (PSR.T == 1). | ||
55 | |||
56 | Exceptions will invoke the appropriate normal kernel mode handler. On entry to the | ||
57 | handler, the PSR.T bit will be cleared. | ||
58 | |||
59 | (b) Exceptions disabled (PSR.T == 0). | ||
60 | |||
61 | No exceptions or interrupts may happen. Any mandatory exceptions will cause the CPU to | ||
62 | halt unless the CPU is told to jump into debug mode instead. | ||
63 | |||
64 | (3) Debug mode. | ||
65 | |||
66 | No exceptions may happen in this mode. Memory protection and management exceptions will be | ||
67 | flagged for later consideration, but the exception handler won't be invoked. Debugging traps | ||
68 | such as hardware breakpoints and watchpoints will be ignored. This mode is entered only by | ||
69 | debugging events obtained from the other two modes. | ||
70 | |||
71 | All kernel mode registers may be accessed, plus a few extra debugging specific registers. | ||
72 | |||
73 | |||
74 | ================================= | ||
75 | INTERNAL KERNEL-MODE REGISTER ABI | ||
76 | ================================= | ||
77 | |||
78 | There are a number of permanent register assignments that are set up by entry.S in the exception | ||
79 | prologue. Note that there is a complete set of exception prologues for each of user->kernel | ||
80 | transition and kernel->kernel transition. There are also user->debug and kernel->debug mode | ||
81 | transition prologues. | ||
82 | |||
83 | |||
84 | REGISTER FLAVOUR USE | ||
85 | =============== ======= ==================================================== | ||
86 | GR1 Supervisor stack pointer | ||
87 | GR15 Current thread info pointer | ||
88 | GR16 GP-Rel base register for small data | ||
89 | GR28 Current exception frame pointer (__frame) | ||
90 | GR29 Current task pointer (current) | ||
91 | GR30 Destroyed by kernel mode entry | ||
92 | GR31 NOMMU Destroyed by debug mode entry | ||
93 | GR31 MMU Destroyed by TLB miss kernel mode entry | ||
94 | CCR.ICC2 Virtual interrupt disablement tracking | ||
95 | CCCR.CC3 Cleared by exception prologue (atomic op emulation) | ||
96 | SCR0 MMU See mmu-layout.txt. | ||
97 | SCR1 MMU See mmu-layout.txt. | ||
98 | SCR2 MMU Save for EAR0 (destroyed by icache insns in debug mode) | ||
99 | SCR3 MMU Save for GR31 during debug exceptions | ||
100 | DAMR/IAMR NOMMU Fixed memory protection layout. | ||
101 | DAMR/IAMR MMU See mmu-layout.txt. | ||
102 | |||
103 | |||
104 | Certain registers are also used or modified across function calls: | ||
105 | |||
106 | REGISTER CALL RETURN | ||
107 | =============== =============================== =============================== | ||
108 | GR0 Fixed Zero - | ||
109 | GR2 Function call frame pointer | ||
110 | GR3 Special Preserved | ||
111 | GR3-GR7 - Clobbered | ||
112 | GR8 Function call arg #1 Return value (or clobbered) | ||
113 | GR9 Function call arg #2 Return value MSW (or clobbered) | ||
114 | GR10-GR13 Function call arg #3-#6 Clobbered | ||
115 | GR14 - Clobbered | ||
116 | GR15-GR16 Special Preserved | ||
117 | GR17-GR27 - Preserved | ||
118 | GR28-GR31 Special Only accessed explicitly | ||
119 | LR Return address after CALL Clobbered | ||
120 | CCR/CCCR - Mostly Clobbered | ||
121 | |||
122 | |||
123 | ================================ | ||
124 | INTERNAL DEBUG-MODE REGISTER ABI | ||
125 | ================================ | ||
126 | |||
127 | This is the same as the kernel-mode register ABI for functions calls. The difference is that in | ||
128 | debug-mode there's a different stack and a different exception frame. Almost all the global | ||
129 | registers from kernel-mode (including the stack pointer) may be changed. | ||
130 | |||
131 | REGISTER FLAVOUR USE | ||
132 | =============== ======= ==================================================== | ||
133 | GR1 Debug stack pointer | ||
134 | GR16 GP-Rel base register for small data | ||
135 | GR31 Current debug exception frame pointer (__debug_frame) | ||
136 | SCR3 MMU Saved value of GR31 | ||
137 | |||
138 | |||
139 | Note that debug mode is able to interfere with the kernel's emulated atomic ops, so it must be | ||
140 | exceedingly careful not to do any that would interact with the main kernel in this regard. Hence | ||
141 | the debug mode code (gdbstub) is almost completely self-contained. The only external code used is | ||
142 | the sprintf family of functions. | ||
143 | |||
144 | Futhermore, break.S is so complicated because single-step mode does not switch off on entry to an | ||
145 | exception. That means unless manually disabled, single-stepping will blithely go on stepping into | ||
146 | things like interrupts. See gdbstub.txt for more information. | ||
147 | |||
148 | |||
149 | ========================== | ||
150 | VIRTUAL INTERRUPT HANDLING | ||
151 | ========================== | ||
152 | |||
153 | Because accesses to the PSR is so slow, and to disable interrupts we have to access it twice (once | ||
154 | to read and once to write), we don't actually disable interrupts at all if we don't have to. What | ||
155 | we do instead is use the ICC2 condition code flags to note virtual disablement, such that if we | ||
156 | then do take an interrupt, we note the flag, really disable interrupts, set another flag and resume | ||
157 | execution at the point the interrupt happened. Setting condition flags as a side effect of an | ||
158 | arithmetic or logical instruction is really fast. This use of the ICC2 only occurs within the | ||
159 | kernel - it does not affect userspace. | ||
160 | |||
161 | The flags we use are: | ||
162 | |||
163 | (*) CCR.ICC2.Z [Zero flag] | ||
164 | |||
165 | Set to virtually disable interrupts, clear when interrupts are virtually enabled. Can be | ||
166 | modified by logical instructions without affecting the Carry flag. | ||
167 | |||
168 | (*) CCR.ICC2.C [Carry flag] | ||
169 | |||
170 | Clear to indicate hardware interrupts are really disabled, set otherwise. | ||
171 | |||
172 | |||
173 | What happens is this: | ||
174 | |||
175 | (1) Normal kernel-mode operation. | ||
176 | |||
177 | ICC2.Z is 0, ICC2.C is 1. | ||
178 | |||
179 | (2) An interrupt occurs. The exception prologue examines ICC2.Z and determines that nothing needs | ||
180 | doing. This is done simply with an unlikely BEQ instruction. | ||
181 | |||
182 | (3) The interrupts are disabled (local_irq_disable) | ||
183 | |||
184 | ICC2.Z is set to 1. | ||
185 | |||
186 | (4) If interrupts were then re-enabled (local_irq_enable): | ||
187 | |||
188 | ICC2.Z would be set to 0. | ||
189 | |||
190 | A TIHI #2 instruction (trap #2 if condition HI - Z==0 && C==0) would be used to trap if | ||
191 | interrupts were now virtually enabled, but physically disabled - which they're not, so the | ||
192 | trap isn't taken. The kernel would then be back to state (1). | ||
193 | |||
194 | (5) An interrupt occurs. The exception prologue examines ICC2.Z and determines that the interrupt | ||
195 | shouldn't actually have happened. It jumps aside, and there disabled interrupts by setting | ||
196 | PSR.PIL to 14 and then it clears ICC2.C. | ||
197 | |||
198 | (6) If interrupts were then saved and disabled again (local_irq_save): | ||
199 | |||
200 | ICC2.Z would be shifted into the save variable and masked off (giving a 1). | ||
201 | |||
202 | ICC2.Z would then be set to 1 (thus unchanged), and ICC2.C would be unaffected (ie: 0). | ||
203 | |||
204 | (7) If interrupts were then restored from state (6) (local_irq_restore): | ||
205 | |||
206 | ICC2.Z would be set to indicate the result of XOR'ing the saved value (ie: 1) with 1, which | ||
207 | gives a result of 0 - thus leaving ICC2.Z set. | ||
208 | |||
209 | ICC2.C would remain unaffected (ie: 0). | ||
210 | |||
211 | A TIHI #2 instruction would be used to again assay the current state, but this would do | ||
212 | nothing as Z==1. | ||
213 | |||
214 | (8) If interrupts were then enabled (local_irq_enable): | ||
215 | |||
216 | ICC2.Z would be cleared. ICC2.C would be left unaffected. Both flags would now be 0. | ||
217 | |||
218 | A TIHI #2 instruction again issued to assay the current state would then trap as both Z==0 | ||
219 | [interrupts virtually enabled] and C==0 [interrupts really disabled] would then be true. | ||
220 | |||
221 | (9) The trap #2 handler would simply enable hardware interrupts (set PSR.PIL to 0), set ICC2.C to | ||
222 | 1 and return. | ||
223 | |||
224 | (10) Immediately upon returning, the pending interrupt would be taken. | ||
225 | |||
226 | (11) The interrupt handler would take the path of actually processing the interrupt (ICC2.Z is | ||
227 | clear, BEQ fails as per step (2)). | ||
228 | |||
229 | (12) The interrupt handler would then set ICC2.C to 1 since hardware interrupts are definitely | ||
230 | enabled - or else the kernel wouldn't be here. | ||
231 | |||
232 | (13) On return from the interrupt handler, things would be back to state (1). | ||
233 | |||
234 | This trap (#2) is only available in kernel mode. In user mode it will result in SIGILL. | ||
diff --git a/Documentation/hwmon/f71805f b/Documentation/hwmon/f71805f new file mode 100644 index 000000000000..28c5b7d1eb90 --- /dev/null +++ b/Documentation/hwmon/f71805f | |||
@@ -0,0 +1,105 @@ | |||
1 | Kernel driver f71805f | ||
2 | ===================== | ||
3 | |||
4 | Supported chips: | ||
5 | * Fintek F71805F/FG | ||
6 | Prefix: 'f71805f' | ||
7 | Addresses scanned: none, address read from Super I/O config space | ||
8 | Datasheet: Provided by Fintek on request | ||
9 | |||
10 | Author: Jean Delvare <khali@linux-fr.org> | ||
11 | |||
12 | Thanks to Denis Kieft from Barracuda Networks for the donation of a | ||
13 | test system (custom Jetway K8M8MS motherboard, with CPU and RAM) and | ||
14 | for providing initial documentation. | ||
15 | |||
16 | Thanks to Kris Chen from Fintek for answering technical questions and | ||
17 | providing additional documentation. | ||
18 | |||
19 | Thanks to Chris Lin from Jetway for providing wiring schematics and | ||
20 | anwsering technical questions. | ||
21 | |||
22 | |||
23 | Description | ||
24 | ----------- | ||
25 | |||
26 | The Fintek F71805F/FG Super I/O chip includes complete hardware monitoring | ||
27 | capabilities. It can monitor up to 9 voltages (counting its own power | ||
28 | source), 3 fans and 3 temperature sensors. | ||
29 | |||
30 | This chip also has fan controlling features, using either DC or PWM, in | ||
31 | three different modes (one manual, two automatic). The driver doesn't | ||
32 | support these features yet. | ||
33 | |||
34 | The driver assumes that no more than one chip is present, which seems | ||
35 | reasonable. | ||
36 | |||
37 | |||
38 | Voltage Monitoring | ||
39 | ------------------ | ||
40 | |||
41 | Voltages are sampled by an 8-bit ADC with a LSB of 8 mV. The supported | ||
42 | range is thus from 0 to 2.040 V. Voltage values outside of this range | ||
43 | need external resistors. An exception is in0, which is used to monitor | ||
44 | the chip's own power source (+3.3V), and is divided internally by a | ||
45 | factor 2. | ||
46 | |||
47 | The two LSB of the voltage limit registers are not used (always 0), so | ||
48 | you can only set the limits in steps of 32 mV (before scaling). | ||
49 | |||
50 | The wirings and resistor values suggested by Fintek are as follow: | ||
51 | |||
52 | pin expected | ||
53 | name use R1 R2 divider raw val. | ||
54 | |||
55 | in0 VCC VCC3.3V int. int. 2.00 1.65 V | ||
56 | in1 VIN1 VTT1.2V 10K - 1.00 1.20 V | ||
57 | in2 VIN2 VRAM 100K 100K 2.00 ~1.25 V (1) | ||
58 | in3 VIN3 VCHIPSET 47K 100K 1.47 2.24 V (2) | ||
59 | in4 VIN4 VCC5V 200K 47K 5.25 0.95 V | ||
60 | in5 VIN5 +12V 200K 20K 11.00 1.05 V | ||
61 | in6 VIN6 VCC1.5V 10K - 1.00 1.50 V | ||
62 | in7 VIN7 VCORE 10K - 1.00 ~1.40 V (1) | ||
63 | in8 VIN8 VSB5V 200K 47K 1.00 0.95 V | ||
64 | |||
65 | (1) Depends on your hardware setup. | ||
66 | (2) Obviously not correct, swapping R1 and R2 would make more sense. | ||
67 | |||
68 | These values can be used as hints at best, as motherboard manufacturers | ||
69 | are free to use a completely different setup. As a matter of fact, the | ||
70 | Jetway K8M8MS uses a significantly different setup. You will have to | ||
71 | find out documentation about your own motherboard, and edit sensors.conf | ||
72 | accordingly. | ||
73 | |||
74 | Each voltage measured has associated low and high limits, each of which | ||
75 | triggers an alarm when crossed. | ||
76 | |||
77 | |||
78 | Fan Monitoring | ||
79 | -------------- | ||
80 | |||
81 | Fan rotation speeds are reported as 12-bit values from a gated clock | ||
82 | signal. Speeds down to 366 RPM can be measured. There is no theoretical | ||
83 | high limit, but values over 6000 RPM seem to cause problem. The effective | ||
84 | resolution is much lower than you would expect, the step between different | ||
85 | register values being 10 rather than 1. | ||
86 | |||
87 | The chip assumes 2 pulse-per-revolution fans. | ||
88 | |||
89 | An alarm is triggered if the rotation speed drops below a programmable | ||
90 | limit or is too low to be measured. | ||
91 | |||
92 | |||
93 | Temperature Monitoring | ||
94 | ---------------------- | ||
95 | |||
96 | Temperatures are reported in degrees Celsius. Each temperature measured | ||
97 | has a high limit, those crossing triggers an alarm. There is an associated | ||
98 | hysteresis value, below which the temperature has to drop before the | ||
99 | alarm is cleared. | ||
100 | |||
101 | All temperature channels are external, there is no embedded temperature | ||
102 | sensor. Each channel can be used for connecting either a thermal diode | ||
103 | or a thermistor. The driver reports the currently selected mode, but | ||
104 | doesn't allow changing it. In theory, the BIOS should have configured | ||
105 | everything properly. | ||
diff --git a/Documentation/hwmon/it87 b/Documentation/hwmon/it87 index 7f42e441c645..9555be1ed999 100644 --- a/Documentation/hwmon/it87 +++ b/Documentation/hwmon/it87 | |||
@@ -9,7 +9,7 @@ Supported chips: | |||
9 | http://www.ite.com.tw/ | 9 | http://www.ite.com.tw/ |
10 | * IT8712F | 10 | * IT8712F |
11 | Prefix: 'it8712' | 11 | Prefix: 'it8712' |
12 | Addresses scanned: I2C 0x28 - 0x2f | 12 | Addresses scanned: I2C 0x2d |
13 | from Super I/O config space (8 I/O ports) | 13 | from Super I/O config space (8 I/O ports) |
14 | Datasheet: Publicly available at the ITE website | 14 | Datasheet: Publicly available at the ITE website |
15 | http://www.ite.com.tw/ | 15 | http://www.ite.com.tw/ |
diff --git a/Documentation/hwmon/sysfs-interface b/Documentation/hwmon/sysfs-interface index 764cdc5480e7..a0d0ab24288e 100644 --- a/Documentation/hwmon/sysfs-interface +++ b/Documentation/hwmon/sysfs-interface | |||
@@ -179,11 +179,12 @@ temp[1-*]_auto_point[1-*]_temp_hyst | |||
179 | **************** | 179 | **************** |
180 | 180 | ||
181 | temp[1-3]_type Sensor type selection. | 181 | temp[1-3]_type Sensor type selection. |
182 | Integers 1, 2, 3 or thermistor Beta value (3435) | 182 | Integers 1 to 4 or thermistor Beta value (typically 3435) |
183 | Read/Write. | 183 | Read/Write. |
184 | 1: PII/Celeron Diode | 184 | 1: PII/Celeron Diode |
185 | 2: 3904 transistor | 185 | 2: 3904 transistor |
186 | 3: thermal diode | 186 | 3: thermal diode |
187 | 4: thermistor (default/unknown Beta) | ||
187 | Not all types are supported by all chips | 188 | Not all types are supported by all chips |
188 | 189 | ||
189 | temp[1-4]_max Temperature max value. | 190 | temp[1-4]_max Temperature max value. |
@@ -261,6 +262,21 @@ alarms Alarm bitmask. | |||
261 | of individual bits. | 262 | of individual bits. |
262 | Bits are defined in kernel/include/sensors.h. | 263 | Bits are defined in kernel/include/sensors.h. |
263 | 264 | ||
265 | alarms_in Alarm bitmask relative to in (voltage) channels | ||
266 | Read only | ||
267 | A '1' bit means an alarm, LSB corresponds to in0 and so on | ||
268 | Prefered to 'alarms' for newer chips | ||
269 | |||
270 | alarms_fan Alarm bitmask relative to fan channels | ||
271 | Read only | ||
272 | A '1' bit means an alarm, LSB corresponds to fan1 and so on | ||
273 | Prefered to 'alarms' for newer chips | ||
274 | |||
275 | alarms_temp Alarm bitmask relative to temp (temperature) channels | ||
276 | Read only | ||
277 | A '1' bit means an alarm, LSB corresponds to temp1 and so on | ||
278 | Prefered to 'alarms' for newer chips | ||
279 | |||
264 | beep_enable Beep/interrupt enable | 280 | beep_enable Beep/interrupt enable |
265 | 0 to disable. | 281 | 0 to disable. |
266 | 1 to enable. | 282 | 1 to enable. |
diff --git a/Documentation/hwmon/w83627hf b/Documentation/hwmon/w83627hf index 5d23776e9907..bbeaba680443 100644 --- a/Documentation/hwmon/w83627hf +++ b/Documentation/hwmon/w83627hf | |||
@@ -36,6 +36,10 @@ Module Parameters | |||
36 | (default is 1) | 36 | (default is 1) |
37 | Use 'init=0' to bypass initializing the chip. | 37 | Use 'init=0' to bypass initializing the chip. |
38 | Try this if your computer crashes when you load the module. | 38 | Try this if your computer crashes when you load the module. |
39 | * reset: int | ||
40 | (default is 0) | ||
41 | The driver used to reset the chip on load, but does no more. Use | ||
42 | 'reset=1' to restore the old behavior. Report if you need to do this. | ||
39 | 43 | ||
40 | Description | 44 | Description |
41 | ----------- | 45 | ----------- |
diff --git a/Documentation/i2c/busses/i2c-sis69x b/Documentation/i2c/busses/i2c-sis96x index b88953dfd580..00a009b977e9 100644 --- a/Documentation/i2c/busses/i2c-sis69x +++ b/Documentation/i2c/busses/i2c-sis96x | |||
@@ -7,7 +7,7 @@ Supported adapters: | |||
7 | Any combination of these host bridges: | 7 | Any combination of these host bridges: |
8 | 645, 645DX (aka 646), 648, 650, 651, 655, 735, 745, 746 | 8 | 645, 645DX (aka 646), 648, 650, 651, 655, 735, 745, 746 |
9 | and these south bridges: | 9 | and these south bridges: |
10 | 961, 962, 963(L) | 10 | 961, 962, 963(L) |
11 | 11 | ||
12 | Author: Mark M. Hoffman <mhoffman@lightlink.com> | 12 | Author: Mark M. Hoffman <mhoffman@lightlink.com> |
13 | 13 | ||
@@ -29,7 +29,7 @@ The command "lspci" as root should produce something like these lines: | |||
29 | 29 | ||
30 | or perhaps this... | 30 | or perhaps this... |
31 | 31 | ||
32 | 00:00.0 Host bridge: Silicon Integrated Systems [SiS]: Unknown device 0645 | 32 | 00:00.0 Host bridge: Silicon Integrated Systems [SiS]: Unknown device 0645 |
33 | 00:02.0 ISA bridge: Silicon Integrated Systems [SiS]: Unknown device 0961 | 33 | 00:02.0 ISA bridge: Silicon Integrated Systems [SiS]: Unknown device 0961 |
34 | 00:02.1 SMBus: Silicon Integrated Systems [SiS]: Unknown device 0016 | 34 | 00:02.1 SMBus: Silicon Integrated Systems [SiS]: Unknown device 0016 |
35 | 35 | ||
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt index 84370363da80..ac75b57edf2e 100644 --- a/Documentation/kernel-parameters.txt +++ b/Documentation/kernel-parameters.txt | |||
@@ -1133,6 +1133,8 @@ running once the system is up. | |||
1133 | Mechanism 1. | 1133 | Mechanism 1. |
1134 | conf2 [IA-32] Force use of PCI Configuration | 1134 | conf2 [IA-32] Force use of PCI Configuration |
1135 | Mechanism 2. | 1135 | Mechanism 2. |
1136 | nommconf [IA-32,X86_64] Disable use of MMCONFIG for PCI | ||
1137 | Configuration | ||
1136 | nosort [IA-32] Don't sort PCI devices according to | 1138 | nosort [IA-32] Don't sort PCI devices according to |
1137 | order given by the PCI BIOS. This sorting is | 1139 | order given by the PCI BIOS. This sorting is |
1138 | done to get a device order compatible with | 1140 | done to get a device order compatible with |
diff --git a/Documentation/kprobes.txt b/Documentation/kprobes.txt index 0ea5a0c6e827..2c3b1eae4280 100644 --- a/Documentation/kprobes.txt +++ b/Documentation/kprobes.txt | |||
@@ -136,17 +136,20 @@ Kprobes, jprobes, and return probes are implemented on the following | |||
136 | architectures: | 136 | architectures: |
137 | 137 | ||
138 | - i386 | 138 | - i386 |
139 | - x86_64 (AMD-64, E64MT) | 139 | - x86_64 (AMD-64, EM64T) |
140 | - ppc64 | 140 | - ppc64 |
141 | - ia64 (Support for probes on certain instruction types is still in progress.) | 141 | - ia64 (Does not support probes on instruction slot1.) |
142 | - sparc64 (Return probes not yet implemented.) | 142 | - sparc64 (Return probes not yet implemented.) |
143 | 143 | ||
144 | 3. Configuring Kprobes | 144 | 3. Configuring Kprobes |
145 | 145 | ||
146 | When configuring the kernel using make menuconfig/xconfig/oldconfig, | 146 | When configuring the kernel using make menuconfig/xconfig/oldconfig, |
147 | ensure that CONFIG_KPROBES is set to "y". Under "Kernel hacking", | 147 | ensure that CONFIG_KPROBES is set to "y". Under "Instrumentation |
148 | look for "Kprobes". You may have to enable "Kernel debugging" | 148 | Support", look for "Kprobes". |
149 | (CONFIG_DEBUG_KERNEL) before you can enable Kprobes. | 149 | |
150 | So that you can load and unload Kprobes-based instrumentation modules, | ||
151 | make sure "Loadable module support" (CONFIG_MODULES) and "Module | ||
152 | unloading" (CONFIG_MODULE_UNLOAD) are set to "y". | ||
150 | 153 | ||
151 | You may also want to ensure that CONFIG_KALLSYMS and perhaps even | 154 | You may also want to ensure that CONFIG_KALLSYMS and perhaps even |
152 | CONFIG_KALLSYMS_ALL are set to "y", since kallsyms_lookup_name() | 155 | CONFIG_KALLSYMS_ALL are set to "y", since kallsyms_lookup_name() |
@@ -262,18 +265,18 @@ at any time after the probe has been registered. | |||
262 | 265 | ||
263 | 5. Kprobes Features and Limitations | 266 | 5. Kprobes Features and Limitations |
264 | 267 | ||
265 | As of Linux v2.6.12, Kprobes allows multiple probes at the same | 268 | Kprobes allows multiple probes at the same address. Currently, |
266 | address. Currently, however, there cannot be multiple jprobes on | 269 | however, there cannot be multiple jprobes on the same function at |
267 | the same function at the same time. | 270 | the same time. |
268 | 271 | ||
269 | In general, you can install a probe anywhere in the kernel. | 272 | In general, you can install a probe anywhere in the kernel. |
270 | In particular, you can probe interrupt handlers. Known exceptions | 273 | In particular, you can probe interrupt handlers. Known exceptions |
271 | are discussed in this section. | 274 | are discussed in this section. |
272 | 275 | ||
273 | For obvious reasons, it's a bad idea to install a probe in | 276 | The register_*probe functions will return -EINVAL if you attempt |
274 | the code that implements Kprobes (mostly kernel/kprobes.c and | 277 | to install a probe in the code that implements Kprobes (mostly |
275 | arch/*/kernel/kprobes.c). A patch in the v2.6.13 timeframe instructs | 278 | kernel/kprobes.c and arch/*/kernel/kprobes.c, but also functions such |
276 | Kprobes to reject such requests. | 279 | as do_page_fault and notifier_call_chain). |
277 | 280 | ||
278 | If you install a probe in an inline-able function, Kprobes makes | 281 | If you install a probe in an inline-able function, Kprobes makes |
279 | no attempt to chase down all inline instances of the function and | 282 | no attempt to chase down all inline instances of the function and |
@@ -290,18 +293,14 @@ from the accidental ones. Don't drink and probe. | |||
290 | 293 | ||
291 | Kprobes makes no attempt to prevent probe handlers from stepping on | 294 | Kprobes makes no attempt to prevent probe handlers from stepping on |
292 | each other -- e.g., probing printk() and then calling printk() from a | 295 | each other -- e.g., probing printk() and then calling printk() from a |
293 | probe handler. As of Linux v2.6.12, if a probe handler hits a probe, | 296 | probe handler. If a probe handler hits a probe, that second probe's |
294 | that second probe's handlers won't be run in that instance. | 297 | handlers won't be run in that instance, and the kprobe.nmissed member |
295 | 298 | of the second probe will be incremented. | |
296 | In Linux v2.6.12 and previous versions, Kprobes' data structures are | 299 | |
297 | protected by a single lock that is held during probe registration and | 300 | As of Linux v2.6.15-rc1, multiple handlers (or multiple instances of |
298 | unregistration and while handlers are run. Thus, no two handlers | 301 | the same handler) may run concurrently on different CPUs. |
299 | can run simultaneously. To improve scalability on SMP systems, | 302 | |
300 | this restriction will probably be removed soon, in which case | 303 | Kprobes does not use mutexes or allocate memory except during |
301 | multiple handlers (or multiple instances of the same handler) may | ||
302 | run concurrently on different CPUs. Code your handlers accordingly. | ||
303 | |||
304 | Kprobes does not use semaphores or allocate memory except during | ||
305 | registration and unregistration. | 304 | registration and unregistration. |
306 | 305 | ||
307 | Probe handlers are run with preemption disabled. Depending on the | 306 | Probe handlers are run with preemption disabled. Depending on the |
@@ -316,11 +315,18 @@ address instead of the real return address for kretprobed functions. | |||
316 | (As far as we can tell, __builtin_return_address() is used only | 315 | (As far as we can tell, __builtin_return_address() is used only |
317 | for instrumentation and error reporting.) | 316 | for instrumentation and error reporting.) |
318 | 317 | ||
319 | If the number of times a function is called does not match the | 318 | If the number of times a function is called does not match the number |
320 | number of times it returns, registering a return probe on that | 319 | of times it returns, registering a return probe on that function may |
321 | function may produce undesirable results. We have the do_exit() | 320 | produce undesirable results. We have the do_exit() case covered. |
322 | and do_execve() cases covered. do_fork() is not an issue. We're | 321 | do_execve() and do_fork() are not an issue. We're unaware of other |
323 | unaware of other specific cases where this could be a problem. | 322 | specific cases where this could be a problem. |
323 | |||
324 | If, upon entry to or exit from a function, the CPU is running on | ||
325 | a stack other than that of the current task, registering a return | ||
326 | probe on that function may produce undesirable results. For this | ||
327 | reason, Kprobes doesn't support return probes (or kprobes or jprobes) | ||
328 | on the x86_64 version of __switch_to(); the registration functions | ||
329 | return -EINVAL. | ||
324 | 330 | ||
325 | 6. Probe Overhead | 331 | 6. Probe Overhead |
326 | 332 | ||
@@ -347,14 +353,12 @@ k = 0.77 usec; j = 1.31; r = 1.26; kr = 1.45; jr = 1.99 | |||
347 | 353 | ||
348 | 7. TODO | 354 | 7. TODO |
349 | 355 | ||
350 | a. SystemTap (http://sourceware.org/systemtap): Work in progress | 356 | a. SystemTap (http://sourceware.org/systemtap): Provides a simplified |
351 | to provide a simplified programming interface for probe-based | 357 | programming interface for probe-based instrumentation. Try it out. |
352 | instrumentation. | 358 | b. Kernel return probes for sparc64. |
353 | b. Improved SMP scalability: Currently, work is in progress to handle | 359 | c. Support for other architectures. |
354 | multiple kprobes in parallel. | 360 | d. User-space probes. |
355 | c. Kernel return probes for sparc64. | 361 | e. Watchpoint probes (which fire on data references). |
356 | d. Support for other architectures. | ||
357 | e. User-space probes. | ||
358 | 362 | ||
359 | 8. Kprobes Example | 363 | 8. Kprobes Example |
360 | 364 | ||
@@ -411,8 +415,7 @@ int init_module(void) | |||
411 | printk("Couldn't find %s to plant kprobe\n", "do_fork"); | 415 | printk("Couldn't find %s to plant kprobe\n", "do_fork"); |
412 | return -1; | 416 | return -1; |
413 | } | 417 | } |
414 | ret = register_kprobe(&kp); | 418 | if ((ret = register_kprobe(&kp) < 0)) { |
415 | if (ret < 0) { | ||
416 | printk("register_kprobe failed, returned %d\n", ret); | 419 | printk("register_kprobe failed, returned %d\n", ret); |
417 | return -1; | 420 | return -1; |
418 | } | 421 | } |
diff --git a/Documentation/mips/AU1xxx_IDE.README b/Documentation/mips/AU1xxx_IDE.README index a7e4c4ea3560..afb31c141d9d 100644 --- a/Documentation/mips/AU1xxx_IDE.README +++ b/Documentation/mips/AU1xxx_IDE.README | |||
@@ -95,11 +95,13 @@ CONFIG_BLK_DEV_IDEDMA_PCI=y | |||
95 | CONFIG_IDEDMA_PCI_AUTO=y | 95 | CONFIG_IDEDMA_PCI_AUTO=y |
96 | CONFIG_BLK_DEV_IDE_AU1XXX=y | 96 | CONFIG_BLK_DEV_IDE_AU1XXX=y |
97 | CONFIG_BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA=y | 97 | CONFIG_BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA=y |
98 | CONFIG_BLK_DEV_IDE_AU1XXX_BURSTABLE_ON=y | ||
99 | CONFIG_BLK_DEV_IDE_AU1XXX_SEQTS_PER_RQ=128 | 98 | CONFIG_BLK_DEV_IDE_AU1XXX_SEQTS_PER_RQ=128 |
100 | CONFIG_BLK_DEV_IDEDMA=y | 99 | CONFIG_BLK_DEV_IDEDMA=y |
101 | CONFIG_IDEDMA_AUTO=y | 100 | CONFIG_IDEDMA_AUTO=y |
102 | 101 | ||
102 | Also define 'IDE_AU1XXX_BURSTMODE' in 'drivers/ide/mips/au1xxx-ide.c' to enable | ||
103 | the burst support on DBDMA controller. | ||
104 | |||
103 | If the used system need the USB support enable the following kernel configs for | 105 | If the used system need the USB support enable the following kernel configs for |
104 | high IDE to USB throughput. | 106 | high IDE to USB throughput. |
105 | 107 | ||
@@ -115,6 +117,8 @@ CONFIG_BLK_DEV_IDE_AU1XXX_SEQTS_PER_RQ=128 | |||
115 | CONFIG_BLK_DEV_IDEDMA=y | 117 | CONFIG_BLK_DEV_IDEDMA=y |
116 | CONFIG_IDEDMA_AUTO=y | 118 | CONFIG_IDEDMA_AUTO=y |
117 | 119 | ||
120 | Also undefine 'IDE_AU1XXX_BURSTMODE' in 'drivers/ide/mips/au1xxx-ide.c' to | ||
121 | disable the burst support on DBDMA controller. | ||
118 | 122 | ||
119 | ADD NEW HARD DISC TO WHITE OR BLACK LIST | 123 | ADD NEW HARD DISC TO WHITE OR BLACK LIST |
120 | ---------------------------------------- | 124 | ---------------------------------------- |
diff --git a/Documentation/powerpc/booting-without-of.txt b/Documentation/powerpc/booting-without-of.txt index 1284498e847c..d02c64953dcd 100644 --- a/Documentation/powerpc/booting-without-of.txt +++ b/Documentation/powerpc/booting-without-of.txt | |||
@@ -44,7 +44,6 @@ | |||
44 | compiler and the textural representation of | 44 | compiler and the textural representation of |
45 | the tree that can be "compiled" by dtc. | 45 | the tree that can be "compiled" by dtc. |
46 | 46 | ||
47 | |||
48 | November 21, 2005: Rev 0.5 | 47 | November 21, 2005: Rev 0.5 |
49 | - Additions/generalizations for 32-bit | 48 | - Additions/generalizations for 32-bit |
50 | - Changed to reflect the new arch/powerpc | 49 | - Changed to reflect the new arch/powerpc |
@@ -880,6 +879,10 @@ address which can extend beyond that limit. | |||
880 | - device_type : Should be "soc" | 879 | - device_type : Should be "soc" |
881 | - ranges : Should be defined as specified in 1) to describe the | 880 | - ranges : Should be defined as specified in 1) to describe the |
882 | translation of SOC addresses for memory mapped SOC registers. | 881 | translation of SOC addresses for memory mapped SOC registers. |
882 | - bus-frequency: Contains the bus frequency for the SOC node. | ||
883 | Typically, the value of this field is filled in by the boot | ||
884 | loader. | ||
885 | |||
883 | 886 | ||
884 | Recommended properties: | 887 | Recommended properties: |
885 | 888 | ||
@@ -919,6 +922,7 @@ SOC. | |||
919 | device_type = "soc"; | 922 | device_type = "soc"; |
920 | ranges = <00000000 e0000000 00100000> | 923 | ranges = <00000000 e0000000 00100000> |
921 | reg = <e0000000 00003000>; | 924 | reg = <e0000000 00003000>; |
925 | bus-frequency = <0>; | ||
922 | } | 926 | } |
923 | 927 | ||
924 | 928 | ||
@@ -1170,6 +1174,8 @@ platforms are moved over to use the flattened-device-tree model. | |||
1170 | 1174 | ||
1171 | mdio@24520 { | 1175 | mdio@24520 { |
1172 | reg = <24520 20>; | 1176 | reg = <24520 20>; |
1177 | device_type = "mdio"; | ||
1178 | compatible = "gianfar"; | ||
1173 | 1179 | ||
1174 | ethernet-phy@0 { | 1180 | ethernet-phy@0 { |
1175 | ...... | 1181 | ...... |
@@ -1300,6 +1306,65 @@ platforms are moved over to use the flattened-device-tree model. | |||
1300 | }; | 1306 | }; |
1301 | 1307 | ||
1302 | 1308 | ||
1309 | f) Freescale SOC USB controllers | ||
1310 | |||
1311 | The device node for a USB controller that is part of a Freescale | ||
1312 | SOC is as described in the document "Open Firmware Recommended | ||
1313 | Practice : Universal Serial Bus" with the following modifications | ||
1314 | and additions : | ||
1315 | |||
1316 | Required properties : | ||
1317 | - compatible : Should be "fsl-usb2-mph" for multi port host usb | ||
1318 | controllers, or "fsl-usb2-dr" for dual role usb controllers | ||
1319 | - phy_type : For multi port host usb controllers, should be one of | ||
1320 | "ulpi", or "serial". For dual role usb controllers, should be | ||
1321 | one of "ulpi", "utmi", "utmi_wide", or "serial". | ||
1322 | - reg : Offset and length of the register set for the device | ||
1323 | - port0 : boolean; if defined, indicates port0 is connected for | ||
1324 | fsl-usb2-mph compatible controllers. Either this property or | ||
1325 | "port1" (or both) must be defined for "fsl-usb2-mph" compatible | ||
1326 | controllers. | ||
1327 | - port1 : boolean; if defined, indicates port1 is connected for | ||
1328 | fsl-usb2-mph compatible controllers. Either this property or | ||
1329 | "port0" (or both) must be defined for "fsl-usb2-mph" compatible | ||
1330 | controllers. | ||
1331 | |||
1332 | Recommended properties : | ||
1333 | - interrupts : <a b> where a is the interrupt number and b is a | ||
1334 | field that represents an encoding of the sense and level | ||
1335 | information for the interrupt. This should be encoded based on | ||
1336 | the information in section 2) depending on the type of interrupt | ||
1337 | controller you have. | ||
1338 | - interrupt-parent : the phandle for the interrupt controller that | ||
1339 | services interrupts for this device. | ||
1340 | |||
1341 | Example multi port host usb controller device node : | ||
1342 | usb@22000 { | ||
1343 | device_type = "usb"; | ||
1344 | compatible = "fsl-usb2-mph"; | ||
1345 | reg = <22000 1000>; | ||
1346 | #address-cells = <1>; | ||
1347 | #size-cells = <0>; | ||
1348 | interrupt-parent = <700>; | ||
1349 | interrupts = <27 1>; | ||
1350 | phy_type = "ulpi"; | ||
1351 | port0; | ||
1352 | port1; | ||
1353 | }; | ||
1354 | |||
1355 | Example dual role usb controller device node : | ||
1356 | usb@23000 { | ||
1357 | device_type = "usb"; | ||
1358 | compatible = "fsl-usb2-dr"; | ||
1359 | reg = <23000 1000>; | ||
1360 | #address-cells = <1>; | ||
1361 | #size-cells = <0>; | ||
1362 | interrupt-parent = <700>; | ||
1363 | interrupts = <26 1>; | ||
1364 | phy = "ulpi"; | ||
1365 | }; | ||
1366 | |||
1367 | |||
1303 | More devices will be defined as this spec matures. | 1368 | More devices will be defined as this spec matures. |
1304 | 1369 | ||
1305 | 1370 | ||
@@ -1317,6 +1382,7 @@ not necessary as they are usually the same as the root node. | |||
1317 | device_type = "soc"; | 1382 | device_type = "soc"; |
1318 | ranges = <00000000 e0000000 00100000> | 1383 | ranges = <00000000 e0000000 00100000> |
1319 | reg = <e0000000 00003000>; | 1384 | reg = <e0000000 00003000>; |
1385 | bus-frequency = <0>; | ||
1320 | 1386 | ||
1321 | mdio@24520 { | 1387 | mdio@24520 { |
1322 | reg = <24520 20>; | 1388 | reg = <24520 20>; |
diff --git a/Documentation/spi/butterfly b/Documentation/spi/butterfly index a2e8c8d90e35..9927af7a629c 100644 --- a/Documentation/spi/butterfly +++ b/Documentation/spi/butterfly | |||
@@ -12,13 +12,20 @@ You can make this adapter from an old printer cable and solder things | |||
12 | directly to the Butterfly. Or (if you have the parts and skills) you | 12 | directly to the Butterfly. Or (if you have the parts and skills) you |
13 | can come up with something fancier, providing ciruit protection to the | 13 | can come up with something fancier, providing ciruit protection to the |
14 | Butterfly and the printer port, or with a better power supply than two | 14 | Butterfly and the printer port, or with a better power supply than two |
15 | signal pins from the printer port. | 15 | signal pins from the printer port. Or for that matter, you can use |
16 | similar cables to talk to many AVR boards, even a breadboard. | ||
17 | |||
18 | This is more powerful than "ISP programming" cables since it lets kernel | ||
19 | SPI protocol drivers interact with the AVR, and could even let the AVR | ||
20 | issue interrupts to them. Later, your protocol driver should work | ||
21 | easily with a "real SPI controller", instead of this bitbanger. | ||
16 | 22 | ||
17 | 23 | ||
18 | The first cable connections will hook Linux up to one SPI bus, with the | 24 | The first cable connections will hook Linux up to one SPI bus, with the |
19 | AVR and a DataFlash chip; and to the AVR reset line. This is all you | 25 | AVR and a DataFlash chip; and to the AVR reset line. This is all you |
20 | need to reflash the firmware, and the pins are the standard Atmel "ISP" | 26 | need to reflash the firmware, and the pins are the standard Atmel "ISP" |
21 | connector pins (used also on non-Butterfly AVR boards). | 27 | connector pins (used also on non-Butterfly AVR boards). On the parport |
28 | side this is like "sp12" programming cables. | ||
22 | 29 | ||
23 | Signal Butterfly Parport (DB-25) | 30 | Signal Butterfly Parport (DB-25) |
24 | ------ --------- --------------- | 31 | ------ --------- --------------- |
@@ -40,10 +47,14 @@ by clearing PORTB.[0-3]); (b) configure the mtd_dataflash driver; and | |||
40 | SELECT = J400.PB0/nSS = pin 17/C3,nSELECT | 47 | SELECT = J400.PB0/nSS = pin 17/C3,nSELECT |
41 | GND = J400.GND = pin 24/GND | 48 | GND = J400.GND = pin 24/GND |
42 | 49 | ||
43 | The "USI" controller, using J405, can be used for a second SPI bus. That | 50 | Or you could flash firmware making the AVR into an SPI slave (keeping the |
44 | would let you talk to the AVR over SPI, running firmware that makes it act | 51 | DataFlash in reset) and tweak the spi_butterfly driver to make it bind to |
45 | as an SPI slave, while letting either Linux or the AVR use the DataFlash. | 52 | the driver for your custom SPI-based protocol. |
46 | There are plenty of spare parport pins to wire this one up, such as: | 53 | |
54 | The "USI" controller, using J405, can also be used for a second SPI bus. | ||
55 | That would let you talk to the AVR using custom SPI-with-USI firmware, | ||
56 | while letting either Linux or the AVR use the DataFlash. There are plenty | ||
57 | of spare parport pins to wire this one up, such as: | ||
47 | 58 | ||
48 | Signal Butterfly Parport (DB-25) | 59 | Signal Butterfly Parport (DB-25) |
49 | ------ --------- --------------- | 60 | ------ --------- --------------- |
diff --git a/Documentation/unshare.txt b/Documentation/unshare.txt new file mode 100644 index 000000000000..90a5e9e5bef1 --- /dev/null +++ b/Documentation/unshare.txt | |||
@@ -0,0 +1,295 @@ | |||
1 | |||
2 | unshare system call: | ||
3 | -------------------- | ||
4 | This document describes the new system call, unshare. The document | ||
5 | provides an overview of the feature, why it is needed, how it can | ||
6 | be used, its interface specification, design, implementation and | ||
7 | how it can be tested. | ||
8 | |||
9 | Change Log: | ||
10 | ----------- | ||
11 | version 0.1 Initial document, Janak Desai (janak@us.ibm.com), Jan 11, 2006 | ||
12 | |||
13 | Contents: | ||
14 | --------- | ||
15 | 1) Overview | ||
16 | 2) Benefits | ||
17 | 3) Cost | ||
18 | 4) Requirements | ||
19 | 5) Functional Specification | ||
20 | 6) High Level Design | ||
21 | 7) Low Level Design | ||
22 | 8) Test Specification | ||
23 | 9) Future Work | ||
24 | |||
25 | 1) Overview | ||
26 | ----------- | ||
27 | Most legacy operating system kernels support an abstraction of threads | ||
28 | as multiple execution contexts within a process. These kernels provide | ||
29 | special resources and mechanisms to maintain these "threads". The Linux | ||
30 | kernel, in a clever and simple manner, does not make distinction | ||
31 | between processes and "threads". The kernel allows processes to share | ||
32 | resources and thus they can achieve legacy "threads" behavior without | ||
33 | requiring additional data structures and mechanisms in the kernel. The | ||
34 | power of implementing threads in this manner comes not only from | ||
35 | its simplicity but also from allowing application programmers to work | ||
36 | outside the confinement of all-or-nothing shared resources of legacy | ||
37 | threads. On Linux, at the time of thread creation using the clone system | ||
38 | call, applications can selectively choose which resources to share | ||
39 | between threads. | ||
40 | |||
41 | unshare system call adds a primitive to the Linux thread model that | ||
42 | allows threads to selectively 'unshare' any resources that were being | ||
43 | shared at the time of their creation. unshare was conceptualized by | ||
44 | Al Viro in the August of 2000, on the Linux-Kernel mailing list, as part | ||
45 | of the discussion on POSIX threads on Linux. unshare augments the | ||
46 | usefulness of Linux threads for applications that would like to control | ||
47 | shared resources without creating a new process. unshare is a natural | ||
48 | addition to the set of available primitives on Linux that implement | ||
49 | the concept of process/thread as a virtual machine. | ||
50 | |||
51 | 2) Benefits | ||
52 | ----------- | ||
53 | unshare would be useful to large application frameworks such as PAM | ||
54 | where creating a new process to control sharing/unsharing of process | ||
55 | resources is not possible. Since namespaces are shared by default | ||
56 | when creating a new process using fork or clone, unshare can benefit | ||
57 | even non-threaded applications if they have a need to disassociate | ||
58 | from default shared namespace. The following lists two use-cases | ||
59 | where unshare can be used. | ||
60 | |||
61 | 2.1 Per-security context namespaces | ||
62 | ----------------------------------- | ||
63 | unshare can be used to implement polyinstantiated directories using | ||
64 | the kernel's per-process namespace mechanism. Polyinstantiated directories, | ||
65 | such as per-user and/or per-security context instance of /tmp, /var/tmp or | ||
66 | per-security context instance of a user's home directory, isolate user | ||
67 | processes when working with these directories. Using unshare, a PAM | ||
68 | module can easily setup a private namespace for a user at login. | ||
69 | Polyinstantiated directories are required for Common Criteria certification | ||
70 | with Labeled System Protection Profile, however, with the availability | ||
71 | of shared-tree feature in the Linux kernel, even regular Linux systems | ||
72 | can benefit from setting up private namespaces at login and | ||
73 | polyinstantiating /tmp, /var/tmp and other directories deemed | ||
74 | appropriate by system administrators. | ||
75 | |||
76 | 2.2 unsharing of virtual memory and/or open files | ||
77 | ------------------------------------------------- | ||
78 | Consider a client/server application where the server is processing | ||
79 | client requests by creating processes that share resources such as | ||
80 | virtual memory and open files. Without unshare, the server has to | ||
81 | decide what needs to be shared at the time of creating the process | ||
82 | which services the request. unshare allows the server an ability to | ||
83 | disassociate parts of the context during the servicing of the | ||
84 | request. For large and complex middleware application frameworks, this | ||
85 | ability to unshare after the process was created can be very | ||
86 | useful. | ||
87 | |||
88 | 3) Cost | ||
89 | ------- | ||
90 | In order to not duplicate code and to handle the fact that unshare | ||
91 | works on an active task (as opposed to clone/fork working on a newly | ||
92 | allocated inactive task) unshare had to make minor reorganizational | ||
93 | changes to copy_* functions utilized by clone/fork system call. | ||
94 | There is a cost associated with altering existing, well tested and | ||
95 | stable code to implement a new feature that may not get exercised | ||
96 | extensively in the beginning. However, with proper design and code | ||
97 | review of the changes and creation of an unshare test for the LTP | ||
98 | the benefits of this new feature can exceed its cost. | ||
99 | |||
100 | 4) Requirements | ||
101 | --------------- | ||
102 | unshare reverses sharing that was done using clone(2) system call, | ||
103 | so unshare should have a similar interface as clone(2). That is, | ||
104 | since flags in clone(int flags, void *stack) specifies what should | ||
105 | be shared, similar flags in unshare(int flags) should specify | ||
106 | what should be unshared. Unfortunately, this may appear to invert | ||
107 | the meaning of the flags from the way they are used in clone(2). | ||
108 | However, there was no easy solution that was less confusing and that | ||
109 | allowed incremental context unsharing in future without an ABI change. | ||
110 | |||
111 | unshare interface should accommodate possible future addition of | ||
112 | new context flags without requiring a rebuild of old applications. | ||
113 | If and when new context flags are added, unshare design should allow | ||
114 | incremental unsharing of those resources on an as needed basis. | ||
115 | |||
116 | 5) Functional Specification | ||
117 | --------------------------- | ||
118 | NAME | ||
119 | unshare - disassociate parts of the process execution context | ||
120 | |||
121 | SYNOPSIS | ||
122 | #include <sched.h> | ||
123 | |||
124 | int unshare(int flags); | ||
125 | |||
126 | DESCRIPTION | ||
127 | unshare allows a process to disassociate parts of its execution | ||
128 | context that are currently being shared with other processes. Part | ||
129 | of execution context, such as the namespace, is shared by default | ||
130 | when a new process is created using fork(2), while other parts, | ||
131 | such as the virtual memory, open file descriptors, etc, may be | ||
132 | shared by explicit request to share them when creating a process | ||
133 | using clone(2). | ||
134 | |||
135 | The main use of unshare is to allow a process to control its | ||
136 | shared execution context without creating a new process. | ||
137 | |||
138 | The flags argument specifies one or bitwise-or'ed of several of | ||
139 | the following constants. | ||
140 | |||
141 | CLONE_FS | ||
142 | If CLONE_FS is set, file system information of the caller | ||
143 | is disassociated from the shared file system information. | ||
144 | |||
145 | CLONE_FILES | ||
146 | If CLONE_FILES is set, the file descriptor table of the | ||
147 | caller is disassociated from the shared file descriptor | ||
148 | table. | ||
149 | |||
150 | CLONE_NEWNS | ||
151 | If CLONE_NEWNS is set, the namespace of the caller is | ||
152 | disassociated from the shared namespace. | ||
153 | |||
154 | CLONE_VM | ||
155 | If CLONE_VM is set, the virtual memory of the caller is | ||
156 | disassociated from the shared virtual memory. | ||
157 | |||
158 | RETURN VALUE | ||
159 | On success, zero returned. On failure, -1 is returned and errno is | ||
160 | |||
161 | ERRORS | ||
162 | EPERM CLONE_NEWNS was specified by a non-root process (process | ||
163 | without CAP_SYS_ADMIN). | ||
164 | |||
165 | ENOMEM Cannot allocate sufficient memory to copy parts of caller's | ||
166 | context that need to be unshared. | ||
167 | |||
168 | EINVAL Invalid flag was specified as an argument. | ||
169 | |||
170 | CONFORMING TO | ||
171 | The unshare() call is Linux-specific and should not be used | ||
172 | in programs intended to be portable. | ||
173 | |||
174 | SEE ALSO | ||
175 | clone(2), fork(2) | ||
176 | |||
177 | 6) High Level Design | ||
178 | -------------------- | ||
179 | Depending on the flags argument, the unshare system call allocates | ||
180 | appropriate process context structures, populates it with values from | ||
181 | the current shared version, associates newly duplicated structures | ||
182 | with the current task structure and releases corresponding shared | ||
183 | versions. Helper functions of clone (copy_*) could not be used | ||
184 | directly by unshare because of the following two reasons. | ||
185 | 1) clone operates on a newly allocated not-yet-active task | ||
186 | structure, where as unshare operates on the current active | ||
187 | task. Therefore unshare has to take appropriate task_lock() | ||
188 | before associating newly duplicated context structures | ||
189 | 2) unshare has to allocate and duplicate all context structures | ||
190 | that are being unshared, before associating them with the | ||
191 | current task and releasing older shared structures. Failure | ||
192 | do so will create race conditions and/or oops when trying | ||
193 | to backout due to an error. Consider the case of unsharing | ||
194 | both virtual memory and namespace. After successfully unsharing | ||
195 | vm, if the system call encounters an error while allocating | ||
196 | new namespace structure, the error return code will have to | ||
197 | reverse the unsharing of vm. As part of the reversal the | ||
198 | system call will have to go back to older, shared, vm | ||
199 | structure, which may not exist anymore. | ||
200 | |||
201 | Therefore code from copy_* functions that allocated and duplicated | ||
202 | current context structure was moved into new dup_* functions. Now, | ||
203 | copy_* functions call dup_* functions to allocate and duplicate | ||
204 | appropriate context structures and then associate them with the | ||
205 | task structure that is being constructed. unshare system call on | ||
206 | the other hand performs the following: | ||
207 | 1) Check flags to force missing, but implied, flags | ||
208 | 2) For each context structure, call the corresponding unshare | ||
209 | helper function to allocate and duplicate a new context | ||
210 | structure, if the appropriate bit is set in the flags argument. | ||
211 | 3) If there is no error in allocation and duplication and there | ||
212 | are new context structures then lock the current task structure, | ||
213 | associate new context structures with the current task structure, | ||
214 | and release the lock on the current task structure. | ||
215 | 4) Appropriately release older, shared, context structures. | ||
216 | |||
217 | 7) Low Level Design | ||
218 | ------------------- | ||
219 | Implementation of unshare can be grouped in the following 4 different | ||
220 | items: | ||
221 | a) Reorganization of existing copy_* functions | ||
222 | b) unshare system call service function | ||
223 | c) unshare helper functions for each different process context | ||
224 | d) Registration of system call number for different architectures | ||
225 | |||
226 | 7.1) Reorganization of copy_* functions | ||
227 | Each copy function such as copy_mm, copy_namespace, copy_files, | ||
228 | etc, had roughly two components. The first component allocated | ||
229 | and duplicated the appropriate structure and the second component | ||
230 | linked it to the task structure passed in as an argument to the copy | ||
231 | function. The first component was split into its own function. | ||
232 | These dup_* functions allocated and duplicated the appropriate | ||
233 | context structure. The reorganized copy_* functions invoked | ||
234 | their corresponding dup_* functions and then linked the newly | ||
235 | duplicated structures to the task structure with which the | ||
236 | copy function was called. | ||
237 | |||
238 | 7.2) unshare system call service function | ||
239 | * Check flags | ||
240 | Force implied flags. If CLONE_THREAD is set force CLONE_VM. | ||
241 | If CLONE_VM is set, force CLONE_SIGHAND. If CLONE_SIGHAND is | ||
242 | set and signals are also being shared, force CLONE_THREAD. If | ||
243 | CLONE_NEWNS is set, force CLONE_FS. | ||
244 | * For each context flag, invoke the corresponding unshare_* | ||
245 | helper routine with flags passed into the system call and a | ||
246 | reference to pointer pointing the new unshared structure | ||
247 | * If any new structures are created by unshare_* helper | ||
248 | functions, take the task_lock() on the current task, | ||
249 | modify appropriate context pointers, and release the | ||
250 | task lock. | ||
251 | * For all newly unshared structures, release the corresponding | ||
252 | older, shared, structures. | ||
253 | |||
254 | 7.3) unshare_* helper functions | ||
255 | For unshare_* helpers corresponding to CLONE_SYSVSEM, CLONE_SIGHAND, | ||
256 | and CLONE_THREAD, return -EINVAL since they are not implemented yet. | ||
257 | For others, check the flag value to see if the unsharing is | ||
258 | required for that structure. If it is, invoke the corresponding | ||
259 | dup_* function to allocate and duplicate the structure and return | ||
260 | a pointer to it. | ||
261 | |||
262 | 7.4) Appropriately modify architecture specific code to register the | ||
263 | the new system call. | ||
264 | |||
265 | 8) Test Specification | ||
266 | --------------------- | ||
267 | The test for unshare should test the following: | ||
268 | 1) Valid flags: Test to check that clone flags for signal and | ||
269 | signal handlers, for which unsharing is not implemented | ||
270 | yet, return -EINVAL. | ||
271 | 2) Missing/implied flags: Test to make sure that if unsharing | ||
272 | namespace without specifying unsharing of filesystem, correctly | ||
273 | unshares both namespace and filesystem information. | ||
274 | 3) For each of the four (namespace, filesystem, files and vm) | ||
275 | supported unsharing, verify that the system call correctly | ||
276 | unshares the appropriate structure. Verify that unsharing | ||
277 | them individually as well as in combination with each | ||
278 | other works as expected. | ||
279 | 4) Concurrent execution: Use shared memory segments and futex on | ||
280 | an address in the shm segment to synchronize execution of | ||
281 | about 10 threads. Have a couple of threads execute execve, | ||
282 | a couple _exit and the rest unshare with different combination | ||
283 | of flags. Verify that unsharing is performed as expected and | ||
284 | that there are no oops or hangs. | ||
285 | |||
286 | 9) Future Work | ||
287 | -------------- | ||
288 | The current implementation of unshare does not allow unsharing of | ||
289 | signals and signal handlers. Signals are complex to begin with and | ||
290 | to unshare signals and/or signal handlers of a currently running | ||
291 | process is even more complex. If in the future there is a specific | ||
292 | need to allow unsharing of signals and/or signal handlers, it can | ||
293 | be incrementally added to unshare without affecting legacy | ||
294 | applications using unshare. | ||
295 | |||
diff --git a/Documentation/video4linux/CARDLIST.cx88 b/Documentation/video4linux/CARDLIST.cx88 index 56e194f1a0b0..8bea3fbd0548 100644 --- a/Documentation/video4linux/CARDLIST.cx88 +++ b/Documentation/video4linux/CARDLIST.cx88 | |||
@@ -42,4 +42,4 @@ | |||
42 | 41 -> Hauppauge WinTV-HVR1100 DVB-T/Hybrid (Low Profile) [0070:9800,0070:9802] | 42 | 41 -> Hauppauge WinTV-HVR1100 DVB-T/Hybrid (Low Profile) [0070:9800,0070:9802] |
43 | 42 -> digitalnow DNTV Live! DVB-T Pro [1822:0025] | 43 | 42 -> digitalnow DNTV Live! DVB-T Pro [1822:0025] |
44 | 43 -> KWorld/VStream XPert DVB-T with cx22702 [17de:08a1] | 44 | 43 -> KWorld/VStream XPert DVB-T with cx22702 [17de:08a1] |
45 | 44 -> DViCO FusionHDTV DVB-T Dual Digital [18ac:db50] | 45 | 44 -> DViCO FusionHDTV DVB-T Dual Digital [18ac:db50,18ac:db54] |
diff --git a/Documentation/video4linux/CARDLIST.saa7134 b/Documentation/video4linux/CARDLIST.saa7134 index cb3a59bbeb17..8a352597830f 100644 --- a/Documentation/video4linux/CARDLIST.saa7134 +++ b/Documentation/video4linux/CARDLIST.saa7134 | |||
@@ -1,7 +1,7 @@ | |||
1 | 0 -> UNKNOWN/GENERIC | 1 | 0 -> UNKNOWN/GENERIC |
2 | 1 -> Proteus Pro [philips reference design] [1131:2001,1131:2001] | 2 | 1 -> Proteus Pro [philips reference design] [1131:2001,1131:2001] |
3 | 2 -> LifeView FlyVIDEO3000 [5168:0138,4e42:0138] | 3 | 2 -> LifeView FlyVIDEO3000 [5168:0138,4e42:0138] |
4 | 3 -> LifeView FlyVIDEO2000 [5168:0138] | 4 | 3 -> LifeView/Typhoon FlyVIDEO2000 [5168:0138,4e42:0138] |
5 | 4 -> EMPRESS [1131:6752] | 5 | 4 -> EMPRESS [1131:6752] |
6 | 5 -> SKNet Monster TV [1131:4e85] | 6 | 5 -> SKNet Monster TV [1131:4e85] |
7 | 6 -> Tevion MD 9717 | 7 | 6 -> Tevion MD 9717 |
@@ -53,12 +53,12 @@ | |||
53 | 52 -> AverMedia AverTV/305 [1461:2108] | 53 | 52 -> AverMedia AverTV/305 [1461:2108] |
54 | 53 -> ASUS TV-FM 7135 [1043:4845] | 54 | 53 -> ASUS TV-FM 7135 [1043:4845] |
55 | 54 -> LifeView FlyTV Platinum FM [5168:0214,1489:0214] | 55 | 54 -> LifeView FlyTV Platinum FM [5168:0214,1489:0214] |
56 | 55 -> LifeView FlyDVB-T DUO [5168:0502,5168:0306] | 56 | 55 -> LifeView FlyDVB-T DUO [5168:0306] |
57 | 56 -> Avermedia AVerTV 307 [1461:a70a] | 57 | 56 -> Avermedia AVerTV 307 [1461:a70a] |
58 | 57 -> Avermedia AVerTV GO 007 FM [1461:f31f] | 58 | 57 -> Avermedia AVerTV GO 007 FM [1461:f31f] |
59 | 58 -> ADS Tech Instant TV (saa7135) [1421:0350,1421:0351,1421:0370,1421:1370] | 59 | 58 -> ADS Tech Instant TV (saa7135) [1421:0350,1421:0351,1421:0370,1421:1370] |
60 | 59 -> Kworld/Tevion V-Stream Xpert TV PVR7134 | 60 | 59 -> Kworld/Tevion V-Stream Xpert TV PVR7134 |
61 | 60 -> Typhoon DVB-T Duo Digital/Analog Cardbus [4e42:0502] | 61 | 60 -> LifeView/Typhoon FlyDVB-T Duo Cardbus [5168:0502,4e42:0502] |
62 | 61 -> Philips TOUGH DVB-T reference design [1131:2004] | 62 | 61 -> Philips TOUGH DVB-T reference design [1131:2004] |
63 | 62 -> Compro VideoMate TV Gold+II | 63 | 62 -> Compro VideoMate TV Gold+II |
64 | 63 -> Kworld Xpert TV PVR7134 | 64 | 63 -> Kworld Xpert TV PVR7134 |
diff --git a/Documentation/x86_64/boot-options.txt b/Documentation/x86_64/boot-options.txt index 9c5fc15d03d1..153740f460a6 100644 --- a/Documentation/x86_64/boot-options.txt +++ b/Documentation/x86_64/boot-options.txt | |||
@@ -40,6 +40,18 @@ APICs | |||
40 | no_timer_check Don't check the IO-APIC timer. This can work around | 40 | no_timer_check Don't check the IO-APIC timer. This can work around |
41 | problems with incorrect timer initialization on some boards. | 41 | problems with incorrect timer initialization on some boards. |
42 | 42 | ||
43 | apicmaintimer Run time keeping from the local APIC timer instead | ||
44 | of using the PIT/HPET interrupt for this. This is useful | ||
45 | when the PIT/HPET interrupts are unreliable. | ||
46 | |||
47 | noapicmaintimer Don't do time keeping using the APIC timer. | ||
48 | Useful when this option was auto selected, but doesn't work. | ||
49 | |||
50 | apicpmtimer | ||
51 | Do APIC timer calibration using the pmtimer. Implies | ||
52 | apicmaintimer. Useful when your PIT timer is totally | ||
53 | broken. | ||
54 | |||
43 | Early Console | 55 | Early Console |
44 | 56 | ||
45 | syntax: earlyprintk=vga | 57 | syntax: earlyprintk=vga |