diff mbox series

[bpf-next,v1] bpf, docs: Reformat BPF maps page to be more readable

Message ID 20221012152715.25073-1-donald.hunter@gmail.com (mailing list archive)
State Accepted
Commit fb73a20ebe15b16dee68e226ec82f8e55c4d64f9
Delegated to: BPF
Headers show
Series [bpf-next,v1] bpf, docs: Reformat BPF maps page to be more readable | expand

Checks

Context Check Description
netdev/tree_selection success Clearly marked for bpf-next
netdev/fixes_present success Fixes tag not required for -next series
netdev/subject_prefix success Link
netdev/cover_letter success Single patches do not need cover letters
netdev/patch_count success Link
netdev/header_inline success No static functions without inline keyword in header files
netdev/build_32bit success Errors and warnings before: 0 this patch: 0
netdev/cc_maintainers warning 12 maintainers not CCed: sdf@google.com john.fastabend@gmail.com andrii@kernel.org yhs@fb.com ast@kernel.org haoluo@google.com corbet@lwn.net jolsa@kernel.org kpsingh@kernel.org song@kernel.org daniel@iogearbox.net martin.lau@linux.dev
netdev/build_clang success Errors and warnings before: 0 this patch: 0
netdev/module_param success Was 0 now: 0
netdev/verify_signedoff success Signed-off-by tag matches author and committer
netdev/check_selftest success No net selftest shell script
netdev/verify_fixes success No Fixes tag
netdev/build_allmodconfig_warn success Errors and warnings before: 0 this patch: 0
netdev/checkpatch success total: 0 errors, 0 warnings, 0 checks, 118 lines checked
netdev/kdoc success Errors and warnings before: 0 this patch: 0
netdev/source_inline success Was 0 now: 0
bpf/vmtest-bpf-next-VM_Test-4 success Logs for llvm-toolchain
bpf/vmtest-bpf-next-VM_Test-5 success Logs for set-matrix
bpf/vmtest-bpf-next-VM_Test-2 success Logs for build for x86_64 with gcc
bpf/vmtest-bpf-next-VM_Test-3 success Logs for build for x86_64 with llvm-16
bpf/vmtest-bpf-next-VM_Test-1 success Logs for build for s390x with gcc
bpf/vmtest-bpf-next-VM_Test-16 success Logs for test_verifier on x86_64 with gcc
bpf/vmtest-bpf-next-VM_Test-17 success Logs for test_verifier on x86_64 with llvm-16
bpf/vmtest-bpf-next-VM_Test-7 success Logs for test_maps on x86_64 with gcc
bpf/vmtest-bpf-next-VM_Test-8 success Logs for test_maps on x86_64 with llvm-16
bpf/vmtest-bpf-next-VM_Test-9 success Logs for test_progs on s390x with gcc
bpf/vmtest-bpf-next-VM_Test-10 success Logs for test_progs on x86_64 with gcc
bpf/vmtest-bpf-next-VM_Test-11 success Logs for test_progs on x86_64 with llvm-16
bpf/vmtest-bpf-next-VM_Test-12 success Logs for test_progs_no_alu32 on s390x with gcc
bpf/vmtest-bpf-next-VM_Test-13 success Logs for test_progs_no_alu32 on x86_64 with gcc
bpf/vmtest-bpf-next-VM_Test-14 success Logs for test_progs_no_alu32 on x86_64 with llvm-16
bpf/vmtest-bpf-next-VM_Test-15 success Logs for test_verifier on s390x with gcc
bpf/vmtest-bpf-next-PR success PR summary
bpf/vmtest-bpf-next-VM_Test-6 success Logs for test_maps on s390x with gcc

Commit Message

Donald Hunter Oct. 12, 2022, 3:27 p.m. UTC
Add a more complete introduction, with links to man pages.
Move toctree of map types above usage notes.
Format usage notes to improve readability.

Signed-off-by: Donald Hunter <donald.hunter@gmail.com>
---
 Documentation/bpf/maps.rst | 101 ++++++++++++++++++++++++-------------
 1 file changed, 65 insertions(+), 36 deletions(-)

Comments

