From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id AE8BBC761AF for ; Thu, 30 Mar 2023 08:35:20 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1phnkG-00074d-L9; Thu, 30 Mar 2023 04:34:56 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1phnkE-000749-LQ for qemu-devel@nongnu.org; Thu, 30 Mar 2023 04:34:54 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1phnkC-0006YH-KE for qemu-devel@nongnu.org; Thu, 30 Mar 2023 04:34:54 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1680165291; h=from:from:reply-to:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=RsObm5iXRr/Ud59pSvhXeUcKBruD/5TUbE+ByEjHTQY=; b=JH+M033jDN0nCaWDQjDu+HypnAPDhcXlYUZzlKFCdWGagX8ShXT9Dd8rSZasrLnlR8xUkS 5YOhfl3jaI9IA7JKD/Gd+JR8hOLfZZKbA2C8AEPNw4Z0NxgXXFBXoGreGJnL1Q9YcEr9Vd 6hDZhfhJ0RhzxjQ8ORQWNHGSee/KVu4= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-114-85mepGLUPiCStAM22kSQUA-1; Thu, 30 Mar 2023 04:34:47 -0400 X-MC-Unique: 85mepGLUPiCStAM22kSQUA-1 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 68588801779; Thu, 30 Mar 2023 08:34:47 +0000 (UTC) Received: from redhat.com (unknown [10.33.36.64]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 0AE472027040; Thu, 30 Mar 2023 08:34:44 +0000 (UTC) Date: Thu, 30 Mar 2023 09:34:42 +0100 From: Daniel =?utf-8?B?UC4gQmVycmFuZ8Op?= To: Jason Wang Cc: Andrew Melnychenko , mst@redhat.com, pbonzini@redhat.com, marcandre.lureau@redhat.com, thuth@redhat.com, philmd@linaro.org, armbru@redhat.com, eblake@redhat.com, qemu-devel@nongnu.org, toke@redhat.com, mprivozn@redhat.com, yuri.benditovich@daynix.com, yan@daynix.com Subject: Re: [RFC PATCH 3/5] ebpf: Added declaration/initialization routines. Message-ID: References: <20230330001522.120774-1-andrew@daynix.com> <20230330001522.120774-4-andrew@daynix.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: User-Agent: Mutt/2.2.9 (2022-11-12) X-Scanned-By: MIMEDefang 3.1 on 10.11.54.4 Received-SPF: pass client-ip=170.10.133.124; envelope-from=berrange@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Daniel =?utf-8?B?UC4gQmVycmFuZ8Op?= Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org On Thu, Mar 30, 2023 at 02:54:32PM +0800, Jason Wang wrote: > On Thu, Mar 30, 2023 at 8:33 AM Andrew Melnychenko wrote: > > > > Now, the binary objects may be retrieved by id/name. > > It would require for future qmp commands that may require specific > > eBPF blob. > > > > Signed-off-by: Andrew Melnychenko > > --- > > ebpf/ebpf.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ > > ebpf/ebpf.h | 25 +++++++++++++++++++++++++ > > ebpf/ebpf_rss.c | 4 ++++ > > ebpf/meson.build | 1 + > > 4 files changed, 78 insertions(+) > > create mode 100644 ebpf/ebpf.c > > create mode 100644 ebpf/ebpf.h > > > > diff --git a/ebpf/ebpf.c b/ebpf/ebpf.c > > new file mode 100644 > > index 0000000000..86320d72f5 > > --- /dev/null > > +++ b/ebpf/ebpf.c > > @@ -0,0 +1,48 @@ > > +/* > > + * QEMU eBPF binary declaration routine. > > + * > > + * Developed by Daynix Computing LTD (http://www.daynix.com) > > + * > > + * Authors: > > + * Andrew Melnychenko > > + * > > + * This work is licensed under the terms of the GNU GPL, version 2 or > > + * later. See the COPYING file in the top-level directory. > > + */ > > + > > +#include "qemu/osdep.h" > > +#include "qemu/queue.h" > > +#include "ebpf/ebpf.h" > > + > > +struct ElfBinaryDataEntry { > > + const char *id; > > + const void * (*fn)(size_t *); > > + > > + QSLIST_ENTRY(ElfBinaryDataEntry) node; > > +}; > > + > > +static QSLIST_HEAD(, ElfBinaryDataEntry) ebpf_elf_obj_list = > > + QSLIST_HEAD_INITIALIZER(); > > + > > +void ebpf_register_binary_data(const char *id, const void * (*fn)(size_t *)) > > +{ > > + struct ElfBinaryDataEntry *data = NULL; > > + > > + data = g_malloc0(sizeof(*data)); > > + data->fn = fn; > > + data->id = id; > > + > > + QSLIST_INSERT_HEAD(&ebpf_elf_obj_list, data, node); > > +} > > + > > +const void *ebpf_find_binary_by_id(const char *id, size_t *sz) > > +{ > > + struct ElfBinaryDataEntry *it = NULL; > > + QSLIST_FOREACH(it, &ebpf_elf_obj_list, node) { > > + if (strcmp(id, it->id) == 0) { > > + return it->fn(sz); > > + } > > + } > > + > > + return NULL; > > +} > > diff --git a/ebpf/ebpf.h b/ebpf/ebpf.h > > new file mode 100644 > > index 0000000000..fd705cb73e > > --- /dev/null > > +++ b/ebpf/ebpf.h > > @@ -0,0 +1,25 @@ > > +/* > > + * QEMU eBPF binary declaration routine. > > + * > > + * Developed by Daynix Computing LTD (http://www.daynix.com) > > + * > > + * Authors: > > + * Andrew Melnychenko > > + * > > + * This work is licensed under the terms of the GNU GPL, version 2 or > > + * later. See the COPYING file in the top-level directory. > > + */ > > + > > +#ifndef EBPF_H > > +#define EBPF_H > > + > > +void ebpf_register_binary_data(const char *id, const void * (*fn)(size_t *)); > > +const void *ebpf_find_binary_by_id(const char *id, size_t *sz); > > + > > +#define ebpf_binary_init(id, fn) \ > > +static void __attribute__((constructor)) ebpf_binary_init_ ## fn(void) \ > > +{ \ > > + ebpf_register_binary_data(id, fn); \ > > +} > > + > > +#endif /* EBPF_H */ > > diff --git a/ebpf/ebpf_rss.c b/ebpf/ebpf_rss.c > > index 08015fecb1..b4038725f2 100644 > > --- a/ebpf/ebpf_rss.c > > +++ b/ebpf/ebpf_rss.c > > @@ -21,6 +21,8 @@ > > > > #include "ebpf/ebpf_rss.h" > > #include "ebpf/rss.bpf.skeleton.h" > > +#include "ebpf/ebpf.h" > > + > > #include "trace.h" > > > > void ebpf_rss_init(struct EBPFRSSContext *ctx) > > @@ -237,3 +239,5 @@ void ebpf_rss_unload(struct EBPFRSSContext *ctx) > > ctx->obj = NULL; > > ctx->program_fd = -1; > > } > > + > > +ebpf_binary_init("rss", rss_bpf__elf_bytes) > > Who or how the ABI compatibility is preserved between libvirt and Qemu? There's no real problem with binary compatibility to solve any more. When libvirt first launches a QEMU VM, it will fetch the eBPF programs it needs from that running QEMU using QMP. WHen it later needs to enable features that use eBPF, it already has the program data that matches the running QEMU With regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|