[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PULL 07/11] cpu-exec: don't overwrite exception_index
From: |
Peter Maydell |
Subject: |
Re: [Qemu-devel] [PULL 07/11] cpu-exec: don't overwrite exception_index |
Date: |
Tue, 9 Jan 2018 13:44:09 +0000 |
On 9 January 2018 at 13:21, Pavel Dovgalyuk <address@hidden> wrote:
> I tried to get some logs with the following code.
> It prints that there was an exception 5 and it was overwritten by the
> standard code.
> Fixed code prevents this overwrite.
>
> I guess that one of the following is true:
> - unfixed version misses some exceptions
> - fixed version processes some exceptions twice (e.g., when there is no
> clear exception)
>
> diff --git a/accel/tcg/cpu-exec.c b/accel/tcg/cpu-exec.c
> index 280200f..fa810f7 100644
> --- a/accel/tcg/cpu-exec.c
> +++ b/accel/tcg/cpu-exec.c
> @@ -605,6 +605,8 @@ static inline bool cpu_handle_interrupt(CPUState *cpu,
> /* Finally, check if we need to exit to the main loop. */
> if (unlikely(atomic_read(&cpu->exit_request)
> || (use_icount && cpu->icount_decr.u16.low + cpu->icount_extra ==
> 0)))
> + if (cpu->exception_index != -1 && cpu->exception_index !=
> EXCP_INTERRUP
> + qemu_log("overwriting excp_index %x\n", cpu->exception_index);
> atomic_set(&cpu->exit_request, 0);
> cpu->exception_index = EXCP_INTERRUPT;
> return true;
This looks like it's just working around whatever is going on
(why should EXCP_INTERRUPT be special?). What we need to do is
find out what's actually happening here...
thanks
-- PMM