From: Marcel Apfelbaum <marcel@redhat.com>
To: Jan Kiszka <jan.kiszka@web.de>, Peter Xu <peterx@redhat.com>,
qemu-devel@nongnu.org
Cc: Rita Sinha <rita.sinha89@gmail.com>,
ehabkost@redhat.com, mst@redhat.com, jasowang@redhat.com,
pbonzini@redhat.com, imammedo@redhat.com, rth@twiddle.net
Subject: Re: [Qemu-devel] [PATCH 05/13] acpi: add DMAR scope definition for root IOAPIC
Date: Sun, 21 Feb 2016 17:54:25 +0200 [thread overview]
Message-ID: <56C9DDB1.8000305@redhat.com> (raw)
In-Reply-To: <56C9BE5D.60808@web.de>
On 02/21/2016 03:40 PM, Jan Kiszka wrote:
> On 2016-02-21 13:08, Marcel Apfelbaum wrote:
>> On 02/21/2016 01:38 PM, Marcel Apfelbaum wrote:
>>> On 02/19/2016 05:30 AM, Peter Xu wrote:
>>>> To enable interrupt remapping for intel IOMMU device, each IOAPIC device
>>>> in the system reported via ACPI MADT must be explicitly enumerated under
>>>> one specific remapping hardware unit. This patch adds the root-complex
>>>> IOAPIC into the default DMAR device.
>>>>
>>>> Please refer to VT-d spec 8.3.1.1 for more information.
>>>>
>>>> Signed-off-by: Peter Xu <peterx@redhat.com>
>>>> ---
>>>> hw/i386/acpi-build.c | 23 +++++++++++++++++++++--
>>>> include/hw/acpi/acpi-defs.h | 15 +++++++++++++++
>>>> 2 files changed, 36 insertions(+), 2 deletions(-)
>>>>
>>>> diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c
>>>> index d9e4f91..1cefe43 100644
>>>> --- a/hw/i386/acpi-build.c
>>>> +++ b/hw/i386/acpi-build.c
>>>> @@ -76,6 +76,9 @@
>>>> #define ACPI_BUILD_DPRINTF(fmt, ...)
>>>> #endif
>>>>
>>>> +/* Default IOAPIC ID */
>>>> +#define ACPI_BUILD_IOAPIC_ID 0x0
>>>> +
>>>> typedef struct AcpiCpuInfo {
>>>> DECLARE_BITMAP(found_cpus, ACPI_CPU_HOTPLUG_ID_LIMIT);
>>>> } AcpiCpuInfo;
>>>> @@ -392,7 +395,6 @@ build_madt(GArray *table_data, GArray *linker,
>>>> AcpiCpuInfo *cpu)
>>>> io_apic = acpi_data_push(table_data, sizeof *io_apic);
>>>> io_apic->type = ACPI_APIC_IO;
>>>> io_apic->length = sizeof(*io_apic);
>>>> -#define ACPI_BUILD_IOAPIC_ID 0x0
>>>> io_apic->io_apic_id = ACPI_BUILD_IOAPIC_ID;
>>>> io_apic->address = cpu_to_le32(IO_APIC_DEFAULT_ADDRESS);
>>>> io_apic->interrupt = cpu_to_le32(0);
>>>> @@ -2511,6 +2513,9 @@ build_dmar_q35(GArray *table_data, GArray *linker)
>>>> AcpiDmarHardwareUnit *drhd;
>>>> uint8_t dmar_flags = 0;
>>>> IntelIOMMUState *intel_iommu = acpi_get_iommu();
>>>> + AcpiDmarDeviceScope *scope = NULL;
>>>> + /* Root complex IOAPIC use one path[0] only */
>>>> + uint16_t scope_size = sizeof(*scope) + sizeof(uint16_t);
>>>>
>>>> assert(intel_iommu);
>>>>
>>>> @@ -2526,11 +2531,25 @@ build_dmar_q35(GArray *table_data, GArray
>>>> *linker)
>>>> /* DMAR Remapping Hardware Unit Definition structure */
>>>> drhd = acpi_data_push(table_data, sizeof(*drhd));
>>>> drhd->type = cpu_to_le16(ACPI_DMAR_TYPE_HARDWARE_UNIT);
>>>> - drhd->length = cpu_to_le16(sizeof(*drhd)); /* No device scope
>>>> now */
>>>> + drhd->length = cpu_to_le16(sizeof(*drhd) + scope_size);
>>>> drhd->flags = ACPI_DMAR_INCLUDE_PCI_ALL;
>>>> drhd->pci_segment = cpu_to_le16(0);
>>>> drhd->address = cpu_to_le64(Q35_HOST_BRIDGE_IOMMU_ADDR);
>>>>
>>>> + /* Scope definition for the root-complex IOAPIC */
>>>> + scope = acpi_data_push(table_data, scope_size);
>>>> + scope->entry_type = cpu_to_le16(ACPI_DMAR_DEV_SCOPE_TYPE_IOAPIC);
>>>> + scope->length = scope_size;
>>>> + /*
>>>> + * An arbitary but unique bus number, to be used to generate
>>>> + * source ID for IOAPIC device in BDF format.
>>>> + */
>>>> +#define ACPI_IOAPIC_BUS_IR (0xf0)
>>>> +#define ACPI_IOAPIC_DEVFN_IR (0x00)
>>>
>>> Hi,
>>>
>>> How do you know for sure there is no bus (or bus & device) having the
>>> number 0xf0 in the system?
>>> Now that we support multiple Root Complexes, using the pxb-pcie
>>> device we can simply add a PCI root bus like this:
>>> -device pxb-pcie,bus_nr=0xf0
>>> or we can add enough switches to get to this number.
>>>
>>> You could dynamically query for an unused PCI bus, but the number
>>> would change between the runs.
>>> Or, I suppose you can reserve a slot on bus 0 for that. It is
>>> interesting how it works on a real machine.
>>
>> thinking about it more, maybe we should let the firmware to assign the
>> bus/dev/fun for the IO APIC?
>
> We have the same problem over with VT-d and IR.
>
> I don't think the firmware is not the right place, otherwise there would
> be an interface in hw to adjust that parameters. I think we should
> simply make sure that the qemu user cannot assign devices to those
> addresses as they are reserved for the platform devices (the HPET
> requires another ID), or even reserve the hole bus for the platform.
I understand, but it is the firmware that assign addresses, not QEMU/user.
We need a way to tell the firmware not to use a certain address range, we can do that
with fw_config I suppose.
Reserving a bus might be easier, we take the bus number out from host bridges CRS
ranges and each platform device can be assigned a slot. We would need to select the bus carefully
to not collide with other PCI hierarchies. Maybe bus 0xFF.
Thanks,
Marcel
>
> Jan
>
next prev parent reply other threads:[~2016-02-21 15:54 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-02-19 3:30 [Qemu-devel] [PATCH 00/13] IOMMU: Enable interrupt remapping for Intel IOMMU Peter Xu
2016-02-19 3:30 ` [Qemu-devel] [PATCH 01/13] q35: add "int-remap" flag to enable intr Peter Xu
2016-02-21 10:38 ` Marcel Apfelbaum
2016-02-23 3:48 ` Peter Xu
2016-02-25 15:47 ` Marcel Apfelbaum
2016-04-08 7:30 ` Peter Xu
2016-04-11 10:07 ` Marcel Apfelbaum
2016-02-19 3:30 ` [Qemu-devel] [PATCH 02/13] acpi: enable INTR for DMAR report structure Peter Xu
2016-02-21 11:05 ` Marcel Apfelbaum
2016-04-08 8:07 ` Peter Xu
2016-02-19 3:30 ` [Qemu-devel] [PATCH 03/13] intel_iommu: allow queued invalidation for IR Peter Xu
2016-02-19 3:30 ` [Qemu-devel] [PATCH 04/13] intel_iommu: set IR bit for ECAP register Peter Xu
2016-02-19 3:30 ` [Qemu-devel] [PATCH 05/13] acpi: add DMAR scope definition for root IOAPIC Peter Xu
2016-02-21 11:38 ` Marcel Apfelbaum
2016-02-21 12:08 ` Marcel Apfelbaum
2016-02-21 13:40 ` Jan Kiszka
2016-02-21 15:54 ` Marcel Apfelbaum [this message]
2016-02-21 16:01 ` Jan Kiszka
2016-04-08 9:53 ` Peter Xu
2016-02-19 3:30 ` [Qemu-devel] [PATCH 06/13] intel_iommu: define interrupt remap table addr register Peter Xu
2016-02-19 3:30 ` [Qemu-devel] [PATCH 07/13] intel_iommu: handle interrupt remap enable Peter Xu
2016-02-19 3:30 ` [Qemu-devel] [PATCH 08/13] intel_iommu: define several structs for IOMMU IR Peter Xu
2016-02-19 3:30 ` [Qemu-devel] [PATCH 09/13] intel_iommu: provide helper function vtd_get_iommu Peter Xu
2016-02-19 3:30 ` [Qemu-devel] [PATCH 10/13] ioapic-common: add iommu for IOAPICCommonState Peter Xu
2016-02-19 3:30 ` [Qemu-devel] [PATCH 11/13] intel_iommu: add IR translation faults defines Peter Xu
2016-02-21 15:56 ` Marcel Apfelbaum
2016-04-08 10:03 ` Peter Xu
2016-02-19 3:30 ` [Qemu-devel] [PATCH 12/13] intel_iommu: ioapic: IR support for emulated IOAPIC Peter Xu
2016-02-19 3:30 ` [Qemu-devel] [PATCH 13/13] intel_iommu: Add support for PCI MSI remap Peter Xu
2016-02-19 6:46 ` [Qemu-devel] [PATCH 00/13] IOMMU: Enable interrupt remapping for Intel IOMMU Jan Kiszka
2016-02-19 7:43 ` Peter Xu
2016-02-19 8:34 ` Jan Kiszka
2016-02-19 9:29 ` Peter Xu
2016-02-19 9:58 ` Paolo Bonzini
2016-02-19 10:15 ` Jan Kiszka
2016-02-19 11:39 ` Peter Xu
2016-02-19 11:43 ` Jan Kiszka
2016-02-19 11:34 ` Peter Xu
2016-02-19 11:43 ` Jan Kiszka
2016-02-19 16:22 ` Radim Krčmář
2016-02-20 10:05 ` Jan Kiszka
2016-02-19 16:38 ` Radim Krčmář
2016-02-23 5:03 ` Peter Xu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=56C9DDB1.8000305@redhat.com \
--to=marcel@redhat.com \
--cc=ehabkost@redhat.com \
--cc=imammedo@redhat.com \
--cc=jan.kiszka@web.de \
--cc=jasowang@redhat.com \
--cc=mst@redhat.com \
--cc=pbonzini@redhat.com \
--cc=peterx@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=rita.sinha89@gmail.com \
--cc=rth@twiddle.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).