Re: [patch 1/2] x86, fpu: split FPU state from task struct - v4

Suresh Siddha
2008-03-06T19:04:45Z

On Thu, Mar 06, 2008 at 04:18:32PM +0100, Ingo Molnar wrote:
>
> > > Split the FPU save area from the task struct. This allows easy
> > > migration of FPU context, and it's generally cleaner. It also allows
> > > the following two optimizations:
>
> the atomicity bug is still there:
>
> [ 1230.409772] BUG: sleeping function called from invalid context at mm/slab.c:>
> [ 1230.409772] in_atomic():0, irqs_disabled():1
> [ 1230.409772] Pid: 1187, comm: awk Not tainted 2.6.25-rc4-sched-devel.git-x86->[ 1230.409772]
> [ 1230.409772] Call Trace:
> [ 1230.409772] [<ffffffff8022255b>] ? do_page_fault+0x3eb/0xa80
> [ 1230.409772] [<ffffffff8022c68e>] __might_sleep+0xce/0xf0
> [ 1230.409772] [<ffffffff8028c299>] kmem_cache_alloc+0xf9/0x120
> [ 1230.409772] [<ffffffff80214338>] init_fpu+0x98/0x100
> [ 1230.409772] [<ffffffff8020ec10>] math_state_restore+0x20/0x80
> [ 1230.409772] [<ffffffff809b8cc9>] error_exit+0x0/0x60
>
> config and bootlog attached.

My bad. I overlooked the fact that exception handling by the processor
automatically disables interrupts and my tested configs didn't have
CONFIG_DEBUG_SPINLOCK_SLEEP set. My previous fix took care of only 32bit kernels
as they were disabling interrupts explicitly for PREEMPT kernels.

I will post a -v5 fixing this.

> # CONFIG_DEBUG_KERNEL is not set

BTW, In the .config you sent, you don't have CONFIG_DEBUG_SPINLOCK_SLEEP or
CONFIG_DEBUG_KERNEL set. How come you are seeing those backtraces?

thanks,
suresh