On Wed, Jun 10, 2026 at 09:57:35AM -0700, Dave Jiang wrote: > > > On 6/8/26 1:16 AM, Anisa Su wrote: > > On Thu, May 28, 2026 at 09:21:59AM -0700, Dave Jiang wrote: > >> > >> > >> On 5/23/26 2:43 AM, Anisa Su wrote: > >>> From: Ira Weiny <[email protected]> > >>> > >>> Dynamic Capacity Devices (DCD) support extent change notifications > >>> through the event log mechanism. The interrupt mailbox commands were > >>> extended in CXL 3.1 to support these notifications. Firmware can't > >>> configure DCD events to be FW controlled but can retain control of > >>> memory events. > >>> > >>> Configure DCD event log interrupts on devices supporting dynamic > >>> capacity. Disable DCD if interrupts are not supported. > >>> > >>> Care is taken to preserve the interrupt policy set by the FW if FW first > >>> has been selected by the BIOS. > >>> > >>> Accept the 4-byte CXL 2.0 reply on GET Event Interrupt Policy by setting > >>> min_out to CXL_EVENT_INT_POLICY_BASE_SIZE; pre-CXL 3.1 firmware omits > >>> dcd_settings and would otherwise fail the size check. > >>> > >>> Based on an original patch by Navneet Singh. > >>> > >>> Signed-off-by: Ira Weiny <[email protected]> > >>> Signed-off-by: Anisa Su <[email protected]> > >>> > >>> --- > >>> Changes: > >>> [anisa: rebase] > >>> [anisa: accept 4-byte CXL 2.0 GET reply via min_out] > >>> [anisa: drop Reviewed-by tags now that the patch carries new changes] > >>> --- [snip] > >>> static int cxl_event_config(struct pci_host_bridge *host_bridge, > >>> struct cxl_memdev_state *mds, bool irq_avail) > >>> { > >>> - struct cxl_event_interrupt_policy policy; > >>> + struct cxl_event_interrupt_policy policy = { 0 }; > >>> + bool native_cxl = host_bridge->native_cxl_error; > >>> int rc; > >>> > >>> /* > >>> * When BIOS maintains CXL error reporting control, it will process > >>> * event records. Only one agent can do so. > >>> + * > >>> + * If BIOS has control of events and DCD is not supported skip event > >>> + * configuration. > >>> */ > >>> - if (!host_bridge->native_cxl_error) > >>> + if (!native_cxl && !cxl_dcd_supported(mds)) > >>> return 0; > >>> > >>> if (!irq_avail) { > >>> dev_info(mds->cxlds.dev, "No interrupt support, disable event > >>> processing.\n"); > >>> + if (cxl_dcd_supported(mds)) { > >>> + dev_info(mds->cxlds.dev, "DCD requires interrupts, > >>> disable DCD\n"); > >>> + cxl_disable_dcd(mds); > >>> + } > >>> return 0; > >>> } > >>> > >>> @@ -676,10 +721,10 @@ static int cxl_event_config(struct pci_host_bridge > >>> *host_bridge, > >>> if (rc) > >>> return rc; > >>> > >>> - if (!cxl_event_validate_mem_policy(mds, &policy)) > >>> + if (native_cxl && !cxl_event_validate_mem_policy(mds, &policy)) > >>> return -EBUSY; > >>> > >>> - rc = cxl_event_config_msgnums(mds, &policy); > >>> + rc = cxl_event_config_msgnums(mds, &policy, native_cxl); > >>> if (rc) > >>> return rc; > >>> > >>> @@ -687,12 +732,16 @@ static int cxl_event_config(struct pci_host_bridge > >>> *host_bridge, > >>> if (rc) > >>> return rc; > >>> > >>> - rc = cxl_event_irqsetup(mds, &policy); > >>> + rc = cxl_irqsetup(mds, &policy, native_cxl); > >>> if (rc) > >>> return rc; > >>> > >>> cxl_mem_get_event_records(mds, CXLDEV_EVENT_STATUS_ALL); > >> > >> Issue that was always there probably, should this check native_cxl so the > >> BIOS owned events are not retrieved? > >> > >> if (native_cxl) > >> cxl_mem_get_event_records(mds, CXLDEV_EVENT_STATUS_ALL); > >> > >> > > That makes sense. Would you prefer the fix as a separate patch? > > Yes please. > > DJ > Oops I was wrong; the issue wasn't there before. This function used to return 0 if !native_cxl at the top of the function but this patchset added && !cxl_dcd_supported() to the condition.
Added the fix to this commit. Thanks, Anisa

