twx-linux/include/uapi/linux
Andrii Nakryiko 457f44363a bpf: Implement BPF ring buffer and verifier support for it
This commit adds a new MPSC ring buffer implementation into BPF ecosystem,
which allows multiple CPUs to submit data to a single shared ring buffer. On
the consumption side, only single consumer is assumed.

Motivation
----------
There are two distinctive motivators for this work, which are not satisfied by
existing perf buffer, which prompted creation of a new ring buffer
implementation.
  - more efficient memory utilization by sharing ring buffer across CPUs;
  - preserving ordering of events that happen sequentially in time, even
  across multiple CPUs (e.g., fork/exec/exit events for a task).

These two problems are independent, but perf buffer fails to satisfy both.
Both are a result of a choice to have per-CPU perf ring buffer.  Both can be
also solved by having an MPSC implementation of ring buffer. The ordering
problem could technically be solved for perf buffer with some in-kernel
counting, but given the first one requires an MPSC buffer, the same solution
would solve the second problem automatically.

Semantics and APIs
------------------
Single ring buffer is presented to BPF programs as an instance of BPF map of
type BPF_MAP_TYPE_RINGBUF. Two other alternatives considered, but ultimately
rejected.

One way would be to, similar to BPF_MAP_TYPE_PERF_EVENT_ARRAY, make
BPF_MAP_TYPE_RINGBUF could represent an array of ring buffers, but not enforce
"same CPU only" rule. This would be more familiar interface compatible with
existing perf buffer use in BPF, but would fail if application needed more
advanced logic to lookup ring buffer by arbitrary key. HASH_OF_MAPS addresses
this with current approach. Additionally, given the performance of BPF
ringbuf, many use cases would just opt into a simple single ring buffer shared
among all CPUs, for which current approach would be an overkill.

Another approach could introduce a new concept, alongside BPF map, to
represent generic "container" object, which doesn't necessarily have key/value
interface with lookup/update/delete operations. This approach would add a lot
of extra infrastructure that has to be built for observability and verifier
support. It would also add another concept that BPF developers would have to
familiarize themselves with, new syntax in libbpf, etc. But then would really
provide no additional benefits over the approach of using a map.
BPF_MAP_TYPE_RINGBUF doesn't support lookup/update/delete operations, but so
doesn't few other map types (e.g., queue and stack; array doesn't support
delete, etc).

The approach chosen has an advantage of re-using existing BPF map
infrastructure (introspection APIs in kernel, libbpf support, etc), being
familiar concept (no need to teach users a new type of object in BPF program),
and utilizing existing tooling (bpftool). For common scenario of using
a single ring buffer for all CPUs, it's as simple and straightforward, as
would be with a dedicated "container" object. On the other hand, by being
a map, it can be combined with ARRAY_OF_MAPS and HASH_OF_MAPS map-in-maps to
implement a wide variety of topologies, from one ring buffer for each CPU
(e.g., as a replacement for perf buffer use cases), to a complicated
application hashing/sharding of ring buffers (e.g., having a small pool of
ring buffers with hashed task's tgid being a look up key to preserve order,
but reduce contention).

Key and value sizes are enforced to be zero. max_entries is used to specify
the size of ring buffer and has to be a power of 2 value.

There are a bunch of similarities between perf buffer
(BPF_MAP_TYPE_PERF_EVENT_ARRAY) and new BPF ring buffer semantics:
  - variable-length records;
  - if there is no more space left in ring buffer, reservation fails, no
    blocking;
  - memory-mappable data area for user-space applications for ease of
    consumption and high performance;
  - epoll notifications for new incoming data;
  - but still the ability to do busy polling for new data to achieve the
    lowest latency, if necessary.

BPF ringbuf provides two sets of APIs to BPF programs:
  - bpf_ringbuf_output() allows to *copy* data from one place to a ring
    buffer, similarly to bpf_perf_event_output();
  - bpf_ringbuf_reserve()/bpf_ringbuf_commit()/bpf_ringbuf_discard() APIs
    split the whole process into two steps. First, a fixed amount of space is
    reserved. If successful, a pointer to a data inside ring buffer data area
    is returned, which BPF programs can use similarly to a data inside
    array/hash maps. Once ready, this piece of memory is either committed or
    discarded. Discard is similar to commit, but makes consumer ignore the
    record.

bpf_ringbuf_output() has disadvantage of incurring extra memory copy, because
record has to be prepared in some other place first. But it allows to submit
records of the length that's not known to verifier beforehand. It also closely
matches bpf_perf_event_output(), so will simplify migration significantly.

bpf_ringbuf_reserve() avoids the extra copy of memory by providing a memory
pointer directly to ring buffer memory. In a lot of cases records are larger
than BPF stack space allows, so many programs have use extra per-CPU array as
a temporary heap for preparing sample. bpf_ringbuf_reserve() avoid this needs
completely. But in exchange, it only allows a known constant size of memory to
be reserved, such that verifier can verify that BPF program can't access
memory outside its reserved record space. bpf_ringbuf_output(), while slightly
slower due to extra memory copy, covers some use cases that are not suitable
for bpf_ringbuf_reserve().

The difference between commit and discard is very small. Discard just marks
a record as discarded, and such records are supposed to be ignored by consumer
code. Discard is useful for some advanced use-cases, such as ensuring
all-or-nothing multi-record submission, or emulating temporary malloc()/free()
within single BPF program invocation.

Each reserved record is tracked by verifier through existing
reference-tracking logic, similar to socket ref-tracking. It is thus
impossible to reserve a record, but forget to submit (or discard) it.

bpf_ringbuf_query() helper allows to query various properties of ring buffer.
Currently 4 are supported:
  - BPF_RB_AVAIL_DATA returns amount of unconsumed data in ring buffer;
  - BPF_RB_RING_SIZE returns the size of ring buffer;
  - BPF_RB_CONS_POS/BPF_RB_PROD_POS returns current logical possition of
    consumer/producer, respectively.
Returned values are momentarily snapshots of ring buffer state and could be
off by the time helper returns, so this should be used only for
debugging/reporting reasons or for implementing various heuristics, that take
into account highly-changeable nature of some of those characteristics.

One such heuristic might involve more fine-grained control over poll/epoll
notifications about new data availability in ring buffer. Together with
BPF_RB_NO_WAKEUP/BPF_RB_FORCE_WAKEUP flags for output/commit/discard helpers,
it allows BPF program a high degree of control and, e.g., more efficient
batched notifications. Default self-balancing strategy, though, should be
adequate for most applications and will work reliable and efficiently already.

Design and implementation
-------------------------
This reserve/commit schema allows a natural way for multiple producers, either
on different CPUs or even on the same CPU/in the same BPF program, to reserve
independent records and work with them without blocking other producers. This
means that if BPF program was interruped by another BPF program sharing the
same ring buffer, they will both get a record reserved (provided there is
enough space left) and can work with it and submit it independently. This
applies to NMI context as well, except that due to using a spinlock during
reservation, in NMI context, bpf_ringbuf_reserve() might fail to get a lock,
in which case reservation will fail even if ring buffer is not full.

The ring buffer itself internally is implemented as a power-of-2 sized
circular buffer, with two logical and ever-increasing counters (which might
wrap around on 32-bit architectures, that's not a problem):
  - consumer counter shows up to which logical position consumer consumed the
    data;
  - producer counter denotes amount of data reserved by all producers.

Each time a record is reserved, producer that "owns" the record will
successfully advance producer counter. At that point, data is still not yet
ready to be consumed, though. Each record has 8 byte header, which contains
the length of reserved record, as well as two extra bits: busy bit to denote
that record is still being worked on, and discard bit, which might be set at
commit time if record is discarded. In the latter case, consumer is supposed
to skip the record and move on to the next one. Record header also encodes
record's relative offset from the beginning of ring buffer data area (in
pages). This allows bpf_ringbuf_commit()/bpf_ringbuf_discard() to accept only
the pointer to the record itself, without requiring also the pointer to ring
buffer itself. Ring buffer memory location will be restored from record
metadata header. This significantly simplifies verifier, as well as improving
API usability.

Producer counter increments are serialized under spinlock, so there is
a strict ordering between reservations. Commits, on the other hand, are
completely lockless and independent. All records become available to consumer
in the order of reservations, but only after all previous records where
already committed. It is thus possible for slow producers to temporarily hold
off submitted records, that were reserved later.

Reservation/commit/consumer protocol is verified by litmus tests in
Documentation/litmus-test/bpf-rb.

One interesting implementation bit, that significantly simplifies (and thus
speeds up as well) implementation of both producers and consumers is how data
area is mapped twice contiguously back-to-back in the virtual memory. This
allows to not take any special measures for samples that have to wrap around
at the end of the circular buffer data area, because the next page after the
last data page would be first data page again, and thus the sample will still
appear completely contiguous in virtual memory. See comment and a simple ASCII
diagram showing this visually in bpf_ringbuf_area_alloc().

Another feature that distinguishes BPF ringbuf from perf ring buffer is
a self-pacing notifications of new data being availability.
bpf_ringbuf_commit() implementation will send a notification of new record
being available after commit only if consumer has already caught up right up
to the record being committed. If not, consumer still has to catch up and thus
will see new data anyways without needing an extra poll notification.
Benchmarks (see tools/testing/selftests/bpf/benchs/bench_ringbuf.c) show that
this allows to achieve a very high throughput without having to resort to
tricks like "notify only every Nth sample", which are necessary with perf
buffer. For extreme cases, when BPF program wants more manual control of
notifications, commit/discard/output helpers accept BPF_RB_NO_WAKEUP and
BPF_RB_FORCE_WAKEUP flags, which give full control over notifications of data
availability, but require extra caution and diligence in using this API.

Comparison to alternatives
--------------------------
Before considering implementing BPF ring buffer from scratch existing
alternatives in kernel were evaluated, but didn't seem to meet the needs. They
largely fell into few categores:
  - per-CPU buffers (perf, ftrace, etc), which don't satisfy two motivations
    outlined above (ordering and memory consumption);
  - linked list-based implementations; while some were multi-producer designs,
    consuming these from user-space would be very complicated and most
    probably not performant; memory-mapping contiguous piece of memory is
    simpler and more performant for user-space consumers;
  - io_uring is SPSC, but also requires fixed-sized elements. Naively turning
    SPSC queue into MPSC w/ lock would have subpar performance compared to
    locked reserve + lockless commit, as with BPF ring buffer. Fixed sized
    elements would be too limiting for BPF programs, given existing BPF
    programs heavily rely on variable-sized perf buffer already;
  - specialized implementations (like a new printk ring buffer, [0]) with lots
    of printk-specific limitations and implications, that didn't seem to fit
    well for intended use with BPF programs.

  [0] https://lwn.net/Articles/779550/

