From: Andrew Melnychenko <andrew@daynix.com>
To: jasowang@redhat.com, mst@redhat.com, armbru@redhat.com,
eblake@redhat.com, qemu-devel@nongnu.org, berrange@redhat.com
Cc: yuri.benditovich@daynix.com, yan@daynix.com, akihiko.odaki@daynix.com
Subject: [PATCH v8 2/5] ebpf: Added eBPF initialization by fds.
Date: Thu, 25 Jan 2024 15:06:51 +0200 [thread overview]
Message-ID: <20240125130656.425607-3-andrew@daynix.com> (raw)
In-Reply-To: <20240125130656.425607-1-andrew@daynix.com>
It allows using file descriptors of eBPF provided
outside of QEMU.
QEMU may be run without capabilities for eBPF and run
RSS program provided by management tool(g.e. libvirt).
Signed-off-by: Andrew Melnychenko <andrew@daynix.com>
---
| 9 +++++++--
| 27 +++++++++++++++++++++++++++
| 5 +++++
3 files changed, 39 insertions(+), 2 deletions(-)
--git a/ebpf/ebpf_rss-stub.c b/ebpf/ebpf_rss-stub.c
index e71e229190..1c158b6e06 100644
--- a/ebpf/ebpf_rss-stub.c
+++ b/ebpf/ebpf_rss-stub.c
@@ -6,8 +6,7 @@
* Authors:
* Yuri Benditovich <yuri.benditovich@daynix.com>
*
- * This work is licensed under the terms of the GNU GPL, version 2. See
- * the COPYING file in the top-level directory.
+ * SPDX-License-Identifier: GPL-2.0-or-later
*/
#include "qemu/osdep.h"
@@ -28,6 +27,12 @@ bool ebpf_rss_load(struct EBPFRSSContext *ctx)
return false;
}
+bool ebpf_rss_load_fds(struct EBPFRSSContext *ctx, int program_fd,
+ int config_fd, int toeplitz_fd, int table_fd)
+{
+ return false;
+}
+
bool ebpf_rss_set_all(struct EBPFRSSContext *ctx, struct EBPFRSSConfig *config,
uint16_t *indirections_table, uint8_t *toeplitz_key)
{
--git a/ebpf/ebpf_rss.c b/ebpf/ebpf_rss.c
index c6e10265a7..20c44f2baa 100644
--- a/ebpf/ebpf_rss.c
+++ b/ebpf/ebpf_rss.c
@@ -145,6 +145,33 @@ error:
return false;
}
+bool ebpf_rss_load_fds(struct EBPFRSSContext *ctx, int program_fd,
+ int config_fd, int toeplitz_fd, int table_fd)
+{
+ if (ebpf_rss_is_loaded(ctx)) {
+ return false;
+ }
+
+ if (program_fd < 0 || config_fd < 0 || toeplitz_fd < 0 || table_fd < 0) {
+ return false;
+ }
+
+ ctx->program_fd = program_fd;
+ ctx->map_configuration = config_fd;
+ ctx->map_toeplitz_key = toeplitz_fd;
+ ctx->map_indirections_table = table_fd;
+
+ if (!ebpf_rss_mmap(ctx)) {
+ ctx->program_fd = -1;
+ ctx->map_configuration = -1;
+ ctx->map_toeplitz_key = -1;
+ ctx->map_indirections_table = -1;
+ return false;
+ }
+
+ return true;
+}
+
static bool ebpf_rss_set_config(struct EBPFRSSContext *ctx,
struct EBPFRSSConfig *config)
{
--git a/ebpf/ebpf_rss.h b/ebpf/ebpf_rss.h
index 404cf53613..39646aff6f 100644
--- a/ebpf/ebpf_rss.h
+++ b/ebpf/ebpf_rss.h
@@ -13,6 +13,8 @@
#ifndef QEMU_EBPF_RSS_H
#define QEMU_EBPF_RSS_H
+#define EBPF_RSS_MAX_FDS 4
+
struct EBPFRSSContext {
void *obj;
int program_fd;
@@ -40,6 +42,9 @@ bool ebpf_rss_is_loaded(struct EBPFRSSContext *ctx);
bool ebpf_rss_load(struct EBPFRSSContext *ctx);
+bool ebpf_rss_load_fds(struct EBPFRSSContext *ctx, int program_fd,
+ int config_fd, int toeplitz_fd, int table_fd);
+
bool ebpf_rss_set_all(struct EBPFRSSContext *ctx, struct EBPFRSSConfig *config,
uint16_t *indirections_table, uint8_t *toeplitz_key);
--
2.43.0
next prev parent reply other threads:[~2024-01-25 13:08 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-01-25 13:06 [PATCH v8 0/5] eBPF RSS through QMP support Andrew Melnychenko
2024-01-25 13:06 ` [PATCH v8 1/5] ebpf: Added eBPF map update through mmap Andrew Melnychenko
2024-01-30 10:37 ` Daniel P. Berrangé
2024-02-05 16:54 ` Andrew Melnichenko
2024-01-25 13:06 ` Andrew Melnychenko [this message]
2024-01-25 13:06 ` [PATCH v8 3/5] virtio-net: Added property to load eBPF RSS with fds Andrew Melnychenko
2024-01-25 13:06 ` [PATCH v8 4/5] qmp: Added new command to retrieve eBPF blob Andrew Melnychenko
2024-01-25 13:06 ` [PATCH v8 5/5] ebpf: Updated eBPF program and skeleton Andrew Melnychenko
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=20240125130656.425607-3-andrew@daynix.com \
--to=andrew@daynix.com \
--cc=akihiko.odaki@daynix.com \
--cc=armbru@redhat.com \
--cc=berrange@redhat.com \
--cc=eblake@redhat.com \
--cc=jasowang@redhat.com \
--cc=mst@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=yan@daynix.com \
--cc=yuri.benditovich@daynix.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).