https://github.com/torvalds/linux
Revision 3419c75e15f82c3ab09bd944fddbde72c9e4b3ea authored by Alex Chiang on 28 January 2009, 21:59:18 UTC, committed by Jesse Barnes on 05 February 2009, 00:58:40 UTC
We only want to disable ASPM when the last function is removed from
the parent's device list. We determine this by checking to see if
the parent's device list is completely empty.

Unfortunately, we never hit that code because the parent is considered
an upstream port, and never had an ASPM link_state associated with it.

The early check for !link_state causes us to return early, we never
discover that our device list is empty, and thus we never remove the
downstream ports' link_state nodes.

Instead of checking to see if the parent's device list is empty, we can
check to see if we are the last device on the list, and if so, then we
know that we can clean up properly.

Cc: Shaohua Li <shaohua.li@intel.com>
Signed-off-by: Alex Chiang <achiang@hp.com>
Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
1 parent eda58a8
History
Tip revision: 3419c75e15f82c3ab09bd944fddbde72c9e4b3ea authored by Alex Chiang on 28 January 2009, 21:59:18 UTC
PCI: properly clean up ASPM link state on device remove
Tip revision: 3419c75
File Mode Size
proc-mn103e010
unit-asb2303
unit-asb2305
.gitignore -rw-r--r-- 10 bytes
Kbuild -rw-r--r-- 39 bytes
atomic.h -rw-r--r-- 3.7 KB
auxvec.h -rw-r--r-- 52 bytes
bitops.h -rw-r--r-- 5.6 KB
bug.h -rw-r--r-- 862 bytes
bugs.h -rw-r--r-- 561 bytes
busctl-regs.h -rw-r--r-- 7.8 KB
byteorder.h -rw-r--r-- 125 bytes
cache.h -rw-r--r-- 2.0 KB
cacheflush.h -rw-r--r-- 4.2 KB
checksum.h -rw-r--r-- 2.2 KB
cpu-regs.h -rw-r--r-- 14.3 KB
cputime.h -rw-r--r-- 33 bytes
current.h -rw-r--r-- 922 bytes
delay.h -rw-r--r-- 597 bytes
device.h -rw-r--r-- 32 bytes
div64.h -rw-r--r-- 2.7 KB
dma-mapping.h -rw-r--r-- 6.4 KB
dma.h -rw-r--r-- 3.1 KB
dmactl-regs.h -rw-r--r-- 4.6 KB
elf.h -rw-r--r-- 4.3 KB
emergency-restart.h -rw-r--r-- 43 bytes
errno.h -rw-r--r-- 31 bytes
exceptions.h -rw-r--r-- 4.8 KB
fb.h -rw-r--r-- 602 bytes
fcntl.h -rw-r--r-- 31 bytes
fpu.h -rw-r--r-- 2.3 KB
frame.inc -rw-r--r-- 2.2 KB
futex.h -rw-r--r-- 31 bytes
gdb-stub.h -rw-r--r-- 5.4 KB
hardirq.h -rw-r--r-- 1.7 KB
highmem.h -rw-r--r-- 2.8 KB
hw_irq.h -rw-r--r-- 483 bytes
ide.h -rw-r--r-- 1.1 KB
intctl-regs.h -rw-r--r-- 2.4 KB
io.h -rw-r--r-- 6.8 KB
ioctl.h -rw-r--r-- 31 bytes
ioctls.h -rw-r--r-- 2.7 KB
ipc.h -rw-r--r-- 29 bytes
ipcbuf.h -rw-r--r-- 619 bytes
irq.h -rw-r--r-- 977 bytes
irq_regs.h -rw-r--r-- 683 bytes
kdebug.h -rw-r--r-- 561 bytes
kmap_types.h -rw-r--r-- 702 bytes
kprobes.h -rw-r--r-- 1.5 KB
linkage.h -rw-r--r-- 593 bytes
local.h -rw-r--r-- 31 bytes
mc146818rtc.h -rw-r--r-- 26 bytes
mman.h -rw-r--r-- 1.0 KB
mmu.h -rw-r--r-- 395 bytes
mmu_context.h -rw-r--r-- 3.8 KB
module.h -rw-r--r-- 759 bytes
msgbuf.h -rw-r--r-- 982 bytes
mutex.h -rw-r--r-- 637 bytes
nmi.h -rw-r--r-- 456 bytes
page.h -rw-r--r-- 3.6 KB
page_offset.h -rw-r--r-- 263 bytes
param.h -rw-r--r-- 888 bytes
pci.h -rw-r--r-- 3.3 KB
percpu.h -rw-r--r-- 32 bytes
pgalloc.h -rw-r--r-- 1.5 KB
pgtable.h -rw-r--r-- 15.6 KB
pio-regs.h -rw-r--r-- 7.5 KB
poll.h -rw-r--r-- 30 bytes
posix_types.h -rw-r--r-- 3.5 KB
processor.h -rw-r--r-- 4.5 KB
ptrace.h -rw-r--r-- 2.6 KB
reset-regs.h -rw-r--r-- 1.9 KB
resource.h -rw-r--r-- 34 bytes
rtc-regs.h -rw-r--r-- 3.6 KB
rtc.h -rw-r--r-- 928 bytes
scatterlist.h -rw-r--r-- 1.7 KB
sections.h -rw-r--r-- 34 bytes
sembuf.h -rw-r--r-- 696 bytes
serial-regs.h -rw-r--r-- 7.5 KB
serial.h -rw-r--r-- 1.1 KB
setup.h -rw-r--r-- 546 bytes
shmbuf.h -rw-r--r-- 1.1 KB
shmparam.h -rw-r--r-- 143 bytes
sigcontext.h -rw-r--r-- 1.2 KB
siginfo.h -rw-r--r-- 33 bytes
signal.h -rw-r--r-- 3.8 KB
smp.h -rw-r--r-- 505 bytes
socket.h -rw-r--r-- 1.2 KB
sockios.h -rw-r--r-- 340 bytes
spinlock.h -rw-r--r-- 525 bytes
stat.h -rw-r--r-- 1.6 KB
statfs.h -rw-r--r-- 32 bytes
string.h -rw-r--r-- 1.0 KB
swab.h -rw-r--r-- 986 bytes
system.h -rw-r--r-- 5.6 KB
termbits.h -rw-r--r-- 4.6 KB
termios.h -rw-r--r-- 2.6 KB
thread_info.h -rw-r--r-- 4.7 KB
timer-regs.h -rw-r--r-- 14.4 KB
timex.h -rw-r--r-- 868 bytes
tlb.h -rw-r--r-- 941 bytes
tlbflush.h -rw-r--r-- 2.1 KB
topology.h -rw-r--r-- 34 bytes
types.h -rw-r--r-- 864 bytes
uaccess.h -rw-r--r-- 13.1 KB
ucontext.h -rw-r--r-- 673 bytes
unaligned.h -rw-r--r-- 678 bytes
unistd.h -rw-r--r-- 10.9 KB
user.h -rw-r--r-- 1.9 KB
vga.h -rw-r--r-- 471 bytes
xor.h -rw-r--r-- 29 bytes

back to top