<html>
<head>
<base href="https://bugs.freedesktop.org/" />
</head>
<body>
<p>
<div>
<b><a class="bz_bug_link
bz_status_NEW "
title="NEW - [Acer Aspire 4820TG] Kernel: trying to unbind memory from uninitialized GART !; EIP is at radeon_gart_unbind+0xca/0xe0 [radeon]()"
href="https://bugs.freedesktop.org/show_bug.cgi?id=88927#c3">Comment # 3</a>
on <a class="bz_bug_link
bz_status_NEW "
title="NEW - [Acer Aspire 4820TG] Kernel: trying to unbind memory from uninitialized GART !; EIP is at radeon_gart_unbind+0xca/0xe0 [radeon]()"
href="https://bugs.freedesktop.org/show_bug.cgi?id=88927">bug 88927</a>
from <span class="vcard"><a class="email" href="mailto:tiagdtd-lava@yahoo.de" title="tiagdtd-lava@yahoo.de">tiagdtd-lava@yahoo.de</a>
</span></b>
<pre>I don't know much about the kernel or the acpiphp driver, but I tried to dig
around in the kernel to fix this bug.
I made a bugfix which works for me.
Somebody who knows about the system should have a look at this solution,
because I'm just guessing.
As far as I can tell everything works great now.
The problem seems to be, that the "slot_no_hotplug" in acpiphp_glue.c doesn't
go deep enough to check the "ignore_hotplug" flag of the radeon device.
I had a look at the remove pci device function and made a patch which does the
same iteration through all devices to check the flags.
This works great for my Laptop and everything is stable now.
This is the patch I came up with:
--- drivers/pci/hotplug/acpiphp_glue.c.orig 2015-02-08 19:30:53.630214885
+0100
+++ drivers/pci/hotplug/acpiphp_glue.c 2015-02-08 19:30:25.534214491 +0100
@@ -559,15 +559,36 @@ static void disable_slot(struct acpiphp_
slot->flags &= (~SLOT_ENABLED);
}
+static bool device_no_hotplug(struct pci_dev *dev)
+{
+ struct pci_bus *bus = dev->subordinate;
+ struct pci_dev *child;
+
+ if (!bus) {
+ return dev->ignore_hotplug;
+ }
+
+ list_for_each_entry(child, &bus->devices, bus_list) {
+ if (device_no_hotplug(child)) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+
static bool slot_no_hotplug(struct acpiphp_slot *slot)
{
struct pci_bus *bus = slot->bus;
struct pci_dev *dev;
list_for_each_entry(dev, &bus->devices, bus_list) {
- if (PCI_SLOT(dev->devfn) == slot->device && dev->ignore_hotplug)
- return true;
+ if (PCI_SLOT(dev->devfn) == slot->device) {
+ return device_no_hotplug(dev);
+ }
}
+
return false;
}</pre>
</div>
</p>
<hr>
<span>You are receiving this mail because:</span>
<ul>
<li>You are the assignee for the bug.</li>
</ul>
</body>
</html>