Hi Alex, Sorry, I made a patch to take out vfree() outside of IRQ disabled. I checked that the call trace did not come out on the SMP Dom0.
Thanks, KAZ Signed-off-by: Kazuhiro Suzuki <[EMAIL PROTECTED]> From: Alex Williamson <[EMAIL PROTECTED]> Subject: Re: [PATCH][MCA] avoid allocating memory in interrupt context (was Re: [Xen-ia64-devel] [PATCH 2/3] xencomm consolidation: linux side) Date: Tue, 04 Sep 2007 10:37:06 -0600 > On Sun, 2007-09-02 at 16:04 -0600, Alex Williamson wrote: > > On Tue, 2007-08-28 at 20:48 +0900, SUZUKI Kazuhiro wrote: > > > Hi, > > > > > > The attached patch fixes to avoid allocating memory in interrupt > > > context. > > > I tried to allocate xencomm_handle in IA64_LOG_ALLOCATE instead of > > > allocating each time. > > > > Applied. Thanks, > > Oops, looks like this introduced another problem: > > BUG: warning at > /home/awilliam/xen/20070902-patches/linux-2.6.18-xen.hg/arch/ia64/kernel/smp.c:341/smp_call_function() > > Call Trace: > [<a00000010001d520>] show_stack+0x40/0xa0 > sp=e0000001b51cfb70 bsp=e0000001b51c9588 > [<a00000010001d5b0>] dump_stack+0x30/0x60 > sp=e0000001b51cfd40 bsp=e0000001b51c9570 > [<a000000100061b40>] smp_call_function+0x180/0x440 > sp=e0000001b51cfd40 bsp=e0000001b51c9528 > [<a000000100094fe0>] on_each_cpu+0x40/0x1c0 > sp=e0000001b51cfd60 bsp=e0000001b51c94f0 > [<a000000100060ed0>] smp_flush_tlb_all+0x30/0x60 > sp=e0000001b51cfd60 bsp=e0000001b51c94d8 > [<a000000100115250>] unmap_vm_area+0x390/0x440 > sp=e0000001b51cfd60 bsp=e0000001b51c9490 > [<a000000100115390>] __remove_vm_area+0x90/0x100 > sp=e0000001b51cfd70 bsp=e0000001b51c9458 > [<a000000100115430>] remove_vm_area+0x30/0x80 > sp=e0000001b51cfd70 bsp=e0000001b51c9430 > [<a0000001001154f0>] __vunmap+0x70/0x280 > sp=e0000001b51cfd70 bsp=e0000001b51c9400 > [<a000000100115950>] vfree+0x90/0xc0 > sp=e0000001b51cfd70 bsp=e0000001b51c93d8 > [<a00000010003ba40>] salinfo_log_release+0x140/0x260 > sp=e0000001b51cfd70 bsp=e0000001b51c93a8 > ... > > We can't vfree() with IRQs disabled. Can you please find an > alternate algorithm for freeing the log area and submit a follow up > patch? Thanks, > > Alex > > -- > Alex Williamson HP Open Source & Linux Org. >
diff -r df2d73ab847a arch/ia64/kernel/salinfo.c --- a/arch/ia64/kernel/salinfo.c Tue Aug 28 12:44:22 2007 -0600 +++ b/arch/ia64/kernel/salinfo.c Thu Sep 06 12:29:32 2007 +0900 @@ -408,6 +408,7 @@ salinfo_log_release(struct inode *inode, #ifdef CONFIG_XEN if (is_running_on_xen()) { struct list_head *pos, *n; + ia64_mca_xencomm_t *found_entry = NULL; unsigned long flags; spin_lock_irqsave(&ia64_mca_xencomm_lock, flags); @@ -417,10 +418,15 @@ salinfo_log_release(struct inode *inode, entry = list_entry(pos, ia64_mca_xencomm_t, list); if (entry->record == data->log_buffer) { list_del(&entry->list); - vfree(entry); + found_entry = entry; + break; } } spin_unlock_irqrestore(&ia64_mca_xencomm_lock, flags); + if (found_entry) { + xencomm_free(found_entry->handle); + vfree(found_entry); + } } #endif vfree(data->log_buffer);
_______________________________________________ Xen-ia64-devel mailing list Xen-ia64-devel@lists.xensource.com http://lists.xensource.com/xen-ia64-devel