linux/drivers/base
Bjorn Helgaas 4fa3e78be7 Driver core: treat unregistered bus_types as having no devices
A bus_type has a list of devices (klist_devices), but the list and the
subsys_private structure that contains it are not initialized until the
bus_type is registered with bus_register().

The panic/reboot path has fixups that look up devices in pci_bus_type.  If
we panic before registering pci_bus_type, the bus_type exists but the list
does not, so mach_reboot_fixups() trips over a null pointer and panics
again:

    mach_reboot_fixups
      pci_get_device
        ..
          bus_find_device(&pci_bus_type, ...)
            bus->p is NULL

Joonsoo reported a problem when panicking before PCI was initialized.
I think this patch should be sufficient to replace the patch he posted
here: https://lkml.org/lkml/2012/12/28/75 ("[PATCH] x86, reboot: skip
reboot_fixups in early boot phase")

Reported-by: Joonsoo Kim <js1304@gmail.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Cc: stable <stable@vger.kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2013-02-03 17:55:29 -08:00
..
power Merge branch 'pm-sleep' 2013-01-06 00:36:17 +01:00
regmap Merge remote-tracking branch 'regmap/fix/debugfs' into tmp 2013-01-24 19:04:16 +08:00
attribute_container.c drivers: base: Convert dev_printk(KERN_<LEVEL> to dev_<level>( 2012-10-30 17:38:43 -07:00
base.h driver core: move the deferred probe pointer into the private area 2012-03-08 12:17:22 -08:00
bus.c Driver core: treat unregistered bus_types as having no devices 2013-02-03 17:55:29 -08:00
class.c Revert "driver core: check start node in klist_iter_init_node" 2012-04-19 19:17:30 -07:00
core.c Revert "drivers: base: Convert print_symbol to %pSR" 2013-01-17 13:10:23 -08:00
cpu.c drivers/base/cpu.c: Fix typo in comment 2013-01-16 12:34:34 -08:00
dd.c [SCSI] cleanup usages of scsi_complete_async_scans 2012-07-20 09:25:22 +01:00
devres.c drivers: base: Convert dev_printk(KERN_<LEVEL> to dev_<level>( 2012-10-30 17:38:43 -07:00
devtmpfs.c vfs: turn is_dir argument to kern_path_create into a lookup_flags arg 2012-12-20 18:50:02 -05:00
dma-buf.c dma_buf: Cleanup dma_buf_fd 2013-01-17 12:57:07 -08:00
dma-coherent.c drivers: dma-coherent: Fix typo in dma_mmap_from_coherent documentation 2012-10-23 14:05:32 +02:00
dma-contiguous.c drivers: cma: represent physical addresses as phys_addr_t 2012-12-11 09:28:09 +01:00
dma-mapping.c [media] dma-mapping: fix dma_common_get_sgtable() conditional compilation 2012-11-27 09:42:31 -02:00
driver.c driver core: don't trigger uevent after failure 2012-07-17 10:40:23 -07:00
firmware_class.c firmware: make sure the fw file size is not 0 2013-01-16 09:09:53 -08:00
firmware.c
hypervisor.c drivers/base: Add export.h for EXPORT_SYMBOL/THIS_MODULE as required. 2011-10-31 19:31:38 -04:00
init.c driver-core: implement 'sysdev' functionality for regular devices and buses 2011-12-14 14:29:38 -08:00
isa.c dma-mapping: replace all DMA_24BIT_MASK macro with DMA_BIT_MASK(24) 2009-04-07 08:31:12 -07:00
Kconfig Merge 3.7-rc3 into driver-core-next 2012-10-29 08:46:28 -07:00
Makefile drivers: add Contiguous Memory Allocator 2012-05-21 15:09:37 +02:00
map.c
memory.c mm, memory-hotplug: dynamic configure movable memory and portion memory 2012-12-11 17:22:28 -08:00
module.c driver core: module.c: Use kasprintf 2010-05-21 09:37:29 -07:00
node.c numa: add CONFIG_MOVABLE_NODE for movable-dedicated node 2012-12-12 17:38:34 -08:00
platform.c Driver core updates for 3.8-rc1 2012-12-11 13:13:55 -08:00
soc.c mode_t whack-a-mole: ->is_visible() returns umode_t... 2012-05-29 23:28:42 -04:00
syscore.c PM: Reintroduce dropped call to check_wakeup_irqs 2011-07-11 10:51:49 +02:00
topology.c cpu: convert 'cpu' and 'machinecheck' sysdev_class to a regular subsystem 2011-12-21 14:29:42 -08:00
transport_class.c drivers/base: transport_class explicitly requires EXPORT_SYMBOL 2011-10-31 19:31:15 -04:00