xen-devel.lists.xenproject.org archive mirror
 help / color / mirror / Atom feed
* Why xen-pirq chip use startup_irq() for .irq_enable?
@ 2017-07-27 13:04 shuo.a.liu
  2017-07-27 16:06 ` Boris Ostrovsky
  0 siblings, 1 reply; 5+ messages in thread
From: shuo.a.liu @ 2017-07-27 13:04 UTC (permalink / raw)
  To: xen-devel; +Cc: Boris Ostrovsky, David Vrabel

Hi,
Here is a device has xen-pirq-MSI interrupt. I found dom0 might lost
interrupt during driver irq_disable/irq_enable.
There is a pair of irq_disable/enable in driver. Here is the scenario,
  1. irq_disable(dev_irq) -> disable_dynirq -> mask_evtchn(dev_irq channel)
  2. dev interrupt raised by HW and Xen mark its evtchn as *pending* status.
  3. irq_enable(dev_irq) -> startup_pirq -> eoi_pirq ->
     clear_evtchn(channel of dev_irq) -> clear *pending* status
  4. consume_one_event process the dev irq event without pending bit assert
     which result in interrupt lost once.
  5. No HW interrupt raising anymore.

The first question here is why using startup_irq for .irq_enable rather than
enable_dynirq ? startup_irq will do eoi_pirq who clear the mask bit and pending
bit of the channel while enable_dynirq just only unmask the channel.

Second question is that what's the purpose of eoi_pirq in startup_irq?

BTW, i can resolve my problem by below patch. Does it make sence?

---
 drivers/xen/events/events_base.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/xen/events/events_base.c b/drivers/xen/events/events_base.c
index 4bf7a34..341c456 100644
--- a/drivers/xen/events/events_base.c
+++ b/drivers/xen/events/events_base.c
@@ -582,7 +582,7 @@ static void shutdown_pirq(struct irq_data *data)
 
 static void enable_pirq(struct irq_data *data)
 {
-	startup_pirq(data);
+	enable_dynirq(data);
 }
 
 static void disable_pirq(struct irq_data *data)
-- 


Thanks.
Shuo A


_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel

^ permalink raw reply related	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2017-07-29 15:35 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-07-27 13:04 Why xen-pirq chip use startup_irq() for .irq_enable? shuo.a.liu
2017-07-27 16:06 ` Boris Ostrovsky
2017-07-28  1:25   ` shuo.a.liu
2017-07-28 21:55     ` Boris Ostrovsky
2017-07-29 15:32       ` shuo.a.liu

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).