On 20/10/2020 10:34, Jan Beulich wrote:
On 20.10.2020 11:25, Julien Grall wrote:
Given that evtchn->last_vcpu_id and evtchn->last_priority can only be
modified in evtchn_fifo_set_pending(), this suggests that it is expected
for the function to multiple called concurrently on the same event channel.
I'm unconvinced it was really considered
whether racing sending on the same channel is also safe this way.
How would you explain the 3 try in lock_old_queue then?
Queue changes (as said by the gprintk()) can't result from sending
alone, but require re-binding to a different vCPU or altering the
priority.
I agree with that. However, this doesn't change the fact that update to
evtchn->last_priority and evtchn->last_vcpu can only happen when calling
evtchn_fifo_set_pending().
If evtchn_fifo_set_pending() cannot be called concurrently for the same
event, then there is *no* way for evtchn->last_{priority, vcpu} to be
updated concurrently.
I'm simply unconvinced that the code indeed fully reflects
the original intentions.
Do you mind (re-)sharing what was the original intentions?
Cheers,
--
Julien Grall