|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 4/4] xen/arm: clean and invalidate all guest caches by VMID after domain build.
>>> On 29.01.14 at 13:11, Ian Campbell <ian.campbell@xxxxxxxxxx> wrote:
> --- a/tools/libxc/xc_domain.c
> +++ b/tools/libxc/xc_domain.c
> @@ -48,6 +48,14 @@ int xc_domain_create(xc_interface *xch,
> return 0;
> }
>
> +int xc_domain_cacheflush(xc_interface *xch, uint32_t domid)
> +{
> + DECLARE_DOMCTL;
> + domctl.cmd = XEN_DOMCTL_cacheflush;
> + domctl.domain = (domid_t)domid;
Why can't the function parameter be domid_t right away?
> + case XEN_DOMCTL_cacheflush:
> + {
> + long rc = p2m_cache_flush(d, &domctl->u.cacheflush.start_mfn);
> + if ( __copy_to_guest(u_domctl, domctl, 1) )
While you certainly say so in the public header change, I think you
recall that we pretty recently changed another hypercall to not be
the only inconsistent one modifying the input structure in order to
handle hypercall preemption.
Further - who's responsible for initiating the resume after a
preemption? p2m_cache_flush() returning -EAGAIN isn't being
handled here, and also not in libxc (which would be awkward
anyway).
> +static void do_one_cacheflush(paddr_t mfn)
> +{
> + void *v = map_domain_page(mfn);
> +
> + flush_xen_dcache_va_range(v, PAGE_SIZE);
> +
> + unmap_domain_page(v);
> +}
Sort of odd that you have to map a page in order to flush cache
(which I very much hope is physically indexed, or else this
operation wouldn't have the intended effect anyway). Can this
not be done based on the machine address?
> /* Preempt every 2MiB (mapped) or 32 MiB (unmapped) - arbitrary */
> - if ( op == RELINQUISH && count >= 0x2000 )
> + switch ( op )
> {
> - if ( hypercall_preempt_check() )
> + case RELINQUISH:
> + case CACHEFLUSH:
> + if (count >= 0x2000 && hypercall_preempt_check() )
> {
> p2m->lowest_mapped_gfn = addr >> PAGE_SHIFT;
> rc = -EAGAIN;
> goto out;
> }
> count = 0;
> + break;
> + case INSERT:
> + case ALLOCATE:
> + case REMOVE:
> + /* No preemption */
> + break;
> }
Unrelated to the patch here, but don't you have a problem if you
don't preempt _at all_ here for certain operation types? Or is a
limit on the number of iterations being enforced elsewhere for
those?
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |