<feed xmlns='http://www.w3.org/2005/Atom'>
<title>linux-toradex.git/drivers/pci/remove.c, branch v3.0.16</title>
<subtitle>Linux kernel for Apalis and Colibri modules</subtitle>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/'/>
<entry>
<title>PCI/sysfs: move bus cpuaffinity to class dev_attrs</title>
<updated>2011-05-21T19:17:13+00:00</updated>
<author>
<name>Yinghai Lu</name>
<email>yinghai@kernel.org</email>
</author>
<published>2011-05-13T00:11:40+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=dc2c2c9dd513dec6c17df04e8abff795e20a5271'/>
<id>dc2c2c9dd513dec6c17df04e8abff795e20a5271</id>
<content type='text'>
Requested by Greg KH to fix a race condition in the creating of PCI bus
cpuaffinity files.

Acked-by: Greg Kroah-Hartman &lt;gregkh@suse.de&gt;
Signed-off-by: Yinghai Lu &lt;yinghai@kernel.org&gt;
Signed-off-by: Jesse Barnes &lt;jbarnes@virtuousgeek.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Requested by Greg KH to fix a race condition in the creating of PCI bus
cpuaffinity files.

Acked-by: Greg Kroah-Hartman &lt;gregkh@suse.de&gt;
Signed-off-by: Yinghai Lu &lt;yinghai@kernel.org&gt;
Signed-off-by: Jesse Barnes &lt;jbarnes@virtuousgeek.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>PCI: eliminate redundant pci_stop_dev() call from pci_destroy_dev()</title>
<updated>2009-06-11T19:04:19+00:00</updated>
<author>
<name>Alex Chiang</name>
<email>achiang@hp.com</email>
</author>
<published>2009-05-19T01:02:38+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=af4c5f985afd8d4cfdf402aaa03677f2cb96e37c'/>
<id>af4c5f985afd8d4cfdf402aaa03677f2cb96e37c</id>
<content type='text'>
We always call pci_stop_bus_device before calling pci_destroy_dev.

Since pci_stop_bus_device calls pci_stop_dev, there is no need
for pci_destroy_dev to repeat the call.

Signed-off-by: Alex Chiang &lt;achiang@hp.com&gt;
Signed-off-by: Jesse Barnes &lt;jbarnes@virtuousgeek.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
We always call pci_stop_bus_device before calling pci_destroy_dev.

Since pci_stop_bus_device calls pci_stop_dev, there is no need
for pci_destroy_dev to repeat the call.

Signed-off-by: Alex Chiang &lt;achiang@hp.com&gt;
Signed-off-by: Jesse Barnes &lt;jbarnes@virtuousgeek.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>PCI: fix kernel oops on bridge removal</title>
<updated>2009-03-26T22:55:18+00:00</updated>
<author>
<name>Kenji Kaneshige</name>
<email>kaneshige.kenji@jp.fujitsu.com</email>
</author>
<published>2009-03-26T07:49:52+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=7ae0567fd3f4f51d55c4c638ecc6836347992de2'/>
<id>7ae0567fd3f4f51d55c4c638ecc6836347992de2</id>
<content type='text'>
Fix the following kernel oops problem that happens when removing PCI
bridge with pciehp loaded. It should also occur with other hotplug
driver that is implemented as a bridge's driver.

[  459.997257] pciehp 0000:2f:04.0:pcie24: unloading service driver pciehp
[  459.997495] general protection fault: 0000 [#1] SMP
[  459.997737] last sysfs file: /sys/devices/pci0000:00/0000:00:04.0/0000:2e:00.0/0000:2f:04.0/remove
[  459.997964] CPU 4
[  459.998129] Modules linked in: pciehp ipv6 autofs4 hidp rfcomm l2cap bluetooth sunrpc cpufreq_ondemand acpi_cpufreq dm_mirror dm_region_hash dm_log dm_multipath scsi_dh dm_mod sbs sbshc battery ac parport_pc lp parport mptspi mptscsih mptbase scsi_transport_spi e1000e sg sr_mod cdrom button serio_raw i2c_i801 i2c_core shpchp pcspkr ata_piix libata megaraid_sas sd_mod scsi_mod crc_t10dif ext3 jbd uhci_hcd ohci_hcd ehci_hcd [last unloaded: microcode]
[  459.998129] Pid: 56, comm: events/4 Not tainted 2.6.29-rc8-kk #1 PRIMERGY
[  459.998129] RIP: 0010:[&lt;ffffffff803bf047&gt;]  [&lt;ffffffff803bf047&gt;] pci_slot_release+0x37/0x100
[  459.998129] RSP: 0018:ffff88083b3bf9e0  EFLAGS: 00010246
[  459.998129] RAX: ffff88083adc5158 RBX: ffff880836c1bc80 RCX: 6b6b6b6b6b6b6b6b
[  459.998129] RDX: 0000000000000000 RSI: ffffffff803a77f0 RDI: ffff880836c1bc48
[  459.998129] RBP: ffff88083b3bfa00 R08: 0000000000000002 R09: 0000000000000000
[  459.998129] R10: 0000000000000000 R11: 0000000000000000 R12: ffff880836c1bc48
[  459.998129] R13: ffff880836c1bc20 R14: ffff880836c1bc48 R15: ffff880836d1ec38
[  459.998129] FS:  0000000000000000(0000) GS:ffff88083ccc3770(0000) knlGS:0000000000000000
[  459.998129] CS:  0010 DS: 0018 ES: 0018 CR0: 000000008005003b
[  459.998129] CR2: 00007f1562f1d558 CR3: 0000000838090000 CR4: 00000000000006e0
[  459.998129] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
[  459.998129] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
[  459.998129] Process events/4 (pid: 56, threadinfo ffff88083b3be000, task ffff88083b3b3e40)
[  459.998129] Stack:
[  459.998129]  ffff880836c1bc80 ffff880836c1bc48 ffffffff80793320 ffff88083b0d0960
[  459.998129]  ffff88083b3bfa30 ffffffff803a788a ffff880836c1bc80 ffffffff803a77f0
[  459.998129]  ffff880836c1bc20 ffff880836d1ec38 ffff88083b3bfa50 ffffffff803a8ce7
[  459.998129] Call Trace:
[  459.998129]  [&lt;ffffffff803a788a&gt;] kobject_release+0x9a/0x290
[  459.998129]  [&lt;ffffffff803a77f0&gt;] ? kobject_release+0x0/0x290
[  459.998129]  [&lt;ffffffff803a8ce7&gt;] kref_put+0x37/0x80
[  459.998129]  [&lt;ffffffff803a76f7&gt;] kobject_put+0x27/0x60
[  459.998129]  [&lt;ffffffff803bebcc&gt;] ? pci_destroy_slot+0x3c/0xc0
[  459.998129]  [&lt;ffffffff803bebd5&gt;] pci_destroy_slot+0x45/0xc0
[  459.998129]  [&lt;ffffffff803c797d&gt;] pci_hp_deregister+0x13d/0x210
[  459.998129]  [&lt;ffffffffa031141d&gt;] cleanup_slots+0x2d/0x80 [pciehp]
[  459.998129]  [&lt;ffffffffa0311735&gt;] pciehp_remove+0x15/0x30 [pciehp]
[  459.998129]  [&lt;ffffffff803c4c99&gt;] pcie_port_remove_service+0x69/0x90
[  459.998129]  [&lt;ffffffff80441da9&gt;] __device_release_driver+0x59/0x90
[  459.998129]  [&lt;ffffffff80441edb&gt;] device_release_driver+0x2b/0x40
[  459.998129]  [&lt;ffffffff804419d6&gt;] bus_remove_device+0xa6/0x120
[  459.998129]  [&lt;ffffffff8043e46b&gt;] device_del+0x12b/0x190
[  459.998129]  [&lt;ffffffff803c4d90&gt;] ? remove_iter+0x0/0x40
[  459.998129]  [&lt;ffffffff8043e4f6&gt;] device_unregister+0x26/0x70
[  459.998129]  [&lt;ffffffff803c4dbf&gt;] remove_iter+0x2f/0x40
[  459.998129]  [&lt;ffffffff8043ddf3&gt;] device_for_each_child+0x33/0x60
[  459.998129]  [&lt;ffffffff8033ee30&gt;] ? sysfs_schedule_callback_work+0x0/0x50
[  459.998129]  [&lt;ffffffff803c4d30&gt;] pcie_port_device_remove+0x30/0x80
[  459.998129]  [&lt;ffffffff803c55a1&gt;] pcie_portdrv_remove+0x11/0x20
[  459.998129]  [&lt;ffffffff803bfeb2&gt;] pci_device_remove+0x32/0x70
[  459.998129]  [&lt;ffffffff80441da9&gt;] __device_release_driver+0x59/0x90
[  459.998129]  [&lt;ffffffff80441edb&gt;] device_release_driver+0x2b/0x40
[  459.998129]  [&lt;ffffffff804419d6&gt;] bus_remove_device+0xa6/0x120
[  459.998129]  [&lt;ffffffff8043e46b&gt;] device_del+0x12b/0x190
[  459.998129]  [&lt;ffffffff8043e4f6&gt;] device_unregister+0x26/0x70
[  459.998129]  [&lt;ffffffff803ba969&gt;] pci_stop_dev+0x49/0x60
[  459.998129]  [&lt;ffffffff803baab0&gt;] pci_remove_bus_device+0x40/0xc0
[  459.998129]  [&lt;ffffffff803c10d9&gt;] remove_callback+0x29/0x40
[  459.998129]  [&lt;ffffffff8033ee4f&gt;] sysfs_schedule_callback_work+0x1f/0x50
[  459.998129]  [&lt;ffffffff8025769a&gt;] run_workqueue+0x15a/0x230
[  459.998129]  [&lt;ffffffff80257648&gt;] ? run_workqueue+0x108/0x230
[  459.998129]  [&lt;ffffffff8025846f&gt;] worker_thread+0x9f/0x100
[  459.998129]  [&lt;ffffffff8025bce0&gt;] ? autoremove_wake_function+0x0/0x40
[  459.998129]  [&lt;ffffffff802583d0&gt;] ? worker_thread+0x0/0x100
[  459.998129]  [&lt;ffffffff8025b89d&gt;] kthread+0x4d/0x80
[  459.998129]  [&lt;ffffffff8020d4ba&gt;] child_rip+0xa/0x20
[  459.998129]  [&lt;ffffffff8020cebc&gt;] ? restore_args+0x0/0x30
[  459.998129]  [&lt;ffffffff8025b850&gt;] ? kthread+0x0/0x80
[  459.998129]  [&lt;ffffffff8020d4b0&gt;] ? child_rip+0x0/0x20
[  459.998129] Code: 56 49 89 fe 41 55 4c 8d 6f d8 41 54 53 74 09 f6 05 b8 05 c7 00 08 75 72 49 8b 45 00 48 8b 48 28 eb 05 66 90 48 89 f1 49 8b 45 00 &lt;48&gt; 8b 31 48 83 c0 28 0f 18 0e 48 39 c1 74 1c 8b 41 38 41 0f b6
[  459.998129] RIP  [&lt;ffffffff803bf047&gt;] pci_slot_release+0x37/0x100
[  459.998129]  RSP &lt;ffff88083b3bf9e0&gt;
[  460.018595] ---[ end trace 5a08d2095374aedc ]---

The pci_remove_bus_device() removes all buses and devices under the
bridge, and then removes the bridge. So the remove() callback of the
hotplug drivers implemented as a bridge's driver is executed after the
struct pci_bus of the bridge's secondary bus is removed. The remove()
callback of those driver unregisters the slot using pci_destroy_slot(),
and slot's release callback refers to the the struct pci_bus that was
already freed. This is the cause of the kernel oops.

This patch solves the problem by stopping bus drivers before removing the
bridge and its child bus and devices.

Acked-by: Alex Chiang &lt;achiang@hp.com&gt;
Signed-off-by: Kenji Kaneshige &lt;kaneshige.kenji@jp.fujitsu.com&gt;
Signed-off-by: Jesse Barnes &lt;jbarnes@virtuousgeek.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Fix the following kernel oops problem that happens when removing PCI
bridge with pciehp loaded. It should also occur with other hotplug
driver that is implemented as a bridge's driver.

[  459.997257] pciehp 0000:2f:04.0:pcie24: unloading service driver pciehp
[  459.997495] general protection fault: 0000 [#1] SMP
[  459.997737] last sysfs file: /sys/devices/pci0000:00/0000:00:04.0/0000:2e:00.0/0000:2f:04.0/remove
[  459.997964] CPU 4
[  459.998129] Modules linked in: pciehp ipv6 autofs4 hidp rfcomm l2cap bluetooth sunrpc cpufreq_ondemand acpi_cpufreq dm_mirror dm_region_hash dm_log dm_multipath scsi_dh dm_mod sbs sbshc battery ac parport_pc lp parport mptspi mptscsih mptbase scsi_transport_spi e1000e sg sr_mod cdrom button serio_raw i2c_i801 i2c_core shpchp pcspkr ata_piix libata megaraid_sas sd_mod scsi_mod crc_t10dif ext3 jbd uhci_hcd ohci_hcd ehci_hcd [last unloaded: microcode]
[  459.998129] Pid: 56, comm: events/4 Not tainted 2.6.29-rc8-kk #1 PRIMERGY
[  459.998129] RIP: 0010:[&lt;ffffffff803bf047&gt;]  [&lt;ffffffff803bf047&gt;] pci_slot_release+0x37/0x100
[  459.998129] RSP: 0018:ffff88083b3bf9e0  EFLAGS: 00010246
[  459.998129] RAX: ffff88083adc5158 RBX: ffff880836c1bc80 RCX: 6b6b6b6b6b6b6b6b
[  459.998129] RDX: 0000000000000000 RSI: ffffffff803a77f0 RDI: ffff880836c1bc48
[  459.998129] RBP: ffff88083b3bfa00 R08: 0000000000000002 R09: 0000000000000000
[  459.998129] R10: 0000000000000000 R11: 0000000000000000 R12: ffff880836c1bc48
[  459.998129] R13: ffff880836c1bc20 R14: ffff880836c1bc48 R15: ffff880836d1ec38
[  459.998129] FS:  0000000000000000(0000) GS:ffff88083ccc3770(0000) knlGS:0000000000000000
[  459.998129] CS:  0010 DS: 0018 ES: 0018 CR0: 000000008005003b
[  459.998129] CR2: 00007f1562f1d558 CR3: 0000000838090000 CR4: 00000000000006e0
[  459.998129] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
[  459.998129] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
[  459.998129] Process events/4 (pid: 56, threadinfo ffff88083b3be000, task ffff88083b3b3e40)
[  459.998129] Stack:
[  459.998129]  ffff880836c1bc80 ffff880836c1bc48 ffffffff80793320 ffff88083b0d0960
[  459.998129]  ffff88083b3bfa30 ffffffff803a788a ffff880836c1bc80 ffffffff803a77f0
[  459.998129]  ffff880836c1bc20 ffff880836d1ec38 ffff88083b3bfa50 ffffffff803a8ce7
[  459.998129] Call Trace:
[  459.998129]  [&lt;ffffffff803a788a&gt;] kobject_release+0x9a/0x290
[  459.998129]  [&lt;ffffffff803a77f0&gt;] ? kobject_release+0x0/0x290
[  459.998129]  [&lt;ffffffff803a8ce7&gt;] kref_put+0x37/0x80
[  459.998129]  [&lt;ffffffff803a76f7&gt;] kobject_put+0x27/0x60
[  459.998129]  [&lt;ffffffff803bebcc&gt;] ? pci_destroy_slot+0x3c/0xc0
[  459.998129]  [&lt;ffffffff803bebd5&gt;] pci_destroy_slot+0x45/0xc0
[  459.998129]  [&lt;ffffffff803c797d&gt;] pci_hp_deregister+0x13d/0x210
[  459.998129]  [&lt;ffffffffa031141d&gt;] cleanup_slots+0x2d/0x80 [pciehp]
[  459.998129]  [&lt;ffffffffa0311735&gt;] pciehp_remove+0x15/0x30 [pciehp]
[  459.998129]  [&lt;ffffffff803c4c99&gt;] pcie_port_remove_service+0x69/0x90
[  459.998129]  [&lt;ffffffff80441da9&gt;] __device_release_driver+0x59/0x90
[  459.998129]  [&lt;ffffffff80441edb&gt;] device_release_driver+0x2b/0x40
[  459.998129]  [&lt;ffffffff804419d6&gt;] bus_remove_device+0xa6/0x120
[  459.998129]  [&lt;ffffffff8043e46b&gt;] device_del+0x12b/0x190
[  459.998129]  [&lt;ffffffff803c4d90&gt;] ? remove_iter+0x0/0x40
[  459.998129]  [&lt;ffffffff8043e4f6&gt;] device_unregister+0x26/0x70
[  459.998129]  [&lt;ffffffff803c4dbf&gt;] remove_iter+0x2f/0x40
[  459.998129]  [&lt;ffffffff8043ddf3&gt;] device_for_each_child+0x33/0x60
[  459.998129]  [&lt;ffffffff8033ee30&gt;] ? sysfs_schedule_callback_work+0x0/0x50
[  459.998129]  [&lt;ffffffff803c4d30&gt;] pcie_port_device_remove+0x30/0x80
[  459.998129]  [&lt;ffffffff803c55a1&gt;] pcie_portdrv_remove+0x11/0x20
[  459.998129]  [&lt;ffffffff803bfeb2&gt;] pci_device_remove+0x32/0x70
[  459.998129]  [&lt;ffffffff80441da9&gt;] __device_release_driver+0x59/0x90
[  459.998129]  [&lt;ffffffff80441edb&gt;] device_release_driver+0x2b/0x40
[  459.998129]  [&lt;ffffffff804419d6&gt;] bus_remove_device+0xa6/0x120
[  459.998129]  [&lt;ffffffff8043e46b&gt;] device_del+0x12b/0x190
[  459.998129]  [&lt;ffffffff8043e4f6&gt;] device_unregister+0x26/0x70
[  459.998129]  [&lt;ffffffff803ba969&gt;] pci_stop_dev+0x49/0x60
[  459.998129]  [&lt;ffffffff803baab0&gt;] pci_remove_bus_device+0x40/0xc0
[  459.998129]  [&lt;ffffffff803c10d9&gt;] remove_callback+0x29/0x40
[  459.998129]  [&lt;ffffffff8033ee4f&gt;] sysfs_schedule_callback_work+0x1f/0x50
[  459.998129]  [&lt;ffffffff8025769a&gt;] run_workqueue+0x15a/0x230
[  459.998129]  [&lt;ffffffff80257648&gt;] ? run_workqueue+0x108/0x230
[  459.998129]  [&lt;ffffffff8025846f&gt;] worker_thread+0x9f/0x100
[  459.998129]  [&lt;ffffffff8025bce0&gt;] ? autoremove_wake_function+0x0/0x40
[  459.998129]  [&lt;ffffffff802583d0&gt;] ? worker_thread+0x0/0x100
[  459.998129]  [&lt;ffffffff8025b89d&gt;] kthread+0x4d/0x80
[  459.998129]  [&lt;ffffffff8020d4ba&gt;] child_rip+0xa/0x20
[  459.998129]  [&lt;ffffffff8020cebc&gt;] ? restore_args+0x0/0x30
[  459.998129]  [&lt;ffffffff8025b850&gt;] ? kthread+0x0/0x80
[  459.998129]  [&lt;ffffffff8020d4b0&gt;] ? child_rip+0x0/0x20
[  459.998129] Code: 56 49 89 fe 41 55 4c 8d 6f d8 41 54 53 74 09 f6 05 b8 05 c7 00 08 75 72 49 8b 45 00 48 8b 48 28 eb 05 66 90 48 89 f1 49 8b 45 00 &lt;48&gt; 8b 31 48 83 c0 28 0f 18 0e 48 39 c1 74 1c 8b 41 38 41 0f b6
[  459.998129] RIP  [&lt;ffffffff803bf047&gt;] pci_slot_release+0x37/0x100
[  459.998129]  RSP &lt;ffff88083b3bf9e0&gt;
[  460.018595] ---[ end trace 5a08d2095374aedc ]---

The pci_remove_bus_device() removes all buses and devices under the
bridge, and then removes the bridge. So the remove() callback of the
hotplug drivers implemented as a bridge's driver is executed after the
struct pci_bus of the bridge's secondary bus is removed. The remove()
callback of those driver unregisters the slot using pci_destroy_slot(),
and slot's release callback refers to the the struct pci_bus that was
already freed. This is the cause of the kernel oops.

This patch solves the problem by stopping bus drivers before removing the
bridge and its child bus and devices.

Acked-by: Alex Chiang &lt;achiang@hp.com&gt;
Signed-off-by: Kenji Kaneshige &lt;kaneshige.kenji@jp.fujitsu.com&gt;
Signed-off-by: Jesse Barnes &lt;jbarnes@virtuousgeek.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>PCI: check if a bus is added when removing it</title>
<updated>2009-03-20T02:29:26+00:00</updated>
<author>
<name>Yu Zhao</name>
<email>yu.zhao@intel.com</email>
</author>
<published>2009-01-28T10:27:21+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=2b56313448bb8efad3af19f211d988c8352ac04d'/>
<id>2b56313448bb8efad3af19f211d988c8352ac04d</id>
<content type='text'>
When removing a bus, 'is_added' should be checked to make sure the
bus has been successfully added by pci_bus_add_child() who will sets
'is_added'.

Signed-off-by: Yu Zhao &lt;yu.zhao@intel.com&gt;
Signed-off-by: Jesse Barnes &lt;jbarnes@virtuousgeek.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
When removing a bus, 'is_added' should be checked to make sure the
bus has been successfully added by pci_bus_add_child() who will sets
'is_added'.

Signed-off-by: Yu Zhao &lt;yu.zhao@intel.com&gt;
Signed-off-by: Jesse Barnes &lt;jbarnes@virtuousgeek.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>PCI: fix sparse warning in pci_remove_behind_bridge</title>
<updated>2008-10-20T17:54:25+00:00</updated>
<author>
<name>Stephen Hemminger</name>
<email>shemminger@vyatta.com</email>
</author>
<published>2008-09-06T04:45:36+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=11d587429e9cbb40ac20d7ed8126c66da0d7aba5'/>
<id>11d587429e9cbb40ac20d7ed8126c66da0d7aba5</id>
<content type='text'>
Get rid of the second definition of dev which hides the earlier one in
the argument list and causes a warning from sparse.

Signed-off-by: Stephen Hemminger &lt;shemminger@vyatta.com&gt;
Signed-off-by: Jesse Barnes &lt;jbarnes@virtuousgeek.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Get rid of the second definition of dev which hides the earlier one in
the argument list and causes a warning from sparse.

Signed-off-by: Stephen Hemminger &lt;shemminger@vyatta.com&gt;
Signed-off-by: Jesse Barnes &lt;jbarnes@virtuousgeek.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>PCI: make CPU list affinity visible</title>
<updated>2008-10-20T17:53:51+00:00</updated>
<author>
<name>Mike Travis</name>
<email>travis@sgi.com</email>
</author>
<published>2008-09-06T12:46:42+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=93ff68a55aa92180a765d6c51c3303f6200167a6'/>
<id>93ff68a55aa92180a765d6c51c3303f6200167a6</id>
<content type='text'>
Stephen Hemminger wrote:
&gt; Looks like Mike created cpulistaffinty in sysfs but never completed
&gt; the job.

This patch hooks things up correctly, taking care to remove the new file
when the bus is destroyed.

Signed-off-by: Stephen Hemminger &lt;shemminger@vyatta.com&gt;
Signed-off-by: Mike Travis &lt;travis@sgi.com&gt;
Signed-off-by: Jesse Barnes &lt;jbarnes@virtuousgeek.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Stephen Hemminger wrote:
&gt; Looks like Mike created cpulistaffinty in sysfs but never completed
&gt; the job.

This patch hooks things up correctly, taking care to remove the new file
when the bus is destroyed.

Signed-off-by: Stephen Hemminger &lt;shemminger@vyatta.com&gt;
Signed-off-by: Mike Travis &lt;travis@sgi.com&gt;
Signed-off-by: Jesse Barnes &lt;jbarnes@virtuousgeek.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>PCI: add PCI Express ASPM support</title>
<updated>2008-04-21T04:47:03+00:00</updated>
<author>
<name>Shaohua Li</name>
<email>shaohua.li@intel.com</email>
</author>
<published>2008-02-25T01:46:41+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=7d715a6c1ae5785d00fb9a876b5abdfc43abc44b'/>
<id>7d715a6c1ae5785d00fb9a876b5abdfc43abc44b</id>
<content type='text'>
PCI Express ASPM defines a protocol for PCI Express components in the D0
state to reduce Link power by placing their Links into a low power state
and instructing the other end of the Link to do likewise. This
capability allows hardware-autonomous, dynamic Link power reduction
beyond what is achievable by software-only controlled power management.
However, The device should be configured by software appropriately.
Enabling ASPM will save power, but will introduce device latency.

This patch adds ASPM support in Linux. It introduces a global policy for
ASPM, a sysfs file /sys/module/pcie_aspm/parameters/policy can control
it. The interface can be used as a boot option too. Currently we have
below setting:
        -default, BIOS default setting
        -powersave, highest power saving mode, enable all available ASPM
state and clock power management
        -performance, highest performance, disable ASPM and clock power
management
By default, the 'default' policy is used currently.

In my test, power difference between powersave mode and performance mode
is about 1.3w in a system with 3 PCIE links.

Note: some devices might not work well with aspm, either because chipset
issue or device issue. The patch provide API (pci_disable_link_state),
driver can disable ASPM for specific device.

Signed-off-by: Shaohua Li &lt;shaohua.li@intel.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@suse.de&gt;

</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
PCI Express ASPM defines a protocol for PCI Express components in the D0
state to reduce Link power by placing their Links into a low power state
and instructing the other end of the Link to do likewise. This
capability allows hardware-autonomous, dynamic Link power reduction
beyond what is achievable by software-only controlled power management.
However, The device should be configured by software appropriately.
Enabling ASPM will save power, but will introduce device latency.

This patch adds ASPM support in Linux. It introduces a global policy for
ASPM, a sysfs file /sys/module/pcie_aspm/parameters/policy can control
it. The interface can be used as a boot option too. Currently we have
below setting:
        -default, BIOS default setting
        -powersave, highest power saving mode, enable all available ASPM
state and clock power management
        -performance, highest performance, disable ASPM and clock power
management
By default, the 'default' policy is used currently.

In my test, power difference between powersave mode and performance mode
is about 1.3w in a system with 3 PCIE links.

Note: some devices might not work well with aspm, either because chipset
issue or device issue. The patch provide API (pci_disable_link_state),
driver can disable ASPM for specific device.

Signed-off-by: Shaohua Li &lt;shaohua.li@intel.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@suse.de&gt;

</pre>
</div>
</content>
</entry>
<entry>
<title>PCI: remove global list of PCI devices</title>
<updated>2008-04-21T04:47:02+00:00</updated>
<author>
<name>Greg Kroah-Hartman</name>
<email>gregkh@suse.de</email>
</author>
<published>2008-02-14T22:56:56+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=5ff580c10ec06fd296bd23d4570c1a95194094a0'/>
<id>5ff580c10ec06fd296bd23d4570c1a95194094a0</id>
<content type='text'>
This patch finally removes the global list of PCI devices.  We are
relying entirely on the list held in the driver core now, and do not
need a separate "shadow" list as no one uses it.

Signed-off-by: Greg Kroah-Hartman &lt;gregkh@suse.de&gt;

</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This patch finally removes the global list of PCI devices.  We are
relying entirely on the list held in the driver core now, and do not
need a separate "shadow" list as no one uses it.

Signed-off-by: Greg Kroah-Hartman &lt;gregkh@suse.de&gt;

</pre>
</div>
</content>
</entry>
<entry>
<title>PCI: add is_added flag to struct pci_dev</title>
<updated>2008-04-21T04:47:00+00:00</updated>
<author>
<name>Greg Kroah-Hartman</name>
<email>gregkh@suse.de</email>
</author>
<published>2008-02-14T22:56:56+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=8a1bc9013a03d41a0e36ee413bb6f97281b30bd1'/>
<id>8a1bc9013a03d41a0e36ee413bb6f97281b30bd1</id>
<content type='text'>
This lets us check if the device is really added to the driver core or
not, which is what we need when walking some of the bus lists.  The flag
is there in anticipation of getting rid of the other PCI device list,
which is what we used to check in this situation.

Signed-off-by: Greg Kroah-Hartman &lt;gregkh@suse.de&gt;

</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This lets us check if the device is really added to the driver core or
not, which is what we need when walking some of the bus lists.  The flag
is there in anticipation of getting rid of the other PCI device list,
which is what we used to check in this situation.

Signed-off-by: Greg Kroah-Hartman &lt;gregkh@suse.de&gt;

</pre>
</div>
</content>
</entry>
<entry>
<title>Revert "PCI: PCIE ASPM support"</title>
<updated>2008-02-02T19:32:01+00:00</updated>
<author>
<name>Greg Kroah-Hartman</name>
<email>gregkh@suse.de</email>
</author>
<published>2008-02-02T19:32:01+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=cc3a1378b4dd45d3e78dd4aeb10641b06a87d614'/>
<id>cc3a1378b4dd45d3e78dd4aeb10641b06a87d614</id>
<content type='text'>
This reverts commit 6c723d5bd89f03fc3ef627d50f89ade054d2ee3b.

It caused build errors on non-x86 platforms, config file confusion, and
even some boot errors on some x86-64 boxes.  All around, not quite ready
for prime-time :(

Cc: Shaohua Li &lt;shaohua.li@intel.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@suse.de&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This reverts commit 6c723d5bd89f03fc3ef627d50f89ade054d2ee3b.

It caused build errors on non-x86 platforms, config file confusion, and
even some boot errors on some x86-64 boxes.  All around, not quite ready
for prime-time :(

Cc: Shaohua Li &lt;shaohua.li@intel.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@suse.de&gt;
</pre>
</div>
</content>
</entry>
</feed>
