[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-ia64-devel] [Patch] fix warnings while rebooting
Hi, Aron >Hi Akio, > >I'm sorry, but I'm confused by your message. Are you saying there are >two problems here? One problem in xen/ia64 and one problem in the >e1000 driver? Yes, there are two problem here. 1. "double free" message is happened 2. CallTrace is happened problem 1 is a issue of free_irq_vector. My patch fix this problem. problem 2 is a issue of some network drivers. suspend handlers of e1000, tg3 and so on are not called free_irq(). free_irq() is called by only close handlers of them. So if close handlers are not called before suspend handlers, iosapic_unregister_intr() call WARN_ON(1). iosapic_unregister_intr (unsigned int gsi) { unsigned long flags; int irq, vector, index; [snip...] memset(&iosapic_intr_info[vector], 0, sizeof(struct iosapic_intr_info)); iosapic_intr_info[vector].low32 |= IOSAPIC_MASK; INIT_LIST_HEAD(&iosapic_intr_info[vector].rtes); if (idesc->action) { printk(KERN_ERR "interrupt handlers still exist on" "IRQ %u\n", irq); WARN_ON(1); <----------------HERE!!!!!!!!!! } /* Free the interrupt vector */ free_irq_vector(vector); } [snip...] } I think there are three solutions. A. do "# /etc/xen/scripts/network-bridge stop" before reboot I think this is the best solution. But if we do that, where is better? /etc/init.d/network or /etc/init.d/xend? And How do we do in the case of routing mode? B. apply the e1000 patch(I think other driver also apply likely patch.) I think the better solution. But I'm not familiar with e1000 driver. So I'd like to review it by RH Engineer and community people. The patch is the below. http://www.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=edd106fc8ac1826dbe231b70ce0762db24133e5c;hp=e78181feb0b94fb6afeaef3b28d4f5df1b847c98 C. ifdef the WARN_ON(1) in iosapic_unregister_intr. This is the easiest solution. And because Xen don't do I/O Hotplug, this may be the best. >You sent a patch, I guess that is for xen-ia64-unstable, right? If >that is ready to be applied, could you include a description of the >problem and what the patch does? > Yes, my patch is for xen-ia64-unstable. My patch fix problem 1 ("double free" messages). I already have patches for RHEL5 beta. I'll send you soon if my patch is applied in xen-ia64-unstable. - Bug escription Please see the following two functions. assign_irq_vector() is para-virulized, free_irq_vector() is not para-virtualized. So ia64_vector_mask is not used in dom0 kernel. Though free_irq_vector() try to clear ia64_vector_mask in dom0 kernel, ia64_vector_mask is always zero, so the double free message is happened. int assign_irq_vector (int irq) { int pos, vector; #ifdef CONFIG_XEN if (is_running_on_xen()) { extern int xen_assign_irq_vector(int); return xen_assign_irq_vector(irq); } #endif again: pos = find_first_zero_bit(ia64_vector_mask, IA64_NUM_DEVICE_VECTORS); vector = IA64_FIRST_DEVICE_VECTOR + pos; if (vector > IA64_LAST_DEVICE_VECTOR) return -ENOSPC; if (test_and_set_bit(pos, ia64_vector_mask)) goto again; return vector; } void free_irq_vector (int vector) { int pos; if (vector < IA64_FIRST_DEVICE_VECTOR || vector > IA64_LAST_DEVICE_VECTOR) return; pos = vector - IA64_FIRST_DEVICE_VECTOR; if (!test_and_clear_bit(pos, ia64_vector_mask)) printk(KERN_WARNING "%s: double free!\n", __FUNCTION__); <----HERE!!!! } - What the patch does? I do that free_irq_vector() is para-virtualized. >Regarding the e1000 bug, could you comment in the RH bug? >https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=208599 > Yes. Best Regards, Akio Takebe _______________________________________________ Xen-ia64-devel mailing list Xen-ia64-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-ia64-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |