|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] xen: correctly check for pending events when restoring irq flags
>>> On 27.04.12 at 15:09, Ian Campbell <Ian.Campbell@xxxxxxxxxx> wrote:
> On Fri, 2012-04-27 at 13:46 +0100, Jan Beulich wrote:
>> >>> On 27.04.12 at 13:58, Ian Campbell <Ian.Campbell@xxxxxxxxxx> wrote:
>> > On Fri, 2012-04-27 at 12:42 +0100, Jan Beulich wrote:
>> >> >>> On 27.04.12 at 10:47, Ian Campbell <Ian.Campbell@xxxxxxxxxx> wrote:
>> > Hrm, has it ever not been 1 in practice?
>>
>> I don't think so.
>>
>> > i.e. could we legitimately tighten the spec?
>>
>> I wouldn't want to recommend this. In particular, we can't all of the
>> sudden keep guests from storing other non-zero values in here.
>
> Could they be doing this? Whatever they put there is going to get
> clobbered by Xen whenever it injects an event, isn't it? Or do you mean
> that a guest can force an upcall by writing non-zero itself? Do guests
> actually do that? (why?)
Yes, there is such a case even in Linux - see unmask_evtchn(). And
tightening an existing spec in ways that affect things we don't
control seems undesirable (and unnecessary here).
>> While I'm not in favor of this either, what we could do is specify that
>> Xen will only ever write 0 or 1 in here, while other non-zero values
>> are okay to be used by guests.
>
> Does Xen ever clear an upcall, isn't that always the guest? Xen only
> ever writes 1, at least as far as I can see...
Oh, yes, you're right of course.
> What do you think of the following?
Reads okay.
Jan
> --- a/xen/include/public/xen.h Thu Apr 26 10:03:08 2012 +0100
> +++ b/xen/include/public/xen.h Fri Apr 27 14:09:00 2012 +0100
> @@ -559,16 +559,18 @@ typedef struct vcpu_time_info vcpu_time_
>
> struct vcpu_info {
> /*
> - * 'evtchn_upcall_pending' is written non-zero by Xen to indicate
> - * a pending notification for a particular VCPU. It is then cleared
> - * by the guest OS /before/ checking for pending work, thus avoiding
> - * a set-and-check race. Note that the mask is only accessed by Xen
> - * on the CPU that is currently hosting the VCPU. This means that the
> - * pending and mask flags can be updated by the guest without special
> - * synchronisation (i.e., no need for the x86 LOCK prefix).
> - * This may seem suboptimal because if the pending flag is set by
> - * a different CPU then an IPI may be scheduled even when the mask
> - * is set. However, note:
> + * 'evtchn_upcall_pending' is written to '1' by Xen to indicate a
> + * pending notification for a particular VCPU. Xen will never
> + * write any other value but it is legitimate for a guest to store
> + * any other non-zero value here to trigger an upcall. It is then
> + * cleared by the guest OS /before/ checking for pending work,
> + * thus avoiding a set-and-check race. Note that the mask is only
> + * accessed by Xen on the CPU that is currently hosting the
> + * VCPU. This means that the pending and mask flags can be updated
> + * by the guest without special synchronisation (i.e., no need for
> + * the x86 LOCK prefix). This may seem suboptimal because if the
> + * pending flag is set by a different CPU then an IPI may be
> + * scheduled even when the mask is set. However, note:
> * 1. The task of 'interrupt holdoff' is covered by the per-event-
> * channel mask bits. A 'noisy' event that is continually being
> * triggered can be masked at source at this very precise
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |