From nobody Mon Feb 9 17:07:07 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1553511973281475.4382725395184; Mon, 25 Mar 2019 04:06:13 -0700 (PDT) Received: from localhost ([127.0.0.1]:40542 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h8NQe-0007gN-Ir for importer@patchew.org; Mon, 25 Mar 2019 07:06:08 -0400 Received: from eggs.gnu.org ([209.51.188.92]:58599) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h8NNF-00059v-0f for qemu-devel@nongnu.org; Mon, 25 Mar 2019 07:02:38 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h8NNC-0007so-Te for qemu-devel@nongnu.org; Mon, 25 Mar 2019 07:02:36 -0400 Received: from greensocs.com ([193.104.36.180]:38355) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h8NN8-0007oN-M9; Mon, 25 Mar 2019 07:02:31 -0400 Received: from localhost (localhost [127.0.0.1]) by greensocs.com (Postfix) with ESMTP id 7CD2B7D78AD; Mon, 25 Mar 2019 12:02:28 +0100 (CET) Received: from greensocs.com ([127.0.0.1]) by localhost (gs-01.greensocs.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id Lv6IRTWW3-M4; Mon, 25 Mar 2019 12:02:27 +0100 (CET) Received: by greensocs.com (Postfix, from userid 998) id 0DA397D78AA; Mon, 25 Mar 2019 12:02:25 +0100 (CET) Received: from kouign-amann.bar.greensocs.com (antfield.tima.u-ga.fr [147.171.129.253]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: damien.hedde@greensocs.com) by greensocs.com (Postfix) with ESMTPSA id E04997D7887; Mon, 25 Mar 2019 12:02:24 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1553511748; bh=V2GiLuYeyXa93lsR6gIhPeq2caDfc8+2V/ubkHYglDo=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=oZay1PBf4DS6ewVpa3tgHQDEJLfwd+cCZpOHMpbwmjZhVzc+JUT8R+I+OBy7KzEjZ 01CYMphz/9HJSr0mvryc47SwVADep0HZaXay6riqU8X/Kt3U3C2158tecz6lP+1I/E 1zlF7ixD3QboN8hf37DBPLJxgwL+oRXhRsyYyBAE= X-Virus-Scanned: amavisd-new at greensocs.com Authentication-Results: gs-01.greensocs.com (amavisd-new); dkim=pass (1024-bit key) header.d=greensocs.com header.b=oNI5k+ew; dkim=pass (1024-bit key) header.d=greensocs.com header.b=edE1SZal DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1553511746; bh=V2GiLuYeyXa93lsR6gIhPeq2caDfc8+2V/ubkHYglDo=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=oNI5k+ewWFH5gIfhOKDTe/aReS9Q8s1rlEcin5W/j7puhy8xjjHnvtq7FVgkEYBJt JC4+U4BG+n6JeN5OR+Qew3t4oYaG4Uc7gMkGMjMHhJuEP+R2PenzPAxuJx/N3gGhxL p4EbGd+BDqFlHY6IB9ini23gdG3JOuQHV+I9L1yE= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1553511745; bh=V2GiLuYeyXa93lsR6gIhPeq2caDfc8+2V/ubkHYglDo=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=edE1SZalbNgt/MuvGPTcJtIAxP+NVai2oeV9YFBospvcQJMXW40hC6G0t34WouRxs 3leWGJ9gk6zQwmSs9yEUpERLgEAHFZw9qv8GQdklgXmLOrIjPVgwvxhOyiUrwEIauK 5hau4PKcLhW46cJCLTbqFVk1VrUswTsQuBkga5cg= From: Damien Hedde To: qemu-devel@nongnu.org Date: Mon, 25 Mar 2019 12:01:51 +0100 Message-Id: X-Mailer: git-send-email 2.21.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 193.104.36.180 Subject: [Qemu-devel] [RFC PATCH 08/17] Add a global ResetDomain object for system emulation 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: edgar.iglesias@xilinx.com, peter.maydell@linaro.org, mark.burton@greensocs.com, Damien Hedde , qemu-arm@nongnu.org, alistair.francis@wdc.com, marcandre.lureau@redhat.com, pbonzini@redhat.com, philmd@redhat.com, luc.michel@greensocs.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (found 3 invalid signatures) Content-Type: text/plain; charset="utf-8" All objects contained in this ResetDomain are cold-reset when calling qemu_devices_reset. Also add 2 functions to register/unregister object in this ResetDomain. Signed-off-by: Damien Hedde --- hw/core/reset.c | 56 +++++++++++++++++++++++++++++++++++++++++- include/sysemu/reset.h | 47 +++++++++++++++++++++++++++++++++++ 2 files changed, 102 insertions(+), 1 deletion(-) diff --git a/hw/core/reset.c b/hw/core/reset.c index 9c477f2bf5..d013c9feb9 100644 --- a/hw/core/reset.c +++ b/hw/core/reset.c @@ -3,6 +3,7 @@ * * Copyright (c) 2003-2008 Fabrice Bellard * Copyright (c) 2016 Red Hat, Inc. + * Copyright (c) 2019 GreenSocs * * Permission is hereby granted, free of charge, to any person obtaining a= copy * of this software and associated documentation files (the "Software"), t= o deal @@ -26,6 +27,7 @@ #include "qemu/osdep.h" #include "qemu/queue.h" #include "sysemu/reset.h" +#include "hw/reset-domain.h" =20 /* reset/shutdown handler */ =20 @@ -38,6 +40,49 @@ typedef struct QEMUResetEntry { static QTAILQ_HEAD(, QEMUResetEntry) reset_handlers =3D QTAILQ_HEAD_INITIALIZER(reset_handlers); =20 +/* global/system reset domain */ +static ResetDomain *reset_domain; + +static ResetDomain *get_reset_domain(void) +{ + if (reset_domain =3D=3D NULL) { + /* + * the ref to the object will be deleted by + * qemu_delete_system_reset_domain function below. + */ + reset_domain =3D RESET_DOMAIN(object_new(TYPE_RESET_DOMAIN)); + } + return reset_domain; +} + +ResetDomain *qemu_get_system_reset_domain(void) +{ + return get_reset_domain(); +} + +void qemu_delete_system_reset_domain(void) +{ + /* unref the reset_domain object if it exists */ + if (reset_domain !=3D NULL) { + object_unref(OBJECT(reset_domain)); + reset_domain =3D NULL; + } +} + +void qemu_register_system_reset_domain_object(Object *obj) +{ + ResetDomain *domain =3D get_reset_domain(); + + reset_domain_register_object(domain, obj); +} + +void qemu_unregister_system_reset_domain_object(Object *obj) +{ + ResetDomain *domain =3D get_reset_domain(); + + reset_domain_unregister_object(domain, obj); +} + void qemu_register_reset(QEMUResetHandler *func, void *opaque) { QEMUResetEntry *re =3D g_malloc0(sizeof(QEMUResetEntry)); @@ -62,11 +107,20 @@ void qemu_unregister_reset(QEMUResetHandler *func, voi= d *opaque) =20 void qemu_devices_reset(void) { + qemu_system_reset_domain_reset(true); +} + +void qemu_system_reset_domain_reset(bool cold) +{ + ResetDomain *domain =3D get_reset_domain(); QEMUResetEntry *re, *nre; =20 - /* reset all devices */ + /* call function handlers first */ QTAILQ_FOREACH_SAFE(re, &reset_handlers, entry, nre) { re->func(re->opaque); } + + /* then handle the objects in the ResetDomain */ + resettable_reset(OBJECT(domain), cold); } =20 diff --git a/include/sysemu/reset.h b/include/sysemu/reset.h index 0b0d6d7598..29843eca92 100644 --- a/include/sysemu/reset.h +++ b/include/sysemu/reset.h @@ -1,10 +1,57 @@ #ifndef QEMU_SYSEMU_RESET_H #define QEMU_SYSEMU_RESET_H =20 +#include "qom/object.h" +#include "hw/reset-domain.h" + +/** + * qemu_get_system_reset_domain: + * Get the global system reset domain object + */ +ResetDomain *qemu_get_system_reset_domain(void); + +/** + * qemu_delete_system_reset_domain: + * Delete the global system reset domain object + */ +void qemu_delete_system_reset_domain(void); + +/** + * qemu_register_system_reset_domain_object: + * Register @obj in the system reset domain + */ +void qemu_register_system_reset_domain_object(Object *obj); + +/** + * qemu_unregister_system_reset_domain_object: + * Unregister @obj from the global reset domain + */ +void qemu_unregister_system_reset_domain_object(Object *obj); + +/** + * @qemu_system_reset_domain_reset: + * Do a cold or warm system reset based on @cold + */ +void qemu_system_reset_domain_reset(bool cold); + typedef void QEMUResetHandler(void *opaque); =20 +/** + * qemu_resgiter_reset: + * Register @func with @opaque in the global reset procedure. + */ void qemu_register_reset(QEMUResetHandler *func, void *opaque); + +/** + * qemu_unregister_reset: + * Unregister @func with @opaque from the global reset procedure. + */ void qemu_unregister_reset(QEMUResetHandler *func, void *opaque); + +/** + * qemu_devices_reset: + * Trigger a reset of registered handlers and objects. + */ void qemu_devices_reset(void); =20 #endif --=20 2.21.0