qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH 2/2] hw/arm/smmuv3: fix eventq recording and IRQ


From: Auger Eric
Subject: Re: [Qemu-devel] [PATCH 2/2] hw/arm/smmuv3: fix eventq recording and IRQ triggerring
Date: Tue, 25 Sep 2018 14:07:39 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.0

Hi Peter,

On 9/25/18 12:25 PM, Peter Maydell wrote:
> On 21 September 2018 at 08:01, Eric Auger <address@hidden> wrote:
>> The event queue management is broken today. Event records
>> are not properly written as EVT_SET_* macro was not updating
>> the actual event record. Also the event queue interrupt
>> is not correctly triggered.
>>
>> Fixes: bb981004eaf4 ("hw/arm/smmuv3: Event queue recording helper")
>> Signed-off-by: Eric Auger <address@hidden>
>> ---
>>  hw/arm/smmuv3-internal.h | 26 +++++++++++++-------------
>>  hw/arm/smmuv3.c          |  2 +-
>>  2 files changed, 14 insertions(+), 14 deletions(-)
>>
>> diff --git a/hw/arm/smmuv3-internal.h b/hw/arm/smmuv3-internal.h
>> index bab25d640e..19540f8f41 100644
>> --- a/hw/arm/smmuv3-internal.h
>> +++ b/hw/arm/smmuv3-internal.h
>> @@ -442,17 +442,17 @@ typedef struct SMMUEventInfo {
>>
>>  #define EVT_Q_OVERFLOW        (1 << 31)
>>
>> -#define EVT_SET_TYPE(x, v)              deposit32((x)->word[0], 0 , 8 , v)
>> -#define EVT_SET_SSV(x, v)               deposit32((x)->word[0], 11, 1 , v)
>> -#define EVT_SET_SSID(x, v)              deposit32((x)->word[0], 12, 20, v)
>> -#define EVT_SET_SID(x, v)               ((x)->word[1] = v)
>> -#define EVT_SET_STAG(x, v)              deposit32((x)->word[2], 0 , 16, v)
>> -#define EVT_SET_STALL(x, v)             deposit32((x)->word[2], 31, 1 , v)
>> -#define EVT_SET_PNU(x, v)               deposit32((x)->word[3], 1 , 1 , v)
>> -#define EVT_SET_IND(x, v)               deposit32((x)->word[3], 2 , 1 , v)
>> -#define EVT_SET_RNW(x, v)               deposit32((x)->word[3], 3 , 1 , v)
>> -#define EVT_SET_S2(x, v)                deposit32((x)->word[3], 7 , 1 , v)
>> -#define EVT_SET_CLASS(x, v)             deposit32((x)->word[3], 8 , 2 , v)
>> +#define EVT_SET_TYPE(x, v)  ((x)->word[0] = deposit32((x)->word[0], 0 , 8 , 
>> v))
>> +#define EVT_SET_SSV(x, v)   ((x)->word[0] = deposit32((x)->word[0], 11, 1 , 
>> v))
>> +#define EVT_SET_SSID(x, v)  ((x)->word[0] = deposit32((x)->word[0], 12, 20, 
>> v))
>> +#define EVT_SET_SID(x, v)   ((x)->word[1] = v)
>> +#define EVT_SET_STAG(x, v)  ((x)->word[2] = deposit32((x)->word[2], 0 , 16, 
>> v))
>> +#define EVT_SET_STALL(x, v) ((x)->word[2] = deposit32((x)->word[2], 31, 1 , 
>> v))
>> +#define EVT_SET_PNU(x, v)   ((x)->word[3] = deposit32((x)->word[3], 1 , 1 , 
>> v))
>> +#define EVT_SET_IND(x, v)   ((x)->word[3] = deposit32((x)->word[3], 2 , 1 , 
>> v))
>> +#define EVT_SET_RNW(x, v)   ((x)->word[3] = deposit32((x)->word[3], 3 , 1 , 
>> v))
>> +#define EVT_SET_S2(x, v)    ((x)->word[3] = deposit32((x)->word[3], 7 , 1 , 
>> v))
>> +#define EVT_SET_CLASS(x, v) ((x)->word[3] = deposit32((x)->word[3], 8 , 2 , 
>> v))
> 
> 
> Oops. I'm a bit embarrassed I didn't notice that in code review...
Well I am even more embarrassed than you ;-) Usually there are no
faults. When I got some, mostly due to emulation code bugs, I mostly
focused on QEMU guest_errors logs. I noticed the code was broken when
attempting to report faults from host smmu driver. Sorry for the
inconvenience.

Thanks

Eric
> 
> thanks
> -- PMM
> 



reply via email to

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