From patchwork Wed Sep 9 15:41:12 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?b?5q2m55SwID0/SVNPLTIwMjItSlA/Qj9JQnNrUWoxVFRHa2JLRUk9Pz0=?= X-Patchwork-Id: 33202 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [199.232.76.165]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by bilbo.ozlabs.org (Postfix) with ESMTPS id E7630B6F34 for ; Thu, 10 Sep 2009 02:13:05 +1000 (EST) Received: from localhost ([127.0.0.1]:53546 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1MlPn4-00076B-BR for incoming@patchwork.ozlabs.org; Wed, 09 Sep 2009 12:13:02 -0400 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1MlPIT-0007uK-NM for qemu-devel@nongnu.org; Wed, 09 Sep 2009 11:41:25 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1MlPIP-0007sF-7d for qemu-devel@nongnu.org; Wed, 09 Sep 2009 11:41:25 -0400 Received: from [199.232.76.173] (port=58203 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1MlPIO-0007s3-UA for qemu-devel@nongnu.org; Wed, 09 Sep 2009 11:41:20 -0400 Received: from smtp-vip.mem.interq.net ([210.157.1.50]:21779 helo=smtp01.mem.internal-gmo) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1MlPIO-0007Sv-3y for qemu-devel@nongnu.org; Wed, 09 Sep 2009 11:41:20 -0400 Received: (from root@localhost) by smtp01.mem.internal-gmo (8.13.8/8.12.6) id n89FfIOb012516 for qemu-devel@nongnu.org; Thu, 10 Sep 2009 00:41:18 +0900 (JST) Received: from YOUR-BD18D6DD63.m1.interq.or.jp (ntymns034018.ymns.nt.ftth.ppp.infoweb.ne.jp [211.2.27.18]) by smtp01.mem.internal-gmo with ESMTP id n89FfIIM012512 for ; (me101664 for with PLAIN) Thu, 10 Sep 2009 00:41:18 +0900 (JST) Message-Id: <200909091541.AA00085@YOUR-BD18D6DD63.m1.interq.or.jp> From: t-takeda@m1.interq.or.jp (=?ISO-2022-JP?B?GyRCSXBFRBsoQg==?= =?ISO-2022-JP?B?IBskQj1TTGkbKEI=?=) Date: Thu, 10 Sep 2009 00:41:12 +0900 To: qemu-devel MIME-Version: 1.0 X-Mailer: AL-Mail32 Version 1.13 X-detected-operating-system: by monty-python.gnu.org: Solaris 10 (beta) Subject: [Qemu-devel] [PATCH 02/14] vl: add qemu_cpu_reset_request() X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org This patch is to add qemu_cpu_reset_request() function. It is like qemu_syste_reset_request(), but it resets only CPUs and does not reset other devices. diff -ur a/sysemu.h b/sysemu.h --- a/sysemu.h Tue Sep 8 21:26:50 2009 +++ b/sysemu.h Wed Sep 9 21:49:51 2009 @@ -43,13 +43,16 @@ void cpu_disable_ticks(void); void qemu_system_reset_request(void); +void qemu_cpu_reset_request(void); void qemu_system_shutdown_request(void); void qemu_system_powerdown_request(void); int qemu_shutdown_requested(void); int qemu_reset_requested(void); +int qemu_cpu_reset_requested(void); int qemu_powerdown_requested(void); extern qemu_irq qemu_system_powerdown; void qemu_system_reset(void); +void qemu_cpu_reset(void); void do_savevm(Monitor *mon, const QDict *qdict); int load_vmstate(Monitor *mon, const char *name); diff -ur a/vl.c b/vl.c --- a/vl.c Tue Sep 8 21:26:51 2009 +++ b/vl.c Wed Sep 9 21:49:43 2009 @@ -3430,6 +3430,7 @@ static TAILQ_HEAD(reset_handlers, QEMUResetEntry) reset_handlers = TAILQ_HEAD_INITIALIZER(reset_handlers); static int reset_requested; +static int cpu_reset_requested; static int shutdown_requested; static int powerdown_requested; static int debug_requested; @@ -3449,6 +3450,13 @@ return r; } +int qemu_cpu_reset_requested(void) +{ + int r = cpu_reset_requested; + cpu_reset_requested = 0; + return r; +} + int qemu_powerdown_requested(void) { int r = powerdown_requested; @@ -3512,6 +3520,16 @@ } } +void qemu_cpu_reset(void) +{ + CPUState *env; + + /* reset all cpus */ + for(env = first_cpu; env != NULL; env = env->next_cpu) { + cpu_reset(env); + } +} + void qemu_system_reset_request(void) { if (no_reboot) { @@ -3522,6 +3540,12 @@ qemu_notify_event(); } +void qemu_cpu_reset_request(void) +{ + cpu_reset_requested = 1; + qemu_notify_event(); +} + void qemu_system_shutdown_request(void) { shutdown_requested = 1; @@ -4285,6 +4309,8 @@ return 0; if (reset_requested) return 0; + if (cpu_reset_requested) + return 0; if (shutdown_requested) return 0; if (debug_requested) @@ -4332,6 +4358,11 @@ if (qemu_reset_requested()) { pause_all_vcpus(); qemu_system_reset(); + resume_all_vcpus(); + } + if (qemu_cpu_reset_requested()) { + pause_all_vcpus(); + qemu_cpu_reset(); resume_all_vcpus(); } if (qemu_powerdown_requested()) {