[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [win-pv-devel] Advice on evtchn interrupt handling

On 2015-12-09 11:44, Paul Durrant wrote:
>> -----Original Message-----
>> From: win-pv-devel-bounces@xxxxxxxxxxxxxxxxxxxx [mailto:win-pv-devel-
>> bounces@xxxxxxxxxxxxxxxxxxxx] On Behalf Of Rafal Wojdyla
>> Sent: 09 December 2015 10:19
>> To: win-pv-devel@xxxxxxxxxxxxxxxxxxxx
>> Subject: [win-pv-devel] Advice on evtchn interrupt handling
>> Hi,
>> I found an issue in my evtchn handling in xeniface that I'm not sure how
>> to properly fix. Namely, the interrupt callback that's assigned for a
>> particular channel can be called before its queued DPC (that signals the
>> caller-provided event) finishes. In such case the interrupt callback
>> fails to insert the DPC again and an event is lost, potentially causing
>> a vchan "deadlock" down the way.
> Hi Rafal,
> That shouldn't be the case. Windows de-queues a DPC before running for 
> precisely this kind of reason. I.e. just because your DPC is running, it 
> should not stop another from being queued. Are you definitely seeing a 
> failure to queue even when no DPC is actually queued? What you may actually 
> be getting caught by is evtchn auto-masking. If you have enabled auto-masking 
> then you need to explicitly unmask at the end of your DPC. (The transmitter 
> and receiver ring DPCs in XENVIF are a good example of this).
> Cheers,
>   Paul
Here's the relevant bit:

I check the result of KeInsertQueueDpc() and I definitely see it fail
sometimes, even if the HVM only has 1 vcpu. My DPC unmasks the channel
after setting an event so this shouldn't be the reason.

>> Any advice on how to approach this? The interrupt callback runs at
>> HIGH_LEVEL which is an issue when it comes to synchronization with some
>> other code that could take care of such "pending" events.
>> Also I wonder if the kernel differentiates DPCs only by their KDPC
>> address, or also by arguments passed to KeInsertQueueDpc()?
RafaÅ WojdyÅa
Qubes Tools for Windows developer

win-pv-devel mailing list



Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.