[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] xen/timers: Document and improve the representation of the timer heap metadata
>>> On 29.03.19 at 17:02, <andrew.cooper3@xxxxxxxxxx> wrote: > --- a/xen/common/timer.c > +++ b/xen/common/timer.c > @@ -45,18 +45,27 @@ DEFINE_PER_CPU(s_time_t, timer_deadline); > > > /**************************************************************************** > * HEAP OPERATIONS. > + * > + * Slot 0 of the heap is never a valid timer pointer, and instead holds the > + * heap metadata. > */ > > -#define GET_HEAP_SIZE(_h) ((int)(((u16 *)(_h))[0])) > -#define SET_HEAP_SIZE(_h,_v) (((u16 *)(_h))[0] = (u16)(_v)) > +struct heap_metadata { > + uint16_t size, limit; > +}; > + > +static struct heap_metadata *heap_metadata(struct timer **heap) > +{ > + /* Check that our type-punning doesn't overflow into heap[1] */ > + BUILD_BUG_ON(sizeof(struct heap_metadata) > sizeof(struct timer *)); > > -#define GET_HEAP_LIMIT(_h) ((int)(((u16 *)(_h))[1])) > -#define SET_HEAP_LIMIT(_h,_v) (((u16 *)(_h))[1] = (u16)(_v)) > + return (struct heap_metadata *)&heap[0]; > +} > > /* Sink down element @pos of @heap. */ > static void down_heap(struct timer **heap, int pos) > { > - int sz = GET_HEAP_SIZE(heap), nxt; > + int sz = heap_metadata(heap)->size, nxt; While I realize that it'll alter generated code, I think this would be a very good opportunity to convert various local variables to unsigned int. But I won't insist, so with or without the extra change Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx> Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |