qemu-devel
[Top][All Lists]
Advanced

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

Re: [PATCH] mos6522: update counters when timer interrupts are off


From: Laurent Vivier
Subject: Re: [PATCH] mos6522: update counters when timer interrupts are off
Date: Mon, 25 Nov 2019 15:56:05 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.1.1

Le 25/11/2019 à 15:37, Philippe Mathieu-Daudé a écrit :
> On 11/25/19 3:14 PM, Laurent Vivier wrote:
>> Even if the interrupts are off, counters must be updated because
>> they are running anyway and kernel can try to read them
>> (it's the case with g3beige kernel).
>>
>> Reported-by: Andrew Randrianasulu <address@hidden>
>> Signed-off-by: Laurent Vivier <address@hidden>
>> ---
>>   hw/misc/mos6522.c | 8 ++++++--
>>   1 file changed, 6 insertions(+), 2 deletions(-)
>>
>> diff --git a/hw/misc/mos6522.c b/hw/misc/mos6522.c
>> index aa3bfe1afd..cecf0be59e 100644
>> --- a/hw/misc/mos6522.c
>> +++ b/hw/misc/mos6522.c
>> @@ -113,6 +113,10 @@ static int64_t get_next_irq_time(MOS6522State *s,
>> MOS6522Timer *ti,
>>       int64_t d, next_time;
>>       unsigned int counter;
>>   
> 
> Can you add a comment here such "Clock disabled. This is the longest
> time before expiration" or better?
> 
> Reviewed-by: Philippe Mathieu-Daudé <address@hidden>
> 
>> +    if (ti->frequency == 0) {
>> +        return INT64_MAX;
>> +    }
>> +


In fact this is here for a deeper problem:

frequency is not correctly initialized on reset.

ti->frequency are initialized by cuda/pmu/mac_via after the parent reset
(mos6522) but the parent reset calls set_counter() that uses
ti->frequency to set the counters. The mos6522 reset initialize the
ti->frequency from s->frequency but s->frequency is never initialized.

It was hidden before because the timers were not updated if the
interrupts are disabled, and now they are always updated.

I didn't want to add a such complicated comment in the code and I will
try to fix the problem later.

Thanks,
Laurent



reply via email to

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