Hi Peter, On 9/25/18 12:25 PM, Peter Maydell wrote: > On 21 September 2018 at 08:01, Eric Auger <eric.au...@redhat.com> 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 <eric.au...@redhat.com> >> --- >> 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 >