<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>