I think I fixed the problem by improving the slot_no_hotplug function in /drivers/pci/hotplug/acpiphp_glue.c
As far as I can tell the radeon driver set the ignore_hotplug on my radeon pci device, but the slot_no_hotplug function never got deep enough to reach the pci device with this flag.
After I added the functionality to iterate through all the subordinate pci devices, the function got to the flag and didn't remove my radeon device after it was powered down by the radeon driver (which is the expected behaviour).
I think I fixed the problem by improving the slot_no_hotplug function in /drivers/ pci/hotplug/ acpiphp_ glue.c
As far as I can tell the radeon driver set the ignore_hotplug on my radeon pci device, but the slot_no_hotplug function never got deep enough to reach the pci device with this flag.
After I added the functionality to iterate through all the subordinate pci devices, the function got to the flag and didn't remove my radeon device after it was powered down by the radeon driver (which is the expected behaviour).