Skip to content

Commit

Permalink
microblaze: Lockdep support
Browse files Browse the repository at this point in the history
Microblaze needs to do lock_init very soon because MMU init calls lock functions.

Here is the explanation from Peter Zijlstra why we have to enable
__ARCH_WANTS_INTERRUPTS_ON_CTSW.

"So we schedule while holding rq->lock (for obvious reasons), but since
lockdep tracks held locks per tasks, we need to transfer the held state
from the prev to the next task. We do this by explicity calling
spin_release(&rq->lock) in context_switch() right before switch_to(),
and calling spin_acquire(&rq->lock) in
finish_task_switch()->finish_lock_switch().

Now, for some reason lockdep thinks that interrupts got enabled over the
context switch (git grep __ARCH_WANTS_INTERRUPTS_ON_CTSW arch/microblaze
doesn't seem to turn up anything).

Clearly trying to acquire the rq->lock with interrupts enabled is a bad
idea and lockdep warns you about this."

Signed-off-by: Michal Simek <monstr@monstr.eu>
  • Loading branch information
Michal Simek committed Dec 14, 2009
1 parent 519e9f4 commit bf2d809
Show file tree
Hide file tree
Showing 3 changed files with 7 additions and 0 deletions.
3 changes: 3 additions & 0 deletions arch/microblaze/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,9 @@ config GENERIC_CSUM
config STACKTRACE_SUPPORT
def_bool y

config LOCKDEP_SUPPORT
def_bool y

config PCI
def_bool n

Expand Down
2 changes: 2 additions & 0 deletions arch/microblaze/include/asm/system.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@
#include <asm-generic/cmpxchg.h>
#include <asm-generic/cmpxchg-local.h>

#define __ARCH_WANT_INTERRUPTS_ON_CTXSW

struct task_struct;
struct thread_info;

Expand Down
2 changes: 2 additions & 0 deletions arch/microblaze/kernel/setup.c
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,8 @@ void __init machine_early_init(const char *cmdline, unsigned int ram,
strlcpy(cmd_line, cmdline, COMMAND_LINE_SIZE);
#endif

lockdep_init();

/* initialize device tree for usage in early_printk */
early_init_devtree((void *)_fdt_start);

Expand Down

0 comments on commit bf2d809

Please sign in to comment.