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... thanks -- PMM