Commit 255442c9 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'docs-4.16' of git://git.lwn.net/linux

Pull documentation updates from Jonathan Corbet:
 "Documentation updates for 4.16.

  New stuff includes refcount_t documentation, errseq documentation,
  kernel-doc support for nested structure definitions, the removal of
  lots of crufty kernel-doc support for unused formats, SPDX tag
  documentation, the beginnings of a manual for subsystem maintainers,
  and lots of fixes and updates.

  As usual, some of the changesets reach outside of Documentation/ to
  effect kerneldoc comment fixes. It also adds the new LICENSES
  directory, of which Thomas promises I do not need to be the
  maintainer"

* tag 'docs-4.16' of git://git.lwn.net/linux: (65 commits)
  linux-next: docs-rst: Fix typos in kfigure.py
  linux-next: DOC: HWPOISON: Fix path to debugfs in hwpoison.txt
  Documentation: Fix misconversion of #if
  docs: add index entry for networking/msg_zerocopy
  Documentation: security/credentials.rst: explain need to sort group_list
  LICENSES: Add MPL-1.1 license
  LICENSES: Add the GPL 1.0 license
  LICENSES: Add Linux syscall note exception
  LICENSES: Add the MIT license
  LICENSES: Add the BSD-3-clause "Clear" license
  LICENSES: Add the BSD 3-clause "New" or "Revised" License
  LICENSES: Add the BSD 2-clause "Simplified" license
  LICENSES: Add the LGPL-2.1 license
  LICENSES: Add the LGPL 2.0 license
  LICENSES: Add the GPL 2.0 license
  Documentation: Add license-rules.rst to describe how to properly identify file licenses
  scripts: kernel_doc: better handle show warnings logic
  fs/*/Kconfig: drop links to 404-compliant http://acl.bestbits.at
  doc: md: Fix a file name to md-fault.c in fault-injection.txt
  errseq: Add to documentation tree
  ...
parents d76e0a05 ae17a87d
...@@ -228,8 +228,6 @@ isdn/ ...@@ -228,8 +228,6 @@ isdn/
- directory with info on the Linux ISDN support, and supported cards. - directory with info on the Linux ISDN support, and supported cards.
kbuild/ kbuild/
- directory with info about the kernel build process. - directory with info about the kernel build process.
kernel-doc-nano-HOWTO.txt
- outdated info about kernel-doc documentation.
kdump/ kdump/
- directory with mini HowTo on getting the crash dump code to work. - directory with mini HowTo on getting the crash dump code to work.
doc-guide/ doc-guide/
...@@ -346,8 +344,6 @@ prctl/ ...@@ -346,8 +344,6 @@ prctl/
- directory with info on the priveledge control subsystem - directory with info on the priveledge control subsystem
preempt-locking.txt preempt-locking.txt
- info on locking under a preemptive kernel. - info on locking under a preemptive kernel.
printk-formats.txt
- how to get printk format specifiers right
process/ process/
- how to work with the mainline kernel development process. - how to work with the mainline kernel development process.
pps/ pps/
......
...@@ -2538,6 +2538,9 @@ ...@@ -2538,6 +2538,9 @@
This is useful when you use a panic=... timeout and This is useful when you use a panic=... timeout and
need the box quickly up again. need the box quickly up again.
These settings can be accessed at runtime via
the nmi_watchdog and hardlockup_panic sysctls.
netpoll.carrier_timeout= netpoll.carrier_timeout=
[NET] Specifies amount of time (in seconds) that [NET] Specifies amount of time (in seconds) that
netpoll should wait for a carrier. By default netpoll netpoll should wait for a carrier. By default netpoll
......
...@@ -9,14 +9,14 @@ This will allow you to execute Mono-based .NET binaries just like any ...@@ -9,14 +9,14 @@ This will allow you to execute Mono-based .NET binaries just like any
other program after you have done the following: other program after you have done the following:
1) You MUST FIRST install the Mono CLR support, either by downloading 1) You MUST FIRST install the Mono CLR support, either by downloading
a binary package, a source tarball or by installing from CVS. Binary a binary package, a source tarball or by installing from Git. Binary
packages for several distributions can be found at: packages for several distributions can be found at:
http://go-mono.com/download.html http://www.mono-project.com/download/
Instructions for compiling Mono can be found at: Instructions for compiling Mono can be found at:
http://www.go-mono.com/compiling.html http://www.mono-project.com/docs/compiling-mono/linux/
Once the Mono CLR support has been installed, just check that Once the Mono CLR support has been installed, just check that
``/usr/bin/mono`` (which could be located elsewhere, for example ``/usr/bin/mono`` (which could be located elsewhere, for example
......
...@@ -88,7 +88,6 @@ finally: ...@@ -88,7 +88,6 @@ finally:
if makefile_version and makefile_patchlevel: if makefile_version and makefile_patchlevel:
version = release = makefile_version + '.' + makefile_patchlevel version = release = makefile_version + '.' + makefile_patchlevel
else: else:
sys.stderr.write('Warning: Could not extract kernel version\n')
version = release = "unknown version" version = release = "unknown version"
# The language for content autogenerated by Sphinx. Refer to documentation # The language for content autogenerated by Sphinx. Refer to documentation
......
=====================
The errseq_t datatype The errseq_t datatype
===================== =====================
An errseq_t is a way of recording errors in one place, and allowing any An errseq_t is a way of recording errors in one place, and allowing any
number of "subscribers" to tell whether it has changed since a previous number of "subscribers" to tell whether it has changed since a previous
point where it was sampled. point where it was sampled.
...@@ -21,12 +23,13 @@ a flag to tell whether the value has been sampled since a new value was ...@@ -21,12 +23,13 @@ a flag to tell whether the value has been sampled since a new value was
recorded. That allows us to avoid bumping the counter if no one has recorded. That allows us to avoid bumping the counter if no one has
sampled it since the last time an error was recorded. sampled it since the last time an error was recorded.
Thus we end up with a value that looks something like this:: Thus we end up with a value that looks something like this:
bit: 31..13 12 11..0 +--------------------------------------+----+------------------------+
+-----------------+----+----------------+ | 31..13 | 12 | 11..0 |
| counter | SF | errno | +--------------------------------------+----+------------------------+
+-----------------+----+----------------+ | counter | SF | errno |
+--------------------------------------+----+------------------------+
The general idea is for "watchers" to sample an errseq_t value and keep The general idea is for "watchers" to sample an errseq_t value and keep
it as a running cursor. That value can later be used to tell whether it as a running cursor. That value can later be used to tell whether
...@@ -42,6 +45,7 @@ has ever been an error set since it was first initialized. ...@@ -42,6 +45,7 @@ has ever been an error set since it was first initialized.
API usage API usage
========= =========
Let me tell you a story about a worker drone. Now, he's a good worker Let me tell you a story about a worker drone. Now, he's a good worker
overall, but the company is a little...management heavy. He has to overall, but the company is a little...management heavy. He has to
report to 77 supervisors today, and tomorrow the "big boss" is coming in report to 77 supervisors today, and tomorrow the "big boss" is coming in
...@@ -125,6 +129,7 @@ not usable by anyone else. ...@@ -125,6 +129,7 @@ not usable by anyone else.
Serializing errseq_t cursor updates Serializing errseq_t cursor updates
=================================== ===================================
Note that the errseq_t API does not protect the errseq_t cursor during a Note that the errseq_t API does not protect the errseq_t cursor during a
check_and_advance_operation. Only the canonical error code is handled check_and_advance_operation. Only the canonical error code is handled
atomically. In a situation where more than one task might be using the atomically. In a situation where more than one task might be using the
...@@ -147,3 +152,8 @@ errseq_check_and_advance after taking the lock. e.g.:: ...@@ -147,3 +152,8 @@ errseq_check_and_advance after taking the lock. e.g.::
That avoids the spinlock in the common case where nothing has changed That avoids the spinlock in the common case where nothing has changed
since the last time it was checked. since the last time it was checked.
Functions
=========
.. kernel-doc:: lib/errseq.c
...@@ -14,6 +14,7 @@ Core utilities ...@@ -14,6 +14,7 @@ Core utilities
kernel-api kernel-api
assoc_array assoc_array
atomic_ops atomic_ops
refcount-vs-atomic
cpu_hotplug cpu_hotplug
local_ops local_ops
workqueue workqueue
...@@ -21,6 +22,8 @@ Core utilities ...@@ -21,6 +22,8 @@ Core utilities
flexible-arrays flexible-arrays
librs librs
genalloc genalloc
errseq
printk-formats
Interfaces for kernel debugging Interfaces for kernel debugging
=============================== ===============================
......
...@@ -139,6 +139,21 @@ Division Functions ...@@ -139,6 +139,21 @@ Division Functions
.. kernel-doc:: lib/gcd.c .. kernel-doc:: lib/gcd.c
:export: :export:
Sorting
-------
.. kernel-doc:: lib/sort.c
:export:
.. kernel-doc:: lib/list_sort.c
:export:
UUID/GUID
---------
.. kernel-doc:: lib/uuid.c
:export:
Memory Management in Linux Memory Management in Linux
========================== ==========================
......
===================================
refcount_t API compared to atomic_t
===================================
.. contents:: :local:
Introduction
============
The goal of refcount_t API is to provide a minimal API for implementing
an object's reference counters. While a generic architecture-independent
implementation from lib/refcount.c uses atomic operations underneath,
there are a number of differences between some of the ``refcount_*()`` and
``atomic_*()`` functions with regards to the memory ordering guarantees.
This document outlines the differences and provides respective examples
in order to help maintainers validate their code against the change in
these memory ordering guarantees.
The terms used through this document try to follow the formal LKMM defined in
github.com/aparri/memory-model/blob/master/Documentation/explanation.txt
memory-barriers.txt and atomic_t.txt provide more background to the
memory ordering in general and for atomic operations specifically.
Relevant types of memory ordering
=================================
.. note:: The following section only covers some of the memory
ordering types that are relevant for the atomics and reference
counters and used through this document. For a much broader picture
please consult memory-barriers.txt document.
In the absence of any memory ordering guarantees (i.e. fully unordered)
atomics & refcounters only provide atomicity and
program order (po) relation (on the same CPU). It guarantees that
each ``atomic_*()`` and ``refcount_*()`` operation is atomic and instructions
are executed in program order on a single CPU.
This is implemented using :c:func:`READ_ONCE`/:c:func:`WRITE_ONCE` and
compare-and-swap primitives.
A strong (full) memory ordering guarantees that all prior loads and
stores (all po-earlier instructions) on the same CPU are completed
before any po-later instruction is executed on the same CPU.
It also guarantees that all po-earlier stores on the same CPU
and all propagated stores from other CPUs must propagate to all
other CPUs before any po-later instruction is executed on the original
CPU (A-cumulative property). This is implemented using :c:func:`smp_mb`.
A RELEASE memory ordering guarantees that all prior loads and
stores (all po-earlier instructions) on the same CPU are completed
before the operation. It also guarantees that all po-earlier
stores on the same CPU and all propagated stores from other CPUs
must propagate to all other CPUs before the release operation
(A-cumulative property). This is implemented using
:c:func:`smp_store_release`.
A control dependency (on success) for refcounters guarantees that
if a reference for an object was successfully obtained (reference
counter increment or addition happened, function returned true),
then further stores are ordered against this operation.
Control dependency on stores are not implemented using any explicit
barriers, but rely on CPU not to speculate on stores. This is only
a single CPU relation and provides no guarantees for other CPUs.
Comparison of functions
=======================
case 1) - non-"Read/Modify/Write" (RMW) ops
-------------------------------------------
Function changes:
* :c:func:`atomic_set` --> :c:func:`refcount_set`
* :c:func:`atomic_read` --> :c:func:`refcount_read`
Memory ordering guarantee changes:
* none (both fully unordered)
case 2) - increment-based ops that return no value
--------------------------------------------------
Function changes:
* :c:func:`atomic_inc` --> :c:func:`refcount_inc`
* :c:func:`atomic_add` --> :c:func:`refcount_add`
Memory ordering guarantee changes:
* none (both fully unordered)
case 3) - decrement-based RMW ops that return no value
------------------------------------------------------
Function changes:
* :c:func:`atomic_dec` --> :c:func:`refcount_dec`
Memory ordering guarantee changes:
* fully unordered --> RELEASE ordering
case 4) - increment-based RMW ops that return a value
-----------------------------------------------------
Function changes:
* :c:func:`atomic_inc_not_zero` --> :c:func:`refcount_inc_not_zero`
* no atomic counterpart --> :c:func:`refcount_add_not_zero`
Memory ordering guarantees changes:
* fully ordered --> control dependency on success for stores
.. note:: We really assume here that necessary ordering is provided as a
result of obtaining pointer to the object!
case 5) - decrement-based RMW ops that return a value
-----------------------------------------------------
Function changes:
* :c:func:`atomic_dec_and_test` --> :c:func:`refcount_dec_and_test`
* :c:func:`atomic_sub_and_test` --> :c:func:`refcount_sub_and_test`
* no atomic counterpart --> :c:func:`refcount_dec_if_one`
* ``atomic_add_unless(&var, -1, 1)`` --> ``refcount_dec_not_one(&var)``
Memory ordering guarantees changes:
* fully ordered --> RELEASE ordering + control dependency
.. note:: :c:func:`atomic_add_unless` only provides full order on success.
case 6) - lock-based RMW
------------------------
Function changes:
* :c:func:`atomic_dec_and_lock` --> :c:func:`refcount_dec_and_lock`
* :c:func:`atomic_dec_and_mutex_lock` --> :c:func:`refcount_dec_and_mutex_lock`
Memory ordering guarantees changes:
* fully ordered --> RELEASE ordering + control dependency + hold
:c:func:`spin_lock` on success
This diff is collapsed.
...@@ -13,12 +13,6 @@ Driver device table ...@@ -13,12 +13,6 @@ Driver device table
.. kernel-doc:: include/linux/mod_devicetable.h .. kernel-doc:: include/linux/mod_devicetable.h
:internal: :internal:
Atomic and pointer manipulation
-------------------------------
.. kernel-doc:: arch/x86/include/asm/atomic.h
:internal:
Delaying, scheduling, and timer routines Delaying, scheduling, and timer routines
---------------------------------------- ----------------------------------------
...@@ -85,6 +79,21 @@ Internal Functions ...@@ -85,6 +79,21 @@ Internal Functions
.. kernel-doc:: kernel/kthread.c .. kernel-doc:: kernel/kthread.c
:export: :export:
Reference counting
------------------
.. kernel-doc:: include/linux/refcount.h
:internal:
.. kernel-doc:: lib/refcount.c
:export:
Atomics
-------
.. kernel-doc:: arch/x86/include/asm/atomic.h
:internal:
Kernel objects manipulation Kernel objects manipulation
--------------------------- ---------------------------
......
...@@ -98,3 +98,55 @@ you to check the sanity of the setup. ...@@ -98,3 +98,55 @@ you to check the sanity of the setup.
cat /dev/ttyUSB0 cat /dev/ttyUSB0
done done
===== end of bash scripts =============== ===== end of bash scripts ===============
Serial TTY
==========
The DbC support has been added to the xHCI driver. You can get a
debug device provided by the DbC at runtime.
In order to use this, you need to make sure your kernel has been
configured to support USB_XHCI_DBGCAP. A sysfs attribute under
the xHCI device node is used to enable or disable DbC. By default,
DbC is disabled::
root@target:/sys/bus/pci/devices/0000:00:14.0# cat dbc
disabled
Enable DbC with the following command::
root@target:/sys/bus/pci/devices/0000:00:14.0# echo enable > dbc
You can check the DbC state at anytime::
root@target:/sys/bus/pci/devices/0000:00:14.0# cat dbc
enabled
Connect the debug target to the debug host with a USB 3.0 super-
speed A-to-A debugging cable. You can see /dev/ttyDBC0 created
on the debug target. You will see below kernel message lines::
root@target: tail -f /var/log/kern.log
[ 182.730103] xhci_hcd 0000:00:14.0: DbC connected
[ 191.169420] xhci_hcd 0000:00:14.0: DbC configured
[ 191.169597] xhci_hcd 0000:00:14.0: DbC now attached to /dev/ttyDBC0
Accordingly, the DbC state has been brought up to::
root@target:/sys/bus/pci/devices/0000:00:14.0# cat dbc
configured
On the debug host, you will see the debug device has been enumerated.
You will see below kernel message lines::
root@host: tail -f /var/log/kern.log
[ 79.454780] usb 2-2.1: new SuperSpeed USB device number 3 using xhci_hcd
[ 79.475003] usb 2-2.1: LPM exit latency is zeroed, disabling LPM.
[ 79.475389] usb 2-2.1: New USB device found, idVendor=1d6b, idProduct=0010
[ 79.475390] usb 2-2.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 79.475391] usb 2-2.1: Product: Linux USB Debug Target
[ 79.475392] usb 2-2.1: Manufacturer: Linux Foundation
[ 79.475393] usb 2-2.1: SerialNumber: 0001
The debug device works now. You can use any communication or debugging
program to talk between the host and the target.
...@@ -321,6 +321,6 @@ linux-usb-devel Mailing List Archives: ...@@ -321,6 +321,6 @@ linux-usb-devel Mailing List Archives:
http://marc.theaimsgroup.com/?l=linux-usb-devel http://marc.theaimsgroup.com/?l=linux-usb-devel
Programming Guide for Linux USB Device Drivers: Programming Guide for Linux USB Device Drivers:
http://usb.cs.tum.edu/usbdoc http://lmu.web.psi.ch/docu/manuals/software_manuals/linux_sl/usb_linux_programming_guide.pdf
USB Home Page: http://www.usb.org USB Home Page: http://www.usb.org
Fault injection capabilities infrastructure Fault injection capabilities infrastructure
=========================================== ===========================================
See also drivers/md/faulty.c and "every_nth" module option for scsi_debug. See also drivers/md/md-faulty.c and "every_nth" module option for scsi_debug.
Available fault injection capabilities Available fault injection capabilities
......
...@@ -49,12 +49,10 @@ sb=n Use alternate superblock at this location. ...@@ -49,12 +49,10 @@ sb=n Use alternate superblock at this location.
user_xattr Enable "user." POSIX Extended Attributes user_xattr Enable "user." POSIX Extended Attributes
(requires CONFIG_EXT2_FS_XATTR). (requires CONFIG_EXT2_FS_XATTR).
See also http://acl.bestbits.at
nouser_xattr Don't support "user." extended attributes. nouser_xattr Don't support "user." extended attributes.
acl Enable POSIX Access Control Lists support acl Enable POSIX Access Control Lists support
(requires CONFIG_EXT2_FS_POSIX_ACL). (requires CONFIG_EXT2_FS_POSIX_ACL).
See also http://acl.bestbits.at
noacl Don't support POSIX ACLs. noacl Don't support POSIX ACLs.
nobh Do not attach buffer_heads to file pagecache. nobh Do not attach buffer_heads to file pagecache.
......
...@@ -202,15 +202,14 @@ inode_readahead_blks=n This tuning parameter controls the maximum ...@@ -202,15 +202,14 @@ inode_readahead_blks=n This tuning parameter controls the maximum
the buffer cache. The default value is 32 blocks. the buffer cache. The default value is 32 blocks.
nouser_xattr Disables Extended User Attributes. See the nouser_xattr Disables Extended User Attributes. See the
attr(5) manual page and http://acl.bestbits.at/ attr(5) manual page for more information about
for more information about extended attributes. extended attributes.
noacl This option disables POSIX Access Control List noacl This option disables POSIX Access Control List
support. If ACL support is enabled in the kernel support. If ACL support is enabled in the kernel
configuration (CONFIG_EXT4_FS_POSIX_ACL), ACL is configuration (CONFIG_EXT4_FS_POSIX_ACL), ACL is
enabled by default on mount. See the acl(5) manual enabled by default on mount. See the acl(5) manual
page and http://acl.bestbits.at/ for more information page for more information about acl.
about acl.
bsddf (*) Make 'df' act like BSD. bsddf (*) Make 'df' act like BSD.
minixdf Make 'df' act like Minix. minixdf Make 'df' act like Minix.
......
...@@ -344,4 +344,4 @@ the following: ...@@ -344,4 +344,4 @@ the following:
characters in the final slot are set to Unicode 0xFFFF. characters in the final slot are set to Unicode 0xFFFF.
Finally, note that the extended name is stored in Unicode. Each Unicode Finally, note that the extended name is stored in Unicode. Each Unicode
character takes two bytes. character takes either two or four bytes, UTF-16LE encoded.
...@@ -17,13 +17,16 @@ i2c-10, ...). All 256 minor device numbers are reserved for i2c. ...@@ -17,13 +17,16 @@ i2c-10, ...). All 256 minor device numbers are reserved for i2c.
C example C example
========= =========
So let's say you want to access an i2c adapter from a C program. The So let's say you want to access an i2c adapter from a C program.
first thing to do is "#include <linux/i2c-dev.h>". Please note that First, you need to include these two headers:
there are two files named "i2c-dev.h" out there, one is distributed
with the Linux kernel and is meant to be included from kernel #include <linux/i2c-dev.h>
driver code, the other one is distributed with i2c-tools and is #include <i2c/smbus.h>
meant to be included from user-space programs. You obviously want
the second one here. (Please note that there are two files named "i2c-dev.h" out there. One is
distributed with the Linux kernel and the other one is included in the
source tree of i2c-tools. They used to be different in content but since 2012
they're identical. You should use "linux/i2c-dev.h").
Now, you have to decide which adapter you want to access. You should Now, you have to decide which adapter you want to access. You should
inspect /sys/class/i2c-dev/ or run "i2cdetect -l" to decide this. inspect /sys/class/i2c-dev/ or run "i2cdetect -l" to decide this.
......
...@@ -13,6 +13,18 @@ documents into a coherent whole. Please note that improvements to the ...@@ -13,6 +13,18 @@ documents into a coherent whole. Please note that improvements to the
documentation are welcome; join the linux-doc list at vger.kernel.org if documentation are welcome; join the linux-doc list at vger.kernel.org if
you want to help out. you want to help out.
Licensing documentation
-----------------------
The following describes the license of the Linux kernel source code
(GPLv2), how to properly mark the license of individual files in the source
tree, as well as links to the full license text.
.. toctree::
:maxdepth: 2
process/license-rules.rst
User-oriented documentation User-oriented documentation
--------------------------- ---------------------------
...@@ -52,6 +64,7 @@ merged much easier. ...@@ -52,6 +64,7 @@ merged much easier.
dev-tools/index dev-tools/index
doc-guide/index doc-guide/index
kernel-hacking/index kernel-hacking/index
maintainer/index
Kernel API documentation Kernel API documentation
------------------------ ------------------------
......
...@@ -77,6 +77,27 @@ applicable everywhere (see syntax). ...@@ -77,6 +77,27 @@ applicable everywhere (see syntax).
Optionally, dependencies only for this default value can be added with Optionally, dependencies only for this default value can be added with
"if". "if".
The default value deliberately defaults to 'n' in order to avoid bloating the
build. With few exceptions, new config options should not change this. The
intent is for "make oldconfig" to add as little as possible to the config from
release to release.
Note:
Things that merit "default y/m" include:
a) A new Kconfig option for something that used to always be built
should be "default y".
b) A new gatekeeping Kconfig option that hides/shows other Kconfig
options (but does not generate any code of its own), should be
"default y" so people will see those other options.
c) Sub-driver behavior or similar options for a driver that is
"default n". This allows you to provide sane defaults.
d) Hardware or infrastructure that everybody expects, such as CONFIG_NET
or CONFIG_BLOCK. These are rare exceptions.
- type definition + default value: - type definition + default value:
"def_bool"/"def_tristate" <expr> ["if" <expr>] "def_bool"/"def_tristate" <expr> ["if" <expr>]
This is a shorthand notation for a type definition plus a value. This is a shorthand notation for a type definition plus a value.
......
This diff is collapsed.
...@@ -523,7 +523,7 @@ this expression is true, or ``-ERESTARTSYS`` if a signal is received. The ...@@ -523,7 +523,7 @@ this expression is true, or ``-ERESTARTSYS`` if a signal is received. The
Waking Up Queued Tasks Waking Up Queued Tasks
---------------------- ----------------------
Call :c:func:`wake_up()` (``include/linux/wait.h``);, which will wake Call :c:func:`wake_up()` (``include/linux/wait.h``), which will wake
up every process in the queue. The exception is if one has up every process in the queue. The exception is if one has
``TASK_EXCLUSIVE`` set, in which case the remainder of the queue will ``TASK_EXCLUSIVE`` set, in which case the remainder of the queue will
not be woken. There are other variants of this basic function available not be woken. There are other variants of this basic function available
...@@ -690,8 +690,8 @@ not provide the necessary runtime environment and the include files are ...@@ -690,8 +690,8 @@ not provide the necessary runtime environment and the include files are
not tested for it. It is still possible, but not recommended. If you not tested for it. It is still possible, but not recommended. If you
really want to do this, forget about exceptions at least. really want to do this, forget about exceptions at least.
NUMif #if
----- ---
It is generally considered cleaner to use macros in header files (or at It is generally considered cleaner to use macros in header files (or at
the top of .c files) to abstract away functions rather than using \`#if' the top of .c files) to abstract away functions rather than using \`#if'
......
# -*- coding: utf-8; mode: python -*-
project = 'Linux Kernel Development Documentation'
tags.add("subproject")
latex_documents = [
('index', 'maintainer.tex', 'Linux Kernel Development Documentation',
'The kernel development community', 'manual'),
]
.. _configuregit:
Configure Git
=============
This chapter describes maintainer level git configuration.
Tagged branches used in :ref:`Documentation/maintainer/pull-requests.rst
<pullrequests>` should be signed with the developers public GPG key. Signed
tags can be created by passing the ``-u`` flag to ``git tag``. However,
since you would *usually* use the same key for the same project, you can
set it once with
::
git config user.signingkey "keyname"
Alternatively, edit your ``.git/config`` or ``~/.gitconfig`` file by hand:
::
[user]
name = Jane Developer
email = jd@domain.org
signingkey = jd@domain.org
You may need to tell ``git`` to use ``gpg2``
::
[gpg]
program = /path/to/gpg2
You may also like to tell ``gpg`` which ``tty`` to use (add to your shell rc file)
::
export GPG_TTY=$(tty)
==========================
Kernel Maintainer Handbook
==========================
This document is the humble beginning of a manual for kernel maintainers.
There is a lot yet to go here! Please feel free to propose (and write)
additions to this manual.
.. toctree::
:maxdepth: 2
configure-git
pull-requests
.. _pullrequests:
Creating Pull Requests
======================
This chapter describes how maintainers can create and submit pull requests
to other maintainers. This is useful for transferring changes from one
maintainers tree to another maintainers tree.
This document was written by Tobin C. Harding (who at that time, was not an
experienced maintainer) primarily from comments made by Greg Kroah-Hartman
and Linus Torvalds on LKML. Suggestions and fixes by Jonathan Corbet and
Mauro Carvalho Chehab. Misrepresentation was unintentional but inevitable,
please direct abuse to Tobin C. Harding <me@tobin.cc>.
Original email thread::
http://lkml.kernel.org/r/20171114110500.GA21175@kroah.com
Create Branch
-------------
To start with you will need to have all the changes you wish to include in
the pull request on a separate branch. Typically you will base this branch
off of a branch in the developers tree whom you intend to send the pull
request to.
In order to create the pull request you must first tag the branch that you
have just created. It is recommended that you choose a meaningful tag name,
in a way that you and others can understand, even after some time. A good
practice is to include in the name an indicator of the sybsystem of origin
and the target kernel version.
Greg offers the following. A pull request with miscellaneous stuff for
drivers/char, to be applied at the Kernel version 4.15-rc1 could be named
as ``char-misc-4.15-rc1``. If such tag would be produced from a branch
named ``char-misc-next``, you would be using the following command::
git tag -s char-misc-4.15-rc1 char-misc-next
that will create a signed tag called ``char-misc-4.15-rc1`` based on the
last commit in the ``char-misc-next`` branch, and sign it with your gpg key
(see :ref:`Documentation/maintainer/configure_git.rst <configuregit>`).
Linus will only accept pull requests based on a signed tag. Other
maintainers may differ.
When you run the above command ``git`` will drop you into an editor and ask
you to describe the tag. In this case, you are describing a pull request,
so outline what is contained here, why it should be merged, and what, if
any, testing has been done. All of this information will end up in the tag
itself, and then in the merge commit that the maintainer makes if/when they
merge the pull request. So write it up well, as it will be in the kernel
tree for forever.
As said by Linus::
Anyway, at least to me, the important part is the *message*. I want
to understand what I'm pulling, and why I should pull it. I also
want to use that message as the message for the merge, so it should
not just make sense to me, but make sense as a historical record
too.
Note that if there is something odd about the pull request, that
should very much be in the explanation. If you're touching files
that you don't maintain, explain _why_. I will see it in the
diffstat anyway, and if you didn't mention it, I'll just be extra
suspicious. And when you send me new stuff after the merge window
(or even bug-fixes, but ones that look scary), explain not just
what they do and why they do it, but explain the _timing_. What
happened that this didn't go through the merge window..
I will take both what you write in the email pull request _and_ in
the signed tag, so depending on your workflow, you can either
describe your work in the signed tag (which will also automatically
make it into the pull request email), or you can make the signed
tag just a placeholder with nothing interesting in it, and describe
the work later when you actually send me the pull request.
And yes, I will edit the message. Partly because I tend to do just
trivial formatting (the whole indentation and quoting etc), but
partly because part of the message may make sense for me at pull
time (describing the conflicts and your personal issues for sending
it right now), but may not make sense in the context of a merge
commit message, so I will try to make it all make sense. I will
also fix any speeling mistaeks and bad grammar I notice,
particularly for non-native speakers (but also for native ones
;^). But I may miss some, or even add some.
Linus
Greg gives, as an example pull request::
Char/Misc patches for 4.15-rc1
Here is the big char/misc patch set for the 4.15-rc1 merge window.
Contained in here is the normal set of new functions added to all
of these crazy drivers, as well as the following brand new
subsystems:
- time_travel_controller: Finally a set of drivers for the
latest time travel bus architecture that provides i/o to
the CPU before it asked for it, allowing uninterrupted
processing
- relativity_shifters: due to the affect that the
time_travel_controllers have on the overall system, there
was a need for a new set of relativity shifter drivers to
accommodate the newly formed black holes that would
threaten to suck CPUs into them. This subsystem handles
this in a way to successfully neutralize the problems.
There is a Kconfig option to force these to be enabled
when needed, so problems should not occur.
All of these patches have been successfully tested in the latest
linux-next releases, and the original problems that it found have
all been resolved (apologies to anyone living near Canberra for the
lack of the Kconfig options in the earlier versions of the
linux-next tree creations.)
Signed-off-by: Your-name-here <your_email@domain>
The tag message format is just like a git commit id. One line at the top
for a "summary subject" and be sure to sign-off at the bottom.
Now that you have a local signed tag, you need to push it up to where it
can be retrieved::
git push origin char-misc-4.15-rc1
Create Pull Request
-------------------
The last thing to do is create the pull request message. ``git`` handily
will do this for you with the ``git request-pull`` command, but it needs a
bit of help determining what you want to pull, and on what to base the pull
against (to show the correct changes to be pulled and the diffstat). The
following command(s) will generate a pull request::
git request-pull master git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc.git/ char-misc-4.15-rc1
Quoting Greg::
This is asking git to compare the difference from the
'char-misc-4.15-rc1' tag location, to the head of the 'master'
branch (which in my case points to the last location in Linus's
tree that I diverged from, usually a -rc release) and to use the
git:// protocol to pull from. If you wish to use https://, that
can be used here instead as well (but note that some people behind
firewalls will have problems with https git pulls).
If the char-misc-4.15-rc1 tag is not present in the repo that I am
asking to be pulled from, git will complain saying it is not there,
a handy way to remember to actually push it to a public location.
The output of 'git request-pull' will contain the location of the
git tree and specific tag to pull from, and the full text
description of that tag (which is why you need to provide good
information in that tag). It will also create a diffstat of the
pull request, and a shortlog of the individual commits that the
pull request will provide.
Linus responded that he tends to prefer the ``git://`` protocol. Other
maintainers may have different preferences. Also, note that if you are
creating pull requests without a signed tag then ``https://`` may be a
better choice. Please see the original thread for the full discussion.
Submit Pull Request
-------------------
A pull request is submitted in the same way as an ordinary patch. Send as
inline email to the maintainer and CC LKML and any sub-system specific
lists if required. Pull requests to Linus typically have a subject line
something like::
[GIT PULL] <subsystem> changes for v4.15-rc1
...@@ -68,6 +68,7 @@ we might work for today, have in the past, or will in the future. ...@@ -68,6 +68,7 @@ we might work for today, have in the past, or will in the future.
- Paul Burton - Paul Burton
- Javier Martinez Canillas - Javier Martinez Canillas
- Rob Clark - Rob Clark
- Kees Cook (Google)
- Jonathan Corbet - Jonathan Corbet
- Dennis Dalessandro - Dennis Dalessandro
- Vivien Didelot (Savoir-faire Linux) - Vivien Didelot (Savoir-faire Linux)
...@@ -137,6 +138,7 @@ we might work for today, have in the past, or will in the future. ...@@ -137,6 +138,7 @@ we might work for today, have in the past, or will in the future.
- Anna Schumaker - Anna Schumaker
- Jes Sorensen - Jes Sorensen
- K.Y. Srinivasan - K.Y. Srinivasan
- David Sterba (SUSE)
- Heiko Stuebner - Heiko Stuebner
- Jiri Kosina (SUSE) - Jiri Kosina (SUSE)
- Willy Tarreau - Willy Tarreau
...@@ -144,6 +146,7 @@ we might work for today, have in the past, or will in the future. ...@@ -144,6 +146,7 @@ we might work for today, have in the past, or will in the future.
- Linus Torvalds - Linus Torvalds
- Thierry Reding - Thierry Reding
- Rik van Riel - Rik van Riel
- Luis R. Rodriguez
- Geert Uytterhoeven (Glider bvba) - Geert Uytterhoeven (Glider bvba)
- Eduardo Valentin (Amazon.com) - Eduardo Valentin (Amazon.com)
- Daniel Vetter - Daniel Vetter
......
This diff is collapsed.
...@@ -37,7 +37,9 @@ and elsewhere regarding submitting Linux kernel patches. ...@@ -37,7 +37,9 @@ and elsewhere regarding submitting Linux kernel patches.
You should be able to justify all violations that remain in You should be able to justify all violations that remain in
your patch. your patch.
6) Any new or modified ``CONFIG`` options don't muck up the config menu. 6) Any new or modified ``CONFIG`` options do not muck up the config menu and
default to off unless they meet the exception criteria documented in
``Documentation/kbuild/kconfig-language.txt`` Menu attributes: default value.
7) All new ``Kconfig`` options have help text. 7) All new ``Kconfig`` options have help text.
......
...@@ -451,6 +451,13 @@ checks and hooks done. Both the current and the proposed sets of credentials ...@@ -451,6 +451,13 @@ checks and hooks done. Both the current and the proposed sets of credentials
are available for this purpose as current_cred() will return the current set are available for this purpose as current_cred() will return the current set
still at this point. still at this point.
When replacing the group list, the new list must be sorted before it
is added to the credential, as a binary search is used to test for
membership. In practice, this means :c:func:`groups_sort` should be
called before :c:func:`set_groups` or :c:func:`set_current_groups`.
:c:func:`groups_sort)` must not be called on a ``struct group_list`` which
is shared as it may permute elements as part of the sorting process
even if the array is already sorted.
When the credential set is ready, it should be committed to the current process When the credential set is ready, it should be committed to the current process
by calling:: by calling::
......
...@@ -270,6 +270,21 @@ attacks, it is important to defend against exposure of both kernel memory ...@@ -270,6 +270,21 @@ attacks, it is important to defend against exposure of both kernel memory
addresses and kernel memory contents (since they may contain kernel addresses and kernel memory contents (since they may contain kernel
addresses or other sensitive things like canary values). addresses or other sensitive things like canary values).
Kernel addresses
----------------
Printing kernel addresses to userspace leaks sensitive information about
the kernel memory layout. Care should be exercised when using any printk
specifier that prints the raw address, currently %px, %p[ad], (and %p[sSb]
in certain circumstances [*]). Any file written to using one of these
specifiers should be readable only by privileged processes.
Kernels 4.14 and older printed the raw address using %p. As of 4.15-rc1
addresses printed with the specifier %p are hashed before printing.
[*] If KALLSYMS is enabled and symbol lookup fails, the raw address is
printed. If KALLSYMS is not enabled the raw address is printed.
Unique identifiers Unique identifiers
------------------ ------------------
......
...@@ -81,7 +81,7 @@ __version__ = '1.0.0' ...@@ -81,7 +81,7 @@ __version__ = '1.0.0'
# ------------- # -------------
def which(cmd): def which(cmd):
"""Searches the ``cmd`` in the ``PATH`` enviroment. """Searches the ``cmd`` in the ``PATH`` environment.
This *which* searches the PATH for executable ``cmd`` . First match is This *which* searches the PATH for executable ``cmd`` . First match is
returned, if nothing is found, ``None` is returned. returned, if nothing is found, ``None` is returned.
...@@ -419,7 +419,7 @@ def visit_kernel_render(self, node): ...@@ -419,7 +419,7 @@ def visit_kernel_render(self, node):
tmp_ext = RENDER_MARKUP_EXT.get(srclang, None) tmp_ext = RENDER_MARKUP_EXT.get(srclang, None)
if tmp_ext is None: if tmp_ext is None:
app.warn('kernel-render: "%s" unknow / include raw.' % (srclang)) app.warn('kernel-render: "%s" unknown / include raw.' % (srclang))
return return
if not dot_cmd and tmp_ext == '.dot': if not dot_cmd and tmp_ext == '.dot':
...@@ -482,7 +482,7 @@ class KernelRender(Figure): ...@@ -482,7 +482,7 @@ class KernelRender(Figure):
srclang = self.arguments[0].strip() srclang = self.arguments[0].strip()
if srclang not in RENDER_MARKUP_EXT.keys(): if srclang not in RENDER_MARKUP_EXT.keys():
return [self.state_machine.reporter.warning( return [self.state_machine.reporter.warning(
'Unknow source language "%s", use one of: %s.' % ( 'Unknown source language "%s", use one of: %s.' % (
srclang, ",".join(RENDER_MARKUP_EXT.keys())), srclang, ",".join(RENDER_MARKUP_EXT.keys())),
line=self.lineno)] line=self.lineno)]
......
...@@ -34,6 +34,7 @@ show up in /proc/sys/kernel: ...@@ -34,6 +34,7 @@ show up in /proc/sys/kernel:
- hostname - hostname
- hotplug - hotplug
- hardlockup_all_cpu_backtrace - hardlockup_all_cpu_backtrace
- hardlockup_panic
- hung_task_panic - hung_task_panic
- hung_task_check_count - hung_task_check_count
- hung_task_timeout_secs - hung_task_timeout_secs
...@@ -313,6 +314,19 @@ will be initiated. ...@@ -313,6 +314,19 @@ will be initiated.
1: on detection capture more debug information. 1: on detection capture more debug information.
============================================================== ==============================================================
hardlockup_panic:
This parameter can be used to control whether the kernel panics
when a hard lockup is detected.
0 - don't panic on hard lockup
1 - panic on hard lockup
See Documentation/lockup-watchdogs.txt for more information. This can
also be set using the nmi_watchdog kernel parameter.
==============================================================
hotplug: hotplug:
Path for the hotplug policy agent. Path for the hotplug policy agent.
...@@ -377,7 +391,8 @@ kptr_restrict: ...@@ -377,7 +391,8 @@ kptr_restrict:
This toggle indicates whether restrictions are placed on This toggle indicates whether restrictions are placed on
exposing kernel addresses via /proc and other interfaces. exposing kernel addresses via /proc and other interfaces.
When kptr_restrict is set to (0), the default, there are no restrictions. When kptr_restrict is set to 0 (the default) the address is hashed before
printing. (This is the equivalent to %p.)
When kptr_restrict is set to (1), kernel pointers printed using the %pK When kptr_restrict is set to (1), kernel pointers printed using the %pK
format specifier will be replaced with 0's unless the user has CAP_SYSLOG format specifier will be replaced with 0's unless the user has CAP_SYSLOG
......
...@@ -42,9 +42,9 @@ as well as what protections the callback will perform and not require ...@@ -42,9 +42,9 @@ as well as what protections the callback will perform and not require
ftrace to handle. ftrace to handle.
There is only one field that is needed to be set when registering There is only one field that is needed to be set when registering
an ftrace_ops with ftrace:: an ftrace_ops with ftrace:
.. code-block: c .. code-block:: c
struct ftrace_ops ops = { struct ftrace_ops ops = {
.func = my_callback_func, .func = my_callback_func,
...@@ -81,12 +81,12 @@ may take some time to finish. ...@@ -81,12 +81,12 @@ may take some time to finish.
The callback function The callback function
===================== =====================
The prototype of the callback function is as follows (as of v4.14):: The prototype of the callback function is as follows (as of v4.14):
.. code-block: c .. code-block:: c
void callback_func(unsigned long ip, unsigned long parent_ip, void callback_func(unsigned long ip, unsigned long parent_ip,
struct ftrace_ops *op, struct pt_regs *regs); struct ftrace_ops *op, struct pt_regs *regs);
@ip @ip
This is the instruction pointer of the function that is being traced. This is the instruction pointer of the function that is being traced.
...@@ -176,10 +176,10 @@ Filtering which functions to trace ...@@ -176,10 +176,10 @@ Filtering which functions to trace
If a callback is only to be called from specific functions, a filter must be If a callback is only to be called from specific functions, a filter must be
set up. The filters are added by name, or ip if it is known. set up. The filters are added by name, or ip if it is known.
.. code-block: c .. code-block:: c
int ftrace_set_filter(struct ftrace_ops *ops, unsigned char *buf, int ftrace_set_filter(struct ftrace_ops *ops, unsigned char *buf,
int len, int reset); int len, int reset);
@ops @ops
The ops to set the filter with The ops to set the filter with
...@@ -202,9 +202,9 @@ See Filter Commands in :file:`Documentation/trace/ftrace.txt`. ...@@ -202,9 +202,9 @@ See Filter Commands in :file:`Documentation/trace/ftrace.txt`.
To just trace the schedule function:: To just trace the schedule function::
.. code-block: c .. code-block:: c
ret = ftrace_set_filter(&ops, "schedule", strlen("schedule"), 0); ret = ftrace_set_filter(&ops, "schedule", strlen("schedule"), 0);
To add more functions, call the ftrace_set_filter() more than once with the To add more functions, call the ftrace_set_filter() more than once with the
@reset parameter set to zero. To remove the current filter set and replace it @reset parameter set to zero. To remove the current filter set and replace it
...@@ -212,17 +212,17 @@ with new functions defined by @buf, have @reset be non-zero. ...@@ -212,17 +212,17 @@ with new functions defined by @buf, have @reset be non-zero.
To remove all the filtered functions and trace all functions:: To remove all the filtered functions and trace all functions::
.. code-block: c .. code-block:: c
ret = ftrace_set_filter(&ops, NULL, 0, 1); ret = ftrace_set_filter(&ops, NULL, 0, 1);
Sometimes more than one function has the same name. To trace just a specific Sometimes more than one function has the same name. To trace just a specific
function in this case, ftrace_set_filter_ip() can be used. function in this case, ftrace_set_filter_ip() can be used.
.. code-block: c .. code-block:: c
ret = ftrace_set_filter_ip(&ops, ip, 0, 0); ret = ftrace_set_filter_ip(&ops, ip, 0, 0);
Although the ip must be the address where the call to fentry or mcount is Although the ip must be the address where the call to fentry or mcount is
located in the function. This function is used by perf and kprobes that located in the function. This function is used by perf and kprobes that
...@@ -237,10 +237,10 @@ be called by any function. ...@@ -237,10 +237,10 @@ be called by any function.
An empty "notrace" list means to allow all functions defined by the filter An empty "notrace" list means to allow all functions defined by the filter
to be traced. to be traced.
.. code-block: c .. code-block:: c
int ftrace_set_notrace(struct ftrace_ops *ops, unsigned char *buf, int ftrace_set_notrace(struct ftrace_ops *ops, unsigned char *buf,
int len, int reset); int len, int reset);
This takes the same parameters as ftrace_set_filter() but will add the This takes the same parameters as ftrace_set_filter() but will add the
functions it finds to not be traced. This is a separate list from the functions it finds to not be traced. This is a separate list from the
...@@ -251,7 +251,7 @@ that match @buf to it. ...@@ -251,7 +251,7 @@ that match @buf to it.
Clearing the "notrace" list is the same as clearing the filter list Clearing the "notrace" list is the same as clearing the filter list
.. code-block: c .. code-block:: c
ret = ftrace_set_notrace(&ops, NULL, 0, 1); ret = ftrace_set_notrace(&ops, NULL, 0, 1);
...@@ -264,29 +264,29 @@ If a filter is in place, and the @reset is non-zero, and @buf contains a ...@@ -264,29 +264,29 @@ If a filter is in place, and the @reset is non-zero, and @buf contains a
matching glob to functions, the switch will happen during the time of matching glob to functions, the switch will happen during the time of
the ftrace_set_filter() call. At no time will all functions call the callback. the ftrace_set_filter() call. At no time will all functions call the callback.
.. code-block: c .. code-block:: c
ftrace_set_filter(&ops, "schedule", strlen("schedule"), 1); ftrace_set_filter(&ops, "schedule", strlen("schedule"), 1);
register_ftrace_function(&ops); register_ftrace_function(&ops);
msleep(10); msleep(10);
ftrace_set_filter(&ops, "try_to_wake_up", strlen("try_to_wake_up"), 1); ftrace_set_filter(&ops, "try_to_wake_up", strlen("try_to_wake_up"), 1);
is not the same as: is not the same as:
.. code-block: c .. code-block:: c
ftrace_set_filter(&ops, "schedule", strlen("schedule"), 1); ftrace_set_filter(&ops, "schedule", strlen("schedule"), 1);
register_ftrace_function(&ops); register_ftrace_function(&ops);
msleep(10); msleep(10);
ftrace_set_filter(&ops, NULL, 0, 1); ftrace_set_filter(&ops, NULL, 0, 1);
ftrace_set_filter(&ops, "try_to_wake_up", strlen("try_to_wake_up"), 0); ftrace_set_filter(&ops, "try_to_wake_up", strlen("try_to_wake_up"), 0);
As the latter will have a short time where all functions will call As the latter will have a short time where all functions will call
the callback, between the time of the reset, and the time of the the callback, between the time of the reset, and the time of the
......
...@@ -23,13 +23,13 @@ cat /sys/kernel/debug/ci_hdrc.0/registers ...@@ -23,13 +23,13 @@ cat /sys/kernel/debug/ci_hdrc.0/registers
2) Connect 2 boards with usb cable with one end is micro A plug, the other end 2) Connect 2 boards with usb cable with one end is micro A plug, the other end
is micro B plug. is micro B plug.
The A-device(with micro A plug inserted) should enumrate B-device. The A-device(with micro A plug inserted) should enumerate B-device.
3) Role switch 3) Role switch
On B-device: On B-device:
echo 1 > /sys/bus/platform/devices/ci_hdrc.0/inputs/b_bus_req echo 1 > /sys/bus/platform/devices/ci_hdrc.0/inputs/b_bus_req
B-device should take host role and enumrate A-device. B-device should take host role and enumerate A-device.
4) A-device switch back to host. 4) A-device switch back to host.
On B-device: On B-device:
...@@ -40,13 +40,13 @@ cat /sys/kernel/debug/ci_hdrc.0/registers ...@@ -40,13 +40,13 @@ cat /sys/kernel/debug/ci_hdrc.0/registers
side by answering the polling from B-Host, this can be done on A-device: side by answering the polling from B-Host, this can be done on A-device:
echo 1 > /sys/bus/platform/devices/ci_hdrc.0/inputs/a_bus_req echo 1 > /sys/bus/platform/devices/ci_hdrc.0/inputs/a_bus_req
A-device should switch back to host and enumrate B-device. A-device should switch back to host and enumerate B-device.
5) Remove B-device(unplug micro B plug) and insert again in 10 seconds, 5) Remove B-device(unplug micro B plug) and insert again in 10 seconds,
A-device should enumrate B-device again. A-device should enumerate B-device again.
6) Remove B-device(unplug micro B plug) and insert again after 10 seconds, 6) Remove B-device(unplug micro B plug) and insert again after 10 seconds,
A-device should NOT enumrate B-device. A-device should NOT enumerate B-device.
if A-device wants to use bus: if A-device wants to use bus:
On A-device: On A-device:
...@@ -67,7 +67,7 @@ cat /sys/kernel/debug/ci_hdrc.0/registers ...@@ -67,7 +67,7 @@ cat /sys/kernel/debug/ci_hdrc.0/registers
On B-device: On B-device:
echo 1 > /sys/bus/platform/devices/ci_hdrc.0/inputs/b_bus_req echo 1 > /sys/bus/platform/devices/ci_hdrc.0/inputs/b_bus_req
A-device should resume usb bus and enumrate B-device. A-device should resume usb bus and enumerate B-device.
1.3 Reference document 1.3 Reference document
---------------------- ----------------------
......
...@@ -104,7 +104,7 @@ madvise(MADV_HWPOISON, ....) ...@@ -104,7 +104,7 @@ madvise(MADV_HWPOISON, ....)
hwpoison-inject module through debugfs hwpoison-inject module through debugfs
/sys/debug/hwpoison/ /sys/kernel/debug/hwpoison/
corrupt-pfn corrupt-pfn
......
...@@ -76,7 +76,7 @@ See struct w1_bus_master definition in w1.h for details. ...@@ -76,7 +76,7 @@ See struct w1_bus_master definition in w1.h for details.
w1 master sysfs interface w1 master sysfs interface
------------------------------------------------------------------ ------------------------------------------------------------------
<xx-xxxxxxxxxxxxx> - A directory for a found device. The format is family-serial <xx-xxxxxxxxxxxx> - A directory for a found device. The format is family-serial
bus - (standard) symlink to the w1 bus bus - (standard) symlink to the w1 bus
driver - (standard) symlink to the w1 driver driver - (standard) symlink to the w1 driver
w1_master_add - (rw) manually register a slave device w1_master_add - (rw) manually register a slave device
......
SPDX-Exception-Identifier: Linux-syscall-note
SPDX-URL: https://spdx.org/licenses/Linux-syscall-note.html
SPDX-Licenses: GPL-2.0, GPL-2.0+, GPL-1.0+, LGPL-2.0, LGPL-2.0+, LGPL-2.1, LGPL-2.1+
Usage-Guide:
This exception is used together with one of the above SPDX-Licenses
to mark user space API (uapi) header files so they can be included
into non GPL compliant user space application code.
To use this exception add it with the keyword WITH to one of the
identifiers in the SPDX-Licenses tag:
SPDX-License-Identifier: <SPDX-License> WITH Linux-syscall-note
License-Text:
NOTE! This copyright does *not* cover user programs that use kernel
services by normal system calls - this is merely considered normal use
of the kernel, and does *not* fall under the heading of "derived work".
Also note that the GPL below is copyrighted by the Free Software
Foundation, but the instance of code that it refers to (the Linux
kernel) is copyrighted by me and others who actually wrote it.
Also note that the only valid version of the GPL as far as the kernel
is concerned is _this_ particular version of the license (ie v2, not
v2.2 or v3.x or whatever), unless explicitly otherwise stated.
Linus Torvalds
This diff is collapsed.
This diff is collapsed.
Valid-License-Identifier: BSD-2-Clause
SPDX-URL: https://spdx.org/licenses/BSD-2-Clause.html
Usage-Guide:
To use the BSD 2-clause "Simplified" License put the following SPDX
tag/value pair into a comment according to the placement guidelines in
the licensing rules documentation:
SPDX-License-Identifier: BSD-2-Clause
License-Text:
Copyright (c) <year> <owner> . All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
Valid-License-Identifier: BSD-3-Clause
SPDX-URL: https://spdx.org/licenses/BSD-3-Clause.html
Usage-Guide:
To use the BSD 3-clause "New" or "Revised" License put the following SPDX
tag/value pair into a comment according to the placement guidelines in
the licensing rules documentation:
SPDX-License-Identifier: BSD-3-Clause
License-Text:
Copyright (c) <year> <owner> . All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
3. Neither the name of the copyright holder nor the names of its
contributors may be used to endorse or promote products derived from this
software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
Valid-License-Identifier: BSD-3-Clause-Clear
SPDX-URL: https://spdx.org/licenses/BSD-3-Clause-Clear.html
Usage-Guide:
To use the BSD 3-clause "Clear" License put the following SPDX
tag/value pair into a comment according to the placement guidelines in
the licensing rules documentation:
SPDX-License-Identifier: BSD-3-Clause-Clear
License-Text:
The Clear BSD License
Copyright (c) [xxxx]-[xxxx] [Owner Organization]
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted (subject to the limitations in the disclaimer
below) provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
* Neither the name of [Owner Organization] nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY
THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT
NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER
OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Valid-License-Identifier: MIT
SPDX-URL: https://spdx.org/licenses/MIT.html
Usage-Guide:
To use the MIT License put the following SPDX tag/value pair into a
comment according to the placement guidelines in the licensing rules
documentation:
SPDX-License-Identifier: MIT
License-Text:
MIT License
Copyright (c) <year> <copyright holders>
Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the "Software"),
to deal in the Software without restriction, including without limitation
the rights to use, copy, modify, merge, publish, distribute, sublicense,
and/or sell copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.
...@@ -59,7 +59,11 @@ enum w1_netlink_message_types { ...@@ -59,7 +59,11 @@ enum w1_netlink_message_types {
* @type: one of enum w1_netlink_message_types * @type: one of enum w1_netlink_message_types
* @status: kernel feedback for success 0 or errno failure value * @status: kernel feedback for success 0 or errno failure value
* @len: length of data following w1_netlink_msg * @len: length of data following w1_netlink_msg
* @id: union holding master bus id (msg.id) and slave device id (id[8]). * @id: union holding bus master id (msg.id) and slave device id (id[8]).
* @id.id: Slave ID (8 bytes)
* @id.mst: bus master identification
* @id.mst.id: bus master ID
* @id.mst.res: bus master reserved
* @data: start address of any following data * @data: start address of any following data
* *
* The base message structure for w1 messages over netlink. * The base message structure for w1 messages over netlink.
......
...@@ -25,9 +25,6 @@ config 9P_FS_POSIX_ACL ...@@ -25,9 +25,6 @@ config 9P_FS_POSIX_ACL
POSIX Access Control Lists (ACLs) support permissions for users and POSIX Access Control Lists (ACLs) support permissions for users and
groups beyond the owner/group/world scheme. groups beyond the owner/group/world scheme.
To learn more about Access Control Lists, visit the POSIX ACLs for
Linux website <http://acl.bestbits.at/>.
If you don't know what Access Control Lists are, say N If you don't know what Access Control Lists are, say N
endif endif
......
...@@ -167,17 +167,13 @@ config TMPFS_POSIX_ACL ...@@ -167,17 +167,13 @@ config TMPFS_POSIX_ACL
files for sound to work properly. In short, if you're not sure, files for sound to work properly. In short, if you're not sure,
say Y. say Y.
To learn more about Access Control Lists, visit the POSIX ACLs for
Linux website <http://acl.bestbits.at/>.
config TMPFS_XATTR config TMPFS_XATTR
bool "Tmpfs extended attributes" bool "Tmpfs extended attributes"
depends on TMPFS depends on TMPFS
default n default n
help help
Extended attributes are name:value pairs associated with inodes by Extended attributes are name:value pairs associated with inodes by
the kernel or by users (see the attr(5) manual page, or visit the kernel or by users (see the attr(5) manual page for details).
<http://acl.bestbits.at/> for details).
Currently this enables support for the trusted.* and Currently this enables support for the trusted.* and
security.* namespaces. security.* namespaces.
......
...@@ -38,9 +38,6 @@ config BTRFS_FS_POSIX_ACL ...@@ -38,9 +38,6 @@ config BTRFS_FS_POSIX_ACL
POSIX Access Control Lists (ACLs) support permissions for users and POSIX Access Control Lists (ACLs) support permissions for users and
groups beyond the owner/group/world scheme. groups beyond the owner/group/world scheme.
To learn more about Access Control Lists, visit the POSIX ACLs for
Linux website <http://acl.bestbits.at/>.
If you don't know what Access Control Lists are, say N If you don't know what Access Control Lists are, say N
config BTRFS_FS_CHECK_INTEGRITY config BTRFS_FS_CHECK_INTEGRITY
......
...@@ -34,7 +34,4 @@ config CEPH_FS_POSIX_ACL ...@@ -34,7 +34,4 @@ config CEPH_FS_POSIX_ACL
POSIX Access Control Lists (ACLs) support permissions for users and POSIX Access Control Lists (ACLs) support permissions for users and
groups beyond the owner/group/world scheme. groups beyond the owner/group/world scheme.
To learn more about Access Control Lists, visit the POSIX ACLs for
Linux website <http://acl.bestbits.at/>.
If you don't know what Access Control Lists are, say N If you don't know what Access Control Lists are, say N
...@@ -108,14 +108,13 @@ config CIFS_XATTR ...@@ -108,14 +108,13 @@ config CIFS_XATTR
depends on CIFS depends on CIFS
help help
Extended attributes are name:value pairs associated with inodes by Extended attributes are name:value pairs associated with inodes by
the kernel or by users (see the attr(5) manual page, or visit the kernel or by users (see the attr(5) manual page for details).
<http://acl.bestbits.at/> for details). CIFS maps the name of CIFS maps the name of extended attributes beginning with the user
extended attributes beginning with the user namespace prefix namespace prefix to SMB/CIFS EAs. EAs are stored on Windows
to SMB/CIFS EAs. EAs are stored on Windows servers without the servers without the user namespace prefix, but their names are
user namespace prefix, but their names are seen by Linux cifs clients seen by Linux cifs clients prefaced by the user namespace prefix.
prefaced by the user namespace prefix. The system namespace The system namespace (used by some filesystems to store ACLs) is
(used by some filesystems to store ACLs) is not supported at not supported at this time.
this time.
If unsure, say Y. If unsure, say Y.
......
...@@ -13,8 +13,7 @@ config EXT2_FS_XATTR ...@@ -13,8 +13,7 @@ config EXT2_FS_XATTR
depends on EXT2_FS depends on EXT2_FS
help help
Extended attributes are name:value pairs associated with inodes by Extended attributes are name:value pairs associated with inodes by
the kernel or by users (see the attr(5) manual page, or visit the kernel or by users (see the attr(5) manual page for details).
<http://acl.bestbits.at/> for details).
If unsure, say N. If unsure, say N.
...@@ -26,9 +25,6 @@ config EXT2_FS_POSIX_ACL ...@@ -26,9 +25,6 @@ config EXT2_FS_POSIX_ACL
Posix Access Control Lists (ACLs) support permissions for users and Posix Access Control Lists (ACLs) support permissions for users and
groups beyond the owner/group/world scheme. groups beyond the owner/group/world scheme.
To learn more about Access Control Lists, visit the Posix ACLs for
Linux website <http://acl.bestbits.at/>.
If you don't know what Access Control Lists are, say N If you don't know what Access Control Lists are, say N
config EXT2_FS_SECURITY config EXT2_FS_SECURITY
......
...@@ -82,9 +82,6 @@ config EXT4_FS_POSIX_ACL ...@@ -82,9 +82,6 @@ config EXT4_FS_POSIX_ACL
POSIX Access Control Lists (ACLs) support permissions for users and POSIX Access Control Lists (ACLs) support permissions for users and
groups beyond the owner/group/world scheme. groups beyond the owner/group/world scheme.
To learn more about Access Control Lists, visit the POSIX ACLs for
Linux website <http://acl.bestbits.at/>.
If you don't know what Access Control Lists are, say N If you don't know what Access Control Lists are, say N
config EXT4_FS_SECURITY config EXT4_FS_SECURITY
......
...@@ -35,8 +35,7 @@ config F2FS_FS_XATTR ...@@ -35,8 +35,7 @@ config F2FS_FS_XATTR
default y default y
help help
Extended attributes are name:value pairs associated with inodes by Extended attributes are name:value pairs associated with inodes by
the kernel or by users (see the attr(5) manual page, or visit the kernel or by users (see the attr(5) manual page for details).
<http://acl.bestbits.at/> for details).
If unsure, say N. If unsure, say N.
...@@ -49,9 +48,6 @@ config F2FS_FS_POSIX_ACL ...@@ -49,9 +48,6 @@ config F2FS_FS_POSIX_ACL
Posix Access Control Lists (ACLs) support permissions for users and Posix Access Control Lists (ACLs) support permissions for users and
groups beyond the owner/group/world scheme. groups beyond the owner/group/world scheme.
To learn more about Access Control Lists, visit the POSIX ACLs for
Linux website <http://acl.bestbits.at/>.
If you don't know what Access Control Lists are, say N If you don't know what Access Control Lists are, say N
config F2FS_FS_SECURITY config F2FS_FS_SECURITY
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment