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

[Xen-devel] still lockup due to interrupt lost after backport from 2.6.31 to 2.6.32 in events.c


  • To: xen-devel@xxxxxxxxxxxxxxxxxxx
  • From: alice wan <wanjia19870902@xxxxxxxxx>
  • Date: Fri, 15 Oct 2010 15:51:07 +0800
  • Delivery-date: Fri, 15 Oct 2010 00:52:04 -0700
  • Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:date:message-id:subject:from:to:content-type; b=KKGbqSYIqdo42JASGHWq5A07v5xJy3r1+ZBWsVVYwYSHxGZu6zpR104mXh9AxG3zlG 0aqWHKATZC1keF+YjSh1EdR9N5u+ls7yKpOpXlw6qv/00MBWpjV9p3+n/zRhD9JPN1l5 qmpr1cgl7UJELVJ0ydvUDnS/DuKheaR7m56XU=
  • List-id: Xen developer discussion <xen-devel.lists.xensource.com>

Hi all,
 
Recently i met a problem about domU lockup. i traced this problem and knew that it may be caused by irq balancing.

From  xen-devel community, it's known that the workaround is to turn off irq balancing.
After testing , it actually worked.

However, i studied the kernel of 2.6.32 which has already fix this bug, there're some doubt about the difference between 2.6.32 and 2.6.31(pvops),  because after i tried to backport this patch, domU still locked up.

In my opinion , the difference is mainly in events.c, the important difference as following:

1. void xen_evtchn_do_upcall(struct pt_regs *regs)

                               int irq = evtchn_to_irq[port];
                               struct irq_desc *desc;
+                               mask_evtchn(port);
+                               clear_evtchn(port);
+
                               if (irq != -1) {

2. static void ack_pirq(unsigned int irq)

                move_masked_irq(irq);
-                if (VALID_EVTCHN(evtchn)) {
-                        mask_evtchn(evtchn);
-                        clear_evtchn(evtchn);
-                }
+               pirq_eoi(irq);

here,  pirq_eoi 'll be called by handle_fasteoi_irq function in   desc->chip->eoi(irq).

3. use percpu_interrupts for IPIs and VIRQs

4. use fasteoi handler for pirq ,events,msi.

my question is how 2.6.31 drops interrupts if  migrate an irq beween vcpus while an event is pending and what main points that 2.6.32 fixes about not dropping are.

i wanna know whether it matters with the advance of mask_evtchn in Point 1 to avoid new interrupt coming or whether it matters with eoi called by handle_fasteoi_irq when status is in IRQ_INPROGRESS.  because handle_level_irq and handle_fasteoi_irq is almost the same except the branch of  IRQ_INPROGRESS.  Or it matters with other points that i haven't find.

Deeply looking forward to your disabusing and advice.

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel

 


Rackspace

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