)]}'
{
  "log": [
    {
      "commit": "3959364f5525798b5055a7dd45872734093d9207",
      "tree": "97e1dac9321a578681ec95d5775bbc35073fc48d",
      "parents": [
        "b9e0c44f33801fe6fffcadf9e56cb2f3efc24434"
      ],
      "author": {
        "name": "Guangzong Chen",
        "email": "guangzong@google.com",
        "time": "Mon Sep 28 19:33:48 2026 +0000"
      },
      "committer": {
        "name": "Guangzong Chen",
        "email": "guangzong@google.com",
        "time": "Mon Sep 28 19:34:45 2026 +0000"
      },
      "message": "nvmed: reset featureStore in NVMeSubsystem::markFunctional(false)\n\nWhen MCTP reactor restarts or the MCTP endpoint disconnects,\nNVMeSubsystem::markFunctional(false) clears attached volumes and\ncontrollers, but previously omitted resetting featureStore.\n\nAs a result, featureStore retained a dangling pointer to nvme_mi_ctrl_t\nwhich was freed when the MCTP connection closed. When the endpoint\nreconnected, initializeFeatureStore() exited early because featureStore\nwas already populated, preserving the stale controller reference.\nSubsequent NVMe admin queries (such as nvme_mi_admin_get_log) then\naccessed the freed memory, causing a SIGSEGV crash.\n\nReset featureStore in NVMeSubsystem::markFunctional(false) so that\nthe stale FeatureStore is properly destroyed and recreated with the\nnew controller upon reconnection.\n\nTested: Ran unit tests.\nGoogle-Bug-Id: 565728782\nChange-Id: Iae25de23fcd80373c4089365991233cb30a33395\nSigned-off-by: Guangzong Chen \u003cguangzong@google.com\u003e\nTAG\u003dagy\nCONV\u003d05ec5ee7-d8a8-4299-9bd5-92c2d10bad16\n"
    },
    {
      "commit": "b9e0c44f33801fe6fffcadf9e56cb2f3efc24434",
      "tree": "d75cc9cded4bbd3ca2b854b51d82368a8fb17522",
      "parents": [
        "2eb51fc4d830b99f78035d009683d51d7c994d61"
      ],
      "author": {
        "name": "Guangzong Chen",
        "email": "guangzong@google.com",
        "time": "Wed Sep 23 17:53:19 2026 +0000"
      },
      "committer": {
        "name": "Guangzong Chen",
        "email": "guangzong@google.com",
        "time": "Wed Sep 23 18:00:06 2026 +0000"
      },
      "message": "build: remove unconditional subproject libnvme in src/meson.build\n\nIn BitBake / Yocto build environments, wrap-based automatic subproject\ndownloading is disabled. Previously, src/meson.build unconditionally\ncalled subproject(\u0027libnvme\u0027), triggering \u0027Automatic wrap-based\nsubproject downloading is disabled\u0027 during nvmed do_configure.\n\nSince libnvme is already provided by BitBake sysroot via recipe\ndependencies, pass subproject default_options directly to\ndependency(\u0027libnvme\u0027) fallback rather than calling subproject()\nunconditionally.\n\nTested: Verified local meson configure and compilation in Docker.\nGoogle-Bug-Id: 565393598\nChange-Id: Ia5e2e33e75cbb253ec789d871906f6515239ae4e\nSigned-off-by: Guangzong Chen \u003cguangzong@google.com\u003e\nTAG\u003dagy\nCONV\u003dc78fe6ee-6dfd-4bc5-9dea-32f99ad607fe\n"
    },
    {
      "commit": "2eb51fc4d830b99f78035d009683d51d7c994d61",
      "tree": "bc7d095966acf88a1ae1a075e4073aaf956efcc4",
      "parents": [
        "c062934fa816c521f0745512cd6b581220bdeca5"
      ],
      "author": {
        "name": "Guangzong Chen",
        "email": "guangzong@google.com",
        "time": "Tue Aug 25 19:31:55 2026 +0000"
      },
      "committer": {
        "name": "Guangzong Chen",
        "email": "guangzong@google.com",
        "time": "Tue Sep 22 19:23:59 2026 +0000"
      },
      "message": "nvmed: Support NVMe Get/Set Feature for OCP Latency Monitor (FID 0xC5)\n\nSupport NVMe Get and Set Feature commands for OCP Latency Monitor\n(FID 0xC5) across Controller scope in NVMeFeatureStore.\nThis allows querying and configuring OCP latency monitor settings\nvia 4096-byte payload buffer and exposing them over D-Bus.\n\nExtract getFeatureDataLen helper to support variable-length feature\npayloads and reject unsupported feature IDs with InvalidArgument.\n\nTested: Verified via gbmc ci run nvmed (8/8 tests passed).\nGoogle-Bug-Id: 549207952\nChange-Id: Ie4b2b0055b49f7daa9aefcab0713319abfefd91a\nSigned-off-by: Guangzong Chen \u003cguangzong@google.com\u003e\nTAG\u003dagy\nCONV\u003dc36db835-257f-47bf-84bb-b773d9cd7e86\n"
    },
    {
      "commit": "c062934fa816c521f0745512cd6b581220bdeca5",
      "tree": "4dd74d0016ea42691d09784752eb6481395aacf6",
      "parents": [
        "cf3984fc169ad6885806fe0ee89783c788764afe"
      ],
      "author": {
        "name": "Guangzong Chen",
        "email": "guangzong@google.com",
        "time": "Fri Sep 18 21:23:14 2026 +0000"
      },
      "committer": {
        "name": "Guangzong Chen",
        "email": "guangzong@google.com",
        "time": "Mon Sep 21 14:57:57 2026 -0700"
      },
      "message": "nvmed: probe features on no ONCS bit 4 and skip empty FeatureStore\n\nWhen ONCS bit 4 is not set (e.g. IronFist controllers) and Log Page 12h\nis not supported, discoverFeatures previously assumed all standard NVMe\nfeatures were supported and populated featureCollection without\nverification. Subsequent Redfish queries (like $expand on /Features)\ncalled GetFeature on these unsupported features, causing NVMe-MI command\nfailures (Vendor Specific Status SCT 7 SC 0xf3 on IronFist) and HTTP 500\nInternal Error responses.\n\nThis change actively queries asyncAdminGetFeatures with SEL\u003dCURRENT when\nONCS bit 4 is not set to verify feature support before adding to\nfeatureCollection. Furthermore, when featureCollection is empty (no\nfeatures supported by the device), FeatureStore::init returns\nerrc::not_supported and skips registering the D-Bus interface, and\ncontroller/subsystem/volume classes log info and reset the featureStore\npointer.\n\nTested: Added unit tests and verified with gbmc ci docker nvmed.\nGoogle-Bug-Id: 558424309\nChange-Id: I50c067e5c73987eb59658530788563e1ac867d0d\nSigned-off-by: Guangzong Chen \u003cguangzong@google.com\u003e\nTAG\u003dagy\nCONV\u003d466d579d-564d-4675-89fd-3d720b796c05\n"
    },
    {
      "commit": "cf3984fc169ad6885806fe0ee89783c788764afe",
      "tree": "e33715e3e06b48af01b107c823f1f4146f5208ca",
      "parents": [
        "785ac42045cbc1738c33aa1339eb2965ff978e3a"
      ],
      "author": {
        "name": "Guangzong Chen",
        "email": "guangzong@google.com",
        "time": "Fri Sep 11 17:53:56 2026 +0000"
      },
      "committer": {
        "name": "Guangzong Chen",
        "email": "guangzong@google.com",
        "time": "Mon Sep 21 14:57:44 2026 -0700"
      },
      "message": "nvmed: do not register FeatureStore on identify failure\n\nWhen a drive is absent or fails to respond to Identify Controller\nduring FeatureStore initialization, do not attempt to discover\nfeatures or register the FeatureStore D-Bus interface.\n\nPreviously, if Identify Controller failed, oncs remained 0, which\ncaused oncsBit4 to evaluate to false. In discoverFeatures, the !oncsBit4\nfallback path unconditionally populated all default features into\nfeatureCollection and exposed xyz.openbmc_project.NVMe.FeatureStore on\nD-Bus. Redfish clients querying feature endpoints on absent slots then\nexperienced D-Bus call failures mapped to HTTP 500 Internal Error.\n\nWith this change, fetchIdentifyData returns false on error, skipping\ndiscoverFeatures and D-Bus interface registration, and resets the\nfeatureStore pointer in controller, subsystem, and volume classes.\n\nTested: Ran unit tests.\nGoogle-Bug-Id: 555312695\nChange-Id: I6e4e93184269fc95a5faccb42d5da5f73ed9abff\nSigned-off-by: Guangzong Chen \u003cguangzong@google.com\u003e\nTAG\u003dagy\nCONV\u003db4ce846a-32f5-46f9-8f8e-b66c6d95ea2b\n"
    },
    {
      "commit": "785ac42045cbc1738c33aa1339eb2965ff978e3a",
      "tree": "9129ec1574de5396caf7b4d55a17b0a8451f0fd5",
      "parents": [
        "501db186384ed191ae2afcc6d79e11c0b0e7614b"
      ],
      "author": {
        "name": "Guangzong Chen",
        "email": "guangzong@google.com",
        "time": "Mon Jun 01 20:21:32 2026 +0000"
      },
      "committer": {
        "name": "Guangzong Chen",
        "email": "guangzong@google.com",
        "time": "Tue Sep 15 10:34:12 2026 -0700"
      },
      "message": "nvmed: implement NVMe format (subsystem, controller, and volume)\n\nExpose Format methods on NVMe Subsystem, Controller, and Volume\nD-Bus interfaces.\nHandle FNA bit restrictions and MSET determination.\nUse libnvme-mi native nvme_mi_admin_format_nvm API for format\noperations.\nRe-identify and refresh D-Bus volume properties after formatting.\n\nTested: Executed unit tests (7/7 OK) and physical hardware format tests.\nGoogle-Bug-Id: 520485959\nChange-Id: Ieccfba6131dca694035b9690566defcdd87f264b\nSigned-off-by: Guangzong Chen \u003cguangzong@google.com\u003e\nTAG\u003dagy\nCONV\u003d803c0083-de23-4678-ad5a-b4079926dcd3\n"
    },
    {
      "commit": "501db186384ed191ae2afcc6d79e11c0b0e7614b",
      "tree": "774ac3cb876ff543aa05e96335a3a4966b40598e",
      "parents": [
        "f218254c073947c0b51bcd268e323a272d6d3de3"
      ],
      "author": {
        "name": "Guangzong Chen",
        "email": "guangzong@google.com",
        "time": "Thu Sep 10 19:25:59 2026 +0000"
      },
      "committer": {
        "name": "Guangzong Chen",
        "email": "guangzong@google.com",
        "time": "Fri Sep 11 22:16:46 2026 +0000"
      },
      "message": "build, docs: Support GCC 15 / C++23 and fix libnvme and markdownlint\n\nThe unit test Docker image was recently upgraded from Ubuntu with\nGCC 14.3.0 and Meson 1.7.0 to Ubuntu 26.04 with GCC 15.2.0 and\nMeson 1.11.2. This toolchain upgrade introduced several issues:\n\n1. Modern sdbusplus requires C++23 under GCC 15. Update meson.build\n   default cpp_std to c++23 and meson_version to \u003e\u003d1.1.1.\n2. GCC 15 enforces stricter -Wformat for non-void pointers passed to\n   %p, causing a build failure in libnvme/ccan. Add a patch to cast\n   pointers to const void*.\n3. Top-level warning_level\u003d3 and -Wpedantic propagated to the libnvme\n   subproject. Isolate libnvme with warning_level\u003d1 and werror\u003dfalse.\n4. Meson runs tests from subprojects by default. Under GCC 15 UBSan\n   (halt_on_error\u003d1), libnvme\u0027s internal tests fail with unaligned\n   memory access and null pointer in memset. Add a patch to libnvme\n   meson.build to skip building internal tests and examples when\n   libnvme is built as a subproject.\n5. Fix markdownlint issues across documentation.\n\nTested: Verified clean compilation and test execution in Docker\ncontainer with GCC 15 and address,undefined sanitizer.\nGoogle-Bug-Id: 560184526\nChange-Id: Ib476238d65c50a15bddad8e24b5e8462c924800c\nSigned-off-by: Guangzong Chen \u003cguangzong@google.com\u003e\nTAG\u003dagy\nCONV\u003d6866aaa8-fc79-4b5d-bbc3-928fa7aa65f3\n"
    },
    {
      "commit": "f218254c073947c0b51bcd268e323a272d6d3de3",
      "tree": "a10c194425abee34513f2e431879c69e40ebc032",
      "parents": [
        "79fda3244f43e8fd21f9ae6eacd2094f26489ac9"
      ],
      "author": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Sat Feb 07 00:19:21 2026 +0000"
      },
      "committer": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Thu Aug 27 23:15:15 2026 +0000"
      },
      "message": "NVMe: Add component tag to the logs\n\nOriginally when switch to lg2, we missed some component tag. Also some\nlog print didn\u0027t have the component tag initially.\n\nThey created trouble for debugging when multiple NVMe device work\ntogether.\n\nTested: N/A\nChange-Id: I88e31bd4be8820062663a5f4b249855863b54408\nSigned-off-by: Hao Jiang \u003cjianghao@google.com\u003e\n"
    },
    {
      "commit": "79fda3244f43e8fd21f9ae6eacd2094f26489ac9",
      "tree": "2554c85d4a060939c0483ffcf52b7a291e33c2d6",
      "parents": [
        "eb04dd8195b341204d05cf2d2c41051c241ee410"
      ],
      "author": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Mon Jul 13 21:54:35 2026 +0000"
      },
      "committer": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Thu Aug 27 14:20:15 2026 -0700"
      },
      "message": "docs: reformat the gemini.md as skill\n\nMove the AI markdown files into .agent folder and format the content as\na skill so the AI agent can auto pickup the skill\n\nuse /gemini to start\n\nTested: N/A\nChange-Id: Ida866b7ef1dbdb8ab7968429e24b10b1079cdc1f\nSigned-off-by: Hao Jiang \u003cjianghao@google.com\u003e\n"
    },
    {
      "commit": "eb04dd8195b341204d05cf2d2c41051c241ee410",
      "tree": "4fbccc86999b6e53dcab7902f97a00c8086be6dd",
      "parents": [
        "855705fe5ecfff41d1c442717e0fb68459147264"
      ],
      "author": {
        "name": "Agrim Bharat",
        "email": "agrimbharat@google.com",
        "time": "Fri Aug 14 00:05:58 2026 +0000"
      },
      "committer": {
        "name": "Agrim Bharat",
        "email": "agrimbharat@google.com",
        "time": "Thu Aug 27 15:40:03 2026 +0000"
      },
      "message": "nvmed: Cache different lockdown log page LSPs\n\nAdd caching for the required lockdown log page LSPs and return them as\none nvme metric\n\nGoogle-Bug-Id: 439949534\nTested: https://paste.googleplex.com/5898575040086016\nChange-Id: Id17f67a9dcf85037793c5546a2b8bfb2eacf26cf\nSigned-off-by: Agrim Bharat \u003cagrimbharat@google.com\u003e\n"
    },
    {
      "commit": "855705fe5ecfff41d1c442717e0fb68459147264",
      "tree": "b337bc01045e914909bf78a19a366e4c24dc4c87",
      "parents": [
        "d63b2687e16c9a39ebdce288d1667f414065f432"
      ],
      "author": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Fri Aug 14 21:30:19 2026 +0000"
      },
      "committer": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Wed Aug 19 13:30:21 2026 -0700"
      },
      "message": "nvme: restore backward compatibility for mi_i2c without bus property\n\nFor NVMe devices configured with protocol \"mi_i2c\" and associated\nwith MCTP reactor configurations (isMctpReactorDevice), the \"Bus\"\nproperty is optional because endpoint discovery and routing are\nresolved dynamically via MCTP associations.\n\nA recent commit enforced that both \"mi_basic\" and \"mi_i2c\" require\nthe \"Bus\" property upfront, which caused valid \"mi_i2c\" reactor\nconfigurations lacking the \"Bus\" property to be skipped.\n\nThis change separates the protocol validation logic so that \"mi_i2c\"\nonly enforces the presence of \"Bus\" when the device is not an MCTP\nreactor device, restoring backward compatibility.\n\nTested:\n- Added a temporary unit test simulating NVMe configurations with\n  Protocol \"mi_i2c\" and MctpReactorConfigPath without a \"Bus\" property,\n  verifying that the NVMeSubsystem and NVMeDevice are created.\n- Verified that direct \"mi_i2c\" (without MCTP reactor config) and\n  \"mi_basic\" configurations without \"Bus\" continue to be rejected.\n\nGoogle-Bug-Id: 546682451\nChange-Id: I6db4c1a47860b6ac1e8ccf5393f3230ba85b8642\nSigned-off-by: Hao Jiang \u003cjianghao@google.com\u003e\n"
    },
    {
      "commit": "d63b2687e16c9a39ebdce288d1667f414065f432",
      "tree": "a4517a5738f3fa48d76424faf093cd522920d106",
      "parents": [
        "aca480dcfb8f3edb1338690e52630a3ec81f96b9"
      ],
      "author": {
        "name": "Guangzong Chen",
        "email": "guangzong@google.com",
        "time": "Mon Aug 10 21:26:49 2026 +0000"
      },
      "committer": {
        "name": "Guangzong Chen",
        "email": "guangzong@google.com",
        "time": "Fri Aug 14 18:14:54 2026 +0000"
      },
      "message": "nvmed: do not add unsupported features to featureCollection on capability query error\n\nWhen querying feature capabilities (SEL\u003d011b) during feature discovery,\nif the drive returns an error (such as Invalid Field in Command 0x02),\ndo not add the feature to featureCollection. Advertising unsupported\nfeatures causes Redfish and busctl queries to attempt unsupported NVMe\ncommands, resulting in Service Unavailable and 500 Internal Error.\n\nTested: Ran unit tests and verified on target hardware.\nGoogle-Bug-Id: 544517012\nChange-Id: Ic699209edd0d819190fde0342459c4396a6a6964\nSigned-off-by: Guangzong Chen \u003cguangzong@google.com\u003e\nTAG\u003dagy\nCONV\u003d322d2541-0ab6-49b1-8c8f-2aeba2f83067\n"
    },
    {
      "commit": "aca480dcfb8f3edb1338690e52630a3ec81f96b9",
      "tree": "4d579976d5b5523be95d3bd98560cf86b5144c19",
      "parents": [
        "33bd4a0bb09624876e230e291ee9bd4f2eea5e4b"
      ],
      "author": {
        "name": "Muhammad Usama",
        "email": "muhammadusama@google.com",
        "time": "Wed Jul 29 17:50:56 2026 +0000"
      },
      "committer": {
        "name": "Muhammad Usama Chaudhry",
        "email": "muhammadusama@google.com",
        "time": "Wed Jul 29 10:55:07 2026 -0700"
      },
      "message": "dbus-sensors: fix formatting, test mock signatures, and operation_aborted handling\n\n- Fix clang-format formatting issue in src/MctpUtil.hpp\n- Fix adminGetLogPage argument mismatch in test_nvme_feature_store.cpp\n- Cancel retry loop in performEmConfigQuery when connection is aborted\n\nChange-Id: I9e1c1b1ba7de62dfdc1ab016b123b61d89d1b7d8\nSigned-off-by: Muhammad Usama \u003cmuhammadusama@google.com\u003e\n"
    },
    {
      "commit": "33bd4a0bb09624876e230e291ee9bd4f2eea5e4b",
      "tree": "8b2ed7cb2218fee1f9ae37e96d56aa54e9a3bba3",
      "parents": [
        "2dd6e8003c7e173a687825aaee15f278ed3ecfc8"
      ],
      "author": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Mon Jun 15 23:30:08 2026 +0000"
      },
      "committer": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Wed Jul 29 10:18:49 2026 -0700"
      },
      "message": "tests: fix flakiness in MctpUtil tests\n\n- Replaced static sleep(3) in SetUp with dynamic system() wait loop for mock mctpd to claim name.\n- Added 100ms delay after setupMctpEndpointListener to allow D-Bus match rules to register before triggering events.\n- This resolves flakiness in MctpReactorDevice removal and destruction notification tests.\n\nGoogle-Bug-Id: 509971428\nTAG\u003dagy\nCONV\u003d20b74d17-8c22-4637-865e-fef8e20edda2\n\nChange-Id: I56b3c191277774ee75ade8a65bc97873938de5b9\n"
    },
    {
      "commit": "2dd6e8003c7e173a687825aaee15f278ed3ecfc8",
      "tree": "f8eab8a1726cdda5aaf6ec8b83ea560140e66f30",
      "parents": [
        "a56550a7be4a84fb6a55773c432075cb00b0f974"
      ],
      "author": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Thu May 07 00:16:58 2026 +0000"
      },
      "committer": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Wed Jul 29 10:18:49 2026 -0700"
      },
      "message": "nvme: support bridged MCTP endpoints\n\nUpdated nvmed to support bridged MCTP endpoints by parsing a list of\nBusInfo interfaces from Entity-Manager. Moved the matching logic into\nMctpReactorDevice::setup() to keep the device self-resolving and\nencapsulate discovery logic. Refactored MctpReactorBusInfo to\nmaintain root-to-leaf order for consistency, and added an operator\u003d\u003d\noverload for subset matching.\n\nExample EM config for a bridged device:\n```\n{\n    \"Protocol\": \"mi_mctp\",\n    \"Type\": \"NVME1000\",\n    \"xyz.openbmc_project.Configuration.NVME1000.BusInfo0\": {\n        \"BusType\": \"USB\",\n        \"Port\": \"1.5.1\",\n        \"RootHubPath\": \"/sys/devices/platform/ahb/f0806000.usb\"\n    },\n    \"xyz.openbmc_project.Configuration.NVME1000.BusInfo1\": {\n        \"BusType\": \"MCTP Bridge\",\n        \"EIDOffset\": 2\n    }\n}\n```\n\nTested: Ran unit tests in Docker container (test_mctp_util, test_nvme).\nGoogle-Bug-Id: 509971428\nChange-Id: I8633ed947d1c58d6fb948f5e6bd43e8521fa042e\nSigned-off-by: Hao Jiang \u003cjianghao@google.com\u003e\n"
    },
    {
      "commit": "a56550a7be4a84fb6a55773c432075cb00b0f974",
      "tree": "36df9029b911e6457bb9e8fe2e72c0ed455900af",
      "parents": [
        "027e361fd78879be0909f4cec8d815cfa7c2b2da"
      ],
      "author": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Wed May 06 20:59:25 2026 +0000"
      },
      "committer": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Wed Jul 29 10:18:49 2026 -0700"
      },
      "message": "mctp: implement robust retry and fix priming block\n\nThe previous implementation did not retry on query failures or\nresolution failures (e.g., when bridge configuration is missing).\nThis caused failures in out-of-order tests.\n\nAdded a permanent retry loop in performEmConfigQuery to handle\nfailures.\n\nTo prevent a single failing endpoint from blocking the priming loop,\nadded a bypassRetry flag to disable retry during priming.\n\nMade triggerDeferredQueries async by spawning coroutines to prevent\nthem from blocking each other.\n\nAdded new test cases to verify these behaviors.\n\nTested: All 21 tests in test_mctp_util passed.\n\nChange-Id: I31f2cea8b976bac05491a6d9ffecb0935dd9d699\nSigned-off-by: Hao Jiang \u003cjianghao@google.com\u003e\nGoogle-Bug-Id: 510430224\n"
    },
    {
      "commit": "027e361fd78879be0909f4cec8d815cfa7c2b2da",
      "tree": "52debc8dec2717b7047122226b5cbf7a37d4c7d8",
      "parents": [
        "0ad8490b830ce60c417a81fc0500e256a30c380c"
      ],
      "author": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Tue May 05 18:23:32 2026 +0000"
      },
      "committer": {
        "name": "Muhammad Usama Chaudhry",
        "email": "muhammadusama@google.com",
        "time": "Wed Jul 29 10:17:32 2026 -0700"
      },
      "message": "mctp: support bridged MCTP endpoints resolution\n\nAdded support for resolving bridged MCTP endpoints by tracing the\nMCTPBridgeDownstreamDevice configuration chain up to the root bridge.\nThis allows nvmesensor to correctly identify the bus information for\nendpoints behind bridges.\n\nTested: Ran unit tests in isolated D-Bus session in Docker.\nAll 18 tests passed.\n\nGoogle-Bug-Id: 509971428\nChange-Id: I0407987c0cd545f7552c076b9abbd6b344cc316e\nSigned-off-by: Hao Jiang \u003cjianghao@google.com\u003e\n"
    },
    {
      "commit": "0ad8490b830ce60c417a81fc0500e256a30c380c",
      "tree": "2fce9c236b5059ba52fdd8947d38feeb2279e23b",
      "parents": [
        "774df846557ac02b647f3d79ae88319bb4344686"
      ],
      "author": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Thu Apr 23 22:52:19 2026 +0000"
      },
      "committer": {
        "name": "Muhammad Usama Chaudhry",
        "email": "muhammadusama@google.com",
        "time": "Wed Jul 29 10:17:32 2026 -0700"
      },
      "message": "nvme: add default USB configuration and interface number\n\nDefault USB Configuration to \u00271\u0027 and InterfaceNum to \u00270\u0027 in NVMe1000\nbus info extraction if not provided in Entity Manager configuration.\nThis ensures matching with mock server and real machine expectations.\n\nGoogle-Bug-Id: 490106522\nTested: All tests passed in Docker container.\nChange-Id: I0d591b94c13fe4989adc4070609f922c0b78a13b\n"
    },
    {
      "commit": "774df846557ac02b647f3d79ae88319bb4344686",
      "tree": "c4ea76fdb805e08bd52b16976bbfd3aedcf43e58",
      "parents": [
        "0028439a3692b0e919b6cec53b03285d07c5d431"
      ],
      "author": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Thu Apr 23 18:07:43 2026 +0000"
      },
      "committer": {
        "name": "Muhammad Usama Chaudhry",
        "email": "muhammadusama@google.com",
        "time": "Wed Jul 29 10:17:32 2026 -0700"
      },
      "message": "mctp: fix E-M configuration reading for nvmed and mctpreactor\n\nFixed a mismatch in how Entity Manager configurations are read for MCTP\ndevices in both nvmesensor and mctpreactor. The previous\nimplementation failed to handle different schema structures (e.g.,\nnested BusInfo vs flat properties directly on the interface).\n\nTo resolve this, the bus information extraction was refactored:\n- Added AbstractBusInfo and MctpReactorBusInfo in MctpUtil to target\n  mctpreactor expectations (USB/I2C/I3C).\n- Created a dedicated extractNVMeBusInfo in NVMeSensorMain.cpp to\n  handle the nested NVME1000.BusInfo0 structure.\n\nThis ensures both applications can correctly parse their respective\nconfigurations from Entity Manager. Tests and mock server were updated\nto reflect these changes.\n\nTested: All tests passed in Docker container.\nChange-Id: I28d5b196c5316974d689689304f52148d4617099\nGoogle-Bug-Id: 490106522\nSigned-off-by: Hao Jiang \u003cjianghao@google.com\u003e\n"
    },
    {
      "commit": "0028439a3692b0e919b6cec53b03285d07c5d431",
      "tree": "1f8db9367ddb1fb1c2be28b262c1fb992f0fef45",
      "parents": [
        "e68ab1146aa11182e85c7542bc427150ab54a16b"
      ],
      "author": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Thu Apr 23 16:54:40 2026 +0000"
      },
      "committer": {
        "name": "Muhammad Usama Chaudhry",
        "email": "muhammadusama@google.com",
        "time": "Wed Jul 29 10:15:39 2026 -0700"
      },
      "message": "mctputil: refactor to use coroutines for discovery\n\nRefactor setupMctpEndpointListener to use boost::asio::spawn and\nyield_method_call when querying existing associations from the Object\nMapper during initialization. This simplifies the code by removing the\nmanual barrier counting and nested callbacks.\n\nAlso update triggerDeferredQueries to correctly notify callbacks when\nan endpoint is removed, fixing a bug where removal notifications could\nbe missed.\n\nRemove some dead test code in NVMeMi.cpp.\n\nTested: All tests passed in Docker container with --privileged and\n--net\u003dhost.\n\nGoogle-Bug-Id: 490106522\nChange-Id: I77b000ec080e271140235578ba0b12ce476cff10\nSigned-off-by: Hao Jiang \u003cjianghao@google.com\u003e\n"
    },
    {
      "commit": "e68ab1146aa11182e85c7542bc427150ab54a16b",
      "tree": "2b6ff0b772a863c4b7e6bbd8e9f27e2003242173",
      "parents": [
        "be7ea24e6fff35274c6550423e1edf03f6ba72b9"
      ],
      "author": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Wed Apr 22 21:51:52 2026 +0000"
      },
      "committer": {
        "name": "Muhammad Usama Chaudhry",
        "email": "muhammadusama@google.com",
        "time": "Wed Jul 29 10:15:39 2026 -0700"
      },
      "message": "mctp: break circle dependencies in production code\n\nBreak circle dependencies in production code to resolve memory leaks:\n- Change device to weak_ptr in MctpdEndpoint.\n- Actively transfer ownership of callback std::function rvalue\n  references via local capture move in lambdas.\n- Invoke endpointRemoved() in ~MctpdDevice() for safe destruction.\n\nMajor test improvement:\n- Add Test 15 to verify destruction notification.\n\nMisc test fixes:\n- Add two-stage ASIO event queue draining in test TearDown().\n- Reorder stack variables to prevent stack use-after-free.\n- Add bounds to loops and use prctl for mock server cleanup.\n\nTested: All 15 tests passed in Docker (Task id: task-7293).\n\nGoogle-Bug-Id: 505231613\nChange-Id: I318a5654cbd0d3dbffa9edb416fd508343dc3354\n"
    },
    {
      "commit": "be7ea24e6fff35274c6550423e1edf03f6ba72b9",
      "tree": "ee3f1138742930f89f9c6d6d0abd352364e0d734",
      "parents": [
        "00f125d43be138c040c2f4671cdcf0b021ff6929"
      ],
      "author": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Wed Apr 22 09:01:18 2026 +0000"
      },
      "committer": {
        "name": "Muhammad Usama Chaudhry",
        "email": "muhammadusama@google.com",
        "time": "Wed Jul 29 10:15:39 2026 -0700"
      },
      "message": "nvmesensor: implement deferred setup and add unit tests\n\nImplement deferred MCTP setup in MctpReactorDevice to handle\nout-of-order events between Entity Manager and mctpd.\nAdd callback mechanism in MctpUtil to notify about endpoint events.\nRefine I2C extraction in NVMeSensorMain.cpp.\n\nAdd unit tests in test_MctpUtil.cpp to verify deferred setup\nand removal notifications.\nUpdate tests/meson.build to link against required sources.\n\nTested: Verified by running unit tests in Docker (all 14 tests passed).\n\nGoogle-Bug-Id: 505231613\nChange-Id: Id6b86e400071aefbc5221e64fbb75ab3d5f4207c\n"
    },
    {
      "commit": "00f125d43be138c040c2f4671cdcf0b021ff6929",
      "tree": "a14367576baf9c58cd2c6a344e0cfa6fba649098",
      "parents": [
        "6b4ae4c72e728dd451d8434d7815e26d8ffa03ff"
      ],
      "author": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Wed Apr 22 05:23:00 2026 +0000"
      },
      "committer": {
        "name": "Muhammad Usama Chaudhry",
        "email": "muhammadusama@google.com",
        "time": "Wed Jul 29 10:15:39 2026 -0700"
      },
      "message": "nvmesensor: clean up extraction and checks\n\nRefine the I2C extraction process in NVMeSensorMain.cpp to handle\nmi_mctp devices correctly.\n\nExtract protocol first, and only extract Bus/Address directly for\nmi_basic and mi_i2c. For mi_mctp, extract Bus and Address from BusInfo\nif the BusType is \"I2C\".\n\nRemove redundant isI2cAccessible variable and check, as they are\ncovered by earlier strict checks.\n\nAdd I2C support to extractBusInfo in MctpUtil.cpp.\n\nGoogle-Bug-Id: 490106522\nChange-Id: Iaf53e6933899f3a38657bd8c45fd7abdf472951e\nSigned-off-by: Hao Jiang \u003cjianghao@google.com\u003e\n"
    },
    {
      "commit": "6b4ae4c72e728dd451d8434d7815e26d8ffa03ff",
      "tree": "c523084eff435f2477cffeac7b98ad54b67dc207",
      "parents": [
        "7d388df1f06c1efda2e5617e52a09f398adfd8ef"
      ],
      "author": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Wed Apr 22 02:13:08 2026 +0000"
      },
      "committer": {
        "name": "Muhammad Usama Chaudhry",
        "email": "muhammadusama@google.com",
        "time": "Wed Jul 29 10:13:32 2026 -0700"
      },
      "message": "mctp: refactor to use coroutines\n\nRefactor performEmConfigQuery to use boost::asio::yield_context and\nyield_method_call to flatten the async callbacks.\n\nThis improves readability by making asynchronous D-Bus calls look\nsynchronous.\n\nWrap calls in InterfacesAdded handler and priming loop in\nboost::asio::spawn.\n\nTested: All 10 tests passed in Docker environment.\n\nChange-Id: I23eaa72f6215a388efcfc13733d88cf659e2d900\nGoogle-Bug-Id: 490106522\nSigned-off-by: Hao Jiang \u003cjianghao@google.com\u003e\n"
    },
    {
      "commit": "7d388df1f06c1efda2e5617e52a09f398adfd8ef",
      "tree": "afe174a5100c7df4f7f5b559357611c6dded1fec",
      "parents": [
        "ce8fd14aa1064c4466fd129e749ce75d9069a15d"
      ],
      "author": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Wed Apr 22 01:25:28 2026 +0000"
      },
      "committer": {
        "name": "Muhammad Usama Chaudhry",
        "email": "muhammadusama@google.com",
        "time": "Wed Jul 29 10:13:32 2026 -0700"
      },
      "message": "mctp: filter endpoints by message type\n\nAdd a filter to MctpUtil to only care about endpoints that support a\nspecific message type (e.g., type 4 for NVMe MI).\n\nWe assume the mctpd service name is au.com.codeconstruct.MCTP1 and use\nit directly to query the supported message types of an endpoint.\n\nA new unit test is added to validate that unsupported endpoints are\ncorrectly filtered.\n\nMisc:\n- Define MctpMessageType enum for readable message type passing.\n- Update mock server to support D-Bus properties and custom message\ntypes.\n\nTested: All 10 tests passed in Docker environment.\n\nChange-Id: I452cab692640d55efa71c2ee81058c7a51fb33f3\nGoogle-Bug-Id: 490106522\nSigned-off-by: Hao Jiang \u003cjianghao@google.com\u003e\n"
    },
    {
      "commit": "ce8fd14aa1064c4466fd129e749ce75d9069a15d",
      "tree": "e150e5570119cf18c3fb9aa857d2dc4ddd84aabc",
      "parents": [
        "d06cb612f703aae5dd452fa893a89f9fe80dfd9d"
      ],
      "author": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Tue Apr 21 20:00:36 2026 +0000"
      },
      "committer": {
        "name": "Muhammad Usama Chaudhry",
        "email": "muhammadusama@google.com",
        "time": "Wed Jul 29 10:13:32 2026 -0700"
      },
      "message": "mctp: add rate-limiting cooldown for queries\n\nAdd a rate-limiting cooldown of 5 seconds for back-to-back \"Add\"\nevents on the same endpoint to prevent flooding the Object Mapper.\n\nAn Add event triggered immediately after a Priming scan or a Remove\nevent is not impacted by this cooldown.\n\nNew unit tests are added to validate these rate-limiting behaviors.\n\nMisc:\n- Use TEST_SRC_DIR macro in tests to avoid hardcoded paths.\n- Increase Meson test timeout to 120 seconds for the test suite.\n\nChange-Id: I283acc82d6dc67fc0d09ba3187153845ed53801c\nGoogle-Bug-Id: 490106522\nSigned-off-by: Hao Jiang \u003cjianghao@google.com\u003e\n"
    },
    {
      "commit": "d06cb612f703aae5dd452fa893a89f9fe80dfd9d",
      "tree": "66340e367bfb83181bd29e04fd749a65d84a91a2",
      "parents": [
        "0fb1e3794b7ee89a317025ceb2579796fc559fd6"
      ],
      "author": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Tue Apr 21 05:14:32 2026 +0000"
      },
      "committer": {
        "name": "Muhammad Usama Chaudhry",
        "email": "muhammadusama@google.com",
        "time": "Wed Jul 29 10:13:32 2026 -0700"
      },
      "message": "mctp: Fix priming race condition using global barrier\n\nImplement a global querying flag and shared barrier counter in\nMctpUtil.cpp to postpone all D-Bus events during the priming scan.\nThis fixes a race condition where concurrent events arriving during the\nmulti-step priming query could cause stale endpoints or inconsistent\nstate.\n\nAdd Tests 4, 5, and 6 to verify that concurrent events (Add, Remove,\nRemove-\u003eAdd) are correctly deferred and processed after priming\ncompletes. Add #ifdef UNIT_TEST delay in MctpUtil.cpp to simulate the\nrace condition.\n\nChange-Id: I66aa19275290611ab5f485a19e0282806441d47f\nGoogle-Bug-Id: 490106522\nSigned-off-by: Hao Jiang \u003cjianghao@google.com\u003e\n"
    },
    {
      "commit": "0fb1e3794b7ee89a317025ceb2579796fc559fd6",
      "tree": "fc2bb4d8399e767cfe511b75ef90425a0530f601",
      "parents": [
        "0a92de455b916fdfba525d65cb104e56399e8bbf"
      ],
      "author": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Tue Apr 21 03:40:05 2026 +0000"
      },
      "committer": {
        "name": "Muhammad Usama Chaudhry",
        "email": "muhammadusama@google.com",
        "time": "Wed Jul 29 10:13:32 2026 -0700"
      },
      "message": "tests: Add unit tests for MctpUtil to handle concurrent D-Bus events\n\nAdd unit tests for MctpUtil to verify that concurrent Add and Remove\nevents arriving while a D-Bus query is in-flight are handled correctly.\nThe tests catch race conditions where state changes occur while the\napplication is asynchronously waiting for Entity Manager configurations:\n\n* Remove event during an active query cancels the operation.\n* Rapid succession of Add/Remove/Add events\n  correctly schedules a new query.\n\nChange-Id: I553bdf8cc656f8cc5af1898370536756f55253d0\nGoogle-Bug-Id: 490106522\nSigned-off-by: Hao Jiang \u003cjianghao@google.com\u003e\n"
    },
    {
      "commit": "0a92de455b916fdfba525d65cb104e56399e8bbf",
      "tree": "f8801dcbf7c4a6f50dbd706a3fe2d829951d8bcb",
      "parents": [
        "56966c1d71fb0ce53bf43176e62eb9b40d558a43"
      ],
      "author": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Sat Apr 18 02:21:48 2026 +0000"
      },
      "committer": {
        "name": "Muhammad Usama Chaudhry",
        "email": "muhammadusama@google.com",
        "time": "Wed Jul 29 10:11:41 2026 -0700"
      },
      "message": "mctp: refactor matching logic and priming query\n\nRefactored the MCTP matching logic to remove code duplication and\nimprove maintainability.\n\n1. Extracted the physical topology extraction logic from NVMeSensorMain\n   into a shared helper function `extractBusInfo` in MctpUtil. This\n   removed identical duplicate extraction loops that were used for both\n   the sensor configuration and the cached endpoint configurations.\n\n2. Merged the cache priming D-Bus query for associations with the\n   `performEmConfigQuery` function in MctpUtil. This eliminated the\n   redundant `GetManagedObjects` call and inline property parsing,\n   ensuring all EM queries follow the same execution and state tracking\n   path.\n\n3. Fixed inconsistent state setting in the cache priming loop to ensure\n   we don\u0027t trigger redundant queries on startup for existing devices.\n\nChange-Id: I6d5495e4be2b864cde90b4dfec805b2815e3e395\nGoogle-Bug-Id: 490106522\nSigned-off-by: Hao Jiang \u003cjianghao@google.com\u003e\n"
    },
    {
      "commit": "56966c1d71fb0ce53bf43176e62eb9b40d558a43",
      "tree": "1eeea3f58d274c298efc85ede2a166d34019f491",
      "parents": [
        "d7d5f993f0970241d432b0ab4af829a32ad502d0"
      ],
      "author": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Sat Apr 18 02:03:53 2026 +0000"
      },
      "committer": {
        "name": "Muhammad Usama Chaudhry",
        "email": "muhammadusama@google.com",
        "time": "Wed Jul 29 10:11:41 2026 -0700"
      },
      "message": "nvmesensor: dynamic MCTP matching via BusInfo\n\nRemoved the requirement for static MctpReactorConfigPath in NVME1000\nEntity Manager configurations. Instead, implemented a dynamic matching\nmechanism based on physical topology (BusInfo).\n\nAdded a background listener in MctpUtil that monitors associations\nbetween MCTP endpoints and Entity Manager configurations. When an\nassociation appears, it queries the configuration properties on demand\nand caches the full SensorData.\n\nUpdated handleConfigurations in NVMeSensorMain to perform the matching\nby iterating over the cached configurations and comparing BusInfo with\nthe sensor\u0027s BusInfo on the fly. This pushes the matching logic to the\nconsumer and makes it future-proof against schema changes.\n\nAdded cache priming on startup to handle pre-existing associations and\nconfigurations, ensuring listeners are registered before queries to\navoid race conditions.\nAdded a new constructor to MctpReactorDevice to accept a pre-resolved\nendpoint path, bypassing the Object Mapper lookup in setup().\n\nThis change decouples nvmesensor from static paths and specific setup\nagents, enabling support for dynamic buses like USB.\n\nChange-Id: I827a25b7e7d6cba2f7cf1e60c351b39f03b4d4dc\nGoogle-Bug-Id: 490106522\nSigned-off-by: Hao Jiang \u003cjianghao@google.com\u003e\n"
    },
    {
      "commit": "d7d5f993f0970241d432b0ab4af829a32ad502d0",
      "tree": "3745a3a9e787ebadb1629f4ec4d4d3db47ee2822",
      "parents": [
        "c5025c25527641923bc54bc76f0c422764857bd0"
      ],
      "author": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Fri Apr 17 01:36:09 2026 +0000"
      },
      "committer": {
        "name": "Muhammad Usama Chaudhry",
        "email": "muhammadusama@google.com",
        "time": "Wed Jul 29 10:11:41 2026 -0700"
      },
      "message": "nvme: decouple NVMeDevice from NVMeSubsystem\n\nDecoupled NVMeDevice from NVMeSubsystem. NVMeDevice now takes a name\nstring instead of a shared pointer to NVMeSubsystem. NVMeSensorMain\nnow manages the lifetime and start/stop of both independently. Tests\nwere updated to reflect these changes.\n\nChange-Id: Ic3106534742cf55737dc479bc8524a7e9591c4a0\nSigned-off-by: Hao Jiang \u003cjianghao@google.com\u003e\n"
    },
    {
      "commit": "c5025c25527641923bc54bc76f0c422764857bd0",
      "tree": "b5a6c70b7ec036d163c7e2c6d469ed01a6889878",
      "parents": [
        "11ff6971edb5e92960559ec33e7d1b6742708b92"
      ],
      "author": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Mon Mar 30 21:57:29 2026 +0000"
      },
      "committer": {
        "name": "Muhammad Usama Chaudhry",
        "email": "muhammadusama@google.com",
        "time": "Wed Jul 29 10:10:20 2026 -0700"
      },
      "message": "nvmedevice: fix tight event cycle grace period race conditions\n\nThis commit resolves two race conditions that could bypass the tight\nevent cycle grace period mitigation:\n\n1. Ghost Callback Race: A `Degraded` or `Removed` event could be processed\n   immediately after the grace period timer expires but before the ASIO\n   queue executes the timer callback. Relying solely on `recovering` was\n   insufficient (especially for `Removed` events), leading to an unwanted\n   NVMe interface start on a device that was just stopped.\n2. Consecutive Available Bypass: Back-to-back `Available` events during\n   the grace period bypassed the `recovering` boolean logic and immediately\n   started the interface, completely negating the grace period.\n\nBoth race conditions are now closed by introducing a `gracePeriodActive`\nstate variable. We now safely verify this state within the async timer\ncallback before starting the device, and explicitly ignore consecutive\n`Available` events when the ASIO timer is actively running.\n\nTesting:\n- Added `consecutiveAvailableBypass` unit test to verify that consecutive\n  `Available` events do not bypass the grace period timer.\n\nTested: all unitest passed\nChange-Id: Iced289dd4da6692dc3353e4814228eacaa6f2c97\nSigned-off-by: Hao Jiang \u003cjianghao@google.com\u003e\n"
    },
    {
      "commit": "11ff6971edb5e92960559ec33e7d1b6742708b92",
      "tree": "2c6e6e872f12452c6559cf9228f25b982caf2a61",
      "parents": [
        "e610be36a9cbd9d2dbc17e97ece8611fcf9aed3f"
      ],
      "author": {
        "name": "Agrim Bharat",
        "email": "agrimbharat@google.com",
        "time": "Tue Jun 02 20:51:37 2026 +0000"
      },
      "committer": {
        "name": "Agrim Bharat",
        "email": "agrimbharat@google.com",
        "time": "Wed Jul 22 10:42:49 2026 -0700"
      },
      "message": "nvmed: Implement separate SSD Telemetry Data Areas\n\nEnhance nvmed to be able to support configurable SSD data areas\nfor host initiated telemetry while maintaining backwards compatibility\nfor standard aggregated host initiated telemetry queries.\n\nTested: https://paste.googleplex.com/5986425462980608\nGoogle-Bug-Id: 516921479\nChange-Id: Ie3479c186702d451882b92aa4c8e6c8f4d7cdc4c\nSigned-off-by: Agrim Bharat \u003cagrimbharat@google.com\u003e\n"
    },
    {
      "commit": "e610be36a9cbd9d2dbc17e97ece8611fcf9aed3f",
      "tree": "13422cb065df55c25a3705daded9eaf8efe53a65",
      "parents": [
        "db5b41216e14813591f4e56a12e92ee9182356ec"
      ],
      "author": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Wed Jul 08 18:05:28 2026 +0000"
      },
      "committer": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Wed Jul 08 18:10:42 2026 +0000"
      },
      "message": "tests: fix the dependency issue for nvme_mi_recovery\n\nThe test missed the dependency to NVMe Get/Set Feature when\nmerging/rebasing to the HEAD.\n\nTested: local unitest built and passed\nGoogle-Bug-Id: N/A\nChange-Id: I4e92395bdc80cb9b56d82fe08af972ccbe56deb0\nSigned-off-by: Hao Jiang \u003cjianghao@google.com\u003e\n"
    },
    {
      "commit": "db5b41216e14813591f4e56a12e92ee9182356ec",
      "tree": "e3e61224b9f8dd9122392111ef220a26c3e0b430",
      "parents": [
        "d64f85e0e0c8d95150ba864a86eee0e8fdf84c0a"
      ],
      "author": {
        "name": "Andrew Jeffery",
        "email": "andrew@codeconstruct.com.au",
        "time": "Tue May 14 14:40:01 2024 +0930"
      },
      "committer": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Tue Jul 07 15:47:18 2026 -0700"
      },
      "message": "tests: Add NVMe-MI recovery test\n\nExercise the NVMeMi endpoint recovery implementation by exploiting the\nlink seam for libnvme{,-mi}.\n\nTo do this we first reuse the headers provided by libnvme with a\npartial-dependency declaration in the test. From there we provide our\nown (largely neutered) implementation of the APIs to link against.\n\nWith this in-place we can trivially recreate the error discussed in[1]\nby returning erroneous values from the libnvme APIs. The higher-level\nconsequence is we drive the NVMeMi implementation through the endpoint\nrecovery process while trying to optimize the connection. At that point\nwe can use the usual GMock APIs to define the behaviors we want from\nMctpDevice and MctpEndpoint during the recovery process.\n\n[1]: https://github.com/CodeConstruct/dbus-sensors/issues/14\n\nAn interesting future direction is to allow mocks to be injected behind\nthe libnvme{,-mi} link seam. Adding a method to inject mocks enables\ndescribing arbitrary NVMe scenarios in the usual gmock style, which has\nthe potential to drastically increase test code coverage for nvmesensor.\n\nReturning to the change at hand, note that the test case causes valgrind\nto report a leak, however this appears to be from the gmock error report\nitself. Given we\u0027re working to resolve the gmock error, the leak will\ndisappear with it:\n\n```\n...\nMock MCTP Device] MCTP connection is not established\nerror reading ctemp from subsystem, reason:Transport endpoint is not connected\nSensor bar reading error!\n../tests/test_nvme_mi_recovery.cpp:63: Failure\nMock function called more times than expected - returning directly.\n    Function call: recover()\n         Expected: to be called between 1 and 3 times\n           Actual: called 5 times - over-saturated and active\n\n[Mock MCTP Device] MCTP connection is not established\nerror reading ctemp from subsystem, reason:Transport endpoint is not connected\n../tests/test_nvme_mi_recovery.cpp:63: Failure\nMock function called more times than expected - returning directly.\n    Function call: recover()\n         Expected: to be called between 1 and 3 times\n           Actual: called 6 times - over-saturated and active\n\nstatus else\npoll loop has been canceled\n../tests/test_nvme_mi_recovery.cpp:90: Failure\nValue of: testing::Mock::VerifyAndClearExpectations(mctpEp.get())\n  Actual: false\nExpected: true\n\n[  FAILED  ] NVMeRecovery.optimisationFailure (8348 ms)\n[----------] 1 test from NVMeRecovery (8359 ms total)\n\n[----------] Global test environment tear-down\n[\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d] 1 test from 1 test suite ran. (8415 ms total)\n[  PASSED  ] 0 tests.\n[  FAILED  ] 1 test, listed below:\n[  FAILED  ] NVMeRecovery.optimisationFailure\n\n 1 FAILED TEST\n\u003d\u003d197574\u003d\u003d\n\u003d\u003d197574\u003d\u003d HEAP SUMMARY:\n\u003d\u003d197574\u003d\u003d     in use at exit: 8 bytes in 1 blocks\n\u003d\u003d197574\u003d\u003d   total heap usage: 7,500 allocs, 7,499 frees, 1,751,392 bytes allocated\n\u003d\u003d197574\u003d\u003d\n\u003d\u003d197574\u003d\u003d 8 bytes in 1 blocks are still reachable in loss record 1 of 1\n\u003d\u003d197574\u003d\u003d    at 0x4840F83: operator new(unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)\n\u003d\u003d197574\u003d\u003d    by 0xD157EF: testing::internal::GetFailureReporter() (gmock-internal-utils.cc:124)\n\u003d\u003d197574\u003d\u003d    by 0x9C16E3: testing::internal::Expect(bool, char const*, int, std::__cxx11::basic_string\u003cchar, std::char_traits\u003cchar\u003e, std::allocator\u003cchar\u003e \u003e const\u0026) (gmock-internal-utils.h:259)\n\u003d\u003d197574\u003d\u003d    by 0x9C2303: testing::internal::UntypedFunctionMockerBase::FailureCleanupHandler::~FailureCleanupHandler() (gmock-spec-builders.h:1427)\n\u003d\u003d197574\u003d\u003d    by 0x9D852C: testing::internal::FunctionMocker\u003cvoid ()\u003e::InvokeWith(std::tuple\u003c\u003e\u0026\u0026) (gmock-spec-builders.h:1898)\n\u003d\u003d197574\u003d\u003d    by 0x9CB22B: testing::internal::FunctionMocker\u003cvoid ()\u003e::Invoke() (gmock-spec-builders.h:1548)\n\u003d\u003d197574\u003d\u003d    by 0x9C2EF8: MockMctpEndpoint::recover() (test_nvme_mi_recovery.cpp:27)\n\u003d\u003d197574\u003d\u003d    by 0xAD57EB: NVMeMi::recover() (NVMeMi.cpp:192)\n\u003d\u003d197574\u003d\u003d    by 0xAD50B1: NVMeMi::epOptimize()::{lambda(boost::system::error_code)#1}::operator()(boost::system::error_code) const::{lambda(std::error_code const\u0026)#1}::operator()(std::error_code const\u0026) const (NVMeMi.cpp:167)\n\u003d\u003d197574\u003d\u003d    by 0xAFF26F: void std::__invoke_impl\u003cvoid, NVMeMi::epOptimize()::{lambda(boost::system::error_code)#1}::operator()(boost::system::error_code) const::{lambda(std::error_code const\u0026)#1}\u0026, std::error_code const\u0026\u003e(std::__invoke_other, NVMeMi::epOptimize()::{lambda(boost::system::error_code)#1}::operator()(boost::system::error_code) const::{lambda(std::error_code const\u0026)#1}\u0026, std::error_code const\u0026) (invoke.h:61)\n\u003d\u003d197574\u003d\u003d    by 0xAF3ED2: std::enable_if\u003cis_invocable_r_v\u003cvoid, NVMeMi::epOptimize()::{lambda(boost::system::error_code)#1}::operator()(boost::system::error_code) const::{lambda(std::error_code const\u0026)#1}\u0026, std::error_code const\u0026\u003e, void\u003e::type std::__invoke_r\u003cvoid, NVMeMi::epOptimize()::{lambda(boost::system::error_code)#1}::operator()(boost::system::error_code) const::{lambda(std::error_code const\u0026)#1}\u0026, std::error_code const\u0026\u003e(NVMeMi::epOptimize()::{lambda(boost::system::error_code)#1}::operator()(boost::system::error_code) const::{lambda(std::error_code const\u0026)#1}\u0026, std::error_code const\u0026) (invoke.h:111)\n\u003d\u003d197574\u003d\u003d    by 0xAEFE8F: std::_Function_handler\u003cvoid (std::error_code const\u0026), NVMeMi::epOptimize()::{lambda(boost::system::error_code)#1}::operator()(boost::system::error_code) const::{lambda(std::error_code const\u0026)#1}\u003e::_M_invoke(std::_Any_data const\u0026, std::error_code const\u0026) (std_function.h:290)\n\u003d\u003d197574\u003d\u003d\n\u003d\u003d197574\u003d\u003d LEAK SUMMARY:\n\u003d\u003d197574\u003d\u003d    definitely lost: 0 bytes in 0 blocks\n\u003d\u003d197574\u003d\u003d    indirectly lost: 0 bytes in 0 blocks\n\u003d\u003d197574\u003d\u003d      possibly lost: 0 bytes in 0 blocks\n\u003d\u003d197574\u003d\u003d    still reachable: 8 bytes in 1 blocks\n\u003d\u003d197574\u003d\u003d         suppressed: 0 bytes in 0 blocks\n\u003d\u003d197574\u003d\u003d\n\u003d\u003d197574\u003d\u003d For lists of detected and suppressed errors, rerun with: -s\n\u003d\u003d197574\u003d\u003d ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)\n```\n\nChange-Id: Idf3fb6d167a9e11ea1d554c4ab2f2c50d1489421\nSigned-off-by: Andrew Jeffery \u003candrew@codeconstruct.com.au\u003e\n"
    },
    {
      "commit": "d64f85e0e0c8d95150ba864a86eee0e8fdf84c0a",
      "tree": "ecf7ec40155f582168ed28a4a69fadec892aaab9",
      "parents": [
        "ade1af2faeae1d7dbcb2234282552250f2515029"
      ],
      "author": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Thu Jun 11 20:16:08 2026 +0000"
      },
      "committer": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Tue Jul 07 15:47:18 2026 -0700"
      },
      "message": "style: format guidelines and NVMeDevice\n\nFormat gemini.md and src/NVMeDevice.hpp using prettier and clang-format\nto satisfy the local Docker linter/formatter check rules.\n\nThis ensures that subsequent commits in the chain can pass local presubmit\nverification cleanly.\n\nTested: Verified with local format-code.sh check in Docker.\nGoogle-Bug-Id: N/A\nChange-Id: I9dd070892b67c13d1940af7d66560c9fe7e62384\nSigned-off-by: Hao Jiang \u003cjianghao@google.com\u003e\n"
    },
    {
      "commit": "ade1af2faeae1d7dbcb2234282552250f2515029",
      "tree": "0814e07671cc0faf10f39fb31e91766371db8077",
      "parents": [
        "de13534bf1cd571b050435b3b7c11fd110f1c31e"
      ],
      "author": {
        "name": "Andrew Jeffery",
        "email": "andrew@codeconstruct.com.au",
        "time": "Fri May 03 14:52:07 2024 +0930"
      },
      "committer": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Tue Jul 07 15:47:18 2026 -0700"
      },
      "message": "subprojects: Add phosphor-objmgr wrap\n\nThe nvme test suite requires the mapper. Include a wrap for\nphosphor-objmgr such that we can build the mapperx binary if one is not\npresent in the system environment.\n\nChange-Id: I60f4cfe62452f9111090959f5858cfe873b09f65\nSigned-off-by: Andrew Jeffery \u003candrew@codeconstruct.com.au\u003e\n"
    },
    {
      "commit": "de13534bf1cd571b050435b3b7c11fd110f1c31e",
      "tree": "7445bdf468254df74fc9c03f47f134cc085cf2e5",
      "parents": [
        "0a06753e17b3b1daaecd30de291061abb374a833"
      ],
      "author": {
        "name": "Andrew Jeffery",
        "email": "andrew@codeconstruct.com.au",
        "time": "Thu May 02 14:14:06 2024 +0930"
      },
      "committer": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Tue Jul 07 15:47:18 2026 -0700"
      },
      "message": "tests: setup: Use a consistent path to bash\n\nThe `run_command()` directive in `test/meson.build` used `/usr/bin/bash`\nwhile `tests/setup.sh` used `/bin/bash` in the shebang line. With the\nwhole usr-merge thing, everything should be in `/usr/bin` going forward,\nand the fact that it is the `run_command()` directive in `tests/\nmeson.build` that is executed suggests `/usr/bin/bash` is reasonable.\n\nChange-Id: I3d2b444ac320ac7b13b3348ab9eb642dc0050b53\nSigned-off-by: Andrew Jeffery \u003candrew@codeconstruct.com.au\u003e\n"
    },
    {
      "commit": "0a06753e17b3b1daaecd30de291061abb374a833",
      "tree": "fa4e7e52ce56e28aca410f8f9c592e674bfa47f3",
      "parents": [
        "50e7f4ba0d20fc23c93b33675d7ea8e2e84da557"
      ],
      "author": {
        "name": "Andrew Jeffery",
        "email": "andrew@codeconstruct.com.au",
        "time": "Mon May 13 12:06:30 2024 +0930"
      },
      "committer": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Tue Jul 07 15:47:18 2026 -0700"
      },
      "message": "NVMeDevice: Add recovery grace period\n\nTo mitigate starving other tasks out of the main thread, implement a\ngrace-period that delays restarting the NVMeMiIntf implementation once\nMCTP endpoint recovery completes. Together with reducing libnvme\u0027s\ndefault timeout for quirk probing this should be enough to mitigate the\nissue discussed in [1].\n\n[1]: https://github.com/CodeConstruct/dbus-sensors/issues/14\n\nChange-Id: Iae742fd1e67cb84c163840e7b74868bd6256d6f1\nSigned-off-by: Andrew Jeffery \u003candrew@codeconstruct.com.au\u003e\n"
    },
    {
      "commit": "50e7f4ba0d20fc23c93b33675d7ea8e2e84da557",
      "tree": "4da5b0703e8a31ab78e95de925816796d4f3c0a1",
      "parents": [
        "41450166d2220a7884e4f0cbbd5691ec2d648baf"
      ],
      "author": {
        "name": "Andrew Jeffery",
        "email": "andrew@codeconstruct.com.au",
        "time": "Fri May 10 17:06:26 2024 +0930"
      },
      "committer": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Tue Jul 07 15:47:18 2026 -0700"
      },
      "message": "NVMeDevice: Remove redundant start\n\nThe final act of starting the underlying NVMeMiIntf instance in\nNVMeDevice::finalize() is redundant. The contract of\nMctpEndpoint::subscribe() is that at least one of the callbacks will\nbe invoked at least once, to ensure visibility of the current endpoint\nstate. As such, if the endpoint is in the \u0027Available\u0027 state then\nNVMeDevice::available() will be invoked, which will in-turn invoke\nNVMeMiIntf::start(). Removal of the redundant call also removes the\ninitiation of one endpoint recovery request in the event that\nthat the endpoint is \u0027Degraded\u0027 at the time of the call to\nNVMeDevice::finalize().\n\nIt\u0027s not an error to invoke NVMeMiIntf::start() multiple times, so this\nhasn\u0027t been a concern, but it is unnecessary.\n\nChange-Id: Id2c2e5af864a2fde64205b62518df68d82783796\nSigned-off-by: Andrew Jeffery \u003candrew@codeconstruct.com.au\u003e\n"
    },
    {
      "commit": "41450166d2220a7884e4f0cbbd5691ec2d648baf",
      "tree": "30150e8e19369ab98ee133551333cdfeb81c0bc7",
      "parents": [
        "e2946e4bd5d27cb813dffa443d2f5f0797f0d3f9"
      ],
      "author": {
        "name": "Andrew Jeffery",
        "email": "andrew@codeconstruct.com.au",
        "time": "Wed May 15 13:46:31 2024 +0930"
      },
      "committer": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Tue Jul 07 15:47:18 2026 -0700"
      },
      "message": "MctpEndpoint: Document behavior of MctpEndpoint::subscribe()\n\nAnd important part of its contract is that at least one of the\nregistered callbacks is invoked at least once.\n\nChange-Id: I6396e15396e1fa724f1037dad196f377fba20cb2\nSigned-off-by: Andrew Jeffery \u003candrew@codeconstruct.com.au\u003e\n"
    },
    {
      "commit": "e2946e4bd5d27cb813dffa443d2f5f0797f0d3f9",
      "tree": "13c7968c3ea641d642429390d76396343a1a14fa",
      "parents": [
        "819898f523b1307bb2c11b3318181b4edc974623"
      ],
      "author": {
        "name": "Andrew Jeffery",
        "email": "andrew@codeconstruct.com.au",
        "time": "Tue May 14 14:40:01 2024 +0930"
      },
      "committer": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Tue Jul 07 15:47:18 2026 -0700"
      },
      "message": "NVMeDevice: Integrate subsystem startup\n\nCurrently the associated NVMeSubsystem instance is stopped via\nNVMeDevice::stop() to maintain encapsulation. To mirror stop(),\nand given the subsystem also needs to be started in both the\nbasic management command and MI paths, integrate the call to\nNVMeSubsystem::start() into NVMeDevice::start().\n\nNote that NVMeDevice::start() is only invoked after instantiation of its\nobject, in the same manner as NVMeSubsystem, and so is only\never invoked once. MCTP endpoint recovery calls back through the\nprivate NVMeDevice::setup() method, which is separate to\n(but invoked from) NVMeDevice::start().\n\nChange-Id: Ie29782de1e0dd2581c59a9fdddca3942d52b2e77\nSigned-off-by: Andrew Jeffery \u003candrew@codeconstruct.com.au\u003e\n"
    },
    {
      "commit": "819898f523b1307bb2c11b3318181b4edc974623",
      "tree": "88898f773e80e2a9c7d0860e72e5aae3f950cab4",
      "parents": [
        "36e2228e9cd0eaedb3ac67a4152728edbed61752"
      ],
      "author": {
        "name": "Andrew Jeffery",
        "email": "andrew@codeconstruct.com.au",
        "time": "Tue May 14 14:40:01 2024 +0930"
      },
      "committer": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Tue Jul 07 15:47:18 2026 -0700"
      },
      "message": "NVMeDevice: Clean up lambdas and lifetimes\n\nsetupMctpDevice() implemented the MctpEndpoint::subscribe() callbacks\nentirely with in-line lambda functions.\n\nGeneral consensus is that long and/or complex lambdas are not\ndesirable[1].\n\nGiven that we\u0027re only going to add to the complexity to mitigate MCTP\nendpoint recovery event cycles, unpick the lambdas by refactoring them\nto call back into private methods of NVMeDevice.\n\nTogether with untangling the lambda implementations, we can\nsignificantly simplify the captures. We make NVMeDevice inherit\nstd::enable_shared_from_this, after which the lambdas only require a\nweak pointer to NVMeDevice.\n\nFrom there we provide the usual NVMeDevice::create() overloads to\nrequire its instantion be wrapped in a std::shared_ptr.\n\n[1]: https://github.com/openbmc/docs/blob/master/anti-patterns.md#very-long-lambda-callbacks\n\nChange-Id: I53574da34448355eff0aea18cda744dc72e20849\nSigned-off-by: Andrew Jeffery \u003candrew@codeconstruct.com.au\u003e\n"
    },
    {
      "commit": "36e2228e9cd0eaedb3ac67a4152728edbed61752",
      "tree": "dc1c409f2fbefd62ca71b82af53aa41aef775eee",
      "parents": [
        "c32220ec553c1bd13fe3f882a10d985132cb852d"
      ],
      "author": {
        "name": "Andrew Jeffery",
        "email": "andrew@codeconstruct.com.au",
        "time": "Fri May 03 16:55:51 2024 +0930"
      },
      "committer": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Tue Jul 07 15:47:18 2026 -0700"
      },
      "message": "NVMeSensorMain: Split out NVMeDevice\n\nNVMeDevice was defined as a type to hold references to the MI and\nsubsystem instances across the lifetime of the device configuration\nprovided by EM.\n\nsetupMctpDevice() was a static function associated with these objects by\nway of taking them as parameters. A small trick here was the conversion\nof strong to weak pointers by way of the types specified for the formal\nparameters. The conversion enables the desired lifetime management of\nthe associated DBus objects, tying them to the EM configuration (and not\nthe lifetime of `mctpd` DBus objects).\n\nReally though, setupMctpDevice() could be better expressed as a method\non NVMeDevice: This way we can handle any smart-pointer type conversions\ninternal to the class\u0027 implementation, and applying this perspective\nincreases the testability of the code. A final benefit is that\nby isolating the code we can refactor it to add features without\nsignificantly impacting its readability. Ultimately the goal is to\ninsert a delay via a timer to mitigate stalling of the main thread due\nto recovery-related event-cycles.\n\nHere we purely do the code-motion that moves the implementation of\nsetupMctpEndpoint() out of NVMeSensorMain.cpp, along with defining a\nmethod that wraps its invocation.\n\nChange-Id: I498c43561dee61462e049b9ad43c987e1754ba0c\nSigned-off-by: Andrew Jeffery \u003candrew@codeconstruct.com.au\u003e\n"
    },
    {
      "commit": "c32220ec553c1bd13fe3f882a10d985132cb852d",
      "tree": "3111d2645f83d1ea52b5c0493d24b195df20a9ca",
      "parents": [
        "dcc5c4809c027fe713c838c4a1f0b6ce90806c94"
      ],
      "author": {
        "name": "Andrew Jeffery",
        "email": "andrew@codeconstruct.com.au",
        "time": "Fri May 03 16:55:51 2024 +0930"
      },
      "committer": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Tue Jul 07 15:47:18 2026 -0700"
      },
      "message": "NVMeSensorMain: Merge interface and subsystem config loops\n\nThe startup state machine of NVMeMi is (eventually) asynchronous,\nand the events driving it are deferred beyond the startup of the\nNVMeSubsystem. The comment justifying the split-loop approach no-longer\nseems to make sense, and even if it did at some stage, the delay implied\nis quite uncontrolled. Further, the NVMeMi instance will (now) reject\nattempts to communicate with the endpoint until its own initialization\nprocess is complete, meaning there will not be any additional bus\ncontention from subsystem-related traffic.\n\nChange-Id: Id7754d8e45932b7f7db38cce668a8d143c7eea22\nSigned-off-by: Andrew Jeffery \u003candrew@codeconstruct.com.au\u003e\n"
    },
    {
      "commit": "dcc5c4809c027fe713c838c4a1f0b6ce90806c94",
      "tree": "9d923350f38eceebe75aa79d890ec8f2f4f400cb",
      "parents": [
        "9edfbc571497fb9d7dcf082bd69988c50a9bcdc0"
      ],
      "author": {
        "name": "Andrew Jeffery",
        "email": "andrew@codeconstruct.com.au",
        "time": "Wed May 08 16:21:55 2024 +0930"
      },
      "committer": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Tue Jul 07 15:47:18 2026 -0700"
      },
      "message": "NVMeSensorMain: Rename NVMeIntf-related variables\n\nMake it clear that the resulting object doesn\u0027t represent the underlying\nprotocol but rather the abstract interface.\n\nChange-Id: Ie01935faf97dd2571241a50ff77de4b76c4c1759\nSigned-off-by: Andrew Jeffery \u003candrew@codeconstruct.com.au\u003e\n"
    },
    {
      "commit": "9edfbc571497fb9d7dcf082bd69988c50a9bcdc0",
      "tree": "373df73ca56baf852ce7e8ca2db213216dcf2f68",
      "parents": [
        "bed9f67af7e93999960f3cb6acd53c9b4727f9c0"
      ],
      "author": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Wed May 06 21:31:52 2026 +0000"
      },
      "committer": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Tue Jul 07 15:47:18 2026 -0700"
      },
      "message": "docs: add gemini.md guidelines\n\nAdd gemini.md containing project guidelines for the Gemini coding\nassistant.\n\nTested: N/A\n\nChange-Id: I5c0669fc49af7cd38f621678b5bef5d815cd4789\nSigned-off-by: Hao Jiang \u003cjianghao@google.com\u003e\n"
    },
    {
      "commit": "bed9f67af7e93999960f3cb6acd53c9b4727f9c0",
      "tree": "278dc6783265599fde024998b9dd7901704f1386",
      "parents": [
        "03f34054a379e221d88afd3e969052c7c322f3b7"
      ],
      "author": {
        "name": "Guangzong Chen",
        "email": "guangzong@google.com",
        "time": "Thu May 28 19:45:58 2026 +0000"
      },
      "committer": {
        "name": "Guangzong Chen",
        "email": "guangzong@google.com",
        "time": "Tue Jul 07 12:10:44 2026 -0700"
      },
      "message": "FeatureStore: Support Log Page 12h for feature discovery and filtering\n\n- Add support for reading Log Page 12h in NVMeMi.\n- Use Log Page 12h to filter supported features in FeatureStore.\n- Hardcode NSID to NONE for Log Page 12h queries.\n\nDesign-Doc: go/bmc-redfish-nvme-get-set-features\nGoogle-Bug-Id: 513600176\nChange-Id: I8fb1d414cd5aaac3bbcf5fe9e389f19a2598bc57\nSigned-off-by: Guangzong Chen \u003cguangzong@google.com\u003e\n"
    },
    {
      "commit": "03f34054a379e221d88afd3e969052c7c322f3b7",
      "tree": "8df1b3920a75e523d8131564dceb608cb0d6faed",
      "parents": [
        "9657e1ff4c90c655662ab2149f04b2eb1c808e28"
      ],
      "author": {
        "name": "Muhammad Usama",
        "email": "muhammadusama@google.com",
        "time": "Thu Jun 25 22:37:44 2026 +0000"
      },
      "committer": {
        "name": "Muhammad Usama",
        "email": "muhammadusama@google.com",
        "time": "Thu Jun 25 22:37:44 2026 +0000"
      },
      "message": "sensor: Use default member initializers for hysteresis\n\nFix clang-tidy modernize-use-default-member-init warnings for\nhysteresisTrigger and hysteresisPublish in Sensor class.\n\nInitialize them using default member initializers with maxValue and\nminValue, and remove them from the constructor initializer list.\n\nChange-Id: I5269f51def1433b857c2061093859d3ea397bdf3\nSigned-off-by: Muhammad Usama \u003cmuhammadusama@google.com\u003e\n"
    },
    {
      "commit": "9657e1ff4c90c655662ab2149f04b2eb1c808e28",
      "tree": "30588b176a1302dabecebd60dbc9093cbe110f79",
      "parents": [
        "331a65f7b4743a526c82615af5f10a7eb604dc5d"
      ],
      "author": {
        "name": "Muhammad Usama",
        "email": "muhammadusama@google.com",
        "time": "Thu Jun 25 21:47:40 2026 +0000"
      },
      "committer": {
        "name": "Muhammad Usama",
        "email": "muhammadusama@google.com",
        "time": "Thu Jun 25 21:51:54 2026 +0000"
      },
      "message": "tests: Fix setup.sh to pass DBus env vars through sudo\n\nThe script setup.sh starts mapperx daemon using sudo.\nIn some environments, sudo is configured to ignore \u0027-E\u0027 (environment\npreservation), which cleans critical environment variables like\nLD_LIBRARY_PATH, DBUS_SESSION_BUS_ADDRESS, and DBUS_STARTER_BUS_TYPE.\n\nThis causes mapperx to fail to start due to missing libraries or\nfailing to connect to the session bus.\n\nFix this by explicitly passing these variables via \u0027sudo env\u0027 when they\nare set.\n\nChange-Id: I12a9b1d57efd43b01b48d86b11c4ae9e520409d9\nSigned-off-by: Muhammad Usama \u003cmuhammadusama@google.com\u003e\n"
    },
    {
      "commit": "331a65f7b4743a526c82615af5f10a7eb604dc5d",
      "tree": "82ee3dbf7377faf42bc33e258c35ef1d71bc879d",
      "parents": [
        "f3087285df8b44e49bb262901d15656116c2d22e"
      ],
      "author": {
        "name": "Guangzong Chen",
        "email": "guangzong@google.com",
        "time": "Thu May 28 18:12:44 2026 +0000"
      },
      "committer": {
        "name": "Guangzong Chen",
        "email": "guangzong@google.com",
        "time": "Mon Jun 22 23:37:13 2026 +0000"
      },
      "message": "FeatureStore: Add unit tests\n\nAdds unit tests for FeatureStore and updates existing tests to support\nFeatureStore mocks.\n\nDesign-Doc: go/bmc-redfish-nvme-get-set-features\nGoogle-Bug-Id: 405609473\nChange-Id: I8edea2aba5a665764609a400fd097b65d24b66cb\nSigned-off-by: Guangzong Chen \u003cguangzong@google.com\u003e\n"
    },
    {
      "commit": "f3087285df8b44e49bb262901d15656116c2d22e",
      "tree": "bf13c4da27fdd441932111d7f07ffc06be5f24fa",
      "parents": [
        "c330ea67b0bffea73feb1443c2f6f257eb531b36"
      ],
      "author": {
        "name": "Guangzong Chen",
        "email": "guangzong@google.com",
        "time": "Tue Apr 21 00:46:19 2026 +0000"
      },
      "committer": {
        "name": "Guangzong Chen",
        "email": "guangzong@google.com",
        "time": "Mon Jun 22 19:51:36 2026 +0000"
      },
      "message": "FeatureStore: Integrate into NVMe objects\n\nInstantiates and attaches FeatureStore to Controller, Subsystem, and Volume\nobjects.\n\nDesign-Doc: go/bmc-redfish-nvme-get-set-features\nGoogle-Bug-Id: 405609473\nChange-Id: I88312cdc5061f3e3b8c3a022773921f9f5deef69\nSigned-off-by: Guangzong Chen \u003cguangzong@google.com\u003e\n"
    },
    {
      "commit": "c330ea67b0bffea73feb1443c2f6f257eb531b36",
      "tree": "b28446f0fa4392546f682fd83b07656ed0bae6f6",
      "parents": [
        "d4a3d80a22c2be5ec4959a67731439506d1b8722"
      ],
      "author": {
        "name": "Guangzong Chen",
        "email": "guangzong@google.com",
        "time": "Tue Apr 21 00:46:16 2026 +0000"
      },
      "committer": {
        "name": "Guangzong Chen",
        "email": "guangzong@google.com",
        "time": "Tue Jun 16 20:15:51 2026 +0000"
      },
      "message": "FeatureStore: Implement feature discovery and get/set logic\n\nImplements the discovery, get, and set logic in FeatureStore.\n\nDesign-Doc: go/bmc-redfish-nvme-get-set-features\nGoogle-Bug-Id: 405609473\nChange-Id: If79b4f2656263a93f2a26b1cead3588ddda3bc49\nSigned-off-by: Guangzong Chen \u003cguangzong@google.com\u003e\n"
    },
    {
      "commit": "d4a3d80a22c2be5ec4959a67731439506d1b8722",
      "tree": "275180c013326a9bf9609ccaccbaccd45fa8ea4e",
      "parents": [
        "85396d322631a3c94c9264d1125ad33386422eb3"
      ],
      "author": {
        "name": "Guangzong Chen",
        "email": "guangzong@google.com",
        "time": "Tue Apr 21 00:46:09 2026 +0000"
      },
      "committer": {
        "name": "Guangzong Chen",
        "email": "guangzong@google.com",
        "time": "Fri Jun 12 01:16:16 2026 +0000"
      },
      "message": "FeatureStore: Add adminGetFeatures and adminSetFeatures to NVMeMi\n\nImplements the low-level NVMe-MI admin commands for getting and setting\nfeatures.\n\nDesign-Doc: go/bmc-redfish-nvme-get-set-features\nGoogle-Bug-Id: 405609473\nChange-Id: I280a58835c9250d03b883ef1a5ddd8a5ce9aa24b\nSigned-off-by: Guangzong Chen \u003cguangzong@google.com\u003e\n"
    },
    {
      "commit": "85396d322631a3c94c9264d1125ad33386422eb3",
      "tree": "197b831a6ba2a7d3792873cac75bc16f59c0d653",
      "parents": [
        "a7c41370f5514ba84f382eb4494c8629d189937a"
      ],
      "author": {
        "name": "Guangzong Chen",
        "email": "guangzong@google.com",
        "time": "Tue Apr 21 00:46:07 2026 +0000"
      },
      "committer": {
        "name": "Guangzong Chen",
        "email": "guangzong@google.com",
        "time": "Tue Jun 09 17:10:14 2026 -0700"
      },
      "message": "FeatureStore: Update build system\n\nConfigures Meson to generate code from the YAML and Proto files for\nFeatureStore.\n\nDesign-Doc: go/bmc-redfish-nvme-get-set-features\nGoogle-Bug-Id: 405609473\nChange-Id: I4bd3c7a5994decc0f173b7f134ca785cebc90760\nSigned-off-by: Guangzong Chen \u003cguangzong@google.com\u003e\n"
    },
    {
      "commit": "a7c41370f5514ba84f382eb4494c8629d189937a",
      "tree": "c6e0b5be50f1f5273149ce01c6820c7ad5a6c213",
      "parents": [
        "ca96e2fc78b78f5b42b5039f86ae181407609778"
      ],
      "author": {
        "name": "Guangzong Chen",
        "email": "guangzong@google.com",
        "time": "Tue Apr 21 00:46:06 2026 +0000"
      },
      "committer": {
        "name": "Guangzong Chen",
        "email": "guangzong@google.com",
        "time": "Tue Jun 09 15:05:33 2026 -0700"
      },
      "message": "FeatureStore: Add Protobuf definition\n\nAdds the protocol buffer messages for NVMe features like Arbitration,\nPower Management, etc.\n\nDesign-Doc: go/bmc-redfish-nvme-get-set-features\nGoogle-Bug-Id: 405609473\nChange-Id: I5e574ac00c7c66ee417ca3f0070d4e82209c196e\nSigned-off-by: Guangzong Chen \u003cguangzong@google.com\u003e\n"
    },
    {
      "commit": "ca96e2fc78b78f5b42b5039f86ae181407609778",
      "tree": "511f1352a0fce94f162b61cf8aef5a16a70c4131",
      "parents": [
        "2e5a337c826032c54184cf279f0dc2419bc36b67"
      ],
      "author": {
        "name": "Muhammad Usama",
        "email": "muhammadusama@google.com",
        "time": "Fri Jun 05 20:26:54 2026 +0000"
      },
      "committer": {
        "name": "Muhammad Usama",
        "email": "muhammadusama@google.com",
        "time": "Fri Jun 05 23:28:44 2026 +0000"
      },
      "message": "nvmesensor: Make metric store configurable at runtime via CLI\n\nAllow enabling or disabling the metric store\nat runtime via command line arguments (`--enable-metrics` and\n`--disable-metrics`) passed to `nvmesensor`.\n\nTested: Manually\nGoogle-Bug-Id: 514372983\nChange-Id: I0230eefa9e575cc014b7a798bdcf9502c88af341\nSigned-off-by: Muhammad Usama \u003cmuhammadusama@google.com\u003e\n"
    },
    {
      "commit": "2e5a337c826032c54184cf279f0dc2419bc36b67",
      "tree": "0c623f4e5b52b85a93fee4c0bcb7f1ed9396dae0",
      "parents": [
        "b89cd5a5fc3d4175648d80cca8b03194d3dc295b"
      ],
      "author": {
        "name": "Guangzong Chen",
        "email": "guangzong@google.com",
        "time": "Tue Jan 27 00:05:00 2026 +0000"
      },
      "committer": {
        "name": "Guangzong Chen",
        "email": "guangzong@google.com",
        "time": "Wed May 20 09:48:43 2026 -0700"
      },
      "message": "Nvmed: Implement MetricStore Refresh method\n\n- Add Refresh method to the xyz.openbmc_project.NVMe.MetricStore DBus\ninterface and implement it in NVMeMetricStore. This allows manual\ntriggering of metric refreshes.\n- Adjust meson.build to explicitly include and link boost_context,\nwhich is required by boost_coroutine.\n\nTested: Unit tests pass and manually verify using dbusctl.\n\nDesign-Doc: http://go/nvme-metric-external-refresh\nGoogle-Bug-Id: 405610149\nChange-Id: Id629e0da4b70620a2c68e5446eaf4622fbc718f3\nSigned-off-by: Guangzong Chen \u003cguangzong@google.com\u003e\n"
    },
    {
      "commit": "b89cd5a5fc3d4175648d80cca8b03194d3dc295b",
      "tree": "5811ea202b92fc2006a1e1e84d98bff4cdc4984f",
      "parents": [
        "b8ce143afc9daf48ae237578381bedb20354943f"
      ],
      "author": {
        "name": "Guangzong Chen",
        "email": "guangzong@google.com",
        "time": "Tue Apr 21 00:46:04 2026 +0000"
      },
      "committer": {
        "name": "Guangzong Chen",
        "email": "guangzong@google.com",
        "time": "Wed May 20 09:48:24 2026 -0700"
      },
      "message": "FeatureStore: Add D-Bus interface YAML\n\nThis interface handles Get/Set Features for storage resources,\ntransferring raw proto binary over byte arrays.\n\nDesign-Doc: go/bmc-redfish-nvme-get-set-features\nGoogle-Bug-Id: 405609473\nChange-Id: Idc4bbbcfd25989ea6a346d7b785c6890afff295d\nSigned-off-by: Guangzong Chen \u003cguangzong@google.com\u003e\n"
    },
    {
      "commit": "b8ce143afc9daf48ae237578381bedb20354943f",
      "tree": "622365e41e90631720fb14328a1c76d1d5bdade1",
      "parents": [
        "34c78ef8acb8d456fb0d4b5f55d4a56f3f9daf51"
      ],
      "author": {
        "name": "Agrim Bharat",
        "email": "agrimbharat@google.com",
        "time": "Mon May 18 06:57:58 2026 +0000"
      },
      "committer": {
        "name": "Agrim Bharat",
        "email": "agrimbharat@google.com",
        "time": "Tue May 19 10:46:04 2026 -0700"
      },
      "message": "nvmed: Expose supported log pages to plugins\n\nAdd wrapper methods to NVMeControllerPlugin to allow plugins to access\nlist of supported log pages.\n\nGoogle-Bug-Id: 439944420\nTested: https://paste.googleplex.com/6118243321380864\nChange-Id: Ie0c1505c032546cba782cd49163cdca8f387e150\nSigned-off-by: Agrim Bharat \u003cagrimbharat@google.com\u003e\n"
    },
    {
      "commit": "34c78ef8acb8d456fb0d4b5f55d4a56f3f9daf51",
      "tree": "6306f2a4eb01db6a97cd77f2a733c45023f5e7ea",
      "parents": [
        "6d52c5933ffdd74e883a8ee9c5f23aa919a2ea39"
      ],
      "author": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Mon May 18 20:31:45 2026 +0000"
      },
      "committer": {
        "name": "Muhammad Usama Chaudhry",
        "email": "muhammadusama@google.com",
        "time": "Mon May 18 16:36:05 2026 -0700"
      },
      "message": "nvme: mitigate subsystem reload D-Bus collisions\n\nMitigated the race condition during NVMe subsystem reconfiguration\nwhere a newly created subsystem fails with a \u0027FileExists\u0027 error.\n\nUnder loaded conditions or when a physical device becomes unresponsive,\nthe asynchronous stop and flush operations for the old subsystem can\ntake longer to complete than the previous 5-second debounce window,\nleading to D-Bus registration conflicts.\n\nMisc: Increased the steady_timer cooldown delay to 10 seconds to ensure\nany outstanding asynchronous cleanup completes before recreation.\n\nTested: Ran the unit test suite successfully in the docker environment.\nGoogle-Bug-Id: 491260520\nChange-Id: I8d7b838ce014cccf68269fadd53bd516a1959e28\nSigned-off-by: Hao Jiang \u003cjianghao@google.com\u003e\n"
    },
    {
      "commit": "6d52c5933ffdd74e883a8ee9c5f23aa919a2ea39",
      "tree": "9c9a76d4314b640204302f6748d4562cf920ef5d",
      "parents": [
        "c7431114ba4369def60b173e50f57dad75d3b864"
      ],
      "author": {
        "name": "Agrim Bharat",
        "email": "agrimbharat@google.com",
        "time": "Thu May 07 19:03:20 2026 +0000"
      },
      "committer": {
        "name": "Agrim Bharat",
        "email": "agrimbharat@google.com",
        "time": "Mon May 18 22:25:17 2026 +0000"
      },
      "message": "nvmed: Expose LockdownMetric dynamically in static store\n\nExpose the NVMe Command and Feature Lockdown Metric (Log Page 0x14) dynamically based on the controller\u0027s supported log page list.\n\nMap standard NVME_LOG_LID_CMD_AND_FEAT_LOCKDOWN to LockdownMetric in logpageIdentifier.\n\nRegister and instantiate LockdownMetric in initializeMetricStore only if Log Page 0x14 is reported as supported by the controller.\n\nGoogle-Bug-Id: 439949534\nTested: https://paste.googleplex.com/5125313488093184\nChange-Id: I90646afa093d208185d9220833a154b372e3dfbd\nSigned-off-by: Agrim Bharat \u003cagrimbharat@google.com\u003e\n"
    },
    {
      "commit": "c7431114ba4369def60b173e50f57dad75d3b864",
      "tree": "430d11e8b2b49c6c4399d42136eac3106b96f8ea",
      "parents": [
        "c7ac3ffad4369ffe2602f2a8fbf59dfc576077db"
      ],
      "author": {
        "name": "Munawar Hussain",
        "email": "munawarhussain@google.com",
        "time": "Tue Apr 07 09:22:29 2026 +0000"
      },
      "committer": {
        "name": "Munawar Hussain",
        "email": "munawarhussain@google.com",
        "time": "Fri May 15 06:37:22 2026 +0000"
      },
      "message": "NVMe: Implement dynamic Log Pages (00h) detection\n\nFor the devices having nvme basic version greater than or equal to 2.0\nsupports 00h log which defines whether a log page is supported for that\ndevice.\n\nFor Metric store, nvmesensor will check the basic version of the device\nand if-\n  * version \u003c 2.0, will keep the existing behavior and show all the\n    metrics that the daemon so far supported\n  * version \u003e\u003d 2.0\n    * will fetch 00h log page and add metric based on the relavanat\n      support as per 00h logapage\n    * if 00h log fetch fails, then no metric except Identify metric will\n      be added\n\nTested:\nFor a device having nvme version 0x20100, found all the metrics are showing in the list-\n```\nroot@pnhuna-mm17-nfd01:~# curl -s localhost/redfish/v1/Systems/system/Storage/E1S_SSD_1_NVMe/Controllers/129 | jq .Oem.Google\n{\n  \"ControllerType\": \"NVMePF\",\n  \"DeviceSelfTestMetric\": {\n    \"DataUri\": \"/redfish/v1/Systems/system/Storage/E1S_SSD_1_NVMe/Controllers/129/Oem/Google/Metrics/DeviceSelfTestMetric\"\n  },\n  \"ErrorInfoMetric\": {\n    \"DataUri\": \"/redfish/v1/Systems/system/Storage/E1S_SSD_1_NVMe/Controllers/129/Oem/Google/Metrics/ErrorInfoMetric\"\n  },\n  \"FwSlotInfoMetric\": {\n    \"DataUri\": \"/redfish/v1/Systems/system/Storage/E1S_SSD_1_NVMe/Controllers/129/Oem/Google/Metrics/FwSlotInfoMetric\"\n  },\n  \"HostInitiatedMetric\": {\n    \"DataUri\": \"/redfish/v1/Systems/system/Storage/E1S_SSD_1_NVMe/Controllers/129/Oem/Google/Metrics/HostInitiatedMetric\"\n  },\n  \"IdentifyMetric\": {\n    \"DataUri\": \"/redfish/v1/Systems/system/Storage/E1S_SSD_1_NVMe/Controllers/129/Oem/Google/Metrics/IdentifyMetric\"\n  },\n  \"SMARTMetric\": {\n    \"DataUri\": \"/redfish/v1/Systems/system/Storage/E1S_SSD_1_NVMe/Controllers/129/Oem/Google/Metrics/SMARTMetric\"\n  }\n}\n```\nGoogle-Bug-Id: 404877612\nChange-Id: Iae609b706cecfcbb6aa077b0497815f0552b2d08\nSigned-off-by: Munawar Hussain \u003cmunawarhussain@google.com\u003e\n"
    },
    {
      "commit": "c7ac3ffad4369ffe2602f2a8fbf59dfc576077db",
      "tree": "17653158d6bb9dbf75e5b857a5355f8231ea27fd",
      "parents": [
        "9d0e5bb96d96ad0633d2aa35244f2448f35658c2"
      ],
      "author": {
        "name": "Guangzong Chen",
        "email": "guangzong@google.com",
        "time": "Tue Mar 03 05:16:20 2026 +0000"
      },
      "committer": {
        "name": "Guangzong Chen",
        "email": "guangzong@google.com",
        "time": "Tue Apr 14 21:45:05 2026 -0700"
      },
      "message": "NVMe: Fix callback race condition and handle nested refresh calls\n\nMove callbacks to local variables before execution to avoid iterator\ninvalidation if callbacks modify the callback list. Reset \u0027refreshing\u0027\nflag before executing callbacks to allow nested refresh() calls.\n\nAdded test_nvme_nested_refresh.cpp to verify the fix.\n\nTested: Verified with new unit test (test_nvme_nested_refresh).\n\nGoogle-Bug-Id: 485660452\nChange-Id: Ie542cd04f80ef58cf320078eec98822cb7208060\nSigned-off-by: Guangzong Chen \u003cguangzong@google.com\u003e\n"
    },
    {
      "commit": "9d0e5bb96d96ad0633d2aa35244f2448f35658c2",
      "tree": "b3f5fcc35e099972d05246e0bdf0ad5e374614d2",
      "parents": [
        "4f94d7a062e366a6b80c97e61a6ba807a4eaa009"
      ],
      "author": {
        "name": "Andrew Jeffery",
        "email": "andrew@codeconstruct.com.au",
        "time": "Wed May 08 16:20:38 2024 +0930"
      },
      "committer": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Tue Apr 07 15:24:55 2026 -0700"
      },
      "message": "NVMeSensorMain: Remove unused variable\n\nI suspect it got overlooked in the refactoring that went on to integrate\nendpoint recovery.\n\nChange-Id: Iecba31de7b01f9fd6b8b6da78012d0c06a02ea1b\nSigned-off-by: Andrew Jeffery \u003candrew@codeconstruct.com.au\u003e\n"
    },
    {
      "commit": "4f94d7a062e366a6b80c97e61a6ba807a4eaa009",
      "tree": "c37fd0efcffba3e0241e61adbc2b596b05e78c04",
      "parents": [
        "9481fdb09309a7b465d5ae71751daa2b30a2992e"
      ],
      "author": {
        "name": "Agrim Bharat",
        "email": "agrimbharat@google.com",
        "time": "Wed Mar 11 22:04:08 2026 +0000"
      },
      "committer": {
        "name": "Agrim Bharat",
        "email": "agrimbharat@google.com",
        "time": "Wed Mar 11 22:58:05 2026 +0000"
      },
      "message": "Nvmed: Restrict telemetry to Data Area 1\n\nRestrict telemetry to Data Area 1 to prevent bmcweb from timing out\nwhen pulling log page 0x7\n\nThis is to support E1.S SSD left shift development\n\nTested: https://paste.googleplex.com/6177104015261696\n\nGoogle-Bug-Id: 491346412\nChange-Id: I2f6d3602cddba2b03791dcdfab5ea339c9b67b6d\nSigned-off-by: Agrim Bharat \u003cagrimbharat@google.com\u003e\n"
    },
    {
      "commit": "9481fdb09309a7b465d5ae71751daa2b30a2992e",
      "tree": "a702725142ca1167860ce2a22d806503daf7dca3",
      "parents": [
        "8762863d0a808dedf1f3b651e55654aee5ea8de5"
      ],
      "author": {
        "name": "Ramon Rakow",
        "email": "rakow@google.com",
        "time": "Thu Jan 22 23:21:02 2026 +0000"
      },
      "committer": {
        "name": "Ramon Rakow",
        "email": "rakow@google.com",
        "time": "Fri Jan 23 11:08:23 2026 -0800"
      },
      "message": "NVMe: Add constructor of MetricStore to support a range\n\nNow the MetricStore can be constructed with iterators of pointer to\nMetrics.\n\nThis constructor is needed because the Metric collection can be\ndetermined at runtime instead of compile time.\n\nChange-Id: I558d235a8d42ac91386a8a0f1df3ac311aa05c27\nSigned-off-by: Hao Jiang \u003cjianghao@google.com\u003e\n"
    },
    {
      "commit": "8762863d0a808dedf1f3b651e55654aee5ea8de5",
      "tree": "35fc1bf1786214d247eae6ea111931317bbbe53f",
      "parents": [
        "8f699eca61b19d6c8942bbdf1e242c4cf31f494b"
      ],
      "author": {
        "name": "Ramon Rakow",
        "email": "rakow@google.com",
        "time": "Thu Jan 22 23:18:02 2026 +0000"
      },
      "committer": {
        "name": "Ramon Rakow",
        "email": "rakow@google.com",
        "time": "Fri Jan 23 11:08:23 2026 -0800"
      },
      "message": "nvme: modernize std::shared_ptr and boost calls\n\nChange-Id: I3fcb34a629873fd05bd27942416ee6700db5d97b\nSigned-off-by: Ramon Rakow \u003crakow@google.com\u003e\n"
    },
    {
      "commit": "8f699eca61b19d6c8942bbdf1e242c4cf31f494b",
      "tree": "aa1d603b772810d864c134e4bab81ec05a1ca0fa",
      "parents": [
        "d6ba74a8ea837f132a41f5ff1414ec2b2c8a152a"
      ],
      "author": {
        "name": "GG Chen",
        "email": "guangzong@google.com",
        "time": "Sat Jan 17 22:52:39 2026 +0000"
      },
      "committer": {
        "name": "GG Chen",
        "email": "guangzong@google.com",
        "time": "Tue Jan 20 19:22:53 2026 +0000"
      },
      "message": "Nvmed: Modernize Boost.Asio usage\n\nUpdate deprecated Boost.Asio API calls to their modern equivalents:\n- Replace io.post(callback) with boost::asio::post(io, callback).\n- Replace timer-\u003eexpires_from_now(duration) with\ntimer-\u003eexpires_after(duration).\n- Add (void) cast to boost::asio::spawn to acknowledge the return value.\n\nThese changes align with modern Boost.Asio practices and help reduce\ndeprecation warnings during compilation.\n\nTested: Verified that the package builds successfully and unit tests\npass.\n\nGoogle-Bug-Id: 476239885\nChange-Id: I912e79c1f517bbc779b8643d76f4ec5c53657b5d\nSigned-off-by: GG Chen \u003cguangzong@google.com\u003e\n"
    },
    {
      "commit": "d6ba74a8ea837f132a41f5ff1414ec2b2c8a152a",
      "tree": "08b352b28d1cb8ef963104bdb9c2770a73e591cc",
      "parents": [
        "b5f42c315c4de7dc01180cbf20ff6334d70efb20"
      ],
      "author": {
        "name": "Agrim Bharat",
        "email": "agrimbharat@google.com",
        "time": "Thu Dec 18 21:58:29 2025 +0000"
      },
      "committer": {
        "name": "Agrim Bharat",
        "email": "agrimbharat@google.com",
        "time": "Tue Dec 23 14:19:13 2025 -0800"
      },
      "message": "Nvmed: Add configuration to enable feature lockdown\n\nAdded configuration code to enable command and feature lockdown if the\nfeature is enabled for the SSD in entity manager\n\nThis is to support E1.S SSD left shift development\n\nTested: Tested by toggling the configuration and ensuring that\nthe lockdown dbus interface is only exposed when intended\nGoogle-Bug-Id: 445994713\nChange-Id: Ic0ee132b6df1cce8b4658ad7035420832d8403cb\nSigned-off-by: Agrim Bharat \u003cagrimbharat@google.com\u003e\n"
    },
    {
      "commit": "b5f42c315c4de7dc01180cbf20ff6334d70efb20",
      "tree": "62c0e88dbd976ef72b8e0d3e543d44b53587a2bb",
      "parents": [
        "acf67f06b342a980805d2ca9dd2d1aafbde71c4c"
      ],
      "author": {
        "name": "Agrim Bharat",
        "email": "agrimbharat@google.com",
        "time": "Fri Dec 05 22:01:26 2025 +0000"
      },
      "committer": {
        "name": "Agrim Bharat",
        "email": "agrimbharat@google.com",
        "time": "Thu Dec 18 19:47:11 2025 +0000"
      },
      "message": "Nvmed: Add VU log page lockdown\n\nAdded implementation for locking down multiple log pages using the\nsamsung provided VU commands\n\nThis is to support E1.S SSD left shift development\n\nTested: https://paste.googleplex.com/5697255522828288\n\nGoogle-Bug-Id: 445994713\nChange-Id: Ie8f59a9274a5622f0f9347ce0b839f09fedf4673\nSigned-off-by: Agrim Bharat \u003cagrimbharat@google.com\u003e\n"
    },
    {
      "commit": "acf67f06b342a980805d2ca9dd2d1aafbde71c4c",
      "tree": "29c805e35e3a75860e5a6b198f7977c91730f2ef",
      "parents": [
        "c2d87ce853e309a45d977bab301b6d5a9a2f9869"
      ],
      "author": {
        "name": "Agrim Bharat",
        "email": "agrimbharat@google.com",
        "time": "Tue Nov 18 23:12:49 2025 +0000"
      },
      "committer": {
        "name": "Agrim Bharat",
        "email": "agrimbharat@google.com",
        "time": "Thu Nov 27 01:40:02 2025 +0000"
      },
      "message": "Nvmed: Add inband feature lockdown dbus method\n\nAdded implementation for the new command and feature lockdown\nfunctionality to lock different NVMe admin commands and features in band\n\nThis is to support E1.S SSD left shift development\n\nTested: https://paste.googleplex.com/5424008134787072\n\nGoogle-Bug-Id: 439951442\nChange-Id: I01fd32b8e7744dfd83d972dbcf27bb430855dac8\nSigned-off-by: Agrim Bharat \u003cagrimbharat@google.com\u003e\n"
    },
    {
      "commit": "c2d87ce853e309a45d977bab301b6d5a9a2f9869",
      "tree": "ff5242b6bf14ee455e8867a638eb37c9ad06cc8e",
      "parents": [
        "2e7f1b9d4005a4de3127ec13dd2b6963e16e2e5c"
      ],
      "author": {
        "name": "Agrim Bharat",
        "email": "agrimbharat@google.com",
        "time": "Mon Nov 03 23:07:34 2025 +0000"
      },
      "committer": {
        "name": "Agrim Bharat",
        "email": "agrimbharat@google.com",
        "time": "Thu Nov 13 23:59:16 2025 +0000"
      },
      "message": "nvmed: Add support for nvmed data posted to shared_mem\n\nAdded a feature option \"nvme_shmem\" to nvmed, enabling publication\nof NVMe sensor values to shared memory segment. This is a requirement\nfor the PID tlBMC migration, allowing tlBMC to consume sensor data with\nlower latency compared to DBus\n\nFind more details here: go/pid-tlbmc-migration\n\nTested: https://paste.googleplex.com/6120153892913152\n\nGoogle-Bug-Id: 434974253\nChange-Id: I045e955c6d250e51f083daced0433c791b1d3ac7\nSigned-off-by: Agrim Bharat \u003cagrimbharat@google.com\u003e\n"
    },
    {
      "commit": "2e7f1b9d4005a4de3127ec13dd2b6963e16e2e5c",
      "tree": "f07af3b7de0a915d5ad545522b5fbde9037d8f3b",
      "parents": [
        "8731a1459eafb57ade7a9fb9f72ee8f4b3777f1a"
      ],
      "author": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Fri Nov 07 22:35:47 2025 +0000"
      },
      "committer": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Wed Nov 12 18:05:52 2025 +0000"
      },
      "message": "NVMe: use phosphor-logging/lg2 for logging\n\nInspired by https://gerrit.openbmc.org/c/openbmc/dbus-sensors/+/78412.\nUsing lg2 for nvmed logging.\n\nAlso, utilize log level to concise the log printing.\n\n* using lg2::warning for all retries\n* using lg2::error for errors\n* using lg2::info for the state transition info\n* using lg2::debug for all debug related stuff\n\nFix some minor issue which was not detected by std::cerr.\n\nTested: journal log: https://paste.googleplex.com/6575901127081984\nChange-Id: Ia14236654c2b12034e3d087ca84a5168c62106ea\nSigned-off-by: Hao Jiang \u003cjianghao@google.com\u003e\n"
    },
    {
      "commit": "8731a1459eafb57ade7a9fb9f72ee8f4b3777f1a",
      "tree": "73bbb9a20dd2389edd1d587b328b76e551f0ce43",
      "parents": [
        "2de8a0305541b0e5ec1af4c9787295927f297d48"
      ],
      "author": {
        "name": "Munawar Hussain",
        "email": "munawarhussain@google.com",
        "time": "Mon Oct 20 23:09:04 2025 +0000"
      },
      "committer": {
        "name": "Muhammad Usama Chaudhry",
        "email": "muhammadusama@google.com",
        "time": "Thu Oct 30 10:27:52 2025 -0700"
      },
      "message": "nvmed: Add metric-store feature flag to disable nvme cache\n\nDefault value is disabled. If disabled then the metric store will be\nempty but the dbus interface will still be there. Also none of the\nvendor metrics will be loaded.\n\nThe other possible values are statis and dynamic which will act same for\nnow and act as enabled feature. Future CL will cover the dynamic part.\n\nTested: https://paste.googleplex.com/6081669870256128?raw\n\nGoogle-Bug-Id: 447223936\nChange-Id: I8dfe8fbe7f44f40053daee4052e888fbb942d3c6\nSigned-off-by: Munawar Hussain \u003cmunawarhussain@google.com\u003e\n"
    },
    {
      "commit": "2de8a0305541b0e5ec1af4c9787295927f297d48",
      "tree": "f62a454a485444b50ce80b38a3450942cc7c8dfa",
      "parents": [
        "7260049b41fcc714ed628b5608b352018caf5238"
      ],
      "author": {
        "name": "Munawar Hussain",
        "email": "munawarhussain@google.com",
        "time": "Mon Oct 20 02:24:32 2025 +0000"
      },
      "committer": {
        "name": "Muhammad Usama Chaudhry",
        "email": "muhammadusama@google.com",
        "time": "Thu Oct 30 10:27:52 2025 -0700"
      },
      "message": "nvmed: refactor: move metric store initialization to function\n\nGoogle-Bug-Id: 447223936\nChange-Id: Ic42c03eaeac39e1593ce0c4ea99b9e9e5abab5ef\nSigned-off-by: Munawar Hussain \u003cmunawarhussain@google.com\u003e\n"
    },
    {
      "commit": "7260049b41fcc714ed628b5608b352018caf5238",
      "tree": "c3441eda1b0bdcfe863493b34fddfe5bb8af42d7",
      "parents": [
        "5930ef8feb4bc0f019fe833a8db99643c2f1a54d"
      ],
      "author": {
        "name": "Luka Strizic",
        "email": "lstrz@google.com",
        "time": "Tue Oct 21 18:13:56 2025 +0000"
      },
      "committer": {
        "name": "Luka Strizic",
        "email": "lstrz@google.com",
        "time": "Tue Oct 28 21:25:48 2025 +0000"
      },
      "message": "nvmed: Adds support for MCTP devices exposed by mctpreactor\n\nAdds a new class, MctpReactorDevice that inherits from MctpDevice and\nis specific to the way mctpreactor sets things up.\n\nTo get an endpoint ID, MctpReactorDevice queries the \"configures\"\nassociation in the ObjectMapper, that associates the NVMe device object\nwith a NVME1000 interface and the MCTP endpoint object.\n\nAdditionally, NVMeMi was changed to skip MTU and SMBus frequency setup\nfor devices that aren\u0027t directly accessible over I2C, which is\nrecognized through the absence of the `bus` parameter in those\ndevices\u0027 JSON configuration files for EntityManager.\n\nTested: Test were done on a lab machine that has an E1.S SSD\n        connected to BMC through a USB \u003c-\u003e I2C MCTP bridge.\n        nvmesensor log:\n        https://paste.googleplex.com/5240477540548608\n        Another test on the same machine was ran with mctpreactor\n        down and then started again after a few minutes:\n        https://paste.googleplex.com/5326693527060480\n        Roughly midway down that log periodic retrying can be\n        observed. A retry happens every 60-90 seconds. Estimate is\n        based on me looking at the log in realtime rather than\n        measuring or looking at the code.\n        Additionally tested on tjbm11 with the new and old\n        nvmesensor binary to see if there\u0027s regressions:\n        https://paste.googleplex.com/6389420236341248\n        Finally, tested on tmdja26 to see how does nvmed pick up\n        regular I2C devices through mctpreactor:\n        https://paste.googleplex.com/4860794563067904\n\nGoogle-Bug-Id: 444680700\nChange-Id: I3d01d7e6bd7ee6bd9455c0f17e498631cee18cb7\nSigned-off-by: Luka Strizic \u003clstrz@google.com\u003e\n"
    },
    {
      "commit": "5930ef8feb4bc0f019fe833a8db99643c2f1a54d",
      "tree": "1d4313a06a5876128ec59d9d61e4ac615a8e41b3",
      "parents": [
        "5a929ef3f51b9c8c470f3e6bddbe702e68d54074"
      ],
      "author": {
        "name": "Agrim Bharat",
        "email": "agrimbharat@google.com",
        "time": "Wed Sep 24 18:07:18 2025 +0000"
      },
      "committer": {
        "name": "Agrim Bharat",
        "email": "agrimbharat@google.com",
        "time": "Thu Sep 25 14:57:43 2025 -0700"
      },
      "message": "Nvmed: Add support for command \u0026 feature lockdown log page\n\nAdded implementation for the new admin log page command to pull\nthe command and feature lockdown log page. There were also changes\nmade to support this change to the libnvme repo as a patch and those\nwere put up for review separately\n\nThis is to support E1.S SSD left shift development\n\nTested: Successfully tested the new admin log page command on a local\nmachine. Redfish URI dump - https://paste.googleplex.com/4664890681851904\n\nGoogle-Bug-Id: 439949469\nChange-Id: I0288788b9f85e182138e127e9348da32e979a26f\nSigned-off-by: Agrim Bharat \u003cagrimbharat@google.com\u003e\n"
    },
    {
      "commit": "5a929ef3f51b9c8c470f3e6bddbe702e68d54074",
      "tree": "ddfa4d812108edc3bfdc46e88bb9443e2fce69a5",
      "parents": [
        "70b5be47fca3bddedbd2411f40ca61a4f1775a65"
      ],
      "author": {
        "name": "Munawar Hussain",
        "email": "munawarhussain@google.com",
        "time": "Mon Sep 15 15:43:42 2025 +0000"
      },
      "committer": {
        "name": "Munawar Hussain",
        "email": "munawarhussain@google.com",
        "time": "Mon Sep 22 03:21:26 2025 -0700"
      },
      "message": "nvmed: Fix nvme worker thread deadlock\n\nThe issue was nvme worker can be destroyed on it\u0027s own thread which will\nmake a deadlock saying it is waiting for itself in the destructor of the\nNVMeMiWorker.\n\nWe have such case because we are passing sharedPtr of nvmeMi object\nwhich is the owner of worker. While the nvmeMi object is deleted from\nthe main thread (remove entry from deviceMap) but worker is still\nrunning the job where the shared ptr of nvme mi has already passed. Now\nnvme mi will try to be destroyed in the worker thread which means worker\nthread will also be destroyed there and will create deadlock since the\ndestructor is waiting for the thread to be done and the thread is\nwaiting for the destructor to be done.\n\nTo resolve this, we need to make sure the destruction is happening in\nmain thread. Created sharedPtr of worker with custom deleter which will\nmake sure the final destruction is happening in the main thread.\n\nAlso made sure this is the only way of creating NVMeMiWorker.\n\nTested: Send interface removed signal continuously and in parallel make\ndbus query to host initiated telemetry log. Detailed script can be found\nin b/438827535#comment17. Did not see any resource deadlock.\n\nGoogle-Bug-Id: 438827535\nChange-Id: I4b42e9647a1673c1da2f73b89981b50e570a9523\nSigned-off-by: Munawar Hussain \u003cmunawarhussain@google.com\u003e\n"
    },
    {
      "commit": "70b5be47fca3bddedbd2411f40ca61a4f1775a65",
      "tree": "94a9245f5ea715f9568b3cb47d6b7ef2f1bca55b",
      "parents": [
        "38ceee542b48b0ff15337220bf3aa79be5fbe739"
      ],
      "author": {
        "name": "Muhammad Usama",
        "email": "muhammadusama@google.com",
        "time": "Mon Jul 28 20:27:03 2025 +0000"
      },
      "committer": {
        "name": "Muhammad Usama Chaudhry",
        "email": "muhammadusama@google.com",
        "time": "Tue Aug 26 14:51:28 2025 -0700"
      },
      "message": "NVMeD: Fix the clang-tidy errors\n\nGoogle-Bug-Id: 434718433\nChange-Id: Ied40d76acc379a550e68adac4c2e9ab6ed3facb2\nSigned-off-by: Muhammad Usama \u003cmuhammadusama@google.com\u003e\n"
    },
    {
      "commit": "38ceee542b48b0ff15337220bf3aa79be5fbe739",
      "tree": "c1a530815e53d6f58cc4b524a77cb5b8f53e8e02",
      "parents": [
        "60c8e5f4d548c2886dbe702d8df37c940cd3cbce"
      ],
      "author": {
        "name": "Muhammad Usama",
        "email": "muhammadusama@google.com",
        "time": "Fri Jul 25 17:36:48 2025 +0000"
      },
      "committer": {
        "name": "Muhammad Usama",
        "email": "muhammadusama@google.com",
        "time": "Fri Jul 25 17:36:48 2025 +0000"
      },
      "message": "MctpEndpoint: Update to use new MCTPd Interfaces\n\nTested: Manually\nGoogle-Bug-Id: 427282611\nChange-Id: I3a41114b6639fb48b3d9db60c0a50abefca49059\nSigned-off-by: Muhammad Usama \u003cmuhammadusama@google.com\u003e\n"
    },
    {
      "commit": "60c8e5f4d548c2886dbe702d8df37c940cd3cbce",
      "tree": "9254f1f723216b9786fa1390568932398f99098d",
      "parents": [
        "ea320ad5e7c092e338d41e67b5e64076180b19be"
      ],
      "author": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Tue Mar 25 00:48:18 2025 +0000"
      },
      "committer": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Tue Mar 25 22:08:37 2025 +0000"
      },
      "message": "NVMeCache: fix IdentifyMetric for namespace\n\nWe forgot to update the NSID for NS IdentifyMetric. And the log used the\nincorrect path for namespace.\n\nGoogle-Bug-Id: 406086758\nTested: b/406086758#comment#3\nSigned-off-by: Hao Jiang \u003cjianghao@google.com\u003e\nChange-Id: I4a96a4625388a4f27d80484bb21d8fdeb0e0a987\n"
    },
    {
      "commit": "ea320ad5e7c092e338d41e67b5e64076180b19be",
      "tree": "b0c90917f0399a6124631a9adf154828d305d864",
      "parents": [
        "8c6ed86989a7425744ffc8104956dd97043d9d6f"
      ],
      "author": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Wed Mar 19 20:23:45 2025 +0000"
      },
      "committer": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Tue Mar 25 22:08:09 2025 +0000"
      },
      "message": "NVMeMetric: disable HostInit log for OCP boot drives\n\nThis is a walk-around solution. It should be resolved by the long term\nsolution via b/404877612\n\nThe OCP boot drive implements a very large data area 1 for 07h log,\nwhich is incompatible to transfer via OOB. We need to disable the Metric\nso it won\u0027t blocks other NVMe transmission\n\nTested: b/404902460#comment3\nGoogle-Bug-Id: 404902460\nSigned-off-by: Hao Jiang \u003cjianghao@google.com\u003e\nChange-Id: Icc0943b732c3a02dc470a7ff92ab039261c52771\n"
    },
    {
      "commit": "8c6ed86989a7425744ffc8104956dd97043d9d6f",
      "tree": "bc9965d063b591d3ea47836b42b74fb2a21bb1e1",
      "parents": [
        "d81eca96bfada45f38c8a5c3a23cfe37ac9ff6e5"
      ],
      "author": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Wed Mar 19 20:14:49 2025 +0000"
      },
      "committer": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Tue Mar 25 22:04:53 2025 +0000"
      },
      "message": "NVMeController: record the config data\n\nAdd the sensor config data to NVMe controller, so the config data can be\naccessed for the future usage such as configuring the NVMe metric.\n\nTested: N/A\nSigned-off-by: Hao Jiang \u003cjianghao@google.com\u003e\nChange-Id: I9142a30c7cdea2e4afc9d9023120cc5672a91e15\n"
    },
    {
      "commit": "d81eca96bfada45f38c8a5c3a23cfe37ac9ff6e5",
      "tree": "99004d184c5c8fa19f0f02c0cfba1e1d6e3ddfa9",
      "parents": [
        "662dd02533650cd304570066578199355161a425"
      ],
      "author": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Wed Mar 19 19:45:53 2025 +0000"
      },
      "committer": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Tue Mar 25 22:04:53 2025 +0000"
      },
      "message": "NVMeMetric: Enable NVMe Metric only for primary controllers\n\nCurrently we don\u0027t need to read NVMe Metrics from the secondary\ncontrollers, which is align with the client behavior before the BMC\ncache interface.\n\nTested: via the fake interface. DBus interface appears only for PF\nSigned-off-by: Hao Jiang \u003cjianghao@google.com\u003e\nChange-Id: I15762209231b3dcec0da91774c1ad5d0c1b2f1fb\n"
    },
    {
      "commit": "662dd02533650cd304570066578199355161a425",
      "tree": "e85d9e0d80753b4c0b41ac5190d7c9dbf60fe094",
      "parents": [
        "0841f07c9ceb0ea29821eb3c79a0ac56835cb620"
      ],
      "author": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Wed Mar 19 18:00:43 2025 +0000"
      },
      "committer": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Tue Mar 25 22:03:47 2025 +0000"
      },
      "message": "NVMeMetric: MetricStore constructor allows empty Metric\n\nThe MetricStore now can accept empty metric from nvmed and nvmed\nplugins, by ignoring these empty metrics.\n\nThe purposes are:\n* prevent a daemon crash from an ill-written plugin\n* allows the MetricStore owner pushes empty metric intentionally\n\nSigned-off-by: Hao Jiang \u003cjianghao@google.com\u003e\nChange-Id: I1f47c8042e3b2b8004632cc7058f38085aa08e53\n"
    },
    {
      "commit": "0841f07c9ceb0ea29821eb3c79a0ac56835cb620",
      "tree": "61a38aac727d18393e4cd6c0afe7711a5effe571",
      "parents": [
        "22e8d8144a349578bab3a2fde1ea64af384cf304"
      ],
      "author": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Wed Mar 19 17:01:05 2025 +0000"
      },
      "committer": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Mon Mar 24 23:57:57 2025 +0000"
      },
      "message": "NVMe Metric: refresh for every 60 second\n\nThis is a metigate plan for the a firmware error that returns\ninconsist response during boot process, which makes the first cache\nuntrustful.\n\nThis change should be reverted after the fix for b/404610159 solved.\n\nTested: compiles\nGoogle-Bug-Id: 404610159\nSigned-off-by: Hao Jiang \u003cjianghao@google.com\u003e\nChange-Id: I91021959bbe426861c22527be7271289b9370136\n"
    },
    {
      "commit": "22e8d8144a349578bab3a2fde1ea64af384cf304",
      "tree": "deb981282a8669a1d773b09eb3bc287465867c84",
      "parents": [
        "6358de0431972233cecc90cd11044b12aa33d299"
      ],
      "author": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Sat Mar 15 05:48:32 2025 +0000"
      },
      "committer": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Mon Mar 24 23:53:45 2025 +0000"
      },
      "message": "NVMeFake: add fake implementation for namespace\n\nFaking two namespaces in the subsystem. Attaching both to the primary\ncontroller and attaching first namespace to one of the secondary\ncontroller as well.\n\nIt also introduces extra errors for the InitErrorInjection because there\nis more identify cmd are executed during the subsystem initialization\nfor the namespaces. Increase the waiting time for recovery accordingly.\n\nTested: passed the unitest\nSigned-off-by: Hao Jiang \u003cjianghao@google.com\u003e\nChange-Id: I539e996d08a9510bba03086ef11f29dbc9115202\n"
    },
    {
      "commit": "6358de0431972233cecc90cd11044b12aa33d299",
      "tree": "81f4558c35a0dd7beabce9ca5ea0b41f039bf1ca",
      "parents": [
        "34e8119273f767f3e1d412824f33642a93e9b619"
      ],
      "author": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Thu Feb 27 04:01:13 2025 +0000"
      },
      "committer": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Mon Mar 24 23:05:32 2025 +0000"
      },
      "message": "NVMeCache: move the completion callback into MetricStore\n\nThe completion callback is used to trigger MetricUpdate signal on the\nMetricStore interface. Thus moving the callback implementation from the\nMetric constructor to MetricStore constructor will reduce code\nduplication.\n\nIt also benefits when the Metric creator is not the owner of\nMetricStore, e.g. the plugin classes. In this case, the Metric owner can\ntransfer the ownship of Metric to the MetricStore to present it on the\nDBus.\n\nTo accomplish above, adding a new interface to NVMeCache that pushes the\ncomplete callbacks to the Metric instance. Unlike the callback by\nrefresh() function, the complete callback will not pop up after the\nrefresh completion.\n\nGoogle-Bug-Id: 348660385#comment14\nTested: b/348660385#comment15\nSigned-off-by: Hao Jiang \u003cjianghao@google.com\u003e\nChange-Id: I23075272e7803374087aa607f8aa22fe09f226ee\n"
    },
    {
      "commit": "34e8119273f767f3e1d412824f33642a93e9b619",
      "tree": "ecf8cdeea21f2181b72b3c57a367a0500359b609",
      "parents": [
        "6a05971061abd9b7ae69bf6d5a609d041c90dc39"
      ],
      "author": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Wed Feb 26 22:58:50 2025 +0000"
      },
      "committer": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Mon Mar 24 22:42:19 2025 +0000"
      },
      "message": "NVMePlugin: Add VU metric\n\nAdd a new function `getMetric` to the plugin to fetch VU NVMe Metric\nfrom a plugin.\n\nThe function will be call upon the creation of a metric store with given\nthe path of the metric store.\n\nThe VU NVMe Metric will be inserted into the target metric store\nafterwards.\n\nGoogle-Bug-Id: 348660385#comment14\nTested: b/348660385#comment15\nSigned-off-by: Hao Jiang \u003cjianghao@google.com\u003e\nChange-Id: I81d1b569cd716c392d9445b08cd3fff64cbf0790\n"
    },
    {
      "commit": "6a05971061abd9b7ae69bf6d5a609d041c90dc39",
      "tree": "9448919da6bfafafccdf9ce04fb79cff906a2aaa",
      "parents": [
        "f4cf22273182e48af41de55c12d95fe43e159b62"
      ],
      "author": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Thu Feb 20 19:39:07 2025 +0000"
      },
      "committer": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Mon Mar 24 22:40:37 2025 +0000"
      },
      "message": "NVMe: adding NVMeCache and NVMeMetricStore to plugin headers\n\nThe headers are required by the NVMed plugins.\n\nTested: Bitbake compiles\nSigned-off-by: Hao Jiang \u003cjianghao@google.com\u003e\nChange-Id: I2fed6362620719b83b2b1bf562e78ff7e097a42c\n"
    },
    {
      "commit": "f4cf22273182e48af41de55c12d95fe43e159b62",
      "tree": "4e0c1ef5dd139fb9b82f54ff6c68b7b407f2fd1e",
      "parents": [
        "d5e4b2e2b18057e73928676993850b55fa098bfe"
      ],
      "author": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Wed Feb 19 03:59:53 2025 +0000"
      },
      "committer": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Mon Mar 24 20:02:39 2025 +0000"
      },
      "message": "NVMeVolume: Instantiate Identify Metric\n\nAdd MetricStore interface with Identify Metric to namespace.\n\nTested: b/348660385#comment14\nGoogle-Bug-Id: b/348660385\nSigned-off-by: Hao Jiang \u003cjianghao@google.com\u003e\nChange-Id: Ic4e00fc5bf39a1a40ccf4c520d54535738a352cc\n"
    },
    {
      "commit": "d5e4b2e2b18057e73928676993850b55fa098bfe",
      "tree": "5d4b05e31221d3c3853c7e401dc7b93e3c8c9fe9",
      "parents": [
        "2d1af9105f136227973d6ab70064bf1bb53405fe"
      ],
      "author": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Wed Feb 19 00:10:16 2025 +0000"
      },
      "committer": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Mon Mar 24 18:45:30 2025 +0000"
      },
      "message": "NVMeCache: Add implementation for Identify Metric\n\nIdentify Metric is used to store the cached info for Identify info for\nNVMe controllers and namespace.\n\nAlso instantiate the Identify Metric for controllers.\n\nTested: b/348660385#comment12\nGoogle-Bug-Id: 348660385\nSigned-off-by: Hao Jiang \u003cjianghao@google.com\u003e\nChange-Id: I92f96cb63e68d9071b5e85eea3810e91616d948c\n"
    },
    {
      "commit": "2d1af9105f136227973d6ab70064bf1bb53405fe",
      "tree": "f166e6cf55f7eb7bee5327ee5553d9d4d1b531af",
      "parents": [
        "3bb0a979d60f9e665f015fd7f088628ccac0c1b5"
      ],
      "author": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Tue Feb 18 21:32:07 2025 +0000"
      },
      "committer": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Mon Mar 24 17:44:54 2025 +0000"
      },
      "message": "NVMeCache: Add implementation for other logs\n\nAdding the implementation for the following log:\n* NVME_LOG_LID_ERROR\n* NVME_LOG_LID_FW_SLOT\n* NVME_LOG_LID_DEVICE_SELF_TEST\n* NVME_LOG_LID_TELEMETRY_HOST\n\nTested: manual test result at b/348660385#comment10\nGoogle-Bug-Id: b/348660385\nSigned-off-by: Hao Jiang \u003cjianghao@google.com\u003e\nChange-Id: I7d20ade3346833bcf57cf5081d2cb8346adc8f89\n"
    },
    {
      "commit": "3bb0a979d60f9e665f015fd7f088628ccac0c1b5",
      "tree": "6b32fb60d0bd11fe47f829dea6e69ef04be6453d",
      "parents": [
        "b81518e5b529f993f6296a34e60296c5b42096e8"
      ],
      "author": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Tue Feb 18 21:23:19 2025 +0000"
      },
      "committer": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Mon Mar 24 17:32:44 2025 +0000"
      },
      "message": "unitest: mi test: suppress uninteresting mock function call\n\nWrap NVMeMiMock into NiceMock\u003c\u003e to suppress warning for uninteresting\ncall.\n\nhttps://google.github.io/googletest/gmock_cook_book.html#NiceStrictNaggy\n\nTested: no warning in the unitest\nSigned-off-by: Hao Jiang \u003cjianghao@google.com\u003e\nChange-Id: I7dba915bbc8b93a0674db86275576d99c05646b1\n"
    },
    {
      "commit": "b81518e5b529f993f6296a34e60296c5b42096e8",
      "tree": "bbc27701a2dcf2dadb7a374516174a48b6a18a5f",
      "parents": [
        "fc7f1bf87d7efe262d280f995ce52342ab96b19a"
      ],
      "author": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Tue Feb 18 21:20:47 2025 +0000"
      },
      "committer": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Mon Mar 24 17:31:48 2025 +0000"
      },
      "message": "NVMeMiFake: bug fix for unsupported log page\n\nAdd return to the error path, otherwise the callback will be triggered\ntwice.\n\nTestd: unitest test passed\nSigned-off-by: Hao Jiang \u003cjianghao@google.com\u003e\nChange-Id: I817ce038139de8e63f7390f8c6a6434ecd6c3d5f\n"
    },
    {
      "commit": "fc7f1bf87d7efe262d280f995ce52342ab96b19a",
      "tree": "1f2a8369b180a35d90200685b7624f0a0c732442",
      "parents": [
        "c762dac2729bea9f36d2dc10e18b21067a818136"
      ],
      "author": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Fri Feb 14 02:04:27 2025 +0000"
      },
      "committer": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Mon Mar 24 17:29:32 2025 +0000"
      },
      "message": "NVMeCacheImpl: implement the getCache() function\n\nReturn the cache value to the caller. The caller should check the cache\nvalidness before calling getCache(), otherwise the value is undefined.\n\nGoogle-Bug-Id: 348660385\nTested: 348660385#comment3\n  (with all changes from go/gbmcl-ext/q/topic:%22nvme+cache%22)\nSigned-off-by: Hao Jiang \u003cjianghao@google.com\u003e\nChange-Id: I698dfccc7931e2b1d6b3b45460694dca769c8302\n"
    },
    {
      "commit": "c762dac2729bea9f36d2dc10e18b21067a818136",
      "tree": "74b1ddd3bd054948a011901a0ef2e0e21dfba2e0",
      "parents": [
        "e4f0928839de0106da4b921b491a9c7dce74c391"
      ],
      "author": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Fri Feb 14 02:02:22 2025 +0000"
      },
      "committer": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Mon Mar 24 17:25:55 2025 +0000"
      },
      "message": "NVMeCache: make the return of getCache() const\n\nReturing a const std::span now to privent the receiver from overwriting\nthe cache value.\n\nTested: N/A\nGoogle-Bug-Id: 348660385\nSigned-off-by: Hao Jiang \u003cjianghao@google.com\u003e\nChange-Id: I28211a41e4232ec9ded98bd2c89a25e3592a4f8a\n"
    },
    {
      "commit": "e4f0928839de0106da4b921b491a9c7dce74c391",
      "tree": "954786f213e08affea9d10212a22d152684edc5c",
      "parents": [
        "5b1a582ae1edd02d9514ae52ed449454d9c0f2ff"
      ],
      "author": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Wed Feb 12 21:32:25 2025 +0000"
      },
      "committer": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Mon Mar 24 17:19:28 2025 +0000"
      },
      "message": "NVMeSubsystem: instantiate the scheduler for Metric\n\nInstantiate the scheduler for each subsystem to schedule the Metrics\ncache refresh.\n\nThe life time of scheduler is between [Intiatilzing, Terminating) of\nattached subsystem.\n\nThe scheduler is started as the last step of the Intiatilzing and right\nbefore the Start status.\n\nCheck the design doc:\n  go/nvme-mi-cache-time-scheduling#heading\u003dh.f584d1vzjwgg\n\nGoogle-Bug-Id: 348660385\nTested: 348660385#comment3\n  (with all changes from go/gbmcl-ext/q/topic:%22nvme+cache%22)\nSigned-off-by: Hao Jiang \u003cjianghao@google.com\u003e\nChange-Id: Ie0f663e23430698abcca3451bceaeeec2be72360\n"
    },
    {
      "commit": "5b1a582ae1edd02d9514ae52ed449454d9c0f2ff",
      "tree": "b1e1f3842bec4064b4d429b33209b5aa4f00f8a4",
      "parents": [
        "a908f9025b84390b79e4802df8948662d7381650"
      ],
      "author": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Tue Feb 11 23:37:30 2025 +0000"
      },
      "committer": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Mon Mar 24 17:19:08 2025 +0000"
      },
      "message": "NVMeMetricStore: handles MetricUpdated signal\n\nAdd a completeCB parameter to the Metric implementation to call\nMetricUpdate() method of the MetricStore.\n\nAlso added the comment for the DBus interface to handle invalid metric\nsignal.\n\nGoogle-Bug-Id: 348660385\nTested: 348660385#comment3\n  (with all changes from go/gbmcl-ext/q/topic:%22nvme+cache%22)\nSigned-off-by: Hao Jiang \u003cjianghao@google.com\u003e\nChange-Id: I4adacc43aec92747fe7830b5e696fabbc79e6df4\n"
    }
  ],
  "next": "a908f9025b84390b79e4802df8948662d7381650"
}
