qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] invalid runstate transition: 'prelaunch' -> 'prelaunch'


From: Liviu Ionescu
Subject: Re: [Qemu-devel] invalid runstate transition: 'prelaunch' -> 'prelaunch'
Date: Thu, 28 Jul 2016 13:59:10 +0300

Peter,

Can you confirm that adding a new transition definition is ok for the context 
I'm using it?

I had no problems so far, just wanted to be sure.


Thank you,

Liviu


> On 27 Jul 2016, at 22:40, Liviu Ionescu <address@hidden> wrote:
> 
> Hi,
> 
> I just upgraded GNU ARM Eclipse QEMU to 2.6.0 and ran into a problem.
> 
> The console reads:
> 
> ```
> GNU ARM Eclipse 64-bits QEMU v2.6.0 (qemu-system-gnuarmeclipse).
> Board: 'STM32F4-Discovery' (ST Discovery kit for STM32F407/417 lines).
> Device: 'STM32F407VG' (Cortex-M4 r0p0, MPU), Flash: 1024 kB, RAM: 128 kB.
> Command line: 'test' (4 bytes).
> Cortex-M4 r0p0 core initialised.
> GDB Server listening on: 'tcp::1234'...
> Cortex-M4 r0p0 core reset.
> ... connection accepted from 127.0.0.1.
> 
> Execute 'mon system_reset'.
> 
> Cortex-M4 r0p0 core reset.
> qemu-system-gnuarmeclipse: invalid runstate transition: 'prelaunch' -> 
> 'prelaunch'
> ```
> 
> QEMU is started as a GDB server, and when the GDB client connects (from an 
> Eclipse session), it issues a 'system_reset' command.
> 
> The problem occurs in:
> 
> ```
> void runstate_set(RunState new_state)
> {
>    assert(new_state < RUN_STATE__MAX);
> 
>    if (!runstate_valid_transitions[current_run_state][new_state]) {
>        error_report("invalid runstate transition: '%s' -> '%s'",
>                     RunState_lookup[current_run_state],
>                     RunState_lookup[new_state]);
>        abort();
>    }
>    trace_runstate_set(new_state);
>    current_run_state = new_state;
> }
> ```
> 
> when called from `main_loop_should_exit(void)`:
> 
> ```
>    if (qemu_reset_requested()) {
>        pause_all_vcpus();
>        qemu_system_reset(VMRESET_REPORT);
>        resume_all_vcpus();
>        if (!runstate_check(RUN_STATE_RUNNING) &&
>                !runstate_check(RUN_STATE_INMIGRATE)) {
>            runstate_set(RUN_STATE_PRELAUNCH);
>        }
>    }
> ```
> 
> I fixed the problem by adding a new transition in the 
> `runstate_transitions_def[]` array:
> 
> ```
> #if defined(CONFIG_GNU_ARM_ECLIPSE)
>    { RUN_STATE_PRELAUNCH, RUN_STATE_PRELAUNCH },
> #endif /* defined(CONFIG_GNU_ARM_ECLIPSE) */
> ```
> 
> I don't know what these transition states are, but the above missing line 
> might affect other users too.
> 
> 
> For completeness, I'm referring to the source files tagged with v2.6.0.
> 
> 
> Regards,
> 
> Liviu
> 
> 
> 
> 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]