On Tuesday 01 Jun 2021 at 18:41:49 (+0100), Marc Zyngier wrote: > On Tue, 01 Jun 2021 16:48:06 +0100, > Quentin Perret <qperret@xxxxxxxxxx> wrote: > > > > On Tuesday 01 Jun 2021 at 15:38:22 (+0100), Marc Zyngier wrote: > > > On Thu, 27 May 2021 13:51:30 +0100, > > > Quentin Perret <qperret@xxxxxxxxxx> wrote: > > > > +/* > > > > + * Pages that are available for allocation are tracked in free-lists, so we use > > > > + * the pages themselves to store the list nodes to avoid wasting space. As the > > > > + * allocator always returns zeroed pages (which are zeroed on the hyp_put_page() > > > > + * path to optimize allocation speed), we also need to clean-up the list node in > > > > + * each page when we take it out of the list. > > > > + */ > > > > +static inline void page_remove_from_list(struct hyp_page *p) > > > > +{ > > > > + struct list_head *node = (struct list_head *)hyp_page_to_virt(p); > > > > > > Nit: How about changing hyp_page_to_virt() so that it returns a > > > convenient 'void *', and get rid of the ugly casts? > > > > It should already return void *, but I kind of liked the explicit cast > > here for documentation purpose. We're turning a 'random' piece of unused > > memory into a typed object, so that felt like a useful annotation. Happy > > to get rid of it though. > > My expectations were that using hyp_page_to_virt() already serves as a > pretty big warning that we're doing something unusual. > > I guess that if we want to be really careful about those, we should > then be consistent and make it return a uintptr_t (or unsigned long) > instead, actively making use of the cast, consistently, everywhere. Right, so I'd prefer keeping it void * for consistency with the EL1 equivalent -- much of this aims to be API compatible with the Linux stuff. I'll get rid of the cast and post a v2 shortly. Cheers, Quentin _______________________________________________ kvmarm mailing list kvmarm@xxxxxxxxxxxxxxxxxxxxx https://lists.cs.columbia.edu/mailman/listinfo/kvmarm