Commit d6a24d0640d609138a4e40a4ce9fd9fe7859e24c
Exists in
smarc_imx_lf-5.15.y
and in
32 other branches
Merge tag 'docs-for-linus' of git://git.lwn.net/linux-2.6
Pull documentation updates from Jonathan Corbet: "Numerous fixes, the overdue removal of the i2o docs, some new Chinese translations, and, hopefully, the README fix that will end the flow of identical patches to that file" * tag 'docs-for-linus' of git://git.lwn.net/linux-2.6: (34 commits) Documentation/memcg: update memcg/kmem status Documentation: blackfin: Makefile: Typo building issue Documentation/vm/pagemap.txt: correct location of page-types tool Documentation/memory-barriers.txt: typo fix doc: Add guest_nice column to example output of `cat /proc/stat' Documentation/kernel-parameters: Move "eagerfpu" to its right place Documentation: gpio: Update ACPI part of the document to mention _DSD docs/completion.txt: Various tweaks and corrections doc: completion: context, scope and language fixes Documentation:Update Documentation/zh_CN/arm64/memory.txt Documentation:Update Documentation/zh_CN/arm64/booting.txt Documentation: Chinese translation of arm64/legacy_instructions.txt DocBook media: fix broken EIA hyperlink Documentation: tweak the maintainers entry README: Change gzip/bzip2 to xz compression format README: Update version number reference doc:pci: Fix typo in Documentation/PCI Documentation: drm: Use '->' when describing access through pointers. Documentation: Remove mentioning of block barriers Documentation/email-clients.txt: Fix one grammar mistake, add extra info about TB ...
Showing 40 changed files Side-by-side Diff
- Documentation/CodingStyle
- Documentation/DocBook/drm.tmpl
- Documentation/DocBook/media/v4l/biblio.xml
- Documentation/DocBook/media/v4l/dev-sliced-vbi.xml
- Documentation/DocBook/media/v4l/vidioc-g-sliced-vbi-cap.xml
- Documentation/PCI/MSI-HOWTO.txt
- Documentation/PCI/pci-error-recovery.txt
- Documentation/PCI/pcieaer-howto.txt
- Documentation/arm/Booting
- Documentation/arm/README
- Documentation/blackfin/Makefile
- Documentation/block/biodoc.txt
- Documentation/cgroups/memory.txt
- Documentation/email-clients.txt
- Documentation/filesystems/proc.txt
- Documentation/gpio/board.txt
- Documentation/i2o/README
- Documentation/i2o/ioctl
- Documentation/input/alps.txt
- Documentation/input/event-codes.txt
- Documentation/input/gpio-tilt.txt
- Documentation/input/iforce-protocol.txt
- Documentation/input/walkera0701.txt
- Documentation/input/yealink.txt
- Documentation/kernel-parameters.txt
- Documentation/kmemcheck.txt
- Documentation/kprobes.txt
- Documentation/memory-barriers.txt
- Documentation/memory-hotplug.txt
- Documentation/printk-formats.txt
- Documentation/scheduler/completion.txt
- Documentation/vm/pagemap.txt
- Documentation/vm/transhuge.txt
- Documentation/zh_CN/arm64/booting.txt
- Documentation/zh_CN/arm64/legacy_instructions.txt
- Documentation/zh_CN/arm64/memory.txt
- MAINTAINERS
- README
- include/linux/hsi/hsi.h
- init/Kconfig
Documentation/CodingStyle
... | ... | @@ -13,7 +13,7 @@ |
13 | 13 | Anyway, here goes: |
14 | 14 | |
15 | 15 | |
16 | - Chapter 1: Indentation | |
16 | + Chapter 1: Indentation | |
17 | 17 | |
18 | 18 | Tabs are 8 characters, and thus indentations are also 8 characters. |
19 | 19 | There are heretic movements that try to make indentations 4 (or even 2!) |
... | ... | @@ -56,7 +56,6 @@ |
56 | 56 | break; |
57 | 57 | } |
58 | 58 | |
59 | - | |
60 | 59 | Don't put multiple statements on a single line unless you have |
61 | 60 | something to hide: |
62 | 61 | |
63 | 62 | |
64 | 63 | |
... | ... | @@ -156,25 +155,25 @@ |
156 | 155 | |
157 | 156 | Do not unnecessarily use braces where a single statement will do. |
158 | 157 | |
159 | -if (condition) | |
160 | - action(); | |
158 | + if (condition) | |
159 | + action(); | |
161 | 160 | |
162 | 161 | and |
163 | 162 | |
164 | -if (condition) | |
165 | - do_this(); | |
166 | -else | |
167 | - do_that(); | |
163 | + if (condition) | |
164 | + do_this(); | |
165 | + else | |
166 | + do_that(); | |
168 | 167 | |
169 | 168 | This does not apply if only one branch of a conditional statement is a single |
170 | 169 | statement; in the latter case use braces in both branches: |
171 | 170 | |
172 | -if (condition) { | |
173 | - do_this(); | |
174 | - do_that(); | |
175 | -} else { | |
176 | - otherwise(); | |
177 | -} | |
171 | + if (condition) { | |
172 | + do_this(); | |
173 | + do_that(); | |
174 | + } else { | |
175 | + otherwise(); | |
176 | + } | |
178 | 177 | |
179 | 178 | 3.1: Spaces |
180 | 179 | |
181 | 180 | |
182 | 181 | |
... | ... | @@ -186,8 +185,11 @@ |
186 | 185 | "struct fileinfo info;" is declared). |
187 | 186 | |
188 | 187 | So use a space after these keywords: |
188 | + | |
189 | 189 | if, switch, case, for, do, while |
190 | + | |
190 | 191 | but not with sizeof, typeof, alignof, or __attribute__. E.g., |
192 | + | |
191 | 193 | s = sizeof(struct file); |
192 | 194 | |
193 | 195 | Do not add spaces around (inside) parenthesized expressions. This example is |
194 | 196 | |
195 | 197 | |
... | ... | @@ -209,12 +211,15 @@ |
209 | 211 | = + - < > * / % | & ^ <= >= == != ? : |
210 | 212 | |
211 | 213 | but no space after unary operators: |
214 | + | |
212 | 215 | & * + - ~ ! sizeof typeof alignof __attribute__ defined |
213 | 216 | |
214 | 217 | no space before the postfix increment & decrement unary operators: |
218 | + | |
215 | 219 | ++ -- |
216 | 220 | |
217 | 221 | no space after the prefix increment & decrement unary operators: |
222 | + | |
218 | 223 | ++ -- |
219 | 224 | |
220 | 225 | and no space around the '.' and "->" structure member operators. |
221 | 226 | |
... | ... | @@ -268,13 +273,11 @@ |
268 | 273 | Chapter 5: Typedefs |
269 | 274 | |
270 | 275 | Please don't use things like "vps_t". |
271 | - | |
272 | 276 | It's a _mistake_ to use typedef for structures and pointers. When you see a |
273 | 277 | |
274 | 278 | vps_t a; |
275 | 279 | |
276 | 280 | in the source, what does it mean? |
277 | - | |
278 | 281 | In contrast, if it says |
279 | 282 | |
280 | 283 | struct virtual_container *a; |
... | ... | @@ -372,11 +375,11 @@ |
372 | 375 | exported, the EXPORT* macro for it should follow immediately after the closing |
373 | 376 | function brace line. E.g.: |
374 | 377 | |
375 | -int system_is_up(void) | |
376 | -{ | |
377 | - return system_state == SYSTEM_RUNNING; | |
378 | -} | |
379 | -EXPORT_SYMBOL(system_is_up); | |
378 | + int system_is_up(void) | |
379 | + { | |
380 | + return system_state == SYSTEM_RUNNING; | |
381 | + } | |
382 | + EXPORT_SYMBOL(system_is_up); | |
380 | 383 | |
381 | 384 | In function prototypes, include parameter names with their data types. |
382 | 385 | Although this is not required by the C language, it is preferred in Linux |
383 | 386 | |
384 | 387 | |
385 | 388 | |
386 | 389 | |
387 | 390 | |
... | ... | @@ -405,34 +408,34 @@ |
405 | 408 | modifications are prevented |
406 | 409 | - saves the compiler work to optimize redundant code away ;) |
407 | 410 | |
408 | -int fun(int a) | |
409 | -{ | |
410 | - int result = 0; | |
411 | - char *buffer; | |
411 | + int fun(int a) | |
412 | + { | |
413 | + int result = 0; | |
414 | + char *buffer; | |
412 | 415 | |
413 | - buffer = kmalloc(SIZE, GFP_KERNEL); | |
414 | - if (!buffer) | |
415 | - return -ENOMEM; | |
416 | + buffer = kmalloc(SIZE, GFP_KERNEL); | |
417 | + if (!buffer) | |
418 | + return -ENOMEM; | |
416 | 419 | |
417 | - if (condition1) { | |
418 | - while (loop1) { | |
419 | - ... | |
420 | + if (condition1) { | |
421 | + while (loop1) { | |
422 | + ... | |
423 | + } | |
424 | + result = 1; | |
425 | + goto out_buffer; | |
420 | 426 | } |
421 | - result = 1; | |
422 | - goto out_buffer; | |
427 | + ... | |
428 | + out_buffer: | |
429 | + kfree(buffer); | |
430 | + return result; | |
423 | 431 | } |
424 | - ... | |
425 | -out_buffer: | |
426 | - kfree(buffer); | |
427 | - return result; | |
428 | -} | |
429 | 432 | |
430 | 433 | A common type of bug to be aware of it "one err bugs" which look like this: |
431 | 434 | |
432 | -err: | |
433 | - kfree(foo->bar); | |
434 | - kfree(foo); | |
435 | - return ret; | |
435 | + err: | |
436 | + kfree(foo->bar); | |
437 | + kfree(foo); | |
438 | + return ret; | |
436 | 439 | |
437 | 440 | The bug in this code is that on some exit paths "foo" is NULL. Normally the |
438 | 441 | fix for this is to split it up into two error labels "err_bar:" and "err_foo:". |
... | ... | @@ -503,9 +506,9 @@ |
503 | 506 | (defun c-lineup-arglist-tabs-only (ignored) |
504 | 507 | "Line up argument lists by tabs, not spaces" |
505 | 508 | (let* ((anchor (c-langelem-pos c-syntactic-element)) |
506 | - (column (c-langelem-2nd-pos c-syntactic-element)) | |
507 | - (offset (- (1+ column) anchor)) | |
508 | - (steps (floor offset c-basic-offset))) | |
509 | + (column (c-langelem-2nd-pos c-syntactic-element)) | |
510 | + (offset (- (1+ column) anchor)) | |
511 | + (steps (floor offset c-basic-offset))) | |
509 | 512 | (* (max steps 1) |
510 | 513 | c-basic-offset))) |
511 | 514 | |
... | ... | @@ -612,7 +615,7 @@ |
612 | 615 | |
613 | 616 | Names of macros defining constants and labels in enums are capitalized. |
614 | 617 | |
615 | -#define CONSTANT 0x12345 | |
618 | + #define CONSTANT 0x12345 | |
616 | 619 | |
617 | 620 | Enums are preferred when defining several related constants. |
618 | 621 | |
619 | 622 | |
620 | 623 | |
... | ... | @@ -623,28 +626,28 @@ |
623 | 626 | |
624 | 627 | Macros with multiple statements should be enclosed in a do - while block: |
625 | 628 | |
626 | -#define macrofun(a, b, c) \ | |
627 | - do { \ | |
628 | - if (a == 5) \ | |
629 | - do_this(b, c); \ | |
630 | - } while (0) | |
629 | + #define macrofun(a, b, c) \ | |
630 | + do { \ | |
631 | + if (a == 5) \ | |
632 | + do_this(b, c); \ | |
633 | + } while (0) | |
631 | 634 | |
632 | 635 | Things to avoid when using macros: |
633 | 636 | |
634 | 637 | 1) macros that affect control flow: |
635 | 638 | |
636 | -#define FOO(x) \ | |
637 | - do { \ | |
638 | - if (blah(x) < 0) \ | |
639 | - return -EBUGGERED; \ | |
640 | - } while(0) | |
639 | + #define FOO(x) \ | |
640 | + do { \ | |
641 | + if (blah(x) < 0) \ | |
642 | + return -EBUGGERED; \ | |
643 | + } while(0) | |
641 | 644 | |
642 | 645 | is a _very_ bad idea. It looks like a function call but exits the "calling" |
643 | 646 | function; don't break the internal parsers of those who will read the code. |
644 | 647 | |
645 | 648 | 2) macros that depend on having a local variable with a magic name: |
646 | 649 | |
647 | -#define FOO(val) bar(index, val) | |
650 | + #define FOO(val) bar(index, val) | |
648 | 651 | |
649 | 652 | might look like a good thing, but it's confusing as hell when one reads the |
650 | 653 | code and it's prone to breakage from seemingly innocent changes. |
... | ... | @@ -656,8 +659,8 @@ |
656 | 659 | must enclose the expression in parentheses. Beware of similar issues with |
657 | 660 | macros using parameters. |
658 | 661 | |
659 | -#define CONSTANT 0x4000 | |
660 | -#define CONSTEXP (CONSTANT | 3) | |
662 | + #define CONSTANT 0x4000 | |
663 | + #define CONSTEXP (CONSTANT | 3) | |
661 | 664 | |
662 | 665 | 5) namespace collisions when defining local variables in macros resembling |
663 | 666 | functions: |
664 | 667 | |
... | ... | @@ -809,11 +812,11 @@ |
809 | 812 | For example, if you need to calculate the length of an array, take advantage |
810 | 813 | of the macro |
811 | 814 | |
812 | - #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) | |
815 | + #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) | |
813 | 816 | |
814 | 817 | Similarly, if you need to calculate the size of some structure member, use |
815 | 818 | |
816 | - #define FIELD_SIZEOF(t, f) (sizeof(((t*)0)->f)) | |
819 | + #define FIELD_SIZEOF(t, f) (sizeof(((t*)0)->f)) | |
817 | 820 | |
818 | 821 | There are also min() and max() macros that do strict type checking if you |
819 | 822 | need them. Feel free to peruse that header file to see what else is already |
820 | 823 | |
821 | 824 | |
... | ... | @@ -826,19 +829,19 @@ |
826 | 829 | indicated with special markers. For example, emacs interprets lines marked |
827 | 830 | like this: |
828 | 831 | |
829 | --*- mode: c -*- | |
832 | + -*- mode: c -*- | |
830 | 833 | |
831 | 834 | Or like this: |
832 | 835 | |
833 | -/* | |
834 | -Local Variables: | |
835 | -compile-command: "gcc -DMAGIC_DEBUG_FLAG foo.c" | |
836 | -End: | |
837 | -*/ | |
836 | + /* | |
837 | + Local Variables: | |
838 | + compile-command: "gcc -DMAGIC_DEBUG_FLAG foo.c" | |
839 | + End: | |
840 | + */ | |
838 | 841 | |
839 | 842 | Vim interprets markers that look like this: |
840 | 843 | |
841 | -/* vim:set sw=8 noet */ | |
844 | + /* vim:set sw=8 noet */ | |
842 | 845 | |
843 | 846 | Do not include any of these in source files. People have their own personal |
844 | 847 | editor configurations, and your source files should not override them. This |
... | ... | @@ -915,9 +918,9 @@ |
915 | 918 | place a comment after the #endif on the same line, noting the conditional |
916 | 919 | expression used. For instance: |
917 | 920 | |
918 | -#ifdef CONFIG_SOMETHING | |
919 | -... | |
920 | -#endif /* CONFIG_SOMETHING */ | |
921 | + #ifdef CONFIG_SOMETHING | |
922 | + ... | |
923 | + #endif /* CONFIG_SOMETHING */ | |
921 | 924 | |
922 | 925 | |
923 | 926 | Appendix I: References |
Documentation/DocBook/drm.tmpl
... | ... | @@ -1293,7 +1293,7 @@ |
1293 | 1293 | </para> |
1294 | 1294 | <para> |
1295 | 1295 | If a page flip can be successfully scheduled the driver must set the |
1296 | - <code>drm_crtc-<fb</code> field to the new framebuffer pointed to | |
1296 | + <code>drm_crtc->fb</code> field to the new framebuffer pointed to | |
1297 | 1297 | by <code>fb</code>. This is important so that the reference counting |
1298 | 1298 | on framebuffers stays balanced. |
1299 | 1299 | </para> |
Documentation/DocBook/media/v4l/biblio.xml
1 | 1 | <bibliography> |
2 | 2 | <title>References</title> |
3 | 3 | |
4 | - <biblioentry id="eia608"> | |
5 | - <abbrev>EIA 608-B</abbrev> | |
4 | + <biblioentry id="cea608"> | |
5 | + <abbrev>CEA 608-E</abbrev> | |
6 | 6 | <authorgroup> |
7 | - <corpauthor>Electronic Industries Alliance (<ulink | |
8 | -url="http://www.eia.org">http://www.eia.org</ulink>)</corpauthor> | |
7 | + <corpauthor>Consumer Electronics Association (<ulink | |
8 | +url="http://www.ce.org">http://www.ce.org</ulink>)</corpauthor> | |
9 | 9 | </authorgroup> |
10 | - <title>EIA 608-B "Recommended Practice for Line 21 Data | |
11 | -Service"</title> | |
10 | + <title>CEA-608-E R-2014 "Line 21 Data Services"</title> | |
12 | 11 | </biblioentry> |
13 | 12 | |
14 | 13 | <biblioentry id="en300294"> |
Documentation/DocBook/media/v4l/dev-sliced-vbi.xml
... | ... | @@ -254,7 +254,7 @@ |
254 | 254 | <row> |
255 | 255 | <entry><constant>V4L2_SLICED_CAPTION_525</constant></entry> |
256 | 256 | <entry>0x1000</entry> |
257 | - <entry><xref linkend="eia608" /></entry> | |
257 | + <entry><xref linkend="cea608" /></entry> | |
258 | 258 | <entry>NTSC line 21, 284 (second field 21)</entry> |
259 | 259 | <entry>Two bytes in transmission order, including parity |
260 | 260 | bit, lsb first transmitted.</entry> |
Documentation/DocBook/media/v4l/vidioc-g-sliced-vbi-cap.xml
... | ... | @@ -205,7 +205,7 @@ |
205 | 205 | <row> |
206 | 206 | <entry><constant>V4L2_SLICED_CAPTION_525</constant></entry> |
207 | 207 | <entry>0x1000</entry> |
208 | - <entry><xref linkend="eia608" /></entry> | |
208 | + <entry><xref linkend="cea608" /></entry> | |
209 | 209 | <entry>NTSC line 21, 284 (second field 21)</entry> |
210 | 210 | <entry>Two bytes in transmission order, including parity |
211 | 211 | bit, lsb first transmitted.</entry> |
Documentation/PCI/MSI-HOWTO.txt
... | ... | @@ -353,7 +353,7 @@ |
353 | 353 | rc = pci_enable_msix_range(adapter->pdev, adapter->msix_entries, |
354 | 354 | maxvec, maxvec); |
355 | 355 | /* |
356 | - * -ENOSPC is the only error code allowed to be analized | |
356 | + * -ENOSPC is the only error code allowed to be analyzed | |
357 | 357 | */ |
358 | 358 | if (rc == -ENOSPC) { |
359 | 359 | if (maxvec == 1) |
... | ... | @@ -370,7 +370,7 @@ |
370 | 370 | return rc; |
371 | 371 | } |
372 | 372 | |
373 | -Note how pci_enable_msix_range() return value is analized for a fallback - | |
373 | +Note how pci_enable_msix_range() return value is analyzed for a fallback - | |
374 | 374 | any error code other than -ENOSPC indicates a fatal error and should not |
375 | 375 | be retried. |
376 | 376 | |
... | ... | @@ -486,7 +486,7 @@ |
486 | 486 | If your device supports both MSI-X and MSI capabilities, you should use |
487 | 487 | the MSI-X facilities in preference to the MSI facilities. As mentioned |
488 | 488 | above, MSI-X supports any number of interrupts between 1 and 2048. |
489 | -In constrast, MSI is restricted to a maximum of 32 interrupts (and | |
489 | +In contrast, MSI is restricted to a maximum of 32 interrupts (and | |
490 | 490 | must be a power of two). In addition, the MSI interrupt vectors must |
491 | 491 | be allocated consecutively, so the system might not be able to allocate |
492 | 492 | as many vectors for MSI as it could for MSI-X. On some platforms, MSI |
... | ... | @@ -501,18 +501,9 @@ |
501 | 501 | not be re-entered). If a device uses multiple interrupts, the driver |
502 | 502 | must disable interrupts while the lock is held. If the device sends |
503 | 503 | a different interrupt, the driver will deadlock trying to recursively |
504 | -acquire the spinlock. | |
505 | - | |
506 | -There are two solutions. The first is to take the lock with | |
507 | -spin_lock_irqsave() or spin_lock_irq() (see | |
508 | -Documentation/DocBook/kernel-locking). The second is to specify | |
509 | -IRQF_DISABLED to request_irq() so that the kernel runs the entire | |
510 | -interrupt routine with interrupts disabled. | |
511 | - | |
512 | -If your MSI interrupt routine does not hold the lock for the whole time | |
513 | -it is running, the first solution may be best. The second solution is | |
514 | -normally preferred as it avoids making two transitions from interrupt | |
515 | -disabled to enabled and back again. | |
504 | +acquire the spinlock. Such deadlocks can be avoided by using | |
505 | +spin_lock_irqsave() or spin_lock_irq() which disable local interrupts | |
506 | +and acquire the lock (see Documentation/DocBook/kernel-locking). | |
516 | 507 | |
517 | 508 | 4.6 How to tell whether MSI/MSI-X is enabled on a device |
518 | 509 |
Documentation/PCI/pci-error-recovery.txt
... | ... | @@ -256,7 +256,7 @@ |
256 | 256 | ------------------ |
257 | 257 | |
258 | 258 | In response to a return value of PCI_ERS_RESULT_NEED_RESET, the |
259 | -the platform will peform a slot reset on the requesting PCI device(s). | |
259 | +the platform will perform a slot reset on the requesting PCI device(s). | |
260 | 260 | The actual steps taken by a platform to perform a slot reset |
261 | 261 | will be platform-dependent. Upon completion of slot reset, the |
262 | 262 | platform will call the device slot_reset() callback. |
Documentation/PCI/pcieaer-howto.txt
... | ... | @@ -66,8 +66,8 @@ |
66 | 66 | source ID. nosourceid=n by default. |
67 | 67 | |
68 | 68 | 2.3 AER error output |
69 | -When a PCI-E AER error is captured, an error message will be outputed to | |
70 | -console. If it's a correctable error, it is outputed as a warning. | |
69 | +When a PCI-E AER error is captured, an error message will be outputted to | |
70 | +console. If it's a correctable error, it is outputted as a warning. | |
71 | 71 | Otherwise, it is printed as an error. So users could choose different |
72 | 72 | log level to filter out correctable error messages. |
73 | 73 |
Documentation/arm/Booting
... | ... | @@ -58,13 +58,18 @@ |
58 | 58 | -------------------------- |
59 | 59 | |
60 | 60 | Existing boot loaders: OPTIONAL |
61 | -New boot loaders: MANDATORY | |
61 | +New boot loaders: MANDATORY except for DT-only platforms | |
62 | 62 | |
63 | 63 | The boot loader should detect the machine type its running on by some |
64 | 64 | method. Whether this is a hard coded value or some algorithm that |
65 | 65 | looks at the connected hardware is beyond the scope of this document. |
66 | 66 | The boot loader must ultimately be able to provide a MACH_TYPE_xxx |
67 | -value to the kernel. (see linux/arch/arm/tools/mach-types). | |
67 | +value to the kernel. (see linux/arch/arm/tools/mach-types). This | |
68 | +should be passed to the kernel in register r1. | |
69 | + | |
70 | +For DT-only platforms, the machine type will be determined by device | |
71 | +tree. set the machine type to all ones (~0). This is not strictly | |
72 | +necessary, but assures that it will not match any existing types. | |
68 | 73 | |
69 | 74 | 4. Setup boot data |
70 | 75 | ------------------ |
Documentation/arm/README
... | ... | @@ -185,13 +185,20 @@ |
185 | 185 | board devices are used, or the device is setup, and provides that |
186 | 186 | machine specific "personality." |
187 | 187 | |
188 | - This fine-grained machine specific selection is controlled by the machine | |
189 | - type ID, which acts both as a run-time and a compile-time code selection | |
190 | - method. | |
188 | + For platforms that support device tree (DT), the machine selection is | |
189 | + controlled at runtime by passing the device tree blob to the kernel. At | |
190 | + compile-time, support for the machine type must be selected. This allows for | |
191 | + a single multiplatform kernel build to be used for several machine types. | |
191 | 192 | |
192 | - You can register a new machine via the web site at: | |
193 | + For platforms that do not use device tree, this machine selection is | |
194 | + controlled by the machine type ID, which acts both as a run-time and a | |
195 | + compile-time code selection method. You can register a new machine via the | |
196 | + web site at: | |
193 | 197 | |
194 | 198 | <http://www.arm.linux.org.uk/developer/machines/> |
199 | + | |
200 | + Note: Please do not register a machine type for DT-only platforms. If your | |
201 | + platform is DT-only, you do not need a registered machine type. | |
195 | 202 | |
196 | 203 | --- |
197 | 204 | Russell King (15/03/2004) |
Documentation/blackfin/Makefile
Documentation/block/biodoc.txt
... | ... | @@ -48,8 +48,7 @@ |
48 | 48 | - Highmem I/O support |
49 | 49 | - I/O scheduler modularization |
50 | 50 | 1.2 Tuning based on high level requirements/capabilities |
51 | - 1.2.1 I/O Barriers | |
52 | - 1.2.2 Request Priority/Latency | |
51 | + 1.2.1 Request Priority/Latency | |
53 | 52 | 1.3 Direct access/bypass to lower layers for diagnostics and special |
54 | 53 | device operations |
55 | 54 | 1.3.1 Pre-built commands |
56 | 55 | |
57 | 56 | |
... | ... | @@ -255,30 +254,13 @@ |
255 | 254 | What kind of support exists at the generic block layer for this ? |
256 | 255 | |
257 | 256 | The flags and rw fields in the bio structure can be used for some tuning |
258 | -from above e.g indicating that an i/o is just a readahead request, or for | |
259 | -marking barrier requests (discussed next), or priority settings (currently | |
260 | -unused). As far as user applications are concerned they would need an | |
261 | -additional mechanism either via open flags or ioctls, or some other upper | |
262 | -level mechanism to communicate such settings to block. | |
257 | +from above e.g indicating that an i/o is just a readahead request, or priority | |
258 | +settings (currently unused). As far as user applications are concerned they | |
259 | +would need an additional mechanism either via open flags or ioctls, or some | |
260 | +other upper level mechanism to communicate such settings to block. | |
263 | 261 | |
264 | -1.2.1 I/O Barriers | |
262 | +1.2.1 Request Priority/Latency | |
265 | 263 | |
266 | -There is a way to enforce strict ordering for i/os through barriers. | |
267 | -All requests before a barrier point must be serviced before the barrier | |
268 | -request and any other requests arriving after the barrier will not be | |
269 | -serviced until after the barrier has completed. This is useful for higher | |
270 | -level control on write ordering, e.g flushing a log of committed updates | |
271 | -to disk before the corresponding updates themselves. | |
272 | - | |
273 | -A flag in the bio structure, BIO_BARRIER is used to identify a barrier i/o. | |
274 | -The generic i/o scheduler would make sure that it places the barrier request and | |
275 | -all other requests coming after it after all the previous requests in the | |
276 | -queue. Barriers may be implemented in different ways depending on the | |
277 | -driver. For more details regarding I/O barriers, please read barrier.txt | |
278 | -in this directory. | |
279 | - | |
280 | -1.2.2 Request Priority/Latency | |
281 | - | |
282 | 264 | Todo/Under discussion: |
283 | 265 | Arjan's proposed request priority scheme allows higher levels some broad |
284 | 266 | control (high/med/low) over the priority of an i/o request vs other pending |
... | ... | @@ -906,8 +888,8 @@ |
906 | 888 | to refer to both parts and I/O scheduler to specific I/O schedulers. |
907 | 889 | |
908 | 890 | Block layer implements generic dispatch queue in block/*.c. |
909 | -The generic dispatch queue is responsible for properly ordering barrier | |
910 | -requests, requeueing, handling non-fs requests and all other subtleties. | |
891 | +The generic dispatch queue is responsible for requeueing, handling non-fs | |
892 | +requests and all other subtleties. | |
911 | 893 | |
912 | 894 | Specific I/O schedulers are responsible for ordering normal filesystem |
913 | 895 | requests. They can also choose to delay certain requests to improve |
Documentation/cgroups/memory.txt
... | ... | @@ -275,11 +275,6 @@ |
275 | 275 | |
276 | 276 | 2.7 Kernel Memory Extension (CONFIG_MEMCG_KMEM) |
277 | 277 | |
278 | -WARNING: Current implementation lacks reclaim support. That means allocation | |
279 | - attempts will fail when close to the limit even if there are plenty of | |
280 | - kmem available for reclaim. That makes this option unusable in real | |
281 | - life so DO NOT SELECT IT unless for development purposes. | |
282 | - | |
283 | 278 | With the Kernel memory extension, the Memory Controller is able to limit |
284 | 279 | the amount of kernel memory used by the system. Kernel memory is fundamentally |
285 | 280 | different than user memory, since it can't be swapped out, which makes it |
... | ... | @@ -345,6 +340,9 @@ |
345 | 340 | In this case, the admin could set up K so that the sum of all groups is |
346 | 341 | never greater than the total memory, and freely set U at the cost of his |
347 | 342 | QoS. |
343 | + WARNING: In the current implementation, memory reclaim will NOT be | |
344 | + triggered for a cgroup when it hits K while staying below U, which makes | |
345 | + this setup impractical. | |
348 | 346 | |
349 | 347 | U != 0, K >= U: |
350 | 348 | Since kmem charges will also be fed to the user counter and reclaim will be |
Documentation/email-clients.txt
... | ... | @@ -211,13 +211,22 @@ |
211 | 211 | Thunderbird is an Outlook clone that likes to mangle text, but there are ways |
212 | 212 | to coerce it into behaving. |
213 | 213 | |
214 | -- Allows use of an external editor: | |
214 | +- Allow use of an external editor: | |
215 | 215 | The easiest thing to do with Thunderbird and patches is to use an |
216 | 216 | "external editor" extension and then just use your favorite $EDITOR |
217 | 217 | for reading/merging patches into the body text. To do this, download |
218 | 218 | and install the extension, then add a button for it using |
219 | 219 | View->Toolbars->Customize... and finally just click on it when in the |
220 | 220 | Compose dialog. |
221 | + | |
222 | + Please note that "external editor" requires that your editor must not | |
223 | + fork, or in other words, the editor must not return before closing. | |
224 | + You may have to pass additional flags or change the settings of your | |
225 | + editor. Most notably if you are using gvim then you must pass the -f | |
226 | + option to gvim by putting "/usr/bin/gvim -f" (if the binary is in | |
227 | + /usr/bin) to the text editor field in "external editor" settings. If you | |
228 | + are using some other editor then please read its manual to find out how | |
229 | + to do this. | |
221 | 230 | |
222 | 231 | To beat some sense out of the internal editor, do this: |
223 | 232 |
Documentation/filesystems/proc.txt
... | ... | @@ -1260,9 +1260,9 @@ |
1260 | 1260 | since the system first booted. For a quick look, simply cat the file: |
1261 | 1261 | |
1262 | 1262 | > cat /proc/stat |
1263 | - cpu 2255 34 2290 22625563 6290 127 456 0 0 | |
1264 | - cpu0 1132 34 1441 11311718 3675 127 438 0 0 | |
1265 | - cpu1 1123 0 849 11313845 2614 0 18 0 0 | |
1263 | + cpu 2255 34 2290 22625563 6290 127 456 0 0 0 | |
1264 | + cpu0 1132 34 1441 11311718 3675 127 438 0 0 0 | |
1265 | + cpu1 1123 0 849 11313845 2614 0 18 0 0 0 | |
1266 | 1266 | intr 114930548 113199788 3 0 5 263 0 4 [... lots more numbers ...] |
1267 | 1267 | ctxt 1990473 |
1268 | 1268 | btime 1062191376 |
Documentation/gpio/board.txt
... | ... | @@ -50,10 +50,43 @@ |
50 | 50 | |
51 | 51 | ACPI |
52 | 52 | ---- |
53 | -ACPI does not support function names for GPIOs. Therefore, only the "idx" | |
54 | -argument of gpiod_get_index() is useful to discriminate between GPIOs assigned | |
55 | -to a device. The "con_id" argument can still be set for debugging purposes (it | |
56 | -will appear under error messages as well as debug and sysfs nodes). | |
53 | +ACPI also supports function names for GPIOs in a similar fashion to DT. | |
54 | +The above DT example can be converted to an equivalent ACPI description | |
55 | +with the help of _DSD (Device Specific Data), introduced in ACPI 5.1: | |
56 | + | |
57 | + Device (FOO) { | |
58 | + Name (_CRS, ResourceTemplate () { | |
59 | + GpioIo (Exclusive, ..., IoRestrictionOutputOnly, | |
60 | + "\\_SB.GPI0") {15} // red | |
61 | + GpioIo (Exclusive, ..., IoRestrictionOutputOnly, | |
62 | + "\\_SB.GPI0") {16} // green | |
63 | + GpioIo (Exclusive, ..., IoRestrictionOutputOnly, | |
64 | + "\\_SB.GPI0") {17} // blue | |
65 | + GpioIo (Exclusive, ..., IoRestrictionOutputOnly, | |
66 | + "\\_SB.GPI0") {1} // power | |
67 | + }) | |
68 | + | |
69 | + Name (_DSD, Package () { | |
70 | + ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"), | |
71 | + Package () { | |
72 | + Package () { | |
73 | + "led-gpios", | |
74 | + Package () { | |
75 | + ^FOO, 0, 0, 1, | |
76 | + ^FOO, 1, 0, 1, | |
77 | + ^FOO, 2, 0, 1, | |
78 | + } | |
79 | + }, | |
80 | + Package () { | |
81 | + "power-gpios", | |
82 | + Package () {^FOO, 3, 0, 0}, | |
83 | + }, | |
84 | + } | |
85 | + }) | |
86 | + } | |
87 | + | |
88 | +For more information about the ACPI GPIO bindings see | |
89 | +Documentation/acpi/gpio-properties.txt. | |
57 | 90 | |
58 | 91 | Platform Data |
59 | 92 | ------------- |
Documentation/i2o/README
1 | - | |
2 | - Linux I2O Support (c) Copyright 1999 Red Hat Software | |
3 | - and others. | |
4 | - | |
5 | - This program is free software; you can redistribute it and/or | |
6 | - modify it under the terms of the GNU General Public License | |
7 | - as published by the Free Software Foundation; either version | |
8 | - 2 of the License, or (at your option) any later version. | |
9 | - | |
10 | -AUTHORS (so far) | |
11 | - | |
12 | -Alan Cox, Building Number Three Ltd. | |
13 | - Core code, SCSI and Block OSMs | |
14 | - | |
15 | -Steve Ralston, LSI Logic Corp. | |
16 | - Debugging SCSI and Block OSM | |
17 | - | |
18 | -Deepak Saxena, Intel Corp. | |
19 | - Various core/block extensions | |
20 | - /proc interface, bug fixes | |
21 | - Ioctl interfaces for control | |
22 | - Debugging LAN OSM | |
23 | - | |
24 | -Philip Rumpf | |
25 | - Fixed assorted dumb SMP locking bugs | |
26 | - | |
27 | -Juha Sievanen, University of Helsinki Finland | |
28 | - LAN OSM code | |
29 | - /proc interface to LAN class | |
30 | - Bug fixes | |
31 | - Core code extensions | |
32 | - | |
33 | -Auvo Hรคkkinen, University of Helsinki Finland | |
34 | - LAN OSM code | |
35 | - /Proc interface to LAN class | |
36 | - Bug fixes | |
37 | - Core code extensions | |
38 | - | |
39 | -Taneli Vรคhรคkangas, University of Helsinki Finland | |
40 | - Fixes to i2o_config | |
41 | - | |
42 | -CREDITS | |
43 | - | |
44 | - This work was made possible by | |
45 | - | |
46 | -Red Hat Software | |
47 | - Funding for the Building #3 part of the project | |
48 | - | |
49 | -Symbios Logic (Now LSI) | |
50 | - Host adapters, hints, known to work platforms when I hit | |
51 | - compatibility problems | |
52 | - | |
53 | -BoxHill Corporation | |
54 | - Loan of initial FibreChannel disk array used for development work. | |
55 | - | |
56 | -European Commission | |
57 | - Funding the work done by the University of Helsinki | |
58 | - | |
59 | -SysKonnect | |
60 | - Loan of FDDI and Gigabit Ethernet cards | |
61 | - | |
62 | -ASUSTeK | |
63 | - Loan of I2O motherboard |
Documentation/i2o/ioctl
1 | - | |
2 | -Linux I2O User Space Interface | |
3 | -rev 0.3 - 04/20/99 | |
4 | - | |
5 | -============================================================================= | |
6 | -Originally written by Deepak Saxena(deepak@plexity.net) | |
7 | -Currently maintained by Deepak Saxena(deepak@plexity.net) | |
8 | -============================================================================= | |
9 | - | |
10 | -I. Introduction | |
11 | - | |
12 | -The Linux I2O subsystem provides a set of ioctl() commands that can be | |
13 | -utilized by user space applications to communicate with IOPs and devices | |
14 | -on individual IOPs. This document defines the specific ioctl() commands | |
15 | -that are available to the user and provides examples of their uses. | |
16 | - | |
17 | -This document assumes the reader is familiar with or has access to the | |
18 | -I2O specification as no I2O message parameters are outlined. For information | |
19 | -on the specification, see http://www.i2osig.org | |
20 | - | |
21 | -This document and the I2O user space interface are currently maintained | |
22 | -by Deepak Saxena. Please send all comments, errata, and bug fixes to | |
23 | -deepak@csociety.purdue.edu | |
24 | - | |
25 | -II. IOP Access | |
26 | - | |
27 | -Access to the I2O subsystem is provided through the device file named | |
28 | -/dev/i2o/ctl. This file is a character file with major number 10 and minor | |
29 | -number 166. It can be created through the following command: | |
30 | - | |
31 | - mknod /dev/i2o/ctl c 10 166 | |
32 | - | |
33 | -III. Determining the IOP Count | |
34 | - | |
35 | - SYNOPSIS | |
36 | - | |
37 | - ioctl(fd, I2OGETIOPS, int *count); | |
38 | - | |
39 | - u8 count[MAX_I2O_CONTROLLERS]; | |
40 | - | |
41 | - DESCRIPTION | |
42 | - | |
43 | - This function returns the system's active IOP table. count should | |
44 | - point to a buffer containing MAX_I2O_CONTROLLERS entries. Upon | |
45 | - returning, each entry will contain a non-zero value if the given | |
46 | - IOP unit is active, and NULL if it is inactive or non-existent. | |
47 | - | |
48 | - RETURN VALUE. | |
49 | - | |
50 | - Returns 0 if no errors occur, and -1 otherwise. If an error occurs, | |
51 | - errno is set appropriately: | |
52 | - | |
53 | - EFAULT Invalid user space pointer was passed | |
54 | - | |
55 | -IV. Getting Hardware Resource Table | |
56 | - | |
57 | - SYNOPSIS | |
58 | - | |
59 | - ioctl(fd, I2OHRTGET, struct i2o_cmd_hrt *hrt); | |
60 | - | |
61 | - struct i2o_cmd_hrtlct | |
62 | - { | |
63 | - u32 iop; /* IOP unit number */ | |
64 | - void *resbuf; /* Buffer for result */ | |
65 | - u32 *reslen; /* Buffer length in bytes */ | |
66 | - }; | |
67 | - | |
68 | - DESCRIPTION | |
69 | - | |
70 | - This function returns the Hardware Resource Table of the IOP specified | |
71 | - by hrt->iop in the buffer pointed to by hrt->resbuf. The actual size of | |
72 | - the data is written into *(hrt->reslen). | |
73 | - | |
74 | - RETURNS | |
75 | - | |
76 | - This function returns 0 if no errors occur. If an error occurs, -1 | |
77 | - is returned and errno is set appropriately: | |
78 | - | |
79 | - EFAULT Invalid user space pointer was passed | |
80 | - ENXIO Invalid IOP number | |
81 | - ENOBUFS Buffer not large enough. If this occurs, the required | |
82 | - buffer length is written into *(hrt->reslen) | |
83 | - | |
84 | -V. Getting Logical Configuration Table | |
85 | - | |
86 | - SYNOPSIS | |
87 | - | |
88 | - ioctl(fd, I2OLCTGET, struct i2o_cmd_lct *lct); | |
89 | - | |
90 | - struct i2o_cmd_hrtlct | |
91 | - { | |
92 | - u32 iop; /* IOP unit number */ | |
93 | - void *resbuf; /* Buffer for result */ | |
94 | - u32 *reslen; /* Buffer length in bytes */ | |
95 | - }; | |
96 | - | |
97 | - DESCRIPTION | |
98 | - | |
99 | - This function returns the Logical Configuration Table of the IOP specified | |
100 | - by lct->iop in the buffer pointed to by lct->resbuf. The actual size of | |
101 | - the data is written into *(lct->reslen). | |
102 | - | |
103 | - RETURNS | |
104 | - | |
105 | - This function returns 0 if no errors occur. If an error occurs, -1 | |
106 | - is returned and errno is set appropriately: | |
107 | - | |
108 | - EFAULT Invalid user space pointer was passed | |
109 | - ENXIO Invalid IOP number | |
110 | - ENOBUFS Buffer not large enough. If this occurs, the required | |
111 | - buffer length is written into *(lct->reslen) | |
112 | - | |
113 | -VI. Setting Parameters | |
114 | - | |
115 | - SYNOPSIS | |
116 | - | |
117 | - ioctl(fd, I2OPARMSET, struct i2o_parm_setget *ops); | |
118 | - | |
119 | - struct i2o_cmd_psetget | |
120 | - { | |
121 | - u32 iop; /* IOP unit number */ | |
122 | - u32 tid; /* Target device TID */ | |
123 | - void *opbuf; /* Operation List buffer */ | |
124 | - u32 oplen; /* Operation List buffer length in bytes */ | |
125 | - void *resbuf; /* Result List buffer */ | |
126 | - u32 *reslen; /* Result List buffer length in bytes */ | |
127 | - }; | |
128 | - | |
129 | - DESCRIPTION | |
130 | - | |
131 | - This function posts a UtilParamsSet message to the device identified | |
132 | - by ops->iop and ops->tid. The operation list for the message is | |
133 | - sent through the ops->opbuf buffer, and the result list is written | |
134 | - into the buffer pointed to by ops->resbuf. The number of bytes | |
135 | - written is placed into *(ops->reslen). | |
136 | - | |
137 | - RETURNS | |
138 | - | |
139 | - The return value is the size in bytes of the data written into | |
140 | - ops->resbuf if no errors occur. If an error occurs, -1 is returned | |
141 | - and errno is set appropriately: | |
142 | - | |
143 | - EFAULT Invalid user space pointer was passed | |
144 | - ENXIO Invalid IOP number | |
145 | - ENOBUFS Buffer not large enough. If this occurs, the required | |
146 | - buffer length is written into *(ops->reslen) | |
147 | - ETIMEDOUT Timeout waiting for reply message | |
148 | - ENOMEM Kernel memory allocation error | |
149 | - | |
150 | - A return value of 0 does not mean that the value was actually | |
151 | - changed properly on the IOP. The user should check the result | |
152 | - list to determine the specific status of the transaction. | |
153 | - | |
154 | -VII. Getting Parameters | |
155 | - | |
156 | - SYNOPSIS | |
157 | - | |
158 | - ioctl(fd, I2OPARMGET, struct i2o_parm_setget *ops); | |
159 | - | |
160 | - struct i2o_parm_setget | |
161 | - { | |
162 | - u32 iop; /* IOP unit number */ | |
163 | - u32 tid; /* Target device TID */ | |
164 | - void *opbuf; /* Operation List buffer */ | |
165 | - u32 oplen; /* Operation List buffer length in bytes */ | |
166 | - void *resbuf; /* Result List buffer */ | |
167 | - u32 *reslen; /* Result List buffer length in bytes */ | |
168 | - }; | |
169 | - | |
170 | - DESCRIPTION | |
171 | - | |
172 | - This function posts a UtilParamsGet message to the device identified | |
173 | - by ops->iop and ops->tid. The operation list for the message is | |
174 | - sent through the ops->opbuf buffer, and the result list is written | |
175 | - into the buffer pointed to by ops->resbuf. The actual size of data | |
176 | - written is placed into *(ops->reslen). | |
177 | - | |
178 | - RETURNS | |
179 | - | |
180 | - EFAULT Invalid user space pointer was passed | |
181 | - ENXIO Invalid IOP number | |
182 | - ENOBUFS Buffer not large enough. If this occurs, the required | |
183 | - buffer length is written into *(ops->reslen) | |
184 | - ETIMEDOUT Timeout waiting for reply message | |
185 | - ENOMEM Kernel memory allocation error | |
186 | - | |
187 | - A return value of 0 does not mean that the value was actually | |
188 | - properly retrieved. The user should check the result list | |
189 | - to determine the specific status of the transaction. | |
190 | - | |
191 | -VIII. Downloading Software | |
192 | - | |
193 | - SYNOPSIS | |
194 | - | |
195 | - ioctl(fd, I2OSWDL, struct i2o_sw_xfer *sw); | |
196 | - | |
197 | - struct i2o_sw_xfer | |
198 | - { | |
199 | - u32 iop; /* IOP unit number */ | |
200 | - u8 flags; /* DownloadFlags field */ | |
201 | - u8 sw_type; /* Software type */ | |
202 | - u32 sw_id; /* Software ID */ | |
203 | - void *buf; /* Pointer to software buffer */ | |
204 | - u32 *swlen; /* Length of software buffer */ | |
205 | - u32 *maxfrag; /* Number of fragments */ | |
206 | - u32 *curfrag; /* Current fragment number */ | |
207 | - }; | |
208 | - | |
209 | - DESCRIPTION | |
210 | - | |
211 | - This function downloads a software fragment pointed by sw->buf | |
212 | - to the iop identified by sw->iop. The DownloadFlags, SwID, SwType | |
213 | - and SwSize fields of the ExecSwDownload message are filled in with | |
214 | - the values of sw->flags, sw->sw_id, sw->sw_type and *(sw->swlen). | |
215 | - | |
216 | - The fragments _must_ be sent in order and be 8K in size. The last | |
217 | - fragment _may_ be shorter, however. The kernel will compute its | |
218 | - size based on information in the sw->swlen field. | |
219 | - | |
220 | - Please note that SW transfers can take a long time. | |
221 | - | |
222 | - RETURNS | |
223 | - | |
224 | - This function returns 0 no errors occur. If an error occurs, -1 | |
225 | - is returned and errno is set appropriately: | |
226 | - | |
227 | - EFAULT Invalid user space pointer was passed | |
228 | - ENXIO Invalid IOP number | |
229 | - ETIMEDOUT Timeout waiting for reply message | |
230 | - ENOMEM Kernel memory allocation error | |
231 | - | |
232 | -IX. Uploading Software | |
233 | - | |
234 | - SYNOPSIS | |
235 | - | |
236 | - ioctl(fd, I2OSWUL, struct i2o_sw_xfer *sw); | |
237 | - | |
238 | - struct i2o_sw_xfer | |
239 | - { | |
240 | - u32 iop; /* IOP unit number */ | |
241 | - u8 flags; /* UploadFlags */ | |
242 | - u8 sw_type; /* Software type */ | |
243 | - u32 sw_id; /* Software ID */ | |
244 | - void *buf; /* Pointer to software buffer */ | |
245 | - u32 *swlen; /* Length of software buffer */ | |
246 | - u32 *maxfrag; /* Number of fragments */ | |
247 | - u32 *curfrag; /* Current fragment number */ | |
248 | - }; | |
249 | - | |
250 | - DESCRIPTION | |
251 | - | |
252 | - This function uploads a software fragment from the IOP identified | |
253 | - by sw->iop, sw->sw_type, sw->sw_id and optionally sw->swlen fields. | |
254 | - The UploadFlags, SwID, SwType and SwSize fields of the ExecSwUpload | |
255 | - message are filled in with the values of sw->flags, sw->sw_id, | |
256 | - sw->sw_type and *(sw->swlen). | |
257 | - | |
258 | - The fragments _must_ be requested in order and be 8K in size. The | |
259 | - user is responsible for allocating memory pointed by sw->buf. The | |
260 | - last fragment _may_ be shorter. | |
261 | - | |
262 | - Please note that SW transfers can take a long time. | |
263 | - | |
264 | - RETURNS | |
265 | - | |
266 | - This function returns 0 if no errors occur. If an error occurs, -1 | |
267 | - is returned and errno is set appropriately: | |
268 | - | |
269 | - EFAULT Invalid user space pointer was passed | |
270 | - ENXIO Invalid IOP number | |
271 | - ETIMEDOUT Timeout waiting for reply message | |
272 | - ENOMEM Kernel memory allocation error | |
273 | - | |
274 | -X. Removing Software | |
275 | - | |
276 | - SYNOPSIS | |
277 | - | |
278 | - ioctl(fd, I2OSWDEL, struct i2o_sw_xfer *sw); | |
279 | - | |
280 | - struct i2o_sw_xfer | |
281 | - { | |
282 | - u32 iop; /* IOP unit number */ | |
283 | - u8 flags; /* RemoveFlags */ | |
284 | - u8 sw_type; /* Software type */ | |
285 | - u32 sw_id; /* Software ID */ | |
286 | - void *buf; /* Unused */ | |
287 | - u32 *swlen; /* Length of the software data */ | |
288 | - u32 *maxfrag; /* Unused */ | |
289 | - u32 *curfrag; /* Unused */ | |
290 | - }; | |
291 | - | |
292 | - DESCRIPTION | |
293 | - | |
294 | - This function removes software from the IOP identified by sw->iop. | |
295 | - The RemoveFlags, SwID, SwType and SwSize fields of the ExecSwRemove message | |
296 | - are filled in with the values of sw->flags, sw->sw_id, sw->sw_type and | |
297 | - *(sw->swlen). Give zero in *(sw->len) if the value is unknown. IOP uses | |
298 | - *(sw->swlen) value to verify correct identication of the module to remove. | |
299 | - The actual size of the module is written into *(sw->swlen). | |
300 | - | |
301 | - RETURNS | |
302 | - | |
303 | - This function returns 0 if no errors occur. If an error occurs, -1 | |
304 | - is returned and errno is set appropriately: | |
305 | - | |
306 | - EFAULT Invalid user space pointer was passed | |
307 | - ENXIO Invalid IOP number | |
308 | - ETIMEDOUT Timeout waiting for reply message | |
309 | - ENOMEM Kernel memory allocation error | |
310 | - | |
311 | -X. Validating Configuration | |
312 | - | |
313 | - SYNOPSIS | |
314 | - | |
315 | - ioctl(fd, I2OVALIDATE, int *iop); | |
316 | - u32 iop; | |
317 | - | |
318 | - DESCRIPTION | |
319 | - | |
320 | - This function posts an ExecConfigValidate message to the controller | |
321 | - identified by iop. This message indicates that the current | |
322 | - configuration is accepted. The iop changes the status of suspect drivers | |
323 | - to valid and may delete old drivers from its store. | |
324 | - | |
325 | - RETURNS | |
326 | - | |
327 | - This function returns 0 if no erro occur. If an error occurs, -1 is | |
328 | - returned and errno is set appropriately: | |
329 | - | |
330 | - ETIMEDOUT Timeout waiting for reply message | |
331 | - ENXIO Invalid IOP number | |
332 | - | |
333 | -XI. Configuration Dialog | |
334 | - | |
335 | - SYNOPSIS | |
336 | - | |
337 | - ioctl(fd, I2OHTML, struct i2o_html *htquery); | |
338 | - struct i2o_html | |
339 | - { | |
340 | - u32 iop; /* IOP unit number */ | |
341 | - u32 tid; /* Target device ID */ | |
342 | - u32 page; /* HTML page */ | |
343 | - void *resbuf; /* Buffer for reply HTML page */ | |
344 | - u32 *reslen; /* Length in bytes of reply buffer */ | |
345 | - void *qbuf; /* Pointer to HTTP query string */ | |
346 | - u32 qlen; /* Length in bytes of query string buffer */ | |
347 | - }; | |
348 | - | |
349 | - DESCRIPTION | |
350 | - | |
351 | - This function posts an UtilConfigDialog message to the device identified | |
352 | - by htquery->iop and htquery->tid. The requested HTML page number is | |
353 | - provided by the htquery->page field, and the resultant data is stored | |
354 | - in the buffer pointed to by htquery->resbuf. If there is an HTTP query | |
355 | - string that is to be sent to the device, it should be sent in the buffer | |
356 | - pointed to by htquery->qbuf. If there is no query string, this field | |
357 | - should be set to NULL. The actual size of the reply received is written | |
358 | - into *(htquery->reslen). | |
359 | - | |
360 | - RETURNS | |
361 | - | |
362 | - This function returns 0 if no error occur. If an error occurs, -1 | |
363 | - is returned and errno is set appropriately: | |
364 | - | |
365 | - EFAULT Invalid user space pointer was passed | |
366 | - ENXIO Invalid IOP number | |
367 | - ENOBUFS Buffer not large enough. If this occurs, the required | |
368 | - buffer length is written into *(ops->reslen) | |
369 | - ETIMEDOUT Timeout waiting for reply message | |
370 | - ENOMEM Kernel memory allocation error | |
371 | - | |
372 | -XII. Events | |
373 | - | |
374 | - In the process of determining this. Current idea is to have use | |
375 | - the select() interface to allow user apps to periodically poll | |
376 | - the /dev/i2o/ctl device for events. When select() notifies the user | |
377 | - that an event is available, the user would call read() to retrieve | |
378 | - a list of all the events that are pending for the specific device. | |
379 | - | |
380 | -============================================================================= | |
381 | -Revision History | |
382 | -============================================================================= | |
383 | - | |
384 | -Rev 0.1 - 04/01/99 | |
385 | -- Initial revision | |
386 | - | |
387 | -Rev 0.2 - 04/06/99 | |
388 | -- Changed return values to match UNIX ioctl() standard. Only return values | |
389 | - are 0 and -1. All errors are reported through errno. | |
390 | -- Added summary of proposed possible event interfaces | |
391 | - | |
392 | -Rev 0.3 - 04/20/99 | |
393 | -- Changed all ioctls() to use pointers to user data instead of actual data | |
394 | -- Updated error values to match the code |
Documentation/input/alps.txt
... | ... | @@ -58,7 +58,7 @@ |
58 | 58 | While in command mode, register addresses can be set by first sending a |
59 | 59 | specific command, either EC for v3 devices or F5 for v4 devices. Then the |
60 | 60 | address is sent one nibble at a time, where each nibble is encoded as a |
61 | -command with optional data. This enoding differs slightly between the v3 and | |
61 | +command with optional data. This encoding differs slightly between the v3 and | |
62 | 62 | v4 protocols. |
63 | 63 | |
64 | 64 | Once an address has been set, the addressed register can be read by sending |
... | ... | @@ -139,7 +139,7 @@ |
139 | 139 | --------------------------------------- |
140 | 140 | |
141 | 141 | ALPS protocol version 3 has three different packet formats. The first two are |
142 | -associated with touchpad events, and the third is associatd with trackstick | |
142 | +associated with touchpad events, and the third is associated with trackstick | |
143 | 143 | events. |
144 | 144 | |
145 | 145 | The first type is the touchpad position packet. |
Documentation/input/event-codes.txt
... | ... | @@ -229,7 +229,7 @@ |
229 | 229 | EV_PWR: |
230 | 230 | ---------- |
231 | 231 | EV_PWR events are a special type of event used specifically for power |
232 | -mangement. Its usage is not well defined. To be addressed later. | |
232 | +management. Its usage is not well defined. To be addressed later. | |
233 | 233 | |
234 | 234 | Device properties: |
235 | 235 | ================= |
Documentation/input/gpio-tilt.txt
... | ... | @@ -28,7 +28,7 @@ |
28 | 28 | -------- |
29 | 29 | |
30 | 30 | Example configuration for a single TS1003 tilt switch that rotates around |
31 | -one axis in 4 steps and emitts the current tilt via two GPIOs. | |
31 | +one axis in 4 steps and emits the current tilt via two GPIOs. | |
32 | 32 | |
33 | 33 | static int sg060_tilt_enable(struct device *dev) { |
34 | 34 | /* code to enable the sensors */ |
Documentation/input/iforce-protocol.txt
... | ... | @@ -97,7 +97,7 @@ |
97 | 97 | *** Attack and fade *** |
98 | 98 | OP= 02 |
99 | 99 | LEN= 08 |
100 | -00-01 Address where to store the parameteres | |
100 | +00-01 Address where to store the parameters | |
101 | 101 | 02-03 Duration of attack (little endian encoding, in ms) |
102 | 102 | 04 Level at end of attack. Signed byte. |
103 | 103 | 05-06 Duration of fade. |
Documentation/input/walkera0701.txt
... | ... | @@ -91,7 +91,7 @@ |
91 | 91 | first ten nibbles. |
92 | 92 | |
93 | 93 | Next nibbles 12 .. 21 represents four channels (not all channels can be |
94 | -directly controlled from TX). Binary representations ar the same as in first | |
94 | +directly controlled from TX). Binary representations are the same as in first | |
95 | 95 | four channels. In nibbles 22 and 23 is a special magic number. Nibble 24 is |
96 | 96 | checksum for nibbles 12..23. |
97 | 97 |
Documentation/input/yealink.txt
... | ... | @@ -93,7 +93,7 @@ |
93 | 93 | Format specifier |
94 | 94 | '8' : Generic 7 segment digit with individual addressable segments |
95 | 95 | |
96 | - Reduced capability 7 segm digit, when segments are hard wired together. | |
96 | + Reduced capability 7 segment digit, when segments are hard wired together. | |
97 | 97 | '1' : 2 segments digit only able to produce a 1. |
98 | 98 | 'e' : Most significant day of the month digit, |
99 | 99 | able to produce at least 1 2 3. |
Documentation/kernel-parameters.txt
... | ... | @@ -928,6 +928,12 @@ |
928 | 928 | Enable debug messages at boot time. See |
929 | 929 | Documentation/dynamic-debug-howto.txt for details. |
930 | 930 | |
931 | + eagerfpu= [X86] | |
932 | + on enable eager fpu restore | |
933 | + off disable eager fpu restore | |
934 | + auto selects the default scheme, which automatically | |
935 | + enables eagerfpu restore for xsaveopt. | |
936 | + | |
931 | 937 | early_ioremap_debug [KNL] |
932 | 938 | Enable debug messages in early_ioremap support. This |
933 | 939 | is useful for tracking down temporary early mappings |
... | ... | @@ -2343,12 +2349,6 @@ |
2343 | 2349 | in standard form of xsave area. By using this |
2344 | 2350 | parameter, xsave area per process might occupy more |
2345 | 2351 | memory on xsaves enabled systems. |
2346 | - | |
2347 | - eagerfpu= [X86] | |
2348 | - on enable eager fpu restore | |
2349 | - off disable eager fpu restore | |
2350 | - auto selects the default scheme, which automatically | |
2351 | - enables eagerfpu restore for xsaveopt. | |
2352 | 2352 | |
2353 | 2353 | nohlt [BUGS=ARM,SH] Tells the kernel that the sleep(SH) or |
2354 | 2354 | wfi(ARM) instruction doesn't work correctly and not to |
Documentation/kmemcheck.txt
... | ... | @@ -82,8 +82,8 @@ |
82 | 82 | |
83 | 83 | o CONFIG_DEBUG_PAGEALLOC=n |
84 | 84 | |
85 | - This option is located under "Kernel hacking" / "Debug page memory | |
86 | - allocations". | |
85 | + This option is located under "Kernel hacking" / "Memory Debugging" | |
86 | + / "Debug page memory allocations". | |
87 | 87 | |
88 | 88 | In addition, I highly recommend turning on CONFIG_DEBUG_INFO=y. This is also |
89 | 89 | located under "Kernel hacking". With this, you will be able to get line number |
Documentation/kprobes.txt
... | ... | @@ -305,8 +305,8 @@ |
305 | 305 | 3. Configuring Kprobes |
306 | 306 | |
307 | 307 | When configuring the kernel using make menuconfig/xconfig/oldconfig, |
308 | -ensure that CONFIG_KPROBES is set to "y". Under "Instrumentation | |
309 | -Support", look for "Kprobes". | |
308 | +ensure that CONFIG_KPROBES is set to "y". Under "General setup", look | |
309 | +for "Kprobes". | |
310 | 310 | |
311 | 311 | So that you can load and unload Kprobes-based instrumentation modules, |
312 | 312 | make sure "Loadable module support" (CONFIG_MODULES) and "Module |
Documentation/memory-barriers.txt
... | ... | @@ -1727,7 +1727,7 @@ |
1727 | 1727 | } |
1728 | 1728 | |
1729 | 1729 | The dma_rmb() allows us guarantee the device has released ownership |
1730 | - before we read the data from the descriptor, and he dma_wmb() allows | |
1730 | + before we read the data from the descriptor, and the dma_wmb() allows | |
1731 | 1731 | us to guarantee the data is written to the descriptor before the device |
1732 | 1732 | can see it now has ownership. The wmb() is needed to guarantee that the |
1733 | 1733 | cache coherent memory writes have completed before attempting a write to |
Documentation/memory-hotplug.txt
... | ... | @@ -149,7 +149,7 @@ |
149 | 149 | (0x100000000 / 1Gib = 4) |
150 | 150 | This device covers address range [0x100000000 ... 0x140000000) |
151 | 151 | |
152 | -Under each memory block, you can see 4 files: | |
152 | +Under each memory block, you can see 5 files: | |
153 | 153 | |
154 | 154 | /sys/devices/system/memory/memoryXXX/phys_index |
155 | 155 | /sys/devices/system/memory/memoryXXX/phys_device |
156 | 156 | |
157 | 157 | |
158 | 158 | |
159 | 159 | |
160 | 160 | |
161 | 161 | |
162 | 162 | |
163 | 163 | |
164 | 164 | |
... | ... | @@ -359,39 +359,52 @@ |
359 | 359 | -------------------------------- |
360 | 360 | 8. Memory hotplug event notifier |
361 | 361 | -------------------------------- |
362 | -Memory hotplug has event notifier. There are 6 types of notification. | |
362 | +Hotplugging events are sent to a notification queue. | |
363 | 363 | |
364 | -MEMORY_GOING_ONLINE | |
364 | +There are six types of notification defined in include/linux/memory.h: | |
365 | + | |
366 | +MEM_GOING_ONLINE | |
365 | 367 | Generated before new memory becomes available in order to be able to |
366 | 368 | prepare subsystems to handle memory. The page allocator is still unable |
367 | 369 | to allocate from the new memory. |
368 | 370 | |
369 | -MEMORY_CANCEL_ONLINE | |
371 | +MEM_CANCEL_ONLINE | |
370 | 372 | Generated if MEMORY_GOING_ONLINE fails. |
371 | 373 | |
372 | -MEMORY_ONLINE | |
374 | +MEM_ONLINE | |
373 | 375 | Generated when memory has successfully brought online. The callback may |
374 | 376 | allocate pages from the new memory. |
375 | 377 | |
376 | -MEMORY_GOING_OFFLINE | |
378 | +MEM_GOING_OFFLINE | |
377 | 379 | Generated to begin the process of offlining memory. Allocations are no |
378 | 380 | longer possible from the memory but some of the memory to be offlined |
379 | 381 | is still in use. The callback can be used to free memory known to a |
380 | 382 | subsystem from the indicated memory block. |
381 | 383 | |
382 | -MEMORY_CANCEL_OFFLINE | |
384 | +MEM_CANCEL_OFFLINE | |
383 | 385 | Generated if MEMORY_GOING_OFFLINE fails. Memory is available again from |
384 | 386 | the memory block that we attempted to offline. |
385 | 387 | |
386 | -MEMORY_OFFLINE | |
388 | +MEM_OFFLINE | |
387 | 389 | Generated after offlining memory is complete. |
388 | 390 | |
389 | -A callback routine can be registered by | |
391 | +A callback routine can be registered by calling | |
392 | + | |
390 | 393 | hotplug_memory_notifier(callback_func, priority) |
391 | 394 | |
392 | -The second argument of callback function (action) is event types of above. | |
393 | -The third argument is passed by pointer of struct memory_notify. | |
395 | +Callback functions with higher values of priority are called before callback | |
396 | +functions with lower values. | |
394 | 397 | |
398 | +A callback function must have the following prototype: | |
399 | + | |
400 | + int callback_func( | |
401 | + struct notifier_block *self, unsigned long action, void *arg); | |
402 | + | |
403 | +The first argument of the callback function (self) is a pointer to the block | |
404 | +of the notifier chain that points to the callback function itself. | |
405 | +The second argument (action) is one of the event types described above. | |
406 | +The third argument (arg) passes a pointer of struct memory_notify. | |
407 | + | |
395 | 408 | struct memory_notify { |
396 | 409 | unsigned long start_pfn; |
397 | 410 | unsigned long nr_pages; |
... | ... | @@ -411,6 +424,18 @@ |
411 | 424 | node loses all memory. If this is -1, then nodemask status is not changed. |
412 | 425 | If status_changed_nid* >= 0, callback should create/discard structures for the |
413 | 426 | node if necessary. |
427 | + | |
428 | +The callback routine shall return one of the values | |
429 | +NOTIFY_DONE, NOTIFY_OK, NOTIFY_BAD, NOTIFY_STOP | |
430 | +defined in include/linux/notifier.h | |
431 | + | |
432 | +NOTIFY_DONE and NOTIFY_OK have no effect on the further processing. | |
433 | + | |
434 | +NOTIFY_BAD is used as response to the MEM_GOING_ONLINE, MEM_GOING_OFFLINE, | |
435 | +MEM_ONLINE, or MEM_OFFLINE action to cancel hotplugging. It stops | |
436 | +further processing of the notification queue. | |
437 | + | |
438 | +NOTIFY_STOP stops further processing of the notification queue. | |
414 | 439 | |
415 | 440 | -------------- |
416 | 441 | 9. Future Work |
Documentation/printk-formats.txt
... | ... | @@ -228,7 +228,7 @@ |
228 | 228 | lower ('l') or upper case ('L') hex characters - and big endian order |
229 | 229 | in lower ('b') or upper case ('B') hex characters. |
230 | 230 | |
231 | - Where no additional specifiers are used the default little endian | |
231 | + Where no additional specifiers are used the default big endian | |
232 | 232 | order with lower case hex characters will be printed. |
233 | 233 | |
234 | 234 | Passed by reference. |
... | ... | @@ -273,6 +273,16 @@ |
273 | 273 | |
274 | 274 | Passed by reference. |
275 | 275 | |
276 | +bitmap and its derivatives such as cpumask and nodemask: | |
277 | + | |
278 | + %*pb 0779 | |
279 | + %*pbl 0,3-6,8-10 | |
280 | + | |
281 | + For printing bitmap and its derivatives such as cpumask and nodemask, | |
282 | + %*pb output the bitmap with field width as the number of bits and %*pbl | |
283 | + output the bitmap as range list with field width as the number of bits. | |
284 | + | |
285 | + Passed by reference. | |
276 | 286 | |
277 | 287 | Thank you for your cooperation and attention. |
278 | 288 |
Documentation/scheduler/completion.txt
... | ... | @@ -7,24 +7,24 @@ |
7 | 7 | ------------- |
8 | 8 | |
9 | 9 | If you have one or more threads of execution that must wait for some process |
10 | -to have reached a point or a specific state, completions can provide a race | |
11 | -free solution to this problem. Semantically they are somewhat like a | |
12 | -pthread_barriers and have similar use-cases. | |
10 | +to have reached a point or a specific state, completions can provide a | |
11 | +race-free solution to this problem. Semantically they are somewhat like a | |
12 | +pthread_barrier and have similar use-cases. | |
13 | 13 | |
14 | -Completions are a code synchronization mechanism that is preferable to any | |
14 | +Completions are a code synchronization mechanism which is preferable to any | |
15 | 15 | misuse of locks. Any time you think of using yield() or some quirky |
16 | -msleep(1); loop to allow something else to proceed, you probably want to | |
16 | +msleep(1) loop to allow something else to proceed, you probably want to | |
17 | 17 | look into using one of the wait_for_completion*() calls instead. The |
18 | -advantage of using completions is clear intent of the code but also more | |
18 | +advantage of using completions is clear intent of the code, but also more | |
19 | 19 | efficient code as both threads can continue until the result is actually |
20 | 20 | needed. |
21 | 21 | |
22 | 22 | Completions are built on top of the generic event infrastructure in Linux, |
23 | -with the event reduced to a simple flag appropriately called "done" in | |
24 | -struct completion, that tells the waiting threads of execution if they | |
23 | +with the event reduced to a simple flag (appropriately called "done") in | |
24 | +struct completion that tells the waiting threads of execution if they | |
25 | 25 | can continue safely. |
26 | 26 | |
27 | -As completions are scheduling related the code is found in | |
27 | +As completions are scheduling related, the code is found in | |
28 | 28 | kernel/sched/completion.c - for details on completion design and |
29 | 29 | implementation see completions-design.txt |
30 | 30 | |
31 | 31 | |
... | ... | @@ -32,9 +32,9 @@ |
32 | 32 | Usage: |
33 | 33 | ------ |
34 | 34 | |
35 | -There are three parts to the using completions, the initialization of the | |
35 | +There are three parts to using completions, the initialization of the | |
36 | 36 | struct completion, the waiting part through a call to one of the variants of |
37 | -wait_for_completion() and the signaling side through a call to complete(), | |
37 | +wait_for_completion() and the signaling side through a call to complete() | |
38 | 38 | or complete_all(). Further there are some helper functions for checking the |
39 | 39 | state of completions. |
40 | 40 | |
... | ... | @@ -50,7 +50,7 @@ |
50 | 50 | providing the wait queue to place tasks on for waiting and the flag for |
51 | 51 | indicating the state of affairs. |
52 | 52 | |
53 | -Completions should be named to convey the intent of the waiter. A good | |
53 | +Completions should be named to convey the intent of the waiter. A good | |
54 | 54 | example is: |
55 | 55 | |
56 | 56 | wait_for_completion(&early_console_added); |
... | ... | @@ -73,7 +73,7 @@ |
73 | 73 | |
74 | 74 | The re-initialization function, reinit_completion(), simply resets the |
75 | 75 | done element to "not available", thus again to 0, without touching the |
76 | -wait queue. Calling init_completion() on the same completions object is | |
76 | +wait queue. Calling init_completion() twice on the same completion object is | |
77 | 77 | most likely a bug as it re-initializes the queue to an empty queue and |
78 | 78 | enqueued tasks could get "lost" - use reinit_completion() in that case. |
79 | 79 | |
80 | 80 | |
81 | 81 | |
... | ... | @@ -87,11 +87,18 @@ |
87 | 87 | DECLARE_COMPLETION_ONSTACK(setup_done) |
88 | 88 | |
89 | 89 | suitable for automatic/local variables on the stack and will make lockdep |
90 | -happy. Note also that one needs to making *sure* the completion passt to | |
90 | +happy. Note also that one needs to make *sure* the completion passed to | |
91 | 91 | work threads remains in-scope, and no references remain to on-stack data |
92 | 92 | when the initiating function returns. |
93 | 93 | |
94 | +Using on-stack completions for code that calls any of the _timeout or | |
95 | +_interruptible/_killable variants is not advisable as they will require | |
96 | +additional synchronization to prevent the on-stack completion object in | |
97 | +the timeout/signal cases from going out of scope. Consider using dynamically | |
98 | +allocated completions when intending to use the _interruptible/_killable | |
99 | +or _timeout variants of wait_for_completion(). | |
94 | 100 | |
101 | + | |
95 | 102 | Waiting for completions: |
96 | 103 | ------------------------ |
97 | 104 | |
98 | 105 | |
99 | 106 | |
100 | 107 | |
101 | 108 | |
102 | 109 | |
103 | 110 | |
104 | 111 | |
105 | 112 | |
106 | 113 | |
... | ... | @@ -99,34 +106,38 @@ |
99 | 106 | calls wait_for_completion() on the initialized completion structure. |
100 | 107 | A typical usage scenario is: |
101 | 108 | |
102 | - structure completion setup_done; | |
109 | + struct completion setup_done; | |
103 | 110 | init_completion(&setup_done); |
104 | - initialze_work(...,&setup_done,...) | |
111 | + initialize_work(...,&setup_done,...) | |
105 | 112 | |
106 | 113 | /* run non-dependent code */ /* do setup */ |
107 | 114 | |
108 | - wait_for_completion(&seupt_done); complete(setup_done) | |
115 | + wait_for_completion(&setup_done); complete(setup_done) | |
109 | 116 | |
110 | -This is not implying any temporal order of wait_for_completion() and the | |
117 | +This is not implying any temporal order on wait_for_completion() and the | |
111 | 118 | call to complete() - if the call to complete() happened before the call |
112 | 119 | to wait_for_completion() then the waiting side simply will continue |
113 | -immediately as all dependencies are satisfied. | |
120 | +immediately as all dependencies are satisfied if not it will block until | |
121 | +completion is signaled by complete(). | |
114 | 122 | |
115 | -Note that wait_for_completion() is calling spin_lock_irq/spin_unlock_irq | |
123 | +Note that wait_for_completion() is calling spin_lock_irq()/spin_unlock_irq(), | |
116 | 124 | so it can only be called safely when you know that interrupts are enabled. |
117 | -Calling it from hard-irq context will result in hard to detect spurious | |
118 | -enabling of interrupts. | |
125 | +Calling it from hard-irq or irqs-off atomic contexts will result in | |
126 | +hard-to-detect spurious enabling of interrupts. | |
119 | 127 | |
120 | 128 | wait_for_completion(): |
121 | 129 | |
122 | 130 | void wait_for_completion(struct completion *done): |
123 | 131 | |
124 | -The default behavior is to wait without a timeout and mark the task as | |
132 | +The default behavior is to wait without a timeout and to mark the task as | |
125 | 133 | uninterruptible. wait_for_completion() and its variants are only safe |
126 | -in soft-interrupt or process context but not in hard-irq context. | |
134 | +in process context (as they can sleep) but not in atomic context, | |
135 | +interrupt context, with disabled irqs. or preemption is disabled - see also | |
136 | +try_wait_for_completion() below for handling completion in atomic/interrupt | |
137 | +context. | |
138 | + | |
127 | 139 | As all variants of wait_for_completion() can (obviously) block for a long |
128 | -time, you probably don't want to call this with held locks - see also | |
129 | -try_wait_for_completion() below. | |
140 | +time, you probably don't want to call this with held mutexes. | |
130 | 141 | |
131 | 142 | |
132 | 143 | Variants available: |
133 | 144 | |
134 | 145 | |
135 | 146 | |
136 | 147 | |
137 | 148 | |
138 | 149 | |
... | ... | @@ -141,43 +152,44 @@ |
141 | 152 | so care should be taken with assigning return-values to variables of proper |
142 | 153 | type. Checking for the specific meaning of return values also has been found |
143 | 154 | to be quite inaccurate e.g. constructs like |
144 | -if(!wait_for_completion_interruptible_timeout(...)) would execute the same | |
155 | +if (!wait_for_completion_interruptible_timeout(...)) would execute the same | |
145 | 156 | code path for successful completion and for the interrupted case - which is |
146 | 157 | probably not what you want. |
147 | 158 | |
148 | 159 | int wait_for_completion_interruptible(struct completion *done) |
149 | 160 | |
150 | -marking the task TASK_INTERRUPTIBLE. If a signal was received while waiting. | |
151 | -It will return -ERESTARTSYS and 0 otherwise. | |
161 | +This function marks the task TASK_INTERRUPTIBLE. If a signal was received | |
162 | +while waiting it will return -ERESTARTSYS; 0 otherwise. | |
152 | 163 | |
153 | 164 | unsigned long wait_for_completion_timeout(struct completion *done, |
154 | 165 | unsigned long timeout) |
155 | 166 | |
156 | -The task is marked as TASK_UNINTERRUPTIBLE and will wait at most timeout | |
157 | -(in jiffies). If timeout occurs it return 0 else the remaining time in | |
158 | -jiffies (but at least 1). Timeouts are preferably passed by msecs_to_jiffies() | |
159 | -or usecs_to_jiffies(). If the returned timeout value is deliberately ignored | |
160 | -a comment should probably explain why (e.g. see drivers/mfd/wm8350-core.c | |
161 | -wm8350_read_auxadc()) | |
167 | +The task is marked as TASK_UNINTERRUPTIBLE and will wait at most 'timeout' | |
168 | +(in jiffies). If timeout occurs it returns 0 else the remaining time in | |
169 | +jiffies (but at least 1). Timeouts are preferably calculated with | |
170 | +msecs_to_jiffies() or usecs_to_jiffies(). If the returned timeout value is | |
171 | +deliberately ignored a comment should probably explain why (e.g. see | |
172 | +drivers/mfd/wm8350-core.c wm8350_read_auxadc()) | |
162 | 173 | |
163 | 174 | long wait_for_completion_interruptible_timeout( |
164 | 175 | struct completion *done, unsigned long timeout) |
165 | 176 | |
166 | -passing a timeout in jiffies and marking the task as TASK_INTERRUPTIBLE. If a | |
167 | -signal was received it will return -ERESTARTSYS, 0 if completion timed-out and | |
168 | -the remaining time in jiffies if completion occurred. | |
177 | +This function passes a timeout in jiffies and marks the task as | |
178 | +TASK_INTERRUPTIBLE. If a signal was received it will return -ERESTARTSYS; | |
179 | +otherwise it returns 0 if the completion timed out or the remaining time in | |
180 | +jiffies if completion occurred. | |
169 | 181 | |
170 | -Further variants include _killable which passes TASK_KILLABLE as the | |
171 | -designated tasks state and will return a -ERESTARTSYS if interrupted or | |
172 | -else 0 if completions was achieved as well as a _timeout variant. | |
182 | +Further variants include _killable which uses TASK_KILLABLE as the | |
183 | +designated tasks state and will return -ERESTARTSYS if it is interrupted or | |
184 | +else 0 if completion was achieved. There is a _timeout variant as well: | |
173 | 185 | |
174 | 186 | long wait_for_completion_killable(struct completion *done) |
175 | 187 | long wait_for_completion_killable_timeout(struct completion *done, |
176 | 188 | unsigned long timeout) |
177 | 189 | |
178 | -The _io variants wait_for_completion_io behave the same as the non-_io | |
190 | +The _io variants wait_for_completion_io() behave the same as the non-_io | |
179 | 191 | variants, except for accounting waiting time as waiting on IO, which has |
180 | -an impact on how scheduling is calculated. | |
192 | +an impact on how the task is accounted in scheduling stats. | |
181 | 193 | |
182 | 194 | void wait_for_completion_io(struct completion *done) |
183 | 195 | unsigned long wait_for_completion_io_timeout(struct completion *done |
184 | 196 | |
... | ... | @@ -187,13 +199,13 @@ |
187 | 199 | Signaling completions: |
188 | 200 | ---------------------- |
189 | 201 | |
190 | -A thread of execution that wants to signal that the conditions for | |
191 | -continuation have been achieved calls complete() to signal exactly one | |
192 | -of the waiters that it can continue. | |
202 | +A thread that wants to signal that the conditions for continuation have been | |
203 | +achieved calls complete() to signal exactly one of the waiters that it can | |
204 | +continue. | |
193 | 205 | |
194 | 206 | void complete(struct completion *done) |
195 | 207 | |
196 | -or calls complete_all to signal all current and future waiters. | |
208 | +or calls complete_all() to signal all current and future waiters. | |
197 | 209 | |
198 | 210 | void complete_all(struct completion *done) |
199 | 211 | |
200 | 212 | |
201 | 213 | |
202 | 214 | |
203 | 215 | |
204 | 216 | |
205 | 217 | |
206 | 218 | |
... | ... | @@ -205,33 +217,33 @@ |
205 | 217 | If complete() is called multiple times then this will allow for that number |
206 | 218 | of waiters to continue - each call to complete() will simply increment the |
207 | 219 | done element. Calling complete_all() multiple times is a bug though. Both |
208 | -complete() and complete_all() can be called in hard-irq context safely. | |
220 | +complete() and complete_all() can be called in hard-irq/atomic context safely. | |
209 | 221 | |
210 | 222 | There only can be one thread calling complete() or complete_all() on a |
211 | -particular struct completions at any time - serialized through the wait | |
223 | +particular struct completion at any time - serialized through the wait | |
212 | 224 | queue spinlock. Any such concurrent calls to complete() or complete_all() |
213 | 225 | probably are a design bug. |
214 | 226 | |
215 | 227 | Signaling completion from hard-irq context is fine as it will appropriately |
216 | -lock with spin_lock_irqsave/spin_unlock_irqrestore. | |
228 | +lock with spin_lock_irqsave/spin_unlock_irqrestore and it will never sleep. | |
217 | 229 | |
218 | 230 | |
219 | 231 | try_wait_for_completion()/completion_done(): |
220 | 232 | -------------------------------------------- |
221 | 233 | |
222 | -The try_wait_for_completion will not put the thread on the wait queue but | |
223 | -rather returns false if it would need to enqueue (block) the thread, else it | |
224 | -consumes any posted completions and returns true. | |
234 | +The try_wait_for_completion() function will not put the thread on the wait | |
235 | +queue but rather returns false if it would need to enqueue (block) the thread, | |
236 | +else it consumes one posted completion and returns true. | |
225 | 237 | |
226 | - bool try_wait_for_completion(struct completion *done) | |
238 | + bool try_wait_for_completion(struct completion *done) | |
227 | 239 | |
228 | -Finally to check state of a completions without changing it in any way is | |
229 | -provided by completion_done() returning false if there are any posted | |
230 | -completion that was not yet consumed by waiters implying that there are | |
231 | -waiters and true otherwise; | |
240 | +Finally, to check the state of a completion without changing it in any way, | |
241 | +call completion_done(), which returns false if there are no posted | |
242 | +completions that were not yet consumed by waiters (implying that there are | |
243 | +waiters) and true otherwise; | |
232 | 244 | |
233 | - bool completion_done(struct completion *done) | |
245 | + bool completion_done(struct completion *done) | |
234 | 246 | |
235 | 247 | Both try_wait_for_completion() and completion_done() are safe to be called in |
236 | -hard-irq context. | |
248 | +hard-irq or atomic context. |
Documentation/vm/pagemap.txt
... | ... | @@ -131,7 +131,8 @@ |
131 | 131 | 13. SWAPCACHE page is mapped to swap space, ie. has an associated swap entry |
132 | 132 | 14. SWAPBACKED page is backed by swap/RAM |
133 | 133 | |
134 | -The page-types tool in this directory can be used to query the above flags. | |
134 | +The page-types tool in the tools/vm directory can be used to query the | |
135 | +above flags. | |
135 | 136 | |
136 | 137 | Using pagemap to do something useful: |
137 | 138 |
Documentation/vm/transhuge.txt
... | ... | @@ -159,6 +159,17 @@ |
159 | 159 | |
160 | 160 | /sys/kernel/mm/transparent_hugepage/khugepaged/full_scans |
161 | 161 | |
162 | +max_ptes_none specifies how many extra small pages (that are | |
163 | +not already mapped) can be allocated when collapsing a group | |
164 | +of small pages into one large page. | |
165 | + | |
166 | +/sys/kernel/mm/transparent_hugepage/khugepaged/max_ptes_none | |
167 | + | |
168 | +A higher value leads to use additional memory for programs. | |
169 | +A lower value leads to gain less thp performance. Value of | |
170 | +max_ptes_none can waste cpu time very little, you can | |
171 | +ignore it. | |
172 | + | |
162 | 173 | == Boot parameter == |
163 | 174 | |
164 | 175 | You can change the sysfs boot time defaults of Transparent Hugepage |
Documentation/zh_CN/arm64/booting.txt
... | ... | @@ -15,6 +15,8 @@ |
15 | 15 | ไบคๆตๆๅฐ้พ็่ฏ๏ผไนๅฏไปฅๅไธญๆ็็ปดๆค่ ๆฑๅฉใๅฆๆๆฌ็ฟป่ฏๆดๆฐไธๅๆถๆ่ ็ฟป |
16 | 16 | ่ฏๅญๅจ้ฎ้ข๏ผ่ฏท่็ณปไธญๆ็็ปดๆค่ ใ |
17 | 17 | |
18 | +ๆฌๆ็ฟป่ฏๆไบคๆถ็ Git ๆฃๅบ็นไธบ๏ผ bc465aa9d045feb0e13b4a8f32cc33c1943f62d6 | |
19 | + | |
18 | 20 | ่ฑๆ็็ปดๆค่ ๏ผ Will Deacon <will.deacon@arm.com> |
19 | 21 | ไธญๆ็็ปดๆค่ ๏ผ ๅ ็ Fu Wei <wefu@redhat.com> |
20 | 22 | ไธญๆ็็ฟป่ฏ่ ๏ผ ๅ ็ Fu Wei <wefu@redhat.com> |
21 | 23 | |
22 | 24 | |
23 | 25 | |
24 | 26 | |
... | ... | @@ -88,23 +90,45 @@ |
88 | 90 | |
89 | 91 | u32 code0; /* ๅฏๆง่กไปฃ็ */ |
90 | 92 | u32 code1; /* ๅฏๆง่กไปฃ็ */ |
91 | - u64 text_offset; /* ๆ ๅ่ฃ ่ฝฝๅ็งป */ | |
92 | - u64 res0 = 0; /* ไฟ็ */ | |
93 | - u64 res1 = 0; /* ไฟ็ */ | |
93 | + u64 text_offset; /* ๆ ๅ่ฃ ่ฝฝๅ็งป๏ผๅฐ็ซฏๆจกๅผ */ | |
94 | + u64 image_size; /* ๆ ๅๅฎ้ ๅคงๅฐ, ๅฐ็ซฏๆจกๅผ */ | |
95 | + u64 flags; /* ๅ ๆ ธๆๆ , ๅฐ็ซฏๆจกๅผ * | |
94 | 96 | u64 res2 = 0; /* ไฟ็ */ |
95 | 97 | u64 res3 = 0; /* ไฟ็ */ |
96 | 98 | u64 res4 = 0; /* ไฟ็ */ |
97 | 99 | u32 magic = 0x644d5241; /* ้ญๆฐ, ๅฐ็ซฏ, "ARM\x64" */ |
98 | - u32 res5 = 0; /* ไฟ็ */ | |
100 | + u32 res5; /* ไฟ็ ๏ผ็จไบ PE COFF ๅ็งป๏ผ */ | |
99 | 101 | |
100 | 102 | |
101 | 103 | ๆ ๅๅคดๆณจ้๏ผ |
102 | 104 | |
105 | +- ่ช v3.17 ่ตท๏ผ้ค้ๅฆๆ่ฏดๆ๏ผๆๆๅ้ฝๆฏๅฐ็ซฏๆจกๅผใ | |
106 | + | |
103 | 107 | - code0/code1 ่ด่ดฃ่ทณ่ฝฌๅฐ stext. |
104 | 108 | |
105 | -ๆ ๅๅฟ ้กปไฝไบ็ณป็ป RAM ่ตทๅงๅค็็นๅฎๅ็งป๏ผๅฝๅๆฏ 0x80000๏ผใ็ณป็ป RAM | |
106 | -็่ตทๅงๅฐๅๅฟ ้กปๆฏไปฅ 2MB ๅฏน้ฝ็ใ | |
109 | +- ๅฝ้่ฟ EFI ๅฏๅจๆถ๏ผ ๆๅ code0/code1 ่ขซ่ทณ่ฟใ | |
110 | + res5 ๆฏๅฐ PE ๆไปถๅคด็ๅ็งป๏ผ่ PE ๆไปถๅคดๅซๆ EFI ็ๅฏๅจๅ ฅๅฃ็น ๏ผefi_stub_entry๏ผใ | |
111 | + ๅฝ stub ไปฃ็ ๅฎๆไบๅฎ็ไฝฟๅฝ๏ผๅฎไผ่ทณ่ฝฌๅฐ code0 ็ปง็ปญๆญฃๅธธ็ๅฏๅจๆต็จใ | |
107 | 112 | |
113 | +- v3.17 ไนๅ๏ผๆชๆ็กฎๆๅฎ text_offset ็ๅญ่ๅบใๆญคๆถ๏ผimage_size ไธบ้ถ๏ผ | |
114 | + ไธ text_offset ไพ็ งๅ ๆ ธๅญ่ๅบไธบ 0x80000ใ | |
115 | + ๅฝ image_size ้้ถ๏ผtext_offset ไธบๅฐ็ซฏๆจกๅผไธๆฏๆๆๅผ๏ผๅบ่ขซๅผๅฏผๅ ่ฝฝ็จๅบไฝฟ็จใ | |
116 | + ๅฝ image_size ไธบ้ถ๏ผtext_offset ๅฏๅๅฎไธบ 0x80000ใ | |
117 | + | |
118 | +- flags ๅ (v3.17 ๅผๅ ฅ) ไธบ 64 ไฝๅฐ็ซฏๆจกๅผ๏ผๅ ถ็ผ็ ๅฆไธ๏ผ | |
119 | + ไฝ 0: ๅ ๆ ธๅญ่ๅบใ 1 ่กจ็คบๅคง็ซฏๆจกๅผ๏ผ0 ่กจ็คบๅฐ็ซฏๆจกๅผใ | |
120 | + ไฝ 1-63: ไฟ็ใ | |
121 | + | |
122 | +- ๅฝ image_size ไธบ้ถๆถ๏ผๅผๅฏผ่ฃ ่ฝฝ็จๅบๅบ่ฏฅ่ฏๅพๅจๅ ๆ ธๆ ๅๆซๅฐพไนๅๅฐฝๅฏ่ฝๅคๅฐไฟ็็ฉบ้ฒๅ ๅญ | |
123 | + ไพๅ ๆ ธ็ดๆฅไฝฟ็จใๅฏนๅ ๅญ็ฉบ้ด็้ๆฑ้ๅ ๆ้ๅฎ็ๅ ๆ ธ็นๆง่ๅผ, ไธๆ ๅฎ้ ้ๅถใ | |
124 | + | |
125 | +ๅ ๆ ธๆ ๅๅฟ ้กป่ขซๆพ็ฝฎๅจ้ ่ฟๅฏ็จ็ณป็ปๅ ๅญ่ตทๅง็ 2MB ๅฏน้ฝไธบๅบๅ็ text_offset ๅญ่ๅค๏ผๅนถไป้ฃ้่ขซ่ฐ็จใ | |
126 | +ๅฝๅ๏ผๅฏน Linux ๆฅ่ฏดๅจๆญคๅบๅไปฅไธ็ๅ ๅญๆฏๆ ๆณไฝฟ็จ็๏ผๅ ๆญคๅผบ็ๅปบ่ฎฎๅฐ็ณป็ปๅ ๅญ็่ตทๅงไฝไธบ่ฟไธชๅบๅใ | |
127 | +ไปๆ ๅ่ตทๅงๅฐๅ็ฎ่ตท๏ผๆๅฐๅฟ ้กปไธบๅ ๆ ธ้ๆพๅบ image_size ๅญ่็็ฉบ้ดใ | |
128 | + | |
129 | +ไปปไฝๆไพ็ปๅ ๆ ธ็ๅ ๅญ๏ผ็่ณๅจ 2MB ๅฏน้ฝ็ๅบๅฐๅไนๅ๏ผ๏ผ่ฅๆชไปๅ ๆ ธไธญๆ ่ฎฐไธบไฟ็ | |
130 | +(ๅฆๅจ่ฎพๅคๆ ๏ผdtb๏ผ็ memreserve ๅบๅ๏ผ๏ผ้ฝๅฐ่ขซ่ฎคไธบๅฏนๅ ๆ ธๆฏๅฏ็จใ | |
131 | + | |
108 | 132 | ๅจ่ทณ่ฝฌๅ ฅๅ ๆ ธๅ๏ผๅฟ ้กป็ฌฆๅไปฅไธ็ถๆ๏ผ |
109 | 133 | |
110 | 134 | - ๅๆญขๆๆ DMA ่ฎพๅค๏ผ่ฟๆ ทๅ ๅญๆฐๆฎๅฐฑไธไผๅ ไธบ่ๅ็ฝ็ปๅ ๆ็ฃ็ๆฐๆฎ่ |
111 | 135 | |
... | ... | @@ -124,9 +148,13 @@ |
124 | 148 | - ้ซ้็ผๅญใMMU |
125 | 149 | MMU ๅฟ ้กปๅ ณ้ญใ |
126 | 150 | ๆไปค็ผๅญๅผๅฏๆๅ ณ้ญ้ฝๅฏไปฅใ |
127 | - ๆฐๆฎ็ผๅญๅฟ ้กปๅ ณ้ญไธๆ ๆใ | |
128 | - ๅค้จ้ซ้็ผๅญ๏ผๅฆๆๅญๅจ๏ผๅฟ ้กป้ ็ฝฎๅนถ็ฆ็จใ | |
151 | + ๅทฒ่ฝฝๅ ฅ็ๅ ๆ ธๆ ๅ็็ธๅบๅ ๅญๅบๅฟ ้กป่ขซๆธ ็๏ผไปฅ่พพๅฐ็ผๅญไธ่ดๆง็น๏ผPoC๏ผใ | |
152 | + ๅฝๅญๅจ็ณป็ป็ผๅญๆๅ ถไปไฝฟ่ฝ็ผๅญ็ไธ่ดๆงไธปๆงๅจๆถ๏ผ้ๅธธ้ไฝฟ็จ่ๆๅฐๅ็ปดๆคๅ ถ็ผๅญ๏ผ่้ set/way ๆไฝใ | |
153 | + ้ตไป้่ฟ่ๆๅฐๅๆไฝ็ปดๆคๆๆถ็ผๅญ็็ณป็ป็ผๅญๅฟ ้กป่ขซ้ ็ฝฎ๏ผๅนถๅฏไปฅ่ขซไฝฟ่ฝใ | |
154 | + ่ไธ้่ฟ่ๆๅฐๅๆไฝ็ปดๆคๆๆถ็ผๅญ็็ณป็ป็ผๅญ๏ผไธๆจ่๏ผ๏ผๅฟ ้กป่ขซ้ ็ฝฎไธ็ฆ็จใ | |
129 | 155 | |
156 | + *่ฏ่ ๆณจ๏ผๅฏนไบ PoC ไปฅๅ็ผๅญ็ธๅ ณๅ ๅฎน๏ผ่ฏทๅ่ ARMv8 ๆๆถๅ่ๆๅ ARM DDI 0487A | |
157 | + | |
130 | 158 | - ๆถๆ่ฎกๆถๅจ |
131 | 159 | CNTFRQ ๅฟ ้กป่ฎพๅฎไธบ่ฎกๆถๅจ็้ข็๏ผไธ CNTVOFF ๅฟ ้กป่ฎพๅฎไธบๅฏนๆๆ CPU |
132 | 160 | ้ฝไธ่ด็ๅผใๅฆๆๅจ EL1 ๆจกๅผไธ่ฟๅ ฅๅ ๆ ธ๏ผๅ CNTHCTL_EL2 ไธญ็ |
... | ... | @@ -141,6 +169,14 @@ |
141 | 169 | ๅจ่ฟๅ ฅๅ ๆ ธๆ ๅ็ๅผๅธธ็บงไธญ๏ผๆๆๆๆถไธญๅฏๅ็็ณป็ปๅฏๅญๅจๅฟ ้กป้่ฟ่ฝฏไปถ |
142 | 170 | ๅจไธไธชๆด้ซ็ๅผๅธธ็บงๅซไธๅๅงๅ๏ผไปฅ้ฒๆญขๅจ ๆช็ฅ ็ถๆไธ่ฟ่กใ |
143 | 171 | |
172 | + ๅฏนไบๆฅๆ GICv3 ไธญๆญๆงๅถๅจ็็ณป็ป๏ผ | |
173 | + - ่ฅๅฝๅๅจ EL3 ๏ผ | |
174 | + ICC_SRE_EL3.Enable (ไฝ 3) ๅฟ ้กปๅๅงๅไธบ 0b1ใ | |
175 | + ICC_SRE_EL3.SRE (ไฝ 0) ๅฟ ้กปๅๅงๅไธบ 0b1ใ | |
176 | + - ่ฅๅ ๆ ธ่ฟ่กๅจ EL1๏ผ | |
177 | + ICC_SRE_EL2.Enable (ไฝ 3) ๅฟ ้กปๅๅงๅไธบ 0b1ใ | |
178 | + ICC_SRE_EL2.SRE (ไฝ 0) ๅฟ ้กปๅๅงๅไธบ 0b1ใ | |
179 | + | |
144 | 180 | ไปฅไธๅฏนไบ CPU ๆจกๅผใ้ซ้็ผๅญใMMUใๆถๆ่ฎกๆถๅจใไธ่ดๆงใ็ณป็ปๅฏๅญๅจ็ |
145 | 181 | ๅฟ ่ฆๆกไปถๆ่ฟฐ้็จไบๆๆ CPUใๆๆ CPU ๅฟ ้กปๅจๅไธๅผๅธธ็บงๅซ่ทณๅ ฅๅ ๆ ธใ |
146 | 182 | |
... | ... | @@ -170,7 +206,7 @@ |
170 | 206 | ARM DEN 0022A๏ผ็จไบ ARM ไธ็็ตๆบ็ถๆๅ่ฐๆฅๅฃ็ณป็ป่ฝฏไปถ๏ผไธญๆ่ฟฐ็ |
171 | 207 | CPU_ON ่ฐ็จๆฅๅฐ CPU ๅธฆๅ ฅๅ ๆ ธใ |
172 | 208 | |
173 | - *่ฏ่ ๆณจ:ๅฐๆๆกฃ็ฟป่ฏๆถ๏ผๆญคๆๆกฃๅทฒๆดๆฐไธบ ARM DEN 0022Bใ | |
209 | + *่ฏ่ ๆณจ: ARM DEN 0022A ๅทฒๆดๆฐๅฐ ARM DEN 0022Cใ | |
174 | 210 | |
175 | 211 | ่ฎพๅคๆ ๅฟ ้กปๅ ๅซไธไธช โpsciโ ่็น๏ผ่ฏทๅ่ไปฅไธๆๆกฃ๏ผ |
176 | 212 | Documentation/devicetree/bindings/arm/psci.txt |
Documentation/zh_CN/arm64/legacy_instructions.txt
1 | +Chinese translated version of Documentation/arm64/legacy_instructions.txt | |
2 | + | |
3 | +If you have any comment or update to the content, please contact the | |
4 | +original document maintainer directly. However, if you have a problem | |
5 | +communicating in English you can also ask the Chinese maintainer for | |
6 | +help. Contact the Chinese maintainer if this translation is outdated | |
7 | +or if there is a problem with the translation. | |
8 | + | |
9 | +Maintainer: Punit Agrawal <punit.agrawal@arm.com> | |
10 | + Suzuki K. Poulose <suzuki.poulose@arm.com> | |
11 | +Chinese maintainer: Fu Wei <wefu@redhat.com> | |
12 | +--------------------------------------------------------------------- | |
13 | +Documentation/arm64/legacy_instructions.txt ็ไธญๆ็ฟป่ฏ | |
14 | + | |
15 | +ๅฆๆๆณ่ฏ่ฎบๆๆดๆฐๆฌๆ็ๅ ๅฎน๏ผ่ฏท็ดๆฅ่็ณปๅๆๆกฃ็็ปดๆค่ ใๅฆๆไฝ ไฝฟ็จ่ฑๆ | |
16 | +ไบคๆตๆๅฐ้พ็่ฏ๏ผไนๅฏไปฅๅไธญๆ็็ปดๆค่ ๆฑๅฉใๅฆๆๆฌ็ฟป่ฏๆดๆฐไธๅๆถๆ่ ็ฟป | |
17 | +่ฏๅญๅจ้ฎ้ข๏ผ่ฏท่็ณปไธญๆ็็ปดๆค่ ใ | |
18 | + | |
19 | +ๆฌๆ็ฟป่ฏๆไบคๆถ็ Git ๆฃๅบ็นไธบ๏ผ bc465aa9d045feb0e13b4a8f32cc33c1943f62d6 | |
20 | + | |
21 | +่ฑๆ็็ปดๆค่ ๏ผ Punit Agrawal <punit.agrawal@arm.com> | |
22 | + Suzuki K. Poulose <suzuki.poulose@arm.com> | |
23 | +ไธญๆ็็ปดๆค่ ๏ผ ๅ ็ Fu Wei <wefu@redhat.com> | |
24 | +ไธญๆ็็ฟป่ฏ่ ๏ผ ๅ ็ Fu Wei <wefu@redhat.com> | |
25 | +ไธญๆ็ๆ ก่ฏ่ ๏ผ ๅ ็ Fu Wei <wefu@redhat.com> | |
26 | + | |
27 | +ไปฅไธไธบๆญฃๆ | |
28 | +--------------------------------------------------------------------- | |
29 | +Linux ๅ ๆ ธๅจ arm64 ไธ็็งปๆคๆไพไบไธไธชๅบ็กๆกๆถ๏ผไปฅๆฏๆๆๆถไธญๆญฃๅจ่ขซๆทๆฑฐๆๅทฒๅบๅผๆไปค็ๆจกๆๆง่กใ | |
30 | +่ฟไธชๅบ็กๆกๆถ็ไปฃ็ ไฝฟ็จๆชๅฎไนๆไปค้ฉๅญ๏ผhooks๏ผๆฅๆฏๆๆจกๆใๅฆๆๆไปคๅญๅจ๏ผๅฎไนๅ ่ฎธๅจ็กฌไปถไธญๅฏ็จ่ฏฅๆไปคใ | |
31 | + | |
32 | +ๆจกๆๆจกๅผๅฏ้่ฟๅ sysctl ่็น๏ผ/proc/sys/abi๏ผๆฅๆงๅถใ | |
33 | +ไธๅ็ๆง่กๆนๅผๅ sysctl ่็น็็ธๅบๅผ๏ผ่งฃ้ๅฆไธ๏ผ | |
34 | + | |
35 | +* Undef๏ผๆชๅฎไน๏ผ | |
36 | + ๅผ๏ผ 0 | |
37 | + ไบง็ๆชๅฎไนๆไปค็ปๆญขๅผๅธธใๅฎๆฏ้ฃไบๆๆถไธญๅทฒๅบๅผ็ๆไปค๏ผๅฆ SWP๏ผ็้ป่ฎคๅค็ๆนๅผใ | |
38 | + | |
39 | +* Emulate๏ผๆจกๆ๏ผ | |
40 | + ๅผ๏ผ 1 | |
41 | + ไฝฟ็จ่ฝฏไปถๆจกๆๆนๅผใไธบ่งฃๅณ่ฝฏไปถ่ฟ็งป้ฎ้ข๏ผ่ฟ็งๆจกๆๆไปคๆจกๅผ็ไฝฟ็จๆฏ่ขซ่ท่ธช็๏ผๅนถไผๅๅบ้็้ๅถ่ญฆๅใ | |
42 | + ๅฎๆฏ้ฃไบๆๆถไธญๆญฃๅจ่ขซๆทๆฑฐ็ๆไปค๏ผๅฆ CP15 barriers๏ผ้็ฆปๆไปค๏ผ๏ผ็้ป่ฎคๅค็ๆนๅผใ | |
43 | + | |
44 | +* Hardware Execution๏ผ็กฌไปถๆง่ก๏ผ | |
45 | + ๅผ๏ผ 2 | |
46 | + ่ฝ็ถๆ ่ฎฐไธบๆญฃๅจ่ขซๆทๆฑฐ๏ผไฝไธไบๅฎ็ฐๅฏ่ฝๆไพ็กฌไปถๆง่ก่ฟไบๆไปค็ไฝฟ่ฝ/็ฆ็จๆไฝใ | |
47 | + ไฝฟ็จ็กฌไปถๆง่กไธ่ฌไผๆๆดๅฅฝ็ๆง่ฝ๏ผไฝๅฐๆ ๆณๆถ้่ฟ่กๆถๅฏนๆญฃ่ขซๆทๆฑฐๆไปค็ไฝฟ็จ็ป่ฎกๆฐๆฎใ | |
48 | + | |
49 | +้ป่ฎคๆง่กๆจกๅผไพ่ตไบๆไปคๅจๆๆถไธญ็ถๆใๆญฃๅจ่ขซๆทๆฑฐ็ๆไปคๅบ่ฏฅไปฅๆจกๆ๏ผEmulate๏ผไฝไธบ้ป่ฎคๆจกๅผ๏ผ | |
50 | +่ๅทฒๅบๅผ็ๆไปคๅฟ ้กป้ป่ฎคไฝฟ็จๆชๅฎไน๏ผUndef๏ผๆจกๅผ | |
51 | + | |
52 | +ๆณจๆ๏ผๆไปคๆจกๆๅฏ่ฝๆ ๆณๅบๅฏนๆๆๆ ๅตใๆดๅค่ฏฆๆ ่ฏทๅ่ๅ็ฌ็ๆไปคๆณจ้ใ | |
53 | + | |
54 | +ๅๆฏๆ็้็ๆไปค | |
55 | +------------- | |
56 | +* SWP{B} | |
57 | +่็น: /proc/sys/abi/swp | |
58 | +็ถๆ: ๅทฒๅบๅผ | |
59 | +้ป่ฎคๆง่กๆนๅผ: Undef (0) | |
60 | + | |
61 | +* CP15 Barriers | |
62 | +่็น: /proc/sys/abi/cp15_barrier | |
63 | +็ถๆ: ๆญฃ่ขซๆทๆฑฐ๏ผไธๆจ่ไฝฟ็จ | |
64 | +้ป่ฎคๆง่กๆนๅผ: Emulate (1) | |
65 | + | |
66 | +* SETEND | |
67 | +่็น: /proc/sys/abi/setend | |
68 | +็ถๆ: ๆญฃ่ขซๆทๆฑฐ๏ผไธๆจ่ไฝฟ็จ | |
69 | +้ป่ฎคๆง่กๆนๅผ: Emulate (1)* | |
70 | +ๆณจ๏ผไธบไบไฝฟ่ฝ่ฟไธช็นๆง๏ผ็ณป็ปไธญ็ๆๆ CPU ๅฟ ้กปๅจ EL0 ๆฏๆๆททๅๅญ่ๅบใ | |
71 | +ๅฆๆไธไธชๆฐ็ CPU ๏ผไธๆฏๆๆททๅๅญ่ๅบ๏ผ ๅจไฝฟ่ฝ่ฟไธช็นๆงๅ่ขซ็ญๆๅ ฅ็ณป็ป๏ผ | |
72 | +ๅจๅบ็จไธญๅฏ่ฝไผๅบ็ฐไธๅฏ้ขๆ็็ปๆใ |
Documentation/zh_CN/arm64/memory.txt
... | ... | @@ -15,6 +15,8 @@ |
15 | 15 | ไบคๆตๆๅฐ้พ็่ฏ๏ผไนๅฏไปฅๅไธญๆ็็ปดๆค่ ๆฑๅฉใๅฆๆๆฌ็ฟป่ฏๆดๆฐไธๅๆถๆ่ ็ฟป |
16 | 16 | ่ฏๅญๅจ้ฎ้ข๏ผ่ฏท่็ณปไธญๆ็็ปดๆค่ ใ |
17 | 17 | |
18 | +ๆฌๆ็ฟป่ฏๆไบคๆถ็ Git ๆฃๅบ็นไธบ๏ผ bc465aa9d045feb0e13b4a8f32cc33c1943f62d6 | |
19 | + | |
18 | 20 | ่ฑๆ็็ปดๆค่ ๏ผ Catalin Marinas <catalin.marinas@arm.com> |
19 | 21 | ไธญๆ็็ปดๆค่ ๏ผ ๅ ็ Fu Wei <wefu@redhat.com> |
20 | 22 | ไธญๆ็็ฟป่ฏ่ ๏ผ ๅ ็ Fu Wei <wefu@redhat.com> |
21 | 23 | |
22 | 24 | |
23 | 25 | |
24 | 26 | |
25 | 27 | |
26 | 28 | |
27 | 29 | |
28 | 30 | |
29 | 31 | |
30 | 32 | |
31 | 33 | |
32 | 34 | |
33 | 35 | |
34 | 36 | |
35 | 37 | |
36 | 38 | |
37 | 39 | |
38 | 40 | |
39 | 41 | |
... | ... | @@ -26,71 +28,55 @@ |
26 | 28 | =========================== |
27 | 29 | |
28 | 30 | ไฝ่ : Catalin Marinas <catalin.marinas@arm.com> |
29 | -ๆฅๆ: 2012 ๅนด 02 ๆ 20 ๆฅ | |
30 | 31 | |
31 | 32 | ๆฌๆๆกฃๆ่ฟฐ AArch64 Linux ๅ ๆ ธๆไฝฟ็จ็่ๆๅ ๅญๅธๅฑใๆญคๆๆถๅฏไปฅๅฎ็ฐ |
32 | 33 | ้กตๅคงๅฐไธบ 4KB ็ 4 ็บง่ฝฌๆข่กจๅ้กตๅคงๅฐไธบ 64KB ็ 3 ็บง่ฝฌๆข่กจใ |
33 | 34 | |
34 | -AArch64 Linux ไฝฟ็จ้กตๅคงๅฐไธบ 4KB ็ 3 ็บง่ฝฌๆข่กจ้ ็ฝฎ๏ผๅฏนไบ็จๆทๅๅ ๆ ธ | |
35 | -้ฝๆ 39-bit (512GB) ็่ๆๅฐๅ็ฉบ้ดใๅฏนไบ้กตๅคงๅฐไธบ 64KB็้ ็ฝฎ๏ผไป | |
36 | -ไฝฟ็จ 2 ็บง่ฝฌๆข่กจ๏ผไฝๅ ๅญๅธๅฑ็ธๅใ | |
35 | +AArch64 Linux ไฝฟ็จ 3 ็บงๆ 4 ็บง่ฝฌๆข่กจ๏ผๅ ถ้กตๅคงๅฐ้ ็ฝฎไธบ 4KB๏ผๅฏนไบ็จๆทๅๅ ๆ ธ | |
36 | +ๅๅซ้ฝๆ 39-bit (512GB) ๆ 48-bit (256TB) ็่ๆๅฐๅ็ฉบ้ดใ | |
37 | +ๅฏนไบ้กตๅคงๅฐไธบ 64KB็้ ็ฝฎ๏ผไป ไฝฟ็จ 2 ็บง่ฝฌๆข่กจ๏ผๆ 42-bit (4TB) ็่ๆๅฐๅ็ฉบ้ด๏ผไฝๅ ๅญๅธๅฑ็ธๅใ | |
37 | 38 | |
38 | -็จๆทๅฐๅ็ฉบ้ด็ 63:39 ไฝไธบ 0๏ผ่ๅ ๆ ธๅฐๅ็ฉบ้ด็็ธๅบไฝไธบ 1ใTTBRx ็ | |
39 | +็จๆทๅฐๅ็ฉบ้ด็ 63:48 ไฝไธบ 0๏ผ่ๅ ๆ ธๅฐๅ็ฉบ้ด็็ธๅบไฝไธบ 1ใTTBRx ็ | |
39 | 40 | ้ๆฉ็ฑ่ๆๅฐๅ็ 63 ไฝ็ปๅบใswapper_pg_dir ไป ๅ ๅซๅ ๆ ธ๏ผๅ จๅฑ๏ผๆ ๅฐ๏ผ |
40 | -่็จๆท pgd ไป ๅ ๅซ็จๆท๏ผ้ๅ จๅฑ๏ผๆ ๅฐใswapper_pgd_dir ๅฐๅ่ขซๅๅ ฅ | |
41 | +่็จๆท pgd ไป ๅ ๅซ็จๆท๏ผ้ๅ จๅฑ๏ผๆ ๅฐใswapper_pg_dir ๅฐๅ่ขซๅๅ ฅ | |
41 | 42 | TTBR1 ไธญ๏ผไธไปไธๅๅ ฅ TTBR0ใ |
42 | 43 | |
43 | 44 | |
44 | -AArch64 Linux ๅจ้กตๅคงๅฐไธบ 4KB ๆถ็ๅ ๅญๅธๅฑ๏ผ | |
45 | +AArch64 Linux ๅจ้กตๅคงๅฐไธบ 4KB๏ผๅนถไฝฟ็จ 3 ็บง่ฝฌๆข่กจๆถ็ๅ ๅญๅธๅฑ๏ผ | |
45 | 46 | |
46 | 47 | ่ตทๅงๅฐๅ ็ปๆๅฐๅ ๅคงๅฐ ็จ้ |
47 | 48 | ----------------------------------------------------------------------- |
48 | 49 | 0000000000000000 0000007fffffffff 512GB ็จๆท็ฉบ้ด |
50 | +ffffff8000000000 ffffffffffffffff 512GB ๅ ๆ ธ็ฉบ้ด | |
49 | 51 | |
50 | -ffffff8000000000 ffffffbbfffeffff ~240GB vmalloc | |
51 | 52 | |
52 | -ffffffbbffff0000 ffffffbbffffffff 64KB [้ฒๆค้กต] | |
53 | +AArch64 Linux ๅจ้กตๅคงๅฐไธบ 4KB๏ผๅนถไฝฟ็จ 4 ็บง่ฝฌๆข่กจๆถ็ๅ ๅญๅธๅฑ๏ผ | |
53 | 54 | |
54 | -ffffffbc00000000 ffffffbdffffffff 8GB vmemmap | |
55 | +่ตทๅงๅฐๅ ็ปๆๅฐๅ ๅคงๅฐ ็จ้ | |
56 | +----------------------------------------------------------------------- | |
57 | +0000000000000000 0000ffffffffffff 256TB ็จๆท็ฉบ้ด | |
58 | +ffff000000000000 ffffffffffffffff 256TB ๅ ๆ ธ็ฉบ้ด | |
55 | 59 | |
56 | -ffffffbe00000000 ffffffbffbbfffff ~8GB [้ฒๆค้กต๏ผๆชๆฅ็จไบ vmmemap] | |
57 | 60 | |
58 | -ffffffbffbc00000 ffffffbffbdfffff 2MB earlyprintk ่ฎพๅค | |
61 | +AArch64 Linux ๅจ้กตๅคงๅฐไธบ 64KB๏ผๅนถไฝฟ็จ 2 ็บง่ฝฌๆข่กจๆถ็ๅ ๅญๅธๅฑ๏ผ | |
59 | 62 | |
60 | -ffffffbffbe00000 ffffffbffbe0ffff 64KB PCI I/O ็ฉบ้ด | |
61 | - | |
62 | -ffffffbffbe10000 ffffffbcffffffff ~2MB [้ฒๆค้กต] | |
63 | - | |
64 | -ffffffbffc000000 ffffffbfffffffff 64MB ๆจกๅ | |
65 | - | |
66 | -ffffffc000000000 ffffffffffffffff 256GB ๅ ๆ ธ้ป่พๅ ๅญๆ ๅฐ | |
67 | - | |
68 | - | |
69 | -AArch64 Linux ๅจ้กตๅคงๅฐไธบ 64KB ๆถ็ๅ ๅญๅธๅฑ๏ผ | |
70 | - | |
71 | 63 | ่ตทๅงๅฐๅ ็ปๆๅฐๅ ๅคงๅฐ ็จ้ |
72 | 64 | ----------------------------------------------------------------------- |
73 | 65 | 0000000000000000 000003ffffffffff 4TB ็จๆท็ฉบ้ด |
66 | +fffffc0000000000 ffffffffffffffff 4TB ๅ ๆ ธ็ฉบ้ด | |
74 | 67 | |
75 | -fffffc0000000000 fffffdfbfffeffff ~2TB vmalloc | |
76 | 68 | |
77 | -fffffdfbffff0000 fffffdfbffffffff 64KB [้ฒๆค้กต] | |
69 | +AArch64 Linux ๅจ้กตๅคงๅฐไธบ 64KB๏ผๅนถไฝฟ็จ 3 ็บง่ฝฌๆข่กจๆถ็ๅ ๅญๅธๅฑ๏ผ | |
78 | 70 | |
79 | -fffffdfc00000000 fffffdfdffffffff 8GB vmemmap | |
71 | +่ตทๅงๅฐๅ ็ปๆๅฐๅ ๅคงๅฐ ็จ้ | |
72 | +----------------------------------------------------------------------- | |
73 | +0000000000000000 0000ffffffffffff 256TB ็จๆท็ฉบ้ด | |
74 | +ffff000000000000 ffffffffffffffff 256TB ๅ ๆ ธ็ฉบ้ด | |
80 | 75 | |
81 | -fffffdfe00000000 fffffdfffbbfffff ~8GB [้ฒๆค้กต๏ผๆชๆฅ็จไบ vmmemap] | |
82 | 76 | |
83 | -fffffdfffbc00000 fffffdfffbdfffff 2MB earlyprintk ่ฎพๅค | |
77 | +ๆด่ฏฆ็ป็ๅ ๆ ธ่ๆๅ ๅญๅธๅฑ๏ผ่ฏทๅ้ ๅ ๆ ธๅฏๅจไฟกๆฏใ | |
84 | 78 | |
85 | -fffffdfffbe00000 fffffdfffbe0ffff 64KB PCI I/O ็ฉบ้ด | |
86 | 79 | |
87 | -fffffdfffbe10000 fffffdfffbffffff ~2MB [้ฒๆค้กต] | |
88 | - | |
89 | -fffffdfffc000000 fffffdffffffffff 64MB ๆจกๅ | |
90 | - | |
91 | -fffffe0000000000 ffffffffffffffff 2TB ๅ ๆ ธ้ป่พๅ ๅญๆ ๅฐ | |
92 | - | |
93 | - | |
94 | 80 | 4KB ้กตๅคงๅฐ็่ฝฌๆข่กจๆฅๆพ๏ผ |
95 | 81 | |
96 | 82 | +--------+--------+--------+--------+--------+--------+--------+--------+ |
... | ... | @@ -102,7 +88,7 @@ |
102 | 88 | | | | | +-> [20:12] L3 ็ดขๅผ |
103 | 89 | | | | +-----------> [29:21] L2 ็ดขๅผ |
104 | 90 | | | +---------------------> [38:30] L1 ็ดขๅผ |
105 | - | +-------------------------------> [47:39] L0 ็ดขๅผ (ๆชไฝฟ็จ) | |
91 | + | +-------------------------------> [47:39] L0 ็ดขๅผ | |
106 | 92 | +-------------------------------------------------> [63] TTBR0/1 |
107 | 93 | |
108 | 94 | |
109 | 95 | |
... | ... | @@ -115,9 +101,10 @@ |
115 | 101 | | | | | v |
116 | 102 | | | | | [15:0] ้กตๅ ๅ็งป |
117 | 103 | | | | +----------> [28:16] L3 ็ดขๅผ |
118 | - | | +--------------------------> [41:29] L2 ็ดขๅผ (ไป ไฝฟ็จ 38:29 ) | |
119 | - | +-------------------------------> [47:42] L1 ็ดขๅผ (ๆชไฝฟ็จ) | |
104 | + | | +--------------------------> [41:29] L2 ็ดขๅผ | |
105 | + | +-------------------------------> [47:42] L1 ็ดขๅผ | |
120 | 106 | +-------------------------------------------------> [63] TTBR0/1 |
107 | + | |
121 | 108 | |
122 | 109 | ๅฝไฝฟ็จ KVM ๆถ, ็ฎก็็จๅบ๏ผhypervisor๏ผๅจ EL2 ไธญ้่ฟ็ธๅฏนๅ ๆ ธ่ๆๅฐๅ็ |
123 | 110 | ไธไธชๅบๅฎๅ็งปๆฅๆ ๅฐๅ ๆ ธ้กต๏ผๅ ๆ ธ่ๆๅฐๅ็้ซ 24 ไฝ่ฎพไธบ้ถ๏ผ: |
MAINTAINERS
... | ... | @@ -3291,7 +3291,9 @@ |
3291 | 3291 | F: Documentation/ |
3292 | 3292 | X: Documentation/ABI/ |
3293 | 3293 | X: Documentation/devicetree/ |
3294 | -X: Documentation/[a-z][a-z]_[A-Z][A-Z]/ | |
3294 | +X: Documentation/acpi | |
3295 | +X: Documentation/power | |
3296 | +X: Documentation/spi | |
3295 | 3297 | T: git git://git.lwn.net/linux-2.6.git docs-next |
3296 | 3298 | |
3297 | 3299 | DOUBLETALK DRIVER |
README
1 | - Linux kernel release 3.x <http://kernel.org/> | |
1 | + Linux kernel release 4.x <http://kernel.org/> | |
2 | 2 | |
3 | -These are the release notes for Linux version 3. Read them carefully, | |
3 | +These are the release notes for Linux version 4. Read them carefully, | |
4 | 4 | as they tell you what this is all about, explain how to install the |
5 | 5 | kernel, and what to do if something goes wrong. |
6 | 6 | |
7 | 7 | |
... | ... | @@ -62,12 +62,8 @@ |
62 | 62 | directory where you have permissions (eg. your home directory) and |
63 | 63 | unpack it: |
64 | 64 | |
65 | - gzip -cd linux-3.X.tar.gz | tar xvf - | |
65 | + xz -cd linux-4.X.tar.xz | tar xvf - | |
66 | 66 | |
67 | - or | |
68 | - | |
69 | - bzip2 -dc linux-3.X.tar.bz2 | tar xvf - | |
70 | - | |
71 | 67 | Replace "X" with the version number of the latest kernel. |
72 | 68 | |
73 | 69 | Do NOT use the /usr/src/linux area! This area has a (usually |
74 | 70 | |
75 | 71 | |
76 | 72 | |
77 | 73 | |
... | ... | @@ -75,30 +71,26 @@ |
75 | 71 | files. They should match the library, and not get messed up by |
76 | 72 | whatever the kernel-du-jour happens to be. |
77 | 73 | |
78 | - - You can also upgrade between 3.x releases by patching. Patches are | |
79 | - distributed in the traditional gzip and the newer bzip2 format. To | |
80 | - install by patching, get all the newer patch files, enter the | |
81 | - top level directory of the kernel source (linux-3.X) and execute: | |
74 | + - You can also upgrade between 4.x releases by patching. Patches are | |
75 | + distributed in the xz format. To install by patching, get all the | |
76 | + newer patch files, enter the top level directory of the kernel source | |
77 | + (linux-4.X) and execute: | |
82 | 78 | |
83 | - gzip -cd ../patch-3.x.gz | patch -p1 | |
79 | + xz -cd ../patch-4.x.xz | patch -p1 | |
84 | 80 | |
85 | - or | |
86 | - | |
87 | - bzip2 -dc ../patch-3.x.bz2 | patch -p1 | |
88 | - | |
89 | 81 | Replace "x" for all versions bigger than the version "X" of your current |
90 | 82 | source tree, _in_order_, and you should be ok. You may want to remove |
91 | 83 | the backup files (some-file-name~ or some-file-name.orig), and make sure |
92 | 84 | that there are no failed patches (some-file-name# or some-file-name.rej). |
93 | 85 | If there are, either you or I have made a mistake. |
94 | 86 | |
95 | - Unlike patches for the 3.x kernels, patches for the 3.x.y kernels | |
87 | + Unlike patches for the 4.x kernels, patches for the 4.x.y kernels | |
96 | 88 | (also known as the -stable kernels) are not incremental but instead apply |
97 | - directly to the base 3.x kernel. For example, if your base kernel is 3.0 | |
98 | - and you want to apply the 3.0.3 patch, you must not first apply the 3.0.1 | |
99 | - and 3.0.2 patches. Similarly, if you are running kernel version 3.0.2 and | |
100 | - want to jump to 3.0.3, you must first reverse the 3.0.2 patch (that is, | |
101 | - patch -R) _before_ applying the 3.0.3 patch. You can read more on this in | |
89 | + directly to the base 4.x kernel. For example, if your base kernel is 4.0 | |
90 | + and you want to apply the 4.0.3 patch, you must not first apply the 4.0.1 | |
91 | + and 4.0.2 patches. Similarly, if you are running kernel version 4.0.2 and | |
92 | + want to jump to 4.0.3, you must first reverse the 4.0.2 patch (that is, | |
93 | + patch -R) _before_ applying the 4.0.3 patch. You can read more on this in | |
102 | 94 | Documentation/applying-patches.txt |
103 | 95 | |
104 | 96 | Alternatively, the script patch-kernel can be used to automate this |
... | ... | @@ -120,7 +112,7 @@ |
120 | 112 | |
121 | 113 | SOFTWARE REQUIREMENTS |
122 | 114 | |
123 | - Compiling and running the 3.x kernels requires up-to-date | |
115 | + Compiling and running the 4.x kernels requires up-to-date | |
124 | 116 | versions of various software packages. Consult |
125 | 117 | Documentation/Changes for the minimum version numbers required |
126 | 118 | and how to get updates for these packages. Beware that using |
127 | 119 | |
... | ... | @@ -137,12 +129,12 @@ |
137 | 129 | place for the output files (including .config). |
138 | 130 | Example: |
139 | 131 | |
140 | - kernel source code: /usr/src/linux-3.X | |
132 | + kernel source code: /usr/src/linux-4.X | |
141 | 133 | build directory: /home/name/build/kernel |
142 | 134 | |
143 | 135 | To configure and build the kernel, use: |
144 | 136 | |
145 | - cd /usr/src/linux-3.X | |
137 | + cd /usr/src/linux-4.X | |
146 | 138 | make O=/home/name/build/kernel menuconfig |
147 | 139 | make O=/home/name/build/kernel |
148 | 140 | sudo make O=/home/name/build/kernel modules_install install |
include/linux/hsi/hsi.h
... | ... | @@ -135,9 +135,9 @@ |
135 | 135 | * @device: Driver model representation of the device |
136 | 136 | * @tx_cfg: HSI TX configuration |
137 | 137 | * @rx_cfg: HSI RX configuration |
138 | - * e_handler: Callback for handling port events (RX Wake High/Low) | |
139 | - * pclaimed: Keeps tracks if the clients claimed its associated HSI port | |
140 | - * nb: Notifier block for port events | |
138 | + * @e_handler: Callback for handling port events (RX Wake High/Low) | |
139 | + * @pclaimed: Keeps tracks if the clients claimed its associated HSI port | |
140 | + * @nb: Notifier block for port events | |
141 | 141 | */ |
142 | 142 | struct hsi_client { |
143 | 143 | struct device device; |
init/Kconfig
... | ... | @@ -1047,12 +1047,6 @@ |
1047 | 1047 | the kmem extension can use it to guarantee that no group of processes |
1048 | 1048 | will ever exhaust kernel resources alone. |
1049 | 1049 | |
1050 | - WARNING: Current implementation lacks reclaim support. That means | |
1051 | - allocation attempts will fail when close to the limit even if there | |
1052 | - are plenty of kmem available for reclaim. That makes this option | |
1053 | - unusable in real life so DO NOT SELECT IT unless for development | |
1054 | - purposes. | |
1055 | - | |
1056 | 1050 | config CGROUP_HUGETLB |
1057 | 1051 | bool "HugeTLB Resource Controller for Control Groups" |
1058 | 1052 | depends on HUGETLB_PAGE |