Message ID | 20210219022543.20893-7-iii@linux.ibm.com (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | BPF |
Headers | show |
Series | Add BTF_KIND_FLOAT support | expand |
Context | Check | Description |
---|---|---|
netdev/cover_letter | success | Link |
netdev/fixes_present | success | Link |
netdev/patch_count | success | Link |
netdev/tree_selection | success | Clearly marked for bpf-next |
netdev/subject_prefix | success | Link |
netdev/cc_maintainers | warning | 6 maintainers not CCed: linux-doc@vger.kernel.org corbet@lwn.net netdev@vger.kernel.org kpsingh@kernel.org songliubraving@fb.com kafai@fb.com |
netdev/source_inline | success | Was 0 now: 0 |
netdev/verify_signedoff | success | Link |
netdev/module_param | success | Was 0 now: 0 |
netdev/build_32bit | fail | Errors and warnings before: 2 this patch: 2 |
netdev/kdoc | success | Errors and warnings before: 0 this patch: 0 |
netdev/verify_fixes | success | Link |
netdev/checkpatch | success | total: 0 errors, 0 warnings, 0 checks, 35 lines checked |
netdev/build_allmodconfig_warn | success | Errors and warnings before: 0 this patch: 0 |
netdev/header_inline | success | Link |
netdev/stable | success | Stable not CCed |
On 2/18/21 6:25 PM, Ilya Leoshkevich wrote: > Also document the expansion of the kind bitfield. > > Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com> > --- > Documentation/bpf/btf.rst | 17 +++++++++++++++-- > 1 file changed, 15 insertions(+), 2 deletions(-) > > diff --git a/Documentation/bpf/btf.rst b/Documentation/bpf/btf.rst > index 44dc789de2b4..4f25c992d442 100644 > --- a/Documentation/bpf/btf.rst > +++ b/Documentation/bpf/btf.rst > @@ -84,6 +84,7 @@ sequentially and type id is assigned to each recognized type starting from id > #define BTF_KIND_FUNC_PROTO 13 /* Function Proto */ > #define BTF_KIND_VAR 14 /* Variable */ > #define BTF_KIND_DATASEC 15 /* Section */ > + #define BTF_KIND_FLOAT 16 /* Floating point */ > > Note that the type section encodes debug info, not just pure types. > ``BTF_KIND_FUNC`` is not a type, and it represents a defined subprogram. > @@ -95,8 +96,8 @@ Each type contains the following common data:: > /* "info" bits arrangement > * bits 0-15: vlen (e.g. # of struct's members) > * bits 16-23: unused > - * bits 24-27: kind (e.g. int, ptr, array...etc) > - * bits 28-30: unused > + * bits 24-28: kind (e.g. int, ptr, array...etc) > + * bits 29-30: unused > * bit 31: kind_flag, currently used by > * struct, union and fwd > */ > @@ -452,6 +453,18 @@ map definition. > * ``offset``: the in-section offset of the variable > * ``size``: the size of the variable in bytes > > +2.2.16 BTF_KIND_FLOAT > +~~~~~~~~~~~~~~~~~~~~~ > + > +``struct btf_type`` encoding requirement: > + * ``name_off``: any valid offset > + * ``info.kind_flag``: 0 > + * ``info.kind``: BTF_KIND_FLOAT > + * ``info.vlen``: 0 > + * ``size``: the size of the float type in bytes. I would be good to specify the allowed size in bytes 2, multiple of 4. currently we do not have a maximum value, maybe 128. have a float type something like 2^10 seems strange. > + > +No additional type data follow ``btf_type``. > + > 3. BTF Kernel API > ***************** > >
On Thu, 2021-02-18 at 21:41 -0800, Yonghong Song wrote: > > > On 2/18/21 6:25 PM, Ilya Leoshkevich wrote: > > Also document the expansion of the kind bitfield. > > > > Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com> > > --- > > Documentation/bpf/btf.rst | 17 +++++++++++++++-- > > 1 file changed, 15 insertions(+), 2 deletions(-) > > > > diff --git a/Documentation/bpf/btf.rst b/Documentation/bpf/btf.rst > > index 44dc789de2b4..4f25c992d442 100644 > > --- a/Documentation/bpf/btf.rst > > +++ b/Documentation/bpf/btf.rst > > @@ -84,6 +84,7 @@ sequentially and type id is assigned to each > > recognized type starting from id > > #define BTF_KIND_FUNC_PROTO 13 /* Function > > Proto */ > > #define BTF_KIND_VAR 14 /* Variable */ > > #define BTF_KIND_DATASEC 15 /* Section */ > > + #define BTF_KIND_FLOAT 16 /* Floating > > point */ > > > > Note that the type section encodes debug info, not just pure > > types. > > ``BTF_KIND_FUNC`` is not a type, and it represents a defined > > subprogram. > > @@ -95,8 +96,8 @@ Each type contains the following common data:: > > /* "info" bits arrangement > > * bits 0-15: vlen (e.g. # of struct's members) > > * bits 16-23: unused > > - * bits 24-27: kind (e.g. int, ptr, array...etc) > > - * bits 28-30: unused > > + * bits 24-28: kind (e.g. int, ptr, array...etc) > > + * bits 29-30: unused > > * bit 31: kind_flag, currently used by > > * struct, union and fwd > > */ > > @@ -452,6 +453,18 @@ map definition. > > * ``offset``: the in-section offset of the variable > > * ``size``: the size of the variable in bytes > > > > +2.2.16 BTF_KIND_FLOAT > > +~~~~~~~~~~~~~~~~~~~~~ > > + > > +``struct btf_type`` encoding requirement: > > + * ``name_off``: any valid offset > > + * ``info.kind_flag``: 0 > > + * ``info.kind``: BTF_KIND_FLOAT > > + * ``info.vlen``: 0 > > + * ``size``: the size of the float type in bytes. > > I would be good to specify the allowed size in bytes 2, multiple of > 4. > currently we do not have a maximum value, maybe 128. have a float > type > something like 2^10 seems strange. I tried to write this all down and realized it's simpler to enumerate the allowed values: 2, 4, 8, 12 and 16. I don't think there are 32-byte floats on any of the architectures supported by the kernel.
On 2/19/21 5:00 AM, Ilya Leoshkevich wrote: > On Thu, 2021-02-18 at 21:41 -0800, Yonghong Song wrote: >> >> >> On 2/18/21 6:25 PM, Ilya Leoshkevich wrote: >>> Also document the expansion of the kind bitfield. >>> >>> Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com> >>> --- >>> Documentation/bpf/btf.rst | 17 +++++++++++++++-- >>> 1 file changed, 15 insertions(+), 2 deletions(-) >>> >>> diff --git a/Documentation/bpf/btf.rst b/Documentation/bpf/btf.rst >>> index 44dc789de2b4..4f25c992d442 100644 >>> --- a/Documentation/bpf/btf.rst >>> +++ b/Documentation/bpf/btf.rst >>> @@ -84,6 +84,7 @@ sequentially and type id is assigned to each >>> recognized type starting from id >>> #define BTF_KIND_FUNC_PROTO 13 /* Function >>> Proto */ >>> #define BTF_KIND_VAR 14 /* Variable */ >>> #define BTF_KIND_DATASEC 15 /* Section */ >>> + #define BTF_KIND_FLOAT 16 /* Floating >>> point */ >>> >>> Note that the type section encodes debug info, not just pure >>> types. >>> ``BTF_KIND_FUNC`` is not a type, and it represents a defined >>> subprogram. >>> @@ -95,8 +96,8 @@ Each type contains the following common data:: >>> /* "info" bits arrangement >>> * bits 0-15: vlen (e.g. # of struct's members) >>> * bits 16-23: unused >>> - * bits 24-27: kind (e.g. int, ptr, array...etc) >>> - * bits 28-30: unused >>> + * bits 24-28: kind (e.g. int, ptr, array...etc) >>> + * bits 29-30: unused >>> * bit 31: kind_flag, currently used by >>> * struct, union and fwd >>> */ >>> @@ -452,6 +453,18 @@ map definition. >>> * ``offset``: the in-section offset of the variable >>> * ``size``: the size of the variable in bytes >>> >>> +2.2.16 BTF_KIND_FLOAT >>> +~~~~~~~~~~~~~~~~~~~~~ >>> + >>> +``struct btf_type`` encoding requirement: >>> + * ``name_off``: any valid offset >>> + * ``info.kind_flag``: 0 >>> + * ``info.kind``: BTF_KIND_FLOAT >>> + * ``info.vlen``: 0 >>> + * ``size``: the size of the float type in bytes. >> >> I would be good to specify the allowed size in bytes 2, multiple of >> 4. >> currently we do not have a maximum value, maybe 128. have a float >> type >> something like 2^10 seems strange. > > I tried to write this all down and realized it's simpler to enumerate > the allowed values: 2, 4, 8, 12 and 16. I don't think there are 32-byte > floats on any of the architectures supported by the kernel. This make senses. My above 128 means 128bits (sorry!), which is 16 bytes, align with what you suggested. >
diff --git a/Documentation/bpf/btf.rst b/Documentation/bpf/btf.rst index 44dc789de2b4..4f25c992d442 100644 --- a/Documentation/bpf/btf.rst +++ b/Documentation/bpf/btf.rst @@ -84,6 +84,7 @@ sequentially and type id is assigned to each recognized type starting from id #define BTF_KIND_FUNC_PROTO 13 /* Function Proto */ #define BTF_KIND_VAR 14 /* Variable */ #define BTF_KIND_DATASEC 15 /* Section */ + #define BTF_KIND_FLOAT 16 /* Floating point */ Note that the type section encodes debug info, not just pure types. ``BTF_KIND_FUNC`` is not a type, and it represents a defined subprogram. @@ -95,8 +96,8 @@ Each type contains the following common data:: /* "info" bits arrangement * bits 0-15: vlen (e.g. # of struct's members) * bits 16-23: unused - * bits 24-27: kind (e.g. int, ptr, array...etc) - * bits 28-30: unused + * bits 24-28: kind (e.g. int, ptr, array...etc) + * bits 29-30: unused * bit 31: kind_flag, currently used by * struct, union and fwd */ @@ -452,6 +453,18 @@ map definition. * ``offset``: the in-section offset of the variable * ``size``: the size of the variable in bytes +2.2.16 BTF_KIND_FLOAT +~~~~~~~~~~~~~~~~~~~~~ + +``struct btf_type`` encoding requirement: + * ``name_off``: any valid offset + * ``info.kind_flag``: 0 + * ``info.kind``: BTF_KIND_FLOAT + * ``info.vlen``: 0 + * ``size``: the size of the float type in bytes. + +No additional type data follow ``btf_type``. + 3. BTF Kernel API *****************
Also document the expansion of the kind bitfield. Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com> --- Documentation/bpf/btf.rst | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-)