From patchwork Wed Jun 21 07:52:00 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Xu X-Patchwork-Id: 778682 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3wsxlz1pmRz9s4q for ; Wed, 21 Jun 2017 17:53:19 +1000 (AEST) Received: from localhost ([::1]:52253 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dNaRw-0002GJ-Tn for incoming@patchwork.ozlabs.org; Wed, 21 Jun 2017 03:53:17 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:48247) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dNaRC-0002Cp-MR for qemu-devel@nongnu.org; Wed, 21 Jun 2017 03:52:34 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dNaRB-00037S-Q7 for qemu-devel@nongnu.org; Wed, 21 Jun 2017 03:52:30 -0400 Received: from mx1.redhat.com ([209.132.183.28]:37612) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dNaRB-00037K-Hz for qemu-devel@nongnu.org; Wed, 21 Jun 2017 03:52:29 -0400 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 78B8481127 for ; Wed, 21 Jun 2017 07:52:28 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 78B8481127 Authentication-Results: ext-mx03.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx03.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=peterx@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 78B8481127 Received: from pxdev.xzpeter.org.com (ovpn-12-74.pek2.redhat.com [10.72.12.74]) by smtp.corp.redhat.com (Postfix) with ESMTP id 7F48F82475; Wed, 21 Jun 2017 07:52:25 +0000 (UTC) From: Peter Xu To: qemu-devel@nongnu.org Date: Wed, 21 Jun 2017 15:52:00 +0800 Message-Id: <1498031528-1990-3-git-send-email-peterx@redhat.com> In-Reply-To: <1498031528-1990-1-git-send-email-peterx@redhat.com> References: <1498031528-1990-1-git-send-email-peterx@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.27]); Wed, 21 Jun 2017 07:52:28 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH v4 02/10] accel: introduce AccelClass.global_props X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , Eduardo Habkost , Juan Quintela , "Dr . David Alan Gilbert" , peterx@redhat.com, Markus Armbruster Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Introduce this new field for the accelerator classes so that each specific accelerator in the future can register its own global properties to be used further by the system. It works just like how the old machine compatible properties do, but only tailored for accelerators. Use the newly exported register_compat_prop() to pass the accelerator global properties to the global_props list. Suggested-by: Eduardo Habkost Signed-off-by: Peter Xu --- accel/accel.c | 10 ++++++++++ include/sysemu/accel.h | 10 ++++++++++ vl.c | 1 + 3 files changed, 21 insertions(+) diff --git a/accel/accel.c b/accel/accel.c index 7c079a5..212581c 100644 --- a/accel/accel.c +++ b/accel/accel.c @@ -120,6 +120,16 @@ void configure_accelerator(MachineState *ms) } } +void accel_register_compat_props(AccelState *accel) +{ + AccelClass *class = ACCEL_GET_CLASS(accel); + GlobalProperty *prop; + + for (prop = class->global_props; prop && prop->driver; prop++) { + register_compat_prop(prop->driver, prop->property, prop->value); + } +} + static void register_accel_types(void) { type_register_static(&accel_type); diff --git a/include/sysemu/accel.h b/include/sysemu/accel.h index 15944c1..8a01e51 100644 --- a/include/sysemu/accel.h +++ b/include/sysemu/accel.h @@ -24,6 +24,7 @@ #define HW_ACCEL_H #include "qom/object.h" +#include "hw/qdev-properties.h" typedef struct AccelState { /*< private >*/ @@ -40,6 +41,13 @@ typedef struct AccelClass { int (*available)(void); int (*init_machine)(MachineState *ms); bool *allowed; + /* + * Array of gobal properties that would be applied when specific + * accelerator is chosen. It works just like + * MachineClass.compat_props but it's for accelerators not + * machines. + */ + GlobalProperty *global_props; } AccelClass; #define TYPE_ACCEL "accel" @@ -57,5 +65,7 @@ typedef struct AccelClass { extern int tcg_tb_size; void configure_accelerator(MachineState *ms); +/* Register accelerator specific global properties */ +void accel_register_compat_props(AccelState *accel); #endif diff --git a/vl.c b/vl.c index 59fea15..4452d7a 100644 --- a/vl.c +++ b/vl.c @@ -4571,6 +4571,7 @@ int main(int argc, char **argv, char **envp) exit (i == 1 ? 1 : 0); } + accel_register_compat_props(current_machine->accelerator); machine_register_compat_props(current_machine); qemu_opts_foreach(qemu_find_opts("global"),