From: Marcel Apfelbaum <marcel@redhat.com>
To: Kevin O'Connor <kevin@koconnor.net>
Cc: seabios@seabios.org, kraxel@redhat.com, mst@redhat.com,
quintela@redhat.com, qemu-devel@nongnu.org, agraf@suse.de,
alex.williamson@redhat.com, qemu-ppc@nongnu.org, hare@suse.de,
imammedo@redhat.com, amit.shah@redhat.com, pbonzini@redhat.com,
leon.alrae@imgtec.com, aurelien@aurel32.net, rth@twiddle.net
Subject: Re: [Qemu-devel] [PATCH v4 for-2.3 13/25] hw/acpi: remove from root bus 0 the crs resources used by other busses.
Date: Sun, 08 Mar 2015 19:51:42 +0200 [thread overview]
Message-ID: <54FC8C2E.9000709@redhat.com> (raw)
In-Reply-To: <20150308161340.GA11259@morn.localdomain>
On 03/08/2015 06:13 PM, Kevin O'Connor wrote:
> On Sun, Mar 08, 2015 at 01:16:15PM +0200, Marcel Apfelbaum wrote:
>> If multiple root busses are used, root bus 0 cannot use all the
>> pci holes ranges. Remove the IO/mem ranges used by the other
>> primary busses.
> [...]
>> - aml_append(crs,
>> - aml_word_io(aml_min_fixed, aml_max_fixed,
>> - aml_pos_decode, aml_entire_range,
>> - 0x0000, 0x0D00, 0xFFFF, 0x0000, 0xF300));
>> +
>> + /* prepare PCI IO ranges */
>> + range.base = 0x0D00;
>> + range.limit = 0xFFFF;
>> + if (QLIST_EMPTY(&io_ranges)) {
>> + aml_append(crs,
>> + aml_word_io(aml_min_fixed, aml_max_fixed,
>> + aml_pos_decode, aml_entire_range,
>> + 0x0000, range.base, range.limit,
>> + 0x0000, range.limit - range.base + 1));
>> + } else {
>> + QLIST_FOREACH(entry, &io_ranges, entry) {
>> + if (range.base < entry->base) {
>> + aml_append(crs,
>> + aml_word_io(aml_min_fixed, aml_max_fixed,
>> + aml_pos_decode, aml_entire_range,
>> + 0x0000, range.base, entry->base - 1,
>> + 0x0000, entry->base - range.base));
>> + }
>> + range.base = entry->limit + 1;
>> + if (!QLIST_NEXT(entry, entry)) {
>> + aml_append(crs,
>> + aml_word_io(aml_min_fixed, aml_max_fixed,
>> + aml_pos_decode, aml_entire_range,
>> + 0x0000, range.base, range.limit,
>> + 0x0000, range.limit - range.base + 1));
>> + }
>> + }
>> + }
>
Hi Kevin,
Thank you for your review!
> If I read this correctly, it looks like a machine with two root buses
> and 20 devices, each with one memory range and one io range, would end
> up with 40 CRS ranges (ie, a CRS range for every resource).
Correct.
As Michael pointed out in another thread, the firmware is considered
guest code and QEMU cannot assume anything on how the resources are
assigned. This is why this solution was chosen.
However we have two things that make the situation a little better.
1. The PXB implementation includes a pci-bridge and all devices are automatically
attached to the secondary bus, in this way we have one IO/MEM range per extra root bus.
2. On top of this series we can add a merge algorithm that will bring together
consecutive ranges. This series does not include this optimization and it
focuses on the correctness.
It also
> looks like this furthers the requirement that the guest firmware
> assign the PCI resources prior to QEMU being able to generate the ACPI
> tables.
>
> Am I correct? If so, that doesn't sound ideal.
You are correct, however is not that bad because we have the following sequence:
- Early in the boot sequence the bios scans the PCI buses and assigns IO/MEM ranges
- At this moment all resources needed by QEMU are present in the configuration space.
- At the end of the boot sequence the BIOS queries the ACPI tables and *only then*
the tables are computed.
I think we use that implicitly for other features, anyway, it looks like an elegant
solution with no real drawbacks. (Our assumptions are safe)
Thanks,
Marcel
>
> -Kevin
>
next prev parent reply other threads:[~2015-03-08 17:52 UTC|newest]
Thread overview: 66+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-03-08 11:16 [Qemu-devel] [PATCH v4 for-2.3 00/25] hw/pc: implement multiple primary busses for pc machines Marcel Apfelbaum
2015-03-08 11:16 ` [Qemu-devel] [PATCH v4 for-2.3 01/25] acpi: fix aml_equal term implementation Marcel Apfelbaum
2015-03-09 10:28 ` Igor Mammedov
2015-03-09 11:04 ` Michael S. Tsirkin
2015-03-09 12:26 ` Igor Mammedov
2015-03-09 14:46 ` Michael S. Tsirkin
2015-03-08 11:16 ` [Qemu-devel] [PATCH v4 for-2.3 02/25] acpi: add aml_or() term Marcel Apfelbaum
2015-03-09 7:58 ` Shannon Zhao
2015-03-09 9:22 ` Marcel Apfelbaum
2015-03-08 11:16 ` [Qemu-devel] [PATCH v4 for-2.3 03/25] acpi: add aml_add() term Marcel Apfelbaum
2015-03-08 11:16 ` [Qemu-devel] [PATCH v4 for-2.3 04/25] acpi: add aml_lless() term Marcel Apfelbaum
2015-03-09 8:03 ` Shannon Zhao
2015-03-08 11:16 ` [Qemu-devel] [PATCH v4 for-2.3 05/25] acpi: add aml_index() term Marcel Apfelbaum
2015-03-09 10:39 ` Igor Mammedov
2015-03-09 11:00 ` Michael S. Tsirkin
2015-03-09 11:37 ` Marcel Apfelbaum
2015-03-08 11:16 ` [Qemu-devel] [PATCH v4 for-2.3 06/25] acpi: add aml_shiftleft() term Marcel Apfelbaum
2015-03-08 11:16 ` [Qemu-devel] [PATCH v4 for-2.3 07/25] acpi: add aml_shiftright() term Marcel Apfelbaum
2015-03-08 11:16 ` [Qemu-devel] [PATCH v4 for-2.3 08/25] acpi: add aml_increment() term Marcel Apfelbaum
2015-03-09 8:08 ` Shannon Zhao
2015-03-09 8:16 ` Shannon Zhao
2015-03-08 11:16 ` [Qemu-devel] [PATCH v4 for-2.3 09/25] acpi: add aml_while() term Marcel Apfelbaum
2015-03-09 8:20 ` Shannon Zhao
2015-03-08 11:16 ` [Qemu-devel] [PATCH v4 for-2.3 10/25] hw/acpi: add support for multiple root busses Marcel Apfelbaum
2015-03-08 16:10 ` Michael S. Tsirkin
2015-03-08 18:00 ` Marcel Apfelbaum
2015-03-08 11:16 ` [Qemu-devel] [PATCH v4 for-2.3 11/25] hw/apci: add _PRT method for extra PCI " Marcel Apfelbaum
2015-03-10 17:07 ` Michael S. Tsirkin
2015-03-10 17:26 ` Marcel Apfelbaum
2015-03-10 17:40 ` Michael S. Tsirkin
2015-03-11 1:06 ` Shannon Zhao
2015-03-08 11:16 ` [Qemu-devel] [PATCH v4 for-2.3 12/25] hw/acpi: add _CRS method for extra " Marcel Apfelbaum
2015-03-08 16:27 ` Michael S. Tsirkin
2015-03-08 18:14 ` Marcel Apfelbaum
2015-03-08 11:16 ` [Qemu-devel] [PATCH v4 for-2.3 13/25] hw/acpi: remove from root bus 0 the crs resources used by other busses Marcel Apfelbaum
2015-03-08 16:13 ` Kevin O'Connor
2015-03-08 17:51 ` Marcel Apfelbaum [this message]
2015-03-08 18:26 ` Kevin O'Connor
2015-03-08 18:32 ` Marcel Apfelbaum
2015-03-08 18:34 ` Michael S. Tsirkin
2015-03-08 18:46 ` Kevin O'Connor
2015-03-09 8:44 ` Michael S. Tsirkin
2015-03-10 13:09 ` Stefan Hajnoczi
2015-03-08 11:16 ` [Qemu-devel] [PATCH v4 for-2.3 14/25] hw/pci: move pci bus related code to separate files Marcel Apfelbaum
2015-03-08 11:16 ` [Qemu-devel] [PATCH v4 for-2.3 15/25] hw/pci: made pci_bus_is_root a PCIBusClass method Marcel Apfelbaum
2015-03-08 11:16 ` [Qemu-devel] [PATCH v4 for-2.3 16/25] hw/pci: made pci_bus_num " Marcel Apfelbaum
2015-03-08 11:16 ` [Qemu-devel] [PATCH v4 for-2.3 17/25] hw/pci: introduce TYPE_PCI_MAIN_HOST_BRIDGE interface Marcel Apfelbaum
2015-03-08 11:16 ` [Qemu-devel] [PATCH v4 for-2.3 18/25] hw/pci: removed 'rootbus nr is 0' assumption from qmp_pci_query Marcel Apfelbaum
2015-03-08 11:16 ` [Qemu-devel] [PATCH v4 for-2.3 19/25] hw/pci: implement iteration over multiple host bridges Marcel Apfelbaum
2015-03-08 11:16 ` [Qemu-devel] [PATCH v4 for-2.3 20/25] hw/pci: introduce PCI Expander Bridge (PXB) Marcel Apfelbaum
2015-03-08 11:16 ` [Qemu-devel] [PATCH v4 for-2.3 21/25] hw/pci: inform bios if the system has more than one pci bridge Marcel Apfelbaum
2015-03-08 11:16 ` [Qemu-devel] [PATCH v4 for-2.3 22/25] hw/pci: piix - suport multiple host bridges Marcel Apfelbaum
2015-03-08 11:16 ` [Qemu-devel] [PATCH v4 for-2.3 23/25] hw/pxb: add map_irq func Marcel Apfelbaum
2015-03-08 11:16 ` [Qemu-devel] [PATCH v4 for-2.3 24/25] hw/pci_bus: add support for NUMA nodes Marcel Apfelbaum
2015-03-08 11:16 ` [Qemu-devel] [PATCH v4 for-2.3 25/25] hw/pxb: add numa_node parameter Marcel Apfelbaum
2015-03-09 7:43 ` [Qemu-devel] [PATCH v4 for-2.3 00/25] hw/pc: implement multiple primary busses for pc machines Gerd Hoffmann
2015-03-09 9:20 ` Marcel Apfelbaum
2015-03-09 10:18 ` Gerd Hoffmann
2015-03-09 10:21 ` Marcel Apfelbaum
2015-03-09 14:19 ` Gerd Hoffmann
2015-03-09 16:26 ` Marcel Apfelbaum
2015-03-09 16:55 ` Gerd Hoffmann
2015-03-09 19:21 ` Marcel Apfelbaum
2015-03-10 6:23 ` [Qemu-devel] [Qemu-ppc] " Alexey Kardashevskiy
2015-03-10 11:03 ` Marcel Apfelbaum
2015-03-10 8:36 ` [Qemu-devel] " Gerd Hoffmann
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=54FC8C2E.9000709@redhat.com \
--to=marcel@redhat.com \
--cc=agraf@suse.de \
--cc=alex.williamson@redhat.com \
--cc=amit.shah@redhat.com \
--cc=aurelien@aurel32.net \
--cc=hare@suse.de \
--cc=imammedo@redhat.com \
--cc=kevin@koconnor.net \
--cc=kraxel@redhat.com \
--cc=leon.alrae@imgtec.com \
--cc=mst@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=qemu-ppc@nongnu.org \
--cc=quintela@redhat.com \
--cc=rth@twiddle.net \
--cc=seabios@seabios.org \
/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).