Bagas Sanjaya Oct. 13, 2022, 4:13 a.m. UTC | #1
On Wed, Oct 12, 2022 at 04:27:15PM +0100, Donald Hunter wrote:
> Add a more complete introduction, with links to man pages.
> Move toctree of map types above usage notes.
> Format usage notes to improve readability.
> 
> Signed-off-by: Donald Hunter <donald.hunter@gmail.com>
> ---
>  Documentation/bpf/maps.rst | 101 ++++++++++++++++++++++++-------------
>  1 file changed, 65 insertions(+), 36 deletions(-)
> 
> diff --git a/Documentation/bpf/maps.rst b/Documentation/bpf/maps.rst
> index f41619e312ac..4906ff0f8382 100644
> --- a/Documentation/bpf/maps.rst
> +++ b/Documentation/bpf/maps.rst
> @@ -1,52 +1,81 @@
>  
> -=========
> -eBPF maps
> +========
> +BPF maps
> +========
> +
> +BPF 'maps' provide generic storage of different types for sharing data between
> +kernel and user space. There are several storage types available, including
> +hash, array, bloom filter and radix-tree. Several of the map types exist to
> +support specific BPF helpers that perform actions based on the map contents. The
> +maps are accessed from BPF programs via BPF helpers which are documented in the
> +`man-pages`_ for `bpf-helpers(7)`_.
> +
> +BPF maps are accessed from user space via the ``bpf`` syscall, which provides
> +commands to create maps, lookup elements, update elements and delete
> +elements. More details of the BPF syscall are available in
> +:doc:`/userspace-api/ebpf/syscall` and in the `man-pages`_ for `bpf(2)`_.
> <snipped>...
> +.. Links:
> +.. _man-pages: https://www.kernel.org/doc/man-pages/
> +.. _bpf(2): https://man7.org/linux/man-pages/man2/bpf.2.html
> +.. _bpf-helpers(7): https://man7.org/linux/man-pages/man7/bpf-helpers.7.html

I think you can just write "see :manpage:`bpf(2)`" without linking to
external site.

Otherwise LGTM.
Donald Hunter Oct. 18, 2022, 2:45 p.m. UTC | #2
Bagas Sanjaya <bagasdotme@gmail.com> writes:

> On Wed, Oct 12, 2022 at 04:27:15PM +0100, Donald Hunter wrote:
>> Add a more complete introduction, with links to man pages.
>> Move toctree of map types above usage notes.
>> Format usage notes to improve readability.
>> 
>> Signed-off-by: Donald Hunter <donald.hunter@gmail.com>
>> ---
>>  Documentation/bpf/maps.rst | 101 ++++++++++++++++++++++++-------------
>>  1 file changed, 65 insertions(+), 36 deletions(-)
>> 
>> diff --git a/Documentation/bpf/maps.rst b/Documentation/bpf/maps.rst
>> index f41619e312ac..4906ff0f8382 100644
>> --- a/Documentation/bpf/maps.rst
>> +++ b/Documentation/bpf/maps.rst
>> @@ -1,52 +1,81 @@
>>  
>> -=========
>> -eBPF maps
>> +========
>> +BPF maps
>> +========
>> +
>> +BPF 'maps' provide generic storage of different types for sharing data between
>> +kernel and user space. There are several storage types available, including
>> +hash, array, bloom filter and radix-tree. Several of the map types exist to
>> +support specific BPF helpers that perform actions based on the map contents. The
>> +maps are accessed from BPF programs via BPF helpers which are documented in the
>> +`man-pages`_ for `bpf-helpers(7)`_.
>> +
>> +BPF maps are accessed from user space via the ``bpf`` syscall, which provides
>> +commands to create maps, lookup elements, update elements and delete
>> +elements. More details of the BPF syscall are available in
>> +:doc:`/userspace-api/ebpf/syscall` and in the `man-pages`_ for `bpf(2)`_.
>> <snipped>...
>> +.. Links:
>> +.. _man-pages: https://www.kernel.org/doc/man-pages/
>> +.. _bpf(2): https://man7.org/linux/man-pages/man2/bpf.2.html
>> +.. _bpf-helpers(7): https://man7.org/linux/man-pages/man7/bpf-helpers.7.html
>
> I think you can just write "see :manpage:`bpf(2)`" without linking to
> external site.

I tried your suggestion but it just renders italicized text. I think it
is more helpful to provide a clickable link to the relevant man
page. Other documentation pages already provide clickable manpage links
and I followed existing practise from Documentation/bpf/syscall_api.rst

I would prefer to keep the clickable links.

> Otherwise LGTM.
patchwork-bot+netdevbpf@kernel.org Oct. 21, 2022, 2 a.m. UTC | #3
Hello:

This patch was applied to bpf/bpf-next.git (master)
by Alexei Starovoitov <ast@kernel.org>:

On Wed, 12 Oct 2022 16:27:15 +0100 you wrote:
> Add a more complete introduction, with links to man pages.
> Move toctree of map types above usage notes.
> Format usage notes to improve readability.
> 
> Signed-off-by: Donald Hunter <donald.hunter@gmail.com>
> ---
>  Documentation/bpf/maps.rst | 101 ++++++++++++++++++++++++-------------
>  1 file changed, 65 insertions(+), 36 deletions(-)

Here is the summary with links:
  - [bpf-next,v1] bpf, docs: Reformat BPF maps page to be more readable
    https://git.kernel.org/bpf/bpf-next/c/fb73a20ebe15

You are awesome, thank you!
diff mbox series

Patch

