All of lore.kernel.org
 help / color / mirror / Atom feed
From: Benjamin Tissoires <benjamin.tissoires@redhat.com>
To: Greg KH <gregkh@linuxfoundation.org>
Cc: Jiri Kosina <jikos@kernel.org>,
	Alexei Starovoitov <ast@kernel.org>,
	Daniel Borkmann <daniel@iogearbox.net>,
	Andrii Nakryiko <andrii@kernel.org>,
	Martin KaFai Lau <kafai@fb.com>, Song Liu <songliubraving@fb.com>,
	Yonghong Song <yhs@fb.com>,
	Kumar Kartikeya Dwivedi <memxor@gmail.com>,
	John Fastabend <john.fastabend@gmail.com>,
	KP Singh <kpsingh@kernel.org>, Shuah Khan <shuah@kernel.org>,
	Dave Marchevsky <davemarchevsky@fb.com>,
	Joe Stringer <joe@cilium.io>, Jonathan Corbet <corbet@lwn.net>,
	Tero Kristo <tero.kristo@linux.intel.com>,
	linux-kernel@vger.kernel.org, linux-input@vger.kernel.org,
	netdev@vger.kernel.org, bpf@vger.kernel.org,
	linux-kselftest@vger.kernel.org, linux-doc@vger.kernel.org
Subject: Re: [PATCH bpf-next v7 13/24] HID: initial BPF implementation
Date: Wed, 24 Aug 2022 11:48:49 +0200	[thread overview]
Message-ID: <f4624a16-ee0b-8e8e-a390-349d38f229b4@redhat.com> (raw)
In-Reply-To: <YuKbCCOAtSvUlI3z@kroah.com>



On 7/28/22 16:19, Greg KH wrote:
> On Thu, Jul 21, 2022 at 05:36:14PM +0200, Benjamin Tissoires wrote:
>> --- /dev/null
>> +++ b/include/linux/hid_bpf.h
>> @@ -0,0 +1,102 @@
>> +/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
> 
> This is not a uapi .h file, so the "WITH Linux-syscall-note" should not
> be here, right?

thanks, dropping this syscall note from the series.

