]> www.infradead.org Git - linux.git/commitdiff
Merge branch 'for-6.15/dirty-shutdown' into cxl-for-next2
authorDave Jiang <dave.jiang@intel.com>
Fri, 14 Mar 2025 23:11:42 +0000 (16:11 -0700)
committerDave Jiang <dave.jiang@intel.com>
Fri, 14 Mar 2025 23:11:42 +0000 (16:11 -0700)
Add support for Global Persistent Flush (GPF) and dirty shutdown
accounting.

1  2 
Documentation/ABI/testing/sysfs-bus-cxl
drivers/cxl/core/core.h
drivers/cxl/core/mbox.c
drivers/cxl/core/port.c
drivers/cxl/cxl.h
drivers/cxl/cxlmem.h
drivers/cxl/pmem.c
tools/testing/cxl/test/mem.c

index 83c690ca6fada36a7ccf953e79e793eb9f5870c2,8f2eb76a3c8c745b5f750d24ddf422d9e6cee34a..4d8316f97ed8ef0d8e22865ea4def5740f2a5757
@@@ -115,7 -115,6 +115,8 @@@ bool cxl_need_node_perf_attrs_update(in
  int cxl_port_get_switch_dport_bandwidth(struct cxl_port *port,
                                        struct access_coordinate *c);
  
 +int cxl_ras_init(void);
 +void cxl_ras_exit(void);
+ int cxl_gpf_port_setup(struct device *dport_dev, struct cxl_port *port);
  
  #endif /* __CXL_CORE_H__ */
index 7299cd3a01551c12f5575600acd7fbd33ad6cdcf,ec7b70ae5c061e7e6efbfede6fde0b8b559b41ec..85a1c1860a0380d673e72b48a45cc58c786ec0c3
@@@ -1274,14 -1298,55 +1274,53 @@@ int cxl_mem_dpa_fetch(struct cxl_memdev
                return rc;
        }
  
 -      rc = add_dpa_res(dev, &cxlds->dpa_res, &cxlds->ram_res, 0,
 -                       mds->active_volatile_bytes, "ram");
 -      if (rc)
 -              return rc;
 -      return add_dpa_res(dev, &cxlds->dpa_res, &cxlds->pmem_res,
 -                         mds->active_volatile_bytes,
 -                         mds->active_persistent_bytes, "pmem");
 +      add_part(info, 0, mds->active_volatile_bytes, CXL_PARTMODE_RAM);
 +      add_part(info, mds->active_volatile_bytes, mds->active_persistent_bytes,
 +               CXL_PARTMODE_PMEM);
 +
 +      return 0;
  }
 -EXPORT_SYMBOL_NS_GPL(cxl_mem_create_range_info, "CXL");
 +EXPORT_SYMBOL_NS_GPL(cxl_mem_dpa_fetch, "CXL");
  
+ int cxl_get_dirty_count(struct cxl_memdev_state *mds, u32 *count)
+ {
+       struct cxl_mailbox *cxl_mbox = &mds->cxlds.cxl_mbox;
+       struct cxl_mbox_get_health_info_out hi;
+       struct cxl_mbox_cmd mbox_cmd;
+       int rc;
+       mbox_cmd = (struct cxl_mbox_cmd) {
+               .opcode = CXL_MBOX_OP_GET_HEALTH_INFO,
+               .size_out = sizeof(hi),
+               .payload_out = &hi,
+       };
+       rc = cxl_internal_send_cmd(cxl_mbox, &mbox_cmd);
+       if (!rc)
+               *count = le32_to_cpu(hi.dirty_shutdown_cnt);
+       return rc;
+ }
+ EXPORT_SYMBOL_NS_GPL(cxl_get_dirty_count, "CXL");
+ int cxl_arm_dirty_shutdown(struct cxl_memdev_state *mds)
+ {
+       struct cxl_mailbox *cxl_mbox = &mds->cxlds.cxl_mbox;
+       struct cxl_mbox_cmd mbox_cmd;
+       struct cxl_mbox_set_shutdown_state_in in = {
+               .state = 1
+       };
+       mbox_cmd = (struct cxl_mbox_cmd) {
+               .opcode = CXL_MBOX_OP_SET_SHUTDOWN_STATE,
+               .size_in = sizeof(in),
+               .payload_in = &in,
+       };
+       return cxl_internal_send_cmd(cxl_mbox, &mbox_cmd);
+ }
+ EXPORT_SYMBOL_NS_GPL(cxl_arm_dirty_shutdown, "CXL");
  int cxl_set_timestamp(struct cxl_memdev_state *mds)
  {
        struct cxl_mailbox *cxl_mbox = &mds->cxlds.cxl_mbox;
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge