The _EJ0 method is executed by the OS once it has successfully finished device removal. Inform that event through IO port space so QEMU can free the associated data.
Signed-off-by: Marcelo Tosatti <[EMAIL PROTECTED]> Index: kvm-userspace.hotplug2/bios/acpi-dsdt.dsl =================================================================== --- kvm-userspace.hotplug2.orig/bios/acpi-dsdt.dsl +++ kvm-userspace.hotplug2/bios/acpi-dsdt.dsl @@ -414,159 +414,258 @@ DefinitionBlock ( PCID, 32, } + OperationRegion(SEJ, SystemIO, 0xae08, 0x04) + Field (SEJ, DWordAcc, NoLock, WriteAsZeros) + { + B0EJ, 32, + } + Device (S1) { // Slot 1 Name (_ADR, 0x00010000) - Method (_EJ0,1) { Return (0x0) } + Method (_EJ0,1) { + Store(0x2, B0EJ) + Return (0x0) + } } Device (S2) { // Slot 2 Name (_ADR, 0x00020000) - Method (_EJ0,1) { Return (0x0) } + Method (_EJ0,1) { + Store(0x4, B0EJ) + Return (0x0) + } } Device (S3) { // Slot 3 Name (_ADR, 0x00030000) - Method (_EJ0,1) { Return (0x0) } + Method (_EJ0,1) { + Store (0x8, B0EJ) + Return (0x0) + } } Device (S4) { // Slot 4 Name (_ADR, 0x00040000) - Method (_EJ0,1) { Return (0x0) } + Method (_EJ0,1) { + Store(0x10, B0EJ) + Return (0x0) + } } Device (S5) { // Slot 5 Name (_ADR, 0x00050000) - Method (_EJ0,1) { Return (0x0) } + Method (_EJ0,1) { + Store(0x20, B0EJ) + Return (0x0) + } } Device (S6) { // Slot 6 Name (_ADR, 0x00060000) - Method (_EJ0,1) { Return (0x0) } + Method (_EJ0,1) { + Store(0x40, B0EJ) + Return (0x0) + } } Device (S7) { // Slot 7 Name (_ADR, 0x00070000) - Method (_EJ0,1) { Return (0x0) } + Method (_EJ0,1) { + Store(0x80, B0EJ) + Return (0x0) + } } Device (S8) { // Slot 8 Name (_ADR, 0x00080000) - Method (_EJ0,1) { Return (0x0) } + Method (_EJ0,1) { + Store(0x100, B0EJ) + Return (0x0) + } } Device (S9) { // Slot 9 Name (_ADR, 0x00090000) - Method (_EJ0,1) { Return (0x0) } + Method (_EJ0,1) { + Store(0x200, B0EJ) + Return (0x0) + } } Device (S10) { // Slot 10 Name (_ADR, 0x000A0000) - Method (_EJ0,1) { Return (0x0) } + Method (_EJ0,1) { + Store(0x400, B0EJ) + Return (0x0) + } } Device (S11) { // Slot 11 Name (_ADR, 0x000B0000) - Method (_EJ0,1) { Return (0x0) } + Method (_EJ0,1) { + Store(0x800, B0EJ) + Return (0x0) + } } Device (S12) { // Slot 12 Name (_ADR, 0x000C0000) - Method (_EJ0,1) { Return (0x0) } + Method (_EJ0,1) { + Store(0x1000, B0EJ) + Return (0x0) + } } Device (S13) { // Slot 13 Name (_ADR, 0x000D0000) - Method (_EJ0,1) { Return (0x0) } + Method (_EJ0,1) { + Store(0x2000, B0EJ) + Return (0x0) + } } Device (S14) { // Slot 14 Name (_ADR, 0x000E0000) - Method (_EJ0,1) { Return (0x0) } + Method (_EJ0,1) { + Store(0x4000, B0EJ) + Return (0x0) + } } Device (S15) { // Slot 15 Name (_ADR, 0x000F0000) - Method (_EJ0,1) { Return (0x0) } + Method (_EJ0,1) { + Store(0x8000, B0EJ) + Return (0x0) + } } Device (S16) { // Slot 16 Name (_ADR, 0x00100000) - Method (_EJ0,1) { Return (0x0) } + Method (_EJ0,1) { + Store(0x10000, B0EJ) + Return (0x0) + } } Device (S17) { // Slot 17 Name (_ADR, 0x00110000) - Method (_EJ0,1) { Return (0x0) } + Method (_EJ0,1) { + Store(0x20000, B0EJ) + Return (0x0) + } } Device (S18) { // Slot 18 Name (_ADR, 0x00120000) - Method (_EJ0,1) { Return (0x0) } + Method (_EJ0,1) { + Store(0x40000, B0EJ) + Return (0x0) + } } Device (S19) { // Slot 19 Name (_ADR, 0x00130000) - Method (_EJ0,1) { Return (0x0) } + Method (_EJ0,1) { + Store(0x80000, B0EJ) + Return (0x0) + } } Device (S20) { // Slot 20 Name (_ADR, 0x00140000) - Method (_EJ0,1) { Return (0x0) } + Method (_EJ0,1) { + Store(0x100000, B0EJ) + Return (0x0) + } } Device (S21) { // Slot 21 Name (_ADR, 0x00150000) - Method (_EJ0,1) { Return (0x0) } + Method (_EJ0,1) { + Store(0x200000, B0EJ) + Return (0x0) + } } Device (S22) { // Slot 22 Name (_ADR, 0x00160000) - Method (_EJ0,1) { Return (0x0) } + Method (_EJ0,1) { + Store(0x400000, B0EJ) + Return (0x0) + } } Device (S23) { // Slot 23 Name (_ADR, 0x00170000) - Method (_EJ0,1) { Return (0x0) } + Method (_EJ0,1) { + Store(0x800000, B0EJ) + Return (0x0) + } } Device (S24) { // Slot 24 Name (_ADR, 0x00180000) - Method (_EJ0,1) { Return (0x0) } + Method (_EJ0,1) { + Store(0x1000000, B0EJ) + Return (0x0) + } } Device (S25) { // Slot 25 Name (_ADR, 0x00190000) - Method (_EJ0,1) { Return (0x0) } + Method (_EJ0,1) { + Store(0x2000000, B0EJ) + Return (0x0) + } } Device (S26) { // Slot 26 Name (_ADR, 0x001A0000) - Method (_EJ0,1) { Return (0x0) } + Method (_EJ0,1) { + Store(0x4000000, B0EJ) + Return (0x0) + } } Device (S27) { // Slot 27 Name (_ADR, 0x001B0000) - Method (_EJ0,1) { Return (0x0) } + Method (_EJ0,1) { + Store(0x8000000, B0EJ) + Return (0x0) + } } Device (S28) { // Slot 28 Name (_ADR, 0x001C0000) - Method (_EJ0,1) { Return (0x0) } + Method (_EJ0,1) { + Store(0x10000000, B0EJ) + Return (0x0) + } } Device (S29) { // Slot 29 Name (_ADR, 0x001D0000) - Method (_EJ0,1) { Return (0x0) } + Method (_EJ0,1) { + Store(0x20000000, B0EJ) + Return (0x0) + } } Device (S30) { // Slot 30 Name (_ADR, 0x001E0000) - Method (_EJ0,1) { Return (0x0) } + Method (_EJ0,1) { + Store(0x40000000, B0EJ) + Return (0x0) + } } Device (S31) { // Slot 31 Name (_ADR, 0x001F0000) - Method (_EJ0,1) { Return (0x0) } + Method (_EJ0,1) { + Store(0x80000000, B0EJ) + Return (0x0) + } } Method (_CRS, 0, NotSerialized) --