diff --git a/Documentation/bpf/maps.rst b/Documentation/bpf/maps.rst
index f41619e312ac..4906ff0f8382 100644
--- a/Documentation/bpf/maps.rst
+++ b/Documentation/bpf/maps.rst
@@ -1,52 +1,81 @@ 
 
-=========
-eBPF maps
+========
+BPF maps
+========
+
+BPF 'maps' provide generic storage of different types for sharing data between
+kernel and user space. There are several storage types available, including
+hash, array, bloom filter and radix-tree. Several of the map types exist to
+support specific BPF helpers that perform actions based on the map contents. The
+maps are accessed from BPF programs via BPF helpers which are documented in the
+`man-pages`_ for `bpf-helpers(7)`_.
+
+BPF maps are accessed from user space via the ``bpf`` syscall, which provides
+commands to create maps, lookup elements, update elements and delete
+elements. More details of the BPF syscall are available in
+:doc:`/userspace-api/ebpf/syscall` and in the `man-pages`_ for `bpf(2)`_.
+
+Map Types
 =========
 
-'maps' is a generic storage of different types for sharing data between kernel
-and userspace.
+.. toctree::
+   :maxdepth: 1
+   :glob:
 
-The maps are accessed from user space via BPF syscall, which has commands:
+   map_*
 
-- create a map with given type and attributes
-  ``map_fd = bpf(BPF_MAP_CREATE, union bpf_attr *attr, u32 size)``
-  using attr->map_type, attr->key_size, attr->value_size, attr->max_entries
-  returns process-local file descriptor or negative error
+Usage Notes
+===========
 
-- lookup key in a given map
-  ``err = bpf(BPF_MAP_LOOKUP_ELEM, union bpf_attr *attr, u32 size)``
-  using attr->map_fd, attr->key, attr->value
-  returns zero and stores found elem into value or negative error
+.. c:function::
+   int bpf(int command, union bpf_attr *attr, u32 size)
 
-- create or update key/value pair in a given map
-  ``err = bpf(BPF_MAP_UPDATE_ELEM, union bpf_attr *attr, u32 size)``
-  using attr->map_fd, attr->key, attr->value
-  returns zero or negative error
+Use the ``bpf()`` system call to perform the operation specified by
+``command``. The operation takes parameters provided in ``attr``. The ``size``
+argument is the size of the ``union bpf_attr`` in ``attr``.
 
-- find and delete element by key in a given map
-  ``err = bpf(BPF_MAP_DELETE_ELEM, union bpf_attr *attr, u32 size)``
-  using attr->map_fd, attr->key
+**BPF_MAP_CREATE**
 
-- to delete map: close(fd)
-  Exiting process will delete maps automatically
+Create a map with the desired type and attributes in ``attr``:
 
-userspace programs use this syscall to create/access maps that eBPF programs
-are concurrently updating.
+.. code-block:: c
 
-maps can have different types: hash, array, bloom filter, radix-tree, etc.
+    int fd;
+    union bpf_attr attr = {
+            .map_type = BPF_MAP_TYPE_ARRAY;  /* mandatory */
+            .key_size = sizeof(__u32);       /* mandatory */
+            .value_size = sizeof(__u32);     /* mandatory */
+            .max_entries = 256;              /* mandatory */
+            .map_flags = BPF_F_MMAPABLE;
+            .map_name = "example_array";
+    };
 
-The map is defined by:
+    fd = bpf(BPF_MAP_CREATE, &attr, sizeof(attr));
 
-  - type
-  - max number of elements
-  - key size in bytes
-  - value size in bytes
+Returns a process-local file descriptor on success, or negative error in case of
+failure. The map can be deleted by calling ``close(fd)``. Maps held by open
+file descriptors will be deleted automatically when a process exits.
 
-Map Types
-=========
+.. note:: Valid characters for ``map_name`` are ``A-Z``, ``a-z``, ``0-9``,
+   ``'_'`` and ``'.'``.
 
-.. toctree::
-   :maxdepth: 1
-   :glob:
+**BPF_MAP_LOOKUP_ELEM**
+
+Lookup key in a given map using ``attr->map_fd``, ``attr->key``,
+``attr->value``. Returns zero and stores found elem into ``attr->value`` on
+success, or negative error on failure.
+
+**BPF_MAP_UPDATE_ELEM**
+
+Create or update key/value pair in a given map using ``attr->map_fd``, ``attr->key``,
+``attr->value``. Returns zero on success or negative error on failure.
+
+**BPF_MAP_DELETE_ELEM**
+
+Find and delete element by key in a given map using ``attr->map_fd``,
+``attr->key``. Returns zero on success or negative error on failure.
 
-   map_*
\ No newline at end of file
+.. Links:
+.. _man-pages: https://www.kernel.org/doc/man-pages/
+.. _bpf(2): https://man7.org/linux/man-pages/man2/bpf.2.html
+.. _bpf-helpers(7): https://man7.org/linux/man-pages/man7/bpf-helpers.7.html