> 
> 
>> +
>> +#ifndef __HID_BPF_H
>> +#define __HID_BPF_H
>> +
>> +#include <linux/spinlock.h>
>> +#include <uapi/linux/hid.h>
>> +#include <uapi/linux/hid_bpf.h>
>> +
>> +struct hid_device;
>> +
>> +/*
>> + * The following is the HID BPF API.
>> + *
>> + * It should be treated as UAPI, so extra care is required
>> + * when making change to this file.
> 
> So is this uapi?  If so, shouldn't it go into a uapi include directory
> so we know this and properly track it and maintain it that way?

IMO it's a grey area. It is not "uapi" because it doesn't export 
anything that userspace can use. A userspace program can not include 
that and use it in other words.

So strictly speaking, it's a normal part of a kernel header file, 
because it's a description of what other kernel users (though here, eBPF 
programs) can use.

But I really want that part of the API to be considered as "stable" and 
give some guarantees to the users that I won't change it at every 
release. Thus the "uapi-like".

> 
>> + */
>> +
>> +/**
>> + * struct hid_bpf_ctx - User accessible data for all HID programs
>> + *
>> + * ``data`` is not directly accessible from the context. We need to issue
>> + * a call to ``hid_bpf_get_data()`` in order to get a pointer to that field.
>> + *
>> + * All of these fields are currently read-only.
>> + *
>> + * @index: program index in the jump table. No special meaning (a smaller index
>> + *         doesn't mean the program will be executed before another program with
>> + *         a bigger index).
>> + * @hid: the ``struct hid_device`` representing the device itself
>> + * @report_type: used for ``hid_bpf_device_event()``
>> + * @size: Valid data in the data field.
>> + *
>> + *        Programs can get the available valid size in data by fetching this field.
>> + */
>> +struct hid_bpf_ctx {
>> +	__u32 index;
>> +	const struct hid_device *hid;
>> +	enum hid_report_type report_type;
>> +	__s32 size;
>> +};
>> +
>> +/* Following functions are tracepoints that BPF programs can attach to */
>> +int hid_bpf_device_event(struct hid_bpf_ctx *ctx);
>> +
>> +/* Following functions are kfunc that we export to BPF programs */
>> +/* only available in tracing */
>> +__u8 *hid_bpf_get_data(struct hid_bpf_ctx *ctx, unsigned int offset, const size_t __sz);
>> +
>> +/* only available in syscall */
>> +int hid_bpf_attach_prog(unsigned int hid_id, int prog_fd, __u32 flags);
>> +
>> +/*
>> + * Below is HID internal
>> + */
>> +
>> +/* internal function to call eBPF programs, not to be used by anybody */
>> +int __hid_bpf_tail_call(struct hid_bpf_ctx *ctx);
>> +
>> +#define HID_BPF_MAX_PROGS_PER_DEV 64
>> +#define HID_BPF_FLAG_MASK (((HID_BPF_FLAG_MAX - 1) << 1) - 1)
>> +
>> +/* types of HID programs to attach to */
>> +enum hid_bpf_prog_type {
>> +	HID_BPF_PROG_TYPE_UNDEF = -1,
>> +	HID_BPF_PROG_TYPE_DEVICE_EVENT,			/* an event is emitted from the device */
>> +	HID_BPF_PROG_TYPE_MAX,
>> +};
>> +
>> +struct hid_bpf_ops {
>> +	struct module *owner;
>> +	struct bus_type *bus_type;
>> +};
>> +
>> +extern struct hid_bpf_ops *hid_bpf_ops;
>> +
>> +struct hid_bpf_prog_list {
>> +	u16 prog_idx[HID_BPF_MAX_PROGS_PER_DEV];
>> +	u8 prog_cnt;
>> +};
>> +
>> +/* stored in each device */
>> +struct hid_bpf {
>> +	struct hid_bpf_prog_list __rcu *progs[HID_BPF_PROG_TYPE_MAX];	/* attached BPF progs */
>> +	bool destroyed;			/* prevents the assignment of any progs */
>> +
>> +	spinlock_t progs_lock;		/* protects RCU update of progs */
>> +};
>> +
>> +#ifdef CONFIG_HID_BPF
>> +int dispatch_hid_bpf_device_event(struct hid_device *hid, enum hid_report_type type, u8 *data,
>> +				  u32 size, int interrupt);
>> +void hid_bpf_destroy_device(struct hid_device *hid);
>> +void hid_bpf_device_init(struct hid_device *hid);
>> +#else /* CONFIG_HID_BPF */
>> +static inline int dispatch_hid_bpf_device_event(struct hid_device *hid, enum hid_report_type type, u8 *data,
>> +						u32 size, int interrupt) { return 0; }
>> +static inline void hid_bpf_destroy_device(struct hid_device *hid) {}
>> +static inline void hid_bpf_device_init(struct hid_device *hid) {}
>> +#endif /* CONFIG_HID_BPF */
>> +
>> +#endif /* __HID_BPF_H */
>> diff --git a/include/uapi/linux/hid_bpf.h b/include/uapi/linux/hid_bpf.h
>> new file mode 100644
>> index 000000000000..ba8caf9b60ee
>> --- /dev/null
>> +++ b/include/uapi/linux/hid_bpf.h
>> @@ -0,0 +1,25 @@
>> +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
> 
> This is fine, it is in include/uapi/
> 
> Other than those minor comments, this all looks good to me!
> 
> Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> 

Great!
And thanks a lot for the other reviews.

I finally managed to get some time to work on it after some time off and 
urgent sh**t happening, so I'll send a new version of the series today.

Cheers,
Benjamin


  reply	other threads:[~2022-08-24  9:49 UTC|newest]

Thread overview: 45+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-07-21 15:36 [PATCH bpf-next v7 00/24] Introduce eBPF support for HID devices Benjamin Tissoires
2022-07-21 15:36 ` [PATCH bpf-next v7 01/24] selftests/bpf: fix config for CLS_BPF Benjamin Tissoires
2022-07-21 15:36 ` [PATCH bpf-next v7 02/24] bpf/verifier: allow kfunc to read user provided context Benjamin Tissoires
2022-07-21 20:15   ` Kumar Kartikeya Dwivedi
2022-07-22  8:43     ` Benjamin Tissoires
2022-07-22  8:45   ` [PATCH bpf-next v8 " Benjamin Tissoires
2022-07-22 16:16     ` Alexei Starovoitov
2022-07-25 16:36       ` Benjamin Tissoires
2022-08-24  9:57         ` Benjamin Tissoires
2022-07-21 15:36 ` [PATCH bpf-next v7 03/24] bpf/verifier: do not clear meta in check_mem_size Benjamin Tissoires
2022-07-21 15:36 ` [PATCH bpf-next v7 04/24] selftests/bpf: add test for accessing ctx from syscall program type Benjamin Tissoires
2022-07-21 15:36 ` [PATCH bpf-next v7 05/24] bpf/verifier: allow kfunc to return an allocated mem Benjamin Tissoires
2022-07-21 21:05   ` Kumar Kartikeya Dwivedi
2022-07-21 15:36 ` [PATCH bpf-next v7 06/24] selftests/bpf: Add tests for kfunc returning a memory pointer Benjamin Tissoires
2022-07-21 15:36 ` [PATCH bpf-next v7 07/24] bpf: prepare for more bpf syscall to be used from kernel and user space Benjamin Tissoires
2022-07-21 15:36 ` [PATCH bpf-next v7 08/24] libbpf: add map_get_fd_by_id and map_delete_elem in light skeleton Benjamin Tissoires
2022-07-21 15:36 ` [PATCH bpf-next v7 09/24] HID: core: store the unique system identifier in hid_device Benjamin Tissoires
2022-07-21 15:36 ` [PATCH bpf-next v7 10/24] HID: export hid_report_type to uapi Benjamin Tissoires
2022-07-21 15:36 ` [PATCH bpf-next v7 11/24] HID: convert defines of HID class requests into a proper enum Benjamin Tissoires
2022-07-21 15:36 ` [PATCH bpf-next v7 12/24] HID: Kconfig: split HID support and hid-core compilation Benjamin Tissoires
2022-07-28 14:14   ` Greg KH
2022-07-21 15:36 ` [PATCH bpf-next v7 13/24] HID: initial BPF implementation Benjamin Tissoires
2022-07-28 14:15   ` Greg KH
2022-08-24  9:41     ` Benjamin Tissoires
2022-07-28 14:19   ` Greg KH
2022-08-24  9:48     ` Benjamin Tissoires [this message]
2022-07-21 15:36 ` [PATCH bpf-next v7 14/24] selftests/bpf: add tests for the HID-bpf initial implementation Benjamin Tissoires
2022-07-21 15:36 ` [PATCH bpf-next v7 15/24] HID: bpf: allocate data memory for device_event BPF programs Benjamin Tissoires
2022-07-28 15:10   ` Greg KH
2022-07-21 15:36 ` [PATCH bpf-next v7 16/24] selftests/bpf/hid: add test to change the report size Benjamin Tissoires
2022-07-21 15:36 ` [PATCH bpf-next v7 17/24] HID: bpf: introduce hid_hw_request() Benjamin Tissoires
2022-07-28 15:10   ` Greg KH
2022-07-21 15:36 ` [PATCH bpf-next v7 18/24] selftests/bpf: add tests for bpf_hid_hw_request Benjamin Tissoires
2022-07-21 15:36 ` [PATCH bpf-next v7 19/24] HID: bpf: allow to change the report descriptor Benjamin Tissoires
2022-07-28 15:10   ` Greg KH
2022-07-21 15:36 ` [PATCH bpf-next v7 20/24] selftests/bpf: add report descriptor fixup tests Benjamin Tissoires
2022-07-21 15:36 ` [PATCH bpf-next v7 21/24] selftests/bpf: Add a test for BPF_F_INSERT_HEAD Benjamin Tissoires
2022-07-21 15:36 ` [PATCH bpf-next v7 22/24] samples/bpf: add new hid_mouse example Benjamin Tissoires
2022-07-28 15:13   ` Greg KH
2022-07-21 15:36 ` [PATCH bpf-next v7 23/24] HID: bpf: add Surface Dial example Benjamin Tissoires
2022-07-28 15:12   ` Greg KH
2022-07-21 15:36 ` [PATCH bpf-next v7 24/24] Documentation: add HID-BPF docs Benjamin Tissoires
2022-08-25  2:52   ` Bagas Sanjaya
2022-08-30 13:30     ` Benjamin Tissoires
2022-08-03  7:41 ` [PATCH bpf-next v7 00/24] Introduce eBPF support for HID devices Tero Kristo

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=f4624a16-ee0b-8e8e-a390-349d38f229b4@redhat.com \
    --to=benjamin.tissoires@redhat.com \
    --cc=andrii@kernel.org \
    --cc=ast@kernel.org \
    --cc=bpf@vger.kernel.org \
    --cc=corbet@lwn.net \
    --cc=daniel@iogearbox.net \
    --cc=davemarchevsky@fb.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=jikos@kernel.org \
    --cc=joe@cilium.io \
    --cc=john.fastabend@gmail.com \
    --cc=kafai@fb.com \
    --cc=kpsingh@kernel.org \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-input@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-kselftest@vger.kernel.org \
    --cc=memxor@gmail.com \
    --cc=netdev@vger.kernel.org \
    --cc=shuah@kernel.org \
    --cc=songliubraving@fb.com \
    --cc=tero.kristo@linux.intel.com \
    --cc=yhs@fb.com \
    /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.