[PATCH 3/7] KVM: arm64: Remove list_head from hyp_page

Marc Zyngier maz at kernel.org
Tue Jun 1 10:41:49 PDT 2021


On Tue, 01 Jun 2021 16:48:06 +0100,
Quentin Perret <qperret at google.com> 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 at google.com> 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.

Thanks,

	M.

-- 
Without deviation from the norm, progress is not possible.



More information about the linux-arm-kernel mailing list