From: Thomas Huth <thuth@redhat.com>
To: Peter Maydell <peter.maydell@linaro.org>,
"Michael S. Tsirkin" <mst@redhat.com>,
Jonathan Cameron <Jonathan.Cameron@huawei.com>
Cc: qemu-devel@nongnu.org, Fan Ni <fan.ni@samsung.com>,
Ben Widawsky <ben.widawsky@intel.com>,
Marcel Apfelbaum <marcel.apfelbaum@gmail.com>
Subject: Re: [PULL 70/73] hw/pxb-cxl: Support passthrough HDM Decoders unless overridden
Date: Mon, 17 Apr 2023 13:22:51 +0200 [thread overview]
Message-ID: <d98c9298-dd1c-e5d0-bc8c-4a9b6e61db36@redhat.com> (raw)
In-Reply-To: <CAFEAcA-+de+eeLCE4YsAw1O-Qyd_4W1Ra05mGDsU_-3a6d92qw@mail.gmail.com>
On 11/04/2023 12.26, Peter Maydell wrote:
> On Wed, 8 Mar 2023 at 01:14, Michael S. Tsirkin <mst@redhat.com> wrote:
>>
>> From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
>>
>> The CXL r3.0 specification allows for there to be no HDM decoders on CXL
>> Host Bridges if they have only a single root port. Instead, all accesses
>> directed to the host bridge (as specified in CXL Fixed Memory Windows)
>> are assumed to be routed to the single root port.
>
> Hi; in issue https://gitlab.com/qemu-project/qemu/-/issues/1586
> it's been pointed out that this commit causes an assertion
> failure during 'make check' if you configure with
> --enable-qom-cast-debug. You can repro by doing that and running:
>
> qemu-system-i386 -display none -machine q35,cxl=on -device pxb-cxl,bus=pcie.0
>
> Here's a backtrace:
>
> Thread 1 "qemu-system-i38" received signal SIGABRT, Aborted.
> __pthread_kill_implementation (no_tid=0, signo=6,
> threadid=140737217810816) at ./nptl/pthread_kill.c:44
> 44 ./nptl/pthread_kill.c: No such file or directory.
> (gdb) bt
> #0 __pthread_kill_implementation (no_tid=0, signo=6,
> threadid=140737217810816) at ./nptl/pthread_kill.c:44
> #1 __pthread_kill_internal (signo=6, threadid=140737217810816) at
> ./nptl/pthread_kill.c:78
> #2 __GI___pthread_kill (threadid=140737217810816,
> signo=signo@entry=6) at ./nptl/pthread_kill.c:89
> #3 0x00007ffff4b1c476 in __GI_raise (sig=sig@entry=6) at
> ../sysdeps/posix/raise.c:26
> #4 0x00007ffff4b027f3 in __GI_abort () at ./stdlib/abort.c:79
> #5 0x0000555555cecfab in object_dynamic_cast_assert
> (obj=obj@entry=0x555557a70b60, typename=0x555555f80406 "pxb",
> file=0x555555f80357 "../../hw/pci-bridge/pci_expander_bridge.c",
> line=line@entry=55, func=0x555555f8040a "PXB_DEV") at
> ../../qom/object.c:890
> #6 0x00005555559c7bbd in PXB_DEV (obj=0x555557a70b60) at
> ../../hw/pci-bridge/pci_expander_bridge.c:54
> #7 pxb_cxl_dev_reset (dev=0x555557a70b60) at
> ../../hw/pci-bridge/pci_expander_bridge.c:314
> #8 0x00005555559bd624 in pci_qdev_realize (qdev=0x555557a70b60,
> errp=0x7fffffffdd28) at ../../hw/pci/pci.c:2098
> #9 0x0000555555ce8ada in device_set_realized (obj=<optimised out>,
> value=true, errp=0x7fffffffdea8) at ../../hw/core/qdev.c:510
> #10 0x0000555555cf0219 in property_set_bool
> (obj=obj@entry=0x555557a70b60, v=v@entry=0x555557a727b0,
> name=name@entry=0x55555601db04 "realized", opaque=0x55555687b780,
> errp=errp@entry=0x7fffffffdea8) at ../../qom/object.c:2285
> #11 0x0000555555cee4e5 in object_property_set
> (obj=obj@entry=0x555557a70b60, name=name@entry=0x55555601db04
> "realized", v=0x555557a727b0, errp=errp@entry=0x7fffffffdea8) at
> ../../qom/object.c:1420
> #12 0x0000555555cf23cd in object_property_set_qobject
> (obj=obj@entry=0x555557a70b60, name=name@entry=0x55555601db04
> "realized", value=<optimised out>, errp=errp@entry=0x7fffffffdea8) at
> ../../qom/qom-qobject.c:28
> #13 0x0000555555cee93b in object_property_set_bool
> (obj=0x555557a70b60, name=0x55555601db04 "realized", value=<optimised
> out>, errp=0x7fffffffdea8)
> at ../../qom/object.c:1489
> #14 0x0000555555a6ae42 in qdev_device_add_from_qdict
> (opts=0x555557a6fb40, from_json=false, errp=0x7fffffffdea8,
> errp@entry=0x555556765830 <error_fatal>)
> at ../../softmmu/qdev-monitor.c:714
> #15 0x0000555555a6b202 in qdev_device_add
> (opts=opts@entry=0x5555568776f0, errp=errp@entry=0x555556765830
> <error_fatal>) at ../../softmmu/qdev-monitor.c:733
> #16 0x0000555555a7367f in device_init_func (opaque=opaque@entry=0x0,
> opts=0x3cd16a, opts@entry=0x5555568776f0, errp=0x6,
> errp@entry=0x555556765830 <error_fatal>)
> at ../../softmmu/vl.c:1140
> #17 0x0000555555e78331 in qemu_opts_foreach
> (list=<optimised out>, func=0x555555a73670 <device_init_func>,
> opaque=opaque@entry=0x0, errp=0x555556765830 <error_fatal>) at
> ../../util/qemu-option.c:1135
> #18 0x0000555555a6dd61 in qemu_create_cli_devices () at ../../softmmu/vl.c:2542
> #19 qmp_x_exit_preconfig (errp=<optimised out>) at ../../softmmu/vl.c:2610
> #20 0x0000555555a7177b in qemu_init (argc=<optimised out>,
> argv=<optimised out>) at ../../softmmu/vl.c:3612
> #21 0x000055555587b656 in main (argc=3985770, argv=0x3cd16a) at
> ../../softmmu/main.c:47
>
> The problem is here:
>
>> -static void pxb_dev_reset(DeviceState *dev)
>> +static void pxb_cxl_dev_reset(DeviceState *dev)
>
> This function is called from pxb_cxl_dev_realize(),
> which is the realize function for TYPE_PXB_CXL_DEVICE.
> That type's parent is TYPE_PCI_DEVICE.
>
>> {
>> CXLHost *cxl = PXB_CXL_DEV(dev)->cxl.cxl_host_bridge;
>> CXLComponentState *cxl_cstate = &cxl->cxl_cstate;
>> + PCIHostState *hb = PCI_HOST_BRIDGE(cxl);
>> uint32_t *reg_state = cxl_cstate->crb.cache_mem_registers;
>> uint32_t *write_msk = cxl_cstate->crb.cache_mem_regs_write_mask;
>> + int dsp_count = 0;
>>
>> cxl_component_register_init_common(reg_state, write_msk, CXL2_ROOT_PORT);
>> - ARRAY_FIELD_DP32(reg_state, CXL_HDM_DECODER_CAPABILITY, TARGET_COUNT, 8);
>> + /*
>> + * The CXL specification allows for host bridges with no HDM decoders
>> + * if they only have a single root port.
>> + */
>> + if (!PXB_DEV(dev)->hdm_for_passthrough) {
>
> However, here we try to cast the device pointer to PXB_DEV.
> That is not permitted because dev is not of type TYPE_PXB_DEVICE
> (either directly or as a parent class). So if you have the QOM
> debugging enabled then the attempt to cast causes an assertion
> failure.
>
>> + dsp_count = pcie_count_ds_ports(hb->bus);
>> + }
>> + /* Initial reset will have 0 dsp so wait until > 0 */
>> + if (dsp_count == 1) {
>> + cxl->passthrough = true;
>> + /* Set Capability ID in header to NONE */
>> + ARRAY_FIELD_DP32(reg_state, CXL_HDM_CAPABILITY_HEADER, ID, 0);
>> + } else {
>> + ARRAY_FIELD_DP32(reg_state, CXL_HDM_DECODER_CAPABILITY, TARGET_COUNT,
>> + 8);
>> + }
>> }
>
> What was the intention here with the type hierarchy?
> Should TYPE_PXB_CXL_DEVICE be a subclass of TYPE_PXB_DEVICE,
> or should the cxl-related functions not be trying to treat
> it as a PXB device ?
Maybe we should simply revert the commit for the time being (once the 8.1
cycle begins), 'til this has properly been solved, so we can enable
qom-debug by default again?
Thomas
next prev parent reply other threads:[~2023-04-17 11:24 UTC|newest]
Thread overview: 99+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-03-08 1:10 [PULL 00/73] virtio,pc,pci: features, fixes Michael S. Tsirkin
2023-03-08 1:10 ` [PULL 01/73] cryptodev: Introduce cryptodev.json Michael S. Tsirkin
2023-03-08 1:10 ` [PULL 02/73] cryptodev: Remove 'name' & 'model' fields Michael S. Tsirkin
2023-03-08 1:10 ` [PULL 03/73] cryptodev: Introduce cryptodev alg type in QAPI Michael S. Tsirkin
2023-03-08 1:11 ` [PULL 04/73] cryptodev: Introduce server " Michael S. Tsirkin
2023-03-08 1:11 ` [PULL 05/73] cryptodev: Introduce 'query-cryptodev' QMP command Michael S. Tsirkin
2023-03-08 1:11 ` [PULL 06/73] cryptodev-builtin: Detect akcipher capability Michael S. Tsirkin
2023-03-08 1:11 ` [PULL 07/73] hmp: add cryptodev info command Michael S. Tsirkin
2023-03-08 1:11 ` [PULL 08/73] cryptodev: Use CryptoDevBackendOpInfo for operation Michael S. Tsirkin
2023-03-08 1:11 ` [PULL 09/73] cryptodev: Account statistics Michael S. Tsirkin
2023-03-08 1:11 ` [PULL 10/73] cryptodev: support QoS Michael S. Tsirkin
2023-03-08 1:11 ` [PULL 11/73] cryptodev: Support query-stats QMP command Michael S. Tsirkin
2023-05-02 17:03 ` Peter Maydell
2023-05-03 4:19 ` zhenwei pi
2023-03-08 1:11 ` [PULL 12/73] MAINTAINERS: add myself as the maintainer for cryptodev Michael S. Tsirkin
2023-03-08 1:11 ` [PULL 13/73] vdpa net: move iova tree creation from init to start Michael S. Tsirkin
2023-03-08 1:11 ` [PULL 14/73] vdpa: Remember last call fd set Michael S. Tsirkin
2023-03-08 1:11 ` [PULL 15/73] vdpa: Negotiate _F_SUSPEND feature Michael S. Tsirkin
2023-03-08 1:11 ` [PULL 16/73] vdpa: rewind at get_base, not set_base Michael S. Tsirkin
2023-03-08 1:11 ` [PULL 17/73] vdpa: add vhost_vdpa->suspended parameter Michael S. Tsirkin
2023-03-08 1:11 ` [PULL 18/73] vdpa: add vhost_vdpa_suspend Michael S. Tsirkin
2023-03-08 1:11 ` [PULL 19/73] vdpa: move vhost reset after get vring base Michael S. Tsirkin
2023-03-08 1:11 ` [PULL 20/73] vdpa: add vdpa net migration state notifier Michael S. Tsirkin
2023-03-08 1:11 ` [PULL 21/73] vdpa: disable RAM block discard only for the first device Michael S. Tsirkin
2023-03-08 1:11 ` [PULL 22/73] vdpa net: block migration if the device has CVQ Michael S. Tsirkin
2023-03-08 1:11 ` [PULL 23/73] vdpa: block migration if device has unsupported features Michael S. Tsirkin
2023-03-08 1:12 ` [PULL 24/73] vdpa: block migration if SVQ does not admit a feature Michael S. Tsirkin
2023-03-08 1:12 ` [PULL 25/73] vdpa net: allow VHOST_F_LOG_ALL Michael S. Tsirkin
2023-03-08 1:12 ` [PULL 26/73] vdpa: return VHOST_F_LOG_ALL in vhost-vdpa devices Michael S. Tsirkin
2023-03-08 1:12 ` [PULL 27/73] Revert "tests/qtest: Check for devices in bios-tables-test" Michael S. Tsirkin
2023-03-08 1:12 ` [PULL 28/73] tests: acpi: whitelist new q35.noacpihp test and pc.hpbrroot Michael S. Tsirkin
2023-03-08 1:12 ` [PULL 29/73] tests: acpi: add test_acpi_q35_tcg_no_acpi_hotplug test and extend test_acpi_piix4_no_acpi_pci_hotplug Michael S. Tsirkin
2023-03-08 1:12 ` [PULL 30/73] tests: acpi: update expected blobs Michael S. Tsirkin
2023-03-13 10:57 ` Philippe Mathieu-Daudé
2023-03-13 12:59 ` Michael S. Tsirkin
2023-03-08 1:12 ` [PULL 31/73] tests: acpi: whitelist q35/DSDT.multi-bridge before extending testcase Michael S. Tsirkin
2023-03-08 1:12 ` [PULL 32/73] tests: acpi: extend multi-bridge case with case 'root-port,id=HOHP,hotplug=off root-port,bus=NOHP' Michael S. Tsirkin
2023-03-08 1:12 ` [PULL 33/73] x86: pcihp: fix missing PCNT callchain when intermediate root-port has 'hotplug=off' set Michael S. Tsirkin
2023-03-08 1:12 ` [PULL 34/73] tests: acpi: whitelist pc/DSDT.hpbrroot and pc/DSDT.hpbridge tests Michael S. Tsirkin
2023-03-08 1:12 ` [PULL 35/73] x86: pcihp: fix missing bridge AML when intermediate root-port has 'hotplug=off' set Michael S. Tsirkin
2023-03-08 1:12 ` [PULL 36/73] tests: acpi: update expected blobs Michael S. Tsirkin
2023-03-08 1:12 ` [PULL 37/73] pcihp: piix4: do not redirect hotplug controller to piix4 when ACPI hotplug is disabled Michael S. Tsirkin
2023-03-08 1:12 ` [PULL 38/73] pci: fix 'hotplugglable' property behavior Michael S. Tsirkin
2023-03-08 1:12 ` [PULL 39/73] tests: acpi: whitelist DSDT blobs before isolating PCI _DSM func 0 prolog Michael S. Tsirkin
2023-03-08 1:12 ` [PULL 40/73] pcihp: move PCI _DSM function 0 prolog into separate function Michael S. Tsirkin
2023-03-08 1:12 ` [PULL 41/73] tests: acpi: update expected blobs Michael S. Tsirkin
2023-03-08 1:12 ` [PULL 42/73] tests: acpi: whitelist DSDT before adding EDSM method Michael S. Tsirkin
2023-03-08 1:12 ` [PULL 43/73] acpi: pci: add EDSM method to DSDT Michael S. Tsirkin
2023-03-08 1:13 ` [PULL 44/73] tests: acpi: update expected blobs Michael S. Tsirkin
2023-03-08 1:13 ` [PULL 45/73] tests: acpi: whitelist DSDT before adding device with acpi-index to testcases Michael S. Tsirkin
2023-03-08 1:13 ` [PULL 46/73] tests: acpi: add device with acpi-index on non-hotpluggble bus Michael S. Tsirkin
2023-03-08 1:13 ` [PULL 47/73] acpi: pci: support acpi-index for non-hotpluggable devices Michael S. Tsirkin
2023-03-08 1:13 ` [PULL 48/73] tests: acpi: update expected blobs Michael S. Tsirkin
2023-03-08 1:13 ` [PULL 49/73] tests: acpi: whitelist DSDT before exposing non zero functions Michael S. Tsirkin
2023-03-08 1:13 ` [PULL 50/73] acpi: pci: describe all functions on populated slots Michael S. Tsirkin
2023-03-08 1:13 ` [PULL 51/73] tests: acpi: update expected blobs Michael S. Tsirkin
2023-03-08 1:13 ` [PULL 52/73] tests: acpi: whitelist DSDT before adding non-0 function device with acpi-index to testcases Michael S. Tsirkin
2023-03-08 1:13 ` [PULL 53/73] tests: acpi: add non zero function device with acpi-index on non-hotpluggble bus Michael S. Tsirkin
2023-03-08 1:13 ` [PULL 54/73] tests: acpi: update expected blobs Michael S. Tsirkin
2023-03-08 1:13 ` [PULL 55/73] pci: move acpi-index uniqueness check to generic PCI device code Michael S. Tsirkin
2023-03-08 1:13 ` [PULL 56/73] acpi: pci: drop BSEL usage when deciding that device isn't hotpluggable Michael S. Tsirkin
2023-03-08 1:13 ` [PULL 57/73] acpi: pci: move BSEL into build_append_pcihp_slots() Michael S. Tsirkin
2023-03-08 1:13 ` [PULL 58/73] acpi: pci: move out ACPI PCI hotplug generator from generic slot generator build_append_pci_bus_devices() Michael S. Tsirkin
2023-03-08 1:13 ` [PULL 59/73] pcihp: move fields enabling hotplug into AcpiPciHpState Michael S. Tsirkin
2023-03-08 1:13 ` [PULL 60/73] pcihp: add ACPI PCI hotplug specific is_hotpluggable_bus() callback Michael S. Tsirkin
2023-03-08 1:13 ` [PULL 61/73] hw/pci/aer: Implement PCI_ERR_UNCOR_MASK register Michael S. Tsirkin
2023-04-26 0:42 ` Peter Xu
2023-04-26 6:12 ` Michael S. Tsirkin
2023-04-26 7:19 ` Juan Quintela
2023-05-03 0:32 ` Leonardo Brás
2023-05-03 4:08 ` Michael S. Tsirkin
2023-05-03 9:31 ` Jonathan Cameron via
2023-03-08 1:13 ` [PULL 62/73] hw/pci/aer: Add missing routing for AER errors Michael S. Tsirkin
2023-03-08 1:13 ` [PULL 63/73] hw/pci-bridge/cxl_root_port: Wire up AER Michael S. Tsirkin
2023-03-08 1:14 ` [PULL 64/73] hw/pci-bridge/cxl_root_port: Wire up MSI Michael S. Tsirkin
2023-03-08 1:14 ` [PULL 65/73] hw/mem/cxl-type3: Add AER extended capability Michael S. Tsirkin
2023-03-08 1:14 ` [PULL 66/73] hw/cxl: Fix endian issues in CXL RAS capability defaults / masks Michael S. Tsirkin
2023-03-08 1:14 ` [PULL 67/73] hw/pci/aer: Make PCIE AER error injection facility available for other emulation to use Michael S. Tsirkin
2023-03-08 1:14 ` [PULL 68/73] hw/mem/cxl_type3: Add CXL RAS Error Injection Support Michael S. Tsirkin
2023-03-08 1:14 ` [PULL 69/73] hw/pci: Add pcie_count_ds_port() and pcie_find_port_first() helpers Michael S. Tsirkin
2023-03-08 1:14 ` [PULL 70/73] hw/pxb-cxl: Support passthrough HDM Decoders unless overridden Michael S. Tsirkin
2023-04-11 10:26 ` Peter Maydell
2023-04-17 11:22 ` Thomas Huth [this message]
2023-04-17 11:29 ` Michael S. Tsirkin
2023-04-17 13:04 ` Thomas Huth
2023-04-19 13:43 ` Jonathan Cameron via
2023-04-19 13:57 ` Jonathan Cameron via
2023-04-19 14:49 ` Jonathan Cameron via
2023-04-19 16:25 ` Peter Maydell
2023-04-19 17:18 ` Jonathan Cameron via
2023-03-08 1:14 ` [PULL 71/73] hw/virtio/vhost-user: avoid using unitialized errp Michael S. Tsirkin
2023-03-08 1:14 ` [PULL 72/73] virtio: fix reachable assertion due to stale value of cached region size Michael S. Tsirkin
2023-03-08 1:14 ` [PULL 73/73] virtio: refresh vring region cache after updating a virtqueue size Michael S. Tsirkin
2023-03-09 14:48 ` Michael S. Tsirkin
2023-03-09 14:47 ` [PULL 00/73] virtio,pc,pci: features, fixes Michael S. Tsirkin
2023-03-10 17:32 ` Peter Maydell
2023-03-10 22:20 ` Philippe Mathieu-Daudé
2023-03-11 19:22 ` Michael S. Tsirkin
2023-03-13 8:03 ` Philippe Mathieu-Daudé
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=d98c9298-dd1c-e5d0-bc8c-4a9b6e61db36@redhat.com \
--to=thuth@redhat.com \
--cc=Jonathan.Cameron@huawei.com \
--cc=ben.widawsky@intel.com \
--cc=fan.ni@samsung.com \
--cc=marcel.apfelbaum@gmail.com \
--cc=mst@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.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).