mbox series

[hid,v11,00/14] Introduce eBPF support for HID devices

Message ID 20221025093458.457089-1-benjamin.tissoires@redhat.com
Headers show
Series Introduce eBPF support for HID devices | expand

Message

Benjamin Tissoires Oct. 25, 2022, 9:34 a.m. UTC
Hi,

and here comes the v11 of the HID-BPF series.

Again, for a full explanation of HID-BPF, please refer to the last patch
in this series (14/14).

Now that the bpf-core changes are all merged in v6.1, it is
time to have that series entirely relying on HID, so it can get
merged into the HID tree.

Compared to v10, the most notable change is in the selftests and the
samples: they are now namespaced into hid, not bpf.

This means that HID-BPF has no more conflicts with the bpf tree.

One other interesting change is in patch 4/14. I managed to reduce
the scope of the embedded bpf programs, by tricking the refcount.
I am planning on submitting an RFC for embedding those changes in
bpf core (a map that doesn't increment refcount and a cleanup mechanism)
but this can come as a later improvement.
This new kind of maps and mechanisms might also be useful for other
subsystems.

Cheers,
Benjamin

Benjamin Tissoires (14):
  HID: Kconfig: split HID support and hid-core compilation
  HID: initial BPF implementation
  selftests: add tests for the HID-bpf initial implementation
  HID: bpf jmp table: simplify the logic of cleaning up programs
  HID: bpf: allocate data memory for device_event BPF programs
  selftests/hid: add test to change the report size
  HID: bpf: introduce hid_hw_request()
  selftests/hid: add tests for bpf_hid_hw_request
  HID: bpf: allow to change the report descriptor
  selftests/hid: add report descriptor fixup tests
  selftests/hid: Add a test for BPF_F_INSERT_HEAD
  samples/hid: add new hid BPF example
  samples/hid: add Surface Dial example
  Documentation: add HID-BPF docs

 Documentation/hid/hid-bpf.rst                 | 513 +++++++++++
 Documentation/hid/index.rst                   |   1 +
 MAINTAINERS                                   |   3 +
 drivers/Makefile                              |   2 +-
 drivers/hid/Kconfig                           |  20 +-
 drivers/hid/Makefile                          |   2 +
 drivers/hid/bpf/Kconfig                       |  17 +
 drivers/hid/bpf/Makefile                      |  11 +
 drivers/hid/bpf/entrypoints/Makefile          |  93 ++
 drivers/hid/bpf/entrypoints/README            |   4 +
 drivers/hid/bpf/entrypoints/entrypoints.bpf.c |  34 +
 .../hid/bpf/entrypoints/entrypoints.lskel.h   | 368 ++++++++
 drivers/hid/bpf/hid_bpf_dispatch.c            | 526 +++++++++++
 drivers/hid/bpf/hid_bpf_dispatch.h            |  28 +
 drivers/hid/bpf/hid_bpf_jmp_table.c           | 572 ++++++++++++
 drivers/hid/hid-core.c                        |  32 +-
 include/linux/hid.h                           |   5 +
 include/linux/hid_bpf.h                       | 148 +++
 include/uapi/linux/hid_bpf.h                  |  25 +
 samples/hid/.gitignore                        |   8 +
 samples/hid/Makefile                          | 246 +++++
 samples/hid/Makefile.target                   |  75 ++
 samples/hid/hid_mouse.bpf.c                   | 134 +++
 samples/hid/hid_mouse.c                       | 160 ++++
 samples/hid/hid_surface_dial.bpf.c            | 161 ++++
 samples/hid/hid_surface_dial.c                | 231 +++++
 tools/include/uapi/linux/hid.h                |  62 ++
 tools/include/uapi/linux/hid_bpf.h            |  25 +
 tools/testing/selftests/Makefile              |   1 +
 tools/testing/selftests/hid/.gitignore        |   4 +
 tools/testing/selftests/hid/Makefile          | 242 +++++
 tools/testing/selftests/hid/config            |  20 +
 tools/testing/selftests/hid/hid_bpf.c         | 846 ++++++++++++++++++
 tools/testing/selftests/hid/progs/hid.c       | 206 +++++
 34 files changed, 4815 insertions(+), 10 deletions(-)
 create mode 100644 Documentation/hid/hid-bpf.rst
 create mode 100644 drivers/hid/bpf/Kconfig
 create mode 100644 drivers/hid/bpf/Makefile
 create mode 100644 drivers/hid/bpf/entrypoints/Makefile
 create mode 100644 drivers/hid/bpf/entrypoints/README
 create mode 100644 drivers/hid/bpf/entrypoints/entrypoints.bpf.c
 create mode 100644 drivers/hid/bpf/entrypoints/entrypoints.lskel.h
 create mode 100644 drivers/hid/bpf/hid_bpf_dispatch.c
 create mode 100644 drivers/hid/bpf/hid_bpf_dispatch.h
 create mode 100644 drivers/hid/bpf/hid_bpf_jmp_table.c
 create mode 100644 include/linux/hid_bpf.h
 create mode 100644 include/uapi/linux/hid_bpf.h
 create mode 100644 samples/hid/.gitignore
 create mode 100644 samples/hid/Makefile
 create mode 100644 samples/hid/Makefile.target
 create mode 100644 samples/hid/hid_mouse.bpf.c
 create mode 100644 samples/hid/hid_mouse.c
 create mode 100644 samples/hid/hid_surface_dial.bpf.c
 create mode 100644 samples/hid/hid_surface_dial.c
 create mode 100644 tools/include/uapi/linux/hid.h
 create mode 100644 tools/include/uapi/linux/hid_bpf.h
 create mode 100644 tools/testing/selftests/hid/.gitignore
 create mode 100644 tools/testing/selftests/hid/Makefile
 create mode 100644 tools/testing/selftests/hid/config
 create mode 100644 tools/testing/selftests/hid/hid_bpf.c
 create mode 100644 tools/testing/selftests/hid/progs/hid.c

Comments

Tero Kristo Nov. 4, 2022, 11:41 a.m. UTC | #1
Hi Benjamin,

Tested this on top of 6.1-rc1 against my HID-USI work, appears to be 
good. Also tried out the HID selftests, and they pass, so for the whole 
series:

Tested-by: Tero Kristo <tero.kristo@linux.intel.com>

On 25/10/2022 12:34, Benjamin Tissoires wrote:
> Hi,
>
> and here comes the v11 of the HID-BPF series.
>
> Again, for a full explanation of HID-BPF, please refer to the last patch
> in this series (14/14).
>
> Now that the bpf-core changes are all merged in v6.1, it is
> time to have that series entirely relying on HID, so it can get
> merged into the HID tree.
>
> Compared to v10, the most notable change is in the selftests and the
> samples: they are now namespaced into hid, not bpf.
>
> This means that HID-BPF has no more conflicts with the bpf tree.
>
> One other interesting change is in patch 4/14. I managed to reduce
> the scope of the embedded bpf programs, by tricking the refcount.
> I am planning on submitting an RFC for embedding those changes in
> bpf core (a map that doesn't increment refcount and a cleanup mechanism)
> but this can come as a later improvement.
> This new kind of maps and mechanisms might also be useful for other
> subsystems.
>
> Cheers,
> Benjamin
>
> Benjamin Tissoires (14):
>    HID: Kconfig: split HID support and hid-core compilation
>    HID: initial BPF implementation
>    selftests: add tests for the HID-bpf initial implementation
>    HID: bpf jmp table: simplify the logic of cleaning up programs
>    HID: bpf: allocate data memory for device_event BPF programs
>    selftests/hid: add test to change the report size
>    HID: bpf: introduce hid_hw_request()
>    selftests/hid: add tests for bpf_hid_hw_request
>    HID: bpf: allow to change the report descriptor
>    selftests/hid: add report descriptor fixup tests
>    selftests/hid: Add a test for BPF_F_INSERT_HEAD
>    samples/hid: add new hid BPF example
>    samples/hid: add Surface Dial example
>    Documentation: add HID-BPF docs
>
>   Documentation/hid/hid-bpf.rst                 | 513 +++++++++++
>   Documentation/hid/index.rst                   |   1 +
>   MAINTAINERS                                   |   3 +
>   drivers/Makefile                              |   2 +-
>   drivers/hid/Kconfig                           |  20 +-
>   drivers/hid/Makefile                          |   2 +
>   drivers/hid/bpf/Kconfig                       |  17 +
>   drivers/hid/bpf/Makefile                      |  11 +
>   drivers/hid/bpf/entrypoints/Makefile          |  93 ++
>   drivers/hid/bpf/entrypoints/README            |   4 +
>   drivers/hid/bpf/entrypoints/entrypoints.bpf.c |  34 +
>   .../hid/bpf/entrypoints/entrypoints.lskel.h   | 368 ++++++++
>   drivers/hid/bpf/hid_bpf_dispatch.c            | 526 +++++++++++
>   drivers/hid/bpf/hid_bpf_dispatch.h            |  28 +
>   drivers/hid/bpf/hid_bpf_jmp_table.c           | 572 ++++++++++++
>   drivers/hid/hid-core.c                        |  32 +-
>   include/linux/hid.h                           |   5 +
>   include/linux/hid_bpf.h                       | 148 +++
>   include/uapi/linux/hid_bpf.h                  |  25 +
>   samples/hid/.gitignore                        |   8 +
>   samples/hid/Makefile                          | 246 +++++
>   samples/hid/Makefile.target                   |  75 ++
>   samples/hid/hid_mouse.bpf.c                   | 134 +++
>   samples/hid/hid_mouse.c                       | 160 ++++
>   samples/hid/hid_surface_dial.bpf.c            | 161 ++++
>   samples/hid/hid_surface_dial.c                | 231 +++++
>   tools/include/uapi/linux/hid.h                |  62 ++
>   tools/include/uapi/linux/hid_bpf.h            |  25 +
>   tools/testing/selftests/Makefile              |   1 +
>   tools/testing/selftests/hid/.gitignore        |   4 +
>   tools/testing/selftests/hid/Makefile          | 242 +++++
>   tools/testing/selftests/hid/config            |  20 +
>   tools/testing/selftests/hid/hid_bpf.c         | 846 ++++++++++++++++++
>   tools/testing/selftests/hid/progs/hid.c       | 206 +++++
>   34 files changed, 4815 insertions(+), 10 deletions(-)
>   create mode 100644 Documentation/hid/hid-bpf.rst
>   create mode 100644 drivers/hid/bpf/Kconfig
>   create mode 100644 drivers/hid/bpf/Makefile
>   create mode 100644 drivers/hid/bpf/entrypoints/Makefile
>   create mode 100644 drivers/hid/bpf/entrypoints/README
>   create mode 100644 drivers/hid/bpf/entrypoints/entrypoints.bpf.c
>   create mode 100644 drivers/hid/bpf/entrypoints/entrypoints.lskel.h
>   create mode 100644 drivers/hid/bpf/hid_bpf_dispatch.c
>   create mode 100644 drivers/hid/bpf/hid_bpf_dispatch.h
>   create mode 100644 drivers/hid/bpf/hid_bpf_jmp_table.c
>   create mode 100644 include/linux/hid_bpf.h
>   create mode 100644 include/uapi/linux/hid_bpf.h
>   create mode 100644 samples/hid/.gitignore
>   create mode 100644 samples/hid/Makefile
>   create mode 100644 samples/hid/Makefile.target
>   create mode 100644 samples/hid/hid_mouse.bpf.c
>   create mode 100644 samples/hid/hid_mouse.c
>   create mode 100644 samples/hid/hid_surface_dial.bpf.c
>   create mode 100644 samples/hid/hid_surface_dial.c
>   create mode 100644 tools/include/uapi/linux/hid.h
>   create mode 100644 tools/include/uapi/linux/hid_bpf.h
>   create mode 100644 tools/testing/selftests/hid/.gitignore
>   create mode 100644 tools/testing/selftests/hid/Makefile
>   create mode 100644 tools/testing/selftests/hid/config
>   create mode 100644 tools/testing/selftests/hid/hid_bpf.c
>   create mode 100644 tools/testing/selftests/hid/progs/hid.c
>