From: David Vernet <void@manifault.com>
To: Will Hawkins <hawkinsw@obs.cr>
Cc: bpf@vger.kernel.org, bpf@ietf.org
Subject: Re: [Bpf] [PATCH 1/1] bpf, docs: Formalize type notation and function semantics in ISA standard
Date: Tue, 1 Aug 2023 14:35:38 -0500 [thread overview]
Message-ID: <20230801193538.GA472124@maniforge> (raw)
In-Reply-To: <20230730035156.2728106-2-hawkinsw@obs.cr>
On Sat, Jul 29, 2023 at 11:51:56PM -0400, Will Hawkins wrote:
> Give a single place where the shorthand for types are defined and the
> semantics of helper functions are described.
>
> Signed-off-by: Will Hawkins <hawkinsw@obs.cr>
> ---
> .../bpf/standardization/instruction-set.rst | 65 ++++++++++++++++++-
> Documentation/sphinx/requirements.txt | 2 +-
> 2 files changed, 63 insertions(+), 4 deletions(-)
>
> diff --git a/Documentation/bpf/standardization/instruction-set.rst b/Documentation/bpf/standardization/instruction-set.rst
> index fb8154cedd84..97378388e20b 100644
> --- a/Documentation/bpf/standardization/instruction-set.rst
> +++ b/Documentation/bpf/standardization/instruction-set.rst
> @@ -10,9 +10,68 @@ This document specifies version 1.0 of the eBPF instruction set.
> Documentation conventions
> =========================
>
> -For brevity, this document uses the type notion "u64", "u32", etc.
> -to mean an unsigned integer whose width is the specified number of bits,
> -and "s32", etc. to mean a signed integer of the specified number of bits.
> +For brevity and consistency, this document refers to families
> +of types using a shorthand syntax and refers to several helper
> +functions when explaining the semantics of opcodes. The range
nit: Can we use a different term than "helper functions" here, just
because it's an overloaded term for BPF. Maybe "shorthand functions" or
"mnemonic functions"? Or just "functions"?
> +of valid values for those types and the semantics of those functions
> +are defined in the following subsections.
> +
> +Types
> +-----
> +This document refers to integer types with a notation of the form `SX`
I suggest replacing `SX` with `Sn`, as `SX` is short for sign-extension
in several instructions.
> +that succinctly defines whether their values are signed or unsigned
> +numbers and the bit widths:
> +
> +=== =======
> +`S` Meaning
> +=== =======
> +`u` unsigned
> +`s` signed
> +=== =======
> +
> +===== =========
> +`X` Bit width
> +===== =========
> +`8` 8 bits
> +`16` 16 bits
> +`32` 32 bits
> +`64` 64 bits
> +`128` 128 bits
> +===== =========
> +
> +For example, `u32` is a type whose valid values are all the 32-bit unsigned
> +numbers and `s16` is a types whose valid values are all the 16-bit signed
> +numbers.
> +
> +Functions
> +---------
> +* `htobe16`: Takes an unsigned 16-bit number in host-endian format and
> + returns the equivalent number as an unsigned 16-bit number in big-endian
> + format.
> +* `htobe32`: Takes an unsigned 32-bit number in host-endian format and
> + returns the equivalent number as an unsigned 32-bit number in big-endian
> + format.
> +* `htobe64`: Takes an unsigned 64-bit number in host-endian format and
> + returns the equivalent number as an unsigned 64-bit number in big-endian
> + format.
> +* `htole16`: Takes an unsigned 16-bit number in host-endian format and
> + returns the equivalent number as an unsigned 16-bit number in little-endian
> + format.
> +* `htole32`: Takes an unsigned 32-bit number in host-endian format and
> + returns the equivalent number as an unsigned 32-bit number in little-endian
> + format.
> +* `htole64`: Takes an unsigned 64-bit number in host-endian format and
> + returns the equivalent number as an unsigned 64-bit number in little-endian
> + format.
Hmm, some of these functions aren't actually used elsewhere in the
document. Maybe update the hto{b,l}eN examples later in the Byte swap
instructions section to match bswapN where all widths are illustrated in
the example?
> +* `bswap16`: Takes an unsigned 16-bit number in either big- or little-endian
> + format and returns the equivalent number with the same bit width but
> + opposite endianness.
> +* `bswap32`: Takes an unsigned 32-bit number in either big- or little-endian
> + format and returns the equivalent number with the same bit width but
> + opposite endianness.
> +* `bswap64`: Takes an unsigned 64-bit number in either big- or little-endian
> + format and returns the equivalent number with the same bit width but
> + opposite endianness.
>
> Registers and calling convention
> ================================
> diff --git a/Documentation/sphinx/requirements.txt b/Documentation/sphinx/requirements.txt
> index 335b53df35e2..9479c5c2e338 100644
> --- a/Documentation/sphinx/requirements.txt
> +++ b/Documentation/sphinx/requirements.txt
> @@ -1,3 +1,3 @@
> # jinja2>=3.1 is not compatible with Sphinx<4.0
> jinja2<3.1
> -Sphinx==2.4.4
> +Sphinx==7.1.1
I don't think we can unilaterally update the whole kernel docs tree to
require a new version of Sphinx like this. Could you please clarify why
you needed to update it? Was it for the tables or something?
> --
> 2.40.1
>
> --
> Bpf mailing list
> Bpf@ietf.org
> https://www.ietf.org/mailman/listinfo/bpf
WARNING: multiple messages have this Message-ID (diff)
From: David Vernet <void@manifault.com>
To: Will Hawkins <hawkinsw@obs.cr>
Cc: bpf@vger.kernel.org, bpf@ietf.org
Subject: Re: [Bpf] [PATCH 1/1] bpf, docs: Formalize type notation and function semantics in ISA standard
Date: Tue, 1 Aug 2023 14:35:38 -0500 [thread overview]
Message-ID: <20230801193538.GA472124@maniforge> (raw)
Message-ID: <20230801193538.aOsQw932ZnjdmRS2jl8qqlxcWCJEIKWOkiugLoCYf84@z> (raw)
In-Reply-To: <20230730035156.2728106-2-hawkinsw@obs.cr>
On Sat, Jul 29, 2023 at 11:51:56PM -0400, Will Hawkins wrote:
> Give a single place where the shorthand for types are defined and the
> semantics of helper functions are described.
>
> Signed-off-by: Will Hawkins <hawkinsw@obs.cr>
> ---
> .../bpf/standardization/instruction-set.rst | 65 ++++++++++++++++++-
> Documentation/sphinx/requirements.txt | 2 +-
> 2 files changed, 63 insertions(+), 4 deletions(-)
>
> diff --git a/Documentation/bpf/standardization/instruction-set.rst b/Documentation/bpf/standardization/instruction-set.rst
> index fb8154cedd84..97378388e20b 100644
> --- a/Documentation/bpf/standardization/instruction-set.rst
> +++ b/Documentation/bpf/standardization/instruction-set.rst
> @@ -10,9 +10,68 @@ This document specifies version 1.0 of the eBPF instruction set.
> Documentation conventions
> =========================
>
> -For brevity, this document uses the type notion "u64", "u32", etc.
> -to mean an unsigned integer whose width is the specified number of bits,
> -and "s32", etc. to mean a signed integer of the specified number of bits.
> +For brevity and consistency, this document refers to families
> +of types using a shorthand syntax and refers to several helper
> +functions when explaining the semantics of opcodes. The range
nit: Can we use a different term than "helper functions" here, just
because it's an overloaded term for BPF. Maybe "shorthand functions" or
"mnemonic functions"? Or just "functions"?
> +of valid values for those types and the semantics of those functions
> +are defined in the following subsections.
> +
> +Types
> +-----
> +This document refers to integer types with a notation of the form `SX`
I suggest replacing `SX` with `Sn`, as `SX` is short for sign-extension
in several instructions.
> +that succinctly defines whether their values are signed or unsigned
> +numbers and the bit widths:
> +
> +=== =======
> +`S` Meaning
> +=== =======
> +`u` unsigned
> +`s` signed
> +=== =======
> +
> +===== =========
> +`X` Bit width
> +===== =========
> +`8` 8 bits
> +`16` 16 bits
> +`32` 32 bits
> +`64` 64 bits
> +`128` 128 bits
> +===== =========
> +
> +For example, `u32` is a type whose valid values are all the 32-bit unsigned
> +numbers and `s16` is a types whose valid values are all the 16-bit signed
> +numbers.
> +
> +Functions
> +---------
> +* `htobe16`: Takes an unsigned 16-bit number in host-endian format and
> + returns the equivalent number as an unsigned 16-bit number in big-endian
> + format.
> +* `htobe32`: Takes an unsigned 32-bit number in host-endian format and
> + returns the equivalent number as an unsigned 32-bit number in big-endian
> + format.
> +* `htobe64`: Takes an unsigned 64-bit number in host-endian format and
> + returns the equivalent number as an unsigned 64-bit number in big-endian
> + format.
> +* `htole16`: Takes an unsigned 16-bit number in host-endian format and
> + returns the equivalent number as an unsigned 16-bit number in little-endian
> + format.
> +* `htole32`: Takes an unsigned 32-bit number in host-endian format and
> + returns the equivalent number as an unsigned 32-bit number in little-endian
> + format.
> +* `htole64`: Takes an unsigned 64-bit number in host-endian format and
> + returns the equivalent number as an unsigned 64-bit number in little-endian
> + format.
Hmm, some of these functions aren't actually used elsewhere in the
document. Maybe update the hto{b,l}eN examples later in the Byte swap
instructions section to match bswapN where all widths are illustrated in
the example?
> +* `bswap16`: Takes an unsigned 16-bit number in either big- or little-endian
> + format and returns the equivalent number with the same bit width but
> + opposite endianness.
> +* `bswap32`: Takes an unsigned 32-bit number in either big- or little-endian
> + format and returns the equivalent number with the same bit width but
> + opposite endianness.
> +* `bswap64`: Takes an unsigned 64-bit number in either big- or little-endian
> + format and returns the equivalent number with the same bit width but
> + opposite endianness.
>
> Registers and calling convention
> ================================
> diff --git a/Documentation/sphinx/requirements.txt b/Documentation/sphinx/requirements.txt
> index 335b53df35e2..9479c5c2e338 100644
> --- a/Documentation/sphinx/requirements.txt
> +++ b/Documentation/sphinx/requirements.txt
> @@ -1,3 +1,3 @@
> # jinja2>=3.1 is not compatible with Sphinx<4.0
> jinja2<3.1
> -Sphinx==2.4.4
> +Sphinx==7.1.1
I don't think we can unilaterally update the whole kernel docs tree to
require a new version of Sphinx like this. Could you please clarify why
you needed to update it? Was it for the tables or something?
> --
> 2.40.1
>
> --
> Bpf mailing list
> Bpf@ietf.org
> https://www.ietf.org/mailman/listinfo/bpf
--
Bpf mailing list
Bpf@ietf.org
https://www.ietf.org/mailman/listinfo/bpf
next prev parent reply other threads:[~2023-08-01 19:35 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-07-30 3:51 [PATCH 0/1] Formalize type notation and function semantics in ISA standard Will Hawkins
2023-07-30 3:51 ` [Bpf] " Will Hawkins
2023-07-30 3:51 ` [PATCH 1/1] bpf, docs: " Will Hawkins
2023-07-30 3:51 ` [Bpf] " Will Hawkins
2023-08-01 19:35 ` David Vernet [this message]
2023-08-01 19:35 ` David Vernet
2023-08-01 19:49 ` Will Hawkins
2023-08-01 19:49 ` Will Hawkins
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230801193538.GA472124@maniforge \
--to=void@manifault.com \
--cc=bpf@ietf.org \
--cc=bpf@vger.kernel.org \
--cc=hawkinsw@obs.cr \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.