diff options
Diffstat (limited to 'Documentation')
47 files changed, 2518 insertions, 236 deletions
diff --git a/Documentation/ABI/testing/debugfs-pktcdvd b/Documentation/ABI/testing/debugfs-pktcdvd index 03dbd883cc41..bf9c16b64c34 100644 --- a/Documentation/ABI/testing/debugfs-pktcdvd +++ b/Documentation/ABI/testing/debugfs-pktcdvd | |||
@@ -1,6 +1,6 @@ | |||
1 | What: /debug/pktcdvd/pktcdvd[0-7] | 1 | What: /debug/pktcdvd/pktcdvd[0-7] |
2 | Date: Oct. 2006 | 2 | Date: Oct. 2006 |
3 | KernelVersion: 2.6.19 | 3 | KernelVersion: 2.6.20 |
4 | Contact: Thomas Maier <balagi@justmail.de> | 4 | Contact: Thomas Maier <balagi@justmail.de> |
5 | Description: | 5 | Description: |
6 | 6 | ||
@@ -11,8 +11,7 @@ The pktcdvd module (packet writing driver) creates | |||
11 | these files in debugfs: | 11 | these files in debugfs: |
12 | 12 | ||
13 | /debug/pktcdvd/pktcdvd[0-7]/ | 13 | /debug/pktcdvd/pktcdvd[0-7]/ |
14 | info (0444) Lots of human readable driver | 14 | info (0444) Lots of driver statistics and infos. |
15 | statistics and infos. Multiple lines! | ||
16 | 15 | ||
17 | Example: | 16 | Example: |
18 | ------- | 17 | ------- |
diff --git a/Documentation/ABI/testing/sysfs-class-pktcdvd b/Documentation/ABI/testing/sysfs-class-pktcdvd index c4c55edc9a5c..b1c3f0263359 100644 --- a/Documentation/ABI/testing/sysfs-class-pktcdvd +++ b/Documentation/ABI/testing/sysfs-class-pktcdvd | |||
@@ -1,6 +1,6 @@ | |||
1 | What: /sys/class/pktcdvd/ | 1 | What: /sys/class/pktcdvd/ |
2 | Date: Oct. 2006 | 2 | Date: Oct. 2006 |
3 | KernelVersion: 2.6.19 | 3 | KernelVersion: 2.6.20 |
4 | Contact: Thomas Maier <balagi@justmail.de> | 4 | Contact: Thomas Maier <balagi@justmail.de> |
5 | Description: | 5 | Description: |
6 | 6 | ||
diff --git a/Documentation/DocBook/gadget.tmpl b/Documentation/DocBook/gadget.tmpl index a34442436128..e7fc96433408 100644 --- a/Documentation/DocBook/gadget.tmpl +++ b/Documentation/DocBook/gadget.tmpl | |||
@@ -482,13 +482,13 @@ slightly. | |||
482 | <para>Gadget drivers | 482 | <para>Gadget drivers |
483 | rely on common USB structures and constants | 483 | rely on common USB structures and constants |
484 | defined in the | 484 | defined in the |
485 | <filename><linux/usb_ch9.h></filename> | 485 | <filename><linux/usb/ch9.h></filename> |
486 | header file, which is standard in Linux 2.6 kernels. | 486 | header file, which is standard in Linux 2.6 kernels. |
487 | These are the same types and constants used by host | 487 | These are the same types and constants used by host |
488 | side drivers (and usbcore). | 488 | side drivers (and usbcore). |
489 | </para> | 489 | </para> |
490 | 490 | ||
491 | !Iinclude/linux/usb_ch9.h | 491 | !Iinclude/linux/usb/ch9.h |
492 | </sect1> | 492 | </sect1> |
493 | 493 | ||
494 | <sect1 id="core"><title>Core Objects and Methods</title> | 494 | <sect1 id="core"><title>Core Objects and Methods</title> |
diff --git a/Documentation/DocBook/kernel-api.tmpl b/Documentation/DocBook/kernel-api.tmpl index 3fa0c4b4541e..0bb90237e230 100644 --- a/Documentation/DocBook/kernel-api.tmpl +++ b/Documentation/DocBook/kernel-api.tmpl | |||
@@ -316,6 +316,9 @@ X!Earch/i386/kernel/mca.c | |||
316 | <sect1><title>DMI Interfaces</title> | 316 | <sect1><title>DMI Interfaces</title> |
317 | !Edrivers/firmware/dmi_scan.c | 317 | !Edrivers/firmware/dmi_scan.c |
318 | </sect1> | 318 | </sect1> |
319 | <sect1><title>EDD Interfaces</title> | ||
320 | !Idrivers/firmware/edd.c | ||
321 | </sect1> | ||
319 | </chapter> | 322 | </chapter> |
320 | 323 | ||
321 | <chapter id="security"> | 324 | <chapter id="security"> |
diff --git a/Documentation/DocBook/stylesheet.xsl b/Documentation/DocBook/stylesheet.xsl index 3ccce886c349..974e17ccf106 100644 --- a/Documentation/DocBook/stylesheet.xsl +++ b/Documentation/DocBook/stylesheet.xsl | |||
@@ -4,4 +4,5 @@ | |||
4 | <param name="funcsynopsis.style">ansi</param> | 4 | <param name="funcsynopsis.style">ansi</param> |
5 | <param name="funcsynopsis.tabular.threshold">80</param> | 5 | <param name="funcsynopsis.tabular.threshold">80</param> |
6 | <!-- <param name="paper.type">A4</param> --> | 6 | <!-- <param name="paper.type">A4</param> --> |
7 | <param name="generate.section.toc.level">2</param> | ||
7 | </stylesheet> | 8 | </stylesheet> |
diff --git a/Documentation/DocBook/usb.tmpl b/Documentation/DocBook/usb.tmpl index 143e5ff7deb8..a2ebd651b05a 100644 --- a/Documentation/DocBook/usb.tmpl +++ b/Documentation/DocBook/usb.tmpl | |||
@@ -187,13 +187,13 @@ | |||
187 | 187 | ||
188 | <chapter><title>USB-Standard Types</title> | 188 | <chapter><title>USB-Standard Types</title> |
189 | 189 | ||
190 | <para>In <filename><linux/usb_ch9.h></filename> you will find | 190 | <para>In <filename><linux/usb/ch9.h></filename> you will find |
191 | the USB data types defined in chapter 9 of the USB specification. | 191 | the USB data types defined in chapter 9 of the USB specification. |
192 | These data types are used throughout USB, and in APIs including | 192 | These data types are used throughout USB, and in APIs including |
193 | this host side API, gadget APIs, and usbfs. | 193 | this host side API, gadget APIs, and usbfs. |
194 | </para> | 194 | </para> |
195 | 195 | ||
196 | !Iinclude/linux/usb_ch9.h | 196 | !Iinclude/linux/usb/ch9.h |
197 | 197 | ||
198 | </chapter> | 198 | </chapter> |
199 | 199 | ||
@@ -574,7 +574,7 @@ for (;;) { | |||
574 | #include <asm/byteorder.h></programlisting> | 574 | #include <asm/byteorder.h></programlisting> |
575 | The standard USB device model requests, from "Chapter 9" of | 575 | The standard USB device model requests, from "Chapter 9" of |
576 | the USB 2.0 specification, are automatically included from | 576 | the USB 2.0 specification, are automatically included from |
577 | the <filename><linux/usb_ch9.h></filename> header. | 577 | the <filename><linux/usb/ch9.h></filename> header. |
578 | </para> | 578 | </para> |
579 | 579 | ||
580 | <para>Unless noted otherwise, the ioctl requests | 580 | <para>Unless noted otherwise, the ioctl requests |
diff --git a/Documentation/auxdisplay/cfag12864b b/Documentation/auxdisplay/cfag12864b new file mode 100644 index 000000000000..3572b98f45b8 --- /dev/null +++ b/Documentation/auxdisplay/cfag12864b | |||
@@ -0,0 +1,105 @@ | |||
1 | =================================== | ||
2 | cfag12864b LCD Driver Documentation | ||
3 | =================================== | ||
4 | |||
5 | License: GPLv2 | ||
6 | Author & Maintainer: Miguel Ojeda Sandonis <maxextreme@gmail.com> | ||
7 | Date: 2006-10-27 | ||
8 | |||
9 | |||
10 | |||
11 | -------- | ||
12 | 0. INDEX | ||
13 | -------- | ||
14 | |||
15 | 1. DRIVER INFORMATION | ||
16 | 2. DEVICE INFORMATION | ||
17 | 3. WIRING | ||
18 | 4. USERSPACE PROGRAMMING | ||
19 | |||
20 | |||
21 | --------------------- | ||
22 | 1. DRIVER INFORMATION | ||
23 | --------------------- | ||
24 | |||
25 | This driver support one cfag12864b display at time. | ||
26 | |||
27 | |||
28 | --------------------- | ||
29 | 2. DEVICE INFORMATION | ||
30 | --------------------- | ||
31 | |||
32 | Manufacturer: Crystalfontz | ||
33 | Device Name: Crystalfontz 12864b LCD Series | ||
34 | Device Code: cfag12864b | ||
35 | Webpage: http://www.crystalfontz.com | ||
36 | Device Webpage: http://www.crystalfontz.com/products/12864b/ | ||
37 | Type: LCD (Liquid Crystal Display) | ||
38 | Width: 128 | ||
39 | Height: 64 | ||
40 | Colors: 2 (B/N) | ||
41 | Controller: ks0108 | ||
42 | Controllers: 2 | ||
43 | Pages: 8 each controller | ||
44 | Addresses: 64 each page | ||
45 | Data size: 1 byte each address | ||
46 | Memory size: 2 * 8 * 64 * 1 = 1024 bytes = 1 Kbyte | ||
47 | |||
48 | |||
49 | --------- | ||
50 | 3. WIRING | ||
51 | --------- | ||
52 | |||
53 | The cfag12864b LCD Series don't have official wiring. | ||
54 | |||
55 | The common wiring is done to the parallel port as shown: | ||
56 | |||
57 | Parallel Port cfag12864b | ||
58 | |||
59 | Name Pin# Pin# Name | ||
60 | |||
61 | Strobe ( 1)------------------------------(17) Enable | ||
62 | Data 0 ( 2)------------------------------( 4) Data 0 | ||
63 | Data 1 ( 3)------------------------------( 5) Data 1 | ||
64 | Data 2 ( 4)------------------------------( 6) Data 2 | ||
65 | Data 3 ( 5)------------------------------( 7) Data 3 | ||
66 | Data 4 ( 6)------------------------------( 8) Data 4 | ||
67 | Data 5 ( 7)------------------------------( 9) Data 5 | ||
68 | Data 6 ( 8)------------------------------(10) Data 6 | ||
69 | Data 7 ( 9)------------------------------(11) Data 7 | ||
70 | (10) [+5v]---( 1) Vdd | ||
71 | (11) [GND]---( 2) Ground | ||
72 | (12) [+5v]---(14) Reset | ||
73 | (13) [GND]---(15) Read / Write | ||
74 | Line (14)------------------------------(13) Controller Select 1 | ||
75 | (15) | ||
76 | Init (16)------------------------------(12) Controller Select 2 | ||
77 | Select (17)------------------------------(16) Data / Instruction | ||
78 | Ground (18)---[GND] [+5v]---(19) LED + | ||
79 | Ground (19)---[GND] | ||
80 | Ground (20)---[GND] E A Values: | ||
81 | Ground (21)---[GND] [GND]---[P1]---(18) Vee · R = Resistor = 22 ohm | ||
82 | Ground (22)---[GND] | · P1 = Preset = 10 Kohm | ||
83 | Ground (23)---[GND] ---- S ------( 3) V0 · P2 = Preset = 1 Kohm | ||
84 | Ground (24)---[GND] | | | ||
85 | Ground (25)---[GND] [GND]---[P2]---[R]---(20) LED - | ||
86 | |||
87 | |||
88 | ------------------------ | ||
89 | 4. USERSPACE PROGRAMMING | ||
90 | ------------------------ | ||
91 | |||
92 | The cfag12864bfb describes a framebuffer device (/dev/fbX). | ||
93 | |||
94 | It has a size of 1024 bytes = 1 Kbyte. | ||
95 | Each bit represents one pixel. If the bit is high, the pixel will | ||
96 | turn on. If the pixel is low, the pixel will turn off. | ||
97 | |||
98 | You can use the framebuffer as a file: fopen, fwrite, fclose... | ||
99 | Although the LCD won't get updated until the next refresh time arrives. | ||
100 | |||
101 | Also, you can mmap the framebuffer: open & mmap, munmap & close... | ||
102 | which is the best option for most uses. | ||
103 | |||
104 | Check Documentation/auxdisplay/cfag12864b-example.c | ||
105 | for a real working userspace complete program with usage examples. | ||
diff --git a/Documentation/auxdisplay/cfag12864b-example.c b/Documentation/auxdisplay/cfag12864b-example.c new file mode 100644 index 000000000000..7bfac354d4c9 --- /dev/null +++ b/Documentation/auxdisplay/cfag12864b-example.c | |||
@@ -0,0 +1,282 @@ | |||
1 | /* | ||
2 | * Filename: cfag12864b-example.c | ||
3 | * Version: 0.1.0 | ||
4 | * Description: cfag12864b LCD userspace example program | ||
5 | * License: GPLv2 | ||
6 | * | ||
7 | * Author: Copyright (C) Miguel Ojeda Sandonis <maxextreme@gmail.com> | ||
8 | * Date: 2006-10-31 | ||
9 | * | ||
10 | * This program is free software; you can redistribute it and/or modify | ||
11 | * it under the terms of the GNU General Public License version 2 as | ||
12 | * published by the Free Software Foundation. | ||
13 | * | ||
14 | * This program is distributed in the hope that it will be useful, | ||
15 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
17 | * GNU General Public License for more details. | ||
18 | * | ||
19 | * You should have received a copy of the GNU General Public License | ||
20 | * along with this program; if not, write to the Free Software | ||
21 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
22 | * | ||
23 | */ | ||
24 | |||
25 | /* | ||
26 | * ------------------------ | ||
27 | * start of cfag12864b code | ||
28 | * ------------------------ | ||
29 | */ | ||
30 | |||
31 | #include <string.h> | ||
32 | #include <fcntl.h> | ||
33 | #include <unistd.h> | ||
34 | #include <sys/types.h> | ||
35 | #include <sys/stat.h> | ||
36 | #include <sys/mman.h> | ||
37 | |||
38 | #define CFAG12864B_WIDTH (128) | ||
39 | #define CFAG12864B_HEIGHT (64) | ||
40 | #define CFAG12864B_SIZE (128 * 64 / 8) | ||
41 | #define CFAG12864B_BPB (8) | ||
42 | #define CFAG12864B_ADDRESS(x, y) ((y) * CFAG12864B_WIDTH / \ | ||
43 | CFAG12864B_BPB + (x) / CFAG12864B_BPB) | ||
44 | #define CFAG12864B_BIT(n) (((unsigned char) 1) << (n)) | ||
45 | |||
46 | #undef CFAG12864B_DOCHECK | ||
47 | #ifdef CFAG12864B_DOCHECK | ||
48 | #define CFAG12864B_CHECK(x, y) ((x) < CFAG12864B_WIDTH && \ | ||
49 | (y) < CFAG12864B_HEIGHT) | ||
50 | #else | ||
51 | #define CFAG12864B_CHECK(x, y) (1) | ||
52 | #endif | ||
53 | |||
54 | int cfag12864b_fd; | ||
55 | unsigned char * cfag12864b_mem; | ||
56 | unsigned char cfag12864b_buffer[CFAG12864B_SIZE]; | ||
57 | |||
58 | /* | ||
59 | * init a cfag12864b framebuffer device | ||
60 | * | ||
61 | * No error: return = 0 | ||
62 | * Unable to open: return = -1 | ||
63 | * Unable to mmap: return = -2 | ||
64 | */ | ||
65 | int cfag12864b_init(char *path) | ||
66 | { | ||
67 | cfag12864b_fd = open(path, O_RDWR); | ||
68 | if (cfag12864b_fd == -1) | ||
69 | return -1; | ||
70 | |||
71 | cfag12864b_mem = mmap(0, CFAG12864B_SIZE, PROT_READ | PROT_WRITE, | ||
72 | MAP_SHARED, cfag12864b_fd, 0); | ||
73 | if (cfag12864b_mem == MAP_FAILED) { | ||
74 | close(cfag12864b_fd); | ||
75 | return -2; | ||
76 | } | ||
77 | |||
78 | return 0; | ||
79 | } | ||
80 | |||
81 | /* | ||
82 | * exit a cfag12864b framebuffer device | ||
83 | */ | ||
84 | void cfag12864b_exit(void) | ||
85 | { | ||
86 | munmap(cfag12864b_mem, CFAG12864B_SIZE); | ||
87 | close(cfag12864b_fd); | ||
88 | } | ||
89 | |||
90 | /* | ||
91 | * set (x, y) pixel | ||
92 | */ | ||
93 | void cfag12864b_set(unsigned char x, unsigned char y) | ||
94 | { | ||
95 | if (CFAG12864B_CHECK(x, y)) | ||
96 | cfag12864b_buffer[CFAG12864B_ADDRESS(x, y)] |= | ||
97 | CFAG12864B_BIT(x % CFAG12864B_BPB); | ||
98 | } | ||
99 | |||
100 | /* | ||
101 | * unset (x, y) pixel | ||
102 | */ | ||
103 | void cfag12864b_unset(unsigned char x, unsigned char y) | ||
104 | { | ||
105 | if (CFAG12864B_CHECK(x, y)) | ||
106 | cfag12864b_buffer[CFAG12864B_ADDRESS(x, y)] &= | ||
107 | ~CFAG12864B_BIT(x % CFAG12864B_BPB); | ||
108 | } | ||
109 | |||
110 | /* | ||
111 | * is set (x, y) pixel? | ||
112 | * | ||
113 | * Pixel off: return = 0 | ||
114 | * Pixel on: return = 1 | ||
115 | */ | ||
116 | unsigned char cfag12864b_isset(unsigned char x, unsigned char y) | ||
117 | { | ||
118 | if (CFAG12864B_CHECK(x, y)) | ||
119 | if (cfag12864b_buffer[CFAG12864B_ADDRESS(x, y)] & | ||
120 | CFAG12864B_BIT(x % CFAG12864B_BPB)) | ||
121 | return 1; | ||
122 | |||
123 | return 0; | ||
124 | } | ||
125 | |||
126 | /* | ||
127 | * not (x, y) pixel | ||
128 | */ | ||
129 | void cfag12864b_not(unsigned char x, unsigned char y) | ||
130 | { | ||
131 | if (cfag12864b_isset(x, y)) | ||
132 | cfag12864b_unset(x, y); | ||
133 | else | ||
134 | cfag12864b_set(x, y); | ||
135 | } | ||
136 | |||
137 | /* | ||
138 | * fill (set all pixels) | ||
139 | */ | ||
140 | void cfag12864b_fill(void) | ||
141 | { | ||
142 | unsigned short i; | ||
143 | |||
144 | for (i = 0; i < CFAG12864B_SIZE; i++) | ||
145 | cfag12864b_buffer[i] = 0xFF; | ||
146 | } | ||
147 | |||
148 | /* | ||
149 | * clear (unset all pixels) | ||
150 | */ | ||
151 | void cfag12864b_clear(void) | ||
152 | { | ||
153 | unsigned short i; | ||
154 | |||
155 | for (i = 0; i < CFAG12864B_SIZE; i++) | ||
156 | cfag12864b_buffer[i] = 0; | ||
157 | } | ||
158 | |||
159 | /* | ||
160 | * format a [128*64] matrix | ||
161 | * | ||
162 | * Pixel off: src[i] = 0 | ||
163 | * Pixel on: src[i] > 0 | ||
164 | */ | ||
165 | void cfag12864b_format(unsigned char * matrix) | ||
166 | { | ||
167 | unsigned char i, j, n; | ||
168 | |||
169 | for (i = 0; i < CFAG12864B_HEIGHT; i++) | ||
170 | for (j = 0; j < CFAG12864B_WIDTH / CFAG12864B_BPB; j++) { | ||
171 | cfag12864b_buffer[i * CFAG12864B_WIDTH / CFAG12864B_BPB + | ||
172 | j] = 0; | ||
173 | for (n = 0; n < CFAG12864B_BPB; n++) | ||
174 | if (matrix[i * CFAG12864B_WIDTH + | ||
175 | j * CFAG12864B_BPB + n]) | ||
176 | cfag12864b_buffer[i * CFAG12864B_WIDTH / | ||
177 | CFAG12864B_BPB + j] |= | ||
178 | CFAG12864B_BIT(n); | ||
179 | } | ||
180 | } | ||
181 | |||
182 | /* | ||
183 | * blit buffer to lcd | ||
184 | */ | ||
185 | void cfag12864b_blit(void) | ||
186 | { | ||
187 | memcpy(cfag12864b_mem, cfag12864b_buffer, CFAG12864B_SIZE); | ||
188 | } | ||
189 | |||
190 | /* | ||
191 | * ---------------------- | ||
192 | * end of cfag12864b code | ||
193 | * ---------------------- | ||
194 | */ | ||
195 | |||
196 | #include <stdio.h> | ||
197 | #include <string.h> | ||
198 | |||
199 | #define EXAMPLES 6 | ||
200 | |||
201 | void example(unsigned char n) | ||
202 | { | ||
203 | unsigned short i, j; | ||
204 | unsigned char matrix[CFAG12864B_WIDTH * CFAG12864B_HEIGHT]; | ||
205 | |||
206 | if (n > EXAMPLES) | ||
207 | return; | ||
208 | |||
209 | printf("Example %i/%i - ", n, EXAMPLES); | ||
210 | |||
211 | switch (n) { | ||
212 | case 1: | ||
213 | printf("Draw points setting bits"); | ||
214 | cfag12864b_clear(); | ||
215 | for (i = 0; i < CFAG12864B_WIDTH; i += 2) | ||
216 | for (j = 0; j < CFAG12864B_HEIGHT; j += 2) | ||
217 | cfag12864b_set(i, j); | ||
218 | break; | ||
219 | |||
220 | case 2: | ||
221 | printf("Clear the LCD"); | ||
222 | cfag12864b_clear(); | ||
223 | break; | ||
224 | |||
225 | case 3: | ||
226 | printf("Draw rows formatting a [128*64] matrix"); | ||
227 | memset(matrix, 0, CFAG12864B_WIDTH * CFAG12864B_HEIGHT); | ||
228 | for (i = 0; i < CFAG12864B_WIDTH; i++) | ||
229 | for (j = 0; j < CFAG12864B_HEIGHT; j += 2) | ||
230 | matrix[j * CFAG12864B_WIDTH + i] = 1; | ||
231 | cfag12864b_format(matrix); | ||
232 | break; | ||
233 | |||
234 | case 4: | ||
235 | printf("Fill the lcd"); | ||
236 | cfag12864b_fill(); | ||
237 | break; | ||
238 | |||
239 | case 5: | ||
240 | printf("Draw columns unsetting bits"); | ||
241 | for (i = 0; i < CFAG12864B_WIDTH; i += 2) | ||
242 | for (j = 0; j < CFAG12864B_HEIGHT; j++) | ||
243 | cfag12864b_unset(i, j); | ||
244 | break; | ||
245 | |||
246 | case 6: | ||
247 | printf("Do negative not-ing all bits"); | ||
248 | for (i = 0; i < CFAG12864B_WIDTH; i++) | ||
249 | for (j = 0; j < CFAG12864B_HEIGHT; j ++) | ||
250 | cfag12864b_not(i, j); | ||
251 | break; | ||
252 | } | ||
253 | |||
254 | puts(" - [Press Enter]"); | ||
255 | } | ||
256 | |||
257 | int main(int argc, char *argv[]) | ||
258 | { | ||
259 | unsigned char n; | ||
260 | |||
261 | if (argc != 2) { | ||
262 | printf( | ||
263 | "Sintax: %s fbdev\n" | ||
264 | "Usually: /dev/fb0, /dev/fb1...\n", argv[0]); | ||
265 | return -1; | ||
266 | } | ||
267 | |||
268 | if (cfag12864b_init(argv[1])) { | ||
269 | printf("Can't init %s fbdev\n", argv[1]); | ||
270 | return -2; | ||
271 | } | ||
272 | |||
273 | for (n = 1; n <= EXAMPLES; n++) { | ||
274 | example(n); | ||
275 | cfag12864b_blit(); | ||
276 | while (getchar() != '\n'); | ||
277 | } | ||
278 | |||
279 | cfag12864b_exit(); | ||
280 | |||
281 | return 0; | ||
282 | } | ||
diff --git a/Documentation/auxdisplay/ks0108 b/Documentation/auxdisplay/ks0108 new file mode 100644 index 000000000000..92b03b60c613 --- /dev/null +++ b/Documentation/auxdisplay/ks0108 | |||
@@ -0,0 +1,55 @@ | |||
1 | ========================================== | ||
2 | ks0108 LCD Controller Driver Documentation | ||
3 | ========================================== | ||
4 | |||
5 | License: GPLv2 | ||
6 | Author & Maintainer: Miguel Ojeda Sandonis <maxextreme@gmail.com> | ||
7 | Date: 2006-10-27 | ||
8 | |||
9 | |||
10 | |||
11 | -------- | ||
12 | 0. INDEX | ||
13 | -------- | ||
14 | |||
15 | 1. DRIVER INFORMATION | ||
16 | 2. DEVICE INFORMATION | ||
17 | 3. WIRING | ||
18 | |||
19 | |||
20 | --------------------- | ||
21 | 1. DRIVER INFORMATION | ||
22 | --------------------- | ||
23 | |||
24 | This driver support the ks0108 LCD controller. | ||
25 | |||
26 | |||
27 | --------------------- | ||
28 | 2. DEVICE INFORMATION | ||
29 | --------------------- | ||
30 | |||
31 | Manufacturer: Samsung | ||
32 | Device Name: KS0108 LCD Controller | ||
33 | Device Code: ks0108 | ||
34 | Webpage: - | ||
35 | Device Webpage: - | ||
36 | Type: LCD Controller (Liquid Crystal Display Controller) | ||
37 | Width: 64 | ||
38 | Height: 64 | ||
39 | Colors: 2 (B/N) | ||
40 | Pages: 8 | ||
41 | Addresses: 64 each page | ||
42 | Data size: 1 byte each address | ||
43 | Memory size: 8 * 64 * 1 = 512 bytes | ||
44 | |||
45 | |||
46 | --------- | ||
47 | 3. WIRING | ||
48 | --------- | ||
49 | |||
50 | The driver supports data parallel port wiring. | ||
51 | |||
52 | If you aren't building LCD related hardware, you should check | ||
53 | your LCD specific wiring information in the same folder. | ||
54 | |||
55 | For example, check Documentation/auxdisplay/cfag12864b. | ||
diff --git a/Documentation/cdrom/packet-writing.txt b/Documentation/cdrom/packet-writing.txt index 7715d2247c4d..cf1f8126991c 100644 --- a/Documentation/cdrom/packet-writing.txt +++ b/Documentation/cdrom/packet-writing.txt | |||
@@ -93,7 +93,7 @@ Notes | |||
93 | Using the pktcdvd sysfs interface | 93 | Using the pktcdvd sysfs interface |
94 | --------------------------------- | 94 | --------------------------------- |
95 | 95 | ||
96 | Since Linux 2.6.19, the pktcdvd module has a sysfs interface | 96 | Since Linux 2.6.20, the pktcdvd module has a sysfs interface |
97 | and can be controlled by it. For example the "pktcdvd" tool uses | 97 | and can be controlled by it. For example the "pktcdvd" tool uses |
98 | this interface. (see http://people.freenet.de/BalaGi#pktcdvd ) | 98 | this interface. (see http://people.freenet.de/BalaGi#pktcdvd ) |
99 | 99 | ||
diff --git a/Documentation/driver-model/devres.txt b/Documentation/driver-model/devres.txt new file mode 100644 index 000000000000..5163b85308f5 --- /dev/null +++ b/Documentation/driver-model/devres.txt | |||
@@ -0,0 +1,268 @@ | |||
1 | Devres - Managed Device Resource | ||
2 | ================================ | ||
3 | |||
4 | Tejun Heo <teheo@suse.de> | ||
5 | |||
6 | First draft 10 January 2007 | ||
7 | |||
8 | |||
9 | 1. Intro : Huh? Devres? | ||
10 | 2. Devres : Devres in a nutshell | ||
11 | 3. Devres Group : Group devres'es and release them together | ||
12 | 4. Details : Life time rules, calling context, ... | ||
13 | 5. Overhead : How much do we have to pay for this? | ||
14 | 6. List of managed interfaces : Currently implemented managed interfaces | ||
15 | |||
16 | |||
17 | 1. Intro | ||
18 | -------- | ||
19 | |||
20 | devres came up while trying to convert libata to use iomap. Each | ||
21 | iomapped address should be kept and unmapped on driver detach. For | ||
22 | example, a plain SFF ATA controller (that is, good old PCI IDE) in | ||
23 | native mode makes use of 5 PCI BARs and all of them should be | ||
24 | maintained. | ||
25 | |||
26 | As with many other device drivers, libata low level drivers have | ||
27 | sufficient bugs in ->remove and ->probe failure path. Well, yes, | ||
28 | that's probably because libata low level driver developers are lazy | ||
29 | bunch, but aren't all low level driver developers? After spending a | ||
30 | day fiddling with braindamaged hardware with no document or | ||
31 | braindamaged document, if it's finally working, well, it's working. | ||
32 | |||
33 | For one reason or another, low level drivers don't receive as much | ||
34 | attention or testing as core code, and bugs on driver detach or | ||
35 | initilaization failure doesn't happen often enough to be noticeable. | ||
36 | Init failure path is worse because it's much less travelled while | ||
37 | needs to handle multiple entry points. | ||
38 | |||
39 | So, many low level drivers end up leaking resources on driver detach | ||
40 | and having half broken failure path implementation in ->probe() which | ||
41 | would leak resources or even cause oops when failure occurs. iomap | ||
42 | adds more to this mix. So do msi and msix. | ||
43 | |||
44 | |||
45 | 2. Devres | ||
46 | --------- | ||
47 | |||
48 | devres is basically linked list of arbitrarily sized memory areas | ||
49 | associated with a struct device. Each devres entry is associated with | ||
50 | a release function. A devres can be released in several ways. No | ||
51 | matter what, all devres entries are released on driver detach. On | ||
52 | release, the associated release function is invoked and then the | ||
53 | devres entry is freed. | ||
54 | |||
55 | Managed interface is created for resources commonly used by device | ||
56 | drivers using devres. For example, coherent DMA memory is acquired | ||
57 | using dma_alloc_coherent(). The managed version is called | ||
58 | dmam_alloc_coherent(). It is identical to dma_alloc_coherent() except | ||
59 | for the DMA memory allocated using it is managed and will be | ||
60 | automatically released on driver detach. Implementation looks like | ||
61 | the following. | ||
62 | |||
63 | struct dma_devres { | ||
64 | size_t size; | ||
65 | void *vaddr; | ||
66 | dma_addr_t dma_handle; | ||
67 | }; | ||
68 | |||
69 | static void dmam_coherent_release(struct device *dev, void *res) | ||
70 | { | ||
71 | struct dma_devres *this = res; | ||
72 | |||
73 | dma_free_coherent(dev, this->size, this->vaddr, this->dma_handle); | ||
74 | } | ||
75 | |||
76 | dmam_alloc_coherent(dev, size, dma_handle, gfp) | ||
77 | { | ||
78 | struct dma_devres *dr; | ||
79 | void *vaddr; | ||
80 | |||
81 | dr = devres_alloc(dmam_coherent_release, sizeof(*dr), gfp); | ||
82 | ... | ||
83 | |||
84 | /* alloc DMA memory as usual */ | ||
85 | vaddr = dma_alloc_coherent(...); | ||
86 | ... | ||
87 | |||
88 | /* record size, vaddr, dma_handle in dr */ | ||
89 | dr->vaddr = vaddr; | ||
90 | ... | ||
91 | |||
92 | devres_add(dev, dr); | ||
93 | |||
94 | return vaddr; | ||
95 | } | ||
96 | |||
97 | If a driver uses dmam_alloc_coherent(), the area is guaranteed to be | ||
98 | freed whether initialization fails half-way or the device gets | ||
99 | detached. If most resources are acquired using managed interface, a | ||
100 | driver can have much simpler init and exit code. Init path basically | ||
101 | looks like the following. | ||
102 | |||
103 | my_init_one() | ||
104 | { | ||
105 | struct mydev *d; | ||
106 | |||
107 | d = devm_kzalloc(dev, sizeof(*d), GFP_KERNEL); | ||
108 | if (!d) | ||
109 | return -ENOMEM; | ||
110 | |||
111 | d->ring = dmam_alloc_coherent(...); | ||
112 | if (!d->ring) | ||
113 | return -ENOMEM; | ||
114 | |||
115 | if (check something) | ||
116 | return -EINVAL; | ||
117 | ... | ||
118 | |||
119 | return register_to_upper_layer(d); | ||
120 | } | ||
121 | |||
122 | And exit path, | ||
123 | |||
124 | my_remove_one() | ||
125 | { | ||
126 | unregister_from_upper_layer(d); | ||
127 | shutdown_my_hardware(); | ||
128 | } | ||
129 | |||
130 | As shown above, low level drivers can be simplified a lot by using | ||
131 | devres. Complexity is shifted from less maintained low level drivers | ||
132 | to better maintained higher layer. Also, as init failure path is | ||
133 | shared with exit path, both can get more testing. | ||
134 | |||
135 | |||
136 | 3. Devres group | ||
137 | --------------- | ||
138 | |||
139 | Devres entries can be grouped using devres group. When a group is | ||
140 | released, all contained normal devres entries and properly nested | ||
141 | groups are released. One usage is to rollback series of acquired | ||
142 | resources on failure. For example, | ||
143 | |||
144 | if (!devres_open_group(dev, NULL, GFP_KERNEL)) | ||
145 | return -ENOMEM; | ||
146 | |||
147 | acquire A; | ||
148 | if (failed) | ||
149 | goto err; | ||
150 | |||
151 | acquire B; | ||
152 | if (failed) | ||
153 | goto err; | ||
154 | ... | ||
155 | |||
156 | devres_remove_group(dev, NULL); | ||
157 | return 0; | ||
158 | |||
159 | err: | ||
160 | devres_release_group(dev, NULL); | ||
161 | return err_code; | ||
162 | |||
163 | As resource acquision failure usually means probe failure, constructs | ||
164 | like above are usually useful in midlayer driver (e.g. libata core | ||
165 | layer) where interface function shouldn't have side effect on failure. | ||
166 | For LLDs, just returning error code suffices in most cases. | ||
167 | |||
168 | Each group is identified by void *id. It can either be explicitly | ||
169 | specified by @id argument to devres_open_group() or automatically | ||
170 | created by passing NULL as @id as in the above example. In both | ||
171 | cases, devres_open_group() returns the group's id. The returned id | ||
172 | can be passed to other devres functions to select the target group. | ||
173 | If NULL is given to those functions, the latest open group is | ||
174 | selected. | ||
175 | |||
176 | For example, you can do something like the following. | ||
177 | |||
178 | int my_midlayer_create_something() | ||
179 | { | ||
180 | if (!devres_open_group(dev, my_midlayer_create_something, GFP_KERNEL)) | ||
181 | return -ENOMEM; | ||
182 | |||
183 | ... | ||
184 | |||
185 | devres_close_group(dev, my_midlayer_something); | ||
186 | return 0; | ||
187 | } | ||
188 | |||
189 | void my_midlayer_destroy_something() | ||
190 | { | ||
191 | devres_release_group(dev, my_midlayer_create_soemthing); | ||
192 | } | ||
193 | |||
194 | |||
195 | 4. Details | ||
196 | ---------- | ||
197 | |||
198 | Lifetime of a devres entry begins on devres allocation and finishes | ||
199 | when it is released or destroyed (removed and freed) - no reference | ||
200 | counting. | ||
201 | |||
202 | devres core guarantees atomicity to all basic devres operations and | ||
203 | has support for single-instance devres types (atomic | ||
204 | lookup-and-add-if-not-found). Other than that, synchronizing | ||
205 | concurrent accesses to allocated devres data is caller's | ||
206 | responsibility. This is usually non-issue because bus ops and | ||
207 | resource allocations already do the job. | ||
208 | |||
209 | For an example of single-instance devres type, read pcim_iomap_table() | ||
210 | in lib/iomap.c. | ||
211 | |||
212 | All devres interface functions can be called without context if the | ||
213 | right gfp mask is given. | ||
214 | |||
215 | |||
216 | 5. Overhead | ||
217 | ----------- | ||
218 | |||
219 | Each devres bookkeeping info is allocated together with requested data | ||
220 | area. With debug option turned off, bookkeeping info occupies 16 | ||
221 | bytes on 32bit machines and 24 bytes on 64bit (three pointers rounded | ||
222 | up to ull alignment). If singly linked list is used, it can be | ||
223 | reduced to two pointers (8 bytes on 32bit, 16 bytes on 64bit). | ||
224 | |||
225 | Each devres group occupies 8 pointers. It can be reduced to 6 if | ||
226 | singly linked list is used. | ||
227 | |||
228 | Memory space overhead on ahci controller with two ports is between 300 | ||
229 | and 400 bytes on 32bit machine after naive conversion (we can | ||
230 | certainly invest a bit more effort into libata core layer). | ||
231 | |||
232 | |||
233 | 6. List of managed interfaces | ||
234 | ----------------------------- | ||
235 | |||
236 | IO region | ||
237 | devm_request_region() | ||
238 | devm_request_mem_region() | ||
239 | devm_release_region() | ||
240 | devm_release_mem_region() | ||
241 | |||
242 | IRQ | ||
243 | devm_request_irq() | ||
244 | devm_free_irq() | ||
245 | |||
246 | DMA | ||
247 | dmam_alloc_coherent() | ||
248 | dmam_free_coherent() | ||
249 | dmam_alloc_noncoherent() | ||
250 | dmam_free_noncoherent() | ||
251 | dmam_declare_coherent_memory() | ||
252 | dmam_pool_create() | ||
253 | dmam_pool_destroy() | ||
254 | |||
255 | PCI | ||
256 | pcim_enable_device() : after success, all PCI ops become managed | ||
257 | pcim_pin_device() : keep PCI device enabled after release | ||
258 | |||
259 | IOMAP | ||
260 | devm_ioport_map() | ||
261 | devm_ioport_unmap() | ||
262 | devm_ioremap() | ||
263 | devm_ioremap_nocache() | ||
264 | devm_iounmap() | ||
265 | pcim_iomap() | ||
266 | pcim_iounmap() | ||
267 | pcim_iomap_table() : array of mapped addresses indexed by BAR | ||
268 | pcim_iomap_regions() : do request_region() and iomap() on multiple BARs | ||
diff --git a/Documentation/drivers/edac/edac.txt b/Documentation/drivers/edac/edac.txt index 7b3d969d2964..3c5a9e4297b4 100644 --- a/Documentation/drivers/edac/edac.txt +++ b/Documentation/drivers/edac/edac.txt | |||
@@ -339,7 +339,21 @@ Device Symlink: | |||
339 | 339 | ||
340 | 'device' | 340 | 'device' |
341 | 341 | ||
342 | Symlink to the memory controller device | 342 | Symlink to the memory controller device. |
343 | |||
344 | Sdram memory scrubbing rate: | ||
345 | |||
346 | 'sdram_scrub_rate' | ||
347 | |||
348 | Read/Write attribute file that controls memory scrubbing. The scrubbing | ||
349 | rate is set by writing a minimum bandwith in bytes/sec to the attribute | ||
350 | file. The rate will be translated to an internal value that gives at | ||
351 | least the specified rate. | ||
352 | |||
353 | Reading the file will return the actual scrubbing rate employed. | ||
354 | |||
355 | If configuration fails or memory scrubbing is not implemented, the value | ||
356 | of the attribute file will be -1. | ||
343 | 357 | ||
344 | 358 | ||
345 | 359 | ||
diff --git a/Documentation/fb/s3fb.txt b/Documentation/fb/s3fb.txt new file mode 100644 index 000000000000..8a04c0da0c91 --- /dev/null +++ b/Documentation/fb/s3fb.txt | |||
@@ -0,0 +1,78 @@ | |||
1 | |||
2 | s3fb - fbdev driver for S3 Trio/Virge chips | ||
3 | =========================================== | ||
4 | |||
5 | |||
6 | Supported Hardware | ||
7 | ================== | ||
8 | |||
9 | S3 Trio32 | ||
10 | S3 Trio64 (and variants V+, UV+, V2/DX, V2/GX) | ||
11 | S3 Virge (and variants VX, DX, GX and GX2+) | ||
12 | S3 Plato/PX (completely untested) | ||
13 | S3 Aurora64V+ (completely untested) | ||
14 | |||
15 | - only PCI bus supported | ||
16 | - only BIOS initialized VGA devices supported | ||
17 | - probably not working on big endian | ||
18 | |||
19 | I tested s3fb on Trio64 (plain, V+ and V2/DX) and Virge (plain, VX, DX), | ||
20 | all on i386. | ||
21 | |||
22 | |||
23 | Supported Features | ||
24 | ================== | ||
25 | |||
26 | * 4 bpp pseudocolor modes (with 18bit palette, two variants) | ||
27 | * 8 bpp pseudocolor mode (with 18bit palette) | ||
28 | * 16 bpp truecolor modes (RGB 555 and RGB 565) | ||
29 | * 24 bpp truecolor mode (RGB 888) on (only on Virge VX) | ||
30 | * 32 bpp truecolor mode (RGB 888) on (not on Virge VX) | ||
31 | * text mode (activated by bpp = 0) | ||
32 | * interlaced mode variant (not available in text mode) | ||
33 | * doublescan mode variant (not available in text mode) | ||
34 | * panning in both directions | ||
35 | * suspend/resume support | ||
36 | * DPMS support | ||
37 | |||
38 | Text mode is supported even in higher resolutions, but there is limitation | ||
39 | to lower pixclocks (maximum between 50-60 MHz, depending on specific hardware). | ||
40 | This limitation is not enforced by driver. Text mode supports 8bit wide fonts | ||
41 | only (hardware limitation) and 16bit tall fonts (driver limitation). | ||
42 | |||
43 | There are two 4 bpp modes. First mode (selected if nonstd == 0) is mode with | ||
44 | packed pixels, high nibble first. Second mode (selected if nonstd == 1) is mode | ||
45 | with interleaved planes (1 byte interleave), MSB first. Both modes support | ||
46 | 8bit wide fonts only (driver limitation). | ||
47 | |||
48 | Suspend/resume works on systems that initialize video card during resume and | ||
49 | if device is active (for example used by fbcon). | ||
50 | |||
51 | |||
52 | Missing Features | ||
53 | ================ | ||
54 | (alias TODO list) | ||
55 | |||
56 | * secondary (not initialized by BIOS) device support | ||
57 | * big endian support | ||
58 | * Zorro bus support | ||
59 | * MMIO support | ||
60 | * 24 bpp mode support on more cards | ||
61 | * support for fontwidths != 8 in 4 bpp modes | ||
62 | * support for fontheight != 16 in text mode | ||
63 | * composite and external sync (is anyone able to test this?) | ||
64 | * hardware cursor | ||
65 | * video overlay support | ||
66 | * vsync synchronization | ||
67 | * feature connector support | ||
68 | * acceleration support (8514-like 2D, Virge 3D, busmaster transfers) | ||
69 | * better values for some magic registers (performance issues) | ||
70 | |||
71 | |||
72 | Known bugs | ||
73 | ========== | ||
74 | |||
75 | * cursor disable in text mode doesn't work | ||
76 | |||
77 | -- | ||
78 | Ondrej Zajicek <santiago@crfreenet.org> | ||
diff --git a/Documentation/feature-removal-schedule.txt b/Documentation/feature-removal-schedule.txt index 7dec8e0193c0..28f897fd3674 100644 --- a/Documentation/feature-removal-schedule.txt +++ b/Documentation/feature-removal-schedule.txt | |||
@@ -215,6 +215,13 @@ Who: Jean Delvare <khali@linux-fr.org>, | |||
215 | 215 | ||
216 | --------------------------- | 216 | --------------------------- |
217 | 217 | ||
218 | What: drivers depending on OBSOLETE_OSS | ||
219 | When: options in 2.6.22, code in 2.6.24 | ||
220 | Why: OSS drivers with ALSA replacements | ||
221 | Who: Adrian Bunk <bunk@stusta.de> | ||
222 | |||
223 | --------------------------- | ||
224 | |||
218 | What: IPv4 only connection tracking/NAT/helpers | 225 | What: IPv4 only connection tracking/NAT/helpers |
219 | When: 2.6.22 | 226 | When: 2.6.22 |
220 | Why: The new layer 3 independant connection tracking replaces the old | 227 | Why: The new layer 3 independant connection tracking replaces the old |
@@ -289,3 +296,18 @@ Why: In kernel tree version of driver is unmaintained. Sk98lin driver | |||
289 | replaced by the skge driver. | 296 | replaced by the skge driver. |
290 | Who: Stephen Hemminger <shemminger@osdl.org> | 297 | Who: Stephen Hemminger <shemminger@osdl.org> |
291 | 298 | ||
299 | --------------------------- | ||
300 | |||
301 | What: Compaq touchscreen device emulation | ||
302 | When: Oct 2007 | ||
303 | Files: drivers/input/tsdev.c | ||
304 | Why: The code says it was obsolete when it was written in 2001. | ||
305 | tslib is a userspace library which does anything tsdev can do and | ||
306 | much more besides in userspace where this code belongs. There is no | ||
307 | longer any need for tsdev and applications should have converted to | ||
308 | use tslib by now. | ||
309 | The name "tsdev" is also extremely confusing and lots of people have | ||
310 | it loaded when they don't need/use it. | ||
311 | Who: Richard Purdie <rpurdie@rpsys.net> | ||
312 | |||
313 | --------------------------- | ||
diff --git a/Documentation/filesystems/relay.txt b/Documentation/filesystems/relay.txt index d6788dae0349..7fbb6ffe5769 100644 --- a/Documentation/filesystems/relay.txt +++ b/Documentation/filesystems/relay.txt | |||
@@ -157,7 +157,7 @@ TBD(curr. line MT:/API/) | |||
157 | channel management functions: | 157 | channel management functions: |
158 | 158 | ||
159 | relay_open(base_filename, parent, subbuf_size, n_subbufs, | 159 | relay_open(base_filename, parent, subbuf_size, n_subbufs, |
160 | callbacks) | 160 | callbacks, private_data) |
161 | relay_close(chan) | 161 | relay_close(chan) |
162 | relay_flush(chan) | 162 | relay_flush(chan) |
163 | relay_reset(chan) | 163 | relay_reset(chan) |
@@ -251,7 +251,7 @@ static struct rchan_callbacks relay_callbacks = | |||
251 | 251 | ||
252 | And an example relay_open() invocation using them: | 252 | And an example relay_open() invocation using them: |
253 | 253 | ||
254 | chan = relay_open("cpu", NULL, SUBBUF_SIZE, N_SUBBUFS, &relay_callbacks); | 254 | chan = relay_open("cpu", NULL, SUBBUF_SIZE, N_SUBBUFS, &relay_callbacks, NULL); |
255 | 255 | ||
256 | If the create_buf_file() callback fails, or isn't defined, channel | 256 | If the create_buf_file() callback fails, or isn't defined, channel |
257 | creation and thus relay_open() will fail. | 257 | creation and thus relay_open() will fail. |
@@ -289,6 +289,11 @@ they use the proper locking for such a buffer, either by wrapping | |||
289 | writes in a spinlock, or by copying a write function from relay.h and | 289 | writes in a spinlock, or by copying a write function from relay.h and |
290 | creating a local version that internally does the proper locking. | 290 | creating a local version that internally does the proper locking. |
291 | 291 | ||
292 | The private_data passed into relay_open() allows clients to associate | ||
293 | user-defined data with a channel, and is immediately available | ||
294 | (including in create_buf_file()) via chan->private_data or | ||
295 | buf->chan->private_data. | ||
296 | |||
292 | Channel 'modes' | 297 | Channel 'modes' |
293 | --------------- | 298 | --------------- |
294 | 299 | ||
diff --git a/Documentation/filesystems/ufs.txt b/Documentation/filesystems/ufs.txt index 2b5a56a6a558..7a602adeca2b 100644 --- a/Documentation/filesystems/ufs.txt +++ b/Documentation/filesystems/ufs.txt | |||
@@ -21,7 +21,7 @@ ufstype=type_of_ufs | |||
21 | supported as read-write | 21 | supported as read-write |
22 | 22 | ||
23 | ufs2 used in FreeBSD 5.x | 23 | ufs2 used in FreeBSD 5.x |
24 | supported as read-only | 24 | supported as read-write |
25 | 25 | ||
26 | 5xbsd synonym for ufs2 | 26 | 5xbsd synonym for ufs2 |
27 | 27 | ||
@@ -50,12 +50,11 @@ ufstype=type_of_ufs | |||
50 | POSSIBLE PROBLEMS | 50 | POSSIBLE PROBLEMS |
51 | ================= | 51 | ================= |
52 | 52 | ||
53 | There is still bug in reallocation of fragment, in file fs/ufs/balloc.c, | 53 | See next section, if you have any. |
54 | line 364. But it seems working on current buffer cache configuration. | ||
55 | 54 | ||
56 | 55 | ||
57 | BUG REPORTS | 56 | BUG REPORTS |
58 | =========== | 57 | =========== |
59 | 58 | ||
60 | Any ufs bug report you can send to daniel.pirkl@email.cz (do not send | 59 | Any ufs bug report you can send to daniel.pirkl@email.cz or |
61 | partition tables bug reports.) | 60 | to dushistov@mail.ru (do not send partition tables bug reports). |
diff --git a/Documentation/gpio.txt b/Documentation/gpio.txt new file mode 100644 index 000000000000..576ce463cf44 --- /dev/null +++ b/Documentation/gpio.txt | |||
@@ -0,0 +1,274 @@ | |||
1 | GPIO Interfaces | ||
2 | |||
3 | This provides an overview of GPIO access conventions on Linux. | ||
4 | |||
5 | |||
6 | What is a GPIO? | ||
7 | =============== | ||
8 | A "General Purpose Input/Output" (GPIO) is a flexible software-controlled | ||
9 | digital signal. They are provided from many kinds of chip, and are familiar | ||
10 | to Linux developers working with embedded and custom hardware. Each GPIO | ||
11 | represents a bit connected to a particular pin, or "ball" on Ball Grid Array | ||
12 | (BGA) packages. Board schematics show which external hardware connects to | ||
13 | which GPIOs. Drivers can be written generically, so that board setup code | ||
14 | passes such pin configuration data to drivers. | ||
15 | |||
16 | System-on-Chip (SOC) processors heavily rely on GPIOs. In some cases, every | ||
17 | non-dedicated pin can be configured as a GPIO; and most chips have at least | ||
18 | several dozen of them. Programmable logic devices (like FPGAs) can easily | ||
19 | provide GPIOs; multifunction chips like power managers, and audio codecs | ||
20 | often have a few such pins to help with pin scarcity on SOCs; and there are | ||
21 | also "GPIO Expander" chips that connect using the I2C or SPI serial busses. | ||
22 | Most PC southbridges have a few dozen GPIO-capable pins (with only the BIOS | ||
23 | firmware knowing how they're used). | ||
24 | |||
25 | The exact capabilities of GPIOs vary between systems. Common options: | ||
26 | |||
27 | - Output values are writable (high=1, low=0). Some chips also have | ||
28 | options about how that value is driven, so that for example only one | ||
29 | value might be driven ... supporting "wire-OR" and similar schemes | ||
30 | for the other value. | ||
31 | |||
32 | - Input values are likewise readable (1, 0). Some chips support readback | ||
33 | of pins configured as "output", which is very useful in such "wire-OR" | ||
34 | cases (to support bidirectional signaling). GPIO controllers may have | ||
35 | input de-glitch logic, sometimes with software controls. | ||
36 | |||
37 | - Inputs can often be used as IRQ signals, often edge triggered but | ||
38 | sometimes level triggered. Such IRQs may be configurable as system | ||
39 | wakeup events, to wake the system from a low power state. | ||
40 | |||
41 | - Usually a GPIO will be configurable as either input or output, as needed | ||
42 | by different product boards; single direction ones exist too. | ||
43 | |||
44 | - Most GPIOs can be accessed while holding spinlocks, but those accessed | ||
45 | through a serial bus normally can't. Some systems support both types. | ||
46 | |||
47 | On a given board each GPIO is used for one specific purpose like monitoring | ||
48 | MMC/SD card insertion/removal, detecting card writeprotect status, driving | ||
49 | a LED, configuring a transceiver, bitbanging a serial bus, poking a hardware | ||
50 | watchdog, sensing a switch, and so on. | ||
51 | |||
52 | |||
53 | GPIO conventions | ||
54 | ================ | ||
55 | Note that this is called a "convention" because you don't need to do it this | ||
56 | way, and it's no crime if you don't. There **are** cases where portability | ||
57 | is not the main issue; GPIOs are often used for the kind of board-specific | ||
58 | glue logic that may even change between board revisions, and can't ever be | ||
59 | used on a board that's wired differently. Only least-common-denominator | ||
60 | functionality can be very portable. Other features are platform-specific, | ||
61 | and that can be critical for glue logic. | ||
62 | |||
63 | Plus, this doesn't define an implementation framework, just an interface. | ||
64 | One platform might implement it as simple inline functions accessing chip | ||
65 | registers; another might implement it by delegating through abstractions | ||
66 | used for several very different kinds of GPIO controller. | ||
67 | |||
68 | That said, if the convention is supported on their platform, drivers should | ||
69 | use it when possible: | ||
70 | |||
71 | #include <asm/gpio.h> | ||
72 | |||
73 | If you stick to this convention then it'll be easier for other developers to | ||
74 | see what your code is doing, and help maintain it. | ||
75 | |||
76 | |||
77 | Identifying GPIOs | ||
78 | ----------------- | ||
79 | GPIOs are identified by unsigned integers in the range 0..MAX_INT. That | ||
80 | reserves "negative" numbers for other purposes like marking signals as | ||
81 | "not available on this board", or indicating faults. Code that doesn't | ||
82 | touch the underlying hardware treats these integers as opaque cookies. | ||
83 | |||
84 | Platforms define how they use those integers, and usually #define symbols | ||
85 | for the GPIO lines so that board-specific setup code directly corresponds | ||
86 | to the relevant schematics. In contrast, drivers should only use GPIO | ||
87 | numbers passed to them from that setup code, using platform_data to hold | ||
88 | board-specific pin configuration data (along with other board specific | ||
89 | data they need). That avoids portability problems. | ||
90 | |||
91 | So for example one platform uses numbers 32-159 for GPIOs; while another | ||
92 | uses numbers 0..63 with one set of GPIO controllers, 64-79 with another | ||
93 | type of GPIO controller, and on one particular board 80-95 with an FPGA. | ||
94 | The numbers need not be contiguous; either of those platforms could also | ||
95 | use numbers 2000-2063 to identify GPIOs in a bank of I2C GPIO expanders. | ||
96 | |||
97 | Whether a platform supports multiple GPIO controllers is currently a | ||
98 | platform-specific implementation issue. | ||
99 | |||
100 | |||
101 | Using GPIOs | ||
102 | ----------- | ||
103 | One of the first things to do with a GPIO, often in board setup code when | ||
104 | setting up a platform_device using the GPIO, is mark its direction: | ||
105 | |||
106 | /* set as input or output, returning 0 or negative errno */ | ||
107 | int gpio_direction_input(unsigned gpio); | ||
108 | int gpio_direction_output(unsigned gpio); | ||
109 | |||
110 | The return value is zero for success, else a negative errno. It should | ||
111 | be checked, since the get/set calls don't have error returns and since | ||
112 | misconfiguration is possible. (These calls could sleep.) | ||
113 | |||
114 | Setting the direction can fail if the GPIO number is invalid, or when | ||
115 | that particular GPIO can't be used in that mode. It's generally a bad | ||
116 | idea to rely on boot firmware to have set the direction correctly, since | ||
117 | it probably wasn't validated to do more than boot Linux. (Similarly, | ||
118 | that board setup code probably needs to multiplex that pin as a GPIO, | ||
119 | and configure pullups/pulldowns appropriately.) | ||
120 | |||
121 | |||
122 | Spinlock-Safe GPIO access | ||
123 | ------------------------- | ||
124 | Most GPIO controllers can be accessed with memory read/write instructions. | ||
125 | That doesn't need to sleep, and can safely be done from inside IRQ handlers. | ||
126 | |||
127 | Use these calls to access such GPIOs: | ||
128 | |||
129 | /* GPIO INPUT: return zero or nonzero */ | ||
130 | int gpio_get_value(unsigned gpio); | ||
131 | |||
132 | /* GPIO OUTPUT */ | ||
133 | void gpio_set_value(unsigned gpio, int value); | ||
134 | |||
135 | The values are boolean, zero for low, nonzero for high. When reading the | ||
136 | value of an output pin, the value returned should be what's seen on the | ||
137 | pin ... that won't always match the specified output value, because of | ||
138 | issues including wire-OR and output latencies. | ||
139 | |||
140 | The get/set calls have no error returns because "invalid GPIO" should have | ||
141 | been reported earlier in gpio_set_direction(). However, note that not all | ||
142 | platforms can read the value of output pins; those that can't should always | ||
143 | return zero. Also, using these calls for GPIOs that can't safely be accessed | ||
144 | without sleeping (see below) is an error. | ||
145 | |||
146 | Platform-specific implementations are encouraged to optimize the two | ||
147 | calls to access the GPIO value in cases where the GPIO number (and for | ||
148 | output, value) are constant. It's normal for them to need only a couple | ||
149 | of instructions in such cases (reading or writing a hardware register), | ||
150 | and not to need spinlocks. Such optimized calls can make bitbanging | ||
151 | applications a lot more efficient (in both space and time) than spending | ||
152 | dozens of instructions on subroutine calls. | ||
153 | |||
154 | |||
155 | GPIO access that may sleep | ||
156 | -------------------------- | ||
157 | Some GPIO controllers must be accessed using message based busses like I2C | ||
158 | or SPI. Commands to read or write those GPIO values require waiting to | ||
159 | get to the head of a queue to transmit a command and get its response. | ||
160 | This requires sleeping, which can't be done from inside IRQ handlers. | ||
161 | |||
162 | Platforms that support this type of GPIO distinguish them from other GPIOs | ||
163 | by returning nonzero from this call: | ||
164 | |||
165 | int gpio_cansleep(unsigned gpio); | ||
166 | |||
167 | To access such GPIOs, a different set of accessors is defined: | ||
168 | |||
169 | /* GPIO INPUT: return zero or nonzero, might sleep */ | ||
170 | int gpio_get_value_cansleep(unsigned gpio); | ||
171 | |||
172 | /* GPIO OUTPUT, might sleep */ | ||
173 | void gpio_set_value_cansleep(unsigned gpio, int value); | ||
174 | |||
175 | Other than the fact that these calls might sleep, and will not be ignored | ||
176 | for GPIOs that can't be accessed from IRQ handlers, these calls act the | ||
177 | same as the spinlock-safe calls. | ||
178 | |||
179 | |||
180 | Claiming and Releasing GPIOs (OPTIONAL) | ||
181 | --------------------------------------- | ||
182 | To help catch system configuration errors, two calls are defined. | ||
183 | However, many platforms don't currently support this mechanism. | ||
184 | |||
185 | /* request GPIO, returning 0 or negative errno. | ||
186 | * non-null labels may be useful for diagnostics. | ||
187 | */ | ||
188 | int gpio_request(unsigned gpio, const char *label); | ||
189 | |||
190 | /* release previously-claimed GPIO */ | ||
191 | void gpio_free(unsigned gpio); | ||
192 | |||
193 | Passing invalid GPIO numbers to gpio_request() will fail, as will requesting | ||
194 | GPIOs that have already been claimed with that call. The return value of | ||
195 | gpio_request() must be checked. (These calls could sleep.) | ||
196 | |||
197 | These calls serve two basic purposes. One is marking the signals which | ||
198 | are actually in use as GPIOs, for better diagnostics; systems may have | ||
199 | several hundred potential GPIOs, but often only a dozen are used on any | ||
200 | given board. Another is to catch conflicts between drivers, reporting | ||
201 | errors when drivers wrongly think they have exclusive use of that signal. | ||
202 | |||
203 | These two calls are optional because not not all current Linux platforms | ||
204 | offer such functionality in their GPIO support; a valid implementation | ||
205 | could return success for all gpio_request() calls. Unlike the other calls, | ||
206 | the state they represent doesn't normally match anything from a hardware | ||
207 | register; it's just a software bitmap which clearly is not necessary for | ||
208 | correct operation of hardware or (bug free) drivers. | ||
209 | |||
210 | Note that requesting a GPIO does NOT cause it to be configured in any | ||
211 | way; it just marks that GPIO as in use. Separate code must handle any | ||
212 | pin setup (e.g. controlling which pin the GPIO uses, pullup/pulldown). | ||
213 | |||
214 | |||
215 | GPIOs mapped to IRQs | ||
216 | -------------------- | ||
217 | GPIO numbers are unsigned integers; so are IRQ numbers. These make up | ||
218 | two logically distinct namespaces (GPIO 0 need not use IRQ 0). You can | ||
219 | map between them using calls like: | ||
220 | |||
221 | /* map GPIO numbers to IRQ numbers */ | ||
222 | int gpio_to_irq(unsigned gpio); | ||
223 | |||
224 | /* map IRQ numbers to GPIO numbers */ | ||
225 | int irq_to_gpio(unsigned irq); | ||
226 | |||
227 | Those return either the corresponding number in the other namespace, or | ||
228 | else a negative errno code if the mapping can't be done. (For example, | ||
229 | some GPIOs can't used as IRQs.) It is an unchecked error to use a GPIO | ||
230 | number that hasn't been marked as an input using gpio_set_direction(), or | ||
231 | to use an IRQ number that didn't originally come from gpio_to_irq(). | ||
232 | |||
233 | These two mapping calls are expected to cost on the order of a single | ||
234 | addition or subtraction. They're not allowed to sleep. | ||
235 | |||
236 | Non-error values returned from gpio_to_irq() can be passed to request_irq() | ||
237 | or free_irq(). They will often be stored into IRQ resources for platform | ||
238 | devices, by the board-specific initialization code. Note that IRQ trigger | ||
239 | options are part of the IRQ interface, e.g. IRQF_TRIGGER_FALLING, as are | ||
240 | system wakeup capabilities. | ||
241 | |||
242 | Non-error values returned from irq_to_gpio() would most commonly be used | ||
243 | with gpio_get_value(), for example to initialize or update driver state | ||
244 | when the IRQ is edge-triggered. | ||
245 | |||
246 | |||
247 | |||
248 | What do these conventions omit? | ||
249 | =============================== | ||
250 | One of the biggest things these conventions omit is pin multiplexing, since | ||
251 | this is highly chip-specific and nonportable. One platform might not need | ||
252 | explicit multiplexing; another might have just two options for use of any | ||
253 | given pin; another might have eight options per pin; another might be able | ||
254 | to route a given GPIO to any one of several pins. (Yes, those examples all | ||
255 | come from systems that run Linux today.) | ||
256 | |||
257 | Related to multiplexing is configuration and enabling of the pullups or | ||
258 | pulldowns integrated on some platforms. Not all platforms support them, | ||
259 | or support them in the same way; and any given board might use external | ||
260 | pullups (or pulldowns) so that the on-chip ones should not be used. | ||
261 | |||
262 | There are other system-specific mechanisms that are not specified here, | ||
263 | like the aforementioned options for input de-glitching and wire-OR output. | ||
264 | Hardware may support reading or writing GPIOs in gangs, but that's usually | ||
265 | configuration dependent: for GPIOs sharing the same bank. (GPIOs are | ||
266 | commonly grouped in banks of 16 or 32, with a given SOC having several such | ||
267 | banks.) Some systems can trigger IRQs from output GPIOs. Code relying on | ||
268 | such mechanisms will necessarily be nonportable. | ||
269 | |||
270 | Dynamic definition of GPIOs is not currently supported; for example, as | ||
271 | a side effect of configuring an add-on board with some GPIO expanders. | ||
272 | |||
273 | These calls are purely for kernel space, but a userspace API could be built | ||
274 | on top of it. | ||
diff --git a/Documentation/hrtimer/timer_stats.txt b/Documentation/hrtimer/timer_stats.txt new file mode 100644 index 000000000000..27f782e3593f --- /dev/null +++ b/Documentation/hrtimer/timer_stats.txt | |||
@@ -0,0 +1,68 @@ | |||
1 | timer_stats - timer usage statistics | ||
2 | ------------------------------------ | ||
3 | |||
4 | timer_stats is a debugging facility to make the timer (ab)usage in a Linux | ||
5 | system visible to kernel and userspace developers. It is not intended for | ||
6 | production usage as it adds significant overhead to the (hr)timer code and the | ||
7 | (hr)timer data structures. | ||
8 | |||
9 | timer_stats should be used by kernel and userspace developers to verify that | ||
10 | their code does not make unduly use of timers. This helps to avoid unnecessary | ||
11 | wakeups, which should be avoided to optimize power consumption. | ||
12 | |||
13 | It can be enabled by CONFIG_TIMER_STATS in the "Kernel hacking" configuration | ||
14 | section. | ||
15 | |||
16 | timer_stats collects information about the timer events which are fired in a | ||
17 | Linux system over a sample period: | ||
18 | |||
19 | - the pid of the task(process) which initialized the timer | ||
20 | - the name of the process which initialized the timer | ||
21 | - the function where the timer was intialized | ||
22 | - the callback function which is associated to the timer | ||
23 | - the number of events (callbacks) | ||
24 | |||
25 | timer_stats adds an entry to /proc: /proc/timer_stats | ||
26 | |||
27 | This entry is used to control the statistics functionality and to read out the | ||
28 | sampled information. | ||
29 | |||
30 | The timer_stats functionality is inactive on bootup. | ||
31 | |||
32 | To activate a sample period issue: | ||
33 | # echo 1 >/proc/timer_stats | ||
34 | |||
35 | To stop a sample period issue: | ||
36 | # echo 0 >/proc/timer_stats | ||
37 | |||
38 | The statistics can be retrieved by: | ||
39 | # cat /proc/timer_stats | ||
40 | |||
41 | The readout of /proc/timer_stats automatically disables sampling. The sampled | ||
42 | information is kept until a new sample period is started. This allows multiple | ||
43 | readouts. | ||
44 | |||
45 | Sample output of /proc/timer_stats: | ||
46 | |||
47 | Timerstats sample period: 3.888770 s | ||
48 | 12, 0 swapper hrtimer_stop_sched_tick (hrtimer_sched_tick) | ||
49 | 15, 1 swapper hcd_submit_urb (rh_timer_func) | ||
50 | 4, 959 kedac schedule_timeout (process_timeout) | ||
51 | 1, 0 swapper page_writeback_init (wb_timer_fn) | ||
52 | 28, 0 swapper hrtimer_stop_sched_tick (hrtimer_sched_tick) | ||
53 | 22, 2948 IRQ 4 tty_flip_buffer_push (delayed_work_timer_fn) | ||
54 | 3, 3100 bash schedule_timeout (process_timeout) | ||
55 | 1, 1 swapper queue_delayed_work_on (delayed_work_timer_fn) | ||
56 | 1, 1 swapper queue_delayed_work_on (delayed_work_timer_fn) | ||
57 | 1, 1 swapper neigh_table_init_no_netlink (neigh_periodic_timer) | ||
58 | 1, 2292 ip __netdev_watchdog_up (dev_watchdog) | ||
59 | 1, 23 events/1 do_cache_clean (delayed_work_timer_fn) | ||
60 | 90 total events, 30.0 events/sec | ||
61 | |||
62 | The first column is the number of events, the second column the pid, the third | ||
63 | column is the name of the process. The forth column shows the function which | ||
64 | initialized the timer and in parantheses the callback function which was | ||
65 | executed on expiry. | ||
66 | |||
67 | Thomas, Ingo | ||
68 | |||
diff --git a/Documentation/hrtimers/highres.txt b/Documentation/hrtimers/highres.txt new file mode 100644 index 000000000000..ce0e9a91e157 --- /dev/null +++ b/Documentation/hrtimers/highres.txt | |||
@@ -0,0 +1,249 @@ | |||
1 | High resolution timers and dynamic ticks design notes | ||
2 | ----------------------------------------------------- | ||
3 | |||
4 | Further information can be found in the paper of the OLS 2006 talk "hrtimers | ||
5 | and beyond". The paper is part of the OLS 2006 Proceedings Volume 1, which can | ||
6 | be found on the OLS website: | ||
7 | http://www.linuxsymposium.org/2006/linuxsymposium_procv1.pdf | ||
8 | |||
9 | The slides to this talk are available from: | ||
10 | http://tglx.de/projects/hrtimers/ols2006-hrtimers.pdf | ||
11 | |||
12 | The slides contain five figures (pages 2, 15, 18, 20, 22), which illustrate the | ||
13 | changes in the time(r) related Linux subsystems. Figure #1 (p. 2) shows the | ||
14 | design of the Linux time(r) system before hrtimers and other building blocks | ||
15 | got merged into mainline. | ||
16 | |||
17 | Note: the paper and the slides are talking about "clock event source", while we | ||
18 | switched to the name "clock event devices" in meantime. | ||
19 | |||
20 | The design contains the following basic building blocks: | ||
21 | |||
22 | - hrtimer base infrastructure | ||
23 | - timeofday and clock source management | ||
24 | - clock event management | ||
25 | - high resolution timer functionality | ||
26 | - dynamic ticks | ||
27 | |||
28 | |||
29 | hrtimer base infrastructure | ||
30 | --------------------------- | ||
31 | |||
32 | The hrtimer base infrastructure was merged into the 2.6.16 kernel. Details of | ||
33 | the base implementation are covered in Documentation/hrtimers/hrtimer.txt. See | ||
34 | also figure #2 (OLS slides p. 15) | ||
35 | |||
36 | The main differences to the timer wheel, which holds the armed timer_list type | ||
37 | timers are: | ||
38 | - time ordered enqueueing into a rb-tree | ||
39 | - independent of ticks (the processing is based on nanoseconds) | ||
40 | |||
41 | |||
42 | timeofday and clock source management | ||
43 | ------------------------------------- | ||
44 | |||
45 | John Stultz's Generic Time Of Day (GTOD) framework moves a large portion of | ||
46 | code out of the architecture-specific areas into a generic management | ||
47 | framework, as illustrated in figure #3 (OLS slides p. 18). The architecture | ||
48 | specific portion is reduced to the low level hardware details of the clock | ||
49 | sources, which are registered in the framework and selected on a quality based | ||
50 | decision. The low level code provides hardware setup and readout routines and | ||
51 | initializes data structures, which are used by the generic time keeping code to | ||
52 | convert the clock ticks to nanosecond based time values. All other time keeping | ||
53 | related functionality is moved into the generic code. The GTOD base patch got | ||
54 | merged into the 2.6.18 kernel. | ||
55 | |||
56 | Further information about the Generic Time Of Day framework is available in the | ||
57 | OLS 2005 Proceedings Volume 1: | ||
58 | http://www.linuxsymposium.org/2005/linuxsymposium_procv1.pdf | ||
59 | |||
60 | The paper "We Are Not Getting Any Younger: A New Approach to Time and | ||
61 | Timers" was written by J. Stultz, D.V. Hart, & N. Aravamudan. | ||
62 | |||
63 | Figure #3 (OLS slides p.18) illustrates the transformation. | ||
64 | |||
65 | |||
66 | clock event management | ||
67 | ---------------------- | ||
68 | |||
69 | While clock sources provide read access to the monotonically increasing time | ||
70 | value, clock event devices are used to schedule the next event | ||
71 | interrupt(s). The next event is currently defined to be periodic, with its | ||
72 | period defined at compile time. The setup and selection of the event device | ||
73 | for various event driven functionalities is hardwired into the architecture | ||
74 | dependent code. This results in duplicated code across all architectures and | ||
75 | makes it extremely difficult to change the configuration of the system to use | ||
76 | event interrupt devices other than those already built into the | ||
77 | architecture. Another implication of the current design is that it is necessary | ||
78 | to touch all the architecture-specific implementations in order to provide new | ||
79 | functionality like high resolution timers or dynamic ticks. | ||
80 | |||
81 | The clock events subsystem tries to address this problem by providing a generic | ||
82 | solution to manage clock event devices and their usage for the various clock | ||
83 | event driven kernel functionalities. The goal of the clock event subsystem is | ||
84 | to minimize the clock event related architecture dependent code to the pure | ||
85 | hardware related handling and to allow easy addition and utilization of new | ||
86 | clock event devices. It also minimizes the duplicated code across the | ||
87 | architectures as it provides generic functionality down to the interrupt | ||
88 | service handler, which is almost inherently hardware dependent. | ||
89 | |||
90 | Clock event devices are registered either by the architecture dependent boot | ||
91 | code or at module insertion time. Each clock event device fills a data | ||
92 | structure with clock-specific property parameters and callback functions. The | ||
93 | clock event management decides, by using the specified property parameters, the | ||
94 | set of system functions a clock event device will be used to support. This | ||
95 | includes the distinction of per-CPU and per-system global event devices. | ||
96 | |||
97 | System-level global event devices are used for the Linux periodic tick. Per-CPU | ||
98 | event devices are used to provide local CPU functionality such as process | ||
99 | accounting, profiling, and high resolution timers. | ||
100 | |||
101 | The management layer assignes one or more of the folliwing functions to a clock | ||
102 | event device: | ||
103 | - system global periodic tick (jiffies update) | ||
104 | - cpu local update_process_times | ||
105 | - cpu local profiling | ||
106 | - cpu local next event interrupt (non periodic mode) | ||
107 | |||
108 | The clock event device delegates the selection of those timer interrupt related | ||
109 | functions completely to the management layer. The clock management layer stores | ||
110 | a function pointer in the device description structure, which has to be called | ||
111 | from the hardware level handler. This removes a lot of duplicated code from the | ||
112 | architecture specific timer interrupt handlers and hands the control over the | ||
113 | clock event devices and the assignment of timer interrupt related functionality | ||
114 | to the core code. | ||
115 | |||
116 | The clock event layer API is rather small. Aside from the clock event device | ||
117 | registration interface it provides functions to schedule the next event | ||
118 | interrupt, clock event device notification service and support for suspend and | ||
119 | resume. | ||
120 | |||
121 | The framework adds about 700 lines of code which results in a 2KB increase of | ||
122 | the kernel binary size. The conversion of i386 removes about 100 lines of | ||
123 | code. The binary size decrease is in the range of 400 byte. We believe that the | ||
124 | increase of flexibility and the avoidance of duplicated code across | ||
125 | architectures justifies the slight increase of the binary size. | ||
126 | |||
127 | The conversion of an architecture has no functional impact, but allows to | ||
128 | utilize the high resolution and dynamic tick functionalites without any change | ||
129 | to the clock event device and timer interrupt code. After the conversion the | ||
130 | enabling of high resolution timers and dynamic ticks is simply provided by | ||
131 | adding the kernel/time/Kconfig file to the architecture specific Kconfig and | ||
132 | adding the dynamic tick specific calls to the idle routine (a total of 3 lines | ||
133 | added to the idle function and the Kconfig file) | ||
134 | |||
135 | Figure #4 (OLS slides p.20) illustrates the transformation. | ||
136 | |||
137 | |||
138 | high resolution timer functionality | ||
139 | ----------------------------------- | ||
140 | |||
141 | During system boot it is not possible to use the high resolution timer | ||
142 | functionality, while making it possible would be difficult and would serve no | ||
143 | useful function. The initialization of the clock event device framework, the | ||
144 | clock source framework (GTOD) and hrtimers itself has to be done and | ||
145 | appropriate clock sources and clock event devices have to be registered before | ||
146 | the high resolution functionality can work. Up to the point where hrtimers are | ||
147 | initialized, the system works in the usual low resolution periodic mode. The | ||
148 | clock source and the clock event device layers provide notification functions | ||
149 | which inform hrtimers about availability of new hardware. hrtimers validates | ||
150 | the usability of the registered clock sources and clock event devices before | ||
151 | switching to high resolution mode. This ensures also that a kernel which is | ||
152 | configured for high resolution timers can run on a system which lacks the | ||
153 | necessary hardware support. | ||
154 | |||
155 | The high resolution timer code does not support SMP machines which have only | ||
156 | global clock event devices. The support of such hardware would involve IPI | ||
157 | calls when an interrupt happens. The overhead would be much larger than the | ||
158 | benefit. This is the reason why we currently disable high resolution and | ||
159 | dynamic ticks on i386 SMP systems which stop the local APIC in C3 power | ||
160 | state. A workaround is available as an idea, but the problem has not been | ||
161 | tackled yet. | ||
162 | |||
163 | The time ordered insertion of timers provides all the infrastructure to decide | ||
164 | whether the event device has to be reprogrammed when a timer is added. The | ||
165 | decision is made per timer base and synchronized across per-cpu timer bases in | ||
166 | a support function. The design allows the system to utilize separate per-CPU | ||
167 | clock event devices for the per-CPU timer bases, but currently only one | ||
168 | reprogrammable clock event device per-CPU is utilized. | ||
169 | |||
170 | When the timer interrupt happens, the next event interrupt handler is called | ||
171 | from the clock event distribution code and moves expired timers from the | ||
172 | red-black tree to a separate double linked list and invokes the softirq | ||
173 | handler. An additional mode field in the hrtimer structure allows the system to | ||
174 | execute callback functions directly from the next event interrupt handler. This | ||
175 | is restricted to code which can safely be executed in the hard interrupt | ||
176 | context. This applies, for example, to the common case of a wakeup function as | ||
177 | used by nanosleep. The advantage of executing the handler in the interrupt | ||
178 | context is the avoidance of up to two context switches - from the interrupted | ||
179 | context to the softirq and to the task which is woken up by the expired | ||
180 | timer. | ||
181 | |||
182 | Once a system has switched to high resolution mode, the periodic tick is | ||
183 | switched off. This disables the per system global periodic clock event device - | ||
184 | e.g. the PIT on i386 SMP systems. | ||
185 | |||
186 | The periodic tick functionality is provided by an per-cpu hrtimer. The callback | ||
187 | function is executed in the next event interrupt context and updates jiffies | ||
188 | and calls update_process_times and profiling. The implementation of the hrtimer | ||
189 | based periodic tick is designed to be extended with dynamic tick functionality. | ||
190 | This allows to use a single clock event device to schedule high resolution | ||
191 | timer and periodic events (jiffies tick, profiling, process accounting) on UP | ||
192 | systems. This has been proved to work with the PIT on i386 and the Incrementer | ||
193 | on PPC. | ||
194 | |||
195 | The softirq for running the hrtimer queues and executing the callbacks has been | ||
196 | separated from the tick bound timer softirq to allow accurate delivery of high | ||
197 | resolution timer signals which are used by itimer and POSIX interval | ||
198 | timers. The execution of this softirq can still be delayed by other softirqs, | ||
199 | but the overall latencies have been significantly improved by this separation. | ||
200 | |||
201 | Figure #5 (OLS slides p.22) illustrates the transformation. | ||
202 | |||
203 | |||
204 | dynamic ticks | ||
205 | ------------- | ||
206 | |||
207 | Dynamic ticks are the logical consequence of the hrtimer based periodic tick | ||
208 | replacement (sched_tick). The functionality of the sched_tick hrtimer is | ||
209 | extended by three functions: | ||
210 | |||
211 | - hrtimer_stop_sched_tick | ||
212 | - hrtimer_restart_sched_tick | ||
213 | - hrtimer_update_jiffies | ||
214 | |||
215 | hrtimer_stop_sched_tick() is called when a CPU goes into idle state. The code | ||
216 | evaluates the next scheduled timer event (from both hrtimers and the timer | ||
217 | wheel) and in case that the next event is further away than the next tick it | ||
218 | reprograms the sched_tick to this future event, to allow longer idle sleeps | ||
219 | without worthless interruption by the periodic tick. The function is also | ||
220 | called when an interrupt happens during the idle period, which does not cause a | ||
221 | reschedule. The call is necessary as the interrupt handler might have armed a | ||
222 | new timer whose expiry time is before the time which was identified as the | ||
223 | nearest event in the previous call to hrtimer_stop_sched_tick. | ||
224 | |||
225 | hrtimer_restart_sched_tick() is called when the CPU leaves the idle state before | ||
226 | it calls schedule(). hrtimer_restart_sched_tick() resumes the periodic tick, | ||
227 | which is kept active until the next call to hrtimer_stop_sched_tick(). | ||
228 | |||
229 | hrtimer_update_jiffies() is called from irq_enter() when an interrupt happens | ||
230 | in the idle period to make sure that jiffies are up to date and the interrupt | ||
231 | handler has not to deal with an eventually stale jiffy value. | ||
232 | |||
233 | The dynamic tick feature provides statistical values which are exported to | ||
234 | userspace via /proc/stats and can be made available for enhanced power | ||
235 | management control. | ||
236 | |||
237 | The implementation leaves room for further development like full tickless | ||
238 | systems, where the time slice is controlled by the scheduler, variable | ||
239 | frequency profiling, and a complete removal of jiffies in the future. | ||
240 | |||
241 | |||
242 | Aside the current initial submission of i386 support, the patchset has been | ||
243 | extended to x86_64 and ARM already. Initial (work in progress) support is also | ||
244 | available for MIPS and PowerPC. | ||
245 | |||
246 | Thomas, Ingo | ||
247 | |||
248 | |||
249 | |||
diff --git a/Documentation/hrtimers.txt b/Documentation/hrtimers/hrtimers.txt index ce31f65e12e7..ce31f65e12e7 100644 --- a/Documentation/hrtimers.txt +++ b/Documentation/hrtimers/hrtimers.txt | |||
diff --git a/Documentation/i2c/busses/i2c-i801 b/Documentation/i2c/busses/i2c-i801 index 3db69a086c41..c34f0db78a30 100644 --- a/Documentation/i2c/busses/i2c-i801 +++ b/Documentation/i2c/busses/i2c-i801 | |||
@@ -48,14 +48,9 @@ following: | |||
48 | The SMBus controller is function 3 in device 1f. Class 0c05 is SMBus Serial | 48 | The SMBus controller is function 3 in device 1f. Class 0c05 is SMBus Serial |
49 | Controller. | 49 | Controller. |
50 | 50 | ||
51 | If you do NOT see the 24x3 device at function 3, and you can't figure out | ||
52 | any way in the BIOS to enable it, | ||
53 | |||
54 | The ICH chips are quite similar to Intel's PIIX4 chip, at least in the | 51 | The ICH chips are quite similar to Intel's PIIX4 chip, at least in the |
55 | SMBus controller. | 52 | SMBus controller. |
56 | 53 | ||
57 | See the file i2c-piix4 for some additional information. | ||
58 | |||
59 | 54 | ||
60 | Process Call Support | 55 | Process Call Support |
61 | -------------------- | 56 | -------------------- |
@@ -74,6 +69,61 @@ SMBus 2.0 Support | |||
74 | 69 | ||
75 | The 82801DB (ICH4) and later chips support several SMBus 2.0 features. | 70 | The 82801DB (ICH4) and later chips support several SMBus 2.0 features. |
76 | 71 | ||
72 | |||
73 | Hidden ICH SMBus | ||
74 | ---------------- | ||
75 | |||
76 | If your system has an Intel ICH south bridge, but you do NOT see the | ||
77 | SMBus device at 00:1f.3 in lspci, and you can't figure out any way in the | ||
78 | BIOS to enable it, it means it has been hidden by the BIOS code. Asus is | ||
79 | well known for first doing this on their P4B motherboard, and many other | ||
80 | boards after that. Some vendor machines are affected as well. | ||
81 | |||
82 | The first thing to try is the "i2c_ec" ACPI driver. It could be that the | ||
83 | SMBus was hidden on purpose because it'll be driven by ACPI. If the | ||
84 | i2c_ec driver works for you, just forget about the i2c-i801 driver and | ||
85 | don't try to unhide the ICH SMBus. Even if i2c_ec doesn't work, you | ||
86 | better make sure that the SMBus isn't used by the ACPI code. Try loading | ||
87 | the "fan" and "thermal" drivers, and check in /proc/acpi/fan and | ||
88 | /proc/acpi/thermal_zone. If you find anything there, it's likely that | ||
89 | the ACPI is accessing the SMBus and it's safer not to unhide it. Only | ||
90 | once you are certain that ACPI isn't using the SMBus, you can attempt | ||
91 | to unhide it. | ||
92 | |||
93 | In order to unhide the SMBus, we need to change the value of a PCI | ||
94 | register before the kernel enumerates the PCI devices. This is done in | ||
95 | drivers/pci/quirks.c, where all affected boards must be listed (see | ||
96 | function asus_hides_smbus_hostbridge.) If the SMBus device is missing, | ||
97 | and you think there's something interesting on the SMBus (e.g. a | ||
98 | hardware monitoring chip), you need to add your board to the list. | ||
99 | |||
100 | The motherboard is identified using the subvendor and subdevice IDs of the | ||
101 | host bridge PCI device. Get yours with "lspci -n -v -s 00:00.0": | ||
102 | |||
103 | 00:00.0 Class 0600: 8086:2570 (rev 02) | ||
104 | Subsystem: 1043:80f2 | ||
105 | Flags: bus master, fast devsel, latency 0 | ||
106 | Memory at fc000000 (32-bit, prefetchable) [size=32M] | ||
107 | Capabilities: [e4] #09 [2106] | ||
108 | Capabilities: [a0] AGP version 3.0 | ||
109 | |||
110 | Here the host bridge ID is 2570 (82865G/PE/P), the subvendor ID is 1043 | ||
111 | (Asus) and the subdevice ID is 80f2 (P4P800-X). You can find the symbolic | ||
112 | names for the bridge ID and the subvendor ID in include/linux/pci_ids.h, | ||
113 | and then add a case for your subdevice ID at the right place in | ||
114 | drivers/pci/quirks.c. Then please give it very good testing, to make sure | ||
115 | that the unhidden SMBus doesn't conflict with e.g. ACPI. | ||
116 | |||
117 | If it works, proves useful (i.e. there are usable chips on the SMBus) | ||
118 | and seems safe, please submit a patch for inclusion into the kernel. | ||
119 | |||
120 | Note: There's a useful script in lm_sensors 2.10.2 and later, named | ||
121 | unhide_ICH_SMBus (in prog/hotplug), which uses the fakephp driver to | ||
122 | temporarily unhide the SMBus without having to patch and recompile your | ||
123 | kernel. It's very convenient if you just want to check if there's | ||
124 | anything interesting on your hidden ICH SMBus. | ||
125 | |||
126 | |||
77 | ********************** | 127 | ********************** |
78 | The lm_sensors project gratefully acknowledges the support of Texas | 128 | The lm_sensors project gratefully acknowledges the support of Texas |
79 | Instruments in the initial development of this driver. | 129 | Instruments in the initial development of this driver. |
diff --git a/Documentation/i2c/busses/i2c-parport b/Documentation/i2c/busses/i2c-parport index 77b995dfca22..dceaba1ad930 100644 --- a/Documentation/i2c/busses/i2c-parport +++ b/Documentation/i2c/busses/i2c-parport | |||
@@ -19,6 +19,7 @@ It currently supports the following devices: | |||
19 | * (type=4) Analog Devices ADM1032 evaluation board | 19 | * (type=4) Analog Devices ADM1032 evaluation board |
20 | * (type=5) Analog Devices evaluation boards: ADM1025, ADM1030, ADM1031 | 20 | * (type=5) Analog Devices evaluation boards: ADM1025, ADM1030, ADM1031 |
21 | * (type=6) Barco LPT->DVI (K5800236) adapter | 21 | * (type=6) Barco LPT->DVI (K5800236) adapter |
22 | * (type=7) One For All JP1 parallel port adapter | ||
22 | 23 | ||
23 | These devices use different pinout configurations, so you have to tell | 24 | These devices use different pinout configurations, so you have to tell |
24 | the driver what you have, using the type module parameter. There is no | 25 | the driver what you have, using the type module parameter. There is no |
@@ -157,3 +158,17 @@ many more, using /dev/velleman. | |||
157 | http://home.wanadoo.nl/hihihi/libk8005.htm | 158 | http://home.wanadoo.nl/hihihi/libk8005.htm |
158 | http://struyve.mine.nu:8080/index.php?block=k8000 | 159 | http://struyve.mine.nu:8080/index.php?block=k8000 |
159 | http://sourceforge.net/projects/libk8005/ | 160 | http://sourceforge.net/projects/libk8005/ |
161 | |||
162 | |||
163 | One For All JP1 parallel port adapter | ||
164 | ------------------------------------- | ||
165 | |||
166 | The JP1 project revolves around a set of remote controls which expose | ||
167 | the I2C bus their internal configuration EEPROM lives on via a 6 pin | ||
168 | jumper in the battery compartment. More details can be found at: | ||
169 | |||
170 | http://www.hifi-remote.com/jp1/ | ||
171 | |||
172 | Details of the simple parallel port hardware can be found at: | ||
173 | |||
174 | http://www.hifi-remote.com/jp1/hardware.shtml | ||
diff --git a/Documentation/i2c/busses/i2c-piix4 b/Documentation/i2c/busses/i2c-piix4 index 921476333235..7cbe43fa2701 100644 --- a/Documentation/i2c/busses/i2c-piix4 +++ b/Documentation/i2c/busses/i2c-piix4 | |||
@@ -6,7 +6,7 @@ Supported adapters: | |||
6 | Datasheet: Publicly available at the Intel website | 6 | Datasheet: Publicly available at the Intel website |
7 | * ServerWorks OSB4, CSB5, CSB6 and HT-1000 southbridges | 7 | * ServerWorks OSB4, CSB5, CSB6 and HT-1000 southbridges |
8 | Datasheet: Only available via NDA from ServerWorks | 8 | Datasheet: Only available via NDA from ServerWorks |
9 | * ATI IXP southbridges IXP200, IXP300, IXP400 | 9 | * ATI IXP200, IXP300, IXP400 and SB600 southbridges |
10 | Datasheet: Not publicly available | 10 | Datasheet: Not publicly available |
11 | * Standard Microsystems (SMSC) SLC90E66 (Victory66) southbridge | 11 | * Standard Microsystems (SMSC) SLC90E66 (Victory66) southbridge |
12 | Datasheet: Publicly available at the SMSC website http://www.smsc.com | 12 | Datasheet: Publicly available at the SMSC website http://www.smsc.com |
diff --git a/Documentation/i2c/busses/i2c-viapro b/Documentation/i2c/busses/i2c-viapro index 25680346e0ac..775f489e86f6 100644 --- a/Documentation/i2c/busses/i2c-viapro +++ b/Documentation/i2c/busses/i2c-viapro | |||
@@ -13,6 +13,9 @@ Supported adapters: | |||
13 | * VIA Technologies, Inc. VT8235, VT8237R, VT8237A, VT8251 | 13 | * VIA Technologies, Inc. VT8235, VT8237R, VT8237A, VT8251 |
14 | Datasheet: available on request and under NDA from VIA | 14 | Datasheet: available on request and under NDA from VIA |
15 | 15 | ||
16 | * VIA Technologies, Inc. CX700 | ||
17 | Datasheet: available on request and under NDA from VIA | ||
18 | |||
16 | Authors: | 19 | Authors: |
17 | Kyösti Mälkki <kmalkki@cc.hut.fi>, | 20 | Kyösti Mälkki <kmalkki@cc.hut.fi>, |
18 | Mark D. Studebaker <mdsxyz123@yahoo.com>, | 21 | Mark D. Studebaker <mdsxyz123@yahoo.com>, |
@@ -44,6 +47,7 @@ Your lspci -n listing must show one of these : | |||
44 | device 1106:3227 (VT8237R) | 47 | device 1106:3227 (VT8237R) |
45 | device 1106:3337 (VT8237A) | 48 | device 1106:3337 (VT8237A) |
46 | device 1106:3287 (VT8251) | 49 | device 1106:3287 (VT8251) |
50 | device 1106:8324 (CX700) | ||
47 | 51 | ||
48 | If none of these show up, you should look in the BIOS for settings like | 52 | If none of these show up, you should look in the BIOS for settings like |
49 | enable ACPI / SMBus or even USB. | 53 | enable ACPI / SMBus or even USB. |
@@ -51,3 +55,6 @@ enable ACPI / SMBus or even USB. | |||
51 | Except for the oldest chips (VT82C596A/B, VT82C686A and most probably | 55 | Except for the oldest chips (VT82C596A/B, VT82C686A and most probably |
52 | VT8231), this driver supports I2C block transactions. Such transactions | 56 | VT8231), this driver supports I2C block transactions. Such transactions |
53 | are mainly useful to read from and write to EEPROMs. | 57 | are mainly useful to read from and write to EEPROMs. |
58 | |||
59 | The CX700 additionally appears to support SMBus PEC, although this driver | ||
60 | doesn't implement it yet. | ||
diff --git a/Documentation/i2c/porting-clients b/Documentation/i2c/porting-clients index f03c2a02f806..ca272b263a92 100644 --- a/Documentation/i2c/porting-clients +++ b/Documentation/i2c/porting-clients | |||
@@ -129,6 +129,12 @@ Technical changes: | |||
129 | structure, those name member should be initialized to a driver name | 129 | structure, those name member should be initialized to a driver name |
130 | string. i2c_driver itself has no name member anymore. | 130 | string. i2c_driver itself has no name member anymore. |
131 | 131 | ||
132 | * [Driver model] Instead of shutdown or reboot notifiers, provide a | ||
133 | shutdown() method in your driver. | ||
134 | |||
135 | * [Power management] Use the driver model suspend() and resume() | ||
136 | callbacks instead of the obsolete pm_register() calls. | ||
137 | |||
132 | Coding policy: | 138 | Coding policy: |
133 | 139 | ||
134 | * [Copyright] Use (C), not (c), for copyright. | 140 | * [Copyright] Use (C), not (c), for copyright. |
diff --git a/Documentation/i2c/smbus-protocol b/Documentation/i2c/smbus-protocol index 09f5e5ca4927..8a653c60d25a 100644 --- a/Documentation/i2c/smbus-protocol +++ b/Documentation/i2c/smbus-protocol | |||
@@ -97,7 +97,7 @@ SMBus Write Word Data | |||
97 | ===================== | 97 | ===================== |
98 | 98 | ||
99 | This is the opposite operation of the Read Word Data command. 16 bits | 99 | This is the opposite operation of the Read Word Data command. 16 bits |
100 | of data is read from a device, from a designated register that is | 100 | of data is written to a device, to the designated register that is |
101 | specified through the Comm byte. | 101 | specified through the Comm byte. |
102 | 102 | ||
103 | S Addr Wr [A] Comm [A] DataLow [A] DataHigh [A] P | 103 | S Addr Wr [A] Comm [A] DataLow [A] DataHigh [A] P |
diff --git a/Documentation/i2c/writing-clients b/Documentation/i2c/writing-clients index 3a057c8e5507..fbcff96f4ca1 100644 --- a/Documentation/i2c/writing-clients +++ b/Documentation/i2c/writing-clients | |||
@@ -21,20 +21,26 @@ The driver structure | |||
21 | 21 | ||
22 | Usually, you will implement a single driver structure, and instantiate | 22 | Usually, you will implement a single driver structure, and instantiate |
23 | all clients from it. Remember, a driver structure contains general access | 23 | all clients from it. Remember, a driver structure contains general access |
24 | routines, a client structure specific information like the actual I2C | 24 | routines, and should be zero-initialized except for fields with data you |
25 | address. | 25 | provide. A client structure holds device-specific information like the |
26 | driver model device node, and its I2C address. | ||
26 | 27 | ||
27 | static struct i2c_driver foo_driver = { | 28 | static struct i2c_driver foo_driver = { |
28 | .driver = { | 29 | .driver = { |
29 | .name = "foo", | 30 | .name = "foo", |
30 | }, | 31 | }, |
31 | .attach_adapter = &foo_attach_adapter, | 32 | .attach_adapter = foo_attach_adapter, |
32 | .detach_client = &foo_detach_client, | 33 | .detach_client = foo_detach_client, |
33 | .command = &foo_command /* may be NULL */ | 34 | .shutdown = foo_shutdown, /* optional */ |
35 | .suspend = foo_suspend, /* optional */ | ||
36 | .resume = foo_resume, /* optional */ | ||
37 | .command = foo_command, /* optional */ | ||
34 | } | 38 | } |
35 | 39 | ||
36 | The name field must match the driver name, including the case. It must not | 40 | The name field is the driver name, and must not contain spaces. It |
37 | contain spaces, and may be up to 31 characters long. | 41 | should match the module name (if the driver can be compiled as a module), |
42 | although you can use MODULE_ALIAS (passing "foo" in this example) to add | ||
43 | another name for the module. | ||
38 | 44 | ||
39 | All other fields are for call-back functions which will be explained | 45 | All other fields are for call-back functions which will be explained |
40 | below. | 46 | below. |
@@ -43,11 +49,18 @@ below. | |||
43 | Extra client data | 49 | Extra client data |
44 | ================= | 50 | ================= |
45 | 51 | ||
46 | The client structure has a special `data' field that can point to any | 52 | Each client structure has a special `data' field that can point to any |
47 | structure at all. You can use this to keep client-specific data. You | 53 | structure at all. You should use this to keep device-specific data, |
54 | especially in drivers that handle multiple I2C or SMBUS devices. You | ||
48 | do not always need this, but especially for `sensors' drivers, it can | 55 | do not always need this, but especially for `sensors' drivers, it can |
49 | be very useful. | 56 | be very useful. |
50 | 57 | ||
58 | /* store the value */ | ||
59 | void i2c_set_clientdata(struct i2c_client *client, void *data); | ||
60 | |||
61 | /* retrieve the value */ | ||
62 | void *i2c_get_clientdata(struct i2c_client *client); | ||
63 | |||
51 | An example structure is below. | 64 | An example structure is below. |
52 | 65 | ||
53 | struct foo_data { | 66 | struct foo_data { |
@@ -493,6 +506,33 @@ by `__init_data'. Hose functions and structures can be removed after | |||
493 | kernel booting (or module loading) is completed. | 506 | kernel booting (or module loading) is completed. |
494 | 507 | ||
495 | 508 | ||
509 | Power Management | ||
510 | ================ | ||
511 | |||
512 | If your I2C device needs special handling when entering a system low | ||
513 | power state -- like putting a transceiver into a low power mode, or | ||
514 | activating a system wakeup mechanism -- do that in the suspend() method. | ||
515 | The resume() method should reverse what the suspend() method does. | ||
516 | |||
517 | These are standard driver model calls, and they work just like they | ||
518 | would for any other driver stack. The calls can sleep, and can use | ||
519 | I2C messaging to the device being suspended or resumed (since their | ||
520 | parent I2C adapter is active when these calls are issued, and IRQs | ||
521 | are still enabled). | ||
522 | |||
523 | |||
524 | System Shutdown | ||
525 | =============== | ||
526 | |||
527 | If your I2C device needs special handling when the system shuts down | ||
528 | or reboots (including kexec) -- like turning something off -- use a | ||
529 | shutdown() method. | ||
530 | |||
531 | Again, this is a standard driver model call, working just like it | ||
532 | would for any other driver stack: the calls can sleep, and can use | ||
533 | I2C messaging. | ||
534 | |||
535 | |||
496 | Command function | 536 | Command function |
497 | ================ | 537 | ================ |
498 | 538 | ||
diff --git a/Documentation/ioctl-number.txt b/Documentation/ioctl-number.txt index 5a8bd5bd88ef..8f750c0efed5 100644 --- a/Documentation/ioctl-number.txt +++ b/Documentation/ioctl-number.txt | |||
@@ -94,8 +94,7 @@ Code Seq# Include File Comments | |||
94 | 'L' 00-1F linux/loop.h | 94 | 'L' 00-1F linux/loop.h |
95 | 'L' E0-FF linux/ppdd.h encrypted disk device driver | 95 | 'L' E0-FF linux/ppdd.h encrypted disk device driver |
96 | <http://linux01.gwdg.de/~alatham/ppdd.html> | 96 | <http://linux01.gwdg.de/~alatham/ppdd.html> |
97 | 'M' all linux/soundcard.h conflict! | 97 | 'M' all linux/soundcard.h |
98 | 'M' 00-1F linux/isicom.h conflict! | ||
99 | 'N' 00-1F drivers/usb/scanner.h | 98 | 'N' 00-1F drivers/usb/scanner.h |
100 | 'P' all linux/soundcard.h | 99 | 'P' all linux/soundcard.h |
101 | 'Q' all linux/soundcard.h | 100 | 'Q' all linux/soundcard.h |
diff --git a/Documentation/isdn/README.gigaset b/Documentation/isdn/README.gigaset index fa0d4cca964a..55b2852904a4 100644 --- a/Documentation/isdn/README.gigaset +++ b/Documentation/isdn/README.gigaset | |||
@@ -8,29 +8,33 @@ GigaSet 307x Device Driver | |||
8 | This release supports the connection of the Gigaset 307x/417x family of | 8 | This release supports the connection of the Gigaset 307x/417x family of |
9 | ISDN DECT bases via Gigaset M101 Data, Gigaset M105 Data or direct USB | 9 | ISDN DECT bases via Gigaset M101 Data, Gigaset M105 Data or direct USB |
10 | connection. The following devices are reported to be compatible: | 10 | connection. The following devices are reported to be compatible: |
11 | 307x/417x: | 11 | |
12 | Gigaset SX255isdn | 12 | Bases: |
13 | Gigaset SX353isdn | 13 | Siemens Gigaset 3070/3075 isdn |
14 | Sinus 45 [AB] isdn (Deutsche Telekom) | 14 | Siemens Gigaset 4170/4175 isdn |
15 | Sinus 721X/XA | 15 | Siemens Gigaset SX205/255 |
16 | Siemens Gigaset SX353 | ||
17 | T-Com Sinus 45 [AB] isdn | ||
18 | T-Com Sinus 721X[A] [SE] | ||
16 | Vox Chicago 390 ISDN (KPN Telecom) | 19 | Vox Chicago 390 ISDN (KPN Telecom) |
17 | M101: | 20 | |
18 | Sinus 45 Data 1 (Telekom) | 21 | RS232 data boxes: |
19 | M105: | 22 | Siemens Gigaset M101 Data |
20 | Gigaset USB Adapter DECT | 23 | T-Com Sinus 45 Data 1 |
21 | Sinus 45 Data 2 (Telekom) | 24 | |
22 | Sinus 721 data | 25 | USB data boxes: |
26 | Siemens Gigaset M105 Data | ||
27 | Siemens Gigaset USB Adapter DECT | ||
28 | T-Com Sinus 45 Data 2 | ||
29 | T-Com Sinus 721 data | ||
23 | Chicago 390 USB (KPN) | 30 | Chicago 390 USB (KPN) |
31 | |||
24 | See also http://www.erbze.info/sinus_gigaset.htm and | 32 | See also http://www.erbze.info/sinus_gigaset.htm and |
25 | http://gigaset307x.sourceforge.net/ | 33 | http://gigaset307x.sourceforge.net/ |
26 | 34 | ||
27 | We had also reports from users of Gigaset M105 who could use the drivers | 35 | We had also reports from users of Gigaset M105 who could use the drivers |
28 | with SX 100 and CX 100 ISDN bases (only in unimodem mode, see section 2.4.) | 36 | with SX 100 and CX 100 ISDN bases (only in unimodem mode, see section 2.4.) |
29 | If you have another device that works with our driver, please let us know. | 37 | If you have another device that works with our driver, please let us know. |
30 | For example, Gigaset SX205isdn/Sinus 721 X SE and Gigaset SX303isdn bases | ||
31 | are just versions without answering machine of models known to work, so | ||
32 | they should work just as well; but so far we are lacking positive reports | ||
33 | on these. | ||
34 | 38 | ||
35 | Chances of getting an USB device to work are good if the output of | 39 | Chances of getting an USB device to work are good if the output of |
36 | lsusb | 40 | lsusb |
@@ -60,14 +64,28 @@ GigaSet 307x Device Driver | |||
60 | To get the device working, you have to load the proper kernel module. You | 64 | To get the device working, you have to load the proper kernel module. You |
61 | can do this using | 65 | can do this using |
62 | modprobe modulename | 66 | modprobe modulename |
63 | where modulename is usb_gigaset (M105) or bas_gigaset (direct USB | 67 | where modulename is ser_gigaset (M101), usb_gigaset (M105), or |
64 | connection to the base). | 68 | bas_gigaset (direct USB connection to the base). |
69 | |||
70 | The module ser_gigaset provides a serial line discipline N_GIGASET_M101 | ||
71 | which drives the device through the regular serial line driver. To use it, | ||
72 | run the Gigaset M101 daemon "gigasetm101d" (also available from | ||
73 | http://sourceforge.net/projects/gigaset307x/) with the device file of the | ||
74 | RS232 port to the M101 as an argument, for example: | ||
75 | gigasetm101d /dev/ttyS1 | ||
76 | This will open the device file, set its line discipline to N_GIGASET_M101, | ||
77 | and then sleep in the background, keeping the device open so that the | ||
78 | line discipline remains active. To deactivate it, kill the daemon, for | ||
79 | example with | ||
80 | killall gigasetm101d | ||
81 | before disconnecting the device. | ||
65 | 82 | ||
66 | 2.2. Device nodes for user space programs | 83 | 2.2. Device nodes for user space programs |
67 | ------------------------------------ | 84 | ------------------------------------ |
68 | The device can be accessed from user space (eg. by the user space tools | 85 | The device can be accessed from user space (eg. by the user space tools |
69 | mentioned in 1.2.) through the device nodes: | 86 | mentioned in 1.2.) through the device nodes: |
70 | 87 | ||
88 | - /dev/ttyGS0 for M101 (RS232 data boxes) | ||
71 | - /dev/ttyGU0 for M105 (USB data boxes) | 89 | - /dev/ttyGU0 for M105 (USB data boxes) |
72 | - /dev/ttyGB0 for the base driver (direct USB connection) | 90 | - /dev/ttyGB0 for the base driver (direct USB connection) |
73 | 91 | ||
@@ -168,6 +186,19 @@ GigaSet 307x Device Driver | |||
168 | You can also use /sys/class/tty/ttyGxy/cidmode for changing the CID mode | 186 | You can also use /sys/class/tty/ttyGxy/cidmode for changing the CID mode |
169 | setting (ttyGxy is ttyGU0 or ttyGB0). | 187 | setting (ttyGxy is ttyGU0 or ttyGB0). |
170 | 188 | ||
189 | 2.6. M105 Undocumented USB Requests | ||
190 | ------------------------------ | ||
191 | |||
192 | The Gigaset M105 USB data box understands a couple of useful, but | ||
193 | undocumented USB commands. These requests are not used in normal | ||
194 | operation (for wireless access to the base), but are needed for access | ||
195 | to the M105's own configuration mode (registration to the base, baudrate | ||
196 | and line format settings, device status queries) via the gigacontr | ||
197 | utility. Their use is disabled in the driver by default for safety | ||
198 | reasons but can be enabled by setting the kernel configuration option | ||
199 | "Support for undocumented USB requests" (GIGASET_UNDOCREQ) to "Y" and | ||
200 | recompiling. | ||
201 | |||
171 | 202 | ||
172 | 3. Troubleshooting | 203 | 3. Troubleshooting |
173 | --------------- | 204 | --------------- |
diff --git a/Documentation/kdump/kdump.txt b/Documentation/kdump/kdump.txt index 073306818347..79775a4130b5 100644 --- a/Documentation/kdump/kdump.txt +++ b/Documentation/kdump/kdump.txt | |||
@@ -311,10 +311,10 @@ Following are the arch specific command line options to be used while | |||
311 | loading dump-capture kernel. | 311 | loading dump-capture kernel. |
312 | 312 | ||
313 | For i386, x86_64 and ia64: | 313 | For i386, x86_64 and ia64: |
314 | "init 1 irqpoll maxcpus=1" | 314 | "1 irqpoll maxcpus=1" |
315 | 315 | ||
316 | For ppc64: | 316 | For ppc64: |
317 | "init 1 maxcpus=1 noirqdistrib" | 317 | "1 maxcpus=1 noirqdistrib" |
318 | 318 | ||
319 | 319 | ||
320 | Notes on loading the dump-capture kernel: | 320 | Notes on loading the dump-capture kernel: |
@@ -332,8 +332,8 @@ Notes on loading the dump-capture kernel: | |||
332 | * You must specify <root-dev> in the format corresponding to the root | 332 | * You must specify <root-dev> in the format corresponding to the root |
333 | device name in the output of mount command. | 333 | device name in the output of mount command. |
334 | 334 | ||
335 | * "init 1" boots the dump-capture kernel into single-user mode without | 335 | * Boot parameter "1" boots the dump-capture kernel into single-user |
336 | networking. If you want networking, use "init 3." | 336 | mode without networking. If you want networking, use "3". |
337 | 337 | ||
338 | * We generally don' have to bring up a SMP kernel just to capture the | 338 | * We generally don' have to bring up a SMP kernel just to capture the |
339 | dump. Hence generally it is useful either to build a UP dump-capture | 339 | dump. Hence generally it is useful either to build a UP dump-capture |
diff --git a/Documentation/kernel-doc-nano-HOWTO.txt b/Documentation/kernel-doc-nano-HOWTO.txt index 284e7e198e93..2075c0658bf5 100644 --- a/Documentation/kernel-doc-nano-HOWTO.txt +++ b/Documentation/kernel-doc-nano-HOWTO.txt | |||
@@ -101,16 +101,20 @@ The format of the block comment is like this: | |||
101 | 101 | ||
102 | /** | 102 | /** |
103 | * function_name(:)? (- short description)? | 103 | * function_name(:)? (- short description)? |
104 | (* @parameterx: (description of parameter x)?)* | 104 | (* @parameterx(space)*: (description of parameter x)?)* |
105 | (* a blank line)? | 105 | (* a blank line)? |
106 | * (Description:)? (Description of function)? | 106 | * (Description:)? (Description of function)? |
107 | * (section header: (section description)? )* | 107 | * (section header: (section description)? )* |
108 | (*)?*/ | 108 | (*)?*/ |
109 | 109 | ||
110 | The short function description cannot be multiline, but the other | 110 | The short function description ***cannot be multiline***, but the other |
111 | descriptions can be (and they can contain blank lines). Avoid putting a | 111 | descriptions can be (and they can contain blank lines). If you continue |
112 | spurious blank line after the function name, or else the description will | 112 | that initial short description onto a second line, that second line will |
113 | be repeated! | 113 | appear further down at the beginning of the description section, which is |
114 | almost certainly not what you had in mind. | ||
115 | |||
116 | Avoid putting a spurious blank line after the function name, or else the | ||
117 | description will be repeated! | ||
114 | 118 | ||
115 | All descriptive text is further processed, scanning for the following special | 119 | All descriptive text is further processed, scanning for the following special |
116 | patterns, which are highlighted appropriately. | 120 | patterns, which are highlighted appropriately. |
@@ -121,6 +125,31 @@ patterns, which are highlighted appropriately. | |||
121 | '@parameter' - name of a parameter | 125 | '@parameter' - name of a parameter |
122 | '%CONST' - name of a constant. | 126 | '%CONST' - name of a constant. |
123 | 127 | ||
128 | NOTE 1: The multi-line descriptive text you provide does *not* recognize | ||
129 | line breaks, so if you try to format some text nicely, as in: | ||
130 | |||
131 | Return codes | ||
132 | 0 - cool | ||
133 | 1 - invalid arg | ||
134 | 2 - out of memory | ||
135 | |||
136 | this will all run together and produce: | ||
137 | |||
138 | Return codes 0 - cool 1 - invalid arg 2 - out of memory | ||
139 | |||
140 | NOTE 2: If the descriptive text you provide has lines that begin with | ||
141 | some phrase followed by a colon, each of those phrases will be taken as | ||
142 | a new section heading, which means you should similarly try to avoid text | ||
143 | like: | ||
144 | |||
145 | Return codes: | ||
146 | 0: cool | ||
147 | 1: invalid arg | ||
148 | 2: out of memory | ||
149 | |||
150 | every line of which would start a new section. Again, probably not | ||
151 | what you were after. | ||
152 | |||
124 | Take a look around the source tree for examples. | 153 | Take a look around the source tree for examples. |
125 | 154 | ||
126 | 155 | ||
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt index 25d298517104..abd575cfc759 100644 --- a/Documentation/kernel-parameters.txt +++ b/Documentation/kernel-parameters.txt | |||
@@ -104,6 +104,9 @@ loader, and have no meaning to the kernel directly. | |||
104 | Do not modify the syntax of boot loader parameters without extreme | 104 | Do not modify the syntax of boot loader parameters without extreme |
105 | need or coordination with <Documentation/i386/boot.txt>. | 105 | need or coordination with <Documentation/i386/boot.txt>. |
106 | 106 | ||
107 | There are also arch-specific kernel-parameters not documented here. | ||
108 | See for example <Documentation/x86_64/boot-options.txt>. | ||
109 | |||
107 | Note that ALL kernel parameters listed below are CASE SENSITIVE, and that | 110 | Note that ALL kernel parameters listed below are CASE SENSITIVE, and that |
108 | a trailing = on the name of any parameter states that that parameter will | 111 | a trailing = on the name of any parameter states that that parameter will |
109 | be entered as an environment variable, whereas its absence indicates that | 112 | be entered as an environment variable, whereas its absence indicates that |
@@ -361,6 +364,11 @@ and is between 256 and 4096 characters. It is defined in the file | |||
361 | clocksource is not available, it defaults to PIT. | 364 | clocksource is not available, it defaults to PIT. |
362 | Format: { pit | tsc | cyclone | pmtmr } | 365 | Format: { pit | tsc | cyclone | pmtmr } |
363 | 366 | ||
367 | code_bytes [IA32] How many bytes of object code to print in an | ||
368 | oops report. | ||
369 | Range: 0 - 8192 | ||
370 | Default: 64 | ||
371 | |||
364 | disable_8254_timer | 372 | disable_8254_timer |
365 | enable_8254_timer | 373 | enable_8254_timer |
366 | [IA32/X86_64] Disable/Enable interrupt 0 timer routing | 374 | [IA32/X86_64] Disable/Enable interrupt 0 timer routing |
@@ -601,6 +609,10 @@ and is between 256 and 4096 characters. It is defined in the file | |||
601 | highmem otherwise. This also works to reduce highmem | 609 | highmem otherwise. This also works to reduce highmem |
602 | size on bigger boxes. | 610 | size on bigger boxes. |
603 | 611 | ||
612 | highres= [KNL] Enable/disable high resolution timer mode. | ||
613 | Valid parameters: "on", "off" | ||
614 | Default: "on" | ||
615 | |||
604 | hisax= [HW,ISDN] | 616 | hisax= [HW,ISDN] |
605 | See Documentation/isdn/README.HiSax. | 617 | See Documentation/isdn/README.HiSax. |
606 | 618 | ||
@@ -1070,6 +1082,10 @@ and is between 256 and 4096 characters. It is defined in the file | |||
1070 | in certain environments such as networked servers or | 1082 | in certain environments such as networked servers or |
1071 | real-time systems. | 1083 | real-time systems. |
1072 | 1084 | ||
1085 | nohz= [KNL] Boottime enable/disable dynamic ticks | ||
1086 | Valid arguments: on, off | ||
1087 | Default: on | ||
1088 | |||
1073 | noirqbalance [IA-32,SMP,KNL] Disable kernel irq balancing | 1089 | noirqbalance [IA-32,SMP,KNL] Disable kernel irq balancing |
1074 | 1090 | ||
1075 | noirqdebug [IA-32] Disables the code which attempts to detect and | 1091 | noirqdebug [IA-32] Disables the code which attempts to detect and |
@@ -1396,6 +1412,8 @@ and is between 256 and 4096 characters. It is defined in the file | |||
1396 | in <PAGE_SIZE> units (needed only for swap files). | 1412 | in <PAGE_SIZE> units (needed only for swap files). |
1397 | See Documentation/power/swsusp-and-swap-files.txt | 1413 | See Documentation/power/swsusp-and-swap-files.txt |
1398 | 1414 | ||
1415 | retain_initrd [RAM] Keep initrd memory after extraction | ||
1416 | |||
1399 | rhash_entries= [KNL,NET] | 1417 | rhash_entries= [KNL,NET] |
1400 | Set number of hash buckets for route cache | 1418 | Set number of hash buckets for route cache |
1401 | 1419 | ||
diff --git a/Documentation/local_ops.txt b/Documentation/local_ops.txt new file mode 100644 index 000000000000..b0aca0705d1e --- /dev/null +++ b/Documentation/local_ops.txt | |||
@@ -0,0 +1,163 @@ | |||
1 | Semantics and Behavior of Local Atomic Operations | ||
2 | |||
3 | Mathieu Desnoyers | ||
4 | |||
5 | |||
6 | This document explains the purpose of the local atomic operations, how | ||
7 | to implement them for any given architecture and shows how they can be used | ||
8 | properly. It also stresses on the precautions that must be taken when reading | ||
9 | those local variables across CPUs when the order of memory writes matters. | ||
10 | |||
11 | |||
12 | |||
13 | * Purpose of local atomic operations | ||
14 | |||
15 | Local atomic operations are meant to provide fast and highly reentrant per CPU | ||
16 | counters. They minimize the performance cost of standard atomic operations by | ||
17 | removing the LOCK prefix and memory barriers normally required to synchronize | ||
18 | across CPUs. | ||
19 | |||
20 | Having fast per CPU atomic counters is interesting in many cases : it does not | ||
21 | require disabling interrupts to protect from interrupt handlers and it permits | ||
22 | coherent counters in NMI handlers. It is especially useful for tracing purposes | ||
23 | and for various performance monitoring counters. | ||
24 | |||
25 | Local atomic operations only guarantee variable modification atomicity wrt the | ||
26 | CPU which owns the data. Therefore, care must taken to make sure that only one | ||
27 | CPU writes to the local_t data. This is done by using per cpu data and making | ||
28 | sure that we modify it from within a preemption safe context. It is however | ||
29 | permitted to read local_t data from any CPU : it will then appear to be written | ||
30 | out of order wrt other memory writes on the owner CPU. | ||
31 | |||
32 | |||
33 | * Implementation for a given architecture | ||
34 | |||
35 | It can be done by slightly modifying the standard atomic operations : only | ||
36 | their UP variant must be kept. It typically means removing LOCK prefix (on | ||
37 | i386 and x86_64) and any SMP sychronization barrier. If the architecture does | ||
38 | not have a different behavior between SMP and UP, including asm-generic/local.h | ||
39 | in your archtecture's local.h is sufficient. | ||
40 | |||
41 | The local_t type is defined as an opaque signed long by embedding an | ||
42 | atomic_long_t inside a structure. This is made so a cast from this type to a | ||
43 | long fails. The definition looks like : | ||
44 | |||
45 | typedef struct { atomic_long_t a; } local_t; | ||
46 | |||
47 | |||
48 | * How to use local atomic operations | ||
49 | |||
50 | #include <linux/percpu.h> | ||
51 | #include <asm/local.h> | ||
52 | |||
53 | static DEFINE_PER_CPU(local_t, counters) = LOCAL_INIT(0); | ||
54 | |||
55 | |||
56 | * Counting | ||
57 | |||
58 | Counting is done on all the bits of a signed long. | ||
59 | |||
60 | In preemptible context, use get_cpu_var() and put_cpu_var() around local atomic | ||
61 | operations : it makes sure that preemption is disabled around write access to | ||
62 | the per cpu variable. For instance : | ||
63 | |||
64 | local_inc(&get_cpu_var(counters)); | ||
65 | put_cpu_var(counters); | ||
66 | |||
67 | If you are already in a preemption-safe context, you can directly use | ||
68 | __get_cpu_var() instead. | ||
69 | |||
70 | local_inc(&__get_cpu_var(counters)); | ||
71 | |||
72 | |||
73 | |||
74 | * Reading the counters | ||
75 | |||
76 | Those local counters can be read from foreign CPUs to sum the count. Note that | ||
77 | the data seen by local_read across CPUs must be considered to be out of order | ||
78 | relatively to other memory writes happening on the CPU that owns the data. | ||
79 | |||
80 | long sum = 0; | ||
81 | for_each_online_cpu(cpu) | ||
82 | sum += local_read(&per_cpu(counters, cpu)); | ||
83 | |||
84 | If you want to use a remote local_read to synchronize access to a resource | ||
85 | between CPUs, explicit smp_wmb() and smp_rmb() memory barriers must be used | ||
86 | respectively on the writer and the reader CPUs. It would be the case if you use | ||
87 | the local_t variable as a counter of bytes written in a buffer : there should | ||
88 | be a smp_wmb() between the buffer write and the counter increment and also a | ||
89 | smp_rmb() between the counter read and the buffer read. | ||
90 | |||
91 | |||
92 | Here is a sample module which implements a basic per cpu counter using local.h. | ||
93 | |||
94 | --- BEGIN --- | ||
95 | /* test-local.c | ||
96 | * | ||
97 | * Sample module for local.h usage. | ||
98 | */ | ||
99 | |||
100 | |||
101 | #include <asm/local.h> | ||
102 | #include <linux/module.h> | ||
103 | #include <linux/timer.h> | ||
104 | |||
105 | static DEFINE_PER_CPU(local_t, counters) = LOCAL_INIT(0); | ||
106 | |||
107 | static struct timer_list test_timer; | ||
108 | |||
109 | /* IPI called on each CPU. */ | ||
110 | static void test_each(void *info) | ||
111 | { | ||
112 | /* Increment the counter from a non preemptible context */ | ||
113 | printk("Increment on cpu %d\n", smp_processor_id()); | ||
114 | local_inc(&__get_cpu_var(counters)); | ||
115 | |||
116 | /* This is what incrementing the variable would look like within a | ||
117 | * preemptible context (it disables preemption) : | ||
118 | * | ||
119 | * local_inc(&get_cpu_var(counters)); | ||
120 | * put_cpu_var(counters); | ||
121 | */ | ||
122 | } | ||
123 | |||
124 | static void do_test_timer(unsigned long data) | ||
125 | { | ||
126 | int cpu; | ||
127 | |||
128 | /* Increment the counters */ | ||
129 | on_each_cpu(test_each, NULL, 0, 1); | ||
130 | /* Read all the counters */ | ||
131 | printk("Counters read from CPU %d\n", smp_processor_id()); | ||
132 | for_each_online_cpu(cpu) { | ||
133 | printk("Read : CPU %d, count %ld\n", cpu, | ||
134 | local_read(&per_cpu(counters, cpu))); | ||
135 | } | ||
136 | del_timer(&test_timer); | ||
137 | test_timer.expires = jiffies + 1000; | ||
138 | add_timer(&test_timer); | ||
139 | } | ||
140 | |||
141 | static int __init test_init(void) | ||
142 | { | ||
143 | /* initialize the timer that will increment the counter */ | ||
144 | init_timer(&test_timer); | ||
145 | test_timer.function = do_test_timer; | ||
146 | test_timer.expires = jiffies + 1; | ||
147 | add_timer(&test_timer); | ||
148 | |||
149 | return 0; | ||
150 | } | ||
151 | |||
152 | static void __exit test_exit(void) | ||
153 | { | ||
154 | del_timer_sync(&test_timer); | ||
155 | } | ||
156 | |||
157 | module_init(test_init); | ||
158 | module_exit(test_exit); | ||
159 | |||
160 | MODULE_LICENSE("GPL"); | ||
161 | MODULE_AUTHOR("Mathieu Desnoyers"); | ||
162 | MODULE_DESCRIPTION("Local Atomic Ops"); | ||
163 | --- END --- | ||
diff --git a/Documentation/nfsroot.txt b/Documentation/nfsroot.txt index 719f9a9d60c0..16a7cae2721d 100644 --- a/Documentation/nfsroot.txt +++ b/Documentation/nfsroot.txt | |||
@@ -67,8 +67,8 @@ nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>] | |||
67 | <nfs-options> Standard NFS options. All options are separated by commas. | 67 | <nfs-options> Standard NFS options. All options are separated by commas. |
68 | The following defaults are used: | 68 | The following defaults are used: |
69 | port = as given by server portmap daemon | 69 | port = as given by server portmap daemon |
70 | rsize = 1024 | 70 | rsize = 4096 |
71 | wsize = 1024 | 71 | wsize = 4096 |
72 | timeo = 7 | 72 | timeo = 7 |
73 | retrans = 3 | 73 | retrans = 3 |
74 | acregmin = 3 | 74 | acregmin = 3 |
diff --git a/Documentation/powerpc/booting-without-of.txt b/Documentation/powerpc/booting-without-of.txt index 33994271cb3b..3b514672b80e 100644 --- a/Documentation/powerpc/booting-without-of.txt +++ b/Documentation/powerpc/booting-without-of.txt | |||
@@ -1334,6 +1334,9 @@ platforms are moved over to use the flattened-device-tree model. | |||
1334 | fsl-usb2-mph compatible controllers. Either this property or | 1334 | fsl-usb2-mph compatible controllers. Either this property or |
1335 | "port0" (or both) must be defined for "fsl-usb2-mph" compatible | 1335 | "port0" (or both) must be defined for "fsl-usb2-mph" compatible |
1336 | controllers. | 1336 | controllers. |
1337 | - dr_mode : indicates the working mode for "fsl-usb2-dr" compatible | ||
1338 | controllers. Can be "host", "peripheral", or "otg". Default to | ||
1339 | "host" if not defined for backward compatibility. | ||
1337 | 1340 | ||
1338 | Recommended properties : | 1341 | Recommended properties : |
1339 | - interrupts : <a b> where a is the interrupt number and b is a | 1342 | - interrupts : <a b> where a is the interrupt number and b is a |
@@ -1367,6 +1370,7 @@ platforms are moved over to use the flattened-device-tree model. | |||
1367 | #size-cells = <0>; | 1370 | #size-cells = <0>; |
1368 | interrupt-parent = <700>; | 1371 | interrupt-parent = <700>; |
1369 | interrupts = <26 1>; | 1372 | interrupts = <26 1>; |
1373 | dr_mode = "otg"; | ||
1370 | phy = "ulpi"; | 1374 | phy = "ulpi"; |
1371 | }; | 1375 | }; |
1372 | 1376 | ||
diff --git a/Documentation/powerpc/mpc52xx-device-tree-bindings.txt b/Documentation/powerpc/mpc52xx-device-tree-bindings.txt index 69f016f02bb0..e59fcbbe338c 100644 --- a/Documentation/powerpc/mpc52xx-device-tree-bindings.txt +++ b/Documentation/powerpc/mpc52xx-device-tree-bindings.txt | |||
@@ -1,7 +1,7 @@ | |||
1 | MPC52xx Device Tree Bindings | 1 | MPC5200 Device Tree Bindings |
2 | ---------------------------- | 2 | ---------------------------- |
3 | 3 | ||
4 | (c) 2006 Secret Lab Technologies Ltd | 4 | (c) 2006-2007 Secret Lab Technologies Ltd |
5 | Grant Likely <grant.likely at secretlab.ca> | 5 | Grant Likely <grant.likely at secretlab.ca> |
6 | 6 | ||
7 | ********** DRAFT *********** | 7 | ********** DRAFT *********** |
@@ -20,11 +20,11 @@ described in Documentation/powerpc/booting-without-of.txt), or passed | |||
20 | by Open Firmare (IEEE 1275) compatible firmware using an OF compatible | 20 | by Open Firmare (IEEE 1275) compatible firmware using an OF compatible |
21 | client interface API. | 21 | client interface API. |
22 | 22 | ||
23 | This document specifies the requirements on the device-tree for mpc52xx | 23 | This document specifies the requirements on the device-tree for mpc5200 |
24 | based boards. These requirements are above and beyond the details | 24 | based boards. These requirements are above and beyond the details |
25 | specified in either the OpenFirmware spec or booting-without-of.txt | 25 | specified in either the OpenFirmware spec or booting-without-of.txt |
26 | 26 | ||
27 | All new mpc52xx-based boards are expected to match this document. In | 27 | All new mpc5200-based boards are expected to match this document. In |
28 | cases where this document is not sufficient to support a new board port, | 28 | cases where this document is not sufficient to support a new board port, |
29 | this document should be updated as part of adding the new board support. | 29 | this document should be updated as part of adding the new board support. |
30 | 30 | ||
@@ -32,26 +32,26 @@ II - Philosophy | |||
32 | =============== | 32 | =============== |
33 | The core of this document is naming convention. The whole point of | 33 | The core of this document is naming convention. The whole point of |
34 | defining this convention is to reduce or eliminate the number of | 34 | defining this convention is to reduce or eliminate the number of |
35 | special cases required to support a 52xx board. If all 52xx boards | 35 | special cases required to support a 5200 board. If all 5200 boards |
36 | follow the same convention, then generic 52xx support code will work | 36 | follow the same convention, then generic 5200 support code will work |
37 | rather than coding special cases for each new board. | 37 | rather than coding special cases for each new board. |
38 | 38 | ||
39 | This section tries to capture the thought process behind why the naming | 39 | This section tries to capture the thought process behind why the naming |
40 | convention is what it is. | 40 | convention is what it is. |
41 | 41 | ||
42 | 1. Node names | 42 | 1. names |
43 | ------------- | 43 | --------- |
44 | There is strong convention/requirements already established for children | 44 | There is strong convention/requirements already established for children |
45 | of the root node. 'cpus' describes the processor cores, 'memory' | 45 | of the root node. 'cpus' describes the processor cores, 'memory' |
46 | describes memory, and 'chosen' provides boot configuration. Other nodes | 46 | describes memory, and 'chosen' provides boot configuration. Other nodes |
47 | are added to describe devices attached to the processor local bus. | 47 | are added to describe devices attached to the processor local bus. |
48 | |||
48 | Following convention already established with other system-on-chip | 49 | Following convention already established with other system-on-chip |
49 | processors, MPC52xx boards must have an 'soc5200' node as a child of the | 50 | processors, 5200 device trees should use the name 'soc5200' for the |
50 | root node. | 51 | parent node of on chip devices, and the root node should be its parent. |
51 | 52 | ||
52 | The soc5200 node holds child nodes for all on chip devices. Child nodes | 53 | Child nodes are typically named after the configured function. ie. |
53 | are typically named after the configured function. ie. the FEC node is | 54 | the FEC node is named 'ethernet', and a PSC in uart mode is named 'serial'. |
54 | named 'ethernet', and a PSC in uart mode is named 'serial'. | ||
55 | 55 | ||
56 | 2. device_type property | 56 | 2. device_type property |
57 | ----------------------- | 57 | ----------------------- |
@@ -66,28 +66,47 @@ exactly. | |||
66 | Since device_type isn't enough to match devices to drivers, there also | 66 | Since device_type isn't enough to match devices to drivers, there also |
67 | needs to be a naming convention for the compatible property. Compatible | 67 | needs to be a naming convention for the compatible property. Compatible |
68 | is an list of device descriptions sorted from specific to generic. For | 68 | is an list of device descriptions sorted from specific to generic. For |
69 | the mpc52xx, the required format for each compatible value is | 69 | the mpc5200, the required format for each compatible value is |
70 | <chip>-<device>[-<mode>]. At the minimum, the list shall contain two | 70 | <chip>-<device>[-<mode>]. The OS should be able to match a device driver |
71 | items; the first specifying the exact chip, and the second specifying | 71 | to the device based solely on the compatible value. If two drivers |
72 | mpc52xx for the chip. | 72 | match on the compatible list; the 'most compatible' driver should be |
73 | 73 | selected. | |
74 | ie. ethernet on mpc5200b: compatible = "mpc5200b-ethernet\0mpc52xx-ethernet" | 74 | |
75 | 75 | The split between the MPC5200 and the MPC5200B leaves a bit of a | |
76 | The idea here is that most drivers will match to the most generic field | 76 | connundrum. How should the compatible property be set up to provide |
77 | in the compatible list (mpc52xx-*), but can also test the more specific | 77 | maximum compatability information; but still acurately describe the |
78 | field for enabling bug fixes or extra features. | 78 | chip? For the MPC5200; the answer is easy. Most of the SoC devices |
79 | originally appeared on the MPC5200. Since they didn't exist anywhere | ||
80 | else; the 5200 compatible properties will contain only one item; | ||
81 | "mpc5200-<device>". | ||
82 | |||
83 | The 5200B is almost the same as the 5200, but not quite. It fixes | ||
84 | silicon bugs and it adds a small number of enhancements. Most of the | ||
85 | devices either provide exactly the same interface as on the 5200. A few | ||
86 | devices have extra functions but still have a backwards compatible mode. | ||
87 | To express this infomation as completely as possible, 5200B device trees | ||
88 | should have two items in the compatible list; | ||
89 | "mpc5200b-<device>\0mpc5200-<device>". It is *strongly* recommended | ||
90 | that 5200B device trees follow this convention (instead of only listing | ||
91 | the base mpc5200 item). | ||
92 | |||
93 | If another chip appear on the market with one of the mpc5200 SoC | ||
94 | devices, then the compatible list should include mpc5200-<device>. | ||
95 | |||
96 | ie. ethernet on mpc5200: compatible = "mpc5200-ethernet" | ||
97 | ethernet on mpc5200b: compatible = "mpc5200b-ethernet\0mpc5200-ethernet" | ||
79 | 98 | ||
80 | Modal devices, like PSCs, also append the configured function to the | 99 | Modal devices, like PSCs, also append the configured function to the |
81 | end of the compatible field. ie. A PSC in i2s mode would specify | 100 | end of the compatible field. ie. A PSC in i2s mode would specify |
82 | "mpc52xx-psc-i2s", not "mpc52xx-i2s". This convention is chosen to | 101 | "mpc5200-psc-i2s", not "mpc5200-i2s". This convention is chosen to |
83 | avoid naming conflicts with non-psc devices providing the same | 102 | avoid naming conflicts with non-psc devices providing the same |
84 | function. For example, "mpc52xx-spi" and "mpc52xx-psc-spi" describe | 103 | function. For example, "mpc5200-spi" and "mpc5200-psc-spi" describe |
85 | the mpc5200 simple spi device and a PSC spi mode respectively. | 104 | the mpc5200 simple spi device and a PSC spi mode respectively. |
86 | 105 | ||
87 | If the soc device is more generic and present on other SOCs, the | 106 | If the soc device is more generic and present on other SOCs, the |
88 | compatible property can specify the more generic device type also. | 107 | compatible property can specify the more generic device type also. |
89 | 108 | ||
90 | ie. mscan: compatible = "mpc5200-mscan\0mpc52xx-mscan\0fsl,mscan"; | 109 | ie. mscan: compatible = "mpc5200-mscan\0fsl,mscan"; |
91 | 110 | ||
92 | At the time of writing, exact chip may be either 'mpc5200' or | 111 | At the time of writing, exact chip may be either 'mpc5200' or |
93 | 'mpc5200b'. | 112 | 'mpc5200b'. |
@@ -96,7 +115,7 @@ Device drivers should always try to match as generically as possible. | |||
96 | 115 | ||
97 | III - Structure | 116 | III - Structure |
98 | =============== | 117 | =============== |
99 | The device tree for an mpc52xx board follows the structure defined in | 118 | The device tree for an mpc5200 board follows the structure defined in |
100 | booting-without-of.txt with the following additional notes: | 119 | booting-without-of.txt with the following additional notes: |
101 | 120 | ||
102 | 0) the root node | 121 | 0) the root node |
@@ -115,7 +134,7 @@ Typical memory description node; see booting-without-of. | |||
115 | 134 | ||
116 | 3) The soc5200 node | 135 | 3) The soc5200 node |
117 | ------------------- | 136 | ------------------- |
118 | This node describes the on chip SOC peripherals. Every mpc52xx based | 137 | This node describes the on chip SOC peripherals. Every mpc5200 based |
119 | board will have this node, and as such there is a common naming | 138 | board will have this node, and as such there is a common naming |
120 | convention for SOC devices. | 139 | convention for SOC devices. |
121 | 140 | ||
@@ -125,71 +144,111 @@ name type description | |||
125 | device_type string must be "soc" | 144 | device_type string must be "soc" |
126 | ranges int should be <0 baseaddr baseaddr+10000> | 145 | ranges int should be <0 baseaddr baseaddr+10000> |
127 | reg int must be <baseaddr 10000> | 146 | reg int must be <baseaddr 10000> |
147 | compatible string mpc5200: "mpc5200-soc" | ||
148 | mpc5200b: "mpc5200b-soc\0mpc5200-soc" | ||
149 | system-frequency int Fsystem frequency; source of all | ||
150 | other clocks. | ||
151 | bus-frequency int IPB bus frequency in HZ. Clock rate | ||
152 | used by most of the soc devices. | ||
153 | #interrupt-cells int must be <3>. | ||
128 | 154 | ||
129 | Recommended properties: | 155 | Recommended properties: |
130 | name type description | 156 | name type description |
131 | ---- ---- ----------- | 157 | ---- ---- ----------- |
132 | compatible string should be "<chip>-soc\0mpc52xx-soc" | 158 | model string Exact model of the chip; |
133 | ie. "mpc5200b-soc\0mpc52xx-soc" | 159 | ie: model="fsl,mpc5200" |
134 | #interrupt-cells int must be <3>. If it is not defined | 160 | revision string Silicon revision of chip |
135 | here then it must be defined in every | 161 | ie: revision="M08A" |
136 | soc device node. | 162 | |
137 | bus-frequency int IPB bus frequency in HZ. Clock rate | 163 | The 'model' and 'revision' properties are *strongly* recommended. Having |
138 | used by most of the soc devices. | 164 | them presence acts as a bit of a safety net for working around as yet |
139 | Defining it here avoids needing it | 165 | undiscovered bugs on one version of silicon. For example, device drivers |
140 | added to every device node. | 166 | can use the model and revision properties to decide if a bug fix should |
167 | be turned on. | ||
141 | 168 | ||
142 | 4) soc5200 child nodes | 169 | 4) soc5200 child nodes |
143 | ---------------------- | 170 | ---------------------- |
144 | Any on chip SOC devices available to Linux must appear as soc5200 child nodes. | 171 | Any on chip SOC devices available to Linux must appear as soc5200 child nodes. |
145 | 172 | ||
146 | Note: in the tables below, '*' matches all <chip> values. ie. | 173 | Note: The tables below show the value for the mpc5200. A mpc5200b device |
147 | *-pic would translate to "mpc5200-pic\0mpc52xx-pic" | 174 | tree should use the "mpc5200b-<device>\0mpc5200-<device> form. |
148 | 175 | ||
149 | Required soc5200 child nodes: | 176 | Required soc5200 child nodes: |
150 | name device_type compatible Description | 177 | name device_type compatible Description |
151 | ---- ----------- ---------- ----------- | 178 | ---- ----------- ---------- ----------- |
152 | cdm@<addr> cdm *-cmd Clock Distribution | 179 | cdm@<addr> cdm mpc5200-cmd Clock Distribution |
153 | pic@<addr> interrupt-controller *-pic need an interrupt | 180 | pic@<addr> interrupt-controller mpc5200-pic need an interrupt |
154 | controller to boot | 181 | controller to boot |
155 | bestcomm@<addr> dma-controller *-bestcomm 52xx pic also requires | 182 | bestcomm@<addr> dma-controller mpc5200-bestcomm 5200 pic also requires |
156 | the bestcomm device | 183 | the bestcomm device |
157 | 184 | ||
158 | Recommended soc5200 child nodes; populate as needed for your board | 185 | Recommended soc5200 child nodes; populate as needed for your board |
159 | name device_type compatible Description | 186 | name device_type compatible Description |
160 | ---- ----------- ---------- ----------- | 187 | ---- ----------- ---------- ----------- |
161 | gpt@<addr> gpt *-gpt General purpose timers | 188 | gpt@<addr> gpt mpc5200-gpt General purpose timers |
162 | rtc@<addr> rtc *-rtc Real time clock | 189 | rtc@<addr> rtc mpc5200-rtc Real time clock |
163 | mscan@<addr> mscan *-mscan CAN bus controller | 190 | mscan@<addr> mscan mpc5200-mscan CAN bus controller |
164 | pci@<addr> pci *-pci PCI bridge | 191 | pci@<addr> pci mpc5200-pci PCI bridge |
165 | serial@<addr> serial *-psc-uart PSC in serial mode | 192 | serial@<addr> serial mpc5200-psc-uart PSC in serial mode |
166 | i2s@<addr> sound *-psc-i2s PSC in i2s mode | 193 | i2s@<addr> sound mpc5200-psc-i2s PSC in i2s mode |
167 | ac97@<addr> sound *-psc-ac97 PSC in ac97 mode | 194 | ac97@<addr> sound mpc5200-psc-ac97 PSC in ac97 mode |
168 | spi@<addr> spi *-psc-spi PSC in spi mode | 195 | spi@<addr> spi mpc5200-psc-spi PSC in spi mode |
169 | irda@<addr> irda *-psc-irda PSC in IrDA mode | 196 | irda@<addr> irda mpc5200-psc-irda PSC in IrDA mode |
170 | spi@<addr> spi *-spi MPC52xx spi device | 197 | spi@<addr> spi mpc5200-spi MPC5200 spi device |
171 | ethernet@<addr> network *-fec MPC52xx ethernet device | 198 | ethernet@<addr> network mpc5200-fec MPC5200 ethernet device |
172 | ata@<addr> ata *-ata IDE ATA interface | 199 | ata@<addr> ata mpc5200-ata IDE ATA interface |
173 | i2c@<addr> i2c *-i2c I2C controller | 200 | i2c@<addr> i2c mpc5200-i2c I2C controller |
174 | usb@<addr> usb-ohci-be *-ohci,ohci-be USB controller | 201 | usb@<addr> usb-ohci-be mpc5200-ohci,ohci-be USB controller |
175 | xlb@<addr> xlb *-xlb XLB arbritrator | 202 | xlb@<addr> xlb mpc5200-xlb XLB arbritrator |
203 | |||
204 | Important child node properties | ||
205 | name type description | ||
206 | ---- ---- ----------- | ||
207 | cell-index int When multiple devices are present, is the | ||
208 | index of the device in the hardware (ie. There | ||
209 | are 6 PSC on the 5200 numbered PSC1 to PSC6) | ||
210 | PSC1 has 'cell-index = <0>' | ||
211 | PSC4 has 'cell-index = <3>' | ||
212 | |||
213 | 5) General Purpose Timer nodes (child of soc5200 node) | ||
214 | On the mpc5200 and 5200b, GPT0 has a watchdog timer function. If the board | ||
215 | design supports the internal wdt, then the device node for GPT0 should | ||
216 | include the empty property 'has-wdt'. | ||
217 | |||
218 | 6) PSC nodes (child of soc5200 node) | ||
219 | PSC nodes can define the optional 'port-number' property to force assignment | ||
220 | order of serial ports. For example, PSC5 might be physically connected to | ||
221 | the port labeled 'COM1' and PSC1 wired to 'COM1'. In this case, PSC5 would | ||
222 | have a "port-number = <0>" property, and PSC1 would have "port-number = <1>". | ||
223 | |||
224 | PSC in i2s mode: The mpc5200 and mpc5200b PSCs are not compatible when in | ||
225 | i2s mode. An 'mpc5200b-psc-i2s' node cannot include 'mpc5200-psc-i2s' in the | ||
226 | compatible field. | ||
176 | 227 | ||
177 | IV - Extra Notes | 228 | IV - Extra Notes |
178 | ================ | 229 | ================ |
179 | 230 | ||
180 | 1. Interrupt mapping | 231 | 1. Interrupt mapping |
181 | -------------------- | 232 | -------------------- |
182 | The mpc52xx pic driver splits hardware IRQ numbers into two levels. The | 233 | The mpc5200 pic driver splits hardware IRQ numbers into two levels. The |
183 | split reflects the layout of the PIC hardware itself, which groups | 234 | split reflects the layout of the PIC hardware itself, which groups |
184 | interrupts into one of three groups; CRIT, MAIN or PERP. Also, the | 235 | interrupts into one of three groups; CRIT, MAIN or PERP. Also, the |
185 | Bestcomm dma engine has it's own set of interrupt sources which are | 236 | Bestcomm dma engine has it's own set of interrupt sources which are |
186 | cascaded off of peripheral interrupt 0, which the driver interprets as a | 237 | cascaded off of peripheral interrupt 0, which the driver interprets as a |
187 | fourth group, SDMA. | 238 | fourth group, SDMA. |
188 | 239 | ||
189 | The interrupts property for device nodes using the mpc52xx pic consists | 240 | The interrupts property for device nodes using the mpc5200 pic consists |
190 | of three cells; <L1 L2 level> | 241 | of three cells; <L1 L2 level> |
191 | 242 | ||
192 | L1 := [CRIT=0, MAIN=1, PERP=2, SDMA=3] | 243 | L1 := [CRIT=0, MAIN=1, PERP=2, SDMA=3] |
193 | L2 := interrupt number; directly mapped from the value in the | 244 | L2 := interrupt number; directly mapped from the value in the |
194 | "ICTL PerStat, MainStat, CritStat Encoded Register" | 245 | "ICTL PerStat, MainStat, CritStat Encoded Register" |
195 | level := [LEVEL_HIGH=0, EDGE_RISING=1, EDGE_FALLING=2, LEVEL_LOW=3] | 246 | level := [LEVEL_HIGH=0, EDGE_RISING=1, EDGE_FALLING=2, LEVEL_LOW=3] |
247 | |||
248 | 2. Shared registers | ||
249 | ------------------- | ||
250 | Some SoC devices share registers between them. ie. the i2c devices use | ||
251 | a single clock control register, and almost all device are affected by | ||
252 | the port_config register. Devices which need to manipulate shared regs | ||
253 | should look to the parent SoC node. The soc node is responsible | ||
254 | for arbitrating all shared register access. | ||
diff --git a/Documentation/rbtree.txt b/Documentation/rbtree.txt new file mode 100644 index 000000000000..7224459b469e --- /dev/null +++ b/Documentation/rbtree.txt | |||
@@ -0,0 +1,192 @@ | |||
1 | Red-black Trees (rbtree) in Linux | ||
2 | January 18, 2007 | ||
3 | Rob Landley <rob@landley.net> | ||
4 | ============================= | ||
5 | |||
6 | What are red-black trees, and what are they for? | ||
7 | ------------------------------------------------ | ||
8 | |||
9 | Red-black trees are a type of self-balancing binary search tree, used for | ||
10 | storing sortable key/value data pairs. This differs from radix trees (which | ||
11 | are used to efficiently store sparse arrays and thus use long integer indexes | ||
12 | to insert/access/delete nodes) and hash tables (which are not kept sorted to | ||
13 | be easily traversed in order, and must be tuned for a specific size and | ||
14 | hash function where rbtrees scale gracefully storing arbitrary keys). | ||
15 | |||
16 | Red-black trees are similar to AVL trees, but provide faster real-time bounded | ||
17 | worst case performance for insertion and deletion (at most two rotations and | ||
18 | three rotations, respectively, to balance the tree), with slightly slower | ||
19 | (but still O(log n)) lookup time. | ||
20 | |||
21 | To quote Linux Weekly News: | ||
22 | |||
23 | There are a number of red-black trees in use in the kernel. | ||
24 | The anticipatory, deadline, and CFQ I/O schedulers all employ | ||
25 | rbtrees to track requests; the packet CD/DVD driver does the same. | ||
26 | The high-resolution timer code uses an rbtree to organize outstanding | ||
27 | timer requests. The ext3 filesystem tracks directory entries in a | ||
28 | red-black tree. Virtual memory areas (VMAs) are tracked with red-black | ||
29 | trees, as are epoll file descriptors, cryptographic keys, and network | ||
30 | packets in the "hierarchical token bucket" scheduler. | ||
31 | |||
32 | This document covers use of the Linux rbtree implementation. For more | ||
33 | information on the nature and implementation of Red Black Trees, see: | ||
34 | |||
35 | Linux Weekly News article on red-black trees | ||
36 | http://lwn.net/Articles/184495/ | ||
37 | |||
38 | Wikipedia entry on red-black trees | ||
39 | http://en.wikipedia.org/wiki/Red-black_tree | ||
40 | |||
41 | Linux implementation of red-black trees | ||
42 | --------------------------------------- | ||
43 | |||
44 | Linux's rbtree implementation lives in the file "lib/rbtree.c". To use it, | ||
45 | "#include <linux/rbtree.h>". | ||
46 | |||
47 | The Linux rbtree implementation is optimized for speed, and thus has one | ||
48 | less layer of indirection (and better cache locality) than more traditional | ||
49 | tree implementations. Instead of using pointers to separate rb_node and data | ||
50 | structures, each instance of struct rb_node is embedded in the data structure | ||
51 | it organizes. And instead of using a comparison callback function pointer, | ||
52 | users are expected to write their own tree search and insert functions | ||
53 | which call the provided rbtree functions. Locking is also left up to the | ||
54 | user of the rbtree code. | ||
55 | |||
56 | Creating a new rbtree | ||
57 | --------------------- | ||
58 | |||
59 | Data nodes in an rbtree tree are structures containing a struct rb_node member: | ||
60 | |||
61 | struct mytype { | ||
62 | struct rb_node node; | ||
63 | char *keystring; | ||
64 | }; | ||
65 | |||
66 | When dealing with a pointer to the embedded struct rb_node, the containing data | ||
67 | structure may be accessed with the standard container_of() macro. In addition, | ||
68 | individual members may be accessed directly via rb_entry(node, type, member). | ||
69 | |||
70 | At the root of each rbtree is an rb_root structure, which is initialized to be | ||
71 | empty via: | ||
72 | |||
73 | struct rb_root mytree = RB_ROOT; | ||
74 | |||
75 | Searching for a value in an rbtree | ||
76 | ---------------------------------- | ||
77 | |||
78 | Writing a search function for your tree is fairly straightforward: start at the | ||
79 | root, compare each value, and follow the left or right branch as necessary. | ||
80 | |||
81 | Example: | ||
82 | |||
83 | struct mytype *my_search(struct rb_root *root, char *string) | ||
84 | { | ||
85 | struct rb_node *node = root->rb_node; | ||
86 | |||
87 | while (node) { | ||
88 | struct mytype *data = container_of(node, struct mytype, node); | ||
89 | int result; | ||
90 | |||
91 | result = strcmp(string, data->keystring); | ||
92 | |||
93 | if (result < 0) | ||
94 | node = node->rb_left; | ||
95 | else if (result > 0) | ||
96 | node = node->rb_right; | ||
97 | else | ||
98 | return data; | ||
99 | } | ||
100 | return NULL; | ||
101 | } | ||
102 | |||
103 | Inserting data into an rbtree | ||
104 | ----------------------------- | ||
105 | |||
106 | Inserting data in the tree involves first searching for the place to insert the | ||
107 | new node, then inserting the node and rebalancing ("recoloring") the tree. | ||
108 | |||
109 | The search for insertion differs from the previous search by finding the | ||
110 | location of the pointer on which to graft the new node. The new node also | ||
111 | needs a link to its parent node for rebalancing purposes. | ||
112 | |||
113 | Example: | ||
114 | |||
115 | int my_insert(struct rb_root *root, struct mytype *data) | ||
116 | { | ||
117 | struct rb_node **new = &(root->rb_node), *parent = NULL; | ||
118 | |||
119 | /* Figure out where to put new node */ | ||
120 | while (*new) { | ||
121 | struct mytype *this = container_of(*new, struct mytype, node); | ||
122 | int result = strcmp(data->keystring, this->keystring); | ||
123 | |||
124 | parent = *new; | ||
125 | if (result < 0) | ||
126 | new = &((*new)->rb_left); | ||
127 | else if (result > 0) | ||
128 | new = &((*new)->rb_right); | ||
129 | else | ||
130 | return FALSE; | ||
131 | } | ||
132 | |||
133 | /* Add new node and rebalance tree. */ | ||
134 | rb_link_node(data->node, parent, new); | ||
135 | rb_insert_color(data->node, root); | ||
136 | |||
137 | return TRUE; | ||
138 | } | ||
139 | |||
140 | Removing or replacing existing data in an rbtree | ||
141 | ------------------------------------------------ | ||
142 | |||
143 | To remove an existing node from a tree, call: | ||
144 | |||
145 | void rb_erase(struct rb_node *victim, struct rb_root *tree); | ||
146 | |||
147 | Example: | ||
148 | |||
149 | struct mytype *data = mysearch(mytree, "walrus"); | ||
150 | |||
151 | if (data) { | ||
152 | rb_erase(data->node, mytree); | ||
153 | myfree(data); | ||
154 | } | ||
155 | |||
156 | To replace an existing node in a tree with a new one with the same key, call: | ||
157 | |||
158 | void rb_replace_node(struct rb_node *old, struct rb_node *new, | ||
159 | struct rb_root *tree); | ||
160 | |||
161 | Replacing a node this way does not re-sort the tree: If the new node doesn't | ||
162 | have the same key as the old node, the rbtree will probably become corrupted. | ||
163 | |||
164 | Iterating through the elements stored in an rbtree (in sort order) | ||
165 | ------------------------------------------------------------------ | ||
166 | |||
167 | Four functions are provided for iterating through an rbtree's contents in | ||
168 | sorted order. These work on arbitrary trees, and should not need to be | ||
169 | modified or wrapped (except for locking purposes): | ||
170 | |||
171 | struct rb_node *rb_first(struct rb_root *tree); | ||
172 | struct rb_node *rb_last(struct rb_root *tree); | ||
173 | struct rb_node *rb_next(struct rb_node *node); | ||
174 | struct rb_node *rb_prev(struct rb_node *node); | ||
175 | |||
176 | To start iterating, call rb_first() or rb_last() with a pointer to the root | ||
177 | of the tree, which will return a pointer to the node structure contained in | ||
178 | the first or last element in the tree. To continue, fetch the next or previous | ||
179 | node by calling rb_next() or rb_prev() on the current node. This will return | ||
180 | NULL when there are no more nodes left. | ||
181 | |||
182 | The iterator functions return a pointer to the embedded struct rb_node, from | ||
183 | which the containing data structure may be accessed with the container_of() | ||
184 | macro, and individual members may be accessed directly via | ||
185 | rb_entry(node, type, member). | ||
186 | |||
187 | Example: | ||
188 | |||
189 | struct rb_node *node; | ||
190 | for (node = rb_first(&mytree); node; node = rb_next(node)) | ||
191 | printk("key=%s\n", rb_entry(node, int, keystring)); | ||
192 | |||
diff --git a/Documentation/rtc.txt b/Documentation/rtc.txt index 7cf1ec5bcdd3..1ef6bb88cd00 100644 --- a/Documentation/rtc.txt +++ b/Documentation/rtc.txt | |||
@@ -149,7 +149,7 @@ RTC class framework, but can't be supported by the older driver. | |||
149 | is connected to an IRQ line, it can often issue an alarm IRQ up to | 149 | is connected to an IRQ line, it can often issue an alarm IRQ up to |
150 | 24 hours in the future. | 150 | 24 hours in the future. |
151 | 151 | ||
152 | * RTC_WKALM_SET, RTC_WKALM_READ ... RTCs that can issue alarms beyond | 152 | * RTC_WKALM_SET, RTC_WKALM_RD ... RTCs that can issue alarms beyond |
153 | the next 24 hours use a slightly more powerful API, which supports | 153 | the next 24 hours use a slightly more powerful API, which supports |
154 | setting the longer alarm time and enabling its IRQ using a single | 154 | setting the longer alarm time and enabling its IRQ using a single |
155 | request (using the same model as EFI firmware). | 155 | request (using the same model as EFI firmware). |
@@ -167,6 +167,28 @@ Linux out of a low power sleep state (or hibernation) back to a fully | |||
167 | operational state. For example, a system could enter a deep power saving | 167 | operational state. For example, a system could enter a deep power saving |
168 | state until it's time to execute some scheduled tasks. | 168 | state until it's time to execute some scheduled tasks. |
169 | 169 | ||
170 | Note that many of these ioctls need not actually be implemented by your | ||
171 | driver. The common rtc-dev interface handles many of these nicely if your | ||
172 | driver returns ENOIOCTLCMD. Some common examples: | ||
173 | |||
174 | * RTC_RD_TIME, RTC_SET_TIME: the read_time/set_time functions will be | ||
175 | called with appropriate values. | ||
176 | |||
177 | * RTC_ALM_SET, RTC_ALM_READ, RTC_WKALM_SET, RTC_WKALM_RD: the | ||
178 | set_alarm/read_alarm functions will be called. To differentiate | ||
179 | between the ALM and WKALM, check the larger fields of the rtc_wkalrm | ||
180 | struct (like tm_year). These will be set to -1 when using ALM and | ||
181 | will be set to proper values when using WKALM. | ||
182 | |||
183 | * RTC_IRQP_SET, RTC_IRQP_READ: the irq_set_freq function will be called | ||
184 | to set the frequency while the framework will handle the read for you | ||
185 | since the frequency is stored in the irq_freq member of the rtc_device | ||
186 | structure. Also make sure you set the max_user_freq member in your | ||
187 | initialization routines so the framework can sanity check the user | ||
188 | input for you. | ||
189 | |||
190 | If all else fails, check out the rtc-test.c driver! | ||
191 | |||
170 | 192 | ||
171 | -------------------- 8< ---------------- 8< ----------------------------- | 193 | -------------------- 8< ---------------- 8< ----------------------------- |
172 | 194 | ||
@@ -237,7 +259,7 @@ int main(int argc, char **argv) | |||
237 | "\n...Update IRQs not supported.\n"); | 259 | "\n...Update IRQs not supported.\n"); |
238 | goto test_READ; | 260 | goto test_READ; |
239 | } | 261 | } |
240 | perror("ioctl"); | 262 | perror("RTC_UIE_ON ioctl"); |
241 | exit(errno); | 263 | exit(errno); |
242 | } | 264 | } |
243 | 265 | ||
@@ -284,7 +306,7 @@ int main(int argc, char **argv) | |||
284 | /* Turn off update interrupts */ | 306 | /* Turn off update interrupts */ |
285 | retval = ioctl(fd, RTC_UIE_OFF, 0); | 307 | retval = ioctl(fd, RTC_UIE_OFF, 0); |
286 | if (retval == -1) { | 308 | if (retval == -1) { |
287 | perror("ioctl"); | 309 | perror("RTC_UIE_OFF ioctl"); |
288 | exit(errno); | 310 | exit(errno); |
289 | } | 311 | } |
290 | 312 | ||
@@ -292,7 +314,7 @@ test_READ: | |||
292 | /* Read the RTC time/date */ | 314 | /* Read the RTC time/date */ |
293 | retval = ioctl(fd, RTC_RD_TIME, &rtc_tm); | 315 | retval = ioctl(fd, RTC_RD_TIME, &rtc_tm); |
294 | if (retval == -1) { | 316 | if (retval == -1) { |
295 | perror("ioctl"); | 317 | perror("RTC_RD_TIME ioctl"); |
296 | exit(errno); | 318 | exit(errno); |
297 | } | 319 | } |
298 | 320 | ||
@@ -320,14 +342,14 @@ test_READ: | |||
320 | "\n...Alarm IRQs not supported.\n"); | 342 | "\n...Alarm IRQs not supported.\n"); |
321 | goto test_PIE; | 343 | goto test_PIE; |
322 | } | 344 | } |
323 | perror("ioctl"); | 345 | perror("RTC_ALM_SET ioctl"); |
324 | exit(errno); | 346 | exit(errno); |
325 | } | 347 | } |
326 | 348 | ||
327 | /* Read the current alarm settings */ | 349 | /* Read the current alarm settings */ |
328 | retval = ioctl(fd, RTC_ALM_READ, &rtc_tm); | 350 | retval = ioctl(fd, RTC_ALM_READ, &rtc_tm); |
329 | if (retval == -1) { | 351 | if (retval == -1) { |
330 | perror("ioctl"); | 352 | perror("RTC_ALM_READ ioctl"); |
331 | exit(errno); | 353 | exit(errno); |
332 | } | 354 | } |
333 | 355 | ||
@@ -337,7 +359,7 @@ test_READ: | |||
337 | /* Enable alarm interrupts */ | 359 | /* Enable alarm interrupts */ |
338 | retval = ioctl(fd, RTC_AIE_ON, 0); | 360 | retval = ioctl(fd, RTC_AIE_ON, 0); |
339 | if (retval == -1) { | 361 | if (retval == -1) { |
340 | perror("ioctl"); | 362 | perror("RTC_AIE_ON ioctl"); |
341 | exit(errno); | 363 | exit(errno); |
342 | } | 364 | } |
343 | 365 | ||
@@ -355,7 +377,7 @@ test_READ: | |||
355 | /* Disable alarm interrupts */ | 377 | /* Disable alarm interrupts */ |
356 | retval = ioctl(fd, RTC_AIE_OFF, 0); | 378 | retval = ioctl(fd, RTC_AIE_OFF, 0); |
357 | if (retval == -1) { | 379 | if (retval == -1) { |
358 | perror("ioctl"); | 380 | perror("RTC_AIE_OFF ioctl"); |
359 | exit(errno); | 381 | exit(errno); |
360 | } | 382 | } |
361 | 383 | ||
@@ -368,7 +390,7 @@ test_PIE: | |||
368 | fprintf(stderr, "\nNo periodic IRQ support\n"); | 390 | fprintf(stderr, "\nNo periodic IRQ support\n"); |
369 | return 0; | 391 | return 0; |
370 | } | 392 | } |
371 | perror("ioctl"); | 393 | perror("RTC_IRQP_READ ioctl"); |
372 | exit(errno); | 394 | exit(errno); |
373 | } | 395 | } |
374 | fprintf(stderr, "\nPeriodic IRQ rate is %ldHz.\n", tmp); | 396 | fprintf(stderr, "\nPeriodic IRQ rate is %ldHz.\n", tmp); |
@@ -387,7 +409,7 @@ test_PIE: | |||
387 | "\n...Periodic IRQ rate is fixed\n"); | 409 | "\n...Periodic IRQ rate is fixed\n"); |
388 | goto done; | 410 | goto done; |
389 | } | 411 | } |
390 | perror("ioctl"); | 412 | perror("RTC_IRQP_SET ioctl"); |
391 | exit(errno); | 413 | exit(errno); |
392 | } | 414 | } |
393 | 415 | ||
@@ -397,7 +419,7 @@ test_PIE: | |||
397 | /* Enable periodic interrupts */ | 419 | /* Enable periodic interrupts */ |
398 | retval = ioctl(fd, RTC_PIE_ON, 0); | 420 | retval = ioctl(fd, RTC_PIE_ON, 0); |
399 | if (retval == -1) { | 421 | if (retval == -1) { |
400 | perror("ioctl"); | 422 | perror("RTC_PIE_ON ioctl"); |
401 | exit(errno); | 423 | exit(errno); |
402 | } | 424 | } |
403 | 425 | ||
@@ -416,7 +438,7 @@ test_PIE: | |||
416 | /* Disable periodic interrupts */ | 438 | /* Disable periodic interrupts */ |
417 | retval = ioctl(fd, RTC_PIE_OFF, 0); | 439 | retval = ioctl(fd, RTC_PIE_OFF, 0); |
418 | if (retval == -1) { | 440 | if (retval == -1) { |
419 | perror("ioctl"); | 441 | perror("RTC_PIE_OFF ioctl"); |
420 | exit(errno); | 442 | exit(errno); |
421 | } | 443 | } |
422 | } | 444 | } |
diff --git a/Documentation/scsi/ChangeLog.megaraid b/Documentation/scsi/ChangeLog.megaraid index a056bbe67c7e..37796fe45bd0 100644 --- a/Documentation/scsi/ChangeLog.megaraid +++ b/Documentation/scsi/ChangeLog.megaraid | |||
@@ -1,3 +1,19 @@ | |||
1 | Release Date : Thu Nov 16 15:32:35 EST 2006 - | ||
2 | Sumant Patro <sumant.patro@lsi.com> | ||
3 | Current Version : 2.20.5.1 (scsi module), 2.20.2.6 (cmm module) | ||
4 | Older Version : 2.20.4.9 (scsi module), 2.20.2.6 (cmm module) | ||
5 | |||
6 | 1. Changes in Initialization to fix kdump failure. | ||
7 | Send SYNC command on loading. | ||
8 | This command clears the pending commands in the adapter | ||
9 | and re-initialize its internal RAID structure. | ||
10 | Without this change, megaraid driver either panics or fails to | ||
11 | initialize the adapter during kdump's second kernel boot | ||
12 | if there are pending commands or interrupts from other devices | ||
13 | sharing the same IRQ. | ||
14 | 2. Authors email-id domain name changed from lsil.com to lsi.com. | ||
15 | Also modified the MODULE_AUTHOR to megaraidlinux@lsi.com | ||
16 | |||
1 | Release Date : Fri May 19 09:31:45 EST 2006 - Seokmann Ju <sju@lsil.com> | 17 | Release Date : Fri May 19 09:31:45 EST 2006 - Seokmann Ju <sju@lsil.com> |
2 | Current Version : 2.20.4.9 (scsi module), 2.20.2.6 (cmm module) | 18 | Current Version : 2.20.4.9 (scsi module), 2.20.2.6 (cmm module) |
3 | Older Version : 2.20.4.8 (scsi module), 2.20.2.6 (cmm module) | 19 | Older Version : 2.20.4.8 (scsi module), 2.20.2.6 (cmm module) |
diff --git a/Documentation/sony-laptop.txt b/Documentation/sony-laptop.txt new file mode 100644 index 000000000000..dfd26df056f4 --- /dev/null +++ b/Documentation/sony-laptop.txt | |||
@@ -0,0 +1,106 @@ | |||
1 | Sony Notebook Control Driver (SNC) Readme | ||
2 | ----------------------------------------- | ||
3 | Copyright (C) 2004- 2005 Stelian Pop <stelian@popies.net> | ||
4 | Copyright (C) 2007 Mattia Dongili <malattia@linux.it> | ||
5 | |||
6 | This mini-driver drives the SNC device present in the ACPI BIOS of | ||
7 | the Sony Vaio laptops. | ||
8 | |||
9 | It gives access to some extra laptop functionalities. In its current | ||
10 | form, this driver let the user set or query the screen brightness | ||
11 | through the backlight subsystem and remove/apply power to some devices. | ||
12 | |||
13 | Backlight control: | ||
14 | ------------------ | ||
15 | If your laptop model supports it, you will find sysfs files in the | ||
16 | /sys/class/backlight/sony/ | ||
17 | directory. You will be able to query and set the current screen | ||
18 | brightness: | ||
19 | brightness get/set screen brightness (an iteger | ||
20 | between 0 and 7) | ||
21 | actual_brightness reading from this file will query the HW | ||
22 | to get real brightness value | ||
23 | max_brightness the maximum brightness value | ||
24 | |||
25 | |||
26 | Platform specific: | ||
27 | ------------------ | ||
28 | Loading the sony-laptop module will create a | ||
29 | /sys/devices/platform/sony-laptop/ | ||
30 | directory populated with some files. | ||
31 | |||
32 | You then read/write integer values from/to those files by using | ||
33 | standard UNIX tools. | ||
34 | |||
35 | The files are: | ||
36 | brightness_default screen brightness which will be set | ||
37 | when the laptop will be rebooted | ||
38 | cdpower power on/off the internal CD drive | ||
39 | audiopower power on/off the internal sound card | ||
40 | lanpower power on/off the internal ethernet card | ||
41 | (only in debug mode) | ||
42 | |||
43 | Note that some files may be missing if they are not supported | ||
44 | by your particular laptop model. | ||
45 | |||
46 | Example usage: | ||
47 | # echo "1" > /sys/devices/platform/sony-laptop/brightness_default | ||
48 | sets the lowest screen brightness for the next and later reboots, | ||
49 | # echo "8" > /sys/devices/platform/sony-laptop/brightness_default | ||
50 | sets the highest screen brightness for the next and later reboots, | ||
51 | # cat /sys/devices/platform/sony-laptop/brightness_default | ||
52 | retrieves the value. | ||
53 | |||
54 | # echo "0" > /sys/devices/platform/sony-laptop/audiopower | ||
55 | powers off the sound card, | ||
56 | # echo "1" > /sys/devices/platform/sony-laptop/audiopower | ||
57 | powers on the sound card. | ||
58 | |||
59 | Development: | ||
60 | ------------ | ||
61 | |||
62 | If you want to help with the development of this driver (and | ||
63 | you are not afraid of any side effects doing strange things with | ||
64 | your ACPI BIOS could have on your laptop), load the driver and | ||
65 | pass the option 'debug=1'. | ||
66 | |||
67 | REPEAT: DON'T DO THIS IF YOU DON'T LIKE RISKY BUSINESS. | ||
68 | |||
69 | In your kernel logs you will find the list of all ACPI methods | ||
70 | the SNC device has on your laptop. You can see the GCDP/GCDP methods | ||
71 | used to pwer on/off the CD drive, but there are others. | ||
72 | |||
73 | I HAVE NO IDEA WHAT THOSE METHODS DO. | ||
74 | |||
75 | The sony-laptop driver creates, for some of those methods (the most | ||
76 | current ones found on several Vaio models), an entry under | ||
77 | /sys/devices/platform/sony-laptop, just like the 'cdpower' one. | ||
78 | You can create other entries corresponding to your own laptop methods by | ||
79 | further editing the source (see the 'sony_acpi_values' table, and add a new | ||
80 | entry to this table with your get/set method names using the | ||
81 | HANDLE_NAMES macro). | ||
82 | |||
83 | Your mission, should you accept it, is to try finding out what | ||
84 | those entries are for, by reading/writing random values from/to those | ||
85 | files and find out what is the impact on your laptop. | ||
86 | |||
87 | Should you find anything interesting, please report it back to me, | ||
88 | I will not disavow all knowledge of your actions :) | ||
89 | |||
90 | Bugs/Limitations: | ||
91 | ----------------- | ||
92 | |||
93 | * This driver is not based on official documentation from Sony | ||
94 | (because there is none), so there is no guarantee this driver | ||
95 | will work at all, or do the right thing. Although this hasn't | ||
96 | happened to me, this driver could do very bad things to your | ||
97 | laptop, including permanent damage. | ||
98 | |||
99 | * The sony-laptop and sonypi drivers do not interact at all. In the | ||
100 | future, sonypi could use sony-laptop to do (part of) its business. | ||
101 | |||
102 | * spicctrl, which is the userspace tool used to communicate with the | ||
103 | sonypi driver (through /dev/sonypi) does not try to use the | ||
104 | sony-laptop driver. In the future, spicctrl could try sonypi first, | ||
105 | and if it isn't present, try sony-laptop instead. | ||
106 | |||
diff --git a/Documentation/spi/spi-summary b/Documentation/spi/spi-summary index 72795796b13d..ecc7c9eb9f29 100644 --- a/Documentation/spi/spi-summary +++ b/Documentation/spi/spi-summary | |||
@@ -284,7 +284,6 @@ SPI protocol drivers somewhat resemble platform device drivers: | |||
284 | static struct spi_driver CHIP_driver = { | 284 | static struct spi_driver CHIP_driver = { |
285 | .driver = { | 285 | .driver = { |
286 | .name = "CHIP", | 286 | .name = "CHIP", |
287 | .bus = &spi_bus_type, | ||
288 | .owner = THIS_MODULE, | 287 | .owner = THIS_MODULE, |
289 | }, | 288 | }, |
290 | 289 | ||
@@ -312,7 +311,7 @@ might look like this unless you're creating a class_device: | |||
312 | chip = kzalloc(sizeof *chip, GFP_KERNEL); | 311 | chip = kzalloc(sizeof *chip, GFP_KERNEL); |
313 | if (!chip) | 312 | if (!chip) |
314 | return -ENOMEM; | 313 | return -ENOMEM; |
315 | dev_set_drvdata(&spi->dev, chip); | 314 | spi_set_drvdata(spi, chip); |
316 | 315 | ||
317 | ... etc | 316 | ... etc |
318 | return 0; | 317 | return 0; |
diff --git a/Documentation/sysrq.txt b/Documentation/sysrq.txt index 61613166981b..452c0f152304 100644 --- a/Documentation/sysrq.txt +++ b/Documentation/sysrq.txt | |||
@@ -64,11 +64,6 @@ On all - write a character to /proc/sysrq-trigger. e.g.: | |||
64 | 64 | ||
65 | * What are the 'command' keys? | 65 | * What are the 'command' keys? |
66 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | 66 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
67 | 'r' - Turns off keyboard raw mode and sets it to XLATE. | ||
68 | |||
69 | 'k' - Secure Access Key (SAK) Kills all programs on the current virtual | ||
70 | console. NOTE: See important comments below in SAK section. | ||
71 | |||
72 | 'b' - Will immediately reboot the system without syncing or unmounting | 67 | 'b' - Will immediately reboot the system without syncing or unmounting |
73 | your disks. | 68 | your disks. |
74 | 69 | ||
@@ -76,21 +71,37 @@ On all - write a character to /proc/sysrq-trigger. e.g.: | |||
76 | 71 | ||
77 | 'd' - Shows all locks that are held. | 72 | 'd' - Shows all locks that are held. |
78 | 73 | ||
79 | 'o' - Will shut your system off (if configured and supported). | 74 | 'e' - Send a SIGTERM to all processes, except for init. |
80 | 75 | ||
81 | 's' - Will attempt to sync all mounted filesystems. | 76 | 'f' - Will call oom_kill to kill a memory hog process. |
82 | 77 | ||
83 | 'u' - Will attempt to remount all mounted filesystems read-only. | 78 | 'g' - Used by kgdb on ppc platforms. |
84 | 79 | ||
85 | 'p' - Will dump the current registers and flags to your console. | 80 | 'h' - Will display help (actually any other key than those listed |
81 | above will display help. but 'h' is easy to remember :-) | ||
86 | 82 | ||
87 | 't' - Will dump a list of current tasks and their information to your | 83 | 'i' - Send a SIGKILL to all processes, except for init. |
88 | console. | 84 | |
85 | 'k' - Secure Access Key (SAK) Kills all programs on the current virtual | ||
86 | console. NOTE: See important comments below in SAK section. | ||
89 | 87 | ||
90 | 'm' - Will dump current memory info to your console. | 88 | 'm' - Will dump current memory info to your console. |
91 | 89 | ||
92 | 'n' - Used to make RT tasks nice-able | 90 | 'n' - Used to make RT tasks nice-able |
93 | 91 | ||
92 | 'o' - Will shut your system off (if configured and supported). | ||
93 | |||
94 | 'p' - Will dump the current registers and flags to your console. | ||
95 | |||
96 | 'r' - Turns off keyboard raw mode and sets it to XLATE. | ||
97 | |||
98 | 's' - Will attempt to sync all mounted filesystems. | ||
99 | |||
100 | 't' - Will dump a list of current tasks and their information to your | ||
101 | console. | ||
102 | |||
103 | 'u' - Will attempt to remount all mounted filesystems read-only. | ||
104 | |||
94 | 'v' - Dumps Voyager SMP processor info to your console. | 105 | 'v' - Dumps Voyager SMP processor info to your console. |
95 | 106 | ||
96 | 'w' - Dumps tasks that are in uninterruptable (blocked) state. | 107 | 'w' - Dumps tasks that are in uninterruptable (blocked) state. |
@@ -102,17 +113,6 @@ On all - write a character to /proc/sysrq-trigger. e.g.: | |||
102 | it so that only emergency messages like PANICs or OOPSes would | 113 | it so that only emergency messages like PANICs or OOPSes would |
103 | make it to your console.) | 114 | make it to your console.) |
104 | 115 | ||
105 | 'f' - Will call oom_kill to kill a memory hog process. | ||
106 | |||
107 | 'e' - Send a SIGTERM to all processes, except for init. | ||
108 | |||
109 | 'g' - Used by kgdb on ppc platforms. | ||
110 | |||
111 | 'i' - Send a SIGKILL to all processes, except for init. | ||
112 | |||
113 | 'h' - Will display help (actually any other key than those listed | ||
114 | above will display help. but 'h' is easy to remember :-) | ||
115 | |||
116 | * Okay, so what can I use them for? | 116 | * Okay, so what can I use them for? |
117 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | 117 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
118 | Well, un'R'aw is very handy when your X server or a svgalib program crashes. | 118 | Well, un'R'aw is very handy when your X server or a svgalib program crashes. |
diff --git a/Documentation/x86_64/boot-options.txt b/Documentation/x86_64/boot-options.txt index 5c86ed6f0448..625a21db0c2a 100644 --- a/Documentation/x86_64/boot-options.txt +++ b/Documentation/x86_64/boot-options.txt | |||
@@ -180,40 +180,81 @@ PCI | |||
180 | pci=lastbus=NUMBER Scan upto NUMBER busses, no matter what the mptable says. | 180 | pci=lastbus=NUMBER Scan upto NUMBER busses, no matter what the mptable says. |
181 | pci=noacpi Don't use ACPI to set up PCI interrupt routing. | 181 | pci=noacpi Don't use ACPI to set up PCI interrupt routing. |
182 | 182 | ||
183 | IOMMU | 183 | IOMMU (input/output memory management unit) |
184 | 184 | ||
185 | iommu=[size][,noagp][,off][,force][,noforce][,leak][,memaper[=order]][,merge] | 185 | Currently four x86-64 PCI-DMA mapping implementations exist: |
186 | [,forcesac][,fullflush][,nomerge][,noaperture][,calgary] | 186 | |
187 | size set size of iommu (in bytes) | 187 | 1. <arch/x86_64/kernel/pci-nommu.c>: use no hardware/software IOMMU at all |
188 | noagp don't initialize the AGP driver and use full aperture. | 188 | (e.g. because you have < 3 GB memory). |
189 | off don't use the IOMMU | 189 | Kernel boot message: "PCI-DMA: Disabling IOMMU" |
190 | leak turn on simple iommu leak tracing (only when CONFIG_IOMMU_LEAK is on) | 190 | |
191 | memaper[=order] allocate an own aperture over RAM with size 32MB^order. | 191 | 2. <arch/x86_64/kernel/pci-gart.c>: AMD GART based hardware IOMMU. |
192 | noforce don't force IOMMU usage. Default. | 192 | Kernel boot message: "PCI-DMA: using GART IOMMU" |
193 | force Force IOMMU. | 193 | |
194 | merge Do SG merging. Implies force (experimental) | 194 | 3. <arch/x86_64/kernel/pci-swiotlb.c> : Software IOMMU implementation. Used |
195 | nomerge Don't do SG merging. | 195 | e.g. if there is no hardware IOMMU in the system and it is need because |
196 | forcesac For SAC mode for masks <40bits (experimental) | 196 | you have >3GB memory or told the kernel to us it (iommu=soft)) |
197 | fullflush Flush IOMMU on each allocation (default) | 197 | Kernel boot message: "PCI-DMA: Using software bounce buffering |
198 | nofullflush Don't use IOMMU fullflush | 198 | for IO (SWIOTLB)" |
199 | allowed overwrite iommu off workarounds for specific chipsets. | 199 | |
200 | soft Use software bounce buffering (default for Intel machines) | 200 | 4. <arch/x86_64/pci-calgary.c> : IBM Calgary hardware IOMMU. Used in IBM |
201 | noaperture Don't touch the aperture for AGP. | 201 | pSeries and xSeries servers. This hardware IOMMU supports DMA address |
202 | allowdac Allow DMA >4GB | 202 | mapping with memory protection, etc. |
203 | When off all DMA over >4GB is forced through an IOMMU or bounce | 203 | Kernel boot message: "PCI-DMA: Using Calgary IOMMU" |
204 | buffering. | 204 | |
205 | nodac Forbid DMA >4GB | 205 | iommu=[<size>][,noagp][,off][,force][,noforce][,leak[=<nr_of_leak_pages>] |
206 | panic Always panic when IOMMU overflows | 206 | [,memaper[=<order>]][,merge][,forcesac][,fullflush][,nomerge] |
207 | calgary Use the Calgary IOMMU if it is available | 207 | [,noaperture][,calgary] |
208 | 208 | ||
209 | swiotlb=pages[,force] | 209 | General iommu options: |
210 | 210 | off Don't initialize and use any kind of IOMMU. | |
211 | pages Prereserve that many 128K pages for the software IO bounce buffering. | 211 | noforce Don't force hardware IOMMU usage when it is not needed. |
212 | force Force all IO through the software TLB. | 212 | (default). |
213 | 213 | force Force the use of the hardware IOMMU even when it is | |
214 | calgary=[64k,128k,256k,512k,1M,2M,4M,8M] | 214 | not actually needed (e.g. because < 3 GB memory). |
215 | calgary=[translate_empty_slots] | 215 | soft Use software bounce buffering (SWIOTLB) (default for |
216 | calgary=[disable=<PCI bus number>] | 216 | Intel machines). This can be used to prevent the usage |
217 | of an available hardware IOMMU. | ||
218 | |||
219 | iommu options only relevant to the AMD GART hardware IOMMU: | ||
220 | <size> Set the size of the remapping area in bytes. | ||
221 | allowed Overwrite iommu off workarounds for specific chipsets. | ||
222 | fullflush Flush IOMMU on each allocation (default). | ||
223 | nofullflush Don't use IOMMU fullflush. | ||
224 | leak Turn on simple iommu leak tracing (only when | ||
225 | CONFIG_IOMMU_LEAK is on). Default number of leak pages | ||
226 | is 20. | ||
227 | memaper[=<order>] Allocate an own aperture over RAM with size 32MB<<order. | ||
228 | (default: order=1, i.e. 64MB) | ||
229 | merge Do scatter-gather (SG) merging. Implies "force" | ||
230 | (experimental). | ||
231 | nomerge Don't do scatter-gather (SG) merging. | ||
232 | noaperture Ask the IOMMU not to touch the aperture for AGP. | ||
233 | forcesac Force single-address cycle (SAC) mode for masks <40bits | ||
234 | (experimental). | ||
235 | noagp Don't initialize the AGP driver and use full aperture. | ||
236 | allowdac Allow double-address cycle (DAC) mode, i.e. DMA >4GB. | ||
237 | DAC is used with 32-bit PCI to push a 64-bit address in | ||
238 | two cycles. When off all DMA over >4GB is forced through | ||
239 | an IOMMU or software bounce buffering. | ||
240 | nodac Forbid DAC mode, i.e. DMA >4GB. | ||
241 | panic Always panic when IOMMU overflows. | ||
242 | calgary Use the Calgary IOMMU if it is available | ||
243 | |||
244 | iommu options only relevant to the software bounce buffering (SWIOTLB) IOMMU | ||
245 | implementation: | ||
246 | swiotlb=<pages>[,force] | ||
247 | <pages> Prereserve that many 128K pages for the software IO | ||
248 | bounce buffering. | ||
249 | force Force all IO through the software TLB. | ||
250 | |||
251 | Settings for the IBM Calgary hardware IOMMU currently found in IBM | ||
252 | pSeries and xSeries machines: | ||
253 | |||
254 | calgary=[64k,128k,256k,512k,1M,2M,4M,8M] | ||
255 | calgary=[translate_empty_slots] | ||
256 | calgary=[disable=<PCI bus number>] | ||
257 | panic Always panic when IOMMU overflows | ||
217 | 258 | ||
218 | 64k,...,8M - Set the size of each PCI slot's translation table | 259 | 64k,...,8M - Set the size of each PCI slot's translation table |
219 | when using the Calgary IOMMU. This is the size of the translation | 260 | when using the Calgary IOMMU. This is the size of the translation |
@@ -234,14 +275,14 @@ IOMMU | |||
234 | 275 | ||
235 | Debugging | 276 | Debugging |
236 | 277 | ||
237 | oops=panic Always panic on oopses. Default is to just kill the process, | 278 | oops=panic Always panic on oopses. Default is to just kill the process, |
238 | but there is a small probability of deadlocking the machine. | 279 | but there is a small probability of deadlocking the machine. |
239 | This will also cause panics on machine check exceptions. | 280 | This will also cause panics on machine check exceptions. |
240 | Useful together with panic=30 to trigger a reboot. | 281 | Useful together with panic=30 to trigger a reboot. |
241 | 282 | ||
242 | kstack=N Print that many words from the kernel stack in oops dumps. | 283 | kstack=N Print N words from the kernel stack in oops dumps. |
243 | 284 | ||
244 | pagefaulttrace Dump all page faults. Only useful for extreme debugging | 285 | pagefaulttrace Dump all page faults. Only useful for extreme debugging |
245 | and will create a lot of output. | 286 | and will create a lot of output. |
246 | 287 | ||
247 | call_trace=[old|both|newfallback|new] | 288 | call_trace=[old|both|newfallback|new] |
@@ -251,15 +292,8 @@ Debugging | |||
251 | newfallback: use new unwinder but fall back to old if it gets | 292 | newfallback: use new unwinder but fall back to old if it gets |
252 | stuck (default) | 293 | stuck (default) |
253 | 294 | ||
254 | call_trace=[old|both|newfallback|new] | 295 | Miscellaneous |
255 | old: use old inexact backtracer | ||
256 | new: use new exact dwarf2 unwinder | ||
257 | both: print entries from both | ||
258 | newfallback: use new unwinder but fall back to old if it gets | ||
259 | stuck (default) | ||
260 | |||
261 | Misc | ||
262 | 296 | ||
263 | noreplacement Don't replace instructions with more appropriate ones | 297 | noreplacement Don't replace instructions with more appropriate ones |
264 | for the CPU. This may be useful on asymmetric MP systems | 298 | for the CPU. This may be useful on asymmetric MP systems |
265 | where some CPU have less capabilities than the others. | 299 | where some CPUs have less capabilities than others. |
diff --git a/Documentation/x86_64/cpu-hotplug-spec b/Documentation/x86_64/cpu-hotplug-spec index 5c0fa345e556..3c23e0587db3 100644 --- a/Documentation/x86_64/cpu-hotplug-spec +++ b/Documentation/x86_64/cpu-hotplug-spec | |||
@@ -2,7 +2,7 @@ Firmware support for CPU hotplug under Linux/x86-64 | |||
2 | --------------------------------------------------- | 2 | --------------------------------------------------- |
3 | 3 | ||
4 | Linux/x86-64 supports CPU hotplug now. For various reasons Linux wants to | 4 | Linux/x86-64 supports CPU hotplug now. For various reasons Linux wants to |
5 | know in advance boot time the maximum number of CPUs that could be plugged | 5 | know in advance of boot time the maximum number of CPUs that could be plugged |
6 | into the system. ACPI 3.0 currently has no official way to supply | 6 | into the system. ACPI 3.0 currently has no official way to supply |
7 | this information from the firmware to the operating system. | 7 | this information from the firmware to the operating system. |
8 | 8 | ||
diff --git a/Documentation/x86_64/kernel-stacks b/Documentation/x86_64/kernel-stacks index bddfddd466ab..5ad65d51fb95 100644 --- a/Documentation/x86_64/kernel-stacks +++ b/Documentation/x86_64/kernel-stacks | |||
@@ -9,9 +9,9 @@ zombie. While the thread is in user space the kernel stack is empty | |||
9 | except for the thread_info structure at the bottom. | 9 | except for the thread_info structure at the bottom. |
10 | 10 | ||
11 | In addition to the per thread stacks, there are specialized stacks | 11 | In addition to the per thread stacks, there are specialized stacks |
12 | associated with each cpu. These stacks are only used while the kernel | 12 | associated with each CPU. These stacks are only used while the kernel |
13 | is in control on that cpu, when a cpu returns to user space the | 13 | is in control on that CPU; when a CPU returns to user space the |
14 | specialized stacks contain no useful data. The main cpu stacks is | 14 | specialized stacks contain no useful data. The main CPU stacks are: |
15 | 15 | ||
16 | * Interrupt stack. IRQSTACKSIZE | 16 | * Interrupt stack. IRQSTACKSIZE |
17 | 17 | ||
@@ -32,17 +32,17 @@ x86_64 also has a feature which is not available on i386, the ability | |||
32 | to automatically switch to a new stack for designated events such as | 32 | to automatically switch to a new stack for designated events such as |
33 | double fault or NMI, which makes it easier to handle these unusual | 33 | double fault or NMI, which makes it easier to handle these unusual |
34 | events on x86_64. This feature is called the Interrupt Stack Table | 34 | events on x86_64. This feature is called the Interrupt Stack Table |
35 | (IST). There can be up to 7 IST entries per cpu. The IST code is an | 35 | (IST). There can be up to 7 IST entries per CPU. The IST code is an |
36 | index into the Task State Segment (TSS), the IST entries in the TSS | 36 | index into the Task State Segment (TSS). The IST entries in the TSS |
37 | point to dedicated stacks, each stack can be a different size. | 37 | point to dedicated stacks; each stack can be a different size. |
38 | 38 | ||
39 | An IST is selected by an non-zero value in the IST field of an | 39 | An IST is selected by a non-zero value in the IST field of an |
40 | interrupt-gate descriptor. When an interrupt occurs and the hardware | 40 | interrupt-gate descriptor. When an interrupt occurs and the hardware |
41 | loads such a descriptor, the hardware automatically sets the new stack | 41 | loads such a descriptor, the hardware automatically sets the new stack |
42 | pointer based on the IST value, then invokes the interrupt handler. If | 42 | pointer based on the IST value, then invokes the interrupt handler. If |
43 | software wants to allow nested IST interrupts then the handler must | 43 | software wants to allow nested IST interrupts then the handler must |
44 | adjust the IST values on entry to and exit from the interrupt handler. | 44 | adjust the IST values on entry to and exit from the interrupt handler. |
45 | (this is occasionally done, e.g. for debug exceptions) | 45 | (This is occasionally done, e.g. for debug exceptions.) |
46 | 46 | ||
47 | Events with different IST codes (i.e. with different stacks) can be | 47 | Events with different IST codes (i.e. with different stacks) can be |
48 | nested. For example, a debug interrupt can safely be interrupted by an | 48 | nested. For example, a debug interrupt can safely be interrupted by an |
@@ -58,17 +58,17 @@ The currently assigned IST stacks are :- | |||
58 | 58 | ||
59 | Used for interrupt 12 - Stack Fault Exception (#SS). | 59 | Used for interrupt 12 - Stack Fault Exception (#SS). |
60 | 60 | ||
61 | This allows to recover from invalid stack segments. Rarely | 61 | This allows the CPU to recover from invalid stack segments. Rarely |
62 | happens. | 62 | happens. |
63 | 63 | ||
64 | * DOUBLEFAULT_STACK. EXCEPTION_STKSZ (PAGE_SIZE). | 64 | * DOUBLEFAULT_STACK. EXCEPTION_STKSZ (PAGE_SIZE). |
65 | 65 | ||
66 | Used for interrupt 8 - Double Fault Exception (#DF). | 66 | Used for interrupt 8 - Double Fault Exception (#DF). |
67 | 67 | ||
68 | Invoked when handling a exception causes another exception. Happens | 68 | Invoked when handling one exception causes another exception. Happens |
69 | when the kernel is very confused (e.g. kernel stack pointer corrupt) | 69 | when the kernel is very confused (e.g. kernel stack pointer corrupt). |
70 | Using a separate stack allows to recover from it well enough in many | 70 | Using a separate stack allows the kernel to recover from it well enough |
71 | cases to still output an oops. | 71 | in many cases to still output an oops. |
72 | 72 | ||
73 | * NMI_STACK. EXCEPTION_STKSZ (PAGE_SIZE). | 73 | * NMI_STACK. EXCEPTION_STKSZ (PAGE_SIZE). |
74 | 74 | ||
diff --git a/Documentation/x86_64/machinecheck b/Documentation/x86_64/machinecheck new file mode 100644 index 000000000000..068a6d9904b9 --- /dev/null +++ b/Documentation/x86_64/machinecheck | |||
@@ -0,0 +1,70 @@ | |||
1 | |||
2 | Configurable sysfs parameters for the x86-64 machine check code. | ||
3 | |||
4 | Machine checks report internal hardware error conditions detected | ||
5 | by the CPU. Uncorrected errors typically cause a machine check | ||
6 | (often with panic), corrected ones cause a machine check log entry. | ||
7 | |||
8 | Machine checks are organized in banks (normally associated with | ||
9 | a hardware subsystem) and subevents in a bank. The exact meaning | ||
10 | of the banks and subevent is CPU specific. | ||
11 | |||
12 | mcelog knows how to decode them. | ||
13 | |||
14 | When you see the "Machine check errors logged" message in the system | ||
15 | log then mcelog should run to collect and decode machine check entries | ||
16 | from /dev/mcelog. Normally mcelog should be run regularly from a cronjob. | ||
17 | |||
18 | Each CPU has a directory in /sys/devices/system/machinecheck/machinecheckN | ||
19 | (N = CPU number) | ||
20 | |||
21 | The directory contains some configurable entries: | ||
22 | |||
23 | Entries: | ||
24 | |||
25 | bankNctl | ||
26 | (N bank number) | ||
27 | 64bit Hex bitmask enabling/disabling specific subevents for bank N | ||
28 | When a bit in the bitmask is zero then the respective | ||
29 | subevent will not be reported. | ||
30 | By default all events are enabled. | ||
31 | Note that BIOS maintain another mask to disable specific events | ||
32 | per bank. This is not visible here | ||
33 | |||
34 | The following entries appear for each CPU, but they are truly shared | ||
35 | between all CPUs. | ||
36 | |||
37 | check_interval | ||
38 | How often to poll for corrected machine check errors, in seconds | ||
39 | (Note output is hexademical). Default 5 minutes. | ||
40 | |||
41 | tolerant | ||
42 | Tolerance level. When a machine check exception occurs for a non | ||
43 | corrected machine check the kernel can take different actions. | ||
44 | Since machine check exceptions can happen any time it is sometimes | ||
45 | risky for the kernel to kill a process because it defies | ||
46 | normal kernel locking rules. The tolerance level configures | ||
47 | how hard the kernel tries to recover even at some risk of deadlock. | ||
48 | |||
49 | 0: always panic, | ||
50 | 1: panic if deadlock possible, | ||
51 | 2: try to avoid panic, | ||
52 | 3: never panic or exit (for testing only) | ||
53 | |||
54 | Default: 1 | ||
55 | |||
56 | Note this only makes a difference if the CPU allows recovery | ||
57 | from a machine check exception. Current x86 CPUs generally do not. | ||
58 | |||
59 | trigger | ||
60 | Program to run when a machine check event is detected. | ||
61 | This is an alternative to running mcelog regularly from cron | ||
62 | and allows to detect events faster. | ||
63 | |||
64 | TBD document entries for AMD threshold interrupt configuration | ||
65 | |||
66 | For more details about the x86 machine check architecture | ||
67 | see the Intel and AMD architecture manuals from their developer websites. | ||
68 | |||
69 | For more details about the architecture see | ||
70 | see http://one.firstfloor.org/~andi/mce.pdf | ||
diff --git a/Documentation/x86_64/mm.txt b/Documentation/x86_64/mm.txt index 133561b9cb0c..f42798ed1c54 100644 --- a/Documentation/x86_64/mm.txt +++ b/Documentation/x86_64/mm.txt | |||
@@ -3,26 +3,26 @@ | |||
3 | 3 | ||
4 | Virtual memory map with 4 level page tables: | 4 | Virtual memory map with 4 level page tables: |
5 | 5 | ||
6 | 0000000000000000 - 00007fffffffffff (=47bits) user space, different per mm | 6 | 0000000000000000 - 00007fffffffffff (=47 bits) user space, different per mm |
7 | hole caused by [48:63] sign extension | 7 | hole caused by [48:63] sign extension |
8 | ffff800000000000 - ffff80ffffffffff (=40bits) guard hole | 8 | ffff800000000000 - ffff80ffffffffff (=40 bits) guard hole |
9 | ffff810000000000 - ffffc0ffffffffff (=46bits) direct mapping of all phys. memory | 9 | ffff810000000000 - ffffc0ffffffffff (=46 bits) direct mapping of all phys. memory |
10 | ffffc10000000000 - ffffc1ffffffffff (=40bits) hole | 10 | ffffc10000000000 - ffffc1ffffffffff (=40 bits) hole |
11 | ffffc20000000000 - ffffe1ffffffffff (=45bits) vmalloc/ioremap space | 11 | ffffc20000000000 - ffffe1ffffffffff (=45 bits) vmalloc/ioremap space |
12 | ... unused hole ... | 12 | ... unused hole ... |
13 | ffffffff80000000 - ffffffff82800000 (=40MB) kernel text mapping, from phys 0 | 13 | ffffffff80000000 - ffffffff82800000 (=40 MB) kernel text mapping, from phys 0 |
14 | ... unused hole ... | 14 | ... unused hole ... |
15 | ffffffff88000000 - fffffffffff00000 (=1919MB) module mapping space | 15 | ffffffff88000000 - fffffffffff00000 (=1919 MB) module mapping space |
16 | 16 | ||
17 | The direct mapping covers all memory in the system upto the highest | 17 | The direct mapping covers all memory in the system up to the highest |
18 | memory address (this means in some cases it can also include PCI memory | 18 | memory address (this means in some cases it can also include PCI memory |
19 | holes) | 19 | holes). |
20 | 20 | ||
21 | vmalloc space is lazily synchronized into the different PML4 pages of | 21 | vmalloc space is lazily synchronized into the different PML4 pages of |
22 | the processes using the page fault handler, with init_level4_pgt as | 22 | the processes using the page fault handler, with init_level4_pgt as |
23 | reference. | 23 | reference. |
24 | 24 | ||
25 | Current X86-64 implementations only support 40 bit of address space, | 25 | Current X86-64 implementations only support 40 bits of address space, |
26 | but we support upto 46bits. This expands into MBZ space in the page tables. | 26 | but we support up to 46 bits. This expands into MBZ space in the page tables. |
27 | 27 | ||
28 | -Andi Kleen, Jul 2004 | 28 | -Andi Kleen, Jul 2004 |