From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from cn.fujitsu.com ([222.73.24.84]:18709 "EHLO song.cn.fujitsu.com" rhost-flags-OK-FAIL-OK-OK) by vger.kernel.org with ESMTP id S1754612Ab3BFKKG (ORCPT ); Wed, 6 Feb 2013 05:10:06 -0500 Message-ID: <51122BED.8090308@cn.fujitsu.com> Date: Wed, 06 Feb 2013 18:09:49 +0800 From: Gu Zheng MIME-Version: 1.0 To: Joe Lawrence CC: linux-pci@vger.kernel.org, Matthew Garrett , Myron Stowe , David Bulkow Subject: Re: [PATCH 1/2] PCI: ASPM exit link state code could skip devices References: In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1 Sender: linux-pci-owner@vger.kernel.org List-ID: On 01/19/2013 02:23 AM, Joe Lawrence wrote: >>>From 3a51bbad5555ba6c6e144aa5176c8112eb449325 Mon Sep 17 00:00:00 2001 > From: Joe Lawrence > Date: Tue, 15 Jan 2013 14:51:57 -0500 > Subject: [PATCH 1/2] PCI: ASPM exit link state code could skip devices > > On PCI bus hotplug removal, pcie_aspm_exit_link_state could potentially skip > parent devices that have link_state allocated. Instead of exiting early if > a given device is not PCIe, check that the device's parent is PCIe. This > enables pcie_aspm_exit_link_state to properly clean up parent link_state when > the last function in a slot might not be PCIe. > > Reviewed-by: David Bulkow > Signed-off-by: Joe Lawrence > --- > drivers/pci/pcie/aspm.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/pci/pcie/aspm.c b/drivers/pci/pcie/aspm.c > index b52630b..6122447 100644 > --- a/drivers/pci/pcie/aspm.c > +++ b/drivers/pci/pcie/aspm.c > @@ -634,7 +634,7 @@ void pcie_aspm_exit_link_state(struct pci_dev *pdev) > struct pci_dev *parent = pdev->bus->self; > struct pcie_link_state *link, *root, *parent_link; > > - if (!pci_is_pcie(pdev) || !parent || !parent->link_state) > + if (!parent || !pci_is_pcie(parent) || !parent->link_state) > return; > if ((pci_pcie_type(parent) != PCI_EXP_TYPE_ROOT_PORT) && > (pci_pcie_type(parent) != PCI_EXP_TYPE_DOWNSTREAM)) Hi Joe, We encounter the issue you mentioned above, so I used your patch to try to fix it, but it seems not helpful. Could you please help to look into it ? Thanks, Gu *test script* echo -n 1 > /sys/bus/pci/devices/0000\:10\:00.0/remove ; echo -n 1 > /sys/bus/pci/devices/0000\:1a\:01.0/remove *pci topology tree* +-09.0-[10-1e]----00.0-[11-1e]--+-00.0-[12-18]----00.0-[13-18]--+-00.0-[14]--+-00.0 | | | \-00.1 | | +-01.0-[15]--+-00.0 | | | \-00.1 | | +-02.0-[16]----00.0 | | +-03.0-[17]----00.0 | | \-04.0-[18]-- | \-01.0-[19-1e]----00.0-[1a-1e]--+-00.0-[1b]-- | +-01.0-[1c]--+-00.0 | | \-00.1 | +-02.0-[1d]-- | \-03.0-[1e]-- $ lspci -vs 10:00.0 10:00.0 PCI bridge: Integrated Device Technology, Inc. Device 807f (rev 02) (prog-if 00 [Normal decode]) Flags: bus master, fast devsel, latency 0 Bus: primary=10, secondary=11, subordinate=1e, sec-latency=0 I/O behind bridge: 00001000-00005fff Memory behind bridge: 92a00000-937fffff Prefetchable memory behind bridge: 0000000092200000-00000000929fffff Capabilities: Kernel driver in use: pcieport Kernel modules: shpchp $ lspci -vs 1a:01.0 1a:01.0 PCI bridge: Integrated Device Technology, Inc. Device 807f (rev 02) (prog-if 00 [Normal decode]) Flags: bus master, fast devsel, latency 0 Bus: primary=1a, secondary=1c, subordinate=1c, sec-latency=0 I/O behind bridge: 00001000-00001fff Memory behind bridge: 92e00000-930fffff Prefetchable memory behind bridge: 0000000092600000-00000000927fffff Capabilities: Kernel driver in use: pcieport Kernel modules: shpchp *dmesg info* [ 328.037479] general protection fault: 0000 [#1] SMP [ 328.096991] Modules linked in: ip6table_filter ip6_tables ebtable_nat ebtables nf_conntrack_ipv4 nf_defrag_ipv4 xt_state nf_conntrack ipt_REJECT xt_CHECKSUM iptable_mangle iptable_filter ip_tables bridge stp llc sunrpc binfmt_misc dm_mirror dm_region_hash dm_log dm_mod vhost_net macvtap macvlan tun uinput iTCO_wdt iTCO_vendor_support coretemp kvm_intel kvm crc32c_intel microcode pcspkr lpc_ich mfd_core sg i2c_i801 i2c_core ioatdma i7core_edac edac_core e1000e igb dca ptp pps_core sd_mod crc_t10dif megaraid_sas mptsas mptscsih mptbase scsi_transport_sas scsi_mod [ 328.697122] CPU 6 [ 328.719040] Pid: 6, comm: kworker/u:0 Tainted: G W 3.8.0-rc6-aspm-pcie-fix+ #58 FUJITSU-SV PRIMEQUEST 1800E/SB [ 328.851117] RIP: 0010:[] [] pcie_aspm_exit_link_state+0x38/0x190 [ 328.961428] RSP: 0018:ffff8807bde17c48 EFLAGS: 00010202 [ 329.024874] RAX: ffff8807bb4a1290 RBX: 6b6b6b6b6b6b6b6b RCX: 0000000000000006 [ 329.110125] RDX: 0000000000000006 RSI: ffff8807bde1afc8 RDI: 0000000000000246 [ 329.195371] RBP: ffff8807bde17c68 R08: 0000000000000001 R09: 0000000000000001 [ 329.280619] R10: 0000000000000003 R11: 0000000000000001 R12: ffff8807bb49b3d8 [ 329.365869] R13: ffff8807bb49b3d8 R14: ffffffff82126d80 R15: ffff8807bde17d58 [ 329.451127] FS: 0000000000000000(0000) GS:ffff8807c2600000(0000) knlGS:0000000000000000 [ 329.547796] CS: 0010 DS: 0000 ES: 0000 CR0: 000000008005003b [ 329.616431] CR2: ffffffffff600400 CR3: 0000000001c0c000 CR4: 00000000000007e0 [ 329.701687] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [ 329.786935] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 [ 329.872185] Process kworker/u:0 (pid: 6, threadinfo ffff8807bde16000, task ffff8807bde1a680) [ 329.973006] Stack: [ 329.997000] 0000000000000006 ffff8807bb49b3d8 0000000000000000 ffff8807bb49b3d8 [ 330.085822] ffff8807bde17c88 ffffffff81380f42 2222222222222222 ffff8807bb49b3d8 [ 330.174627] ffff8807bde17cb8 ffffffff81380fb4 0000000000000000 ffff8807bb49b3d8 [ 330.263427] Call Trace: [ 330.292616] [] pci_stop_dev+0xb2/0xd0 [ 330.356064] [] pci_stop_bus_device+0x54/0x60 [ 330.426778] [] pci_stop_and_remove_bus_device+0x16/0x30 [ 330.508919] [] remove_callback+0x2b/0x40 [ 330.575487] [] sysfs_schedule_callback_work+0x1a/0x80 [ 330.655551] [] process_one_work+0x241/0x5f0 [ 330.725228] [] ? process_one_work+0x1cf/0x5f0 [ 330.796981] [] ? sysfs_schedule_callback+0x210/0x210 [ 330.876002] [] worker_thread+0x12b/0x3f0 [ 330.942567] [] ? manage_workers+0x180/0x180 [ 331.012243] [] kthread+0xee/0x100 [ 331.071546] [] ? __lock_release+0x129/0x190 [ 331.141223] [] ? __init_kthread_worker+0x70/0x70 [ 331.216099] [] ret_from_fork+0x7c/0xb0 [ 331.280585] [] ? __init_kthread_worker+0x70/0x70 [ 331.355453] Code: 89 65 f0 4c 89 6d f8 66 66 66 66 90 31 c0 49 89 fc 48 c7 c7 35 ee a3 81 e8 70 83 31 00 49 8b 44 24 10 48 8b 58 38 48 85 db 74 48 <80> 7b 4a 00 74 42 48 83 bb 88 00 00 00 00 74 38 31 c0 48 c7 c7 [ 331.587982] RIP [] pcie_aspm_exit_link_state+0x38/0x190 [ 331.670227] RSP [ 331.711935] ---[ end trace 359d14e0593f23af ]--- [ 331.767128] Kernel panic - not syncing: Fatal exception [ 331.829701] ------------[ cut here ]------------ [ 331.884839] WARNING: at arch/x86/kernel/smp.c:123 native_smp_send_reschedule+0x5c/0x60() [ 331.981506] Hardware name: PRIMEQUEST 1800E [ 332.031449] Modules linked in: ip6table_filter ip6_tables ebtable_nat ebtables nf_conntrack_ipv4 nf_defrag_ipv4 xt_state nf_conntrack ipt_REJECT xt_CHECKSUM iptable_mangle iptable_filter ip_tables bridge stp llc sunrpc binfmt_misc dm_mirror dm_region_hash dm_log dm_mod vhost_net macvtap macvlan tun uinput iTCO_wdt iTCO_vendor_support coretemp kvm_intel kvm crc32c_intel microcode pcspkr lpc_ich mfd_core sg i2c_i801 i2c_core ioatdma i7core_edac edac_core e1000e igb dca ptp pps_core sd_mod crc_t10dif megaraid_sas mptsas mptscsih mptbase scsi_transport_sas scsi_mod [ 332.631448] Pid: 6, comm: kworker/u:0 Tainted: G D W 3.8.0-rc6-aspm-pcie-fix+ #58 [ 332.729156] Call Trace: [ 332.758334] [] warn_slowpath_common+0x7f/0xc0 [ 332.837472] [] warn_slowpath_null+0x1a/0x20 [ 332.907144] [] native_smp_send_reschedule+0x5c/0x60 [ 332.985129] [] trigger_load_balance+0x357/0x4f0 [ 333.058957] [] scheduler_tick+0x116/0x150 [ 333.126557] [] update_process_times+0x6e/0x90 [ 333.198305] [] tick_sched_handle+0x39/0x80 [ 333.266939] [] tick_sched_timer+0x54/0x90 [ 333.334541] [] __run_hrtimer+0x83/0x320 [ 333.400060] [] ? tick_nohz_handler+0xc0/0xc0 [ 333.470773] [] hrtimer_interrupt+0x106/0x280 [ 333.541489] [] ? irqtime_account_irq+0xe7/0x100 [ 333.615316] [] smp_apic_timer_interrupt+0x69/0x99 [ 333.691221] [] apic_timer_interrupt+0x72/0x80 [ 333.762968] [] ? panic+0x1a6/0x1ee [ 333.830680] [] ? panic+0x1a2/0x1ee [ 333.891012] [] ? kmsg_dump+0x1d8/0x2a0 [ 333.955492] [] ? kmsg_dump+0x26/0x2a0 [ 334.018937] [] ? kmsg_dump+0x1c0/0x2a0 [ 334.083424] [] oops_end+0xdc/0xf0 [ 334.142717] [] die+0x5b/0x90 [ 334.196816] [] do_general_protection+0xdc/0x160 [ 334.270643] [] ? restore_args+0x30/0x30 [ 334.336165] [] general_protection+0x28/0x30 [ 334.405839] [] ? pcie_aspm_exit_link_state+0x38/0x190 [ 334.485897] [] ? pcie_aspm_exit_link_state+0x2a/0x190 [ 334.565955] [] pci_stop_dev+0xb2/0xd0 [ 334.629398] [] pci_stop_bus_device+0x54/0x60 [ 334.700114] [] pci_stop_and_remove_bus_device+0x16/0x30 [ 334.782248] [] remove_callback+0x2b/0x40 [ 334.848807] [] sysfs_schedule_callback_work+0x1a/0x80 [ 334.928863] [] process_one_work+0x241/0x5f0 [ 334.998539] [] ? process_one_work+0x1cf/0x5f0 [ 335.070290] [] ? sysfs_schedule_callback+0x210/0x210 [ 335.149311] [] worker_thread+0x12b/0x3f0 [ 335.215870] [] ? manage_workers+0x180/0x180 [ 335.285544] [] kthread+0xee/0x100 [ 335.344837] [] ? __lock_release+0x129/0x190 [ 335.414511] [] ? __init_kthread_worker+0x70/0x70 [ 335.489379] [] ret_from_fork+0x7c/0xb0 [ 335.553860] [] ? __init_kthread_worker+0x70/0x70 [ 335.628727] ---[ end trace 359d14e0593f23b0 ]---