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:
Коммит
0e63a5c6ba
|
@ -683,7 +683,7 @@ Orran Krieger and Rusty Russell and Dipankar Sarma and Maneesh Soni"
|
|||
,month="October"
|
||||
,year="2001"
|
||||
,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]"
|
||||
,annotation={
|
||||
}
|
||||
|
@ -826,7 +826,7 @@ Symposium on Distributed Computing}
|
|||
,month="October"
|
||||
,year="2002"
|
||||
,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]"
|
||||
,annotation={
|
||||
Mingming Cao's patch to introduce RCU to SysV IPC.
|
||||
|
@ -839,7 +839,7 @@ Symposium on Distributed Computing}
|
|||
,month="March"
|
||||
,year="2003"
|
||||
,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]"
|
||||
,annotation={
|
||||
Linus suggests replacing brlock with RCU and/or seqlocks:
|
||||
|
@ -1036,15 +1036,15 @@ Add per-cpu batch counter"
|
|||
,annotation={
|
||||
RCU runs reasonably on a 512-CPU SGI using Manfred Spraul's patches,
|
||||
which may be found at:
|
||||
https://lkml.org/lkml/2004/5/20/49 (split vars into cachelines)
|
||||
https://lkml.org/lkml/2004/5/22/114 (cpu_quiet() patch)
|
||||
https://lkml.org/lkml/2004/5/25/24 (0/5)
|
||||
https://lkml.org/lkml/2004/5/25/23 (1/5)
|
||||
https://lkml.org/lkml/2004/5/25/265 (works for Jack)
|
||||
https://lkml.org/lkml/2004/5/25/20 (2/5)
|
||||
https://lkml.org/lkml/2004/5/25/22 (3/5)
|
||||
https://lkml.org/lkml/2004/5/25/19 (4/5)
|
||||
https://lkml.org/lkml/2004/5/25/21 (5/5)
|
||||
https://lore.kernel.org/r/40AC9823.6020709@colorfullife.com (split vars into cachelines)
|
||||
https://lore.kernel.org/r/Pine.LNX.4.44.0405222141260.11106-100000@dbl.q-ag.de (cpu_quiet() patch)
|
||||
https://lore.kernel.org/r/200405250535.i4P5ZJo8017583@dbl.q-ag.de (0/5)
|
||||
https://lore.kernel.org/r/200405250535.i4P5ZKAQ017591@dbl.q-ag.de (1/5)
|
||||
https://lore.kernel.org/r/20040525203215.GB5127@sgi.com (works for Jack)
|
||||
https://lore.kernel.org/r/200405250535.i4P5ZLiR017599@dbl.q-ag.de (2/5)
|
||||
https://lore.kernel.org/r/200405250535.i4P5ZMFt017607@dbl.q-ag.de (3/5)
|
||||
https://lore.kernel.org/r/200405250535.i4P5ZN6g017615@dbl.q-ag.de (4/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"
|
||||
,year="2004"
|
||||
,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]"
|
||||
,annotation={
|
||||
Introduce rcu_dereference().
|
||||
|
@ -1119,7 +1119,7 @@ Oregon Health and Sciences University"
|
|||
,month="August"
|
||||
,year="2004"
|
||||
,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]"
|
||||
,annotation={
|
||||
Uses active code in rcu_read_lock() and rcu_read_unlock() to
|
||||
|
@ -1186,7 +1186,7 @@ Oregon Health and Sciences University"
|
|||
,month="October"
|
||||
,year="2004"
|
||||
,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]"
|
||||
,annotation={
|
||||
Introduce rcu_assign_pointer().
|
||||
|
@ -1203,7 +1203,7 @@ Oregon Health and Sciences University"
|
|||
,annotation={
|
||||
James Morris posts Kaigai Kohei's patch to LKML.
|
||||
[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"
|
||||
,day="17"
|
||||
,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]"
|
||||
,annotation={
|
||||
First posting showing how RCU can be safely adapted for
|
||||
|
@ -1256,7 +1256,7 @@ Oregon Health and Sciences University"
|
|||
,year="2005"
|
||||
,day="18"
|
||||
,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]"
|
||||
,annotation={
|
||||
Esben Neilsen suggests read-side suppression of grace-period
|
||||
|
@ -1302,7 +1302,7 @@ Data Structures"
|
|||
,month="May"
|
||||
,year="2005"
|
||||
,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]"
|
||||
,annotation={
|
||||
First publication of working lock-based deferred free patches
|
||||
|
@ -1385,7 +1385,7 @@ Data Structures"
|
|||
,day="1"
|
||||
,year="2005"
|
||||
,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]"
|
||||
,annotation={
|
||||
First operating counter-based realtime RCU patch posted to LKML.
|
||||
|
@ -1399,7 +1399,7 @@ Data Structures"
|
|||
,day="8"
|
||||
,year="2005"
|
||||
,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]"
|
||||
,annotation={
|
||||
First operating counter-based realtime RCU patch posted to LKML,
|
||||
|
@ -1415,7 +1415,7 @@ Data Structures"
|
|||
,day="1"
|
||||
,year="2005"
|
||||
,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]"
|
||||
,annotation={
|
||||
First rcutorture patch.
|
||||
|
@ -1429,7 +1429,7 @@ Data Structures"
|
|||
,day="6"
|
||||
,year="2006"
|
||||
,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]"
|
||||
,annotation={
|
||||
David Miller's view on hashed arrays of locks: used to really
|
||||
|
@ -1464,7 +1464,7 @@ Distributed Processing Symposium"
|
|||
,day="20"
|
||||
,year="2006"
|
||||
,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]"
|
||||
,annotation={
|
||||
RCU-protected radix tree.
|
||||
|
@ -1554,7 +1554,7 @@ Revised:
|
|||
,day="28"
|
||||
,year="2006"
|
||||
,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]"
|
||||
}
|
||||
|
||||
|
@ -1593,7 +1593,7 @@ Revised:
|
|||
,year="2006"
|
||||
,day=26
|
||||
,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]"
|
||||
,annotation={
|
||||
RCU-based reader-writer lock that allows readers to proceed with
|
||||
|
@ -1612,12 +1612,12 @@ Revised:
|
|||
,year="2006"
|
||||
,day=17
|
||||
,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]"
|
||||
,annotation={
|
||||
SRCU's grace periods are too slow for Jens, even after a
|
||||
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"
|
||||
,day=19
|
||||
,note="Available:
|
||||
\url{http://lkml.org/lkml/2006/11/19/69}
|
||||
\url{https://lore.kernel.org/r/20061119190027.GA3676@oleg}
|
||||
[Viewed May 28, 2007]"
|
||||
,annotation={
|
||||
First cut of QRCU. Expanded/corrected versions followed.
|
||||
|
@ -1644,7 +1644,7 @@ Revised:
|
|||
,year="2006"
|
||||
,day=30
|
||||
,note="Available:
|
||||
\url{http://lkml.org/lkml/2006/11/29/330}
|
||||
\url{https://lore.kernel.org/r/20061130015714.GC1350@oleg}
|
||||
[Viewed November 26, 2008]"
|
||||
,annotation={
|
||||
Expanded/corrected version of QRCU.
|
||||
|
@ -1709,7 +1709,7 @@ Revised:
|
|||
,year="2007"
|
||||
,day=3
|
||||
,note="Available:
|
||||
\url{http://lkml.org/lkml/2007/1/3/112}
|
||||
\url{https://lore.kernel.org/r/20070103152738.GA16063@localdomain}
|
||||
[Viewed May 28, 2007]"
|
||||
,annotation={
|
||||
Patch for list_splice_rcu().
|
||||
|
@ -1737,7 +1737,7 @@ Revised:
|
|||
,year="2007"
|
||||
,day=28
|
||||
,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]"
|
||||
,annotation={
|
||||
RCU-like implementation for frequent updaters and rare readers(!).
|
||||
|
@ -1767,7 +1767,7 @@ Revised:
|
|||
,year="2007"
|
||||
,day=24
|
||||
,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]"
|
||||
,annotation={
|
||||
Patch for QRCU supplying lock-free fast path.
|
||||
|
@ -1846,7 +1846,7 @@ Revised:
|
|||
,annotation={
|
||||
LWN article describing Promela and spin, and also using Oleg
|
||||
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"
|
||||
,year="2007"
|
||||
,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]"
|
||||
,annotation={
|
||||
Final patch for preemptable RCU to -rt. (Later patches were
|
||||
|
@ -1933,7 +1933,7 @@ Revised:
|
|||
,day="20"
|
||||
,year="2007"
|
||||
,note="Available:
|
||||
\url{http://lkml.org/lkml/2007/12/20/244}
|
||||
\url{https://lore.kernel.org/r/20071220142540.GB22523@Krystal}
|
||||
[Viewed March 27, 2008]"
|
||||
,annotation={
|
||||
Request for call_rcu_sched() and rcu_barrier_sched().
|
||||
|
@ -2013,7 +2013,7 @@ Revised:
|
|||
,day="29"
|
||||
,year="2008"
|
||||
,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]"
|
||||
,annotation={
|
||||
Patch that prevents preemptible RCU from unnecessarily waking
|
||||
|
@ -2028,7 +2028,7 @@ Revised:
|
|||
,day="1"
|
||||
,year="2008"
|
||||
,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]"
|
||||
,annotation={
|
||||
Explanation of compilers violating dependency ordering.
|
||||
|
@ -2088,7 +2088,7 @@ lot of {Linux} into your technology!!!"
|
|||
,day="3"
|
||||
,year="2008"
|
||||
,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]"
|
||||
,annotation={
|
||||
Updated RCU classic algorithm. Introduced multi-tailed list
|
||||
|
@ -2122,7 +2122,7 @@ lot of {Linux} into your technology!!!"
|
|||
,day="21"
|
||||
,year="2008"
|
||||
,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]"
|
||||
,annotation={
|
||||
State-based RCU. One key thing that this patch does is to
|
||||
|
@ -2137,7 +2137,7 @@ lot of {Linux} into your technology!!!"
|
|||
,day="6"
|
||||
,year="2008"
|
||||
,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]"
|
||||
,annotation={
|
||||
Manfred notes a fix required to my attempt to separate irq
|
||||
|
@ -2183,7 +2183,7 @@ lot of {Linux} into your technology!!!"
|
|||
,day="14"
|
||||
,year="2009"
|
||||
,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]"
|
||||
,annotation={
|
||||
Small-footprint implementation of RCU for uniprocessor
|
||||
|
@ -2218,7 +2218,7 @@ lot of {Linux} into your technology!!!"
|
|||
git://lttng.org/userspace-rcu.git
|
||||
http://lttng.org/cgi-bin/gitweb.cgi?p=userspace-rcu.git
|
||||
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"
|
||||
,year="2009"
|
||||
,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]"
|
||||
,annotation={
|
||||
First posting of expedited RCU to be accepted into -tip.
|
||||
|
@ -2272,7 +2272,7 @@ lot of {Linux} into your technology!!!"
|
|||
,day="23"
|
||||
,year="2009"
|
||||
,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]"
|
||||
,annotation={
|
||||
First posting of simple and fast preemptable RCU.
|
||||
|
@ -2350,7 +2350,7 @@ lot of {Linux} into your technology!!!"
|
|||
,month="December"
|
||||
,year="2009"
|
||||
,note="Available:
|
||||
\url{http://lkml.org/lkml/2009/10/18/129}
|
||||
\url{https://lore.kernel.org/r/20091018232918.GA7385@Krystal}
|
||||
[Viewed December 29, 2009]"
|
||||
,annotation={
|
||||
Mathieu proposed defer_rcu() with fixed-size per-thread pool
|
||||
|
@ -2518,7 +2518,7 @@ lot of {Linux} into your technology!!!"
|
|||
,month="January"
|
||||
,year="2011"
|
||||
,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]"
|
||||
,annotation={
|
||||
"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
|
||||
http://lkml.org/lkml/2007/4/11/187 and implements per cgroup statistics as
|
||||
suggested by Andrew Morton in http://lkml.org/lkml/2007/4/11/263.
|
||||
https://lore.kernel.org/r/461CF883.2030308@sw.ru and implements per cgroup statistics as
|
||||
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
|
||||
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
|
||||
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
|
||||
support.
|
||||
"make xen.config" Enable additional options for xen dom0 guest kernel
|
||||
support.
|
||||
|
||||
"make tinyconfig" Configure the tiniest possible kernel.
|
||||
|
||||
|
|
|
@ -963,21 +963,21 @@ References
|
|||
2. Singh, Balbir. Memory Controller (RSS Control),
|
||||
http://lwn.net/Articles/222762/
|
||||
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)
|
||||
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)
|
||||
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/
|
||||
7. Vaidyanathan, Srinivasan, Control Groups: Pagecache accounting and control
|
||||
subsystem (v3), http://lwn.net/Articles/235534/
|
||||
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
|
||||
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,
|
||||
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),
|
||||
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,
|
||||
http://lwn.net/Articles/243795/
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
.. _cgroup-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.
|
||||
|
||||
nsdelegate
|
||||
|
||||
Consider cgroup namespaces as delegation boundaries. This
|
||||
option is system wide and can only be set on mount or modified
|
||||
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.
|
||||
|
||||
memory_localevents
|
||||
|
||||
Only populate memory.events with data for the current cgroup,
|
||||
and not any subtrees. This is legacy behaviour, the default
|
||||
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.
|
||||
|
||||
memory_recursiveprot
|
||||
|
||||
Recursively apply memory.min and memory.low protection to
|
||||
entire subtrees, without requiring explicit downward
|
||||
propagation into leaf cgroups. This allows protecting entire
|
||||
|
@ -786,7 +785,6 @@ Core Interface Files
|
|||
All cgroup core files are prefixed with "cgroup."
|
||||
|
||||
cgroup.type
|
||||
|
||||
A read-write single value file which exists on non-root
|
||||
cgroups.
|
||||
|
||||
|
@ -954,6 +952,8 @@ All cgroup core files are prefixed with "cgroup."
|
|||
Controllers
|
||||
===========
|
||||
|
||||
.. _cgroup-v2-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
|
||||
fixed position; use the keys to look up specific values!
|
||||
|
||||
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
|
||||
to indicate that it will not show in the mempry.numa_stat.
|
||||
If the entry has no per-node counter (or not show in the
|
||||
memory.numa_stat). We use 'npn' (non-per-node) as the tag
|
||||
to indicate that it will not show in the memory.numa_stat.
|
||||
|
||||
anon
|
||||
Amount of memory used in anonymous mappings such as
|
||||
|
@ -1277,11 +1277,11 @@ PAGE_SIZE multiple when read back.
|
|||
pagetables
|
||||
Amount of memory allocated for page tables.
|
||||
|
||||
percpu(npn)
|
||||
percpu (npn)
|
||||
Amount of memory used for storing per-cpu kernel
|
||||
data structures.
|
||||
|
||||
sock(npn)
|
||||
sock (npn)
|
||||
Amount of memory used in network transmission buffers
|
||||
|
||||
shmem
|
||||
|
@ -1329,7 +1329,7 @@ PAGE_SIZE multiple when read back.
|
|||
Part of "slab" that cannot be reclaimed on memory
|
||||
pressure.
|
||||
|
||||
slab(npn)
|
||||
slab (npn)
|
||||
Amount of memory used for storing in-kernel data
|
||||
structures.
|
||||
|
||||
|
@ -1357,39 +1357,39 @@ PAGE_SIZE multiple when read back.
|
|||
workingset_nodereclaim
|
||||
Number of times a shadow node has been reclaimed
|
||||
|
||||
pgfault(npn)
|
||||
pgfault (npn)
|
||||
Total number of page faults incurred
|
||||
|
||||
pgmajfault(npn)
|
||||
pgmajfault (npn)
|
||||
Number of major page faults incurred
|
||||
|
||||
pgrefill(npn)
|
||||
pgrefill (npn)
|
||||
Amount of scanned pages (in an active LRU list)
|
||||
|
||||
pgscan(npn)
|
||||
pgscan (npn)
|
||||
Amount of scanned pages (in an inactive LRU list)
|
||||
|
||||
pgsteal(npn)
|
||||
pgsteal (npn)
|
||||
Amount of reclaimed pages
|
||||
|
||||
pgactivate(npn)
|
||||
pgactivate (npn)
|
||||
Amount of pages moved to the active LRU list
|
||||
|
||||
pgdeactivate(npn)
|
||||
pgdeactivate (npn)
|
||||
Amount of pages moved to the inactive LRU list
|
||||
|
||||
pglazyfree(npn)
|
||||
pglazyfree (npn)
|
||||
Amount of pages postponed to be freed under memory pressure
|
||||
|
||||
pglazyfreed(npn)
|
||||
pglazyfreed (npn)
|
||||
Amount of reclaimed lazyfree pages
|
||||
|
||||
thp_fault_alloc(npn)
|
||||
thp_fault_alloc (npn)
|
||||
Number of transparent hugepages which were allocated to satisfy
|
||||
a page fault. This counter is not present when CONFIG_TRANSPARENT_HUGEPAGE
|
||||
is not set.
|
||||
|
||||
thp_collapse_alloc(npn)
|
||||
thp_collapse_alloc (npn)
|
||||
Number of transparent hugepages which were allocated to allow
|
||||
collapsing an existing range of pages. This counter is not
|
||||
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
|
||||
|
||||
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.
|
||||
|
||||
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".
|
||||
|
||||
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.
|
||||
|
||||
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
|
||||
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
|
||||
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
|
||||
can show the following values.
|
||||
|
||||
"member" Non-root member of a partition
|
||||
"root" Partition root
|
||||
"root invalid" Invalid partition root
|
||||
============== ==============================
|
||||
"member" Non-root member of a partition
|
||||
"root" Partition root
|
||||
"root invalid" Invalid partition root
|
||||
============== ==============================
|
||||
|
||||
It is a partition root if the first 2 partition root conditions
|
||||
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
|
||||
a set of cgroups and namespaces are intended to isolate processes the
|
||||
"/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
|
||||
0::/batchjobs/container_id1
|
||||
|
|
|
@ -107,7 +107,7 @@ will lead to quite erratic information inside ``/proc/stat``::
|
|||
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)
|
||||
|
||||
|
||||
|
|
|
@ -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
|
||||
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:
|
||||
|
||||
|
|
|
@ -606,7 +606,7 @@
|
|||
kernel/dma/contiguous.c
|
||||
|
||||
cma_pernuma=nn[MG]
|
||||
[ARM64,KNL]
|
||||
[ARM64,KNL,CMA]
|
||||
Sets the size of kernel per-numa memory area for
|
||||
contiguous memory allocations. A value of 0 disables
|
||||
per-numa CMA altogether. And If this option is not
|
||||
|
@ -1525,12 +1525,12 @@
|
|||
hpet_mmap= [X86, HPET_MMAP] Allow userspace to mmap HPET
|
||||
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.
|
||||
Format: nn[KMGTPE]
|
||||
|
||||
Reserve a cma area of given size and allocate gigantic
|
||||
hugepages using the cma allocator. If enabled, the
|
||||
Reserve a CMA area of given size and allocate gigantic
|
||||
hugepages using the CMA allocator. If enabled, the
|
||||
boot-time allocation of gigantic hugepages is skipped.
|
||||
|
||||
hugepages= [HW] Number of HugeTLB pages to allocate at boot.
|
||||
|
@ -3273,9 +3273,14 @@
|
|||
parameter, xsave area per process might occupy more
|
||||
memory on xsaves enabled systems.
|
||||
|
||||
nohlt [BUGS=ARM,SH] Tells the kernel that the sleep(SH) or
|
||||
wfi(ARM) instruction doesn't work correctly and not to
|
||||
use it. This is also useful when using JTAG debugger.
|
||||
nohlt [ARM,ARM64,MICROBLAZE,SH] Forces the kernel to busy wait
|
||||
in do_idle() and not use the arch_cpu_idle()
|
||||
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
|
||||
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
|
||||
(based on an earlier one from Gilad Ben-Yossef) that
|
||||
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
|
||||
CONFIG_PPC_RTAS_DAEMON=n. This prevents the RTAS
|
||||
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
|
||||
privilege [13]_ (POSIX 1003.1e: 2.2.2.39) for performance monitoring and
|
||||
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
|
||||
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.
|
||||
Each "watch" costs roughly 90 bytes on a 32bit kernel, and roughly 160 bytes
|
||||
on a 64bit one.
|
||||
The current default value for max_user_watches is the 1/32 of the available
|
||||
low memory, divided for the "watch" cost in bytes.
|
||||
The current default value for max_user_watches is the 1/25 (4%) of the
|
||||
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
|
||||
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
|
||||
physical address to determine if a dtb has been passed instead of a
|
||||
tagged list.
|
||||
|
|
|
@ -33,7 +33,7 @@ SoC-specific documents
|
|||
|
||||
ixp4xx
|
||||
|
||||
marvel
|
||||
marvell
|
||||
microchip
|
||||
|
||||
netwinder
|
||||
|
|
|
@ -127,7 +127,7 @@ EBU Armada family
|
|||
- 88F6828 Armada 388
|
||||
|
||||
- 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:
|
||||
ARM Cortex-A9
|
||||
|
@ -183,7 +183,10 @@ EBU Armada family ARMv8
|
|||
http://www.marvell.com/embedded-processors/armada-3700/
|
||||
|
||||
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:
|
||||
arch/arm64/boot/dts/marvell/armada-37*
|
|
@ -31,7 +31,7 @@ from load_config import loadConfig
|
|||
# -- General configuration ------------------------------------------------
|
||||
|
||||
# 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
|
||||
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
|
||||
|
@ -112,19 +112,12 @@ if major >= 3:
|
|||
|
||||
else:
|
||||
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
|
||||
autosectionlabel_prefix_document = True
|
||||
autosectionlabel_maxdepth = 2
|
||||
|
||||
# The name of the math extension changed on Sphinx 1.4
|
||||
if (major == 1 and minor > 3) or (major > 1):
|
||||
extensions.append("sphinx.ext.imgmath")
|
||||
else:
|
||||
extensions.append("sphinx.ext.pngmath")
|
||||
extensions.append("sphinx.ext.imgmath")
|
||||
|
||||
# Add any paths that contain templates here, relative to this directory.
|
||||
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
|
||||
if major == 1 and minor > 3:
|
||||
if major == 1:
|
||||
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
|
||||
# by using:
|
||||
# \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
|
||||
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
|
||||
structure and language for describing hardware. More specifically, it
|
||||
|
|
|
@ -340,16 +340,26 @@ Rendered as:
|
|||
Cross-referencing
|
||||
-----------------
|
||||
|
||||
Cross-referencing from one documentation page to another can be done by passing
|
||||
the path to the file starting from the Documentation folder.
|
||||
For example, to cross-reference to this page (the .rst extension is optional)::
|
||||
Cross-referencing from one documentation page to another can be done simply by
|
||||
writing the path to the document file, no special syntax required. The path can
|
||||
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.
|
||||
For example, referencing this page from the same directory would be done as::
|
||||
If you want the link to have a different rendered text other than the document's
|
||||
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
|
||||
Documentation/doc-guide/kernel-doc.rst.
|
||||
|
|
|
@ -640,8 +640,8 @@ compliance:
|
|||
level and edge IRQs
|
||||
|
||||
* [1] http://www.spinics.net/lists/linux-omap/msg120425.html
|
||||
* [2] https://lkml.org/lkml/2015/9/25/494
|
||||
* [3] https://lkml.org/lkml/2015/9/25/495
|
||||
* [2] https://lore.kernel.org/r/1443209283-20781-2-git-send-email-grygorii.strashko@ti.com
|
||||
* [3] https://lore.kernel.org/r/1443209283-20781-3-git-send-email-grygorii.strashko@ti.com
|
||||
|
||||
|
||||
Requesting self-owned GPIO pins
|
||||
|
|
|
@ -18,6 +18,7 @@ MEN Chameleon Bus
|
|||
4.1 The driver structure
|
||||
4.2 Probing and attaching
|
||||
4.3 Initializing the driver
|
||||
4.4 Using DMA
|
||||
|
||||
|
||||
Introduction
|
||||
|
@ -173,3 +174,14 @@ module at the MCB core::
|
|||
The module_mcb_driver() macro can be used to reduce the above code::
|
||||
|
||||
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:
|
||||
the total number of trip points this thermal zone supports.
|
||||
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:
|
||||
device private data
|
||||
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/time_in_state_ms: Time (msec) spent in various cooling states
|
||||
|---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
|
||||
|
@ -766,5 +766,5 @@ emergency poweroff kicks in after the delay has elapsed and shuts down
|
|||
the system.
|
||||
|
||||
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.
|
||||
|
|
|
@ -109,7 +109,7 @@ Mountpoints
|
|||
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
|
||||
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 mounted filesystems will be automatically unmounted approximately
|
||||
|
@ -144,7 +144,7 @@ looks up a cell of the same name, for example::
|
|||
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
|
||||
their usage counts::
|
||||
|
@ -201,7 +201,7 @@ And then run as::
|
|||
./klog
|
||||
|
||||
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::
|
||||
|
||||
[root@andromeda ~]# keyctl show
|
||||
|
@ -211,7 +211,7 @@ by cat'ing /proc/keys::
|
|||
111416553 --als--v 0 0 \_ rxrpc: afs@CAMBRIDGE.REDHAT.COM
|
||||
|
||||
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
|
||||
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
|
||||
described in 6) below.
|
||||
|
||||
6. When changing the S_DAX policy via toggling the persistent FS_XFLAG_DAX flag,
|
||||
the change in behaviour for existing regular files may not occur
|
||||
immediately. If the change must take effect immediately, the administrator
|
||||
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
|
||||
6. When changing the S_DAX policy via toggling the persistent FS_XFLAG_DAX
|
||||
flag, the change to existing regular files won't take effect until the
|
||||
files are closed by all processes.
|
||||
|
||||
|
||||
Details
|
||||
|
|
|
@ -83,6 +83,7 @@ Documentation for filesystem implementations.
|
|||
erofs
|
||||
ext2
|
||||
ext3
|
||||
ext4/index
|
||||
f2fs
|
||||
gfs2
|
||||
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))
|
||||
kmsg Kernel messages
|
||||
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
|
||||
meminfo Memory info
|
||||
misc Miscellaneous
|
||||
|
|
|
@ -112,7 +112,7 @@ members are defined:
|
|||
|
||||
.. code-block:: c
|
||||
|
||||
struct file_system_operations {
|
||||
struct file_system_type {
|
||||
const char *name;
|
||||
int fs_flags;
|
||||
struct dentry *(*mount) (struct file_system_type *, int,
|
||||
|
|
|
@ -688,7 +688,7 @@ for fbdev.
|
|||
https://patchwork.freedesktop.org/patch/306579/
|
||||
|
||||
- [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
|
||||
|
||||
|
|
|
@ -13,7 +13,7 @@ touchscreen/ADC module.
|
|||
====================
|
||||
|
||||
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.
|
||||
|
||||
Assuming ep93xx_adc is IIO device0, you'd find the following entries under
|
||||
|
|
|
@ -171,17 +171,6 @@ implementation.
|
|||
x86/index
|
||||
xtensa/index
|
||||
|
||||
Filesystem Documentation
|
||||
------------------------
|
||||
|
||||
The documentation in this section are provided by specific filesystem
|
||||
subprojects.
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
|
||||
filesystems/ext4/index
|
||||
|
||||
Other documentation
|
||||
-------------------
|
||||
|
||||
|
|
|
@ -236,6 +236,21 @@ A few EV_ABS codes have special meanings:
|
|||
- Used to describe multitouch input events. Please see
|
||||
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
|
||||
-----
|
||||
|
||||
|
|
|
@ -260,6 +260,10 @@ ABS_MT_PRESSURE
|
|||
of TOUCH and WIDTH for pressure-based devices or any device with a spatial
|
||||
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
|
||||
The distance, in surface units, between the contact and the surface. Zero
|
||||
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
|
||||
slab cache in ``include/linux/slab.h``
|
||||
|
||||
:c:func:`current()`
|
||||
-------------------
|
||||
:c:macro:`current`
|
||||
------------------
|
||||
|
||||
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
|
||||
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
|
||||
-------------------------------
|
||||
|
|
|
@ -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.
|
||||
|
||||
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?
|
||||
|
||||
|
|
|
@ -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
|
||||
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
|
||||
``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
|
||||
(``compat_sys_xyzzy()``), and/or other kernel code.
|
||||
|
||||
|
@ -548,18 +548,18 @@ References and Sources
|
|||
https://lwn.net/Articles/486306/
|
||||
- Recommendation from Andrew Morton that all related information for a new
|
||||
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
|
||||
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
|
||||
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
|
||||
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:
|
||||
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
|
||||
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:
|
||||
|
||||
- commit 75069f2b5bfb ("vfs: renumber FMODE_NONOTIFY and add to uniqueness
|
||||
|
@ -569,9 +569,9 @@ References and Sources
|
|||
- commit bb458c644a59 ("Safer ABI for O_TMPFILE")
|
||||
|
||||
- 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
|
||||
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
|
||||
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;
|
||||
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
|
||||
is super simple. Avoid tricky expressions.
|
||||
|
||||
|
||||
Outside of comments, documentation and except in Kconfig, spaces are never
|
||||
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
|
||||
notation) is asinine - the compiler knows the types anyway and can check
|
||||
those, and it only confuses the programmer. No wonder Microsoft makes buggy
|
||||
programs.
|
||||
those, and it only confuses the programmer.
|
||||
|
||||
LOCAL variable names should be short, and to the point. If you have
|
||||
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
|
||||
-------------
|
||||
|
||||
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
|
||||
source directory has a good template for how to report a possible kernel bug,
|
||||
and details what kind of information is needed by the kernel developers to help
|
||||
track down the problem.
|
||||
source directory describes how to report a possible kernel bug, and details
|
||||
what kind of information is needed by the kernel developers to help track
|
||||
down the problem.
|
||||
|
||||
|
||||
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,
|
||||
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
|
||||
|
|
|
@ -89,30 +89,28 @@ and elsewhere regarding submitting Linux kernel patches.
|
|||
Patches that change userspace interfaces should be CCed to
|
||||
linux-api@vger.kernel.org.
|
||||
|
||||
19) Check that it all passes ``make headers_check``.
|
||||
|
||||
20) Has been checked with injection of at least slab and page-allocation
|
||||
19) Has been checked with injection of at least slab and page-allocation
|
||||
failures. See ``Documentation/fault-injection/``.
|
||||
|
||||
If the new code is substantial, addition of subsystem-specific fault
|
||||
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
|
||||
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
|
||||
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
|
||||
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``.
|
||||
|
||||
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,
|
||||
then test multiple builds with the related ``Kconfig`` symbols disabled
|
||||
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`
|
||||
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
|
||||
|
@ -679,6 +684,26 @@ generates appropriate diffstats by default.)
|
|||
See more details on the proper patch format in the following
|
||||
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 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>
|
||||
|
||||
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:
|
||||
:ref:`Documentation/process/coding-style.rst <codingstyle>`
|
||||
|
||||
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"
|
||||
Some strategies to get difficult or controversial changes in.
|
||||
|
|
|
@ -2,8 +2,9 @@
|
|||
CFS Bandwidth Control
|
||||
=====================
|
||||
|
||||
[ This document only discusses CPU bandwidth control for SCHED_NORMAL.
|
||||
The SCHED_RT case is covered in Documentation/scheduler/sched-rt-group.rst ]
|
||||
.. note::
|
||||
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
|
||||
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.
|
||||
|
||||
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]
|
||||
.. note::
|
||||
The cgroupfs files described in this section are only applicable
|
||||
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::
|
||||
|
||||
|
|
|
@ -707,7 +707,7 @@ Deadline Task Scheduling
|
|||
and how to prevent non-root users "cheat" the system?
|
||||
|
||||
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
|
||||
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
|
||||
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
|
||||
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. ]
|
||||
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
|
||||
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
|
||||
very simple: it always tries to run the task with the smallest p->se.vruntime
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
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
|
||||
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/``.
|
||||
|
|
|
@ -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
|
||||
# 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*$')
|
||||
|
||||
|
@ -234,7 +234,10 @@ def markup_doc_ref(docname, app, match):
|
|||
#
|
||||
# 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
|
||||
pxref = addnodes.pending_xref('', refdomain = 'std', reftype = 'doc',
|
||||
reftarget = target, modname = None,
|
||||
|
|
|
@ -236,13 +236,7 @@ class CObject(Base_CObject):
|
|||
|
||||
indextext = self.get_index_text(name)
|
||||
if indextext:
|
||||
if major == 1 and minor < 4:
|
||||
# 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(
|
||||
self.indexnode['entries'].append(
|
||||
('single', indextext, targetname, '', None))
|
||||
|
||||
class CDomain(Base_CDomain):
|
||||
|
|
|
@ -45,17 +45,7 @@ from docutils import nodes, statemachine
|
|||
from docutils.statemachine import ViewList
|
||||
from docutils.parsers.rst import directives, Directive
|
||||
from docutils.utils.error_reporting import ErrorString
|
||||
|
||||
#
|
||||
# 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
|
||||
from sphinx.util.docutils import switch_source_input
|
||||
|
||||
__version__ = '1.0'
|
||||
|
||||
|
@ -179,16 +169,5 @@ class KernelCmd(Directive):
|
|||
return node.children
|
||||
|
||||
def do_parse(self, content, node):
|
||||
if Use_SSI:
|
||||
with switch_source_input(self.state, content):
|
||||
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
|
||||
with switch_source_input(self.state, content):
|
||||
self.state.nested_parse(content, 0, node, match_titles=1)
|
||||
|
|
|
@ -42,17 +42,7 @@ from docutils import nodes, statemachine
|
|||
from docutils.statemachine import ViewList
|
||||
from docutils.parsers.rst import directives, Directive
|
||||
from docutils.utils.error_reporting import ErrorString
|
||||
|
||||
#
|
||||
# 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
|
||||
from sphinx.util.docutils import switch_source_input
|
||||
|
||||
__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
|
||||
|
||||
if Use_SSI:
|
||||
with switch_source_input(self.state, content):
|
||||
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
|
||||
with switch_source_input(self.state, content):
|
||||
self.state.nested_parse(content, 0, node, match_titles=1)
|
||||
|
||||
return node.children
|
||||
|
|
|
@ -37,18 +37,8 @@ import glob
|
|||
from docutils import nodes, statemachine
|
||||
from docutils.statemachine import ViewList
|
||||
from docutils.parsers.rst import directives, Directive
|
||||
|
||||
#
|
||||
# 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
|
||||
|
||||
from sphinx.util.docutils import switch_source_input
|
||||
import kernellog
|
||||
|
||||
__version__ = '1.0'
|
||||
|
@ -163,18 +153,8 @@ class KernelDocDirective(Directive):
|
|||
return [nodes.error(None, nodes.paragraph(text = "kernel-doc missing"))]
|
||||
|
||||
def do_parse(self, result, node):
|
||||
if Use_SSI:
|
||||
with switch_source_input(self.state, result):
|
||||
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
|
||||
|
||||
with switch_source_input(self.state, result):
|
||||
self.state.nested_parse(result, 0, node, match_titles=1)
|
||||
|
||||
def setup(app):
|
||||
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
|
||||
# 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
|
||||
from sphinx.util import logging
|
||||
|
||||
if sphinx.__version__[:3] >= '1.6':
|
||||
UseLogging = True
|
||||
from sphinx.util import logging
|
||||
logger = logging.getLogger('kerneldoc')
|
||||
else:
|
||||
UseLogging = False
|
||||
logger = logging.getLogger('kerneldoc')
|
||||
|
||||
def warn(app, message):
|
||||
if UseLogging:
|
||||
logger.warning(message)
|
||||
else:
|
||||
app.warn(message)
|
||||
logger.warning(message)
|
||||
|
||||
def verbose(app, message):
|
||||
if UseLogging:
|
||||
logger.verbose(message)
|
||||
else:
|
||||
app.verbose(message)
|
||||
logger.verbose(message)
|
||||
|
||||
def info(app, message):
|
||||
if UseLogging:
|
||||
logger.info(message)
|
||||
else:
|
||||
app.info(message)
|
||||
logger.info(message)
|
||||
|
|
|
@ -49,26 +49,14 @@ import os
|
|||
from os import path
|
||||
import subprocess
|
||||
from hashlib import sha1
|
||||
import sys
|
||||
|
||||
from docutils import nodes
|
||||
from docutils.statemachine import ViewList
|
||||
from docutils.parsers.rst import directives
|
||||
from docutils.parsers.rst.directives import images
|
||||
import sphinx
|
||||
|
||||
from sphinx.util.nodes import clean_astext
|
||||
from six import iteritems
|
||||
|
||||
import kernellog
|
||||
|
||||
PY3 = sys.version_info[0] == 3
|
||||
|
||||
if PY3:
|
||||
_unicode = str
|
||||
else:
|
||||
_unicode = unicode
|
||||
|
||||
# Get Sphinx version
|
||||
major, minor, patch = sphinx.version_info[:3]
|
||||
if major == 1 and minor > 3:
|
||||
|
@ -540,7 +528,7 @@ def add_kernel_figure_to_std_domain(app, doctree):
|
|||
docname = app.env.docname
|
||||
labels = std.data["labels"]
|
||||
|
||||
for name, explicit in iteritems(doctree.nametypes):
|
||||
for name, explicit in doctree.nametypes.items():
|
||||
if not explicit:
|
||||
continue
|
||||
labelid = doctree.nameids[name]
|
||||
|
|
|
@ -61,8 +61,6 @@ class MaintainersInclude(Include):
|
|||
field_content = ""
|
||||
|
||||
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?
|
||||
if descriptions and line.startswith('Maintainers'):
|
||||
descriptions = False
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
docutils
|
||||
Sphinx==2.4.4
|
||||
sphinx_rtd_theme
|
||||
six
|
||||
|
|
|
@ -42,8 +42,6 @@ u"""
|
|||
# imports
|
||||
# ==============================================================================
|
||||
|
||||
import sys
|
||||
|
||||
from docutils import nodes
|
||||
from docutils.parsers.rst import directives, roles
|
||||
from docutils.parsers.rst.directives.tables import Table
|
||||
|
@ -55,14 +53,6 @@ from docutils.utils import SystemMessagePropagation
|
|||
|
||||
__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):
|
||||
# ==============================================================================
|
||||
|
|
|
@ -75,7 +75,7 @@ NON-ATOMIC CONTEXT:
|
|||
|
||||
- Why not msleep for (1ms - 20ms)?
|
||||
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
|
||||
will often sleep longer (~20 ms actual sleep for any
|
||||
|
|
|
@ -611,21 +611,21 @@ Riferimenti e fonti
|
|||
https://lwn.net/Articles/486306/
|
||||
- Raccomandazioni da Andrew Morton circa il fatto che tutte le informazioni
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
dovrebbero incapsularli in una struttura che includa un argomento
|
||||
*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_*:
|
||||
|
||||
- commit 75069f2b5bfb ("vfs: renumber FMODE_NONOTIFY and add to uniqueness
|
||||
|
@ -635,9 +635,9 @@ Riferimenti e fonti
|
|||
- commit bb458c644a59 ("Safer ABI for O_TMPFILE")
|
||||
|
||||
- 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
|
||||
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
|
||||
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>
|
||||
|
||||
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:
|
||||
:ref:`Documentation/translations/it_IT/process/coding-style.rst <it_codingstyle>`
|
||||
|
||||
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"
|
||||
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/>
|
||||
|
||||
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:
|
||||
<http://users.sosdg.org/~qiyong/lxr/source/Documentation/process/coding-style.rst>
|
||||
|
||||
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"
|
||||
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
|
||||
|
||||
메인 커널 소스 디렉토리에 있는 :ref:`admin-guide/reporting-bugs.rst <reportingbugs>`
|
||||
메인 커널 소스 디렉토리에 있는 'Documentation/admin-guide/reporting-issues.rst'
|
||||
파일은 커널 버그라고 생각되는 것을 보고하는 방법에 관한 좋은 템플릿이며 문제를
|
||||
추적하기 위해서 커널 개발자들이 필요로 하는 정보가 무엇들인지를 상세히 설명하고
|
||||
있다.
|
||||
|
@ -583,7 +583,7 @@ Pat이라는 이름을 가진 여자가 있을 수도 있는 것이다. 리눅
|
|||
|
||||
"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
|
||||
|
||||
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)
|
||||
|
||||
|
||||
|
|
|
@ -124,7 +124,7 @@ bootloader 必须传递一个系统内存的位置和最小值,以及根文件
|
|||
|
||||
bootloader 必须以 64bit 地址对齐的形式加载一个设备树映像(dtb)到系统
|
||||
RAM 中,并用启动数据初始化它。dtb 格式在文档
|
||||
Documentation/devicetree/booting-without-of.rst 中。内核将会在
|
||||
https://www.devicetree.org/specifications/ 中。内核将会在
|
||||
dtb 物理地址处查找 dtb 魔数值(0xd00dfeed),以确定 dtb 是否已经代替
|
||||
标签列表被传递进来。
|
||||
|
||||
|
|
|
@ -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 |
|
||||
+-----------------+---------------+
|
|
@ -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的任何可配置属性。
|
|
@ -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
|
|
@ -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实现。
|
|
@ -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
|
|
@ -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`
|
|
@ -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>
|
||||
|
||||
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:
|
||||
:ref:`Documentation/translations/zh_CN/process/coding-style.rst <cn_codingstyle>`
|
||||
|
||||
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"
|
||||
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
|
||||
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
|
||||
tables and the architecture supports it (see below).
|
||||
|
|
|
@ -851,7 +851,7 @@ Protocol: 2.09+
|
|||
struct setup_data {
|
||||
__u64 next = 0 or <addr_of_next_setup_data_struct>;
|
||||
__u32 type = SETUP_INDIRECT;
|
||||
__u32 len = sizeof(setup_data);
|
||||
__u32 len = sizeof(setup_indirect);
|
||||
__u8 data[sizeof(setup_indirect)] = struct setup_indirect {
|
||||
__u32 type = SETUP_INDIRECT | SETUP_E820_EXT;
|
||||
__u32 reserved = 0;
|
||||
|
|
|
@ -124,8 +124,8 @@ config HAVE_64BIT_ALIGNED_ACCESS
|
|||
accesses are required to be 64 bit aligned in this way even
|
||||
though it is not a 64 bit architecture.
|
||||
|
||||
See Documentation/unaligned-memory-access.txt for more
|
||||
information on the topic of unaligned memory accesses.
|
||||
See Documentation/core-api/unaligned-memory-access.rst for
|
||||
more information on the topic of unaligned memory accesses.
|
||||
|
||||
config HAVE_EFFICIENT_UNALIGNED_ACCESS
|
||||
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
|
||||
* @owner: owner module of drv
|
||||
* @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);
|
||||
|
||||
/**
|
||||
* rio_unmap_inb_region -- Unmap the inbound memory region
|
||||
* rio_unmap_outb_region -- Unmap the inbound memory region
|
||||
* @mport: Master port
|
||||
* @destid: destination id mapping points 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);
|
||||
}
|
||||
|
||||
/**
|
||||
* 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)
|
||||
{
|
||||
struct hlist_bl_head *b;
|
||||
|
@ -501,6 +484,24 @@ void __d_drop(struct dentry *dentry)
|
|||
}
|
||||
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)
|
||||
{
|
||||
spin_lock(&dentry->d_lock);
|
||||
|
@ -996,20 +997,6 @@ struct dentry *d_find_any_alias(struct inode *inode)
|
|||
}
|
||||
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)
|
||||
{
|
||||
struct dentry *alias;
|
||||
|
@ -1029,6 +1016,20 @@ static struct dentry *__d_find_alias(struct inode *inode)
|
|||
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 *de = NULL;
|
||||
|
|
|
@ -1493,7 +1493,7 @@ struct inode *find_inode_rcu(struct super_block *sb, unsigned long hashval,
|
|||
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
|
||||
* @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
|
||||
* @inode: inode to update
|
||||
*
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
#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)
|
||||
* @datalen: length of data in @data
|
||||
|
|
|
@ -669,7 +669,8 @@ void seq_puts(struct seq_file *m, const char *s)
|
|||
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.
|
||||
* @m: seq_file identifying the buffer to which data should be written
|
||||
* @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);
|
||||
|
||||
/**
|
||||
* 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
|
||||
* @cpu: pointer to cpu "cursor"
|
||||
* @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);
|
||||
|
||||
/**
|
||||
* 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)
|
||||
{
|
||||
int error;
|
||||
|
@ -1760,6 +1754,12 @@ out:
|
|||
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)
|
||||
{
|
||||
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);
|
||||
|
||||
/**
|
||||
* 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).
|
||||
* @portid: destination port.
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
#ifndef __STRATIX10_SVC_CLIENT_H
|
||||
#define __STRATIX10_SVC_CLIENT_H
|
||||
|
||||
/**
|
||||
/*
|
||||
* Service layer driver supports client names
|
||||
*
|
||||
* fpga: for FPGA configuration
|
||||
|
@ -15,7 +15,7 @@
|
|||
#define SVC_CLIENT_FPGA "fpga"
|
||||
#define SVC_CLIENT_RSU "rsu"
|
||||
|
||||
/**
|
||||
/*
|
||||
* Status of the sent command, in bit number
|
||||
*
|
||||
* SVC_STATUS_OK:
|
||||
|
@ -50,7 +50,7 @@
|
|||
#define SVC_STATUS_ERROR 5
|
||||
#define SVC_STATUS_NO_SUPPORT 6
|
||||
|
||||
/**
|
||||
/*
|
||||
* Flag bit for COMMAND_RECONFIG
|
||||
*
|
||||
* COMMAND_RECONFIG_FLAG_PARTIAL:
|
||||
|
@ -58,7 +58,7 @@
|
|||
*/
|
||||
#define COMMAND_RECONFIG_FLAG_PARTIAL 1
|
||||
|
||||
/**
|
||||
/*
|
||||
* Timeout settings for service clients:
|
||||
* timeout value used in Stratix10 FPGA manager 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);
|
||||
|
||||
/**
|
||||
* intel_svc_done() - complete service request
|
||||
* stratix10_svc_done() - complete service request
|
||||
* @chan: service channel assigned to the client
|
||||
*
|
||||
* 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_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
|
||||
* @i: u64 used as loop variable
|
||||
* @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))
|
||||
|
||||
/**
|
||||
* 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
|
||||
* @i: u64 used as loop variable
|
||||
* @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
|
||||
* 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) \
|
||||
__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);
|
||||
|
||||
/**
|
||||
* 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
|
||||
*
|
||||
* 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);
|
||||
|
||||
/**
|
||||
* crc7 - update the CRC7 for the data buffer
|
||||
* crc7_be - update the CRC7 for the data buffer
|
||||
* @crc: previous CRC7 value
|
||||
* @buffer: data pointer
|
||||
* @len: number of bytes in the buffer
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
// 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
|
||||
* 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",
|
||||
p->symbol_name, p->addr, (long)regs->pc, (long)regs->pstate);
|
||||
#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
|
||||
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);
|
||||
|
@ -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",
|
||||
p->symbol_name, p->addr, (long)regs->pstate);
|
||||
#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
|
||||
pr_info("<%s> pre_handler: p->addr, 0x%p, flags = 0x%lx\n",
|
||||
p->symbol_name, p->addr, regs->flags);
|
||||
|
|
|
@ -382,6 +382,9 @@ my $inline_doc_state;
|
|||
# 'function', 'struct', 'union', 'enum', 'typedef'
|
||||
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_end = '\*/';
|
||||
my $doc_com = '\s*\*\s*';
|
||||
|
@ -833,6 +836,7 @@ sub output_blockhead_rst(%) {
|
|||
next if (defined($nosymbol_table{$section}));
|
||||
|
||||
if ($output_selection != OUTPUT_INCLUDE) {
|
||||
print ".. _$section:\n\n";
|
||||
print "**$section**\n\n";
|
||||
}
|
||||
print_lineno($section_start_lines{$section});
|
||||
|
@ -1203,6 +1207,11 @@ sub dump_struct($$) {
|
|||
$declaration_name = $2;
|
||||
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:
|
||||
$members =~ s/\/\*\s*private:.*?\/\*\s*public:.*?\*\///gosi;
|
||||
$members =~ s/\/\*\s*private:.*//gosi;
|
||||
|
@ -1391,6 +1400,11 @@ sub dump_enum($$) {
|
|||
}
|
||||
|
||||
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;
|
||||
|
||||
$members =~ s/\s+$//;
|
||||
|
@ -1451,6 +1465,11 @@ sub dump_typedef($$) {
|
|||
my $args = $3;
|
||||
$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);
|
||||
|
||||
output_declaration($declaration_name,
|
||||
|
@ -1477,6 +1496,11 @@ sub dump_typedef($$) {
|
|||
if ($x =~ /typedef.*\s+(\w+)\s*;/) {
|
||||
$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,
|
||||
'typedef',
|
||||
{'typedef' => $declaration_name,
|
||||
|
@ -1796,6 +1820,11 @@ sub dump_function($$) {
|
|||
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;
|
||||
check_sections($file, $declaration_name, "function", $sectcheck, $prms);
|
||||
|
||||
|
@ -1878,6 +1907,7 @@ sub tracepoint_munge($) {
|
|||
"$prototype\n";
|
||||
} else {
|
||||
$prototype = "static inline void trace_$tracepointname($tracepointargs)";
|
||||
$identifier = "trace_$identifier";
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2041,7 +2071,6 @@ sub process_normal() {
|
|||
#
|
||||
sub process_name($$) {
|
||||
my $file = shift;
|
||||
my $identifier;
|
||||
my $descr;
|
||||
|
||||
if (/$doc_block/o) {
|
||||
|
@ -2054,12 +2083,19 @@ sub process_name($$) {
|
|||
} else {
|
||||
$section = $1;
|
||||
}
|
||||
}
|
||||
elsif (/$doc_decl/o) {
|
||||
} elsif (/$doc_decl/o) {
|
||||
$identifier = $1;
|
||||
if (/\s*([\w\s]+?)(\(\))?\s*-/) {
|
||||
if (/\s*([\w\s]+?)(\(\))?\s*([-:].*)?$/) {
|
||||
$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;
|
||||
# if there's no @param blocks need to set up default section
|
||||
|
@ -2067,7 +2103,7 @@ sub process_name($$) {
|
|||
$contents = "";
|
||||
$section = $section_default;
|
||||
$new_start_line = $. + 1;
|
||||
if (/-(.*)/) {
|
||||
if (/[-:](.*)/) {
|
||||
# strip leading/trailing/multiple spaces
|
||||
$descr= $1;
|
||||
$descr =~ s/^\s*//;
|
||||
|
@ -2085,20 +2121,15 @@ sub process_name($$) {
|
|||
++$warnings;
|
||||
}
|
||||
|
||||
if ($identifier =~ m/^struct\b/) {
|
||||
$decl_type = 'struct';
|
||||
} elsif ($identifier =~ m/^union\b/) {
|
||||
$decl_type = 'union';
|
||||
} elsif ($identifier =~ m/^enum\b/) {
|
||||
$decl_type = 'enum';
|
||||
} elsif ($identifier =~ m/^typedef\b/) {
|
||||
$decl_type = 'typedef';
|
||||
} else {
|
||||
$decl_type = 'function';
|
||||
if ($identifier eq "") {
|
||||
print STDERR "${file}:$.: warning: wrong kernel-doc identifier on line:\n";
|
||||
print STDERR $_;
|
||||
++$warnings;
|
||||
$state = STATE_NORMAL;
|
||||
}
|
||||
|
||||
if ($verbose) {
|
||||
print STDERR "${file}:$.: info: Scanning doc for $identifier\n";
|
||||
print STDERR "${file}:$.: info: Scanning doc for $decl_type $identifier\n";
|
||||
}
|
||||
} else {
|
||||
print STDERR "${file}:$.: warning: Cannot understand $_ on line $.",
|
||||
|
|
|
@ -728,8 +728,8 @@ sub check_needs()
|
|||
$need_virtualenv = 1;
|
||||
}
|
||||
if ($1 < 3) {
|
||||
# Complain if it finds python2 (or worse)
|
||||
printf "Warning: python$1 support is deprecated. Use it with caution!\n";
|
||||
# Fail if it finds python2 (or worse)
|
||||
die "Python 3 is required to build the kernel docs\n";
|
||||
}
|
||||
} else {
|
||||
die "Warning: couldn't identify $python_cmd version!";
|
||||
|
|
|
@ -79,7 +79,7 @@
|
|||
#endif
|
||||
|
||||
/**
|
||||
* TH_LOG(fmt, ...)
|
||||
* TH_LOG()
|
||||
*
|
||||
* @fmt: format string
|
||||
* @...: optional arguments
|
||||
|
@ -113,12 +113,16 @@
|
|||
__FILE__, __LINE__, _metadata->name, ##__VA_ARGS__)
|
||||
|
||||
/**
|
||||
* SKIP(statement, fmt, ...)
|
||||
* SKIP()
|
||||
*
|
||||
* @statement: statement to run after reporting SKIP
|
||||
* @fmt: format string
|
||||
* @...: optional arguments
|
||||
*
|
||||
* .. code-block:: c
|
||||
*
|
||||
* SKIP(statement, fmt, ...);
|
||||
*
|
||||
* This forces a "pass" after reporting why something is being skipped
|
||||
* and runs "statement", which is usually "return" or "goto skip".
|
||||
*/
|
||||
|
@ -136,7 +140,7 @@
|
|||
} while (0)
|
||||
|
||||
/**
|
||||
* TEST(test_name) - Defines the test function and creates the registration
|
||||
* TEST() - Defines the test function and creates the registration
|
||||
* stub
|
||||
*
|
||||
* @test_name: test name
|
||||
|
@ -155,7 +159,7 @@
|
|||
#define TEST(test_name) __TEST_IMPL(test_name, -1)
|
||||
|
||||
/**
|
||||
* TEST_SIGNAL(test_name, signal)
|
||||
* TEST_SIGNAL()
|
||||
*
|
||||
* @test_name: test name
|
||||
* @signal: signal number
|
||||
|
@ -195,7 +199,7 @@
|
|||
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
|
||||
*
|
||||
* @datatype_name: datatype name
|
||||
|
@ -212,7 +216,7 @@
|
|||
#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
|
||||
*
|
||||
* @fixture_name: fixture name
|
||||
|
@ -239,7 +243,7 @@
|
|||
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.
|
||||
*
|
||||
* @fixture_name: fixture name
|
||||
|
@ -265,7 +269,7 @@
|
|||
__attribute__((unused)) *variant)
|
||||
|
||||
/**
|
||||
* FIXTURE_TEARDOWN(fixture_name)
|
||||
* FIXTURE_TEARDOWN()
|
||||
* *_metadata* is included so that EXPECT_* and ASSERT_* work correctly.
|
||||
*
|
||||
* @fixture_name: fixture name
|
||||
|
@ -286,7 +290,7 @@
|
|||
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
|
||||
*
|
||||
* @fixture_name: fixture name
|
||||
|
@ -305,7 +309,7 @@
|
|||
#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
|
||||
*
|
||||
* @fixture_name: fixture name
|
||||
|
@ -339,7 +343,7 @@
|
|||
_##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_name: fixture name
|
||||
|
|
Загрузка…
Ссылка в новой задаче