|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v5 10/28] xsplice: Implement payload loading
> > -void *vm_alloc(unsigned int nr, unsigned int align)
> > +void __init vm_init(void)
> > +{
> > + vm_init_type(VMAP_VIRT);
> > +#ifdef CONFIG_XSPLICE
> > + vm_init_type(XEN_VIRT);
> > +#endif
> > +}
>
> I think we should leave it to the arch to call vm_init_type() for
> the non-default type(s) it cares about, namely allowing for this to
> be done at a different (later) time. Which means vm_init() could
> simply become an inline/macro wrapper of vm_init_type(VMAP_VIRT).
Yup, and then I've an arch_xsplice_init which nicely calls vm_init_type
for the VMAP_VIRT_XEN.
>
> > +void *vm_alloc(unsigned int nr, unsigned int align)
> > +{
> > + return vm_alloc_type(nr, align, VMAP_VIRT);
> > +}
>
> Inline/macro wrapper?
>
> > +void vm_free(const void *va)
> > +{
> > + vm_free_type(va, VMAP_VIRT);
> > +}
>
> Again.
>
> > void vunmap(const void *va)
> > {
> > + enum vmap_type type = VMAP_VIRT;
> > + unsigned int size = vm_size(va, type);
> > +#ifndef _PAGE_NONE
> > + unsigned long addr;
> > +#endif
> > +
> > + if ( !size )
> > + {
> > + type = XEN_VIRT;
> > + size = vm_size(va, type);
> > + }
>
> I don't think such automatic fallback should be tried - the caller ought
> to know which region it mapped, so it could call vunmap_type().
OK.
>
> > @@ -238,11 +288,15 @@ void *vmalloc(size_t size)
> > mfn[i] = _mfn(page_to_mfn(pg));
> > }
> >
> > - va = vmap(mfn, pages);
> > + va = __vmap(mfn, 1, pages, 1, PAGE_HYPERVISOR, type);
> > if ( va == NULL )
> > goto error;
> >
> > - xfree(mfn);
> > + if ( mfn_array )
> > + *mfn_array = mfn;
> > + else
> > + xfree(mfn);
>
> What's this? I certainly assumed this wouldn't be needed anymore
> now.
I still need the MFNs so I can change the page table attributes once
I've finished copying the ELF.
I can walk the virtual addresses and gather them from the PTE,
but I figured it would be easier to have them stashed away somewhere?
>
> > @@ -275,7 +334,10 @@ void vfree(void *va)
> > if ( !va )
> > return;
> >
> > - pages = vm_size(va);
> > + pages = vm_size(va, VMAP_VIRT);
> > + if ( !pages )
> > + pages = vm_size(va, XEN_VIRT);
>
> Same comment as as for vunmap().
>
> > +enum vmap_type {
> > + VMAP_VIRT,
> > + XEN_VIRT,
> > + VMAP_TYPE_MAX,
> > +};
>
> I think these would benefit from using a common prefix, e.g.
>
> enum vmap_type {
> VMAP_DEFAULT,
> VMAP_XEN,
> VMAP_nr
> };
Thanks!
>
> Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |