qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PULL 70/73] hw/pxb-cxl: Support passthrough HDM Decoders unless ove


From: Peter Maydell
Subject: Re: [PULL 70/73] hw/pxb-cxl: Support passthrough HDM Decoders unless overridden
Date: Wed, 19 Apr 2023 17:25:17 +0100

On Wed, 19 Apr 2023 at 15:50, Jonathan Cameron
<Jonathan.Cameron@huawei.com> wrote:
>
> On Wed, 19 Apr 2023 14:57:54 +0100
> Jonathan Cameron via <qemu-devel@nongnu.org> wrote:
>
> > On Tue, 11 Apr 2023 11:26:16 +0100
> > Peter Maydell <peter.maydell@linaro.org> wrote:
> > > 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 ?
> >
> > I can't immediately recall why, but PXB_DEV and PXB_CXL_DEV use the
> > same struct PXBDev so here switching to 
> > PXB_CXL_DEV(dev)->hdm_for_passthrough
> > looks to be the minimum fix.
> >
> > I'll dig into why / if there is a good reason for why PXB_CXL_DEV doesn't
> > simply inherit from PXB_DEV then use runtime type checking in the few 
> > places it
> > will matter.
>
> Ah. Looks to be cut and paste from what TYPE_PXB_PCIE_DEV was doing.
> We probably never considered if that was a good path to take or not.
> Not clear why they can't both just inherit from TYPE_PXB_DEV.
> At least superficially it seems to work + is cleaner.
>
> Following only lightly tested... May eat babies etc.
>
> From 995226fcdfe196e010c5a3850bfca2f97a384307 Mon Sep 17 00:00:00 2001
> From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> Date: Wed, 19 Apr 2023 15:41:44 +0100
> Subject: [PATCH] hw/pci-bridge: Make PCIe and CXL PXB Devices inherit from
>  PXB_DEVICE
>
> Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>

You probably want to send this out as a proper top-level patch:
both humans and automated tooling tend to not notice patches
buried inside other list threads.

> -static PXBDev *convert_to_pxb(PCIDevice *dev)
> -{
> -    /* A CXL PXB's parent bus is PCIe, so the normal check won't work */
> -    if (object_dynamic_cast(OBJECT(dev), TYPE_PXB_CXL_DEVICE)) {
> -        return PXB_CXL_DEV(dev);
> -    }
> -
> -    return pci_bus_is_express(pci_get_bus(dev))
> -        ? PXB_PCIE_DEV(dev) : PXB_DEV(dev);
> -}

This function looks super-dubious, so the fact that it
goes away in this patch is a good sign :-)

> diff --git a/include/hw/pci/pci_bridge.h b/include/hw/pci/pci_bridge.h
> index 0aac8e9db0..57f66da5bd 100644
> --- a/include/hw/pci/pci_bridge.h
> +++ b/include/hw/pci/pci_bridge.h
> @@ -85,7 +85,7 @@ struct PCIBridge {
>  #define PCI_BRIDGE_DEV_PROP_SHPC       "shpc"
>  typedef struct CXLHost CXLHost;
>
> -struct PXBDev {
> +typedef struct PXBDev {
>      /*< private >*/
>      PCIDevice parent_obj;
>      /*< public >*/
> @@ -93,14 +93,28 @@ struct PXBDev {
>      uint8_t bus_nr;
>      uint16_t numa_node;
>      bool bypass_iommu;
> +} PXBDev;
> +
> +typedef struct PXBPCIEDev {
> +    /*< private >*/
> +    PXBDev parent_obj;
> +} PXBPCIEDev;
> +
> +#define TYPE_PXB_DEVICE "pxb"
> +DECLARE_INSTANCE_CHECKER(PXBDev, PXB_DEV,
> +                         TYPE_PXB_DEVICE)

The documentation for DECLARE_INSTANCE_CHECKER()
says "Direct usage of this macro should be avoided, and
the complete OBJECT_DECLARE_TYPE() macro is recommended
instead. So we should do that. (That will also mean you don't
need the explicit "typedef"s on your struct declarations,
because OBJECT_DECLARE_TYPE() will define typedefs for you.)

> +
> +typedef struct PXBCXLDev {
> +    /*< private >*/
> +    PXBPCIEDev parent_obj;
> +    /*< public >*/
> +
>      bool hdm_for_passthrough;
> -    struct cxl_dev {
> -        CXLHost *cxl_host_bridge; /* Pointer to a CXLHost */
> -    } cxl;
> -};
> +    CXLHost *cxl_host_bridge; /* Pointer to a CXLHost */
> +} PXBCXLDev;
>
>  #define TYPE_PXB_CXL_DEVICE "pxb-cxl"
> -DECLARE_INSTANCE_CHECKER(PXBDev, PXB_CXL_DEV,
> +DECLARE_INSTANCE_CHECKER(PXBCXLDev, PXB_CXL_DEV,
>                           TYPE_PXB_CXL_DEVICE)
>
>  int pci_bridge_ssvid_init(PCIDevice *dev, uint8_t offset,

thanks
-- PMM



reply via email to

[Prev in Thread] Current Thread [Next in Thread]