mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-27 12:57:53 +00:00
It has been a relatively quiet cycle in docsland.
- As promised, the minimum Sphinx version to build the docs is now 1.7, and we have dropped support for Python 2 entirely. That allowed the removal of a bunch of compatibility code. - A set of treewide warning fixups from Mauro that I applied after it became clear nobody else was going to deal with them. - The automarkup mechanism can now create cross-references from relative paths to RST files. - More translations, typo fixes, and warning fixes. No conflicts with any other tree as far as I know. -----BEGIN PGP SIGNATURE----- iQFDBAABCAAtFiEEIw+MvkEiF49krdp9F0NaE2wMflgFAmAq4EUPHGNvcmJldEBs d24ubmV0AAoJEBdDWhNsDH5YTIAH/1I5MlVQwuvNKjwCAEdmltQgHv6SmXSpDkrp SGuviWVXxqz8dTyo7C2R12qE/7nP8zGAmclNdX78ynl5qWaj05lQsjBgMYSoQO/F +akyLQSL8/8SQrtDPPBcboPuIz9DzkX51kkQthvCf0puJi0ScKVHO9Sk9SKUgDoK cnCE9VwpGL7YX/ee2wt91UYREijgJ9P7eQ6rqKvUZ5Itu9ikfu9vQU41GR9tOXDK MQK+k38pWdl8wRgTgA0pkVhMf1G732bxTTicvFHXcyqmCkh7++m2+ysT8O+SBBMX e5BbP0yysSqThjwFHOW5PWM1AWD5iVz+pnwJwEaJ4K76tJJOw9M= =bcDk -----END PGP SIGNATURE----- Merge tag 'docs-5.12' of git://git.lwn.net/linux Pull documentation updates from Jonathan Corbet: "It has been a relatively quiet cycle in docsland. - As promised, the minimum Sphinx version to build the docs is now 1.7, and we have dropped support for Python 2 entirely. That allowed the removal of a bunch of compatibility code. - A set of treewide warning fixups from Mauro that I applied after it became clear nobody else was going to deal with them. - The automarkup mechanism can now create cross-references from relative paths to RST files. - More translations, typo fixes, and warning fixes" * tag 'docs-5.12' of git://git.lwn.net/linux: (75 commits) docs: kernel-hacking: be more civil docs: Remove the Microsoft rhetoric Documentation/admin-guide: kernel-parameters: Update nohlt section doc/admin-guide: fix spelling mistake: "perfomance" -> "performance" docs: Document cross-referencing using relative path docs: Enable usage of relative paths to docs on automarkup docs: thermal: fix spelling mistakes Documentation: admin-guide: Update kvm/xen config option docs: Make syscalls' helpers naming consistent coding-style.rst: Avoid comma statements Documentation: /proc/loadavg: add 3 more field descriptions Documentation/submitting-patches: Add blurb about backtraces in commit messages Docs: drop Python 2 support Move our minimum Sphinx version to 1.7 Documentation: input: define ABS_PRESSURE/ABS_MT_PRESSURE resolution as grams scripts/kernel-doc: add internal hyperlink to DOC: sections Update Documentation/admin-guide/sysctl/fs.rst docs: Update DTB format references docs: zh_CN: add iio index.rst translation docs/zh_CN: add iio ep93xx_adc.rst translation ...
This commit is contained in:
commit
0e63a5c6ba
88 changed files with 809 additions and 500 deletions
|
@ -683,7 +683,7 @@ Orran Krieger and Rusty Russell and Dipankar Sarma and Maneesh Soni"
|
||||||
,month="October"
|
,month="October"
|
||||||
,year="2001"
|
,year="2001"
|
||||||
,note="Available:
|
,note="Available:
|
||||||
\url{http://lkml.org/lkml/2001/10/13/105}
|
\url{https://lore.kernel.org/r/Pine.LNX.4.33.0110131015410.8707-100000@penguin.transmeta.com}
|
||||||
[Viewed August 21, 2004]"
|
[Viewed August 21, 2004]"
|
||||||
,annotation={
|
,annotation={
|
||||||
}
|
}
|
||||||
|
@ -826,7 +826,7 @@ Symposium on Distributed Computing}
|
||||||
,month="October"
|
,month="October"
|
||||||
,year="2002"
|
,year="2002"
|
||||||
,note="Available:
|
,note="Available:
|
||||||
\url{https://lkml.org/lkml/2002/10/24/262}
|
\url{https://lore.kernel.org/r/3DB86B05.447E7410@us.ibm.com}
|
||||||
[Viewed February 15, 2014]"
|
[Viewed February 15, 2014]"
|
||||||
,annotation={
|
,annotation={
|
||||||
Mingming Cao's patch to introduce RCU to SysV IPC.
|
Mingming Cao's patch to introduce RCU to SysV IPC.
|
||||||
|
@ -839,7 +839,7 @@ Symposium on Distributed Computing}
|
||||||
,month="March"
|
,month="March"
|
||||||
,year="2003"
|
,year="2003"
|
||||||
,note="Available:
|
,note="Available:
|
||||||
\url{http://lkml.org/lkml/2003/3/9/205}
|
\url{https://lore.kernel.org/r/Pine.LNX.4.44.0303091831560.2129-100000@home.transmeta.com}
|
||||||
[Viewed March 13, 2006]"
|
[Viewed March 13, 2006]"
|
||||||
,annotation={
|
,annotation={
|
||||||
Linus suggests replacing brlock with RCU and/or seqlocks:
|
Linus suggests replacing brlock with RCU and/or seqlocks:
|
||||||
|
@ -1036,15 +1036,15 @@ Add per-cpu batch counter"
|
||||||
,annotation={
|
,annotation={
|
||||||
RCU runs reasonably on a 512-CPU SGI using Manfred Spraul's patches,
|
RCU runs reasonably on a 512-CPU SGI using Manfred Spraul's patches,
|
||||||
which may be found at:
|
which may be found at:
|
||||||
https://lkml.org/lkml/2004/5/20/49 (split vars into cachelines)
|
https://lore.kernel.org/r/40AC9823.6020709@colorfullife.com (split vars into cachelines)
|
||||||
https://lkml.org/lkml/2004/5/22/114 (cpu_quiet() patch)
|
https://lore.kernel.org/r/Pine.LNX.4.44.0405222141260.11106-100000@dbl.q-ag.de (cpu_quiet() patch)
|
||||||
https://lkml.org/lkml/2004/5/25/24 (0/5)
|
https://lore.kernel.org/r/200405250535.i4P5ZJo8017583@dbl.q-ag.de (0/5)
|
||||||
https://lkml.org/lkml/2004/5/25/23 (1/5)
|
https://lore.kernel.org/r/200405250535.i4P5ZKAQ017591@dbl.q-ag.de (1/5)
|
||||||
https://lkml.org/lkml/2004/5/25/265 (works for Jack)
|
https://lore.kernel.org/r/20040525203215.GB5127@sgi.com (works for Jack)
|
||||||
https://lkml.org/lkml/2004/5/25/20 (2/5)
|
https://lore.kernel.org/r/200405250535.i4P5ZLiR017599@dbl.q-ag.de (2/5)
|
||||||
https://lkml.org/lkml/2004/5/25/22 (3/5)
|
https://lore.kernel.org/r/200405250535.i4P5ZMFt017607@dbl.q-ag.de (3/5)
|
||||||
https://lkml.org/lkml/2004/5/25/19 (4/5)
|
https://lore.kernel.org/r/200405250535.i4P5ZN6g017615@dbl.q-ag.de (4/5)
|
||||||
https://lkml.org/lkml/2004/5/25/21 (5/5)
|
https://lore.kernel.org/r/200405250535.i4P5ZO7I017623@dbl.q-ag.de (5/5)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1106,7 +1106,7 @@ Oregon Health and Sciences University"
|
||||||
,month="August"
|
,month="August"
|
||||||
,year="2004"
|
,year="2004"
|
||||||
,note="Available:
|
,note="Available:
|
||||||
\url{http://lkml.org/lkml/2004/8/6/237}
|
\url{https://lore.kernel.org/r/20040807192424.GF3936@in.ibm.com}
|
||||||
[Viewed June 8, 2010]"
|
[Viewed June 8, 2010]"
|
||||||
,annotation={
|
,annotation={
|
||||||
Introduce rcu_dereference().
|
Introduce rcu_dereference().
|
||||||
|
@ -1119,7 +1119,7 @@ Oregon Health and Sciences University"
|
||||||
,month="August"
|
,month="August"
|
||||||
,year="2004"
|
,year="2004"
|
||||||
,note="Available:
|
,note="Available:
|
||||||
\url{http://lkml.org/lkml/2004/8/30/87}
|
\url{https://lore.kernel.org/r/1093873222.984.12.camel@new.localdomain}
|
||||||
[Viewed February 17, 2005]"
|
[Viewed February 17, 2005]"
|
||||||
,annotation={
|
,annotation={
|
||||||
Uses active code in rcu_read_lock() and rcu_read_unlock() to
|
Uses active code in rcu_read_lock() and rcu_read_unlock() to
|
||||||
|
@ -1186,7 +1186,7 @@ Oregon Health and Sciences University"
|
||||||
,month="October"
|
,month="October"
|
||||||
,year="2004"
|
,year="2004"
|
||||||
,note="Available:
|
,note="Available:
|
||||||
\url{http://lkml.org/lkml/2004/10/23/241}
|
\url{https://lore.kernel.org/r/20041023202723.GA1930@us.ibm.com}
|
||||||
[Viewed June 8, 2010]"
|
[Viewed June 8, 2010]"
|
||||||
,annotation={
|
,annotation={
|
||||||
Introduce rcu_assign_pointer().
|
Introduce rcu_assign_pointer().
|
||||||
|
@ -1203,7 +1203,7 @@ Oregon Health and Sciences University"
|
||||||
,annotation={
|
,annotation={
|
||||||
James Morris posts Kaigai Kohei's patch to LKML.
|
James Morris posts Kaigai Kohei's patch to LKML.
|
||||||
[Viewed December 10, 2004]
|
[Viewed December 10, 2004]
|
||||||
Kaigai's patch is at https://lkml.org/lkml/2004/9/27/52
|
Kaigai's patch is at https://lore.kernel.org/r/200409271057.i8RAvcA1007873@mailsv.bs1.fc.nec.co.jp
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1241,7 +1241,7 @@ Oregon Health and Sciences University"
|
||||||
,year="2005"
|
,year="2005"
|
||||||
,day="17"
|
,day="17"
|
||||||
,note="Available:
|
,note="Available:
|
||||||
\url{http://lkml.org/lkml/2005/3/17/199}
|
\url{https://lore.kernel.org/r/20050318002026.GA2693@us.ibm.com}
|
||||||
[Viewed September 5, 2005]"
|
[Viewed September 5, 2005]"
|
||||||
,annotation={
|
,annotation={
|
||||||
First posting showing how RCU can be safely adapted for
|
First posting showing how RCU can be safely adapted for
|
||||||
|
@ -1256,7 +1256,7 @@ Oregon Health and Sciences University"
|
||||||
,year="2005"
|
,year="2005"
|
||||||
,day="18"
|
,day="18"
|
||||||
,note="Available:
|
,note="Available:
|
||||||
\url{http://lkml.org/lkml/2005/3/18/122}
|
\url{https://lore.kernel.org/r/Pine.OSF.4.05.10503181336310.2466-100000@da410.phys.au.dk}
|
||||||
[Viewed March 30, 2006]"
|
[Viewed March 30, 2006]"
|
||||||
,annotation={
|
,annotation={
|
||||||
Esben Neilsen suggests read-side suppression of grace-period
|
Esben Neilsen suggests read-side suppression of grace-period
|
||||||
|
@ -1302,7 +1302,7 @@ Data Structures"
|
||||||
,month="May"
|
,month="May"
|
||||||
,year="2005"
|
,year="2005"
|
||||||
,note="Available:
|
,note="Available:
|
||||||
\url{http://lkml.org/lkml/2005/5/9/185}
|
\url{https://lore.kernel.org/r/20050510012444.GA3011@us.ibm.com}
|
||||||
[Viewed May 13, 2005]"
|
[Viewed May 13, 2005]"
|
||||||
,annotation={
|
,annotation={
|
||||||
First publication of working lock-based deferred free patches
|
First publication of working lock-based deferred free patches
|
||||||
|
@ -1385,7 +1385,7 @@ Data Structures"
|
||||||
,day="1"
|
,day="1"
|
||||||
,year="2005"
|
,year="2005"
|
||||||
,note="Available:
|
,note="Available:
|
||||||
\url{http://lkml.org/lkml/2005/8/1/155}
|
\url{https://lore.kernel.org/r/20050801171137.GA1754@us.ibm.com}
|
||||||
[Viewed March 14, 2006]"
|
[Viewed March 14, 2006]"
|
||||||
,annotation={
|
,annotation={
|
||||||
First operating counter-based realtime RCU patch posted to LKML.
|
First operating counter-based realtime RCU patch posted to LKML.
|
||||||
|
@ -1399,7 +1399,7 @@ Data Structures"
|
||||||
,day="8"
|
,day="8"
|
||||||
,year="2005"
|
,year="2005"
|
||||||
,note="Available:
|
,note="Available:
|
||||||
\url{http://lkml.org/lkml/2005/8/8/108}
|
\url{https://lore.kernel.org/r/20050808144216.GA1307@us.ibm.com}
|
||||||
[Viewed March 14, 2006]"
|
[Viewed March 14, 2006]"
|
||||||
,annotation={
|
,annotation={
|
||||||
First operating counter-based realtime RCU patch posted to LKML,
|
First operating counter-based realtime RCU patch posted to LKML,
|
||||||
|
@ -1415,7 +1415,7 @@ Data Structures"
|
||||||
,day="1"
|
,day="1"
|
||||||
,year="2005"
|
,year="2005"
|
||||||
,note="Available:
|
,note="Available:
|
||||||
\url{http://lkml.org/lkml/2005/10/1/70}
|
\url{https://lore.kernel.org/r/20051001182056.GA1613@us.ibm.com}
|
||||||
[Viewed March 14, 2006]"
|
[Viewed March 14, 2006]"
|
||||||
,annotation={
|
,annotation={
|
||||||
First rcutorture patch.
|
First rcutorture patch.
|
||||||
|
@ -1429,7 +1429,7 @@ Data Structures"
|
||||||
,day="6"
|
,day="6"
|
||||||
,year="2006"
|
,year="2006"
|
||||||
,note="Available:
|
,note="Available:
|
||||||
\url{https://lkml.org/lkml/2006/1/7/22}
|
\url{https://lore.kernel.org/r/20060106.231054.43576567.davem@davemloft.net}
|
||||||
[Viewed February 29, 2012]"
|
[Viewed February 29, 2012]"
|
||||||
,annotation={
|
,annotation={
|
||||||
David Miller's view on hashed arrays of locks: used to really
|
David Miller's view on hashed arrays of locks: used to really
|
||||||
|
@ -1464,7 +1464,7 @@ Distributed Processing Symposium"
|
||||||
,day="20"
|
,day="20"
|
||||||
,year="2006"
|
,year="2006"
|
||||||
,note="Available:
|
,note="Available:
|
||||||
\url{http://lkml.org/lkml/2006/6/20/238}
|
\url{https://lore.kernel.org/r/20060408134707.22479.33814.sendpatchset@linux.site}
|
||||||
[Viewed March 25, 2008]"
|
[Viewed March 25, 2008]"
|
||||||
,annotation={
|
,annotation={
|
||||||
RCU-protected radix tree.
|
RCU-protected radix tree.
|
||||||
|
@ -1554,7 +1554,7 @@ Revised:
|
||||||
,day="28"
|
,day="28"
|
||||||
,year="2006"
|
,year="2006"
|
||||||
,note="Available:
|
,note="Available:
|
||||||
\url{http://lkml.org/lkml/2006/9/28/160}
|
\url{https://lore.kernel.org/r/20060928142616.GA20185@infradead.org}
|
||||||
[Viewed March 27, 2008]"
|
[Viewed March 27, 2008]"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1593,7 +1593,7 @@ Revised:
|
||||||
,year="2006"
|
,year="2006"
|
||||||
,day=26
|
,day=26
|
||||||
,note="Available:
|
,note="Available:
|
||||||
\url{http://lkml.org/lkml/2006/10/26/73}
|
\url{https://lore.kernel.org/r/20061026105731.GE11803@in.ibm.com}
|
||||||
[Viewed January 26, 2009]"
|
[Viewed January 26, 2009]"
|
||||||
,annotation={
|
,annotation={
|
||||||
RCU-based reader-writer lock that allows readers to proceed with
|
RCU-based reader-writer lock that allows readers to proceed with
|
||||||
|
@ -1612,12 +1612,12 @@ Revised:
|
||||||
,year="2006"
|
,year="2006"
|
||||||
,day=17
|
,day=17
|
||||||
,note="Available:
|
,note="Available:
|
||||||
\url{http://lkml.org/lkml/2006/11/17/56}
|
\url{https://lore.kernel.org/r/20061117092925.GT7164@kernel.dk}
|
||||||
[Viewed May 28, 2007]"
|
[Viewed May 28, 2007]"
|
||||||
,annotation={
|
,annotation={
|
||||||
SRCU's grace periods are too slow for Jens, even after a
|
SRCU's grace periods are too slow for Jens, even after a
|
||||||
factor-of-three speedup.
|
factor-of-three speedup.
|
||||||
Sped-up version of SRCU at http://lkml.org/lkml/2006/11/17/359.
|
Sped-up version of SRCU at https://lore.kernel.org/r/20061118002845.GF2632@us.ibm.com.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1629,7 +1629,7 @@ Revised:
|
||||||
,year="2006"
|
,year="2006"
|
||||||
,day=19
|
,day=19
|
||||||
,note="Available:
|
,note="Available:
|
||||||
\url{http://lkml.org/lkml/2006/11/19/69}
|
\url{https://lore.kernel.org/r/20061119190027.GA3676@oleg}
|
||||||
[Viewed May 28, 2007]"
|
[Viewed May 28, 2007]"
|
||||||
,annotation={
|
,annotation={
|
||||||
First cut of QRCU. Expanded/corrected versions followed.
|
First cut of QRCU. Expanded/corrected versions followed.
|
||||||
|
@ -1644,7 +1644,7 @@ Revised:
|
||||||
,year="2006"
|
,year="2006"
|
||||||
,day=30
|
,day=30
|
||||||
,note="Available:
|
,note="Available:
|
||||||
\url{http://lkml.org/lkml/2006/11/29/330}
|
\url{https://lore.kernel.org/r/20061130015714.GC1350@oleg}
|
||||||
[Viewed November 26, 2008]"
|
[Viewed November 26, 2008]"
|
||||||
,annotation={
|
,annotation={
|
||||||
Expanded/corrected version of QRCU.
|
Expanded/corrected version of QRCU.
|
||||||
|
@ -1709,7 +1709,7 @@ Revised:
|
||||||
,year="2007"
|
,year="2007"
|
||||||
,day=3
|
,day=3
|
||||||
,note="Available:
|
,note="Available:
|
||||||
\url{http://lkml.org/lkml/2007/1/3/112}
|
\url{https://lore.kernel.org/r/20070103152738.GA16063@localdomain}
|
||||||
[Viewed May 28, 2007]"
|
[Viewed May 28, 2007]"
|
||||||
,annotation={
|
,annotation={
|
||||||
Patch for list_splice_rcu().
|
Patch for list_splice_rcu().
|
||||||
|
@ -1737,7 +1737,7 @@ Revised:
|
||||||
,year="2007"
|
,year="2007"
|
||||||
,day=28
|
,day=28
|
||||||
,note="Available:
|
,note="Available:
|
||||||
\url{http://lkml.org/lkml/2007/1/28/34}
|
\url{https://lore.kernel.org/r/20070128120509.719287000@programming.kicks-ass.net}
|
||||||
[Viewed March 27, 2008]"
|
[Viewed March 27, 2008]"
|
||||||
,annotation={
|
,annotation={
|
||||||
RCU-like implementation for frequent updaters and rare readers(!).
|
RCU-like implementation for frequent updaters and rare readers(!).
|
||||||
|
@ -1767,7 +1767,7 @@ Revised:
|
||||||
,year="2007"
|
,year="2007"
|
||||||
,day=24
|
,day=24
|
||||||
,note="Available:
|
,note="Available:
|
||||||
\url{http://lkml.org/lkml/2007/2/25/18}
|
\url{https://lore.kernel.org/r/20070225062349.GA17468@linux.vnet.ibm.com}
|
||||||
[Viewed March 27, 2008]"
|
[Viewed March 27, 2008]"
|
||||||
,annotation={
|
,annotation={
|
||||||
Patch for QRCU supplying lock-free fast path.
|
Patch for QRCU supplying lock-free fast path.
|
||||||
|
@ -1846,7 +1846,7 @@ Revised:
|
||||||
,annotation={
|
,annotation={
|
||||||
LWN article describing Promela and spin, and also using Oleg
|
LWN article describing Promela and spin, and also using Oleg
|
||||||
Nesterov's QRCU as an example (with Paul McKenney's fastpath).
|
Nesterov's QRCU as an example (with Paul McKenney's fastpath).
|
||||||
Merged patch at: http://lkml.org/lkml/2007/2/25/18
|
Merged patch at: https://lore.kernel.org/r/20070225062349.GA17468@linux.vnet.ibm.com
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1885,7 +1885,7 @@ Revised:
|
||||||
,day="10"
|
,day="10"
|
||||||
,year="2007"
|
,year="2007"
|
||||||
,note="Available:
|
,note="Available:
|
||||||
\url{http://lkml.org/lkml/2007/9/10/213}
|
\url{https://lore.kernel.org/r/20070910183004.GA3299@linux.vnet.ibm.com}
|
||||||
[Viewed October 25, 2007]"
|
[Viewed October 25, 2007]"
|
||||||
,annotation={
|
,annotation={
|
||||||
Final patch for preemptable RCU to -rt. (Later patches were
|
Final patch for preemptable RCU to -rt. (Later patches were
|
||||||
|
@ -1933,7 +1933,7 @@ Revised:
|
||||||
,day="20"
|
,day="20"
|
||||||
,year="2007"
|
,year="2007"
|
||||||
,note="Available:
|
,note="Available:
|
||||||
\url{http://lkml.org/lkml/2007/12/20/244}
|
\url{https://lore.kernel.org/r/20071220142540.GB22523@Krystal}
|
||||||
[Viewed March 27, 2008]"
|
[Viewed March 27, 2008]"
|
||||||
,annotation={
|
,annotation={
|
||||||
Request for call_rcu_sched() and rcu_barrier_sched().
|
Request for call_rcu_sched() and rcu_barrier_sched().
|
||||||
|
@ -2013,7 +2013,7 @@ Revised:
|
||||||
,day="29"
|
,day="29"
|
||||||
,year="2008"
|
,year="2008"
|
||||||
,note="Available:
|
,note="Available:
|
||||||
\url{http://lkml.org/lkml/2008/1/29/208}
|
\url{https://lore.kernel.org/r/Pine.LNX.4.58.0801291113350.20371@gandalf.stny.rr.com}
|
||||||
[Viewed March 27, 2008]"
|
[Viewed March 27, 2008]"
|
||||||
,annotation={
|
,annotation={
|
||||||
Patch that prevents preemptible RCU from unnecessarily waking
|
Patch that prevents preemptible RCU from unnecessarily waking
|
||||||
|
@ -2028,7 +2028,7 @@ Revised:
|
||||||
,day="1"
|
,day="1"
|
||||||
,year="2008"
|
,year="2008"
|
||||||
,note="Available:
|
,note="Available:
|
||||||
\url{http://lkml.org/lkml/2008/2/2/255}
|
\url{https://lore.kernel.org/r/20080202214124.GA28612@linux.vnet.ibm.com}
|
||||||
[Viewed October 18, 2008]"
|
[Viewed October 18, 2008]"
|
||||||
,annotation={
|
,annotation={
|
||||||
Explanation of compilers violating dependency ordering.
|
Explanation of compilers violating dependency ordering.
|
||||||
|
@ -2088,7 +2088,7 @@ lot of {Linux} into your technology!!!"
|
||||||
,day="3"
|
,day="3"
|
||||||
,year="2008"
|
,year="2008"
|
||||||
,note="Available:
|
,note="Available:
|
||||||
\url{http://lkml.org/lkml/2008/6/2/539}
|
\url{https://lore.kernel.org/r/4844BE83.5010401@cn.fujitsu.com}
|
||||||
[Viewed December 10, 2008]"
|
[Viewed December 10, 2008]"
|
||||||
,annotation={
|
,annotation={
|
||||||
Updated RCU classic algorithm. Introduced multi-tailed list
|
Updated RCU classic algorithm. Introduced multi-tailed list
|
||||||
|
@ -2122,7 +2122,7 @@ lot of {Linux} into your technology!!!"
|
||||||
,day="21"
|
,day="21"
|
||||||
,year="2008"
|
,year="2008"
|
||||||
,note="Available:
|
,note="Available:
|
||||||
\url{http://lkml.org/lkml/2008/8/21/336}
|
\url{https://lore.kernel.org/r/48AD8969.7060900@colorfullife.com}
|
||||||
[Viewed December 8, 2008]"
|
[Viewed December 8, 2008]"
|
||||||
,annotation={
|
,annotation={
|
||||||
State-based RCU. One key thing that this patch does is to
|
State-based RCU. One key thing that this patch does is to
|
||||||
|
@ -2137,7 +2137,7 @@ lot of {Linux} into your technology!!!"
|
||||||
,day="6"
|
,day="6"
|
||||||
,year="2008"
|
,year="2008"
|
||||||
,note="Available:
|
,note="Available:
|
||||||
\url{http://lkml.org/lkml/2008/9/6/86}
|
\url{https://lore.kernel.org/r/48C2B1D2.5070801@colorfullife.com}
|
||||||
[Viewed December 8, 2008]"
|
[Viewed December 8, 2008]"
|
||||||
,annotation={
|
,annotation={
|
||||||
Manfred notes a fix required to my attempt to separate irq
|
Manfred notes a fix required to my attempt to separate irq
|
||||||
|
@ -2183,7 +2183,7 @@ lot of {Linux} into your technology!!!"
|
||||||
,day="14"
|
,day="14"
|
||||||
,year="2009"
|
,year="2009"
|
||||||
,note="Available:
|
,note="Available:
|
||||||
\url{http://lkml.org/lkml/2009/1/14/449}
|
\url{https://lore.kernel.org/r/20090114202044.GJ6734@linux.vnet.ibm.com}
|
||||||
[Viewed January 15, 2009]"
|
[Viewed January 15, 2009]"
|
||||||
,annotation={
|
,annotation={
|
||||||
Small-footprint implementation of RCU for uniprocessor
|
Small-footprint implementation of RCU for uniprocessor
|
||||||
|
@ -2218,7 +2218,7 @@ lot of {Linux} into your technology!!!"
|
||||||
git://lttng.org/userspace-rcu.git
|
git://lttng.org/userspace-rcu.git
|
||||||
http://lttng.org/cgi-bin/gitweb.cgi?p=userspace-rcu.git
|
http://lttng.org/cgi-bin/gitweb.cgi?p=userspace-rcu.git
|
||||||
http://lttng.org/urcu
|
http://lttng.org/urcu
|
||||||
http://lkml.org/lkml/2009/2/5/572
|
https://lore.kernel.org/r/20090206030543.GB8560@Krystal
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2258,7 +2258,7 @@ lot of {Linux} into your technology!!!"
|
||||||
,day="25"
|
,day="25"
|
||||||
,year="2009"
|
,year="2009"
|
||||||
,note="Available:
|
,note="Available:
|
||||||
\url{http://lkml.org/lkml/2009/6/25/306}
|
\url{https://lore.kernel.org/r/20090625160706.GA9467@linux.vnet.ibm.com}
|
||||||
[Viewed August 16, 2009]"
|
[Viewed August 16, 2009]"
|
||||||
,annotation={
|
,annotation={
|
||||||
First posting of expedited RCU to be accepted into -tip.
|
First posting of expedited RCU to be accepted into -tip.
|
||||||
|
@ -2272,7 +2272,7 @@ lot of {Linux} into your technology!!!"
|
||||||
,day="23"
|
,day="23"
|
||||||
,year="2009"
|
,year="2009"
|
||||||
,note="Available:
|
,note="Available:
|
||||||
\url{http://lkml.org/lkml/2009/7/23/294}
|
\url{https://lore.kernel.org/r/20090724001429.GA17374@linux.vnet.ibm.com}
|
||||||
[Viewed August 15, 2009]"
|
[Viewed August 15, 2009]"
|
||||||
,annotation={
|
,annotation={
|
||||||
First posting of simple and fast preemptable RCU.
|
First posting of simple and fast preemptable RCU.
|
||||||
|
@ -2350,7 +2350,7 @@ lot of {Linux} into your technology!!!"
|
||||||
,month="December"
|
,month="December"
|
||||||
,year="2009"
|
,year="2009"
|
||||||
,note="Available:
|
,note="Available:
|
||||||
\url{http://lkml.org/lkml/2009/10/18/129}
|
\url{https://lore.kernel.org/r/20091018232918.GA7385@Krystal}
|
||||||
[Viewed December 29, 2009]"
|
[Viewed December 29, 2009]"
|
||||||
,annotation={
|
,annotation={
|
||||||
Mathieu proposed defer_rcu() with fixed-size per-thread pool
|
Mathieu proposed defer_rcu() with fixed-size per-thread pool
|
||||||
|
@ -2518,7 +2518,7 @@ lot of {Linux} into your technology!!!"
|
||||||
,month="January"
|
,month="January"
|
||||||
,year="2011"
|
,year="2011"
|
||||||
,note="Available:
|
,note="Available:
|
||||||
\url{https://lkml.org/lkml/2011/1/18/322}
|
\url{https://lore.kernel.org/r/AANLkTimajU0x1v6y3rH2+jr-bZ=tNLs1S_agXdGGAa3S@mail.gmail.com}
|
||||||
[Viewed March 4, 2011]"
|
[Viewed March 4, 2011]"
|
||||||
,annotation={
|
,annotation={
|
||||||
"The RCU-based name lookup is at the other end of the spectrum - the
|
"The RCU-based name lookup is at the other end of the spectrum - the
|
||||||
|
|
|
@ -3,8 +3,8 @@ Control Groupstats
|
||||||
==================
|
==================
|
||||||
|
|
||||||
Control Groupstats is inspired by the discussion at
|
Control Groupstats is inspired by the discussion at
|
||||||
http://lkml.org/lkml/2007/4/11/187 and implements per cgroup statistics as
|
https://lore.kernel.org/r/461CF883.2030308@sw.ru and implements per cgroup statistics as
|
||||||
suggested by Andrew Morton in http://lkml.org/lkml/2007/4/11/263.
|
suggested by Andrew Morton in https://lore.kernel.org/r/20070411114927.1277d7c9.akpm@linux-foundation.org.
|
||||||
|
|
||||||
Per cgroup statistics infrastructure re-uses code from the taskstats
|
Per cgroup statistics infrastructure re-uses code from the taskstats
|
||||||
interface. A new set of cgroup operations are registered with commands
|
interface. A new set of cgroup operations are registered with commands
|
||||||
|
|
|
@ -226,10 +226,11 @@ Configuring the kernel
|
||||||
all module options to built in (=y) options. You can
|
all module options to built in (=y) options. You can
|
||||||
also preserve modules by LMC_KEEP.
|
also preserve modules by LMC_KEEP.
|
||||||
|
|
||||||
"make kvmconfig" Enable additional options for kvm guest kernel support.
|
"make kvm_guest.config" Enable additional options for kvm guest kernel
|
||||||
|
support.
|
||||||
|
|
||||||
"make xenconfig" Enable additional options for xen dom0 guest kernel
|
"make xen.config" Enable additional options for xen dom0 guest kernel
|
||||||
support.
|
support.
|
||||||
|
|
||||||
"make tinyconfig" Configure the tiniest possible kernel.
|
"make tinyconfig" Configure the tiniest possible kernel.
|
||||||
|
|
||||||
|
|
|
@ -963,21 +963,21 @@ References
|
||||||
2. Singh, Balbir. Memory Controller (RSS Control),
|
2. Singh, Balbir. Memory Controller (RSS Control),
|
||||||
http://lwn.net/Articles/222762/
|
http://lwn.net/Articles/222762/
|
||||||
3. Emelianov, Pavel. Resource controllers based on process cgroups
|
3. Emelianov, Pavel. Resource controllers based on process cgroups
|
||||||
http://lkml.org/lkml/2007/3/6/198
|
https://lore.kernel.org/r/45ED7DEC.7010403@sw.ru
|
||||||
4. Emelianov, Pavel. RSS controller based on process cgroups (v2)
|
4. Emelianov, Pavel. RSS controller based on process cgroups (v2)
|
||||||
http://lkml.org/lkml/2007/4/9/78
|
https://lore.kernel.org/r/461A3010.90403@sw.ru
|
||||||
5. Emelianov, Pavel. RSS controller based on process cgroups (v3)
|
5. Emelianov, Pavel. RSS controller based on process cgroups (v3)
|
||||||
http://lkml.org/lkml/2007/5/30/244
|
https://lore.kernel.org/r/465D9739.8070209@openvz.org
|
||||||
6. Menage, Paul. Control Groups v10, http://lwn.net/Articles/236032/
|
6. Menage, Paul. Control Groups v10, http://lwn.net/Articles/236032/
|
||||||
7. Vaidyanathan, Srinivasan, Control Groups: Pagecache accounting and control
|
7. Vaidyanathan, Srinivasan, Control Groups: Pagecache accounting and control
|
||||||
subsystem (v3), http://lwn.net/Articles/235534/
|
subsystem (v3), http://lwn.net/Articles/235534/
|
||||||
8. Singh, Balbir. RSS controller v2 test results (lmbench),
|
8. Singh, Balbir. RSS controller v2 test results (lmbench),
|
||||||
http://lkml.org/lkml/2007/5/17/232
|
https://lore.kernel.org/r/464C95D4.7070806@linux.vnet.ibm.com
|
||||||
9. Singh, Balbir. RSS controller v2 AIM9 results
|
9. Singh, Balbir. RSS controller v2 AIM9 results
|
||||||
http://lkml.org/lkml/2007/5/18/1
|
https://lore.kernel.org/r/464D267A.50107@linux.vnet.ibm.com
|
||||||
10. Singh, Balbir. Memory controller v6 test results,
|
10. Singh, Balbir. Memory controller v6 test results,
|
||||||
http://lkml.org/lkml/2007/8/19/36
|
https://lore.kernel.org/r/20070819094658.654.84837.sendpatchset@balbir-laptop
|
||||||
11. Singh, Balbir. Memory controller introduction (v6),
|
11. Singh, Balbir. Memory controller introduction (v6),
|
||||||
http://lkml.org/lkml/2007/8/17/69
|
https://lore.kernel.org/r/20070817084228.26003.12568.sendpatchset@balbir-laptop
|
||||||
12. Corbet, Jonathan, Controlling memory use in cgroups,
|
12. Corbet, Jonathan, Controlling memory use in cgroups,
|
||||||
http://lwn.net/Articles/243795/
|
http://lwn.net/Articles/243795/
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
.. _cgroup-v2:
|
||||||
|
|
||||||
================
|
================
|
||||||
Control Group v2
|
Control Group v2
|
||||||
================
|
================
|
||||||
|
@ -172,7 +174,6 @@ disabling controllers in v1 and make them always available in v2.
|
||||||
cgroup v2 currently supports the following mount options.
|
cgroup v2 currently supports the following mount options.
|
||||||
|
|
||||||
nsdelegate
|
nsdelegate
|
||||||
|
|
||||||
Consider cgroup namespaces as delegation boundaries. This
|
Consider cgroup namespaces as delegation boundaries. This
|
||||||
option is system wide and can only be set on mount or modified
|
option is system wide and can only be set on mount or modified
|
||||||
through remount from the init namespace. The mount option is
|
through remount from the init namespace. The mount option is
|
||||||
|
@ -180,7 +181,6 @@ cgroup v2 currently supports the following mount options.
|
||||||
Delegation section for details.
|
Delegation section for details.
|
||||||
|
|
||||||
memory_localevents
|
memory_localevents
|
||||||
|
|
||||||
Only populate memory.events with data for the current cgroup,
|
Only populate memory.events with data for the current cgroup,
|
||||||
and not any subtrees. This is legacy behaviour, the default
|
and not any subtrees. This is legacy behaviour, the default
|
||||||
behaviour without this option is to include subtree counts.
|
behaviour without this option is to include subtree counts.
|
||||||
|
@ -189,7 +189,6 @@ cgroup v2 currently supports the following mount options.
|
||||||
option is ignored on non-init namespace mounts.
|
option is ignored on non-init namespace mounts.
|
||||||
|
|
||||||
memory_recursiveprot
|
memory_recursiveprot
|
||||||
|
|
||||||
Recursively apply memory.min and memory.low protection to
|
Recursively apply memory.min and memory.low protection to
|
||||||
entire subtrees, without requiring explicit downward
|
entire subtrees, without requiring explicit downward
|
||||||
propagation into leaf cgroups. This allows protecting entire
|
propagation into leaf cgroups. This allows protecting entire
|
||||||
|
@ -786,7 +785,6 @@ Core Interface Files
|
||||||
All cgroup core files are prefixed with "cgroup."
|
All cgroup core files are prefixed with "cgroup."
|
||||||
|
|
||||||
cgroup.type
|
cgroup.type
|
||||||
|
|
||||||
A read-write single value file which exists on non-root
|
A read-write single value file which exists on non-root
|
||||||
cgroups.
|
cgroups.
|
||||||
|
|
||||||
|
@ -954,6 +952,8 @@ All cgroup core files are prefixed with "cgroup."
|
||||||
Controllers
|
Controllers
|
||||||
===========
|
===========
|
||||||
|
|
||||||
|
.. _cgroup-v2-cpu:
|
||||||
|
|
||||||
CPU
|
CPU
|
||||||
---
|
---
|
||||||
|
|
||||||
|
@ -1259,9 +1259,9 @@ PAGE_SIZE multiple when read back.
|
||||||
can show up in the middle. Don't rely on items remaining in a
|
can show up in the middle. Don't rely on items remaining in a
|
||||||
fixed position; use the keys to look up specific values!
|
fixed position; use the keys to look up specific values!
|
||||||
|
|
||||||
If the entry has no per-node counter(or not show in the
|
If the entry has no per-node counter (or not show in the
|
||||||
mempry.numa_stat). We use 'npn'(non-per-node) as the tag
|
memory.numa_stat). We use 'npn' (non-per-node) as the tag
|
||||||
to indicate that it will not show in the mempry.numa_stat.
|
to indicate that it will not show in the memory.numa_stat.
|
||||||
|
|
||||||
anon
|
anon
|
||||||
Amount of memory used in anonymous mappings such as
|
Amount of memory used in anonymous mappings such as
|
||||||
|
@ -1277,11 +1277,11 @@ PAGE_SIZE multiple when read back.
|
||||||
pagetables
|
pagetables
|
||||||
Amount of memory allocated for page tables.
|
Amount of memory allocated for page tables.
|
||||||
|
|
||||||
percpu(npn)
|
percpu (npn)
|
||||||
Amount of memory used for storing per-cpu kernel
|
Amount of memory used for storing per-cpu kernel
|
||||||
data structures.
|
data structures.
|
||||||
|
|
||||||
sock(npn)
|
sock (npn)
|
||||||
Amount of memory used in network transmission buffers
|
Amount of memory used in network transmission buffers
|
||||||
|
|
||||||
shmem
|
shmem
|
||||||
|
@ -1329,7 +1329,7 @@ PAGE_SIZE multiple when read back.
|
||||||
Part of "slab" that cannot be reclaimed on memory
|
Part of "slab" that cannot be reclaimed on memory
|
||||||
pressure.
|
pressure.
|
||||||
|
|
||||||
slab(npn)
|
slab (npn)
|
||||||
Amount of memory used for storing in-kernel data
|
Amount of memory used for storing in-kernel data
|
||||||
structures.
|
structures.
|
||||||
|
|
||||||
|
@ -1357,39 +1357,39 @@ PAGE_SIZE multiple when read back.
|
||||||
workingset_nodereclaim
|
workingset_nodereclaim
|
||||||
Number of times a shadow node has been reclaimed
|
Number of times a shadow node has been reclaimed
|
||||||
|
|
||||||
pgfault(npn)
|
pgfault (npn)
|
||||||
Total number of page faults incurred
|
Total number of page faults incurred
|
||||||
|
|
||||||
pgmajfault(npn)
|
pgmajfault (npn)
|
||||||
Number of major page faults incurred
|
Number of major page faults incurred
|
||||||
|
|
||||||
pgrefill(npn)
|
pgrefill (npn)
|
||||||
Amount of scanned pages (in an active LRU list)
|
Amount of scanned pages (in an active LRU list)
|
||||||
|
|
||||||
pgscan(npn)
|
pgscan (npn)
|
||||||
Amount of scanned pages (in an inactive LRU list)
|
Amount of scanned pages (in an inactive LRU list)
|
||||||
|
|
||||||
pgsteal(npn)
|
pgsteal (npn)
|
||||||
Amount of reclaimed pages
|
Amount of reclaimed pages
|
||||||
|
|
||||||
pgactivate(npn)
|
pgactivate (npn)
|
||||||
Amount of pages moved to the active LRU list
|
Amount of pages moved to the active LRU list
|
||||||
|
|
||||||
pgdeactivate(npn)
|
pgdeactivate (npn)
|
||||||
Amount of pages moved to the inactive LRU list
|
Amount of pages moved to the inactive LRU list
|
||||||
|
|
||||||
pglazyfree(npn)
|
pglazyfree (npn)
|
||||||
Amount of pages postponed to be freed under memory pressure
|
Amount of pages postponed to be freed under memory pressure
|
||||||
|
|
||||||
pglazyfreed(npn)
|
pglazyfreed (npn)
|
||||||
Amount of reclaimed lazyfree pages
|
Amount of reclaimed lazyfree pages
|
||||||
|
|
||||||
thp_fault_alloc(npn)
|
thp_fault_alloc (npn)
|
||||||
Number of transparent hugepages which were allocated to satisfy
|
Number of transparent hugepages which were allocated to satisfy
|
||||||
a page fault. This counter is not present when CONFIG_TRANSPARENT_HUGEPAGE
|
a page fault. This counter is not present when CONFIG_TRANSPARENT_HUGEPAGE
|
||||||
is not set.
|
is not set.
|
||||||
|
|
||||||
thp_collapse_alloc(npn)
|
thp_collapse_alloc (npn)
|
||||||
Number of transparent hugepages which were allocated to allow
|
Number of transparent hugepages which were allocated to allow
|
||||||
collapsing an existing range of pages. This counter is not
|
collapsing an existing range of pages. This counter is not
|
||||||
present when CONFIG_TRANSPARENT_HUGEPAGE is not set.
|
present when CONFIG_TRANSPARENT_HUGEPAGE is not set.
|
||||||
|
@ -1558,7 +1558,7 @@ IO Interface Files
|
||||||
8:0 rbytes=90430464 wbytes=299008000 rios=8950 wios=1252 dbytes=50331648 dios=3021
|
8:0 rbytes=90430464 wbytes=299008000 rios=8950 wios=1252 dbytes=50331648 dios=3021
|
||||||
|
|
||||||
io.cost.qos
|
io.cost.qos
|
||||||
A read-write nested-keyed file with exists only on the root
|
A read-write nested-keyed file which exists only on the root
|
||||||
cgroup.
|
cgroup.
|
||||||
|
|
||||||
This file configures the Quality of Service of the IO cost
|
This file configures the Quality of Service of the IO cost
|
||||||
|
@ -1613,7 +1613,7 @@ IO Interface Files
|
||||||
automatic mode can be restored by setting "ctrl" to "auto".
|
automatic mode can be restored by setting "ctrl" to "auto".
|
||||||
|
|
||||||
io.cost.model
|
io.cost.model
|
||||||
A read-write nested-keyed file with exists only on the root
|
A read-write nested-keyed file which exists only on the root
|
||||||
cgroup.
|
cgroup.
|
||||||
|
|
||||||
This file configures the cost model of the IO cost model based
|
This file configures the cost model of the IO cost model based
|
||||||
|
@ -2000,10 +2000,12 @@ Cpuset Interface Files
|
||||||
cpuset-enabled cgroups. This flag is owned by the parent cgroup
|
cpuset-enabled cgroups. This flag is owned by the parent cgroup
|
||||||
and is not delegatable.
|
and is not delegatable.
|
||||||
|
|
||||||
It accepts only the following input values when written to.
|
It accepts only the following input values when written to.
|
||||||
|
|
||||||
"root" - a partition root
|
======== ================================
|
||||||
"member" - a non-root member of a partition
|
"root" a partition root
|
||||||
|
"member" a non-root member of a partition
|
||||||
|
======== ================================
|
||||||
|
|
||||||
When set to be a partition root, the current cgroup is the
|
When set to be a partition root, the current cgroup is the
|
||||||
root of a new partition or scheduling domain that comprises
|
root of a new partition or scheduling domain that comprises
|
||||||
|
@ -2044,9 +2046,11 @@ Cpuset Interface Files
|
||||||
root to change. On read, the "cpuset.sched.partition" file
|
root to change. On read, the "cpuset.sched.partition" file
|
||||||
can show the following values.
|
can show the following values.
|
||||||
|
|
||||||
"member" Non-root member of a partition
|
============== ==============================
|
||||||
"root" Partition root
|
"member" Non-root member of a partition
|
||||||
"root invalid" Invalid partition root
|
"root" Partition root
|
||||||
|
"root invalid" Invalid partition root
|
||||||
|
============== ==============================
|
||||||
|
|
||||||
It is a partition root if the first 2 partition root conditions
|
It is a partition root if the first 2 partition root conditions
|
||||||
above are true and at least one CPU from "cpuset.cpus" is
|
above are true and at least one CPU from "cpuset.cpus" is
|
||||||
|
@ -2219,7 +2223,7 @@ Without cgroup namespace, the "/proc/$PID/cgroup" file shows the
|
||||||
complete path of the cgroup of a process. In a container setup where
|
complete path of the cgroup of a process. In a container setup where
|
||||||
a set of cgroups and namespaces are intended to isolate processes the
|
a set of cgroups and namespaces are intended to isolate processes the
|
||||||
"/proc/$PID/cgroup" file may leak potential system level information
|
"/proc/$PID/cgroup" file may leak potential system level information
|
||||||
to the isolated processes. For Example::
|
to the isolated processes. For example::
|
||||||
|
|
||||||
# cat /proc/self/cgroup
|
# cat /proc/self/cgroup
|
||||||
0::/batchjobs/container_id1
|
0::/batchjobs/container_id1
|
||||||
|
|
|
@ -107,7 +107,7 @@ will lead to quite erratic information inside ``/proc/stat``::
|
||||||
References
|
References
|
||||||
----------
|
----------
|
||||||
|
|
||||||
- http://lkml.org/lkml/2007/2/12/6
|
- https://lore.kernel.org/r/loom.20070212T063225-663@post.gmane.org
|
||||||
- Documentation/filesystems/proc.rst (1.8)
|
- Documentation/filesystems/proc.rst (1.8)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -60,7 +60,7 @@ Note that for the special case of a range one can split the range into equal
|
||||||
sized groups and for each group use some amount from the beginning of that
|
sized groups and for each group use some amount from the beginning of that
|
||||||
group:
|
group:
|
||||||
|
|
||||||
<cpu number>-cpu number>:<used size>/<group size>
|
<cpu number>-<cpu number>:<used size>/<group size>
|
||||||
|
|
||||||
For example one can add to the command line following parameter:
|
For example one can add to the command line following parameter:
|
||||||
|
|
||||||
|
|
|
@ -606,7 +606,7 @@
|
||||||
kernel/dma/contiguous.c
|
kernel/dma/contiguous.c
|
||||||
|
|
||||||
cma_pernuma=nn[MG]
|
cma_pernuma=nn[MG]
|
||||||
[ARM64,KNL]
|
[ARM64,KNL,CMA]
|
||||||
Sets the size of kernel per-numa memory area for
|
Sets the size of kernel per-numa memory area for
|
||||||
contiguous memory allocations. A value of 0 disables
|
contiguous memory allocations. A value of 0 disables
|
||||||
per-numa CMA altogether. And If this option is not
|
per-numa CMA altogether. And If this option is not
|
||||||
|
@ -1525,12 +1525,12 @@
|
||||||
hpet_mmap= [X86, HPET_MMAP] Allow userspace to mmap HPET
|
hpet_mmap= [X86, HPET_MMAP] Allow userspace to mmap HPET
|
||||||
registers. Default set by CONFIG_HPET_MMAP_DEFAULT.
|
registers. Default set by CONFIG_HPET_MMAP_DEFAULT.
|
||||||
|
|
||||||
hugetlb_cma= [HW] The size of a cma area used for allocation
|
hugetlb_cma= [HW,CMA] The size of a CMA area used for allocation
|
||||||
of gigantic hugepages.
|
of gigantic hugepages.
|
||||||
Format: nn[KMGTPE]
|
Format: nn[KMGTPE]
|
||||||
|
|
||||||
Reserve a cma area of given size and allocate gigantic
|
Reserve a CMA area of given size and allocate gigantic
|
||||||
hugepages using the cma allocator. If enabled, the
|
hugepages using the CMA allocator. If enabled, the
|
||||||
boot-time allocation of gigantic hugepages is skipped.
|
boot-time allocation of gigantic hugepages is skipped.
|
||||||
|
|
||||||
hugepages= [HW] Number of HugeTLB pages to allocate at boot.
|
hugepages= [HW] Number of HugeTLB pages to allocate at boot.
|
||||||
|
@ -3273,9 +3273,14 @@
|
||||||
parameter, xsave area per process might occupy more
|
parameter, xsave area per process might occupy more
|
||||||
memory on xsaves enabled systems.
|
memory on xsaves enabled systems.
|
||||||
|
|
||||||
nohlt [BUGS=ARM,SH] Tells the kernel that the sleep(SH) or
|
nohlt [ARM,ARM64,MICROBLAZE,SH] Forces the kernel to busy wait
|
||||||
wfi(ARM) instruction doesn't work correctly and not to
|
in do_idle() and not use the arch_cpu_idle()
|
||||||
use it. This is also useful when using JTAG debugger.
|
implementation; requires CONFIG_GENERIC_IDLE_POLL_SETUP
|
||||||
|
to be effective. This is useful on platforms where the
|
||||||
|
sleep(SH) or wfi(ARM,ARM64) instructions do not work
|
||||||
|
correctly or when doing power measurements to evalute
|
||||||
|
the impact of the sleep instructions. This is also
|
||||||
|
useful when using JTAG debugger.
|
||||||
|
|
||||||
no_file_caps Tells the kernel not to honor file capabilities. The
|
no_file_caps Tells the kernel not to honor file capabilities. The
|
||||||
only way then for a file to be executed with privilege
|
only way then for a file to be executed with privilege
|
||||||
|
|
|
@ -273,7 +273,7 @@ To reduce its OS jitter, do any of the following:
|
||||||
However, there is an RFC patch from Christoph Lameter
|
However, there is an RFC patch from Christoph Lameter
|
||||||
(based on an earlier one from Gilad Ben-Yossef) that
|
(based on an earlier one from Gilad Ben-Yossef) that
|
||||||
reduces or even eliminates vmstat overhead for some
|
reduces or even eliminates vmstat overhead for some
|
||||||
workloads at https://lkml.org/lkml/2013/9/4/379.
|
workloads at https://lore.kernel.org/r/00000140e9dfd6bd-40db3d4f-c1be-434f-8132-7820f81bb586-000000@email.amazonses.com.
|
||||||
e. If running on high-end powerpc servers, build with
|
e. If running on high-end powerpc servers, build with
|
||||||
CONFIG_PPC_RTAS_DAEMON=n. This prevents the RTAS
|
CONFIG_PPC_RTAS_DAEMON=n. This prevents the RTAS
|
||||||
daemon from running on each CPU every second or so.
|
daemon from running on each CPU every second or so.
|
||||||
|
|
|
@ -72,7 +72,7 @@ monitoring and observability operations, thus, bypass *scope* permissions
|
||||||
checks in the kernel. CAP_PERFMON implements the principle of least
|
checks in the kernel. CAP_PERFMON implements the principle of least
|
||||||
privilege [13]_ (POSIX 1003.1e: 2.2.2.39) for performance monitoring and
|
privilege [13]_ (POSIX 1003.1e: 2.2.2.39) for performance monitoring and
|
||||||
observability operations in the kernel and provides a secure approach to
|
observability operations in the kernel and provides a secure approach to
|
||||||
perfomance monitoring and observability in the system.
|
performance monitoring and observability in the system.
|
||||||
|
|
||||||
For backward compatibility reasons the access to perf_events monitoring and
|
For backward compatibility reasons the access to perf_events monitoring and
|
||||||
observability operations is also open for CAP_SYS_ADMIN privileged
|
observability operations is also open for CAP_SYS_ADMIN privileged
|
||||||
|
|
|
@ -380,5 +380,5 @@ This configuration option sets the maximum number of "watches" that are
|
||||||
allowed for each user.
|
allowed for each user.
|
||||||
Each "watch" costs roughly 90 bytes on a 32bit kernel, and roughly 160 bytes
|
Each "watch" costs roughly 90 bytes on a 32bit kernel, and roughly 160 bytes
|
||||||
on a 64bit one.
|
on a 64bit one.
|
||||||
The current default value for max_user_watches is the 1/32 of the available
|
The current default value for max_user_watches is the 1/25 (4%) of the
|
||||||
low memory, divided for the "watch" cost in bytes.
|
available low memory, divided for the "watch" cost in bytes.
|
||||||
|
|
|
@ -128,7 +128,7 @@ it. The recommended placement is in the first 16KiB of RAM.
|
||||||
|
|
||||||
The boot loader must load a device tree image (dtb) into system ram
|
The boot loader must load a device tree image (dtb) into system ram
|
||||||
at a 64bit aligned address and initialize it with the boot data. The
|
at a 64bit aligned address and initialize it with the boot data. The
|
||||||
dtb format is documented in Documentation/devicetree/booting-without-of.rst.
|
dtb format is documented at https://www.devicetree.org/specifications/.
|
||||||
The kernel will look for the dtb magic value of 0xd00dfeed at the dtb
|
The kernel will look for the dtb magic value of 0xd00dfeed at the dtb
|
||||||
physical address to determine if a dtb has been passed instead of a
|
physical address to determine if a dtb has been passed instead of a
|
||||||
tagged list.
|
tagged list.
|
||||||
|
|
|
@ -33,7 +33,7 @@ SoC-specific documents
|
||||||
|
|
||||||
ixp4xx
|
ixp4xx
|
||||||
|
|
||||||
marvel
|
marvell
|
||||||
microchip
|
microchip
|
||||||
|
|
||||||
netwinder
|
netwinder
|
||||||
|
|
|
@ -127,7 +127,7 @@ EBU Armada family
|
||||||
- 88F6828 Armada 388
|
- 88F6828 Armada 388
|
||||||
|
|
||||||
- Product infos: http://www.marvell.com/embedded-processors/armada-38x/
|
- Product infos: http://www.marvell.com/embedded-processors/armada-38x/
|
||||||
- Functional Spec: https://marvellcorp.wufoo.com/forms/marvell-armada-38x-functional-specifications/
|
- Functional Spec: http://www.marvell.com/content/dam/marvell/en/public-collateral/embedded-processors/marvell-embedded-processors-armada-38x-functional-specifications-2015-11.pdf
|
||||||
|
|
||||||
Core:
|
Core:
|
||||||
ARM Cortex-A9
|
ARM Cortex-A9
|
||||||
|
@ -183,7 +183,10 @@ EBU Armada family ARMv8
|
||||||
http://www.marvell.com/embedded-processors/armada-3700/
|
http://www.marvell.com/embedded-processors/armada-3700/
|
||||||
|
|
||||||
Product Brief:
|
Product Brief:
|
||||||
http://www.marvell.com/embedded-processors/assets/PB-88F3700-FNL.pdf
|
http://www.marvell.com/content/dam/marvell/en/public-collateral/embedded-processors/marvell-embedded-processors-armada-37xx-product-brief-2016-01.pdf
|
||||||
|
|
||||||
|
Hardware Spec:
|
||||||
|
http://www.marvell.com/content/dam/marvell/en/public-collateral/embedded-processors/marvell-embedded-processors-armada-37xx-hardware-specifications-2019-09.pdf
|
||||||
|
|
||||||
Device tree files:
|
Device tree files:
|
||||||
arch/arm64/boot/dts/marvell/armada-37*
|
arch/arm64/boot/dts/marvell/armada-37*
|
|
@ -31,7 +31,7 @@ from load_config import loadConfig
|
||||||
# -- General configuration ------------------------------------------------
|
# -- General configuration ------------------------------------------------
|
||||||
|
|
||||||
# If your documentation needs a minimal Sphinx version, state it here.
|
# If your documentation needs a minimal Sphinx version, state it here.
|
||||||
needs_sphinx = '1.3'
|
needs_sphinx = '1.7'
|
||||||
|
|
||||||
# Add any Sphinx extension module names here, as strings. They can be
|
# Add any Sphinx extension module names here, as strings. They can be
|
||||||
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
|
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
|
||||||
|
@ -112,19 +112,12 @@ if major >= 3:
|
||||||
|
|
||||||
else:
|
else:
|
||||||
extensions.append('cdomain')
|
extensions.append('cdomain')
|
||||||
if major == 1 and minor < 7:
|
|
||||||
sys.stderr.write('WARNING: Sphinx 1.7 or greater will be required as of '
|
|
||||||
'the 5.12 release\n')
|
|
||||||
|
|
||||||
# Ensure that autosectionlabel will produce unique names
|
# Ensure that autosectionlabel will produce unique names
|
||||||
autosectionlabel_prefix_document = True
|
autosectionlabel_prefix_document = True
|
||||||
autosectionlabel_maxdepth = 2
|
autosectionlabel_maxdepth = 2
|
||||||
|
|
||||||
# The name of the math extension changed on Sphinx 1.4
|
extensions.append("sphinx.ext.imgmath")
|
||||||
if (major == 1 and minor > 3) or (major > 1):
|
|
||||||
extensions.append("sphinx.ext.imgmath")
|
|
||||||
else:
|
|
||||||
extensions.append("sphinx.ext.pngmath")
|
|
||||||
|
|
||||||
# Add any paths that contain templates here, relative to this directory.
|
# Add any paths that contain templates here, relative to this directory.
|
||||||
templates_path = ['_templates']
|
templates_path = ['_templates']
|
||||||
|
@ -375,71 +368,9 @@ if cjk_cmd.find("Noto Sans CJK SC") >= 0:
|
||||||
'''
|
'''
|
||||||
|
|
||||||
# Fix reference escape troubles with Sphinx 1.4.x
|
# Fix reference escape troubles with Sphinx 1.4.x
|
||||||
if major == 1 and minor > 3:
|
if major == 1:
|
||||||
latex_elements['preamble'] += '\\renewcommand*{\\DUrole}[2]{ #2 }\n'
|
latex_elements['preamble'] += '\\renewcommand*{\\DUrole}[2]{ #2 }\n'
|
||||||
|
|
||||||
if major == 1 and minor <= 4:
|
|
||||||
latex_elements['preamble'] += '\\usepackage[margin=0.5in, top=1in, bottom=1in]{geometry}'
|
|
||||||
elif major == 1 and (minor > 5 or (minor == 5 and patch >= 3)):
|
|
||||||
latex_elements['sphinxsetup'] = 'hmargin=0.5in, vmargin=1in'
|
|
||||||
latex_elements['preamble'] += '\\fvset{fontsize=auto}\n'
|
|
||||||
|
|
||||||
# Customize notice background colors on Sphinx < 1.6:
|
|
||||||
if major == 1 and minor < 6:
|
|
||||||
latex_elements['preamble'] += '''
|
|
||||||
\\usepackage{ifthen}
|
|
||||||
|
|
||||||
% Put notes in color and let them be inside a table
|
|
||||||
\\definecolor{NoteColor}{RGB}{204,255,255}
|
|
||||||
\\definecolor{WarningColor}{RGB}{255,204,204}
|
|
||||||
\\definecolor{AttentionColor}{RGB}{255,255,204}
|
|
||||||
\\definecolor{ImportantColor}{RGB}{192,255,204}
|
|
||||||
\\definecolor{OtherColor}{RGB}{204,204,204}
|
|
||||||
\\newlength{\\mynoticelength}
|
|
||||||
\\makeatletter\\newenvironment{coloredbox}[1]{%
|
|
||||||
\\setlength{\\fboxrule}{1pt}
|
|
||||||
\\setlength{\\fboxsep}{7pt}
|
|
||||||
\\setlength{\\mynoticelength}{\\linewidth}
|
|
||||||
\\addtolength{\\mynoticelength}{-2\\fboxsep}
|
|
||||||
\\addtolength{\\mynoticelength}{-2\\fboxrule}
|
|
||||||
\\begin{lrbox}{\\@tempboxa}\\begin{minipage}{\\mynoticelength}}{\\end{minipage}\\end{lrbox}%
|
|
||||||
\\ifthenelse%
|
|
||||||
{\\equal{\\py@noticetype}{note}}%
|
|
||||||
{\\colorbox{NoteColor}{\\usebox{\\@tempboxa}}}%
|
|
||||||
{%
|
|
||||||
\\ifthenelse%
|
|
||||||
{\\equal{\\py@noticetype}{warning}}%
|
|
||||||
{\\colorbox{WarningColor}{\\usebox{\\@tempboxa}}}%
|
|
||||||
{%
|
|
||||||
\\ifthenelse%
|
|
||||||
{\\equal{\\py@noticetype}{attention}}%
|
|
||||||
{\\colorbox{AttentionColor}{\\usebox{\\@tempboxa}}}%
|
|
||||||
{%
|
|
||||||
\\ifthenelse%
|
|
||||||
{\\equal{\\py@noticetype}{important}}%
|
|
||||||
{\\colorbox{ImportantColor}{\\usebox{\\@tempboxa}}}%
|
|
||||||
{\\colorbox{OtherColor}{\\usebox{\\@tempboxa}}}%
|
|
||||||
}%
|
|
||||||
}%
|
|
||||||
}%
|
|
||||||
}\\makeatother
|
|
||||||
|
|
||||||
\\makeatletter
|
|
||||||
\\renewenvironment{notice}[2]{%
|
|
||||||
\\def\\py@noticetype{#1}
|
|
||||||
\\begin{coloredbox}{#1}
|
|
||||||
\\bf\\it
|
|
||||||
\\par\\strong{#2}
|
|
||||||
\\csname py@noticestart@#1\\endcsname
|
|
||||||
}
|
|
||||||
{
|
|
||||||
\\csname py@noticeend@\\py@noticetype\\endcsname
|
|
||||||
\\end{coloredbox}
|
|
||||||
}
|
|
||||||
\\makeatother
|
|
||||||
|
|
||||||
'''
|
|
||||||
|
|
||||||
# With Sphinx 1.6, it is possible to change the Bg color directly
|
# With Sphinx 1.6, it is possible to change the Bg color directly
|
||||||
# by using:
|
# by using:
|
||||||
# \definecolor{sphinxnoteBgColor}{RGB}{204,255,255}
|
# \definecolor{sphinxnoteBgColor}{RGB}{204,255,255}
|
||||||
|
|
|
@ -12,7 +12,7 @@ This article describes how Linux uses the device tree. An overview of
|
||||||
the device tree data format can be found on the device tree usage page
|
the device tree data format can be found on the device tree usage page
|
||||||
at devicetree.org\ [1]_.
|
at devicetree.org\ [1]_.
|
||||||
|
|
||||||
.. [1] https://elinux.org/Device_Tree_Usage
|
.. [1] https://www.devicetree.org/specifications/
|
||||||
|
|
||||||
The "Open Firmware Device Tree", or simply Device Tree (DT), is a data
|
The "Open Firmware Device Tree", or simply Device Tree (DT), is a data
|
||||||
structure and language for describing hardware. More specifically, it
|
structure and language for describing hardware. More specifically, it
|
||||||
|
|
|
@ -340,16 +340,26 @@ Rendered as:
|
||||||
Cross-referencing
|
Cross-referencing
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
Cross-referencing from one documentation page to another can be done by passing
|
Cross-referencing from one documentation page to another can be done simply by
|
||||||
the path to the file starting from the Documentation folder.
|
writing the path to the document file, no special syntax required. The path can
|
||||||
For example, to cross-reference to this page (the .rst extension is optional)::
|
be either absolute or relative. For absolute paths, start it with
|
||||||
|
"Documentation/". For example, to cross-reference to this page, all the
|
||||||
|
following are valid options, depending on the current document's directory (note
|
||||||
|
that the ``.rst`` extension is required)::
|
||||||
|
|
||||||
See Documentation/doc-guide/sphinx.rst.
|
See Documentation/doc-guide/sphinx.rst. This always works.
|
||||||
|
Take a look at sphinx.rst, which is at this same directory.
|
||||||
|
Read ../sphinx.rst, which is one directory above.
|
||||||
|
|
||||||
If you want to use a relative path, you need to use Sphinx's ``doc`` directive.
|
If you want the link to have a different rendered text other than the document's
|
||||||
For example, referencing this page from the same directory would be done as::
|
title, you need to use Sphinx's ``doc`` role. For example::
|
||||||
|
|
||||||
See :doc:`sphinx`.
|
See :doc:`my custom link text for document sphinx <sphinx>`.
|
||||||
|
|
||||||
|
For most use cases, the former is preferred, as it is cleaner and more suited
|
||||||
|
for people reading the source files. If you come across a ``:doc:`` usage that
|
||||||
|
isn't adding any value, please feel free to convert it to just the document
|
||||||
|
path.
|
||||||
|
|
||||||
For information on cross-referencing to kernel-doc functions or types, see
|
For information on cross-referencing to kernel-doc functions or types, see
|
||||||
Documentation/doc-guide/kernel-doc.rst.
|
Documentation/doc-guide/kernel-doc.rst.
|
||||||
|
|
|
@ -640,8 +640,8 @@ compliance:
|
||||||
level and edge IRQs
|
level and edge IRQs
|
||||||
|
|
||||||
* [1] http://www.spinics.net/lists/linux-omap/msg120425.html
|
* [1] http://www.spinics.net/lists/linux-omap/msg120425.html
|
||||||
* [2] https://lkml.org/lkml/2015/9/25/494
|
* [2] https://lore.kernel.org/r/1443209283-20781-2-git-send-email-grygorii.strashko@ti.com
|
||||||
* [3] https://lkml.org/lkml/2015/9/25/495
|
* [3] https://lore.kernel.org/r/1443209283-20781-3-git-send-email-grygorii.strashko@ti.com
|
||||||
|
|
||||||
|
|
||||||
Requesting self-owned GPIO pins
|
Requesting self-owned GPIO pins
|
||||||
|
|
|
@ -18,6 +18,7 @@ MEN Chameleon Bus
|
||||||
4.1 The driver structure
|
4.1 The driver structure
|
||||||
4.2 Probing and attaching
|
4.2 Probing and attaching
|
||||||
4.3 Initializing the driver
|
4.3 Initializing the driver
|
||||||
|
4.4 Using DMA
|
||||||
|
|
||||||
|
|
||||||
Introduction
|
Introduction
|
||||||
|
@ -173,3 +174,14 @@ module at the MCB core::
|
||||||
The module_mcb_driver() macro can be used to reduce the above code::
|
The module_mcb_driver() macro can be used to reduce the above code::
|
||||||
|
|
||||||
module_mcb_driver(foo_driver);
|
module_mcb_driver(foo_driver);
|
||||||
|
|
||||||
|
Using DMA
|
||||||
|
---------
|
||||||
|
|
||||||
|
To make use of the kernel's DMA-API's function, you will need to use the
|
||||||
|
carrier device's 'struct device'. Fortunately 'struct mcb_device' embeds a
|
||||||
|
pointer (->dma_dev) to the carrier's device for DMA purposes::
|
||||||
|
|
||||||
|
ret = dma_set_mask_and_coherent(&mdev->dma_dev, DMA_BIT_MASK(dma_bits));
|
||||||
|
if (rc)
|
||||||
|
/* Handle errors */
|
||||||
|
|
|
@ -54,7 +54,7 @@ temperature) and throttle appropriate devices.
|
||||||
trips:
|
trips:
|
||||||
the total number of trip points this thermal zone supports.
|
the total number of trip points this thermal zone supports.
|
||||||
mask:
|
mask:
|
||||||
Bit string: If 'n'th bit is set, then trip point 'n' is writeable.
|
Bit string: If 'n'th bit is set, then trip point 'n' is writable.
|
||||||
devdata:
|
devdata:
|
||||||
device private data
|
device private data
|
||||||
ops:
|
ops:
|
||||||
|
@ -406,7 +406,7 @@ Thermal cooling device sys I/F, created once it's registered::
|
||||||
|---stats/reset: Writing any value resets the statistics
|
|---stats/reset: Writing any value resets the statistics
|
||||||
|---stats/time_in_state_ms: Time (msec) spent in various cooling states
|
|---stats/time_in_state_ms: Time (msec) spent in various cooling states
|
||||||
|---stats/total_trans: Total number of times cooling state is changed
|
|---stats/total_trans: Total number of times cooling state is changed
|
||||||
|---stats/trans_table: Cooing state transition table
|
|---stats/trans_table: Cooling state transition table
|
||||||
|
|
||||||
|
|
||||||
Then next two dynamic attributes are created/removed in pairs. They represent
|
Then next two dynamic attributes are created/removed in pairs. They represent
|
||||||
|
@ -766,5 +766,5 @@ emergency poweroff kicks in after the delay has elapsed and shuts down
|
||||||
the system.
|
the system.
|
||||||
|
|
||||||
If set to 0 emergency poweroff will not be supported. So a carefully
|
If set to 0 emergency poweroff will not be supported. So a carefully
|
||||||
profiled non-zero positive value is a must for emergerncy poweroff to be
|
profiled non-zero positive value is a must for emergency poweroff to be
|
||||||
triggered.
|
triggered.
|
||||||
|
|
|
@ -109,7 +109,7 @@ Mountpoints
|
||||||
AFS has a concept of mountpoints. In AFS terms, these are specially formatted
|
AFS has a concept of mountpoints. In AFS terms, these are specially formatted
|
||||||
symbolic links (of the same form as the "device name" passed to mount). kAFS
|
symbolic links (of the same form as the "device name" passed to mount). kAFS
|
||||||
presents these to the user as directories that have a follow-link capability
|
presents these to the user as directories that have a follow-link capability
|
||||||
(ie: symbolic link semantics). If anyone attempts to access them, they will
|
(i.e.: symbolic link semantics). If anyone attempts to access them, they will
|
||||||
automatically cause the target volume to be mounted (if possible) on that site.
|
automatically cause the target volume to be mounted (if possible) on that site.
|
||||||
|
|
||||||
Automatically mounted filesystems will be automatically unmounted approximately
|
Automatically mounted filesystems will be automatically unmounted approximately
|
||||||
|
@ -144,7 +144,7 @@ looks up a cell of the same name, for example::
|
||||||
Proc Filesystem
|
Proc Filesystem
|
||||||
===============
|
===============
|
||||||
|
|
||||||
The AFS modules creates a "/proc/fs/afs/" directory and populates it:
|
The AFS module creates a "/proc/fs/afs/" directory and populates it:
|
||||||
|
|
||||||
(*) A "cells" file that lists cells currently known to the afs module and
|
(*) A "cells" file that lists cells currently known to the afs module and
|
||||||
their usage counts::
|
their usage counts::
|
||||||
|
@ -201,7 +201,7 @@ And then run as::
|
||||||
./klog
|
./klog
|
||||||
|
|
||||||
Assuming it's successful, this adds a key of type RxRPC, named for the service
|
Assuming it's successful, this adds a key of type RxRPC, named for the service
|
||||||
and cell, eg: "afs@<cellname>". This can be viewed with the keyctl program or
|
and cell, e.g.: "afs@<cellname>". This can be viewed with the keyctl program or
|
||||||
by cat'ing /proc/keys::
|
by cat'ing /proc/keys::
|
||||||
|
|
||||||
[root@andromeda ~]# keyctl show
|
[root@andromeda ~]# keyctl show
|
||||||
|
@ -211,7 +211,7 @@ by cat'ing /proc/keys::
|
||||||
111416553 --als--v 0 0 \_ rxrpc: afs@CAMBRIDGE.REDHAT.COM
|
111416553 --als--v 0 0 \_ rxrpc: afs@CAMBRIDGE.REDHAT.COM
|
||||||
|
|
||||||
Currently the username, realm, password and proposed ticket lifetime are
|
Currently the username, realm, password and proposed ticket lifetime are
|
||||||
compiled in to the program.
|
compiled into the program.
|
||||||
|
|
||||||
It is not required to acquire a key before using AFS facilities, but if one is
|
It is not required to acquire a key before using AFS facilities, but if one is
|
||||||
not acquired then all operations will be governed by the anonymous user parts
|
not acquired then all operations will be governed by the anonymous user parts
|
||||||
|
|
|
@ -83,20 +83,9 @@ Summary
|
||||||
directories. This has runtime constraints and limitations that are
|
directories. This has runtime constraints and limitations that are
|
||||||
described in 6) below.
|
described in 6) below.
|
||||||
|
|
||||||
6. When changing the S_DAX policy via toggling the persistent FS_XFLAG_DAX flag,
|
6. When changing the S_DAX policy via toggling the persistent FS_XFLAG_DAX
|
||||||
the change in behaviour for existing regular files may not occur
|
flag, the change to existing regular files won't take effect until the
|
||||||
immediately. If the change must take effect immediately, the administrator
|
files are closed by all processes.
|
||||||
needs to:
|
|
||||||
|
|
||||||
a) stop the application so there are no active references to the data set
|
|
||||||
the policy change will affect
|
|
||||||
|
|
||||||
b) evict the data set from kernel caches so it will be re-instantiated when
|
|
||||||
the application is restarted. This can be achieved by:
|
|
||||||
|
|
||||||
i. drop-caches
|
|
||||||
ii. a filesystem unmount and mount cycle
|
|
||||||
iii. a system reboot
|
|
||||||
|
|
||||||
|
|
||||||
Details
|
Details
|
||||||
|
|
|
@ -83,6 +83,7 @@ Documentation for filesystem implementations.
|
||||||
erofs
|
erofs
|
||||||
ext2
|
ext2
|
||||||
ext3
|
ext3
|
||||||
|
ext4/index
|
||||||
f2fs
|
f2fs
|
||||||
gfs2
|
gfs2
|
||||||
gfs2-uevents
|
gfs2-uevents
|
||||||
|
|
|
@ -687,7 +687,10 @@ files are there, and which are missing.
|
||||||
kcore Kernel core image (can be ELF or A.OUT(deprecated in 2.4))
|
kcore Kernel core image (can be ELF or A.OUT(deprecated in 2.4))
|
||||||
kmsg Kernel messages
|
kmsg Kernel messages
|
||||||
ksyms Kernel symbol table
|
ksyms Kernel symbol table
|
||||||
loadavg Load average of last 1, 5 & 15 minutes
|
loadavg Load average of last 1, 5 & 15 minutes;
|
||||||
|
number of processes currently runnable (running or on ready queue);
|
||||||
|
total number of processes in system;
|
||||||
|
last pid created.
|
||||||
locks Kernel locks
|
locks Kernel locks
|
||||||
meminfo Memory info
|
meminfo Memory info
|
||||||
misc Miscellaneous
|
misc Miscellaneous
|
||||||
|
|
|
@ -112,7 +112,7 @@ members are defined:
|
||||||
|
|
||||||
.. code-block:: c
|
.. code-block:: c
|
||||||
|
|
||||||
struct file_system_operations {
|
struct file_system_type {
|
||||||
const char *name;
|
const char *name;
|
||||||
int fs_flags;
|
int fs_flags;
|
||||||
struct dentry *(*mount) (struct file_system_type *, int,
|
struct dentry *(*mount) (struct file_system_type *, int,
|
||||||
|
|
|
@ -688,7 +688,7 @@ for fbdev.
|
||||||
https://patchwork.freedesktop.org/patch/306579/
|
https://patchwork.freedesktop.org/patch/306579/
|
||||||
|
|
||||||
- [RFC PATCH v2 00/13] Kernel based bootsplash
|
- [RFC PATCH v2 00/13] Kernel based bootsplash
|
||||||
https://lkml.org/lkml/2017/12/13/764
|
https://lore.kernel.org/r/20171213194755.3409-1-mstaudt@suse.de
|
||||||
|
|
||||||
Contact: Sam Ravnborg
|
Contact: Sam Ravnborg
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,7 @@ touchscreen/ADC module.
|
||||||
====================
|
====================
|
||||||
|
|
||||||
Numbering scheme for channels 0..4 is defined in EP9301 and EP9302 datasheets.
|
Numbering scheme for channels 0..4 is defined in EP9301 and EP9302 datasheets.
|
||||||
EP9307, EP9312 and EP9312 have 3 channels more (total 8), but the numbering is
|
EP9307, EP9312 and EP9315 have 3 channels more (total 8), but the numbering is
|
||||||
not defined. So the last three are numbered randomly, let's say.
|
not defined. So the last three are numbered randomly, let's say.
|
||||||
|
|
||||||
Assuming ep93xx_adc is IIO device0, you'd find the following entries under
|
Assuming ep93xx_adc is IIO device0, you'd find the following entries under
|
||||||
|
|
|
@ -171,17 +171,6 @@ implementation.
|
||||||
x86/index
|
x86/index
|
||||||
xtensa/index
|
xtensa/index
|
||||||
|
|
||||||
Filesystem Documentation
|
|
||||||
------------------------
|
|
||||||
|
|
||||||
The documentation in this section are provided by specific filesystem
|
|
||||||
subprojects.
|
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
:maxdepth: 2
|
|
||||||
|
|
||||||
filesystems/ext4/index
|
|
||||||
|
|
||||||
Other documentation
|
Other documentation
|
||||||
-------------------
|
-------------------
|
||||||
|
|
||||||
|
|
|
@ -236,6 +236,21 @@ A few EV_ABS codes have special meanings:
|
||||||
- Used to describe multitouch input events. Please see
|
- Used to describe multitouch input events. Please see
|
||||||
multi-touch-protocol.txt for details.
|
multi-touch-protocol.txt for details.
|
||||||
|
|
||||||
|
* ABS_PRESSURE/ABS_MT_PRESSURE:
|
||||||
|
|
||||||
|
- For touch devices, many devices converted contact size into pressure.
|
||||||
|
A finger flattens with pressure, causing a larger contact area and thus
|
||||||
|
pressure and contact size are directly related. This is not the case
|
||||||
|
for other devices, for example digitizers and touchpads with a true
|
||||||
|
pressure sensor ("pressure pads").
|
||||||
|
|
||||||
|
A device should set the resolution of the axis to indicate whether the
|
||||||
|
pressure is in measurable units. If the resolution is zero, the
|
||||||
|
pressure data is in arbitrary units. If the resolution is nonzero, the
|
||||||
|
pressure data is in units/gram. For example, a value of 10 with a
|
||||||
|
resolution of 1 represents 10 gram, a value of 10 with a resolution on
|
||||||
|
1000 represents 10 microgram.
|
||||||
|
|
||||||
EV_SW
|
EV_SW
|
||||||
-----
|
-----
|
||||||
|
|
||||||
|
|
|
@ -260,6 +260,10 @@ ABS_MT_PRESSURE
|
||||||
of TOUCH and WIDTH for pressure-based devices or any device with a spatial
|
of TOUCH and WIDTH for pressure-based devices or any device with a spatial
|
||||||
signal intensity distribution.
|
signal intensity distribution.
|
||||||
|
|
||||||
|
If the resolution is zero, the pressure data is in arbitrary units.
|
||||||
|
If the resolution is nonzero, the pressure data is in units/gram. See
|
||||||
|
:ref:`input-event-codes` for details.
|
||||||
|
|
||||||
ABS_MT_DISTANCE
|
ABS_MT_DISTANCE
|
||||||
The distance, in surface units, between the contact and the surface. Zero
|
The distance, in surface units, between the contact and the surface. Zero
|
||||||
distance means the contact is touching the surface. A positive number means
|
distance means the contact is touching the surface. A positive number means
|
||||||
|
|
|
@ -346,8 +346,8 @@ routine.
|
||||||
Before inventing your own cache of often-used objects consider using a
|
Before inventing your own cache of often-used objects consider using a
|
||||||
slab cache in ``include/linux/slab.h``
|
slab cache in ``include/linux/slab.h``
|
||||||
|
|
||||||
:c:func:`current()`
|
:c:macro:`current`
|
||||||
-------------------
|
------------------
|
||||||
|
|
||||||
Defined in ``include/asm/current.h``
|
Defined in ``include/asm/current.h``
|
||||||
|
|
||||||
|
|
|
@ -958,7 +958,7 @@ grabs a read lock, searches a list, fails to find what it wants, drops
|
||||||
the read lock, grabs a write lock and inserts the object has a race
|
the read lock, grabs a write lock and inserts the object has a race
|
||||||
condition.
|
condition.
|
||||||
|
|
||||||
If you don't see why, please stay the fuck away from my code.
|
If you don't see why, please stay away from my code.
|
||||||
|
|
||||||
Racing Timers: A Kernel Pastime
|
Racing Timers: A Kernel Pastime
|
||||||
-------------------------------
|
-------------------------------
|
||||||
|
|
|
@ -134,7 +134,7 @@ Generally speaking, there is a couple of reasons to use the freezing of tasks:
|
||||||
safeguards against race conditions that might occur in such a case.
|
safeguards against race conditions that might occur in such a case.
|
||||||
|
|
||||||
Although Linus Torvalds doesn't like the freezing of tasks, he said this in one
|
Although Linus Torvalds doesn't like the freezing of tasks, he said this in one
|
||||||
of the discussions on LKML (http://lkml.org/lkml/2007/4/27/608):
|
of the discussions on LKML (https://lore.kernel.org/r/alpine.LFD.0.98.0704271801020.9964@woody.linux-foundation.org):
|
||||||
|
|
||||||
"RJW:> Why we freeze tasks at all or why we freeze kernel threads?
|
"RJW:> Why we freeze tasks at all or why we freeze kernel threads?
|
||||||
|
|
||||||
|
|
|
@ -501,7 +501,7 @@ table, but not from elsewhere in the kernel. If the syscall functionality is
|
||||||
useful to be used within the kernel, needs to be shared between an old and a
|
useful to be used within the kernel, needs to be shared between an old and a
|
||||||
new syscall, or needs to be shared between a syscall and its compatibility
|
new syscall, or needs to be shared between a syscall and its compatibility
|
||||||
variant, it should be implemented by means of a "helper" function (such as
|
variant, it should be implemented by means of a "helper" function (such as
|
||||||
``kern_xyzzy()``). This kernel function may then be called within the
|
``ksys_xyzzy()``). This kernel function may then be called within the
|
||||||
syscall stub (``sys_xyzzy()``), the compatibility syscall stub
|
syscall stub (``sys_xyzzy()``), the compatibility syscall stub
|
||||||
(``compat_sys_xyzzy()``), and/or other kernel code.
|
(``compat_sys_xyzzy()``), and/or other kernel code.
|
||||||
|
|
||||||
|
@ -548,18 +548,18 @@ References and Sources
|
||||||
https://lwn.net/Articles/486306/
|
https://lwn.net/Articles/486306/
|
||||||
- Recommendation from Andrew Morton that all related information for a new
|
- Recommendation from Andrew Morton that all related information for a new
|
||||||
system call should come in the same email thread:
|
system call should come in the same email thread:
|
||||||
https://lkml.org/lkml/2014/7/24/641
|
https://lore.kernel.org/r/20140724144747.3041b208832bbdf9fbce5d96@linux-foundation.org
|
||||||
- Recommendation from Michael Kerrisk that a new system call should come with
|
- Recommendation from Michael Kerrisk that a new system call should come with
|
||||||
a man page: https://lkml.org/lkml/2014/6/13/309
|
a man page: https://lore.kernel.org/r/CAKgNAkgMA39AfoSoA5Pe1r9N+ZzfYQNvNPvcRN7tOvRb8+v06Q@mail.gmail.com
|
||||||
- Suggestion from Thomas Gleixner that x86 wire-up should be in a separate
|
- Suggestion from Thomas Gleixner that x86 wire-up should be in a separate
|
||||||
commit: https://lkml.org/lkml/2014/11/19/254
|
commit: https://lore.kernel.org/r/alpine.DEB.2.11.1411191249560.3909@nanos
|
||||||
- Suggestion from Greg Kroah-Hartman that it's good for new system calls to
|
- Suggestion from Greg Kroah-Hartman that it's good for new system calls to
|
||||||
come with a man-page & selftest: https://lkml.org/lkml/2014/3/19/710
|
come with a man-page & selftest: https://lore.kernel.org/r/20140320025530.GA25469@kroah.com
|
||||||
- Discussion from Michael Kerrisk of new system call vs. :manpage:`prctl(2)` extension:
|
- Discussion from Michael Kerrisk of new system call vs. :manpage:`prctl(2)` extension:
|
||||||
https://lkml.org/lkml/2014/6/3/411
|
https://lore.kernel.org/r/CAHO5Pa3F2MjfTtfNxa8LbnkeeU8=YJ+9tDqxZpw7Gz59E-4AUg@mail.gmail.com
|
||||||
- Suggestion from Ingo Molnar that system calls that involve multiple
|
- Suggestion from Ingo Molnar that system calls that involve multiple
|
||||||
arguments should encapsulate those arguments in a struct, which includes a
|
arguments should encapsulate those arguments in a struct, which includes a
|
||||||
size field for future extensibility: https://lkml.org/lkml/2015/7/30/117
|
size field for future extensibility: https://lore.kernel.org/r/20150730083831.GA22182@gmail.com
|
||||||
- Numbering oddities arising from (re-)use of O_* numbering space flags:
|
- Numbering oddities arising from (re-)use of O_* numbering space flags:
|
||||||
|
|
||||||
- commit 75069f2b5bfb ("vfs: renumber FMODE_NONOTIFY and add to uniqueness
|
- commit 75069f2b5bfb ("vfs: renumber FMODE_NONOTIFY and add to uniqueness
|
||||||
|
@ -569,9 +569,9 @@ References and Sources
|
||||||
- commit bb458c644a59 ("Safer ABI for O_TMPFILE")
|
- commit bb458c644a59 ("Safer ABI for O_TMPFILE")
|
||||||
|
|
||||||
- Discussion from Matthew Wilcox about restrictions on 64-bit arguments:
|
- Discussion from Matthew Wilcox about restrictions on 64-bit arguments:
|
||||||
https://lkml.org/lkml/2008/12/12/187
|
https://lore.kernel.org/r/20081212152929.GM26095@parisc-linux.org
|
||||||
- Recommendation from Greg Kroah-Hartman that unknown flags should be
|
- Recommendation from Greg Kroah-Hartman that unknown flags should be
|
||||||
policed: https://lkml.org/lkml/2014/7/17/577
|
policed: https://lore.kernel.org/r/20140717193330.GB4703@kroah.com
|
||||||
- Recommendation from Linus Torvalds that x32 system calls should prefer
|
- Recommendation from Linus Torvalds that x32 system calls should prefer
|
||||||
compatibility with 64-bit versions rather than 32-bit versions:
|
compatibility with 64-bit versions rather than 32-bit versions:
|
||||||
https://lkml.org/lkml/2011/8/31/244
|
https://lore.kernel.org/r/CA+55aFxfmwfB7jbbrXxa=K7VBYPfAvmu3XOkGrLbB1UFjX1+Ew@mail.gmail.com
|
||||||
|
|
|
@ -69,9 +69,26 @@ something to hide:
|
||||||
if (condition) do_this;
|
if (condition) do_this;
|
||||||
do_something_everytime;
|
do_something_everytime;
|
||||||
|
|
||||||
|
Don't use commas to avoid using braces:
|
||||||
|
|
||||||
|
.. code-block:: c
|
||||||
|
|
||||||
|
if (condition)
|
||||||
|
do_this(), do_that();
|
||||||
|
|
||||||
|
Always uses braces for multiple statements:
|
||||||
|
|
||||||
|
.. code-block:: c
|
||||||
|
|
||||||
|
if (condition) {
|
||||||
|
do_this();
|
||||||
|
do_that();
|
||||||
|
}
|
||||||
|
|
||||||
Don't put multiple assignments on a single line either. Kernel coding style
|
Don't put multiple assignments on a single line either. Kernel coding style
|
||||||
is super simple. Avoid tricky expressions.
|
is super simple. Avoid tricky expressions.
|
||||||
|
|
||||||
|
|
||||||
Outside of comments, documentation and except in Kconfig, spaces are never
|
Outside of comments, documentation and except in Kconfig, spaces are never
|
||||||
used for indentation, and the above example is deliberately broken.
|
used for indentation, and the above example is deliberately broken.
|
||||||
|
|
||||||
|
@ -306,8 +323,7 @@ that counts the number of active users, you should call that
|
||||||
|
|
||||||
Encoding the type of a function into the name (so-called Hungarian
|
Encoding the type of a function into the name (so-called Hungarian
|
||||||
notation) is asinine - the compiler knows the types anyway and can check
|
notation) is asinine - the compiler knows the types anyway and can check
|
||||||
those, and it only confuses the programmer. No wonder Microsoft makes buggy
|
those, and it only confuses the programmer.
|
||||||
programs.
|
|
||||||
|
|
||||||
LOCAL variable names should be short, and to the point. If you have
|
LOCAL variable names should be short, and to the point. If you have
|
||||||
some random integer loop counter, it should probably be called ``i``.
|
some random integer loop counter, it should probably be called ``i``.
|
||||||
|
|
|
@ -342,16 +342,10 @@ Adventurous testers are very welcome to runtime-test the linux-next.
|
||||||
Bug Reporting
|
Bug Reporting
|
||||||
-------------
|
-------------
|
||||||
|
|
||||||
https://bugzilla.kernel.org is where the Linux kernel developers track kernel
|
|
||||||
bugs. Users are encouraged to report all bugs that they find in this
|
|
||||||
tool. For details on how to use the kernel bugzilla, please see:
|
|
||||||
|
|
||||||
https://bugzilla.kernel.org/page.cgi?id=faq.html
|
|
||||||
|
|
||||||
The file 'Documentation/admin-guide/reporting-issues.rst' in the main kernel
|
The file 'Documentation/admin-guide/reporting-issues.rst' in the main kernel
|
||||||
source directory has a good template for how to report a possible kernel bug,
|
source directory describes how to report a possible kernel bug, and details
|
||||||
and details what kind of information is needed by the kernel developers to help
|
what kind of information is needed by the kernel developers to help track
|
||||||
track down the problem.
|
down the problem.
|
||||||
|
|
||||||
|
|
||||||
Managing bug reports
|
Managing bug reports
|
||||||
|
@ -364,7 +358,13 @@ improve your skills, and other developers will be aware of your presence.
|
||||||
Fixing bugs is one of the best ways to get merits among other developers,
|
Fixing bugs is one of the best ways to get merits among other developers,
|
||||||
because not many people like wasting time fixing other people's bugs.
|
because not many people like wasting time fixing other people's bugs.
|
||||||
|
|
||||||
To work in the already reported bug reports, go to https://bugzilla.kernel.org.
|
To work on already reported bug reports, find a subsystem you are interested in.
|
||||||
|
Check the MAINTAINERS file where bugs for that subsystem get reported to; often
|
||||||
|
it will be a mailing list, rarely a bugtracker. Search the archives of said
|
||||||
|
place for recent reports and help where you see fit. You may also want to check
|
||||||
|
https://bugzilla.kernel.org for bug reports; only a handful of kernel subsystems
|
||||||
|
use it actively for reporting or tracking, nevertheless bugs for the whole
|
||||||
|
kernel get filed there.
|
||||||
|
|
||||||
|
|
||||||
Mailing lists
|
Mailing lists
|
||||||
|
|
|
@ -89,30 +89,28 @@ and elsewhere regarding submitting Linux kernel patches.
|
||||||
Patches that change userspace interfaces should be CCed to
|
Patches that change userspace interfaces should be CCed to
|
||||||
linux-api@vger.kernel.org.
|
linux-api@vger.kernel.org.
|
||||||
|
|
||||||
19) Check that it all passes ``make headers_check``.
|
19) Has been checked with injection of at least slab and page-allocation
|
||||||
|
|
||||||
20) Has been checked with injection of at least slab and page-allocation
|
|
||||||
failures. See ``Documentation/fault-injection/``.
|
failures. See ``Documentation/fault-injection/``.
|
||||||
|
|
||||||
If the new code is substantial, addition of subsystem-specific fault
|
If the new code is substantial, addition of subsystem-specific fault
|
||||||
injection might be appropriate.
|
injection might be appropriate.
|
||||||
|
|
||||||
21) Newly-added code has been compiled with ``gcc -W`` (use
|
20) Newly-added code has been compiled with ``gcc -W`` (use
|
||||||
``make EXTRA_CFLAGS=-W``). This will generate lots of noise, but is good
|
``make EXTRA_CFLAGS=-W``). This will generate lots of noise, but is good
|
||||||
for finding bugs like "warning: comparison between signed and unsigned".
|
for finding bugs like "warning: comparison between signed and unsigned".
|
||||||
|
|
||||||
22) Tested after it has been merged into the -mm patchset to make sure
|
21) Tested after it has been merged into the -mm patchset to make sure
|
||||||
that it still works with all of the other queued patches and various
|
that it still works with all of the other queued patches and various
|
||||||
changes in the VM, VFS, and other subsystems.
|
changes in the VM, VFS, and other subsystems.
|
||||||
|
|
||||||
23) All memory barriers {e.g., ``barrier()``, ``rmb()``, ``wmb()``} need a
|
22) All memory barriers {e.g., ``barrier()``, ``rmb()``, ``wmb()``} need a
|
||||||
comment in the source code that explains the logic of what they are doing
|
comment in the source code that explains the logic of what they are doing
|
||||||
and why.
|
and why.
|
||||||
|
|
||||||
24) If any ioctl's are added by the patch, then also update
|
23) If any ioctl's are added by the patch, then also update
|
||||||
``Documentation/userspace-api/ioctl/ioctl-number.rst``.
|
``Documentation/userspace-api/ioctl/ioctl-number.rst``.
|
||||||
|
|
||||||
25) If your modified source code depends on or uses any of the kernel
|
24) If your modified source code depends on or uses any of the kernel
|
||||||
APIs or features that are related to the following ``Kconfig`` symbols,
|
APIs or features that are related to the following ``Kconfig`` symbols,
|
||||||
then test multiple builds with the related ``Kconfig`` symbols disabled
|
then test multiple builds with the related ``Kconfig`` symbols disabled
|
||||||
and/or ``=m`` (if that option is available) [not all of these at the
|
and/or ``=m`` (if that option is available) [not all of these at the
|
||||||
|
|
|
@ -556,6 +556,11 @@ which stable kernel versions should receive your fix. This is the preferred
|
||||||
method for indicating a bug fixed by the patch. See :ref:`describe_changes`
|
method for indicating a bug fixed by the patch. See :ref:`describe_changes`
|
||||||
for more details.
|
for more details.
|
||||||
|
|
||||||
|
Note: Attaching a Fixes: tag does not subvert the stable kernel rules
|
||||||
|
process nor the requirement to Cc: stable@vger.kernel.org on all stable
|
||||||
|
patch candidates. For more information, please read
|
||||||
|
:ref:`Documentation/process/stable-kernel-rules.rst <stable_kernel_rules>`
|
||||||
|
|
||||||
.. _the_canonical_patch_format:
|
.. _the_canonical_patch_format:
|
||||||
|
|
||||||
The canonical patch format
|
The canonical patch format
|
||||||
|
@ -679,6 +684,26 @@ generates appropriate diffstats by default.)
|
||||||
See more details on the proper patch format in the following
|
See more details on the proper patch format in the following
|
||||||
references.
|
references.
|
||||||
|
|
||||||
|
Backtraces in commit mesages
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
Backtraces help document the call chain leading to a problem. However,
|
||||||
|
not all backtraces are helpful. For example, early boot call chains are
|
||||||
|
unique and obvious. Copying the full dmesg output verbatim, however,
|
||||||
|
adds distracting information like timestamps, module lists, register and
|
||||||
|
stack dumps.
|
||||||
|
|
||||||
|
Therefore, the most useful backtraces should distill the relevant
|
||||||
|
information from the dump, which makes it easier to focus on the real
|
||||||
|
issue. Here is an example of a well-trimmed backtrace::
|
||||||
|
|
||||||
|
unchecked MSR access error: WRMSR to 0xd51 (tried to write 0x0000000000000064)
|
||||||
|
at rIP: 0xffffffffae059994 (native_write_msr+0x4/0x20)
|
||||||
|
Call Trace:
|
||||||
|
mba_wrmsr
|
||||||
|
update_domains
|
||||||
|
rdtgroup_mkdir
|
||||||
|
|
||||||
.. _explicit_in_reply_to:
|
.. _explicit_in_reply_to:
|
||||||
|
|
||||||
Explicit In-Reply-To headers
|
Explicit In-Reply-To headers
|
||||||
|
@ -769,13 +794,13 @@ Greg Kroah-Hartman, "How to piss off a kernel subsystem maintainer".
|
||||||
<http://www.kroah.com/log/linux/maintainer-06.html>
|
<http://www.kroah.com/log/linux/maintainer-06.html>
|
||||||
|
|
||||||
NO!!!! No more huge patch bombs to linux-kernel@vger.kernel.org people!
|
NO!!!! No more huge patch bombs to linux-kernel@vger.kernel.org people!
|
||||||
<https://lkml.org/lkml/2005/7/11/336>
|
<https://lore.kernel.org/r/20050711.125305.08322243.davem@davemloft.net>
|
||||||
|
|
||||||
Kernel Documentation/process/coding-style.rst:
|
Kernel Documentation/process/coding-style.rst:
|
||||||
:ref:`Documentation/process/coding-style.rst <codingstyle>`
|
:ref:`Documentation/process/coding-style.rst <codingstyle>`
|
||||||
|
|
||||||
Linus Torvalds's mail on the canonical patch format:
|
Linus Torvalds's mail on the canonical patch format:
|
||||||
<http://lkml.org/lkml/2005/4/7/183>
|
<https://lore.kernel.org/r/Pine.LNX.4.58.0504071023190.28951@ppc970.osdl.org>
|
||||||
|
|
||||||
Andi Kleen, "On submitting kernel patches"
|
Andi Kleen, "On submitting kernel patches"
|
||||||
Some strategies to get difficult or controversial changes in.
|
Some strategies to get difficult or controversial changes in.
|
||||||
|
|
|
@ -2,8 +2,9 @@
|
||||||
CFS Bandwidth Control
|
CFS Bandwidth Control
|
||||||
=====================
|
=====================
|
||||||
|
|
||||||
[ This document only discusses CPU bandwidth control for SCHED_NORMAL.
|
.. note::
|
||||||
The SCHED_RT case is covered in Documentation/scheduler/sched-rt-group.rst ]
|
This document only discusses CPU bandwidth control for SCHED_NORMAL.
|
||||||
|
The SCHED_RT case is covered in Documentation/scheduler/sched-rt-group.rst
|
||||||
|
|
||||||
CFS bandwidth control is a CONFIG_FAIR_GROUP_SCHED extension which allows the
|
CFS bandwidth control is a CONFIG_FAIR_GROUP_SCHED extension which allows the
|
||||||
specification of the maximum CPU bandwidth available to a group or hierarchy.
|
specification of the maximum CPU bandwidth available to a group or hierarchy.
|
||||||
|
@ -25,9 +26,15 @@ Management
|
||||||
----------
|
----------
|
||||||
Quota and period are managed within the cpu subsystem via cgroupfs.
|
Quota and period are managed within the cpu subsystem via cgroupfs.
|
||||||
|
|
||||||
cpu.cfs_quota_us: the total available run-time within a period (in microseconds)
|
.. note::
|
||||||
cpu.cfs_period_us: the length of a period (in microseconds)
|
The cgroupfs files described in this section are only applicable
|
||||||
cpu.stat: exports throttling statistics [explained further below]
|
to cgroup v1. For cgroup v2, see
|
||||||
|
:ref:`Documentation/admin-guide/cgroupv2.rst <cgroup-v2-cpu>`.
|
||||||
|
|
||||||
|
- cpu.cfs_quota_us: the total available run-time within a period (in
|
||||||
|
microseconds)
|
||||||
|
- cpu.cfs_period_us: the length of a period (in microseconds)
|
||||||
|
- cpu.stat: exports throttling statistics [explained further below]
|
||||||
|
|
||||||
The default values are::
|
The default values are::
|
||||||
|
|
||||||
|
|
|
@ -707,7 +707,7 @@ Deadline Task Scheduling
|
||||||
and how to prevent non-root users "cheat" the system?
|
and how to prevent non-root users "cheat" the system?
|
||||||
|
|
||||||
As already discussed, we are planning also to merge this work with the EDF
|
As already discussed, we are planning also to merge this work with the EDF
|
||||||
throttling patches [https://lkml.org/lkml/2010/2/23/239] but we still are in
|
throttling patches [https://lore.kernel.org/r/cover.1266931410.git.fabio@helm.retis] but we still are in
|
||||||
the preliminary phases of the merge and we really seek feedback that would
|
the preliminary phases of the merge and we really seek feedback that would
|
||||||
help us decide on the direction it should take.
|
help us decide on the direction it should take.
|
||||||
|
|
||||||
|
|
|
@ -34,9 +34,9 @@ In CFS the virtual runtime is expressed and tracked via the per-task
|
||||||
p->se.vruntime (nanosec-unit) value. This way, it's possible to accurately
|
p->se.vruntime (nanosec-unit) value. This way, it's possible to accurately
|
||||||
timestamp and measure the "expected CPU time" a task should have gotten.
|
timestamp and measure the "expected CPU time" a task should have gotten.
|
||||||
|
|
||||||
[ small detail: on "ideal" hardware, at any time all tasks would have the same
|
Small detail: on "ideal" hardware, at any time all tasks would have the same
|
||||||
p->se.vruntime value --- i.e., tasks would execute simultaneously and no task
|
p->se.vruntime value --- i.e., tasks would execute simultaneously and no task
|
||||||
would ever get "out of balance" from the "ideal" share of CPU time. ]
|
would ever get "out of balance" from the "ideal" share of CPU time.
|
||||||
|
|
||||||
CFS's task picking logic is based on this p->se.vruntime value and it is thus
|
CFS's task picking logic is based on this p->se.vruntime value and it is thus
|
||||||
very simple: it always tries to run the task with the smallest p->se.vruntime
|
very simple: it always tries to run the task with the smallest p->se.vruntime
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
Linux Security Module Development
|
Linux Security Module Development
|
||||||
=================================
|
=================================
|
||||||
|
|
||||||
Based on https://lkml.org/lkml/2007/10/26/215,
|
Based on https://lore.kernel.org/r/20071026073721.618b4778@laptopd505.fenrus.org,
|
||||||
a new LSM is accepted into the kernel when its intent (a description of
|
a new LSM is accepted into the kernel when its intent (a description of
|
||||||
what it tries to protect against and in what cases one would expect to
|
what it tries to protect against and in what cases one would expect to
|
||||||
use it) has been appropriately documented in ``Documentation/admin-guide/LSM/``.
|
use it) has been appropriately documented in ``Documentation/admin-guide/LSM/``.
|
||||||
|
|
|
@ -51,7 +51,7 @@ RE_typedef = re.compile(r'\b(typedef)\s+([a-zA-Z_]\w+)', flags=ascii_p3)
|
||||||
# Detects a reference to a documentation page of the form Documentation/... with
|
# Detects a reference to a documentation page of the form Documentation/... with
|
||||||
# an optional extension
|
# an optional extension
|
||||||
#
|
#
|
||||||
RE_doc = re.compile(r'\bDocumentation(/[\w\-_/]+)(\.\w+)*')
|
RE_doc = re.compile(r'(\bDocumentation/)?((\.\./)*[\w\-/]+)\.(rst|txt)')
|
||||||
|
|
||||||
RE_namespace = re.compile(r'^\s*..\s*c:namespace::\s*(\S+)\s*$')
|
RE_namespace = re.compile(r'^\s*..\s*c:namespace::\s*(\S+)\s*$')
|
||||||
|
|
||||||
|
@ -234,7 +234,10 @@ def markup_doc_ref(docname, app, match):
|
||||||
#
|
#
|
||||||
# Go through the dance of getting an xref out of the std domain
|
# Go through the dance of getting an xref out of the std domain
|
||||||
#
|
#
|
||||||
target = match.group(1)
|
absolute = match.group(1)
|
||||||
|
target = match.group(2)
|
||||||
|
if absolute:
|
||||||
|
target = "/" + target
|
||||||
xref = None
|
xref = None
|
||||||
pxref = addnodes.pending_xref('', refdomain = 'std', reftype = 'doc',
|
pxref = addnodes.pending_xref('', refdomain = 'std', reftype = 'doc',
|
||||||
reftarget = target, modname = None,
|
reftarget = target, modname = None,
|
||||||
|
|
|
@ -236,13 +236,7 @@ class CObject(Base_CObject):
|
||||||
|
|
||||||
indextext = self.get_index_text(name)
|
indextext = self.get_index_text(name)
|
||||||
if indextext:
|
if indextext:
|
||||||
if major == 1 and minor < 4:
|
self.indexnode['entries'].append(
|
||||||
# indexnode's tuple changed in 1.4
|
|
||||||
# https://github.com/sphinx-doc/sphinx/commit/e6a5a3a92e938fcd75866b4227db9e0524d58f7c
|
|
||||||
self.indexnode['entries'].append(
|
|
||||||
('single', indextext, targetname, ''))
|
|
||||||
else:
|
|
||||||
self.indexnode['entries'].append(
|
|
||||||
('single', indextext, targetname, '', None))
|
('single', indextext, targetname, '', None))
|
||||||
|
|
||||||
class CDomain(Base_CDomain):
|
class CDomain(Base_CDomain):
|
||||||
|
|
|
@ -45,17 +45,7 @@ from docutils import nodes, statemachine
|
||||||
from docutils.statemachine import ViewList
|
from docutils.statemachine import ViewList
|
||||||
from docutils.parsers.rst import directives, Directive
|
from docutils.parsers.rst import directives, Directive
|
||||||
from docutils.utils.error_reporting import ErrorString
|
from docutils.utils.error_reporting import ErrorString
|
||||||
|
from sphinx.util.docutils import switch_source_input
|
||||||
#
|
|
||||||
# AutodocReporter is only good up to Sphinx 1.7
|
|
||||||
#
|
|
||||||
import sphinx
|
|
||||||
|
|
||||||
Use_SSI = sphinx.__version__[:3] >= '1.7'
|
|
||||||
if Use_SSI:
|
|
||||||
from sphinx.util.docutils import switch_source_input
|
|
||||||
else:
|
|
||||||
from sphinx.ext.autodoc import AutodocReporter
|
|
||||||
|
|
||||||
__version__ = '1.0'
|
__version__ = '1.0'
|
||||||
|
|
||||||
|
@ -179,16 +169,5 @@ class KernelCmd(Directive):
|
||||||
return node.children
|
return node.children
|
||||||
|
|
||||||
def do_parse(self, content, node):
|
def do_parse(self, content, node):
|
||||||
if Use_SSI:
|
with switch_source_input(self.state, content):
|
||||||
with switch_source_input(self.state, content):
|
self.state.nested_parse(content, 0, node, match_titles=1)
|
||||||
self.state.nested_parse(content, 0, node, match_titles=1)
|
|
||||||
else:
|
|
||||||
buf = self.state.memo.title_styles, self.state.memo.section_level, self.state.memo.reporter
|
|
||||||
|
|
||||||
self.state.memo.title_styles = []
|
|
||||||
self.state.memo.section_level = 0
|
|
||||||
self.state.memo.reporter = AutodocReporter(content, self.state.memo.reporter)
|
|
||||||
try:
|
|
||||||
self.state.nested_parse(content, 0, node, match_titles=1)
|
|
||||||
finally:
|
|
||||||
self.state.memo.title_styles, self.state.memo.section_level, self.state.memo.reporter = buf
|
|
||||||
|
|
|
@ -42,17 +42,7 @@ from docutils import nodes, statemachine
|
||||||
from docutils.statemachine import ViewList
|
from docutils.statemachine import ViewList
|
||||||
from docutils.parsers.rst import directives, Directive
|
from docutils.parsers.rst import directives, Directive
|
||||||
from docutils.utils.error_reporting import ErrorString
|
from docutils.utils.error_reporting import ErrorString
|
||||||
|
from sphinx.util.docutils import switch_source_input
|
||||||
#
|
|
||||||
# AutodocReporter is only good up to Sphinx 1.7
|
|
||||||
#
|
|
||||||
import sphinx
|
|
||||||
|
|
||||||
Use_SSI = sphinx.__version__[:3] >= '1.7'
|
|
||||||
if Use_SSI:
|
|
||||||
from sphinx.util.docutils import switch_source_input
|
|
||||||
else:
|
|
||||||
from sphinx.ext.autodoc import AutodocReporter
|
|
||||||
|
|
||||||
__version__ = '1.0'
|
__version__ = '1.0'
|
||||||
|
|
||||||
|
@ -154,16 +144,7 @@ class KernelFeat(Directive):
|
||||||
|
|
||||||
buf = self.state.memo.title_styles, self.state.memo.section_level, self.state.memo.reporter
|
buf = self.state.memo.title_styles, self.state.memo.section_level, self.state.memo.reporter
|
||||||
|
|
||||||
if Use_SSI:
|
with switch_source_input(self.state, content):
|
||||||
with switch_source_input(self.state, content):
|
self.state.nested_parse(content, 0, node, match_titles=1)
|
||||||
self.state.nested_parse(content, 0, node, match_titles=1)
|
|
||||||
else:
|
|
||||||
self.state.memo.title_styles = []
|
|
||||||
self.state.memo.section_level = 0
|
|
||||||
self.state.memo.reporter = AutodocReporter(content, self.state.memo.reporter)
|
|
||||||
try:
|
|
||||||
self.state.nested_parse(content, 0, node, match_titles=1)
|
|
||||||
finally:
|
|
||||||
self.state.memo.title_styles, self.state.memo.section_level, self.state.memo.reporter = buf
|
|
||||||
|
|
||||||
return node.children
|
return node.children
|
||||||
|
|
|
@ -37,18 +37,8 @@ import glob
|
||||||
from docutils import nodes, statemachine
|
from docutils import nodes, statemachine
|
||||||
from docutils.statemachine import ViewList
|
from docutils.statemachine import ViewList
|
||||||
from docutils.parsers.rst import directives, Directive
|
from docutils.parsers.rst import directives, Directive
|
||||||
|
|
||||||
#
|
|
||||||
# AutodocReporter is only good up to Sphinx 1.7
|
|
||||||
#
|
|
||||||
import sphinx
|
import sphinx
|
||||||
|
from sphinx.util.docutils import switch_source_input
|
||||||
Use_SSI = sphinx.__version__[:3] >= '1.7'
|
|
||||||
if Use_SSI:
|
|
||||||
from sphinx.util.docutils import switch_source_input
|
|
||||||
else:
|
|
||||||
from sphinx.ext.autodoc import AutodocReporter
|
|
||||||
|
|
||||||
import kernellog
|
import kernellog
|
||||||
|
|
||||||
__version__ = '1.0'
|
__version__ = '1.0'
|
||||||
|
@ -163,18 +153,8 @@ class KernelDocDirective(Directive):
|
||||||
return [nodes.error(None, nodes.paragraph(text = "kernel-doc missing"))]
|
return [nodes.error(None, nodes.paragraph(text = "kernel-doc missing"))]
|
||||||
|
|
||||||
def do_parse(self, result, node):
|
def do_parse(self, result, node):
|
||||||
if Use_SSI:
|
with switch_source_input(self.state, result):
|
||||||
with switch_source_input(self.state, result):
|
self.state.nested_parse(result, 0, node, match_titles=1)
|
||||||
self.state.nested_parse(result, 0, node, match_titles=1)
|
|
||||||
else:
|
|
||||||
save = self.state.memo.title_styles, self.state.memo.section_level, self.state.memo.reporter
|
|
||||||
self.state.memo.reporter = AutodocReporter(result, self.state.memo.reporter)
|
|
||||||
self.state.memo.title_styles, self.state.memo.section_level = [], 0
|
|
||||||
try:
|
|
||||||
self.state.nested_parse(result, 0, node, match_titles=1)
|
|
||||||
finally:
|
|
||||||
self.state.memo.title_styles, self.state.memo.section_level, self.state.memo.reporter = save
|
|
||||||
|
|
||||||
|
|
||||||
def setup(app):
|
def setup(app):
|
||||||
app.add_config_value('kerneldoc_bin', None, 'env')
|
app.add_config_value('kerneldoc_bin', None, 'env')
|
||||||
|
|
|
@ -4,29 +4,19 @@
|
||||||
# only goes back to 1.6. So here's a wrapper layer to keep around for
|
# only goes back to 1.6. So here's a wrapper layer to keep around for
|
||||||
# as long as we support 1.4.
|
# as long as we support 1.4.
|
||||||
#
|
#
|
||||||
|
# We don't support 1.4 anymore, but we'll keep the wrappers around until
|
||||||
|
# we change all the code to not use them anymore :)
|
||||||
|
#
|
||||||
import sphinx
|
import sphinx
|
||||||
|
from sphinx.util import logging
|
||||||
|
|
||||||
if sphinx.__version__[:3] >= '1.6':
|
logger = logging.getLogger('kerneldoc')
|
||||||
UseLogging = True
|
|
||||||
from sphinx.util import logging
|
|
||||||
logger = logging.getLogger('kerneldoc')
|
|
||||||
else:
|
|
||||||
UseLogging = False
|
|
||||||
|
|
||||||
def warn(app, message):
|
def warn(app, message):
|
||||||
if UseLogging:
|
logger.warning(message)
|
||||||
logger.warning(message)
|
|
||||||
else:
|
|
||||||
app.warn(message)
|
|
||||||
|
|
||||||
def verbose(app, message):
|
def verbose(app, message):
|
||||||
if UseLogging:
|
logger.verbose(message)
|
||||||
logger.verbose(message)
|
|
||||||
else:
|
|
||||||
app.verbose(message)
|
|
||||||
|
|
||||||
def info(app, message):
|
def info(app, message):
|
||||||
if UseLogging:
|
logger.info(message)
|
||||||
logger.info(message)
|
|
||||||
else:
|
|
||||||
app.info(message)
|
|
||||||
|
|
|
@ -49,26 +49,14 @@ import os
|
||||||
from os import path
|
from os import path
|
||||||
import subprocess
|
import subprocess
|
||||||
from hashlib import sha1
|
from hashlib import sha1
|
||||||
import sys
|
|
||||||
|
|
||||||
from docutils import nodes
|
from docutils import nodes
|
||||||
from docutils.statemachine import ViewList
|
from docutils.statemachine import ViewList
|
||||||
from docutils.parsers.rst import directives
|
from docutils.parsers.rst import directives
|
||||||
from docutils.parsers.rst.directives import images
|
from docutils.parsers.rst.directives import images
|
||||||
import sphinx
|
import sphinx
|
||||||
|
|
||||||
from sphinx.util.nodes import clean_astext
|
from sphinx.util.nodes import clean_astext
|
||||||
from six import iteritems
|
|
||||||
|
|
||||||
import kernellog
|
import kernellog
|
||||||
|
|
||||||
PY3 = sys.version_info[0] == 3
|
|
||||||
|
|
||||||
if PY3:
|
|
||||||
_unicode = str
|
|
||||||
else:
|
|
||||||
_unicode = unicode
|
|
||||||
|
|
||||||
# Get Sphinx version
|
# Get Sphinx version
|
||||||
major, minor, patch = sphinx.version_info[:3]
|
major, minor, patch = sphinx.version_info[:3]
|
||||||
if major == 1 and minor > 3:
|
if major == 1 and minor > 3:
|
||||||
|
@ -540,7 +528,7 @@ def add_kernel_figure_to_std_domain(app, doctree):
|
||||||
docname = app.env.docname
|
docname = app.env.docname
|
||||||
labels = std.data["labels"]
|
labels = std.data["labels"]
|
||||||
|
|
||||||
for name, explicit in iteritems(doctree.nametypes):
|
for name, explicit in doctree.nametypes.items():
|
||||||
if not explicit:
|
if not explicit:
|
||||||
continue
|
continue
|
||||||
labelid = doctree.nameids[name]
|
labelid = doctree.nameids[name]
|
||||||
|
|
|
@ -61,8 +61,6 @@ class MaintainersInclude(Include):
|
||||||
field_content = ""
|
field_content = ""
|
||||||
|
|
||||||
for line in open(path):
|
for line in open(path):
|
||||||
if sys.version_info.major == 2:
|
|
||||||
line = unicode(line, 'utf-8')
|
|
||||||
# Have we reached the end of the preformatted Descriptions text?
|
# Have we reached the end of the preformatted Descriptions text?
|
||||||
if descriptions and line.startswith('Maintainers'):
|
if descriptions and line.startswith('Maintainers'):
|
||||||
descriptions = False
|
descriptions = False
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
docutils
|
docutils
|
||||||
Sphinx==2.4.4
|
Sphinx==2.4.4
|
||||||
sphinx_rtd_theme
|
sphinx_rtd_theme
|
||||||
six
|
|
||||||
|
|
|
@ -42,8 +42,6 @@ u"""
|
||||||
# imports
|
# imports
|
||||||
# ==============================================================================
|
# ==============================================================================
|
||||||
|
|
||||||
import sys
|
|
||||||
|
|
||||||
from docutils import nodes
|
from docutils import nodes
|
||||||
from docutils.parsers.rst import directives, roles
|
from docutils.parsers.rst import directives, roles
|
||||||
from docutils.parsers.rst.directives.tables import Table
|
from docutils.parsers.rst.directives.tables import Table
|
||||||
|
@ -55,14 +53,6 @@ from docutils.utils import SystemMessagePropagation
|
||||||
|
|
||||||
__version__ = '1.0'
|
__version__ = '1.0'
|
||||||
|
|
||||||
PY3 = sys.version_info[0] == 3
|
|
||||||
PY2 = sys.version_info[0] == 2
|
|
||||||
|
|
||||||
if PY3:
|
|
||||||
# pylint: disable=C0103, W0622
|
|
||||||
unicode = str
|
|
||||||
basestring = str
|
|
||||||
|
|
||||||
# ==============================================================================
|
# ==============================================================================
|
||||||
def setup(app):
|
def setup(app):
|
||||||
# ==============================================================================
|
# ==============================================================================
|
||||||
|
|
|
@ -75,7 +75,7 @@ NON-ATOMIC CONTEXT:
|
||||||
|
|
||||||
- Why not msleep for (1ms - 20ms)?
|
- Why not msleep for (1ms - 20ms)?
|
||||||
Explained originally here:
|
Explained originally here:
|
||||||
http://lkml.org/lkml/2007/8/3/250
|
https://lore.kernel.org/r/15327.1186166232@lwn.net
|
||||||
|
|
||||||
msleep(1~20) may not do what the caller intends, and
|
msleep(1~20) may not do what the caller intends, and
|
||||||
will often sleep longer (~20 ms actual sleep for any
|
will often sleep longer (~20 ms actual sleep for any
|
||||||
|
|
|
@ -611,21 +611,21 @@ Riferimenti e fonti
|
||||||
https://lwn.net/Articles/486306/
|
https://lwn.net/Articles/486306/
|
||||||
- Raccomandazioni da Andrew Morton circa il fatto che tutte le informazioni
|
- Raccomandazioni da Andrew Morton circa il fatto che tutte le informazioni
|
||||||
su una nuova chiamata di sistema dovrebbero essere contenute nello stesso
|
su una nuova chiamata di sistema dovrebbero essere contenute nello stesso
|
||||||
filone di discussione di email: https://lkml.org/lkml/2014/7/24/641
|
filone di discussione di email: https://lore.kernel.org/r/20140724144747.3041b208832bbdf9fbce5d96@linux-foundation.org
|
||||||
- Raccomandazioni da Michael Kerrisk circa il fatto che le nuove chiamate di
|
- Raccomandazioni da Michael Kerrisk circa il fatto che le nuove chiamate di
|
||||||
sistema dovrebbero avere una pagina man: https://lkml.org/lkml/2014/6/13/309
|
sistema dovrebbero avere una pagina man: https://lore.kernel.org/r/CAKgNAkgMA39AfoSoA5Pe1r9N+ZzfYQNvNPvcRN7tOvRb8+v06Q@mail.gmail.com
|
||||||
- Consigli da Thomas Gleixner sul fatto che il collegamento all'architettura
|
- Consigli da Thomas Gleixner sul fatto che il collegamento all'architettura
|
||||||
x86 dovrebbe avvenire in un *commit* differente:
|
x86 dovrebbe avvenire in un *commit* differente:
|
||||||
https://lkml.org/lkml/2014/11/19/254
|
https://lore.kernel.org/r/alpine.DEB.2.11.1411191249560.3909@nanos
|
||||||
- Consigli da Greg Kroah-Hartman circa la bontà d'avere una pagina man e un
|
- Consigli da Greg Kroah-Hartman circa la bontà d'avere una pagina man e un
|
||||||
programma di auto-verifica per le nuove chiamate di sistema:
|
programma di auto-verifica per le nuove chiamate di sistema:
|
||||||
https://lkml.org/lkml/2014/3/19/710
|
https://lore.kernel.org/r/20140320025530.GA25469@kroah.com
|
||||||
- Discussione di Michael Kerrisk sulle nuove chiamate di sistema contro
|
- Discussione di Michael Kerrisk sulle nuove chiamate di sistema contro
|
||||||
le estensioni :manpage:`prctl(2)`: https://lkml.org/lkml/2014/6/3/411
|
le estensioni :manpage:`prctl(2)`: https://lore.kernel.org/r/CAHO5Pa3F2MjfTtfNxa8LbnkeeU8=YJ+9tDqxZpw7Gz59E-4AUg@mail.gmail.com
|
||||||
- Consigli da Ingo Molnar che le chiamate di sistema con più argomenti
|
- Consigli da Ingo Molnar che le chiamate di sistema con più argomenti
|
||||||
dovrebbero incapsularli in una struttura che includa un argomento
|
dovrebbero incapsularli in una struttura che includa un argomento
|
||||||
*size* per garantire l'estensibilità futura:
|
*size* per garantire l'estensibilità futura:
|
||||||
https://lkml.org/lkml/2015/7/30/117
|
https://lore.kernel.org/r/20150730083831.GA22182@gmail.com
|
||||||
- Un certo numero di casi strani emersi dall'uso (riuso) dei flag O_*:
|
- Un certo numero di casi strani emersi dall'uso (riuso) dei flag O_*:
|
||||||
|
|
||||||
- commit 75069f2b5bfb ("vfs: renumber FMODE_NONOTIFY and add to uniqueness
|
- commit 75069f2b5bfb ("vfs: renumber FMODE_NONOTIFY and add to uniqueness
|
||||||
|
@ -635,9 +635,9 @@ Riferimenti e fonti
|
||||||
- commit bb458c644a59 ("Safer ABI for O_TMPFILE")
|
- commit bb458c644a59 ("Safer ABI for O_TMPFILE")
|
||||||
|
|
||||||
- Discussion from Matthew Wilcox about restrictions on 64-bit arguments:
|
- Discussion from Matthew Wilcox about restrictions on 64-bit arguments:
|
||||||
https://lkml.org/lkml/2008/12/12/187
|
https://lore.kernel.org/r/20081212152929.GM26095@parisc-linux.org
|
||||||
- Raccomandazioni da Greg Kroah-Hartman sul fatto che i flag sconosciuti dovrebbero
|
- Raccomandazioni da Greg Kroah-Hartman sul fatto che i flag sconosciuti dovrebbero
|
||||||
essere controllati: https://lkml.org/lkml/2014/7/17/577
|
essere controllati: https://lore.kernel.org/r/20140717193330.GB4703@kroah.com
|
||||||
- Raccomandazioni da Linus Torvalds che le chiamate di sistema x32 dovrebbero
|
- Raccomandazioni da Linus Torvalds che le chiamate di sistema x32 dovrebbero
|
||||||
favorire la compatibilità con le versioni a 64-bit piuttosto che quelle a 32-bit:
|
favorire la compatibilità con le versioni a 64-bit piuttosto che quelle a 32-bit:
|
||||||
https://lkml.org/lkml/2011/8/31/244
|
https://lore.kernel.org/r/CA+55aFxfmwfB7jbbrXxa=K7VBYPfAvmu3XOkGrLbB1UFjX1+Ew@mail.gmail.com
|
||||||
|
|
|
@ -731,13 +731,13 @@ Greg Kroah-Hartman, "Come scocciare un manutentore di un sottosistema"
|
||||||
<http://www.kroah.com/log/linux/maintainer-06.html>
|
<http://www.kroah.com/log/linux/maintainer-06.html>
|
||||||
|
|
||||||
No!!!! Basta gigantesche bombe patch alle persone sulla lista linux-kernel@vger.kernel.org!
|
No!!!! Basta gigantesche bombe patch alle persone sulla lista linux-kernel@vger.kernel.org!
|
||||||
<https://lkml.org/lkml/2005/7/11/336>
|
<https://lore.kernel.org/r/20050711.125305.08322243.davem@davemloft.net>
|
||||||
|
|
||||||
Kernel Documentation/translations/it_IT/process/coding-style.rst:
|
Kernel Documentation/translations/it_IT/process/coding-style.rst:
|
||||||
:ref:`Documentation/translations/it_IT/process/coding-style.rst <it_codingstyle>`
|
:ref:`Documentation/translations/it_IT/process/coding-style.rst <it_codingstyle>`
|
||||||
|
|
||||||
E-mail di Linus Torvalds sul formato canonico di una patch:
|
E-mail di Linus Torvalds sul formato canonico di una patch:
|
||||||
<http://lkml.org/lkml/2005/4/7/183>
|
<https://lore.kernel.org/r/Pine.LNX.4.58.0504071023190.28951@ppc970.osdl.org>
|
||||||
|
|
||||||
Andi Kleen, "Su come sottomettere patch del kernel"
|
Andi Kleen, "Su come sottomettere patch del kernel"
|
||||||
Alcune strategie su come sottomettere modifiche toste o controverse.
|
Alcune strategie su come sottomettere modifiche toste o controverse.
|
||||||
|
|
|
@ -702,13 +702,13 @@ Greg Kroah-Hartman, "How to piss off a kernel subsystem maintainer".
|
||||||
<http://www.kroah.com/log/2006/01/11/>
|
<http://www.kroah.com/log/2006/01/11/>
|
||||||
|
|
||||||
NO!!!! No more huge patch bombs to linux-kernel@vger.kernel.org people!
|
NO!!!! No more huge patch bombs to linux-kernel@vger.kernel.org people!
|
||||||
<https://lkml.org/lkml/2005/7/11/336>
|
<https://lore.kernel.org/r/20050711.125305.08322243.davem@davemloft.net>
|
||||||
|
|
||||||
Kernel Documentation/process/coding-style.rst:
|
Kernel Documentation/process/coding-style.rst:
|
||||||
<http://users.sosdg.org/~qiyong/lxr/source/Documentation/process/coding-style.rst>
|
<http://users.sosdg.org/~qiyong/lxr/source/Documentation/process/coding-style.rst>
|
||||||
|
|
||||||
Linus Torvalds's mail on the canonical patch format:
|
Linus Torvalds's mail on the canonical patch format:
|
||||||
<http://lkml.org/lkml/2005/4/7/183>
|
<https://lore.kernel.org/r/Pine.LNX.4.58.0504071023190.28951@ppc970.osdl.org>
|
||||||
|
|
||||||
Andi Kleen, "On submitting kernel patches"
|
Andi Kleen, "On submitting kernel patches"
|
||||||
Some strategies to get difficult or controversial changes in.
|
Some strategies to get difficult or controversial changes in.
|
||||||
|
|
|
@ -345,7 +345,7 @@ https://bugzilla.kernel.org 는 리눅스 커널 개발자들이 커널의 버
|
||||||
|
|
||||||
https://bugzilla.kernel.org/page.cgi?id=faq.html
|
https://bugzilla.kernel.org/page.cgi?id=faq.html
|
||||||
|
|
||||||
메인 커널 소스 디렉토리에 있는 :ref:`admin-guide/reporting-bugs.rst <reportingbugs>`
|
메인 커널 소스 디렉토리에 있는 'Documentation/admin-guide/reporting-issues.rst'
|
||||||
파일은 커널 버그라고 생각되는 것을 보고하는 방법에 관한 좋은 템플릿이며 문제를
|
파일은 커널 버그라고 생각되는 것을 보고하는 방법에 관한 좋은 템플릿이며 문제를
|
||||||
추적하기 위해서 커널 개발자들이 필요로 하는 정보가 무엇들인지를 상세히 설명하고
|
추적하기 위해서 커널 개발자들이 필요로 하는 정보가 무엇들인지를 상세히 설명하고
|
||||||
있다.
|
있다.
|
||||||
|
@ -583,7 +583,7 @@ Pat이라는 이름을 가진 여자가 있을 수도 있는 것이다. 리눅
|
||||||
|
|
||||||
"The Perfect Patch"
|
"The Perfect Patch"
|
||||||
|
|
||||||
http://www.ozlabs.org/~akpm/stuff/tpp.txt
|
https://www.ozlabs.org/~akpm/stuff/tpp.txt
|
||||||
|
|
||||||
|
|
||||||
이 모든 것을 하는 것은 매우 어려운 일이다. 완벽히 소화하는 데는 적어도 몇년이
|
이 모든 것을 하는 것은 매우 어려운 일이다. 완벽히 소화하는 데는 적어도 몇년이
|
||||||
|
|
|
@ -10,3 +10,18 @@
|
||||||
:maxdepth: 1
|
:maxdepth: 1
|
||||||
|
|
||||||
howto
|
howto
|
||||||
|
|
||||||
|
|
||||||
|
리눅스 커널 메모리 배리어
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
.. raw:: latex
|
||||||
|
|
||||||
|
\footnotesize
|
||||||
|
|
||||||
|
.. include:: ./memory-barriers.txt
|
||||||
|
:literal:
|
||||||
|
|
||||||
|
.. raw:: latex
|
||||||
|
|
||||||
|
\normalsize
|
||||||
|
|
|
@ -95,7 +95,7 @@ Linux通过``/proc/stat``和``/proc/uptime``导出各种信息,用户空间工
|
||||||
参考
|
参考
|
||||||
---
|
---
|
||||||
|
|
||||||
- http://lkml.org/lkml/2007/2/12/6
|
- https://lore.kernel.org/r/loom.20070212T063225-663@post.gmane.org
|
||||||
- Documentation/filesystems/proc.rst (1.8)
|
- Documentation/filesystems/proc.rst (1.8)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -124,7 +124,7 @@ bootloader 必须传递一个系统内存的位置和最小值,以及根文件
|
||||||
|
|
||||||
bootloader 必须以 64bit 地址对齐的形式加载一个设备树映像(dtb)到系统
|
bootloader 必须以 64bit 地址对齐的形式加载一个设备树映像(dtb)到系统
|
||||||
RAM 中,并用启动数据初始化它。dtb 格式在文档
|
RAM 中,并用启动数据初始化它。dtb 格式在文档
|
||||||
Documentation/devicetree/booting-without-of.rst 中。内核将会在
|
https://www.devicetree.org/specifications/ 中。内核将会在
|
||||||
dtb 物理地址处查找 dtb 魔数值(0xd00dfeed),以确定 dtb 是否已经代替
|
dtb 物理地址处查找 dtb 魔数值(0xd00dfeed),以确定 dtb 是否已经代替
|
||||||
标签列表被传递进来。
|
标签列表被传递进来。
|
||||||
|
|
||||||
|
|
46
Documentation/translations/zh_CN/iio/ep93xx_adc.rst
Normal file
46
Documentation/translations/zh_CN/iio/ep93xx_adc.rst
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
.. include:: ../disclaimer-zh_CN.rst
|
||||||
|
|
||||||
|
:Original: :doc:`../../../iio/ep93xx_adc`
|
||||||
|
:Translator: Yanteng Si <siyanteng@loongson.cn>
|
||||||
|
|
||||||
|
.. _cn_iio_ep93xx_adc:
|
||||||
|
|
||||||
|
|
||||||
|
==================================
|
||||||
|
思睿逻辑 EP93xx 模拟数字转换器驱动
|
||||||
|
==================================
|
||||||
|
|
||||||
|
1. 概述
|
||||||
|
=======
|
||||||
|
|
||||||
|
该驱动同时适用于具有5通道模拟数字转换器的低端 (EP9301, Ep9302) 设备和10通道
|
||||||
|
触摸屏/模拟数字转换器的高端设备(EP9307, EP9312, EP9315)。
|
||||||
|
|
||||||
|
2. 通道编号
|
||||||
|
===========
|
||||||
|
|
||||||
|
EP9301和EP9302数据表定义了通道0..4的编号方案。虽然EP9307, EP9312和EP9315多
|
||||||
|
了3个通道(一共8个),但是编号并没有定义。所以说最后三个通道是随机编号的。
|
||||||
|
|
||||||
|
如果ep93xx_adc是IIO设备0,您将在以下位置找到条目
|
||||||
|
/sys/bus/iio/devices/iio:device0/:
|
||||||
|
|
||||||
|
+-----------------+---------------+
|
||||||
|
| sysfs 入口 | ball/pin 名称 |
|
||||||
|
+=================+===============+
|
||||||
|
| in_voltage0_raw | YM |
|
||||||
|
+-----------------+---------------+
|
||||||
|
| in_voltage1_raw | SXP |
|
||||||
|
+-----------------+---------------+
|
||||||
|
| in_voltage2_raw | SXM |
|
||||||
|
+-----------------+---------------+
|
||||||
|
| in_voltage3_raw | SYP |
|
||||||
|
+-----------------+---------------+
|
||||||
|
| in_voltage4_raw | SYM |
|
||||||
|
+-----------------+---------------+
|
||||||
|
| in_voltage5_raw | XP |
|
||||||
|
+-----------------+---------------+
|
||||||
|
| in_voltage6_raw | XM |
|
||||||
|
+-----------------+---------------+
|
||||||
|
| in_voltage7_raw | YP |
|
||||||
|
+-----------------+---------------+
|
102
Documentation/translations/zh_CN/iio/iio_configfs.rst
Normal file
102
Documentation/translations/zh_CN/iio/iio_configfs.rst
Normal file
|
@ -0,0 +1,102 @@
|
||||||
|
.. include:: ../disclaimer-zh_CN.rst
|
||||||
|
|
||||||
|
:Original: :doc:`../../../iio/iio_configfs`
|
||||||
|
:Translator: Yanteng Si <siyanteng@loongson.cn>
|
||||||
|
|
||||||
|
.. _cn_iio_configfs:
|
||||||
|
|
||||||
|
|
||||||
|
=====================
|
||||||
|
工业 IIO configfs支持
|
||||||
|
=====================
|
||||||
|
|
||||||
|
1. 概述
|
||||||
|
=======
|
||||||
|
|
||||||
|
Configfs是一种内核对象的基于文件系统的管理系统,IIO使用一些可以通过
|
||||||
|
configfs轻松配置的对象(例如:设备,触发器)。
|
||||||
|
|
||||||
|
关于configfs是如何运行的,请查阅Documentation/filesystems/configfs.rst
|
||||||
|
了解更多信息。
|
||||||
|
|
||||||
|
2. 用法
|
||||||
|
=======
|
||||||
|
为了使configfs支持IIO,我们需要在编译时选中config的CONFIG_IIO_CONFIGFS
|
||||||
|
选项。
|
||||||
|
|
||||||
|
然后,挂载configfs文件系统(通常在 /config directory目录下)::
|
||||||
|
|
||||||
|
$ mkdir/config
|
||||||
|
$ mount -t configfs none/config
|
||||||
|
|
||||||
|
此时,将创建所有默认IIO组,并可以在/ config / iio下对其进行访问。 下一章
|
||||||
|
将介绍可用的IIO配置对象。
|
||||||
|
|
||||||
|
3. 软件触发器
|
||||||
|
=============
|
||||||
|
|
||||||
|
IIO默认configfs组之一是“触发器”组。 挂载configfs后可以自动访问它,并且可
|
||||||
|
以在/config/iio/triggers下找到。
|
||||||
|
|
||||||
|
IIO软件触发器为创建多种触发器类型提供了支持。 通常在include/linux/iio
|
||||||
|
/sw_trigger.h:中的接口下将新的触发器类型实现为单独的内核模块:
|
||||||
|
::
|
||||||
|
|
||||||
|
/*
|
||||||
|
* drivers/iio/trigger/iio-trig-sample.c
|
||||||
|
* 一种新触发器类型的内核模块实例
|
||||||
|
*/
|
||||||
|
#include <linux/iio/sw_trigger.h>
|
||||||
|
|
||||||
|
|
||||||
|
static struct iio_sw_trigger *iio_trig_sample_probe(const char *name)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* 这将分配并注册一个IIO触发器以及其他触发器类型特性的初始化。
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
static int iio_trig_sample_remove(struct iio_sw_trigger *swt)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* 这会废弃iio_trig_sample_probe中的操作
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
static const struct iio_sw_trigger_ops iio_trig_sample_ops = {
|
||||||
|
.probe = iio_trig_sample_probe,
|
||||||
|
.remove = iio_trig_sample_remove,
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct iio_sw_trigger_type iio_trig_sample = {
|
||||||
|
.name = "trig-sample",
|
||||||
|
.owner = THIS_MODULE,
|
||||||
|
.ops = &iio_trig_sample_ops,
|
||||||
|
};
|
||||||
|
|
||||||
|
module_iio_sw_trigger_driver(iio_trig_sample);
|
||||||
|
|
||||||
|
每种触发器类型在/config/iio/triggers下都有其自己的目录。 加载iio-trig-sample
|
||||||
|
模块将创建“ trig-sample”触发器类型目录/config/iio/triggers/trig-sample.
|
||||||
|
|
||||||
|
我们支持以下中断源(触发器类型)
|
||||||
|
|
||||||
|
* hrtimer,使用高分辨率定时器作为中断源
|
||||||
|
|
||||||
|
3.1 Hrtimer触发器创建与销毁
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
加载iio-trig-hrtimer模块将注册hrtimer触发器类型,从而允许用户在
|
||||||
|
/config/iio/triggers/hrtimer下创建hrtimer触发器。
|
||||||
|
|
||||||
|
例如::
|
||||||
|
|
||||||
|
$ mkdir /config/iio/triggers/hrtimer/instance1
|
||||||
|
$ rmdir /config/iio/triggers/hrtimer/instance1
|
||||||
|
|
||||||
|
每个触发器可以具有一个或多个独特的触发器类型的属性。
|
||||||
|
|
||||||
|
3.2 "hrtimer" 触发器类型属性
|
||||||
|
----------------------------
|
||||||
|
|
||||||
|
"hrtimer”触发器类型没有来自/config dir的任何可配置属性。
|
20
Documentation/translations/zh_CN/iio/index.rst
Normal file
20
Documentation/translations/zh_CN/iio/index.rst
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
.. SPDX-License-Identifier: GPL-2.0
|
||||||
|
|
||||||
|
.. include:: ../disclaimer-zh_CN.rst
|
||||||
|
|
||||||
|
:Original: :doc:`../../../iio/index`
|
||||||
|
:Translator: Yanteng Si <siyanteng@loongson.cn>
|
||||||
|
|
||||||
|
.. _cn_iio_index:
|
||||||
|
|
||||||
|
|
||||||
|
========
|
||||||
|
工业 I/O
|
||||||
|
========
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 1
|
||||||
|
|
||||||
|
iio_configfs
|
||||||
|
|
||||||
|
ep93xx_adc
|
31
Documentation/translations/zh_CN/mips/booting.rst
Normal file
31
Documentation/translations/zh_CN/mips/booting.rst
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
.. SPDX-License-Identifier: GPL-2.0
|
||||||
|
|
||||||
|
.. include:: ../disclaimer-zh_CN.rst
|
||||||
|
|
||||||
|
:Original: :doc:`../../../mips/booting`
|
||||||
|
:Translator: Yanteng Si <siyanteng@loongson.cn>
|
||||||
|
|
||||||
|
.. _cn_booting:
|
||||||
|
|
||||||
|
BMIPS设备树引导
|
||||||
|
------------------------
|
||||||
|
|
||||||
|
一些bootloaders只支持在内核镜像开始地址处的单一入口点。而其它
|
||||||
|
bootloaders将跳转到ELF的开始地址处。两种方案都支持的;因为
|
||||||
|
CONFIG_BOOT_RAW=y and CONFIG_NO_EXCEPT_FILL=y, 所以第一条指令
|
||||||
|
会立即跳转到kernel_entry()入口处执行。
|
||||||
|
|
||||||
|
与arch/arm情况(b)类似,dt感知的引导加载程序需要设置以下寄存器:
|
||||||
|
|
||||||
|
a0 : 0
|
||||||
|
|
||||||
|
a1 : 0xffffffff
|
||||||
|
|
||||||
|
a2 : RAM中指向设备树块的物理指针(在chapterII中定义)。
|
||||||
|
设备树可以位于前512MB物理地址空间(0x00000000 -
|
||||||
|
0x1fffffff)的任何位置,以64位边界对齐。
|
||||||
|
|
||||||
|
传统bootloaders不会使用这样的约定,并且它们不传入DT块。
|
||||||
|
在这种情况下,Linux将通过选中CONFIG_DT_*查找DTB。
|
||||||
|
|
||||||
|
以上约定只在32位系统中定义,因为目前没有任何64位的BMIPS实现。
|
10
Documentation/translations/zh_CN/mips/features.rst
Normal file
10
Documentation/translations/zh_CN/mips/features.rst
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
.. SPDX-License-Identifier: GPL-2.0
|
||||||
|
|
||||||
|
.. include:: ../disclaimer-zh_CN.rst
|
||||||
|
|
||||||
|
:Original: :doc:`../../../mips/features`
|
||||||
|
:Translator: Yanteng Si <siyanteng@loongson.cn>
|
||||||
|
|
||||||
|
.. _cn_features:
|
||||||
|
|
||||||
|
.. kernel-feat:: $srctree/Documentation/features mips
|
26
Documentation/translations/zh_CN/mips/index.rst
Normal file
26
Documentation/translations/zh_CN/mips/index.rst
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
.. SPDX-License-Identifier: GPL-2.0
|
||||||
|
|
||||||
|
.. include:: ../disclaimer-zh_CN.rst
|
||||||
|
|
||||||
|
:Original: :doc:`../../../mips/index`
|
||||||
|
:Translator: Yanteng Si <siyanteng@loongson.cn>
|
||||||
|
|
||||||
|
===========================
|
||||||
|
MIPS特性文档
|
||||||
|
===========================
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 2
|
||||||
|
:numbered:
|
||||||
|
|
||||||
|
booting
|
||||||
|
ingenic-tcu
|
||||||
|
|
||||||
|
features
|
||||||
|
|
||||||
|
.. only:: subproject and html
|
||||||
|
|
||||||
|
Indices
|
||||||
|
=======
|
||||||
|
|
||||||
|
* :ref:`genindex`
|
69
Documentation/translations/zh_CN/mips/ingenic-tcu.rst
Normal file
69
Documentation/translations/zh_CN/mips/ingenic-tcu.rst
Normal file
|
@ -0,0 +1,69 @@
|
||||||
|
.. SPDX-License-Identifier: GPL-2.0
|
||||||
|
|
||||||
|
.. include:: ../disclaimer-zh_CN.rst
|
||||||
|
|
||||||
|
:Original: :doc:`../../../mips/ingenic-tcu`
|
||||||
|
:Translator: Yanteng Si <siyanteng@loongson.cn>
|
||||||
|
|
||||||
|
.. _cn_ingenic-tcu:
|
||||||
|
|
||||||
|
===============================================
|
||||||
|
君正 JZ47xx SoC定时器/计数器硬件单元
|
||||||
|
===============================================
|
||||||
|
|
||||||
|
君正 JZ47xx SoC中的定时器/计数器单元(TCU)是一个多功能硬件块。它有多达
|
||||||
|
8个通道,可以用作计数器,计时器,或脉冲宽度调制器。
|
||||||
|
|
||||||
|
- JZ4725B, JZ4750, JZ4755 只有6个TCU通道。其它SoC都有8个通道。
|
||||||
|
|
||||||
|
- JZ4725B引入了一个独立的通道,称为操作系统计时器(OST)。这是一个32位可
|
||||||
|
编程定时器。在JZ4760B及以上型号上,它是64位的。
|
||||||
|
|
||||||
|
- 每个TCU通道都有自己的时钟源,可以通过 TCSR 寄存器设置通道的父级时钟
|
||||||
|
源(pclk、ext、rtc)、开关以及分频。
|
||||||
|
|
||||||
|
- 看门狗和OST硬件模块在它们的寄存器空间中也有相同形式的TCSR寄存器。
|
||||||
|
- 用于关闭/开启的 TCU 寄存器也可以关闭/开启看门狗和 OST 时钟。
|
||||||
|
|
||||||
|
- 每个TCU通道在两种模式的其中一种模式下运行:
|
||||||
|
|
||||||
|
- 模式 TCU1:通道无法在睡眠模式下运行,但更易于操作。
|
||||||
|
- 模式 TCU2:通道可以在睡眠模式下运行,但操作比 TCU1 通道复杂一些。
|
||||||
|
|
||||||
|
- 每个 TCU 通道的模式取决于使用的SoC:
|
||||||
|
|
||||||
|
- 在最老的SoC(高于JZ4740),八个通道都运行在TCU1模式。
|
||||||
|
- 在 JZ4725B,通道5运行在TCU2,其它通道则运行在TCU1。
|
||||||
|
- 在最新的SoC(JZ4750及之后),通道1-2运行在TCU2,其它通道则运行
|
||||||
|
在TCU1。
|
||||||
|
|
||||||
|
- 每个通道都可以生成中断。有些通道共享一条中断线,而有些没有,其在SoC型
|
||||||
|
号之间的变更:
|
||||||
|
|
||||||
|
- 在很老的SoC(JZ4740及更低),通道0和通道1有它们自己的中断线;通
|
||||||
|
道2-7共享最后一条中断线。
|
||||||
|
- 在 JZ4725B,通道0有它自己的中断线;通道1-5共享一条中断线;OST
|
||||||
|
使用最后一条中断线。
|
||||||
|
- 在比较新的SoC(JZ4750及以后),通道5有它自己的中断线;通
|
||||||
|
道0-4和(如果是8通道)6-7全部共享一条中断线;OST使用最后一条中
|
||||||
|
断线。
|
||||||
|
|
||||||
|
实现
|
||||||
|
====
|
||||||
|
|
||||||
|
TCU硬件的功能分布在多个驱动程序:
|
||||||
|
|
||||||
|
============== ===================================
|
||||||
|
时钟 drivers/clk/ingenic/tcu.c
|
||||||
|
中断 drivers/irqchip/irq-ingenic-tcu.c
|
||||||
|
定时器 drivers/clocksource/ingenic-timer.c
|
||||||
|
OST drivers/clocksource/ingenic-ost.c
|
||||||
|
脉冲宽度调制器 drivers/pwm/pwm-jz4740.c
|
||||||
|
看门狗 drivers/watchdog/jz4740_wdt.c
|
||||||
|
============== ===================================
|
||||||
|
|
||||||
|
因为可以从相同的寄存器控制属于不同驱动程序和框架的TCU的各种功能,所以
|
||||||
|
所有这些驱动程序都通过相同的控制总线通用接口访问它们的寄存器。
|
||||||
|
|
||||||
|
有关TCU驱动程序的设备树绑定的更多信息,请参阅:
|
||||||
|
Documentation/devicetree/bindings/timer/ingenic,tcu.yaml.
|
|
@ -668,13 +668,13 @@ Greg Kroah-Hartman, "How to piss off a kernel subsystem maintainer".
|
||||||
<http://www.kroah.com/log/linux/maintainer-06.html>
|
<http://www.kroah.com/log/linux/maintainer-06.html>
|
||||||
|
|
||||||
NO!!!! No more huge patch bombs to linux-kernel@vger.kernel.org people!
|
NO!!!! No more huge patch bombs to linux-kernel@vger.kernel.org people!
|
||||||
<https://lkml.org/lkml/2005/7/11/336>
|
<https://lore.kernel.org/r/20050711.125305.08322243.davem@davemloft.net>
|
||||||
|
|
||||||
Kernel Documentation/process/coding-style.rst:
|
Kernel Documentation/process/coding-style.rst:
|
||||||
:ref:`Documentation/translations/zh_CN/process/coding-style.rst <cn_codingstyle>`
|
:ref:`Documentation/translations/zh_CN/process/coding-style.rst <cn_codingstyle>`
|
||||||
|
|
||||||
Linus Torvalds's mail on the canonical patch format:
|
Linus Torvalds's mail on the canonical patch format:
|
||||||
<http://lkml.org/lkml/2005/4/7/183>
|
<https://lore.kernel.org/r/Pine.LNX.4.58.0504071023190.28951@ppc970.osdl.org>
|
||||||
|
|
||||||
Andi Kleen, "On submitting kernel patches"
|
Andi Kleen, "On submitting kernel patches"
|
||||||
Some strategies to get difficult or controversial changes in.
|
Some strategies to get difficult or controversial changes in.
|
||||||
|
|
|
@ -32,7 +32,7 @@ There are helpers to lock/unlock a table and other accessor functions:
|
||||||
|
|
||||||
Split page table lock for PTE tables is enabled compile-time if
|
Split page table lock for PTE tables is enabled compile-time if
|
||||||
CONFIG_SPLIT_PTLOCK_CPUS (usually 4) is less or equal to NR_CPUS.
|
CONFIG_SPLIT_PTLOCK_CPUS (usually 4) is less or equal to NR_CPUS.
|
||||||
If split lock is disabled, all tables guaded by mm->page_table_lock.
|
If split lock is disabled, all tables are guarded by mm->page_table_lock.
|
||||||
|
|
||||||
Split page table lock for PMD tables is enabled, if it's enabled for PTE
|
Split page table lock for PMD tables is enabled, if it's enabled for PTE
|
||||||
tables and the architecture supports it (see below).
|
tables and the architecture supports it (see below).
|
||||||
|
|
|
@ -851,7 +851,7 @@ Protocol: 2.09+
|
||||||
struct setup_data {
|
struct setup_data {
|
||||||
__u64 next = 0 or <addr_of_next_setup_data_struct>;
|
__u64 next = 0 or <addr_of_next_setup_data_struct>;
|
||||||
__u32 type = SETUP_INDIRECT;
|
__u32 type = SETUP_INDIRECT;
|
||||||
__u32 len = sizeof(setup_data);
|
__u32 len = sizeof(setup_indirect);
|
||||||
__u8 data[sizeof(setup_indirect)] = struct setup_indirect {
|
__u8 data[sizeof(setup_indirect)] = struct setup_indirect {
|
||||||
__u32 type = SETUP_INDIRECT | SETUP_E820_EXT;
|
__u32 type = SETUP_INDIRECT | SETUP_E820_EXT;
|
||||||
__u32 reserved = 0;
|
__u32 reserved = 0;
|
||||||
|
|
|
@ -124,8 +124,8 @@ config HAVE_64BIT_ALIGNED_ACCESS
|
||||||
accesses are required to be 64 bit aligned in this way even
|
accesses are required to be 64 bit aligned in this way even
|
||||||
though it is not a 64 bit architecture.
|
though it is not a 64 bit architecture.
|
||||||
|
|
||||||
See Documentation/unaligned-memory-access.txt for more
|
See Documentation/core-api/unaligned-memory-access.rst for
|
||||||
information on the topic of unaligned memory accesses.
|
more information on the topic of unaligned memory accesses.
|
||||||
|
|
||||||
config HAVE_EFFICIENT_UNALIGNED_ACCESS
|
config HAVE_EFFICIENT_UNALIGNED_ACCESS
|
||||||
bool
|
bool
|
||||||
|
|
|
@ -243,7 +243,7 @@ static int port_detect(struct device *dev, void *dev_drv)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* parport_register_driver - register a parallel port device driver
|
* __parport_register_driver - register a parallel port device driver
|
||||||
* @drv: structure describing the driver
|
* @drv: structure describing the driver
|
||||||
* @owner: owner module of drv
|
* @owner: owner module of drv
|
||||||
* @mod_name: module name string
|
* @mod_name: module name string
|
||||||
|
|
|
@ -749,7 +749,7 @@ int rio_map_outb_region(struct rio_mport *mport, u16 destid, u64 rbase,
|
||||||
EXPORT_SYMBOL_GPL(rio_map_outb_region);
|
EXPORT_SYMBOL_GPL(rio_map_outb_region);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* rio_unmap_inb_region -- Unmap the inbound memory region
|
* rio_unmap_outb_region -- Unmap the inbound memory region
|
||||||
* @mport: Master port
|
* @mport: Master port
|
||||||
* @destid: destination id mapping points to
|
* @destid: destination id mapping points to
|
||||||
* @rstart: RIO base address window translates to
|
* @rstart: RIO base address window translates to
|
||||||
|
|
63
fs/dcache.c
63
fs/dcache.c
|
@ -456,23 +456,6 @@ static void d_lru_shrink_move(struct list_lru_one *lru, struct dentry *dentry,
|
||||||
list_lru_isolate_move(lru, &dentry->d_lru, list);
|
list_lru_isolate_move(lru, &dentry->d_lru, list);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* d_drop - drop a dentry
|
|
||||||
* @dentry: dentry to drop
|
|
||||||
*
|
|
||||||
* d_drop() unhashes the entry from the parent dentry hashes, so that it won't
|
|
||||||
* be found through a VFS lookup any more. Note that this is different from
|
|
||||||
* deleting the dentry - d_delete will try to mark the dentry negative if
|
|
||||||
* possible, giving a successful _negative_ lookup, while d_drop will
|
|
||||||
* just make the cache lookup fail.
|
|
||||||
*
|
|
||||||
* d_drop() is used mainly for stuff that wants to invalidate a dentry for some
|
|
||||||
* reason (NFS timeouts or autofs deletes).
|
|
||||||
*
|
|
||||||
* __d_drop requires dentry->d_lock
|
|
||||||
* ___d_drop doesn't mark dentry as "unhashed"
|
|
||||||
* (dentry->d_hash.pprev will be LIST_POISON2, not NULL).
|
|
||||||
*/
|
|
||||||
static void ___d_drop(struct dentry *dentry)
|
static void ___d_drop(struct dentry *dentry)
|
||||||
{
|
{
|
||||||
struct hlist_bl_head *b;
|
struct hlist_bl_head *b;
|
||||||
|
@ -501,6 +484,24 @@ void __d_drop(struct dentry *dentry)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(__d_drop);
|
EXPORT_SYMBOL(__d_drop);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* d_drop - drop a dentry
|
||||||
|
* @dentry: dentry to drop
|
||||||
|
*
|
||||||
|
* d_drop() unhashes the entry from the parent dentry hashes, so that it won't
|
||||||
|
* be found through a VFS lookup any more. Note that this is different from
|
||||||
|
* deleting the dentry - d_delete will try to mark the dentry negative if
|
||||||
|
* possible, giving a successful _negative_ lookup, while d_drop will
|
||||||
|
* just make the cache lookup fail.
|
||||||
|
*
|
||||||
|
* d_drop() is used mainly for stuff that wants to invalidate a dentry for some
|
||||||
|
* reason (NFS timeouts or autofs deletes).
|
||||||
|
*
|
||||||
|
* __d_drop requires dentry->d_lock
|
||||||
|
*
|
||||||
|
* ___d_drop doesn't mark dentry as "unhashed"
|
||||||
|
* (dentry->d_hash.pprev will be LIST_POISON2, not NULL).
|
||||||
|
*/
|
||||||
void d_drop(struct dentry *dentry)
|
void d_drop(struct dentry *dentry)
|
||||||
{
|
{
|
||||||
spin_lock(&dentry->d_lock);
|
spin_lock(&dentry->d_lock);
|
||||||
|
@ -996,20 +997,6 @@ struct dentry *d_find_any_alias(struct inode *inode)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(d_find_any_alias);
|
EXPORT_SYMBOL(d_find_any_alias);
|
||||||
|
|
||||||
/**
|
|
||||||
* d_find_alias - grab a hashed alias of inode
|
|
||||||
* @inode: inode in question
|
|
||||||
*
|
|
||||||
* If inode has a hashed alias, or is a directory and has any alias,
|
|
||||||
* acquire the reference to alias and return it. Otherwise return NULL.
|
|
||||||
* Notice that if inode is a directory there can be only one alias and
|
|
||||||
* it can be unhashed only if it has no children, or if it is the root
|
|
||||||
* of a filesystem, or if the directory was renamed and d_revalidate
|
|
||||||
* was the first vfs operation to notice.
|
|
||||||
*
|
|
||||||
* If the inode has an IS_ROOT, DCACHE_DISCONNECTED alias, then prefer
|
|
||||||
* any other hashed alias over that one.
|
|
||||||
*/
|
|
||||||
static struct dentry *__d_find_alias(struct inode *inode)
|
static struct dentry *__d_find_alias(struct inode *inode)
|
||||||
{
|
{
|
||||||
struct dentry *alias;
|
struct dentry *alias;
|
||||||
|
@ -1029,6 +1016,20 @@ static struct dentry *__d_find_alias(struct inode *inode)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* d_find_alias - grab a hashed alias of inode
|
||||||
|
* @inode: inode in question
|
||||||
|
*
|
||||||
|
* If inode has a hashed alias, or is a directory and has any alias,
|
||||||
|
* acquire the reference to alias and return it. Otherwise return NULL.
|
||||||
|
* Notice that if inode is a directory there can be only one alias and
|
||||||
|
* it can be unhashed only if it has no children, or if it is the root
|
||||||
|
* of a filesystem, or if the directory was renamed and d_revalidate
|
||||||
|
* was the first vfs operation to notice.
|
||||||
|
*
|
||||||
|
* If the inode has an IS_ROOT, DCACHE_DISCONNECTED alias, then prefer
|
||||||
|
* any other hashed alias over that one.
|
||||||
|
*/
|
||||||
struct dentry *d_find_alias(struct inode *inode)
|
struct dentry *d_find_alias(struct inode *inode)
|
||||||
{
|
{
|
||||||
struct dentry *de = NULL;
|
struct dentry *de = NULL;
|
||||||
|
|
|
@ -1493,7 +1493,7 @@ struct inode *find_inode_rcu(struct super_block *sb, unsigned long hashval,
|
||||||
EXPORT_SYMBOL(find_inode_rcu);
|
EXPORT_SYMBOL(find_inode_rcu);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* find_inode_by_rcu - Find an inode in the inode cache
|
* find_inode_by_ino_rcu - Find an inode in the inode cache
|
||||||
* @sb: Super block of file system to search
|
* @sb: Super block of file system to search
|
||||||
* @ino: The inode number to match
|
* @ino: The inode number to match
|
||||||
*
|
*
|
||||||
|
@ -1777,7 +1777,7 @@ static int update_time(struct inode *inode, struct timespec64 *time, int flags)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* touch_atime - update the access time
|
* atime_needs_update - update the access time
|
||||||
* @path: the &struct path to update
|
* @path: the &struct path to update
|
||||||
* @inode: inode to update
|
* @inode: inode to update
|
||||||
*
|
*
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
#include "internal.h"
|
#include "internal.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* struct psz_head - header of zone to flush to storage
|
* struct psz_buffer - header of zone to flush to storage
|
||||||
*
|
*
|
||||||
* @sig: signature to indicate header (PSZ_SIG xor PSZONE-type value)
|
* @sig: signature to indicate header (PSZ_SIG xor PSZONE-type value)
|
||||||
* @datalen: length of data in @data
|
* @datalen: length of data in @data
|
||||||
|
|
|
@ -669,7 +669,8 @@ void seq_puts(struct seq_file *m, const char *s)
|
||||||
EXPORT_SYMBOL(seq_puts);
|
EXPORT_SYMBOL(seq_puts);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A helper routine for putting decimal numbers without rich format of printf().
|
* seq_put_decimal_ull_width - A helper routine for putting decimal numbers
|
||||||
|
* without rich format of printf().
|
||||||
* only 'unsigned long long' is supported.
|
* only 'unsigned long long' is supported.
|
||||||
* @m: seq_file identifying the buffer to which data should be written
|
* @m: seq_file identifying the buffer to which data should be written
|
||||||
* @delimiter: a string which is printed before the number
|
* @delimiter: a string which is printed before the number
|
||||||
|
@ -1044,7 +1045,7 @@ struct hlist_node *seq_hlist_next_rcu(void *v,
|
||||||
EXPORT_SYMBOL(seq_hlist_next_rcu);
|
EXPORT_SYMBOL(seq_hlist_next_rcu);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* seq_hlist_start_precpu - start an iteration of a percpu hlist array
|
* seq_hlist_start_percpu - start an iteration of a percpu hlist array
|
||||||
* @head: pointer to percpu array of struct hlist_heads
|
* @head: pointer to percpu array of struct hlist_heads
|
||||||
* @cpu: pointer to cpu "cursor"
|
* @cpu: pointer to cpu "cursor"
|
||||||
* @pos: start position of sequence
|
* @pos: start position of sequence
|
||||||
|
|
12
fs/super.c
12
fs/super.c
|
@ -1719,12 +1719,6 @@ int freeze_super(struct super_block *sb)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(freeze_super);
|
EXPORT_SYMBOL(freeze_super);
|
||||||
|
|
||||||
/**
|
|
||||||
* thaw_super -- unlock filesystem
|
|
||||||
* @sb: the super to thaw
|
|
||||||
*
|
|
||||||
* Unlocks the filesystem and marks it writeable again after freeze_super().
|
|
||||||
*/
|
|
||||||
static int thaw_super_locked(struct super_block *sb)
|
static int thaw_super_locked(struct super_block *sb)
|
||||||
{
|
{
|
||||||
int error;
|
int error;
|
||||||
|
@ -1760,6 +1754,12 @@ static int thaw_super_locked(struct super_block *sb)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* thaw_super -- unlock filesystem
|
||||||
|
* @sb: the super to thaw
|
||||||
|
*
|
||||||
|
* Unlocks the filesystem and marks it writeable again after freeze_super().
|
||||||
|
*/
|
||||||
int thaw_super(struct super_block *sb)
|
int thaw_super(struct super_block *sb)
|
||||||
{
|
{
|
||||||
down_write(&sb->s_umount);
|
down_write(&sb->s_umount);
|
||||||
|
|
|
@ -99,7 +99,7 @@ void cn_del_callback(const struct cb_id *id);
|
||||||
int cn_netlink_send_mult(struct cn_msg *msg, u16 len, u32 portid, u32 group, gfp_t gfp_mask);
|
int cn_netlink_send_mult(struct cn_msg *msg, u16 len, u32 portid, u32 group, gfp_t gfp_mask);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* cn_netlink_send_mult - Sends message to the specified groups.
|
* cn_netlink_send - Sends message to the specified groups.
|
||||||
*
|
*
|
||||||
* @msg: message header(with attached data).
|
* @msg: message header(with attached data).
|
||||||
* @portid: destination port.
|
* @portid: destination port.
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
#ifndef __STRATIX10_SVC_CLIENT_H
|
#ifndef __STRATIX10_SVC_CLIENT_H
|
||||||
#define __STRATIX10_SVC_CLIENT_H
|
#define __STRATIX10_SVC_CLIENT_H
|
||||||
|
|
||||||
/**
|
/*
|
||||||
* Service layer driver supports client names
|
* Service layer driver supports client names
|
||||||
*
|
*
|
||||||
* fpga: for FPGA configuration
|
* fpga: for FPGA configuration
|
||||||
|
@ -15,7 +15,7 @@
|
||||||
#define SVC_CLIENT_FPGA "fpga"
|
#define SVC_CLIENT_FPGA "fpga"
|
||||||
#define SVC_CLIENT_RSU "rsu"
|
#define SVC_CLIENT_RSU "rsu"
|
||||||
|
|
||||||
/**
|
/*
|
||||||
* Status of the sent command, in bit number
|
* Status of the sent command, in bit number
|
||||||
*
|
*
|
||||||
* SVC_STATUS_OK:
|
* SVC_STATUS_OK:
|
||||||
|
@ -50,7 +50,7 @@
|
||||||
#define SVC_STATUS_ERROR 5
|
#define SVC_STATUS_ERROR 5
|
||||||
#define SVC_STATUS_NO_SUPPORT 6
|
#define SVC_STATUS_NO_SUPPORT 6
|
||||||
|
|
||||||
/**
|
/*
|
||||||
* Flag bit for COMMAND_RECONFIG
|
* Flag bit for COMMAND_RECONFIG
|
||||||
*
|
*
|
||||||
* COMMAND_RECONFIG_FLAG_PARTIAL:
|
* COMMAND_RECONFIG_FLAG_PARTIAL:
|
||||||
|
@ -58,7 +58,7 @@
|
||||||
*/
|
*/
|
||||||
#define COMMAND_RECONFIG_FLAG_PARTIAL 1
|
#define COMMAND_RECONFIG_FLAG_PARTIAL 1
|
||||||
|
|
||||||
/**
|
/*
|
||||||
* Timeout settings for service clients:
|
* Timeout settings for service clients:
|
||||||
* timeout value used in Stratix10 FPGA manager driver.
|
* timeout value used in Stratix10 FPGA manager driver.
|
||||||
* timeout value used in RSU driver
|
* timeout value used in RSU driver
|
||||||
|
@ -218,7 +218,7 @@ void stratix10_svc_free_memory(struct stratix10_svc_chan *chan, void *kaddr);
|
||||||
int stratix10_svc_send(struct stratix10_svc_chan *chan, void *msg);
|
int stratix10_svc_send(struct stratix10_svc_chan *chan, void *msg);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* intel_svc_done() - complete service request
|
* stratix10_svc_done() - complete service request
|
||||||
* @chan: service channel assigned to the client
|
* @chan: service channel assigned to the client
|
||||||
*
|
*
|
||||||
* This function is used by service client to inform service layer that
|
* This function is used by service client to inform service layer that
|
||||||
|
|
|
@ -272,7 +272,7 @@ void __next_mem_pfn_range_in_zone(u64 *idx, struct zone *zone,
|
||||||
unsigned long *out_spfn,
|
unsigned long *out_spfn,
|
||||||
unsigned long *out_epfn);
|
unsigned long *out_epfn);
|
||||||
/**
|
/**
|
||||||
* for_each_free_mem_range_in_zone - iterate through zone specific free
|
* for_each_free_mem_pfn_range_in_zone - iterate through zone specific free
|
||||||
* memblock areas
|
* memblock areas
|
||||||
* @i: u64 used as loop variable
|
* @i: u64 used as loop variable
|
||||||
* @zone: zone in which all of the memory blocks reside
|
* @zone: zone in which all of the memory blocks reside
|
||||||
|
@ -292,7 +292,7 @@ void __next_mem_pfn_range_in_zone(u64 *idx, struct zone *zone,
|
||||||
__next_mem_pfn_range_in_zone(&i, zone, p_start, p_end))
|
__next_mem_pfn_range_in_zone(&i, zone, p_start, p_end))
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* for_each_free_mem_range_in_zone_from - iterate through zone specific
|
* for_each_free_mem_pfn_range_in_zone_from - iterate through zone specific
|
||||||
* free memblock areas from a given point
|
* free memblock areas from a given point
|
||||||
* @i: u64 used as loop variable
|
* @i: u64 used as loop variable
|
||||||
* @zone: zone in which all of the memory blocks reside
|
* @zone: zone in which all of the memory blocks reside
|
||||||
|
|
|
@ -297,6 +297,37 @@ int __must_check __parport_register_driver(struct parport_driver *,
|
||||||
* parport_register_driver must be a macro so that KBUILD_MODNAME can
|
* parport_register_driver must be a macro so that KBUILD_MODNAME can
|
||||||
* be expanded
|
* be expanded
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parport_register_driver - register a parallel port device driver
|
||||||
|
* @driver: structure describing the driver
|
||||||
|
*
|
||||||
|
* This can be called by a parallel port device driver in order
|
||||||
|
* to receive notifications about ports being found in the
|
||||||
|
* system, as well as ports no longer available.
|
||||||
|
*
|
||||||
|
* If devmodel is true then the new device model is used
|
||||||
|
* for registration.
|
||||||
|
*
|
||||||
|
* The @driver structure is allocated by the caller and must not be
|
||||||
|
* deallocated until after calling parport_unregister_driver().
|
||||||
|
*
|
||||||
|
* If using the non device model:
|
||||||
|
* The driver's attach() function may block. The port that
|
||||||
|
* attach() is given will be valid for the duration of the
|
||||||
|
* callback, but if the driver wants to take a copy of the
|
||||||
|
* pointer it must call parport_get_port() to do so. Calling
|
||||||
|
* parport_register_device() on that port will do this for you.
|
||||||
|
*
|
||||||
|
* The driver's detach() function may block. The port that
|
||||||
|
* detach() is given will be valid for the duration of the
|
||||||
|
* callback, but if the driver wants to take a copy of the
|
||||||
|
* pointer it must call parport_get_port() to do so.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* Returns 0 on success. The non device model will always succeeds.
|
||||||
|
* but the new device model can fail and will return the error code.
|
||||||
|
**/
|
||||||
#define parport_register_driver(driver) \
|
#define parport_register_driver(driver) \
|
||||||
__parport_register_driver(driver, THIS_MODULE, KBUILD_MODNAME)
|
__parport_register_driver(driver, THIS_MODULE, KBUILD_MODNAME)
|
||||||
|
|
||||||
|
|
|
@ -280,7 +280,7 @@ int w1_register_family(struct w1_family *family);
|
||||||
void w1_unregister_family(struct w1_family *family);
|
void w1_unregister_family(struct w1_family *family);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* module_w1_driver() - Helper macro for registering a 1-Wire families
|
* module_w1_family() - Helper macro for registering a 1-Wire families
|
||||||
* @__w1_family: w1_family struct
|
* @__w1_family: w1_family struct
|
||||||
*
|
*
|
||||||
* Helper macro for 1-Wire families which do not do anything special in module
|
* Helper macro for 1-Wire families which do not do anything special in module
|
||||||
|
|
|
@ -51,7 +51,7 @@ const u8 crc7_be_syndrome_table[256] = {
|
||||||
EXPORT_SYMBOL(crc7_be_syndrome_table);
|
EXPORT_SYMBOL(crc7_be_syndrome_table);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* crc7 - update the CRC7 for the data buffer
|
* crc7_be - update the CRC7 for the data buffer
|
||||||
* @crc: previous CRC7 value
|
* @crc: previous CRC7 value
|
||||||
* @buffer: data pointer
|
* @buffer: data pointer
|
||||||
* @len: number of bytes in the buffer
|
* @len: number of bytes in the buffer
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
// SPDX-License-Identifier: GPL-2.0-only
|
// SPDX-License-Identifier: GPL-2.0-only
|
||||||
/*
|
/*
|
||||||
* NOTE: This example is works on x86 and powerpc.
|
|
||||||
* Here's a sample kernel module showing the use of kprobes to dump a
|
* Here's a sample kernel module showing the use of kprobes to dump a
|
||||||
* stack trace and selected registers when kernel_clone() is called.
|
* stack trace and selected registers when kernel_clone() is called.
|
||||||
*
|
*
|
||||||
|
@ -44,6 +43,10 @@ static int __kprobes handler_pre(struct kprobe *p, struct pt_regs *regs)
|
||||||
" pstate = 0x%lx\n",
|
" pstate = 0x%lx\n",
|
||||||
p->symbol_name, p->addr, (long)regs->pc, (long)regs->pstate);
|
p->symbol_name, p->addr, (long)regs->pc, (long)regs->pstate);
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef CONFIG_ARM
|
||||||
|
pr_info("<%s> pre_handler: p->addr = 0x%p, pc = 0x%lx, cpsr = 0x%lx\n",
|
||||||
|
p->symbol_name, p->addr, (long)regs->ARM_pc, (long)regs->ARM_cpsr);
|
||||||
|
#endif
|
||||||
#ifdef CONFIG_S390
|
#ifdef CONFIG_S390
|
||||||
pr_info("<%s> pre_handler: p->addr, 0x%p, ip = 0x%lx, flags = 0x%lx\n",
|
pr_info("<%s> pre_handler: p->addr, 0x%p, ip = 0x%lx, flags = 0x%lx\n",
|
||||||
p->symbol_name, p->addr, regs->psw.addr, regs->flags);
|
p->symbol_name, p->addr, regs->psw.addr, regs->flags);
|
||||||
|
@ -73,6 +76,10 @@ static void __kprobes handler_post(struct kprobe *p, struct pt_regs *regs,
|
||||||
pr_info("<%s> post_handler: p->addr = 0x%p, pstate = 0x%lx\n",
|
pr_info("<%s> post_handler: p->addr = 0x%p, pstate = 0x%lx\n",
|
||||||
p->symbol_name, p->addr, (long)regs->pstate);
|
p->symbol_name, p->addr, (long)regs->pstate);
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef CONFIG_ARM
|
||||||
|
pr_info("<%s> post_handler: p->addr = 0x%p, cpsr = 0x%lx\n",
|
||||||
|
p->symbol_name, p->addr, (long)regs->ARM_cpsr);
|
||||||
|
#endif
|
||||||
#ifdef CONFIG_S390
|
#ifdef CONFIG_S390
|
||||||
pr_info("<%s> pre_handler: p->addr, 0x%p, flags = 0x%lx\n",
|
pr_info("<%s> pre_handler: p->addr, 0x%p, flags = 0x%lx\n",
|
||||||
p->symbol_name, p->addr, regs->flags);
|
p->symbol_name, p->addr, regs->flags);
|
||||||
|
|
|
@ -382,6 +382,9 @@ my $inline_doc_state;
|
||||||
# 'function', 'struct', 'union', 'enum', 'typedef'
|
# 'function', 'struct', 'union', 'enum', 'typedef'
|
||||||
my $decl_type;
|
my $decl_type;
|
||||||
|
|
||||||
|
# Name of the kernel-doc identifier for non-DOC markups
|
||||||
|
my $identifier;
|
||||||
|
|
||||||
my $doc_start = '^/\*\*\s*$'; # Allow whitespace at end of comment start.
|
my $doc_start = '^/\*\*\s*$'; # Allow whitespace at end of comment start.
|
||||||
my $doc_end = '\*/';
|
my $doc_end = '\*/';
|
||||||
my $doc_com = '\s*\*\s*';
|
my $doc_com = '\s*\*\s*';
|
||||||
|
@ -833,6 +836,7 @@ sub output_blockhead_rst(%) {
|
||||||
next if (defined($nosymbol_table{$section}));
|
next if (defined($nosymbol_table{$section}));
|
||||||
|
|
||||||
if ($output_selection != OUTPUT_INCLUDE) {
|
if ($output_selection != OUTPUT_INCLUDE) {
|
||||||
|
print ".. _$section:\n\n";
|
||||||
print "**$section**\n\n";
|
print "**$section**\n\n";
|
||||||
}
|
}
|
||||||
print_lineno($section_start_lines{$section});
|
print_lineno($section_start_lines{$section});
|
||||||
|
@ -1203,6 +1207,11 @@ sub dump_struct($$) {
|
||||||
$declaration_name = $2;
|
$declaration_name = $2;
|
||||||
my $members = $3;
|
my $members = $3;
|
||||||
|
|
||||||
|
if ($identifier ne $declaration_name) {
|
||||||
|
print STDERR "${file}:$.: warning: expecting prototype for $decl_type $identifier. Prototype was for $decl_type $declaration_name instead\n";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
# ignore members marked private:
|
# ignore members marked private:
|
||||||
$members =~ s/\/\*\s*private:.*?\/\*\s*public:.*?\*\///gosi;
|
$members =~ s/\/\*\s*private:.*?\/\*\s*public:.*?\*\///gosi;
|
||||||
$members =~ s/\/\*\s*private:.*//gosi;
|
$members =~ s/\/\*\s*private:.*//gosi;
|
||||||
|
@ -1391,6 +1400,11 @@ sub dump_enum($$) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($members) {
|
if ($members) {
|
||||||
|
if ($identifier ne $declaration_name) {
|
||||||
|
print STDERR "${file}:$.: warning: expecting prototype for enum $identifier. Prototype was for enum $declaration_name instead\n";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
my %_members;
|
my %_members;
|
||||||
|
|
||||||
$members =~ s/\s+$//;
|
$members =~ s/\s+$//;
|
||||||
|
@ -1451,6 +1465,11 @@ sub dump_typedef($$) {
|
||||||
my $args = $3;
|
my $args = $3;
|
||||||
$return_type =~ s/^\s+//;
|
$return_type =~ s/^\s+//;
|
||||||
|
|
||||||
|
if ($identifier ne $declaration_name) {
|
||||||
|
print STDERR "${file}:$.: warning: expecting prototype for typedef $identifier. Prototype was for typedef $declaration_name instead\n";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
create_parameterlist($args, ',', $file, $declaration_name);
|
create_parameterlist($args, ',', $file, $declaration_name);
|
||||||
|
|
||||||
output_declaration($declaration_name,
|
output_declaration($declaration_name,
|
||||||
|
@ -1477,6 +1496,11 @@ sub dump_typedef($$) {
|
||||||
if ($x =~ /typedef.*\s+(\w+)\s*;/) {
|
if ($x =~ /typedef.*\s+(\w+)\s*;/) {
|
||||||
$declaration_name = $1;
|
$declaration_name = $1;
|
||||||
|
|
||||||
|
if ($identifier ne $declaration_name) {
|
||||||
|
print STDERR "${file}:$.: warning: expecting prototype for typedef $identifier. Prototype was for typedef $declaration_name instead\n";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
output_declaration($declaration_name,
|
output_declaration($declaration_name,
|
||||||
'typedef',
|
'typedef',
|
||||||
{'typedef' => $declaration_name,
|
{'typedef' => $declaration_name,
|
||||||
|
@ -1796,6 +1820,11 @@ sub dump_function($$) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($identifier ne $declaration_name) {
|
||||||
|
print STDERR "${file}:$.: warning: expecting prototype for $identifier(). Prototype was for $declaration_name() instead\n";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
my $prms = join " ", @parameterlist;
|
my $prms = join " ", @parameterlist;
|
||||||
check_sections($file, $declaration_name, "function", $sectcheck, $prms);
|
check_sections($file, $declaration_name, "function", $sectcheck, $prms);
|
||||||
|
|
||||||
|
@ -1878,6 +1907,7 @@ sub tracepoint_munge($) {
|
||||||
"$prototype\n";
|
"$prototype\n";
|
||||||
} else {
|
} else {
|
||||||
$prototype = "static inline void trace_$tracepointname($tracepointargs)";
|
$prototype = "static inline void trace_$tracepointname($tracepointargs)";
|
||||||
|
$identifier = "trace_$identifier";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2041,7 +2071,6 @@ sub process_normal() {
|
||||||
#
|
#
|
||||||
sub process_name($$) {
|
sub process_name($$) {
|
||||||
my $file = shift;
|
my $file = shift;
|
||||||
my $identifier;
|
|
||||||
my $descr;
|
my $descr;
|
||||||
|
|
||||||
if (/$doc_block/o) {
|
if (/$doc_block/o) {
|
||||||
|
@ -2054,12 +2083,19 @@ sub process_name($$) {
|
||||||
} else {
|
} else {
|
||||||
$section = $1;
|
$section = $1;
|
||||||
}
|
}
|
||||||
}
|
} elsif (/$doc_decl/o) {
|
||||||
elsif (/$doc_decl/o) {
|
|
||||||
$identifier = $1;
|
$identifier = $1;
|
||||||
if (/\s*([\w\s]+?)(\(\))?\s*-/) {
|
if (/\s*([\w\s]+?)(\(\))?\s*([-:].*)?$/) {
|
||||||
$identifier = $1;
|
$identifier = $1;
|
||||||
}
|
}
|
||||||
|
if ($identifier =~ m/^(struct|union|enum|typedef)\b\s*(\S*)/) {
|
||||||
|
$decl_type = $1;
|
||||||
|
$identifier = $2;
|
||||||
|
} else {
|
||||||
|
$decl_type = 'function';
|
||||||
|
$identifier =~ s/^define\s+//;
|
||||||
|
}
|
||||||
|
$identifier =~ s/\s+$//;
|
||||||
|
|
||||||
$state = STATE_BODY;
|
$state = STATE_BODY;
|
||||||
# if there's no @param blocks need to set up default section
|
# if there's no @param blocks need to set up default section
|
||||||
|
@ -2067,7 +2103,7 @@ sub process_name($$) {
|
||||||
$contents = "";
|
$contents = "";
|
||||||
$section = $section_default;
|
$section = $section_default;
|
||||||
$new_start_line = $. + 1;
|
$new_start_line = $. + 1;
|
||||||
if (/-(.*)/) {
|
if (/[-:](.*)/) {
|
||||||
# strip leading/trailing/multiple spaces
|
# strip leading/trailing/multiple spaces
|
||||||
$descr= $1;
|
$descr= $1;
|
||||||
$descr =~ s/^\s*//;
|
$descr =~ s/^\s*//;
|
||||||
|
@ -2085,20 +2121,15 @@ sub process_name($$) {
|
||||||
++$warnings;
|
++$warnings;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($identifier =~ m/^struct\b/) {
|
if ($identifier eq "") {
|
||||||
$decl_type = 'struct';
|
print STDERR "${file}:$.: warning: wrong kernel-doc identifier on line:\n";
|
||||||
} elsif ($identifier =~ m/^union\b/) {
|
print STDERR $_;
|
||||||
$decl_type = 'union';
|
++$warnings;
|
||||||
} elsif ($identifier =~ m/^enum\b/) {
|
$state = STATE_NORMAL;
|
||||||
$decl_type = 'enum';
|
|
||||||
} elsif ($identifier =~ m/^typedef\b/) {
|
|
||||||
$decl_type = 'typedef';
|
|
||||||
} else {
|
|
||||||
$decl_type = 'function';
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($verbose) {
|
if ($verbose) {
|
||||||
print STDERR "${file}:$.: info: Scanning doc for $identifier\n";
|
print STDERR "${file}:$.: info: Scanning doc for $decl_type $identifier\n";
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
print STDERR "${file}:$.: warning: Cannot understand $_ on line $.",
|
print STDERR "${file}:$.: warning: Cannot understand $_ on line $.",
|
||||||
|
|
|
@ -728,8 +728,8 @@ sub check_needs()
|
||||||
$need_virtualenv = 1;
|
$need_virtualenv = 1;
|
||||||
}
|
}
|
||||||
if ($1 < 3) {
|
if ($1 < 3) {
|
||||||
# Complain if it finds python2 (or worse)
|
# Fail if it finds python2 (or worse)
|
||||||
printf "Warning: python$1 support is deprecated. Use it with caution!\n";
|
die "Python 3 is required to build the kernel docs\n";
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
die "Warning: couldn't identify $python_cmd version!";
|
die "Warning: couldn't identify $python_cmd version!";
|
||||||
|
|
|
@ -79,7 +79,7 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TH_LOG(fmt, ...)
|
* TH_LOG()
|
||||||
*
|
*
|
||||||
* @fmt: format string
|
* @fmt: format string
|
||||||
* @...: optional arguments
|
* @...: optional arguments
|
||||||
|
@ -113,12 +113,16 @@
|
||||||
__FILE__, __LINE__, _metadata->name, ##__VA_ARGS__)
|
__FILE__, __LINE__, _metadata->name, ##__VA_ARGS__)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* SKIP(statement, fmt, ...)
|
* SKIP()
|
||||||
*
|
*
|
||||||
* @statement: statement to run after reporting SKIP
|
* @statement: statement to run after reporting SKIP
|
||||||
* @fmt: format string
|
* @fmt: format string
|
||||||
* @...: optional arguments
|
* @...: optional arguments
|
||||||
*
|
*
|
||||||
|
* .. code-block:: c
|
||||||
|
*
|
||||||
|
* SKIP(statement, fmt, ...);
|
||||||
|
*
|
||||||
* This forces a "pass" after reporting why something is being skipped
|
* This forces a "pass" after reporting why something is being skipped
|
||||||
* and runs "statement", which is usually "return" or "goto skip".
|
* and runs "statement", which is usually "return" or "goto skip".
|
||||||
*/
|
*/
|
||||||
|
@ -136,7 +140,7 @@
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TEST(test_name) - Defines the test function and creates the registration
|
* TEST() - Defines the test function and creates the registration
|
||||||
* stub
|
* stub
|
||||||
*
|
*
|
||||||
* @test_name: test name
|
* @test_name: test name
|
||||||
|
@ -155,7 +159,7 @@
|
||||||
#define TEST(test_name) __TEST_IMPL(test_name, -1)
|
#define TEST(test_name) __TEST_IMPL(test_name, -1)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TEST_SIGNAL(test_name, signal)
|
* TEST_SIGNAL()
|
||||||
*
|
*
|
||||||
* @test_name: test name
|
* @test_name: test name
|
||||||
* @signal: signal number
|
* @signal: signal number
|
||||||
|
@ -195,7 +199,7 @@
|
||||||
struct __test_metadata __attribute__((unused)) *_metadata)
|
struct __test_metadata __attribute__((unused)) *_metadata)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* FIXTURE_DATA(datatype_name) - Wraps the struct name so we have one less
|
* FIXTURE_DATA() - Wraps the struct name so we have one less
|
||||||
* argument to pass around
|
* argument to pass around
|
||||||
*
|
*
|
||||||
* @datatype_name: datatype name
|
* @datatype_name: datatype name
|
||||||
|
@ -212,7 +216,7 @@
|
||||||
#define FIXTURE_DATA(datatype_name) struct _test_data_##datatype_name
|
#define FIXTURE_DATA(datatype_name) struct _test_data_##datatype_name
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* FIXTURE(fixture_name) - Called once per fixture to setup the data and
|
* FIXTURE() - Called once per fixture to setup the data and
|
||||||
* register
|
* register
|
||||||
*
|
*
|
||||||
* @fixture_name: fixture name
|
* @fixture_name: fixture name
|
||||||
|
@ -239,7 +243,7 @@
|
||||||
FIXTURE_DATA(fixture_name)
|
FIXTURE_DATA(fixture_name)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* FIXTURE_SETUP(fixture_name) - Prepares the setup function for the fixture.
|
* FIXTURE_SETUP() - Prepares the setup function for the fixture.
|
||||||
* *_metadata* is included so that EXPECT_* and ASSERT_* work correctly.
|
* *_metadata* is included so that EXPECT_* and ASSERT_* work correctly.
|
||||||
*
|
*
|
||||||
* @fixture_name: fixture name
|
* @fixture_name: fixture name
|
||||||
|
@ -265,7 +269,7 @@
|
||||||
__attribute__((unused)) *variant)
|
__attribute__((unused)) *variant)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* FIXTURE_TEARDOWN(fixture_name)
|
* FIXTURE_TEARDOWN()
|
||||||
* *_metadata* is included so that EXPECT_* and ASSERT_* work correctly.
|
* *_metadata* is included so that EXPECT_* and ASSERT_* work correctly.
|
||||||
*
|
*
|
||||||
* @fixture_name: fixture name
|
* @fixture_name: fixture name
|
||||||
|
@ -286,7 +290,7 @@
|
||||||
FIXTURE_DATA(fixture_name) __attribute__((unused)) *self)
|
FIXTURE_DATA(fixture_name) __attribute__((unused)) *self)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* FIXTURE_VARIANT(fixture_name) - Optionally called once per fixture
|
* FIXTURE_VARIANT() - Optionally called once per fixture
|
||||||
* to declare fixture variant
|
* to declare fixture variant
|
||||||
*
|
*
|
||||||
* @fixture_name: fixture name
|
* @fixture_name: fixture name
|
||||||
|
@ -305,7 +309,7 @@
|
||||||
#define FIXTURE_VARIANT(fixture_name) struct _fixture_variant_##fixture_name
|
#define FIXTURE_VARIANT(fixture_name) struct _fixture_variant_##fixture_name
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* FIXTURE_VARIANT_ADD(fixture_name, variant_name) - Called once per fixture
|
* FIXTURE_VARIANT_ADD() - Called once per fixture
|
||||||
* variant to setup and register the data
|
* variant to setup and register the data
|
||||||
*
|
*
|
||||||
* @fixture_name: fixture name
|
* @fixture_name: fixture name
|
||||||
|
@ -339,7 +343,7 @@
|
||||||
_##fixture_name##_##variant_name##_variant =
|
_##fixture_name##_##variant_name##_variant =
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TEST_F(fixture_name, test_name) - Emits test registration and helpers for
|
* TEST_F() - Emits test registration and helpers for
|
||||||
* fixture-based test cases
|
* fixture-based test cases
|
||||||
*
|
*
|
||||||
* @fixture_name: fixture name
|
* @fixture_name: fixture name
|
||||||
|
|
Loading…
Reference in a new issue