summaryrefslogtreecommitdiffstats
path: root/drivers/hid/bpf
diff options
context:
space:
mode:
authorBenjamin Tissoires <bentiss@kernel.org>2024-06-08 11:01:14 +0200
committerBenjamin Tissoires <bentiss@kernel.org>2024-06-14 11:13:22 +0200
commit99b40bf8053fa261d368ef78848961c04aa93c74 (patch)
tree5e6b5554dc545c8432c6e8aab223a6cfdc16c966 /drivers/hid/bpf
parentHID: rename struct hid_bpf_ops into hid_ops (diff)
downloadlinux-99b40bf8053fa261d368ef78848961c04aa93c74.tar.xz
linux-99b40bf8053fa261d368ef78848961c04aa93c74.zip
HID: bpf: add hid_get/put_device() helpers
no code change, but this way we reduce code duplication and we can export it later. Link: https://lore.kernel.org/r/20240608-hid_bpf_struct_ops-v3-2-6ac6ade58329@kernel.org Signed-off-by: Benjamin Tissoires <bentiss@kernel.org>
Diffstat (limited to 'drivers/hid/bpf')
-rw-r--r--drivers/hid/bpf/hid_bpf_dispatch.c47
1 files changed, 27 insertions, 20 deletions
diff --git a/drivers/hid/bpf/hid_bpf_dispatch.c b/drivers/hid/bpf/hid_bpf_dispatch.c
index 55c9f82fdef0..c8bb79ce2354 100644
--- a/drivers/hid/bpf/hid_bpf_dispatch.c
+++ b/drivers/hid/bpf/hid_bpf_dispatch.c
@@ -150,6 +150,25 @@ static int device_match_id(struct device *dev, const void *id)
return hdev->id == *(int *)id;
}
+static struct hid_device *hid_get_device(unsigned int hid_id)
+{
+ struct device *dev;
+
+ if (!hid_ops)
+ return ERR_PTR(-EINVAL);
+
+ dev = bus_find_device(hid_ops->bus_type, NULL, &hid_id, device_match_id);
+ if (!dev)
+ return ERR_PTR(-EINVAL);
+
+ return to_hid_device(dev);
+}
+
+static void hid_put_device(struct hid_device *hid)
+{
+ put_device(&hid->dev);
+}
+
static int __hid_bpf_allocate_data(struct hid_device *hdev, u8 **data, u32 *size)
{
u8 *alloc_data;
@@ -281,20 +300,14 @@ hid_bpf_attach_prog(unsigned int hid_id, int prog_fd, __u32 flags)
{
struct hid_device *hdev;
struct bpf_prog *prog;
- struct device *dev;
int err, fd;
- if (!hid_ops)
- return -EINVAL;
-
if ((flags & ~HID_BPF_FLAG_MASK))
return -EINVAL;
- dev = bus_find_device(hid_ops->bus_type, NULL, &hid_id, device_match_id);
- if (!dev)
- return -EINVAL;
-
- hdev = to_hid_device(dev);
+ hdev = hid_get_device(hid_id);
+ if (IS_ERR(hdev))
+ return PTR_ERR(hdev);
/*
* take a ref on the prog itself, it will be released
@@ -317,7 +330,7 @@ hid_bpf_attach_prog(unsigned int hid_id, int prog_fd, __u32 flags)
out_prog_put:
bpf_prog_put(prog);
out_dev_put:
- put_device(dev);
+ hid_put_device(hdev);
return err;
}
@@ -333,20 +346,14 @@ hid_bpf_allocate_context(unsigned int hid_id)
{
struct hid_device *hdev;
struct hid_bpf_ctx_kern *ctx_kern = NULL;
- struct device *dev;
-
- if (!hid_ops)
- return NULL;
- dev = bus_find_device(hid_ops->bus_type, NULL, &hid_id, device_match_id);
- if (!dev)
+ hdev = hid_get_device(hid_id);
+ if (IS_ERR(hdev))
return NULL;
- hdev = to_hid_device(dev);
-
ctx_kern = kzalloc(sizeof(*ctx_kern), GFP_KERNEL);
if (!ctx_kern) {
- put_device(dev);
+ hid_put_device(hdev);
return NULL;
}
@@ -373,7 +380,7 @@ hid_bpf_release_context(struct hid_bpf_ctx *ctx)
kfree(ctx_kern);
/* get_device() is called by bus_find_device() */
- put_device(&hid->dev);
+ hid_put_device(hid);
}
static int