diff options
author | dim <dim@FreeBSD.org> | 2010-11-25 18:36:44 +0000 |
---|---|---|
committer | dim <dim@FreeBSD.org> | 2010-11-25 18:36:44 +0000 |
commit | ce4ad7ab6156be02b01fdf19735a19a9c4d5a8ad (patch) | |
tree | 7fb434479af2e2b02b32b54ca0e7312065b0f6ed /sys/dev/pci/pci.c | |
parent | 71b42433f68a7680bcd07cef6c81b5a9bbe4e948 (diff) | |
parent | 835f186e056004cd67b3e5a1ee17f3ae1202646c (diff) | |
download | FreeBSD-src-ce4ad7ab6156be02b01fdf19735a19a9c4d5a8ad.zip FreeBSD-src-ce4ad7ab6156be02b01fdf19735a19a9c4d5a8ad.tar.gz |
Sync: merge r215709 through r215824 from ^/head.
Diffstat (limited to 'sys/dev/pci/pci.c')
-rw-r--r-- | sys/dev/pci/pci.c | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/sys/dev/pci/pci.c b/sys/dev/pci/pci.c index 6069b6d..e3b6159 100644 --- a/sys/dev/pci/pci.c +++ b/sys/dev/pci/pci.c @@ -3022,8 +3022,35 @@ pci_resume(device_t dev) if (!device_is_attached(child)) pci_cfg_save(child, dinfo, 1); } + + /* + * Resume critical devices first, then everything else later. + */ + for (i = 0; i < numdevs; i++) { + child = devlist[i]; + switch (pci_get_class(child)) { + case PCIC_DISPLAY: + case PCIC_MEMORY: + case PCIC_BRIDGE: + case PCIC_BASEPERIPH: + DEVICE_RESUME(child); + break; + } + } + for (i = 0; i < numdevs; i++) { + child = devlist[i]; + switch (pci_get_class(child)) { + case PCIC_DISPLAY: + case PCIC_MEMORY: + case PCIC_BRIDGE: + case PCIC_BASEPERIPH: + break; + default: + DEVICE_RESUME(child); + } + } free(devlist, M_TEMP); - return (bus_generic_resume(dev)); + return (0); } static void |