acpi: madt: skip pci override on pci-less systems.
Needed for microvm. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> Reviewed-by: Igor Mammedov <imammedo@redhat.com> Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com> Message-Id: <20200520132003.9492-8-kraxel@redhat.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
		
							parent
							
								
									eb66ffabc0
								
							
						
					
					
						commit
						5794d34a13
					
				| @ -2588,7 +2588,7 @@ void acpi_build(AcpiBuildTables *tables, MachineState *machine) | ||||
| 
 | ||||
|     acpi_add_table(table_offsets, tables_blob); | ||||
|     acpi_build_madt(tables_blob, tables->linker, x86ms, | ||||
|                     ACPI_DEVICE_IF(pcms->acpi_dev)); | ||||
|                     ACPI_DEVICE_IF(pcms->acpi_dev), true); | ||||
| 
 | ||||
|     vmgenid_dev = find_vmgenid_dev(); | ||||
|     if (vmgenid_dev) { | ||||
|  | ||||
| @ -72,7 +72,8 @@ void pc_madt_cpu_entry(AcpiDeviceIf *adev, int uid, | ||||
| } | ||||
| 
 | ||||
| void acpi_build_madt(GArray *table_data, BIOSLinker *linker, | ||||
|                      X86MachineState *x86ms, AcpiDeviceIf *adev) | ||||
|                      X86MachineState *x86ms, AcpiDeviceIf *adev, | ||||
|                      bool has_pci) | ||||
| { | ||||
|     MachineClass *mc = MACHINE_GET_CLASS(x86ms); | ||||
|     const CPUArchIdList *apic_ids = mc->possible_cpu_arch_ids(MACHINE(x86ms)); | ||||
| @ -111,18 +112,21 @@ void acpi_build_madt(GArray *table_data, BIOSLinker *linker, | ||||
|         intsrcovr->gsi    = cpu_to_le32(2); | ||||
|         intsrcovr->flags  = cpu_to_le16(0); /* conforms to bus specifications */ | ||||
|     } | ||||
|     for (i = 1; i < 16; i++) { | ||||
| 
 | ||||
|     if (has_pci) { | ||||
|         for (i = 1; i < 16; i++) { | ||||
| #define ACPI_BUILD_PCI_IRQS ((1<<5) | (1<<9) | (1<<10) | (1<<11)) | ||||
|         if (!(ACPI_BUILD_PCI_IRQS & (1 << i))) { | ||||
|             /* No need for a INT source override structure. */ | ||||
|             continue; | ||||
|             if (!(ACPI_BUILD_PCI_IRQS & (1 << i))) { | ||||
|                 /* No need for a INT source override structure. */ | ||||
|                 continue; | ||||
|             } | ||||
|             intsrcovr = acpi_data_push(table_data, sizeof *intsrcovr); | ||||
|             intsrcovr->type   = ACPI_APIC_XRUPT_OVERRIDE; | ||||
|             intsrcovr->length = sizeof(*intsrcovr); | ||||
|             intsrcovr->source = i; | ||||
|             intsrcovr->gsi    = cpu_to_le32(i); | ||||
|             intsrcovr->flags  = cpu_to_le16(0xd); /* active high, level triggered */ | ||||
|         } | ||||
|         intsrcovr = acpi_data_push(table_data, sizeof *intsrcovr); | ||||
|         intsrcovr->type   = ACPI_APIC_XRUPT_OVERRIDE; | ||||
|         intsrcovr->length = sizeof(*intsrcovr); | ||||
|         intsrcovr->source = i; | ||||
|         intsrcovr->gsi    = cpu_to_le32(i); | ||||
|         intsrcovr->flags  = cpu_to_le16(0xd); /* active high, level triggered */ | ||||
|     } | ||||
| 
 | ||||
|     if (x2apic_mode) { | ||||
|  | ||||
| @ -9,6 +9,7 @@ | ||||
| #define ACPI_BUILD_IOAPIC_ID 0x0 | ||||
| 
 | ||||
| void acpi_build_madt(GArray *table_data, BIOSLinker *linker, | ||||
|                      X86MachineState *x86ms, AcpiDeviceIf *adev); | ||||
|                      X86MachineState *x86ms, AcpiDeviceIf *adev, | ||||
|                      bool has_pci); | ||||
| 
 | ||||
| #endif | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Gerd Hoffmann
						Gerd Hoffmann