[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH V3 5/29] tools/libacpi: Add new fields in acpi_config for DMAR table
On 2017年10月18日 23:12, Roger Pau Monné wrote: > On Thu, Sep 21, 2017 at 11:01:46PM -0400, Lan Tianyu wrote: >> From: Chao Gao <chao.gao@xxxxxxxxx> >> >> The BIOS reports the remapping hardware units in a platform to system >> software >> through the DMA Remapping Reporting (DMAR) ACPI table. >> New fields are introduces for DMAR table. These new fields are set by > ^ introduced >> toolstack through parsing guest's config file. construct_dmar() is added to >> build DMAR table according to the new fields. >> >> Signed-off-by: Chao Gao <chao.gao@xxxxxxxxx> >> Signed-off-by: Lan Tianyu <tianyu.lan@xxxxxxxxx> >> --- >> v3: >> - Remove chip-set specific IOAPIC BDF. Instead, let IOAPIC-related >> info be passed by struct acpi_config. >> >> --- >> tools/libacpi/build.c | 53 >> +++++++++++++++++++++++++++++++++++++++++++++++++ >> tools/libacpi/libacpi.h | 12 +++++++++++ >> 2 files changed, 65 insertions(+) >> >> diff --git a/tools/libacpi/build.c b/tools/libacpi/build.c >> index f9881c9..5ee8fcd 100644 >> --- a/tools/libacpi/build.c >> +++ b/tools/libacpi/build.c >> @@ -303,6 +303,59 @@ static struct acpi_20_slit *construct_slit(struct >> acpi_ctxt *ctxt, >> return slit; >> } >> >> +/* >> + * Only one DMA remapping hardware unit is exposed and all devices >> + * are under the remapping hardware unit. I/O APIC should be explicitly >> + * enumerated. >> + */ >> +struct acpi_dmar *construct_dmar(struct acpi_ctxt *ctxt, >> + const struct acpi_config *config) >> +{ >> + struct acpi_dmar *dmar; >> + struct acpi_dmar_hardware_unit *drhd; >> + struct dmar_device_scope *scope; >> + unsigned int size; >> + unsigned int ioapic_scope_size = sizeof(*scope) + >> sizeof(scope->path[0]); > > I'm not sure I follow why you need to add the size of a uint16_t here. > >> + >> + size = sizeof(*dmar) + sizeof(*drhd) + ioapic_scope_size; > > size can be initialized at declaration time. > >> + >> + dmar = ctxt->mem_ops.alloc(ctxt, size, 16); > > Even dmar can be initialized at declaration time. > OK. Will update. >> + if ( !dmar ) >> + return NULL; >> + >> + memset(dmar, 0, size); >> + dmar->header.signature = ACPI_2_0_DMAR_SIGNATURE; >> + dmar->header.revision = ACPI_2_0_DMAR_REVISION; >> + dmar->header.length = size; >> + fixed_strcpy(dmar->header.oem_id, ACPI_OEM_ID); >> + fixed_strcpy(dmar->header.oem_table_id, ACPI_OEM_TABLE_ID); >> + dmar->header.oem_revision = ACPI_OEM_REVISION; >> + dmar->header.creator_id = ACPI_CREATOR_ID; >> + dmar->header.creator_revision = ACPI_CREATOR_REVISION; >> + dmar->host_address_width = config->host_addr_width - 1; >> + if ( config->iommu_intremap_supported ) >> + dmar->flags |= ACPI_DMAR_INTR_REMAP; >> + if ( !config->iommu_x2apic_supported ) >> + dmar->flags |= ACPI_DMAR_X2APIC_OPT_OUT; > > Is there any reason why we would want to create a guest with a vIOMMU > but not x2APIC support? Will remove this. > >> + >> + drhd = (struct acpi_dmar_hardware_unit *)((void*)dmar + sizeof(*dmar)); > ^ space >> + drhd->type = ACPI_DMAR_TYPE_HARDWARE_UNIT; >> + drhd->length = sizeof(*drhd) + ioapic_scope_size; >> + drhd->flags = ACPI_DMAR_INCLUDE_PCI_ALL; >> + drhd->pci_segment = 0; >> + drhd->base_address = config->iommu_base_addr; >> + >> + scope = &drhd->scope[0]; >> + scope->type = ACPI_DMAR_DEVICE_SCOPE_IOAPIC; >> + scope->length = ioapic_scope_size; >> + scope->enumeration_id = config->ioapic_id; >> + scope->bus = config->ioapic_bus; >> + scope->path[0] = config->ioapic_devfn; >> + >> + set_checksum(dmar, offsetof(struct acpi_header, checksum), size); >> + return dmar; >> +} >> + >> static int construct_passthrough_tables(struct acpi_ctxt *ctxt, >> unsigned long *table_ptrs, >> int nr_tables, >> diff --git a/tools/libacpi/libacpi.h b/tools/libacpi/libacpi.h >> index a2efd23..fdd6a78 100644 >> --- a/tools/libacpi/libacpi.h >> +++ b/tools/libacpi/libacpi.h >> @@ -20,6 +20,8 @@ >> #ifndef __LIBACPI_H__ >> #define __LIBACPI_H__ >> >> +#include <stdbool.h> > > I'm quite sure you shouldn't add this here, see how headers are added > using LIBACPI_STDUTILS. > We may replace bool with uint8_t xxx:1 to avoid introduce new head file. -- Best regards Tianyu Lan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |