|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] Issue policing writes from Xen to PV domain memory
>>> On 06.05.14 at 21:01, <aravindp@xxxxxxxxx> wrote:
> This happens only when the access listener first attaches to a PV domain for
> write events. It occurs in the window between mem_access has been enabled and
> the listener is ready to handle events. I have not seen it happen once the
> listener starts handling events. And I have not run in to this issue with
> execute violations.
Which is still only describing observations, not anything leading to an
understanding of why this is happening.
> So I tried a couple of things. One was to check if the ring was full before
> sending a write violation emanating from Xen. If the ring was full instead of
> calling mem_access_send_req() which would end up calling schedule(), I
> allowed the PTE to be created with the same default permissions which would
> then cause the pagefault to be retried indirectly giving the listener more
> time to handle events. This way the write would be policed. This is what the
> change looks like on top of the original patch.
> ...
> +unsigned int mem_event_check_ring_availability(struct mem_event_domain *med)
> +{
> + int avail_req = RING_FREE_REQUESTS(&med->front_ring);
> +
> + mem_event_ring_lock(med);
> + avail_req = mem_event_ring_available(med);
> + mem_event_ring_unlock(med);
> + return avail_req;
> +}
With this it is already clear that this can't be a solution: By the time the
caller evaluates the return value, the ring may have become full.
> The other approach I took was to detect if the write violation was emanating
> from Xen when the ring was full and sending that fact down to wait_event().
> If the context was Xen, then instead of calling wait(), wait_event() would
> call process_pending_softirqs(). This is how wait_event() would look with
> this change:
> ...
A common code change like this can only ever be acceptable if it
addresses a common problem, but definitely not to work around a
non-understood problem.
I can only repeat what I said above: You first need to understand
why the ring is (or appears to be) full. But even with that clarified
you still need to have a proper solution for the case where the ring
might end up being full for valid reasons. And as also said earlier, I
am of the opinion that the behavior regarding Xen accesses would
ideally not differ between HVM, PVH, and PV.
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |