Commit d6a24d0640d609138a4e40a4ce9fd9fe7859e24c

Authored by Linus Torvalds

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
... ... @@ -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-&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>
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">
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
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
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 ไฝ่ฎพไธบ้›ถ๏ผ‰:
... ... @@ -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
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;
... ... @@ -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