• Borislav Petkov's avatar
    EDAC: Fix lockdep splat · f46ef77d
    Borislav Petkov authored
    commit 88d84ac97378c2f1d5fec9af1e8b7d9a662d6b00 upstream.
    
    Fix the following:
    
    BUG: key ffff88043bdd0330 not in .data!
    ------------[ cut here ]------------
    WARNING: at kernel/lockdep.c:2987 lockdep_init_map+0x565/0x5a0()
    DEBUG_LOCKS_WARN_ON(1)
    Modules linked in: glue_helper sb_edac(+) edac_core snd acpi_cpufreq lrw gf128mul ablk_helper iTCO_wdt evdev i2c_i801 dcdbas button cryptd pcspkr iTCO_vendor_support usb_common lpc_ich mfd_core soundcore mperf processor microcode
    CPU: 2 PID: 599 Comm: modprobe Not tainted 3.10.0 #1
    Hardware name: Dell Inc. Precision T3600/0PTTT9, BIOS A08 01/24/2013
     0000000000000009 ffff880439a1d920 ffffffff8160a9a9 ffff880439a1d958
     ffffffff8103d9e0 ffff88043af4a510 ffffffff81a16e11 0000000000000000
     ffff88043bdd0330 0000000000000000 ffff880439a1d9b8 ffffffff8103dacc
    Call Trace:
      dump_stack
      warn_slowpath_common
      warn_slowpath_fmt
      lockdep_init_map
      ? trace_hardirqs_on_caller
      ? trace_hardirqs_on
      debug_mutex_init
      __mutex_init
      bus_register
      edac_create_sysfs_mci_device
      edac_mc_add_mc
      sbridge_probe
      pci_device_probe
      driver_probe_device
      __driver_attach
      ? driver_probe_device
      bus_for_each_dev
      driver_attach
      bus_add_driver
      driver_register
      __pci_register_driver
      ? 0xffffffffa0010fff
      sbridge_init
      ? 0xffffffffa0010fff
      do_one_initcall
      load_module
      ? unset_module_init_ro_nx
      SyS_init_module
      tracesys
    ---[ end trace d24a70b0d3ddf733 ]---
    EDAC MC0: Giving out device to 'sbridge_edac.c' 'Sandy Bridge Socket#0': DEV 0000:3f:0e.0
    EDAC sbridge: Driver loaded.
    
    What happens is that bus_register needs a statically allocated lock_key
    because the last is handed in to lockdep. However, struct mem_ctl_info
    embeds struct bus_type (the whole struct, not a pointer to it) and the
    whole thing gets dynamically allocated.
    
    Fix this by using a statically allocated struct bus_type for the MC bus.
    Signed-off-by: default avatarBorislav Petkov <bp@suse.de>
    Acked-by: default avatarMauro Carvalho Chehab <mchehab@infradead.org>
    Cc: Markus Trippelsdorf <markus@trippelsdorf.de>
    Signed-off-by: default avatarTony Luck <tony.luck@intel.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    f46ef77d
i5100_edac.c 30.3 KB