Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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
...

+490 -778
+74 -71
Documentation/CodingStyle
··· 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!) ··· 55 55 default: 56 56 break; 57 57 } 58 - 59 58 60 59 Don't put multiple statements on a single line unless you have 61 60 something to hide: ··· 155 156 156 157 Do not unnecessarily use braces where a single statement will do. 157 158 158 - if (condition) 159 - action(); 159 + if (condition) 160 + action(); 160 161 161 162 and 162 163 163 - if (condition) 164 - do_this(); 165 - else 166 - do_that(); 164 + if (condition) 165 + do_this(); 166 + else 167 + do_that(); 167 168 168 169 This does not apply if only one branch of a conditional statement is a single 169 170 statement; in the latter case use braces in both branches: 170 171 171 - if (condition) { 172 - do_this(); 173 - do_that(); 174 - } else { 175 - otherwise(); 176 - } 172 + if (condition) { 173 + do_this(); 174 + do_that(); 175 + } else { 176 + otherwise(); 177 + } 177 178 178 179 3.1: Spaces 179 180 ··· 185 186 "struct fileinfo info;" is declared). 186 187 187 188 So use a space after these keywords: 189 + 188 190 if, switch, case, for, do, while 191 + 189 192 but not with sizeof, typeof, alignof, or __attribute__. E.g., 193 + 190 194 s = sizeof(struct file); 191 195 192 196 Do not add spaces around (inside) parenthesized expressions. This example is ··· 211 209 = + - < > * / % | & ^ <= >= == != ? : 212 210 213 211 but no space after unary operators: 212 + 214 213 & * + - ~ ! sizeof typeof alignof __attribute__ defined 215 214 216 215 no space before the postfix increment & decrement unary operators: 216 + 217 217 ++ -- 218 218 219 219 no space after the prefix increment & decrement unary operators: 220 + 220 221 ++ -- 221 222 222 223 and no space around the '.' and "->" structure member operators. ··· 273 268 Chapter 5: Typedefs 274 269 275 270 Please don't use things like "vps_t". 276 - 277 271 It's a _mistake_ to use typedef for structures and pointers. When you see a 278 272 279 273 vps_t a; 280 274 281 275 in the source, what does it mean? 282 - 283 276 In contrast, if it says 284 277 285 278 struct virtual_container *a; ··· 375 372 exported, the EXPORT* macro for it should follow immediately after the closing 376 373 function brace line. E.g.: 377 374 378 - int system_is_up(void) 379 - { 380 - return system_state == SYSTEM_RUNNING; 381 - } 382 - EXPORT_SYMBOL(system_is_up); 375 + int system_is_up(void) 376 + { 377 + return system_state == SYSTEM_RUNNING; 378 + } 379 + EXPORT_SYMBOL(system_is_up); 383 380 384 381 In function prototypes, include parameter names with their data types. 385 382 Although this is not required by the C language, it is preferred in Linux ··· 408 405 modifications are prevented 409 406 - saves the compiler work to optimize redundant code away ;) 410 407 411 - int fun(int a) 412 - { 413 - int result = 0; 414 - char *buffer; 408 + int fun(int a) 409 + { 410 + int result = 0; 411 + char *buffer; 415 412 416 - buffer = kmalloc(SIZE, GFP_KERNEL); 417 - if (!buffer) 418 - return -ENOMEM; 413 + buffer = kmalloc(SIZE, GFP_KERNEL); 414 + if (!buffer) 415 + return -ENOMEM; 419 416 420 - if (condition1) { 421 - while (loop1) { 422 - ... 417 + if (condition1) { 418 + while (loop1) { 419 + ... 420 + } 421 + result = 1; 422 + goto out_buffer; 423 423 } 424 - result = 1; 425 - goto out_buffer; 424 + ... 425 + out_buffer: 426 + kfree(buffer); 427 + return result; 426 428 } 427 - ... 428 - out_buffer: 429 - kfree(buffer); 430 - return result; 431 - } 432 429 433 430 A common type of bug to be aware of it "one err bugs" which look like this: 434 431 435 - err: 436 - kfree(foo->bar); 437 - kfree(foo); 438 - return ret; 432 + err: 433 + kfree(foo->bar); 434 + kfree(foo); 435 + return ret; 439 436 440 437 The bug in this code is that on some exit paths "foo" is NULL. Normally the 441 438 fix for this is to split it up into two error labels "err_bar:" and "err_foo:". ··· 506 503 (defun c-lineup-arglist-tabs-only (ignored) 507 504 "Line up argument lists by tabs, not spaces" 508 505 (let* ((anchor (c-langelem-pos c-syntactic-element)) 509 - (column (c-langelem-2nd-pos c-syntactic-element)) 510 - (offset (- (1+ column) anchor)) 511 - (steps (floor offset c-basic-offset))) 506 + (column (c-langelem-2nd-pos c-syntactic-element)) 507 + (offset (- (1+ column) anchor)) 508 + (steps (floor offset c-basic-offset))) 512 509 (* (max steps 1) 513 510 c-basic-offset))) 514 511 ··· 615 612 616 613 Names of macros defining constants and labels in enums are capitalized. 617 614 618 - #define CONSTANT 0x12345 615 + #define CONSTANT 0x12345 619 616 620 617 Enums are preferred when defining several related constants. 621 618 ··· 626 623 627 624 Macros with multiple statements should be enclosed in a do - while block: 628 625 629 - #define macrofun(a, b, c) \ 630 - do { \ 631 - if (a == 5) \ 632 - do_this(b, c); \ 633 - } while (0) 626 + #define macrofun(a, b, c) \ 627 + do { \ 628 + if (a == 5) \ 629 + do_this(b, c); \ 630 + } while (0) 634 631 635 632 Things to avoid when using macros: 636 633 637 634 1) macros that affect control flow: 638 635 639 - #define FOO(x) \ 640 - do { \ 641 - if (blah(x) < 0) \ 642 - return -EBUGGERED; \ 643 - } while(0) 636 + #define FOO(x) \ 637 + do { \ 638 + if (blah(x) < 0) \ 639 + return -EBUGGERED; \ 640 + } while(0) 644 641 645 642 is a _very_ bad idea. It looks like a function call but exits the "calling" 646 643 function; don't break the internal parsers of those who will read the code. 647 644 648 645 2) macros that depend on having a local variable with a magic name: 649 646 650 - #define FOO(val) bar(index, val) 647 + #define FOO(val) bar(index, val) 651 648 652 649 might look like a good thing, but it's confusing as hell when one reads the 653 650 code and it's prone to breakage from seemingly innocent changes. ··· 659 656 must enclose the expression in parentheses. Beware of similar issues with 660 657 macros using parameters. 661 658 662 - #define CONSTANT 0x4000 663 - #define CONSTEXP (CONSTANT | 3) 659 + #define CONSTANT 0x4000 660 + #define CONSTEXP (CONSTANT | 3) 664 661 665 662 5) namespace collisions when defining local variables in macros resembling 666 663 functions: ··· 812 809 For example, if you need to calculate the length of an array, take advantage 813 810 of the macro 814 811 815 - #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) 812 + #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) 816 813 817 814 Similarly, if you need to calculate the size of some structure member, use 818 815 819 - #define FIELD_SIZEOF(t, f) (sizeof(((t*)0)->f)) 816 + #define FIELD_SIZEOF(t, f) (sizeof(((t*)0)->f)) 820 817 821 818 There are also min() and max() macros that do strict type checking if you 822 819 need them. Feel free to peruse that header file to see what else is already ··· 829 826 indicated with special markers. For example, emacs interprets lines marked 830 827 like this: 831 828 832 - -*- mode: c -*- 829 + -*- mode: c -*- 833 830 834 831 Or like this: 835 832 836 - /* 837 - Local Variables: 838 - compile-command: "gcc -DMAGIC_DEBUG_FLAG foo.c" 839 - End: 840 - */ 833 + /* 834 + Local Variables: 835 + compile-command: "gcc -DMAGIC_DEBUG_FLAG foo.c" 836 + End: 837 + */ 841 838 842 839 Vim interprets markers that look like this: 843 840 844 - /* vim:set sw=8 noet */ 841 + /* vim:set sw=8 noet */ 845 842 846 843 Do not include any of these in source files. People have their own personal 847 844 editor configurations, and your source files should not override them. This ··· 918 915 place a comment after the #endif on the same line, noting the conditional 919 916 expression used. For instance: 920 917 921 - #ifdef CONFIG_SOMETHING 922 - ... 923 - #endif /* CONFIG_SOMETHING */ 918 + #ifdef CONFIG_SOMETHING 919 + ... 920 + #endif /* CONFIG_SOMETHING */ 924 921 925 922 926 923 Appendix I: References
+1 -1
Documentation/DocBook/drm.tmpl
··· 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-&lt;fb</code> field to the new framebuffer pointed to 1296 + <code>drm_crtc-&gt;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>
+5 -6
Documentation/DocBook/media/v4l/biblio.xml
··· 1 1 <bibliography> 2 2 <title>References</title> 3 3 4 - <biblioentry id="eia608"> 5 - <abbrev>EIA&nbsp;608-B</abbrev> 4 + <biblioentry id="cea608"> 5 + <abbrev>CEA&nbsp;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">
+1 -1
Documentation/DocBook/media/v4l/dev-sliced-vbi.xml
··· 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>
+1 -1
Documentation/DocBook/media/v4l/vidioc-g-sliced-vbi-cap.xml
··· 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>
+6 -15
Documentation/PCI/MSI-HOWTO.txt
··· 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 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 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 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
+1 -1
Documentation/PCI/pci-error-recovery.txt
··· 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.
+2 -2
Documentation/PCI/pcieaer-howto.txt
··· 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
+7 -2
Documentation/arm/Booting
··· 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 ------------------
+11 -4
Documentation/arm/README
··· 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)
+1 -1
Documentation/blackfin/Makefile
··· 1 1 ifneq ($(CONFIG_BLACKFIN),) 2 - ifneq ($(CONFIG_BFIN_GPTIMERS,) 2 + ifneq ($(CONFIG_BFIN_GPTIMERS),) 3 3 obj-m := gptimers-example.o 4 4 endif 5 5 endif
+8 -26
Documentation/block/biodoc.txt
··· 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 ··· 254 255 What kind of support exists at the generic block layer for this ? 255 256 256 257 The flags and rw fields in the bio structure can be used for some tuning 257 - from above e.g indicating that an i/o is just a readahead request, or for 258 - marking barrier requests (discussed next), or priority settings (currently 259 - unused). As far as user applications are concerned they would need an 260 - additional mechanism either via open flags or ioctls, or some other upper 261 - level mechanism to communicate such settings to block. 258 + from above e.g indicating that an i/o is just a readahead request, or priority 259 + settings (currently unused). As far as user applications are concerned they 260 + would need an additional mechanism either via open flags or ioctls, or some 261 + other upper level mechanism to communicate such settings to block. 262 262 263 - 1.2.1 I/O Barriers 264 - 265 - There is a way to enforce strict ordering for i/os through barriers. 266 - All requests before a barrier point must be serviced before the barrier 267 - request and any other requests arriving after the barrier will not be 268 - serviced until after the barrier has completed. This is useful for higher 269 - level control on write ordering, e.g flushing a log of committed updates 270 - to disk before the corresponding updates themselves. 271 - 272 - A flag in the bio structure, BIO_BARRIER is used to identify a barrier i/o. 273 - The generic i/o scheduler would make sure that it places the barrier request and 274 - all other requests coming after it after all the previous requests in the 275 - queue. Barriers may be implemented in different ways depending on the 276 - driver. For more details regarding I/O barriers, please read barrier.txt 277 - in this directory. 278 - 279 - 1.2.2 Request Priority/Latency 263 + 1.2.1 Request Priority/Latency 280 264 281 265 Todo/Under discussion: 282 266 Arjan's proposed request priority scheme allows higher levels some broad ··· 888 906 to refer to both parts and I/O scheduler to specific I/O schedulers. 889 907 890 908 Block layer implements generic dispatch queue in block/*.c. 891 - The generic dispatch queue is responsible for properly ordering barrier 892 - requests, requeueing, handling non-fs requests and all other subtleties. 909 + The generic dispatch queue is responsible for requeueing, handling non-fs 910 + requests and all other subtleties. 893 911 894 912 Specific I/O schedulers are responsible for ordering normal filesystem 895 913 requests. They can also choose to delay certain requests to improve
+3 -5
Documentation/cgroups/memory.txt
··· 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 ··· 340 345 In this case, the admin could set up K so that the sum of all groups is 341 346 never greater than the total memory, and freely set U at the cost of his 342 347 QoS. 348 + WARNING: In the current implementation, memory reclaim will NOT be 349 + triggered for a cgroup when it hits K while staying below U, which makes 350 + this setup impractical. 343 351 344 352 U != 0, K >= U: 345 353 Since kmem charges will also be fed to the user counter and reclaim will be
+10 -1
Documentation/email-clients.txt
··· 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
+3 -3
Documentation/filesystems/proc.txt
··· 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
+37 -4
Documentation/gpio/board.txt
··· 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 -------------
-63
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
-394
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
+2 -2
Documentation/input/alps.txt
··· 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 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.
+1 -1
Documentation/input/event-codes.txt
··· 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 =================
+1 -1
Documentation/input/gpio-tilt.txt
··· 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 */
+1 -1
Documentation/input/iforce-protocol.txt
··· 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.
+1 -1
Documentation/input/walkera0701.txt
··· 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
+1 -1
Documentation/input/yealink.txt
··· 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.
+6 -6
Documentation/kernel-parameters.txt
··· 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 ··· 2349 2343 in standard form of xsave area. By using this 2350 2344 parameter, xsave area per process might occupy more 2351 2345 memory on xsaves enabled systems. 2352 - 2353 - eagerfpu= [X86] 2354 - on enable eager fpu restore 2355 - off disable eager fpu restore 2356 - auto selects the default scheme, which automatically 2357 - enables eagerfpu restore for xsaveopt. 2358 2346 2359 2347 nohlt [BUGS=ARM,SH] Tells the kernel that the sleep(SH) or 2360 2348 wfi(ARM) instruction doesn't work correctly and not to
+2 -2
Documentation/kmemcheck.txt
··· 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
+2 -2
Documentation/kprobes.txt
··· 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
+1 -1
Documentation/memory-barriers.txt
··· 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
+36 -11
Documentation/memory-hotplug.txt
··· 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 ··· 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. 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. 394 407 395 408 struct memory_notify { 396 409 unsigned long start_pfn; ··· 424 411 node loses all memory. If this is -1, then nodemask status is not changed. 425 412 If status_changed_nid* >= 0, callback should create/discard structures for the 426 413 node if necessary. 414 + 415 + The callback routine shall return one of the values 416 + NOTIFY_DONE, NOTIFY_OK, NOTIFY_BAD, NOTIFY_STOP 417 + defined in include/linux/notifier.h 418 + 419 + NOTIFY_DONE and NOTIFY_OK have no effect on the further processing. 420 + 421 + NOTIFY_BAD is used as response to the MEM_GOING_ONLINE, MEM_GOING_OFFLINE, 422 + MEM_ONLINE, or MEM_OFFLINE action to cancel hotplugging. It stops 423 + further processing of the notification queue. 424 + 425 + NOTIFY_STOP stops further processing of the notification queue. 427 426 428 427 -------------- 429 428 9. Future Work
+11 -1
Documentation/printk-formats.txt
··· 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 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
+72 -60
Documentation/scheduler/completion.txt
··· 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 ··· 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 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 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 ··· 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 + 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(). 93 100 94 101 95 102 Waiting for completions: ··· 106 99 calls wait_for_completion() on the initialized completion structure. 107 100 A typical usage scenario is: 108 101 109 - structure completion setup_done; 102 + struct completion setup_done; 110 103 init_completion(&setup_done); 111 - initialze_work(...,&setup_done,...) 104 + initialize_work(...,&setup_done,...) 112 105 113 106 /* run non-dependent code */ /* do setup */ 114 107 115 - wait_for_completion(&seupt_done); complete(setup_done) 108 + wait_for_completion(&setup_done); complete(setup_done) 116 109 117 - This is not implying any temporal order of wait_for_completion() and the 110 + This is not implying any temporal order on wait_for_completion() and the 118 111 call to complete() - if the call to complete() happened before the call 119 112 to wait_for_completion() then the waiting side simply will continue 120 - immediately as all dependencies are satisfied. 113 + immediately as all dependencies are satisfied if not it will block until 114 + completion is signaled by complete(). 121 115 122 - Note that wait_for_completion() is calling spin_lock_irq/spin_unlock_irq 116 + Note that wait_for_completion() is calling spin_lock_irq()/spin_unlock_irq(), 123 117 so it can only be called safely when you know that interrupts are enabled. 124 - Calling it from hard-irq context will result in hard to detect spurious 125 - enabling of interrupts. 118 + Calling it from hard-irq or irqs-off atomic contexts will result in 119 + hard-to-detect spurious enabling of interrupts. 126 120 127 121 wait_for_completion(): 128 122 129 123 void wait_for_completion(struct completion *done): 130 124 131 - The default behavior is to wait without a timeout and mark the task as 125 + The default behavior is to wait without a timeout and to mark the task as 132 126 uninterruptible. wait_for_completion() and its variants are only safe 133 - in soft-interrupt or process context but not in hard-irq context. 127 + in process context (as they can sleep) but not in atomic context, 128 + interrupt context, with disabled irqs. or preemption is disabled - see also 129 + try_wait_for_completion() below for handling completion in atomic/interrupt 130 + context. 131 + 134 132 As all variants of wait_for_completion() can (obviously) block for a long 135 - time, you probably don't want to call this with held locks - see also 136 - try_wait_for_completion() below. 133 + time, you probably don't want to call this with held mutexes. 137 134 138 135 139 136 Variants available: ··· 152 141 so care should be taken with assigning return-values to variables of proper 153 142 type. Checking for the specific meaning of return values also has been found 154 143 to be quite inaccurate e.g. constructs like 155 - if(!wait_for_completion_interruptible_timeout(...)) would execute the same 144 + if (!wait_for_completion_interruptible_timeout(...)) would execute the same 156 145 code path for successful completion and for the interrupted case - which is 157 146 probably not what you want. 158 147 159 148 int wait_for_completion_interruptible(struct completion *done) 160 149 161 - marking the task TASK_INTERRUPTIBLE. If a signal was received while waiting. 162 - It will return -ERESTARTSYS and 0 otherwise. 150 + This function marks the task TASK_INTERRUPTIBLE. If a signal was received 151 + while waiting it will return -ERESTARTSYS; 0 otherwise. 163 152 164 153 unsigned long wait_for_completion_timeout(struct completion *done, 165 154 unsigned long timeout) 166 155 167 - The task is marked as TASK_UNINTERRUPTIBLE and will wait at most timeout 168 - (in jiffies). If timeout occurs it return 0 else the remaining time in 169 - jiffies (but at least 1). Timeouts are preferably passed by msecs_to_jiffies() 170 - or usecs_to_jiffies(). If the returned timeout value is deliberately ignored 171 - a comment should probably explain why (e.g. see drivers/mfd/wm8350-core.c 172 - wm8350_read_auxadc()) 156 + The task is marked as TASK_UNINTERRUPTIBLE and will wait at most 'timeout' 157 + (in jiffies). If timeout occurs it returns 0 else the remaining time in 158 + jiffies (but at least 1). Timeouts are preferably calculated with 159 + msecs_to_jiffies() or usecs_to_jiffies(). If the returned timeout value is 160 + deliberately ignored a comment should probably explain why (e.g. see 161 + drivers/mfd/wm8350-core.c wm8350_read_auxadc()) 173 162 174 163 long wait_for_completion_interruptible_timeout( 175 164 struct completion *done, unsigned long timeout) 176 165 177 - passing a timeout in jiffies and marking the task as TASK_INTERRUPTIBLE. If a 178 - signal was received it will return -ERESTARTSYS, 0 if completion timed-out and 179 - the remaining time in jiffies if completion occurred. 166 + This function passes a timeout in jiffies and marks the task as 167 + TASK_INTERRUPTIBLE. If a signal was received it will return -ERESTARTSYS; 168 + otherwise it returns 0 if the completion timed out or the remaining time in 169 + jiffies if completion occurred. 180 170 181 - Further variants include _killable which passes TASK_KILLABLE as the 182 - designated tasks state and will return a -ERESTARTSYS if interrupted or 183 - else 0 if completions was achieved as well as a _timeout variant. 171 + Further variants include _killable which uses TASK_KILLABLE as the 172 + designated tasks state and will return -ERESTARTSYS if it is interrupted or 173 + else 0 if completion was achieved. There is a _timeout variant as well: 184 174 185 175 long wait_for_completion_killable(struct completion *done) 186 176 long wait_for_completion_killable_timeout(struct completion *done, 187 177 unsigned long timeout) 188 178 189 - The _io variants wait_for_completion_io behave the same as the non-_io 179 + The _io variants wait_for_completion_io() behave the same as the non-_io 190 180 variants, except for accounting waiting time as waiting on IO, which has 191 - an impact on how scheduling is calculated. 181 + an impact on how the task is accounted in scheduling stats. 192 182 193 183 void wait_for_completion_io(struct completion *done) 194 184 unsigned long wait_for_completion_io_timeout(struct completion *done ··· 199 187 Signaling completions: 200 188 ---------------------- 201 189 202 - A thread of execution that wants to signal that the conditions for 203 - continuation have been achieved calls complete() to signal exactly one 204 - of the waiters that it can continue. 190 + A thread that wants to signal that the conditions for continuation have been 191 + achieved calls complete() to signal exactly one of the waiters that it can 192 + continue. 205 193 206 194 void complete(struct completion *done) 207 195 208 - or calls complete_all to signal all current and future waiters. 196 + or calls complete_all() to signal all current and future waiters. 209 197 210 198 void complete_all(struct completion *done) 211 199 ··· 217 205 If complete() is called multiple times then this will allow for that number 218 206 of waiters to continue - each call to complete() will simply increment the 219 207 done element. Calling complete_all() multiple times is a bug though. Both 220 - complete() and complete_all() can be called in hard-irq context safely. 208 + complete() and complete_all() can be called in hard-irq/atomic context safely. 221 209 222 210 There only can be one thread calling complete() or complete_all() on a 223 - particular struct completions at any time - serialized through the wait 211 + particular struct completion at any time - serialized through the wait 224 212 queue spinlock. Any such concurrent calls to complete() or complete_all() 225 213 probably are a design bug. 226 214 227 215 Signaling completion from hard-irq context is fine as it will appropriately 228 - lock with spin_lock_irqsave/spin_unlock_irqrestore. 216 + lock with spin_lock_irqsave/spin_unlock_irqrestore and it will never sleep. 229 217 230 218 231 219 try_wait_for_completion()/completion_done(): 232 220 -------------------------------------------- 233 221 234 - The try_wait_for_completion will not put the thread on the wait queue but 235 - rather returns false if it would need to enqueue (block) the thread, else it 236 - consumes any posted completions and returns true. 222 + The try_wait_for_completion() function will not put the thread on the wait 223 + queue but rather returns false if it would need to enqueue (block) the thread, 224 + else it consumes one posted completion and returns true. 237 225 238 - bool try_wait_for_completion(struct completion *done) 226 + bool try_wait_for_completion(struct completion *done) 239 227 240 - Finally to check state of a completions without changing it in any way is 241 - provided by completion_done() returning false if there are any posted 242 - completion that was not yet consumed by waiters implying that there are 243 - waiters and true otherwise; 228 + Finally, to check the state of a completion without changing it in any way, 229 + call completion_done(), which returns false if there are no posted 230 + completions that were not yet consumed by waiters (implying that there are 231 + waiters) and true otherwise; 244 232 245 - bool completion_done(struct completion *done) 233 + bool completion_done(struct completion *done) 246 234 247 235 Both try_wait_for_completion() and completion_done() are safe to be called in 248 - hard-irq context. 236 + hard-irq or atomic context.
+2 -1
Documentation/vm/pagemap.txt
··· 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
+11
Documentation/vm/transhuge.txt
··· 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
+45 -9
Documentation/zh_CN/arm64/booting.txt
··· 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> ··· 90 88 91 89 u32 code0; /* 可执行代码 */ 92 90 u32 code1; /* 可执行代码 */ 93 - u64 text_offset; /* 映像装载偏移 */ 94 - u64 res0 = 0; /* 保留 */ 95 - u64 res1 = 0; /* 保留 */ 91 + u64 text_offset; /* 映像装载偏移,小端模式 */ 92 + u64 image_size; /* 映像实际大小, 小端模式 */ 93 + u64 flags; /* 内核旗标, 小端模式 * 96 94 u64 res2 = 0; /* 保留 */ 97 95 u64 res3 = 0; /* 保留 */ 98 96 u64 res4 = 0; /* 保留 */ 99 97 u32 magic = 0x644d5241; /* 魔数, 小端, "ARM\x64" */ 100 - u32 res5 = 0; /* 保留 */ 98 + u32 res5; /* 保留 (用于 PE COFF 偏移) */ 101 99 102 100 103 101 映像头注释: 104 102 103 + - 自 v3.17 起,除非另有说明,所有域都是小端模式。 104 + 105 105 - code0/code1 负责跳转到 stext. 106 106 107 - 映像必须位于系统 RAM 起始处的特定偏移(当前是 0x80000)。系统 RAM 108 - 的起始地址必须是以 2MB 对齐的。 107 + - 当通过 EFI 启动时, 最初 code0/code1 被跳过。 108 + res5 是到 PE 文件头的偏移,而 PE 文件头含有 EFI 的启动入口点 (efi_stub_entry)。 109 + 当 stub 代码完成了它的使命,它会跳转到 code0 继续正常的启动流程。 110 + 111 + - v3.17 之前,未明确指定 text_offset 的字节序。此时,image_size 为零, 112 + 且 text_offset 依照内核字节序为 0x80000。 113 + 当 image_size 非零,text_offset 为小端模式且是有效值,应被引导加载程序使用。 114 + 当 image_size 为零,text_offset 可假定为 0x80000。 115 + 116 + - flags 域 (v3.17 引入) 为 64 位小端模式,其编码如下: 117 + 位 0: 内核字节序。 1 表示大端模式,0 表示小端模式。 118 + 位 1-63: 保留。 119 + 120 + - 当 image_size 为零时,引导装载程序应该试图在内核映像末尾之后尽可能多地保留空闲内存 121 + 供内核直接使用。对内存空间的需求量因所选定的内核特性而异, 且无实际限制。 122 + 123 + 内核映像必须被放置在靠近可用系统内存起始的 2MB 对齐为基址的 text_offset 字节处,并从那里被调用。 124 + 当前,对 Linux 来说在此基址以下的内存是无法使用的,因此强烈建议将系统内存的起始作为这个基址。 125 + 从映像起始地址算起,最少必须为内核释放出 image_size 字节的空间。 126 + 127 + 任何提供给内核的内存(甚至在 2MB 对齐的基地址之前),若未从内核中标记为保留 128 + (如在设备树(dtb)的 memreserve 区域),都将被认为对内核是可用。 109 129 110 130 在跳转入内核前,必须符合以下状态: 111 131 ··· 148 124 - 高速缓存、MMU 149 125 MMU 必须关闭。 150 126 指令缓存开启或关闭都可以。 151 - 数据缓存必须关闭且无效。 152 - 外部高速缓存(如果存在)必须配置并禁用。 127 + 已载入的内核映像的相应内存区必须被清理,以达到缓存一致性点(PoC)。 128 + 当存在系统缓存或其他使能缓存的一致性主控器时,通常需使用虚拟地址维护其缓存,而非 set/way 操作。 129 + 遵从通过虚拟地址操作维护构架缓存的系统缓存必须被配置,并可以被使能。 130 + 而不通过虚拟地址操作维护构架缓存的系统缓存(不推荐),必须被配置且禁用。 131 + 132 + *译者注:对于 PoC 以及缓存相关内容,请参考 ARMv8 构架参考手册 ARM DDI 0487A 153 133 154 134 - 架构计时器 155 135 CNTFRQ 必须设定为计时器的频率,且 CNTVOFF 必须设定为对所有 CPU ··· 168 140 - 系统寄存器 169 141 在进入内核映像的异常级中,所有构架中可写的系统寄存器必须通过软件 170 142 在一个更高的异常级别下初始化,以防止在 未知 状态下运行。 143 + 144 + 对于拥有 GICv3 中断控制器的系统: 145 + - 若当前在 EL3 : 146 + ICC_SRE_EL3.Enable (位 3) 必须初始化为 0b1。 147 + ICC_SRE_EL3.SRE (位 0) 必须初始化为 0b1。 148 + - 若内核运行在 EL1: 149 + ICC_SRE_EL2.Enable (位 3) 必须初始化为 0b1。 150 + ICC_SRE_EL2.SRE (位 0) 必须初始化为 0b1。 171 151 172 152 以上对于 CPU 模式、高速缓存、MMU、架构计时器、一致性、系统寄存器的 173 153 必要条件描述适用于所有 CPU。所有 CPU 必须在同一异常级别跳入内核。 ··· 206 170 ARM DEN 0022A:用于 ARM 上的电源状态协调接口系统软件)中描述的 207 171 CPU_ON 调用来将 CPU 带入内核。 208 172 209 - *译者注:到文档翻译时,此文档已更新为 ARM DEN 0022B。 173 + *译者注: ARM DEN 0022A 已更新到 ARM DEN 0022C。 210 174 211 175 设备树必须包含一个 ‘psci’ 节点,请参考以下文档: 212 176 Documentation/devicetree/bindings/arm/psci.txt
+72
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 + 在应用中可能会出现不可预期的结果。
+29 -42
Documentation/zh_CN/arm64/memory.txt
··· 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> ··· 28 26 =========================== 29 27 30 28 作者: Catalin Marinas <catalin.marinas@arm.com> 31 - 日期: 2012 年 02 月 20 日 32 29 33 30 本文档描述 AArch64 Linux 内核所使用的虚拟内存布局。此构架可以实现 34 31 页大小为 4KB 的 4 级转换表和页大小为 64KB 的 3 级转换表。 35 32 36 - AArch64 Linux 使用页大小为 4KB 的 3 级转换表配置,对于用户和内核 37 - 都有 39-bit (512GB) 的虚拟地址空间。对于页大小为 64KB的配置,仅 38 - 使用 2 级转换表,但内存布局相同。 33 + AArch64 Linux 使用 3 级或 4 级转换表,其页大小配置为 4KB,对于用户和内核 34 + 分别都有 39-bit (512GB) 或 48-bit (256TB) 的虚拟地址空间。 35 + 对于页大小为 64KB的配置,仅使用 2 级转换表,有 42-bit (4TB) 的虚拟地址空间,但内存布局相同。 39 36 40 - 用户地址空间的 63:39 位为 0,而内核地址空间的相应位为 1。TTBRx 的 37 + 用户地址空间的 63:48 位为 0,而内核地址空间的相应位为 1。TTBRx 的 41 38 选择由虚拟地址的 63 位给出。swapper_pg_dir 仅包含内核(全局)映射, 42 - 而用户 pgd 仅包含用户(非全局)映射。swapper_pgd_dir 地址被写入 39 + 而用户 pgd 仅包含用户(非全局)映射。swapper_pg_dir 地址被写入 43 40 TTBR1 中,且从不写入 TTBR0。 44 41 45 42 46 - AArch64 Linux 在页大小为 4KB 时的内存布局: 43 + AArch64 Linux 在页大小为 4KB,并使用 3 级转换表时的内存布局: 47 44 48 45 起始地址 结束地址 大小 用途 49 46 ----------------------------------------------------------------------- 50 47 0000000000000000 0000007fffffffff 512GB 用户空间 51 - 52 - ffffff8000000000 ffffffbbfffeffff ~240GB vmalloc 53 - 54 - ffffffbbffff0000 ffffffbbffffffff 64KB [防护页] 55 - 56 - ffffffbc00000000 ffffffbdffffffff 8GB vmemmap 57 - 58 - ffffffbe00000000 ffffffbffbbfffff ~8GB [防护页,未来用于 vmmemap] 59 - 60 - ffffffbffbc00000 ffffffbffbdfffff 2MB earlyprintk 设备 61 - 62 - ffffffbffbe00000 ffffffbffbe0ffff 64KB PCI I/O 空间 63 - 64 - ffffffbffbe10000 ffffffbcffffffff ~2MB [防护页] 65 - 66 - ffffffbffc000000 ffffffbfffffffff 64MB 模块 67 - 68 - ffffffc000000000 ffffffffffffffff 256GB 内核逻辑内存映射 48 + ffffff8000000000 ffffffffffffffff 512GB 内核空间 69 49 70 50 71 - AArch64 Linux 在页大小为 64KB 时的内存布局: 51 + AArch64 Linux 在页大小为 4KB,并使用 4 级转换表时的内存布局: 52 + 53 + 起始地址 结束地址 大小 用途 54 + ----------------------------------------------------------------------- 55 + 0000000000000000 0000ffffffffffff 256TB 用户空间 56 + ffff000000000000 ffffffffffffffff 256TB 内核空间 57 + 58 + 59 + AArch64 Linux 在页大小为 64KB,并使用 2 级转换表时的内存布局: 72 60 73 61 起始地址 结束地址 大小 用途 74 62 ----------------------------------------------------------------------- 75 63 0000000000000000 000003ffffffffff 4TB 用户空间 64 + fffffc0000000000 ffffffffffffffff 4TB 内核空间 76 65 77 - fffffc0000000000 fffffdfbfffeffff ~2TB vmalloc 78 66 79 - fffffdfbffff0000 fffffdfbffffffff 64KB [防护页] 67 + AArch64 Linux 在页大小为 64KB,并使用 3 级转换表时的内存布局: 80 68 81 - fffffdfc00000000 fffffdfdffffffff 8GB vmemmap 69 + 起始地址 结束地址 大小 用途 70 + ----------------------------------------------------------------------- 71 + 0000000000000000 0000ffffffffffff 256TB 用户空间 72 + ffff000000000000 ffffffffffffffff 256TB 内核空间 82 73 83 - fffffdfe00000000 fffffdfffbbfffff ~8GB [防护页,未来用于 vmmemap] 84 74 85 - fffffdfffbc00000 fffffdfffbdfffff 2MB earlyprintk 设备 86 - 87 - fffffdfffbe00000 fffffdfffbe0ffff 64KB PCI I/O 空间 88 - 89 - fffffdfffbe10000 fffffdfffbffffff ~2MB [防护页] 90 - 91 - fffffdfffc000000 fffffdffffffffff 64MB 模块 92 - 93 - fffffe0000000000 ffffffffffffffff 2TB 内核逻辑内存映射 75 + 更详细的内核虚拟内存布局,请参阅内核启动信息。 94 76 95 77 96 78 4KB 页大小的转换表查找: ··· 88 102 | | | | +-> [20:12] L3 索引 89 103 | | | +-----------> [29:21] L2 索引 90 104 | | +---------------------> [38:30] L1 索引 91 - | +-------------------------------> [47:39] L0 索引 (未使用) 105 + | +-------------------------------> [47:39] L0 索引 92 106 +-------------------------------------------------> [63] TTBR0/1 93 107 94 108 ··· 101 115 | | | | v 102 116 | | | | [15:0] 页内偏移 103 117 | | | +----------> [28:16] L3 索引 104 - | | +--------------------------> [41:29] L2 索引 (仅使用 38:29 ) 105 - | +-------------------------------> [47:42] L1 索引 (未使用) 118 + | | +--------------------------> [41:29] L2 索引 119 + | +-------------------------------> [47:42] L1 索引 106 120 +-------------------------------------------------> [63] TTBR0/1 121 + 107 122 108 123 当使用 KVM 时, 管理程序(hypervisor)在 EL2 中通过相对内核虚拟地址的 109 124 一个固定偏移来映射内核页(内核虚拟地址的高 24 位设为零):
+3 -1
MAINTAINERS
··· 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
+17 -25
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 ··· 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 - 66 - 67 - or 68 - 69 - bzip2 -dc linux-3.X.tar.bz2 | tar xvf - 65 + xz -cd linux-4.X.tar.xz | tar xvf - 70 66 71 67 Replace "X" with the version number of the latest kernel. 72 68 ··· 71 75 files. They should match the library, and not get messed up by 72 76 whatever the kernel-du-jour happens to be. 73 77 74 - - You can also upgrade between 3.x releases by patching. Patches are 75 - distributed in the traditional gzip and the newer bzip2 format. To 76 - install by patching, get all the newer patch files, enter the 77 - top level directory of the kernel source (linux-3.X) and execute: 78 + - You can also upgrade between 4.x releases by patching. Patches are 79 + distributed in the xz format. To install by patching, get all the 80 + newer patch files, enter the top level directory of the kernel source 81 + (linux-4.X) and execute: 78 82 79 - gzip -cd ../patch-3.x.gz | patch -p1 80 - 81 - or 82 - 83 - bzip2 -dc ../patch-3.x.bz2 | patch -p1 83 + xz -cd ../patch-4.x.xz | patch -p1 84 84 85 85 Replace "x" for all versions bigger than the version "X" of your current 86 86 source tree, _in_order_, and you should be ok. You may want to remove ··· 84 92 that there are no failed patches (some-file-name# or some-file-name.rej). 85 93 If there are, either you or I have made a mistake. 86 94 87 - Unlike patches for the 3.x kernels, patches for the 3.x.y kernels 95 + Unlike patches for the 4.x kernels, patches for the 4.x.y kernels 88 96 (also known as the -stable kernels) are not incremental but instead apply 89 - directly to the base 3.x kernel. For example, if your base kernel is 3.0 90 - and you want to apply the 3.0.3 patch, you must not first apply the 3.0.1 91 - and 3.0.2 patches. Similarly, if you are running kernel version 3.0.2 and 92 - want to jump to 3.0.3, you must first reverse the 3.0.2 patch (that is, 93 - patch -R) _before_ applying the 3.0.3 patch. You can read more on this in 97 + directly to the base 4.x kernel. For example, if your base kernel is 4.0 98 + and you want to apply the 4.0.3 patch, you must not first apply the 4.0.1 99 + and 4.0.2 patches. Similarly, if you are running kernel version 4.0.2 and 100 + want to jump to 4.0.3, you must first reverse the 4.0.2 patch (that is, 101 + patch -R) _before_ applying the 4.0.3 patch. You can read more on this in 94 102 Documentation/applying-patches.txt 95 103 96 104 Alternatively, the script patch-kernel can be used to automate this ··· 112 120 113 121 SOFTWARE REQUIREMENTS 114 122 115 - Compiling and running the 3.x kernels requires up-to-date 123 + Compiling and running the 4.x kernels requires up-to-date 116 124 versions of various software packages. Consult 117 125 Documentation/Changes for the minimum version numbers required 118 126 and how to get updates for these packages. Beware that using ··· 129 137 place for the output files (including .config). 130 138 Example: 131 139 132 - kernel source code: /usr/src/linux-3.X 140 + kernel source code: /usr/src/linux-4.X 133 141 build directory: /home/name/build/kernel 134 142 135 143 To configure and build the kernel, use: 136 144 137 - cd /usr/src/linux-3.X 145 + cd /usr/src/linux-4.X 138 146 make O=/home/name/build/kernel menuconfig 139 147 make O=/home/name/build/kernel 140 148 sudo make O=/home/name/build/kernel modules_install install
+3 -3
include/linux/hsi/hsi.h
··· 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;
-6
init/Kconfig
··· 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