Signed-off-by: Andrii Nakryiko <andriin@fb.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Link: https://lore.kernel.org/bpf/20200529075424.3139988-2-andriin@fb.com
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
2020-06-01 14:38:22 -07:00
..
android Merge 5.0-rc4 into char-misc-next 2019-01-28 08:13:52 +01:00
byteorder
caif
can can: don't use deprecated license identifiers 2019-11-05 12:44:34 +01:00
cifs
dvb media: dvb: tag deprecated DVB APIs as such 2019-06-05 10:55:30 -04:00
genwqe
hdlc wan/hdlc_x25: make lapb params configurable 2020-01-21 11:41:36 +01:00
hsi
iio
isdn isdn/capi: check message length in capi_write() 2019-09-07 17:44:25 +02:00
mmc uapi: revert flexible-array conversions 2020-05-04 11:30:15 -05:00
netfilter netfilter: ctnetlink: add kernel side filtering for dump 2020-05-27 22:20:34 +02:00
netfilter_arp net, uapi: fix -Wpointer-arith warnings 2019-10-04 14:25:17 -07:00
netfilter_bridge uapi: revert flexible-array conversions 2020-05-04 11:30:15 -05:00
netfilter_ipv4 net, uapi: fix -Wpointer-arith warnings 2019-10-04 14:25:17 -07:00
netfilter_ipv6 net, uapi: fix -Wpointer-arith warnings 2019-10-04 14:25:17 -07:00
nfsd nfsd: add support for upcall version 2 2019-09-10 09:26:33 -04:00
raid md: add feature flag MD_FEATURE_RAID0_LAYOUT 2019-09-13 13:10:06 -07:00
sched sched/uclamp: Extend sched_setattr() to support utilization clamping 2019-06-24 19:23:46 +02:00
spi spi: spidev: Enable control of inter-word delays 2019-03-18 12:18:28 +00:00
sunrpc
tc_act net: qos: introduce a gate control flow action 2020-05-01 16:08:19 -07:00
tc_ematch
usb usb: raw-gadget: support stalling/halting/wedging endpoints 2020-05-14 12:30:18 +03:00
wimax
a.out.h
acct.h acct: stop using get_seconds() 2019-12-18 18:07:31 +01:00
adb.h
adfs_fs.h fs/adfs: correct disc record structure 2019-06-26 20:14:13 -04:00
affs_hardblocks.h
agpgart.h
aio_abi.h
am437x-vpfe.h
apm_bios.h
arcfb.h
arm_sdei.h
aspeed-lpc-ctrl.h
aspeed-p2a-ctrl.h drivers/misc: Add Aspeed P2A control driver 2019-04-25 19:33:34 +02:00
atalk.h
atm_eni.h
atm_he.h
atm_idt77105.h
atm_nicstar.h
atm_tcp.h
atm_zatm.h
atm.h
atmapi.h
atmarp.h
atmbr2684.h
atmclip.h
atmdev.h
atmioc.h
atmlec.h
atmmpc.h
atmppp.h
atmsap.h
atmsvc.h
audit.h bpf: Emit audit messages upon successful prog load and unload 2019-12-11 17:41:09 +01:00
auto_dev-ioctl.h
auto_fs4.h
auto_fs.h autofs: add ignore mount option 2019-03-07 18:32:01 -08:00
auxvec.h
ax25.h
batadv_packet.h batman-adv: Update copyright years for 2020 2020-01-01 00:00:33 +01:00
batman_adv.h batman-adv: Update copyright years for 2020 2020-01-01 00:00:33 +01:00
baycom.h
bcache.h bcache: use read_cache_page_gfp to read the superblock 2020-01-23 11:40:01 -07:00
bcm933xx_hcs.h
bfs_fs.h bfs: extra sanity checking and static inode bitmap 2019-01-04 13:13:47 -08:00
binfmts.h exec: increase BINPRM_BUF_SIZE to 256 2019-03-07 18:32:01 -08:00
blkpg.h
blktrace_api.h
blkzoned.h block: add zone open, close and finish ioctl support 2019-11-07 06:31:50 -07:00
bpf_common.h
bpf_perf_event.h
bpf.h bpf: Implement BPF ring buffer and verifier support for it 2020-06-01 14:38:22 -07:00
bpfilter.h treewide: add "WITH Linux-syscall-note" to SPDX tag of uapi headers 2019-07-25 11:05:10 +02:00
bpqether.h
bsg.h
bt-bmc.h
btf.h bpf: Introduce function-by-function verification 2020-01-10 17:20:07 +01:00
btrfs_tree.h btrfs: add support for 4-copy replication (raid1c4) 2019-11-18 17:51:49 +01:00
btrfs.h btrfs: re-instantiate the removed BTRFS_SUBVOL_CREATE_ASYNC definition 2020-04-10 18:48:27 +02:00
can.h can: don't use deprecated license identifiers 2019-11-05 12:44:34 +01:00
capability.h bpf, capability: Introduce CAP_BPF 2020-05-15 17:29:41 +02:00
capi.h
cciss_defs.h
cciss_ioctl.h
cdrom.h
cec-funcs.h media: cec-funcs.h: use new CEC_OP_UI_CMD defines 2019-10-07 07:55:17 -03:00
cec.h media: cec: expose the new connector info API 2019-10-01 17:19:41 -03:00
cgroupstats.h
chio.h scsi: ch: add include guard to chio.h 2019-10-09 22:31:14 -04:00
cm4000_cs.h
cn_proc.h
coda.h coda: add hinting support for partial file caching 2019-07-16 19:23:23 -07:00
coff.h linux/coff.h: add include guard 2019-09-25 17:51:39 -07:00
connector.h
const.h
coresight-stm.h coresight: do not use the BIT() macro in the UAPI header 2020-03-26 15:10:44 +01:00
cramfs_fs.h
cryptouser.h crypto: add header include guards 2019-08-02 14:44:02 +10:00
cuda.h
cyclades.h y2038: uapi: change __kernel_time_t to __kernel_old_time_t 2019-11-15 14:38:29 +01:00
cycx_cfm.h
dcbnl.h net: Fix misspellings of "configure" and "configuration" 2019-10-28 13:41:01 -07:00
dccp.h
devlink.h devlink: Add 'control' trap type 2020-06-01 11:49:23 -07:00
dlm_device.h uapi: revert flexible-array conversions 2020-05-04 11:30:15 -05:00
dlm_netlink.h
dlm_plock.h
dlm.h
dlmconstants.h
dm-ioctl.h dm: bump version of core and various targets 2020-03-03 11:10:21 -05:00
dm-log-userspace.h
dma-buf.h dma-buf: Fix SET_NAME ioctl uapi 2020-04-27 16:29:41 +05:30
dma-heap.h dma-buf: heaps: Use _IOCTL_ for userspace IOCTL identifier 2019-12-17 21:37:40 +05:30
dn.h
dns_resolver.h
dqblk_xfs.h
edd.h
efs_fs_sb.h
elf-em.h Move EM_UNICORE to uapi/linux/elf-em.h 2019-03-20 21:11:22 -04:00
elf-fdpic.h
elf.h arm64: add ptrace regsets for ptrauth key management 2019-02-01 13:56:58 +00:00
elfcore.h y2038: elfcore: Use __kernel_old_timeval for process times 2019-11-15 14:38:29 +01:00
errno.h
errqueue.h docs: networking: convert timestamping.txt to ReST 2020-04-30 12:56:38 -07:00
erspan.h
ethtool_netlink.h net: ethtool: Allow PHY cable test TDR data to configured 2020-05-26 23:22:21 -07:00
ethtool.h ethtool: provide UAPI for PHY master/slave configuration. 2020-05-06 17:45:45 -07:00
eventpoll.h
fadvise.h
falloc.h
fanotify.h fanotify: report name info for FAN_DIR_MODIFY event 2020-03-25 23:17:16 +01:00
fb.h
fcntl.h open: introduce openat2(2) syscall 2020-01-18 09:19:18 -05:00
fd.h
fdreg.h floppy: separate the FDC's base address from its registers 2020-03-16 08:26:58 -06:00
fib_rules.h
fiemap.h uapi: revert flexible-array conversions 2020-05-04 11:30:15 -05:00
filter.h
firewire-cdev.h
firewire-constants.h
fou.h fou: Support binding FoU socket 2019-03-27 13:30:07 -07:00
fpga-dfl.h fpga: dfl: fme: add DFL_FPGA_FME_PORT_RELEASE/ASSIGN ioctl support. 2019-08-05 17:56:46 +02:00
fs.h f2fs-for-5.4-rc1 2019-09-21 14:26:33 -07:00
fscrypt.h fscrypt: add FS_IOC_GET_ENCRYPTION_NONCE ioctl 2020-03-19 21:56:54 -07:00
fsi.h
fsl_hypervisor.h
fsmap.h
fsverity.h fs-verity: add SHA-512 support 2019-08-12 19:33:50 -07:00
fuse.h fuse: Add changelog entries for protocols 7.1 - 7.8 2019-10-23 14:26:37 +02:00
futex.h
gameport.h
gen_stats.h net_sched: add TCA_STATS_PKT64 attribute 2019-11-05 18:20:55 -08:00
genetlink.h netlink: add infrastructure to expose policies to userspace 2020-04-30 17:51:42 -07:00
gfs2_ondisk.h
gpio.h gpio: uapi: Improve phrasing around arrays representing empty strings 2020-03-25 09:50:44 +01:00
gsmmux.h tty: n_gsm: add ioctl to map serial device to mux'ed tty 2019-09-04 12:43:54 +02:00
gtp.h
hash_info.h
hdlc.h
hdlcdrv.h
hdreg.h
hid.h
hiddev.h
hidraw.h HID: hidraw: add support uniq ioctl 2019-12-11 15:31:52 +01:00
hpet.h
hsr_netlink.h
hw_breakpoint.h
hyperv.h hyper-v: Remove internal types from UAPI header 2020-04-22 21:10:05 +01:00
i2c-dev.h
i2c.h
i2o-dev.h
i8k.h
icmp.h
icmpv6.h ipv6: Add rate limit mask for ICMPv6 messages 2019-04-18 16:58:37 -07:00
idxd.h dmaengine: idxd: Merge definition of dsa_batch_desc into dsa_hw_desc 2020-03-11 15:08:52 +05:30
if_addr.h
if_addrlabel.h
if_alg.h
if_arcnet.h uapi: revert flexible-array conversions 2020-05-04 11:30:15 -05:00
if_arp.h
if_bonding.h bonding: rename AD_STATE_* to LACP_STATE_* 2019-12-26 13:09:37 -08:00
if_bridge.h bridge: mrp: Add support for role MRA 2020-06-01 11:56:11 -07:00
if_cablemodem.h
if_eql.h
if_ether.h bridge: uapi: mrp: Add mrp attributes. 2020-04-27 11:40:25 -07:00
if_fc.h
if_fddi.h
if_frad.h
if_hippi.h
if_infiniband.h
if_link.h net: bridge: Add port attribute IFLA_BRPORT_MRP_RING_OPEN 2020-04-27 11:40:25 -07:00
if_ltalk.h
if_macsec.h macsec: Netlink support of XPN cipher suites (IEEE 802.1AEbw) 2020-03-16 01:42:31 -07:00
if_packet.h packet: Fix undefined behavior in bit shift 2019-06-29 11:06:17 -07:00
if_phonet.h
if_plip.h
if_ppp.h
if_pppol2tp.h
if_pppox.h
if_slip.h
if_team.h
if_tun.h tun: Add ioctl() TUNGETDEVNETNS cmd to allow obtaining real net ns of tun device 2019-03-21 13:19:15 -07:00
if_tunnel.h
if_vlan.h vlan: support binding link state to vlan member bridge ports 2019-04-19 13:58:17 -07:00
if_x25.h docs: networking: convert x25-iface.txt to ReST 2020-05-01 12:24:40 -07:00
if_xdp.h xsk: add support to allow unaligned chunk placement 2019-08-31 01:08:26 +02:00
if.h net: Add IF_OPER_TESTING 2020-04-20 12:43:24 -07:00
ife.h
igmp.h bridge: Snoop Multicast Router Advertisements 2019-01-22 17:18:09 -08:00
ila.h
in6.h net: ipv6: add socket option IPV6_ROUTER_ALERT_ISOLATE 2019-03-03 21:05:10 -08:00
in_route.h
in.h seg6: fix SRv6 L2 tunnels to use IANA-assigned protocol number 2020-03-11 23:49:30 -07:00
inet_diag.h inet_diag: add support for cgroup filter 2020-04-30 12:54:02 -07:00
inotify.h
input-event-codes.h Merge branch 'next' into for-linus 2020-04-06 20:56:50 -07:00
input.h Input: input_event - fix struct padding on sparc64 2019-12-13 15:00:36 -08:00
io_uring.h io_uring: make spdxcheck.py happy 2020-03-21 14:03:46 -06:00
ioctl.h
iommu.h iommu: Introduce guest PASID bind function 2019-10-15 13:34:43 +02:00
ip6_tunnel.h
ip_vs.h ipvs: allow tunneling with gre encapsulation 2019-07-04 02:29:49 +02:00
ip.h
ipc.h
ipmi_bmc.h treewide: add "WITH Linux-syscall-note" to SPDX tag of uapi headers 2019-07-25 11:05:10 +02:00
ipmi_msgdefs.h
ipmi.h
ipsec.h
ipv6_route.h
ipv6.h net: ipv6: add support for rpl sr exthdr 2020-03-29 22:30:57 -07:00
ipx.h
irqnr.h
iso_fs.h
isst_if.h treewide: add "WITH Linux-syscall-note" to SPDX tag of uapi headers 2019-07-25 11:05:10 +02:00
ivtv.h
ivtvfb.h
jffs2.h jffs2: Remove C++ style comments from uapi header 2019-08-22 17:24:51 +02:00
joystick.h
kcm.h
kcmp.h
kcov.h kcov: fix struct layout for kcov_remote_arg 2020-01-04 13:55:09 -08:00
kd.h
kdev_t.h
kernel-page-flags.h mm: convert PG_balloon to PG_offline 2019-03-05 21:07:14 -08:00
kernel.h
kernelcapi.h
kexec.h parisc: add kexec syscall support 2019-09-08 15:37:04 +02:00
keyboard.h
keyctl.h Revert "Merge tag 'keys-acl-20190703' of git://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-fs" 2019-07-10 18:43:43 -07:00
kfd_ioctl.h Revert "drm/amdkfd: New IOCTL to allocate queue GWS" 2019-08-07 10:21:38 -05:00
kvm_para.h KVM: X86: Yield to IPI target if necessary 2019-07-02 18:56:01 +02:00
kvm.h KVM: PPC: Book3S HV: Add a capability for enabling secure guests 2020-03-26 11:09:04 +11:00
l2tp.h
libc-compat.h
lightnvm.h
limits.h linux/kernel.h: split *_MAX and *_MIN macros into <linux/limits.h> 2019-03-07 18:31:59 -08:00
lirc.h media: rc: xbox_remote: add protocol and set timeout 2019-04-22 13:02:53 -04:00
llc.h
loop.h
lp.h
lwtunnel.h net: ipv6: add rpl sr tunnel 2020-03-29 22:30:57 -07:00
magic.h fs: New zonefs file system 2020-02-07 14:39:38 +09:00
major.h
map_to_7segment.h
matroxfb.h
max2175.h
mdio.h net: phy: add EEE-related constants 2019-08-19 13:04:45 -07:00
media-bus-format.h media: v4l: Add 1X14 14-bit greyscale media bus code definition 2020-03-20 09:01:16 +01:00
media.h media: media.h: Fix shifting signed 32-bit value by 31 bits problem 2019-06-21 16:45:38 -04:00
mei.h mei: adjust the copyright notice in the files. 2019-03-28 02:07:54 +09:00
membarrier.h
memfd.h
mempolicy.h
meye.h
mic_common.h
mic_ioctl.h
mii.h ethtool: provide UAPI for PHY master/slave configuration. 2020-05-06 17:45:45 -07:00
minix_fs.h
mman.h mm/mremap: add MREMAP_DONTUNMAP to mremap() 2020-04-02 09:35:30 -07:00
mmtimer.h
module.h
mount.h vfs: syscall: Add fspick() to select a superblock for reconfiguration 2019-03-20 18:49:06 -04:00
mpls_iptunnel.h
mpls.h
mptcp.h mptcp: add netlink-based PM 2020-03-29 22:14:49 -07:00
mqueue.h
mroute6.h ipmr: ip6mr: Create new sockopt to clear mfc cache or vifs 2019-02-21 13:05:05 -08:00
mroute.h ipmr: ip6mr: Create new sockopt to clear mfc cache or vifs 2019-02-21 13:05:05 -08:00
mrp_bridge.h bridge: mrp: Add support for role MRA 2020-06-01 11:56:11 -07:00
msdos_fs.h fat: move MAX_FAT to fat.h and change it to inline function 2019-01-04 13:13:47 -08:00
msg.h y2038: uapi: change __kernel_time_t to __kernel_old_time_t 2019-11-15 14:38:29 +01:00
mtio.h
n_r3964.h
nbd-netlink.h
nbd.h
ncsi.h
ndctl.h nfit: Add Hyper-V NVDIMM DSM command set to white list 2019-01-29 22:09:31 -08:00
neighbour.h vxlan: ecmp support for mac fdb entries 2020-05-22 14:00:38 -07:00
net_dropmon.h uapi: revert flexible-array conversions 2020-05-04 11:30:15 -05:00
net_namespace.h
net_tstamp.h ethtool: add timestamping related string sets 2020-03-29 22:32:36 -07:00
net.h
netconf.h
netdevice.h
netfilter_arp.h
netfilter_bridge.h
netfilter_decnet.h
netfilter_ipv4.h
netfilter_ipv6.h
netfilter.h netfilter: revert introduction of egress hook 2020-03-18 16:35:48 -07:00
netlink_diag.h
netlink.h netlink: add infrastructure to expose policies to userspace 2020-04-30 17:51:42 -07:00
netrom.h
nexthop.h nexthop: support for fdb ecmp nexthops 2020-05-22 14:00:38 -07:00
nfc.h
nfs2.h
nfs3.h
nfs4_mount.h
nfs4.h
nfs_fs.h
nfs_idmap.h
nfs_mount.h NFS: Move internal constants out of uapi/linux/nfs_mount.h 2019-04-25 14:18:14 -04:00
nfs.h
nfsacl.h
nilfs2_api.h
nilfs2_ondisk.h nilfs2: do not use unexported cpu_to_le32()/le32_to_cpu() in uapi header 2019-07-12 11:05:40 -07:00
nl80211.h cfg80211: support bigger kek/kck key length 2020-05-31 11:27:24 +02:00
nsfs.h
nubus.h
nvme_ioctl.h nvme: change nvme_passthru_cmd64 to explicitly mark rsvd 2019-11-06 06:17:38 +09:00
nvram.h
omap3isp.h
omapfb.h
oom.h
openat2.h open: introduce openat2(2) syscall 2020-01-18 09:19:18 -05:00
openvswitch.h openvswitch: add TTL decrement action 2020-02-16 19:34:44 -08:00
packet_diag.h
param.h
parport.h
patchkey.h
pci_regs.h PCI: pciehp: Disable in-band presence detect when possible 2020-02-20 22:44:30 -06:00
pci.h
pcitest.h misc: pci_endpoint_test: Add ioctl to clear IRQ 2020-04-02 17:57:10 +01:00
perf_event.h perf/core: Add PERF_SAMPLE_CGROUP feature 2020-03-27 10:41:44 -03:00
personality.h
pfkeyv2.h
pg.h block: pg: add header include guard 2019-10-02 20:32:27 -06:00
phantom.h
phonet.h
pkt_cls.h cls_flower: Support filtering on multiple MPLS Label Stack Entries 2020-05-26 15:22:58 -07:00
pkt_sched.h net_sched: sch_fq: add horizon attribute 2020-05-04 11:56:17 -07:00
pktcdvd.h
pmu.h m68k/mac: Fix PRAM accessors 2019-01-22 10:21:45 +01:00
poll.h
posix_acl_xattr.h
posix_acl.h
posix_types.h
ppdev.h ppdev: add header include guard 2019-07-30 20:34:34 +02:00
ppp_defs.h y2038: syscall implementation cleanups 2019-12-01 14:00:59 -08:00
ppp-comp.h
ppp-ioctl.h compat_ioctl: handle PPPIOCGIDLE for 64-bit time_t 2019-10-23 17:23:47 +02:00
pps.h
pr.h
prctl.h prctl: PR_{G,S}ET_IO_FLUSHER to support controlling memory reclaim 2020-01-28 10:09:51 +01:00
psample.h net: psample: Add tunnel support 2020-05-21 17:04:07 -07:00
psci.h firmware/psci: add support for SYSTEM_RESET2 2019-04-16 23:05:21 +02:00
psp-sev.h crypto: ccp - Retry SEV INIT command in case of integrity check failure. 2019-10-26 02:09:58 +11:00
ptp_clock.h ptp: Add adjust_phase to ptp_clock_caps capability. 2020-05-02 16:31:45 -07:00
ptrace.h ptrace: add PTRACE_GET_SYSCALL_INFO request 2019-07-16 19:23:24 -07:00
qemu_fw_cfg.h
qnx4_fs.h
qnxtypes.h
qrtr.h
quota.h
radeonfb.h
random.h random: ignore GRND_RANDOM in getentropy(2) 2020-01-07 16:07:01 -05:00
raw.h
rds.h net: rds: add service level support in rds-info 2019-08-24 16:55:25 -07:00
reboot.h
reiserfs_fs.h
reiserfs_xattr.h
resource.h y2038: rusage: use __kernel_old_timeval 2019-11-15 14:38:29 +01:00
rfkill.h
rio_cm_cdev.h
rio_mport_cdev.h
romfs_fs.h
rose.h
route.h
rpl_iptunnel.h net: ipv6: add rpl sr tunnel 2020-03-29 22:30:57 -07:00
rpl.h include: uapi: linux: add rpl sr header definition 2020-03-29 22:30:57 -07:00
rpmsg.h
rseq.h
rtc.h rtc: make definitions in include/uapi/linux/rtc.h actually useful for user space 2020-03-26 21:38:40 +01:00
rtnetlink.h net: sched: introduce terse dump flag 2020-05-15 10:23:11 -07:00
rxrpc.h treewide: add "WITH Linux-syscall-note" to SPDX tag of uapi headers 2019-07-25 11:05:10 +02:00
scc.h linux/scc.h: make uapi linux/scc.h self-contained 2019-12-04 19:44:12 -08:00
sched.h clone3: allow spawning processes into cgroups 2020-02-12 17:57:51 -05:00
scif_ioctl.h
screen_info.h
sctp.h sctp: add SCTP_PEER_ADDR_THLDS_V2 sockopt 2019-11-08 14:18:32 -08:00
sdla.h
seccomp.h seccomp: allow TSYNC and USER_NOTIF together 2020-03-04 14:48:54 -08:00
securebits.h
sed-opal.h block: sed-opal: Add support to read/write opal tables generically 2019-11-04 07:11:31 -07:00
seg6_genl.h
seg6_hmac.h
seg6_iptunnel.h
seg6_local.h
seg6.h
selinux_netlink.h
sem.h y2038: uapi: change __kernel_time_t to __kernel_old_time_t 2019-11-15 14:38:29 +01:00
serial_core.h serial: fsl_linflexuart: Be consistent with the name 2019-10-16 06:11:24 -07:00
serial_reg.h
serial.h
serio.h Input: avoid BIT() macro usage in the serio.h UAPI header 2020-03-24 15:59:34 -07:00
shm.h y2038: uapi: change __kernel_time_t to __kernel_old_time_t 2019-11-15 14:38:29 +01:00
signal.h
signalfd.h
smc_diag.h
smc.h
smiapp.h
snmp.h tcp: export count for rehash attempts 2020-01-26 15:28:47 +01:00
sock_diag.h bpf: INET_DIAG support in bpf_sk_storage 2020-02-27 18:50:19 -08:00
socket.h net/socket: fix GCC8+ Wpacked-not-aligned warnings 2019-08-03 11:02:46 -07:00
sockios.h net: socket: implement 64-bit timestamps 2019-04-19 14:07:40 -07:00
sonet.h
sonypi.h
sound.h
soundcard.h
stat.h statx: define STATX_ATTR_VERITY 2019-11-13 12:15:34 -08:00
stddef.h
stm.h
string.h
suspend_ioctls.h
swab.h include/uapi/linux/swab.h: fix userspace breakage, use __BITS_PER_LONG for swap 2020-02-21 11:22:15 -08:00
switchtec_ioctl.h PCI/switchtec: Add Gen4 flash information interface support 2020-01-15 11:00:39 -06:00
sync_file.h
synclink.h
sysctl.h mm: fix comments related to node reclaim 2020-01-31 10:30:39 -08:00
sysinfo.h
target_core_user.h
taskstats.h tsacct: add 64-bit btime field 2019-12-18 18:07:31 +01:00
tcp_metrics.h
tcp.h tcp: add bytes not sent to SCM_TIMESTAMPING_OPT_STATS 2020-03-09 17:56:33 -07:00
tee.h tee: add AMD-TEE driver 2020-01-04 13:49:51 +08:00
termios.h
thermal.h
time_types.h y2038: rename itimerval to __kernel_old_itimerval 2019-12-18 18:07:33 +01:00
time.h y2038: hide timeval/timespec/itimerval/itimerspec types 2020-02-21 11:22:15 -08:00
timerfd.h
times.h
timex.h y2038: sparc: remove use of struct timex 2019-12-18 18:07:33 +01:00
tiocl.h
tipc_config.h net, uapi: fix -Wpointer-arith warnings 2019-10-04 14:25:17 -07:00
tipc_netlink.h tipc: make legacy address flag readable over netlink 2019-12-20 21:18:42 -08:00
tipc_sockets_diag.h
tipc.h tipc: add new AEAD key structure for user API 2019-11-08 14:01:59 -08:00
tls.h net: tls: export protocol version, cipher, tx_conf/rx_conf to socket diag 2019-08-31 23:44:28 -07:00
toshiba.h
tty_flags.h
tty.h
types.h
udf_fs_i.h
udmabuf.h
udp.h xfrm: add espintcp (RFC 8229) 2019-12-09 09:59:07 +01:00
uhid.h
uinput.h
uio.h
uleds.h
ultrasound.h
um_timetravel.h um: Implement time-travel=ext 2020-03-29 23:29:08 +02:00
un.h
unistd.h
unix_diag.h net: Add UNIX_DIAG_UID to Netlink UNIX socket diagnostics. 2019-05-22 10:36:35 -07:00
usbdevice_fs.h USB: usbfs: Add a capability flag for runtime suspend 2019-08-14 16:52:13 +02:00
usbip.h
userfaultfd.h userfaultfd: wp: enabled write protection in userfaultfd API 2020-04-07 10:43:39 -07:00
userio.h
utime.h y2038: uapi: change __kernel_time_t to __kernel_old_time_t 2019-11-15 14:38:29 +01:00
utsname.h
uuid.h
uvcvideo.h
v4l2-common.h
v4l2-controls.h media: atmel: atmel-isc-base: expose white balance as v4l2 controls 2020-02-24 16:12:28 +01:00
v4l2-dv-timings.h
v4l2-mediabus.h
v4l2-subdev.h
vbox_err.h
vbox_vmmdev_types.h treewide: add "WITH Linux-syscall-note" to SPDX tag of uapi headers 2019-07-25 11:05:10 +02:00
vboxguest.h treewide: add "WITH Linux-syscall-note" to SPDX tag of uapi headers 2019-07-25 11:05:10 +02:00
veth.h
vfio_ccw.h vfio-ccw: add handling for async channel instructions 2019-04-24 14:18:51 +02:00
vfio.h vfio: Introduce VFIO_DEVICE_FEATURE ioctl and first user 2020-03-24 09:28:27 -06:00
vhost_types.h vhost: introduce vDPA-based backend 2020-04-02 10:41:40 -04:00
vhost.h vhost: introduce vDPA-based backend 2020-04-02 10:41:40 -04:00
videodev2.h media: v4l: Add 14-bit raw greyscale pixel format 2020-03-20 09:00:56 +01:00
virtio_9p.h
virtio_balloon.h virtio-balloon: Avoid using the word 'report' when referring to free page hinting 2020-04-17 06:05:30 -04:00
virtio_blk.h
virtio_config.h virtio: support VIRTIO_F_ORDER_PLATFORM 2019-01-24 10:15:42 -05:00
virtio_console.h
virtio_crypto.h
virtio_fs.h virtio-fs: add virtiofs filesystem 2019-09-18 20:17:50 +02:00
virtio_gpu.h virtio-gpu api: comment feature flags 2019-04-11 17:00:10 +02:00
virtio_ids.h mac80211_hwsim: add frame transmission support over virtio 2020-03-20 14:42:19 +01:00
virtio_input.h
virtio_iommu.h iommu/virtio: Fix sparse warning 2020-03-27 11:09:18 +01:00
virtio_mmio.h
virtio_net.h virtio-net: Introduce hash report feature 2020-03-23 09:50:02 -04:00
virtio_pci.h
virtio_pmem.h treewide: add "WITH Linux-syscall-note" to SPDX tag of uapi headers 2019-07-25 11:05:10 +02:00
virtio_ring.h net, uapi: fix -Wpointer-arith warnings 2019-10-04 14:25:17 -07:00
virtio_rng.h
virtio_scsi.h
virtio_types.h
virtio_vsock.h
vm_sockets_diag.h
vm_sockets.h vsock: add VMADDR_CID_LOCAL definition 2019-12-11 15:01:23 -08:00
vmcore.h treewide: add "WITH Linux-syscall-note" to SPDX tag of uapi headers 2019-07-25 11:05:10 +02:00
vsockmon.h
vt.h
vtpm_proxy.h
wait.h pidfd: add P_PIDFD to waitid() 2019-08-01 21:49:46 +02:00
watchdog.h
wimax.h
wireguard.h wireguard: global: fix spelling mistakes in comments 2019-12-16 19:22:22 -08:00
wireless.h wireless: Use linux/stddef.h instead of stddef.h 2020-05-27 10:03:27 +02:00
wmi.h treewide: add "WITH Linux-syscall-note" to SPDX tag of uapi headers 2019-07-25 11:05:10 +02:00
x25.h
xattr.h
xdp_diag.h xsk: add sock_diag interface for AF_XDP 2019-01-25 01:50:03 +01:00
xfrm.h xfrm: fix error in comment 2020-04-20 07:26:42 +02:00
xilinx-v4l2-controls.h
zorro_ids.h
zorro.h