)]}'
{
  "log": [
    {
      "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"
    },
    {
      "commit": "a908f9025b84390b79e4802df8948662d7381650",
      "tree": "72afcc8a7271624684021e4c4d00a798bcf98326",
      "parents": [
        "5c4591de9230e07f50508bcdc37eb64475e95fad"
      ],
      "author": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Tue Feb 11 18:35:12 2025 +0000"
      },
      "committer": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Sat Mar 22 01:21:32 2025 +0000"
      },
      "message": "NVMeController: add NVMe Cache implementation of SMART\n\nAdd a implementation for caching the NVMe LogPages. NVMeController now\ninstantiate a NVMeMetricStore which contains the cache for SMART.\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: I972dc4199adda4c07f6c89e83286162391cdfc31\n"
    },
    {
      "commit": "5c4591de9230e07f50508bcdc37eb64475e95fad",
      "tree": "2882f983dc4820737be40b02cda6942c4005c1e0",
      "parents": [
        "af6157b383381a65db3b251015a4e96b00c003fd"
      ],
      "author": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Fri Feb 14 00:45:31 2025 +0000"
      },
      "committer": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Sat Mar 22 01:03:17 2025 +0000"
      },
      "message": "NVMeCache: handles empty callbacks\n\nAdd a protection for functions in case the Refresh() caller passes in\nan empty function, causing crash.\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: I4ea5864b31647d06a7189eb16ecea06259bfbf2a\n"
    },
    {
      "commit": "af6157b383381a65db3b251015a4e96b00c003fd",
      "tree": "633b3a882c3631e4d47475b497703f794f682e5a",
      "parents": [
        "279b3341209b39619044ceb674a99f9558542f82"
      ],
      "author": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Tue Feb 11 17:48:56 2025 +0000"
      },
      "committer": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Fri Mar 21 23:43:30 2025 +0000"
      },
      "message": "NVMeCache: update interface definition\n\nAdd nonexcept declaration to interfaces. And make getIdentifier()\nreturns string_view instead of string.\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: Idda07880cd848609cc26025d3e79eab8872e0fa3\n"
    },
    {
      "commit": "279b3341209b39619044ceb674a99f9558542f82",
      "tree": "a192225ad82a5b23732c683c1ab8120a746b3d0c",
      "parents": [
        "7560e6bba8ee26ad09685319c50eb184890893cb"
      ],
      "author": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Mon Feb 10 18:57:25 2025 +0000"
      },
      "committer": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Fri Mar 21 23:34:57 2025 +0000"
      },
      "message": "MetricStore: Complete the MetricStore class\n\nMajor changes:\n* Handles the header with definition.\n* Remove the template for MetricStore class, given:\n    * the NVMeCache doesn\u0027t support CacheType template\n    * the DBus interface should use a certain clock type to\n      communication with clients to avoid confusion. The clock type for\n      dbus transfer dose not have to be identical to the type used by\n      NVMe cache, though the current implementation uses the default\n      steady_clock.\n* Make the MetricCollection Dbus property constant so the clients need\n  not handle property change event. Also make the Metric registration\n  (to MetricStore) at compile time.\n* Return DBus error to the caller.\n\nBug fix:\n* Using public inheritance so that the owner can operation on DBus.\n\nMinor changes:\n* rename the file to NVMeMetricStore to align with other NVMe src/header\n  files.\n* simplify the class as MetricStore.\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: I48764d029c4b8882676e689bd8d8904d9a6dabd6\n"
    },
    {
      "commit": "7560e6bba8ee26ad09685319c50eb184890893cb",
      "tree": "f13779213b383cc189362c50e92da5ffb930d8a2",
      "parents": [
        "aa061a8799e176b07cc06a926e9c73ab649fba13"
      ],
      "author": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Sat Feb 08 01:04:57 2025 +0000"
      },
      "committer": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Fri Mar 21 23:11:22 2025 +0000"
      },
      "message": "NVMeCache: simplify the cache inherence\n\nMerging Metric class functionility into MetricBase, so that the\nimplementation class can directly inherent from the MetricBase.\n\nThe original thought to have the Metric class is that the Metric can\nimplement different data decoder. For example it could have RawMetric\nthat presents the data as NVMe raw format or it could have\nProtobufMetric which presents the data as protobuf format.\n\nThe current design is the data decoding is moving into the interface\nlayer, a.k.a MetricStore for DBus. The Metric class will only present\nthe Metric data as raw. And it is the interface layer\u0027s duty to encode\nthe data into frontend data format as needed.\n\nTested: N/A (will be teseted with the implementation CLs)\nGoogle-Bug-Id: 366274679\nSigned-off-by: Hao Jiang \u003cjianghao@google.com\u003e\nChange-Id: I4c6f2838c8458cd1f4fdb27817fda8b8bb0e834d\n"
    },
    {
      "commit": "aa061a8799e176b07cc06a926e9c73ab649fba13",
      "tree": "78bf09f6e2399d6d30d51b4ddd0b8126c4bfdeb8",
      "parents": [
        "d02172aefe5b2b167b904375d42d4ca519ad91b8"
      ],
      "author": {
        "name": "Harsh Tyagi",
        "email": "harshtya@google.com",
        "time": "Mon Jan 06 22:02:31 2025 +0000"
      },
      "committer": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Fri Mar 21 22:54:39 2025 +0000"
      },
      "message": "Add Dbus Metric Store Dbus handlers\n\nDbusMetricStore will be instantiated by each parent component, such as\nController or Subsystem.\n\nThe DbusMetricStore will inherit the yaml generated interfaces and\nwrites the handlers for them. Primarily, it will focus on three things:\n* Register the metrics (By taking in an array of metrics)\n* Exposing the metric collection - Exposing all the metric names over\n  dbus\n* Handling the `GetMetric` method call over Dbus\n\nTested: Manually tested by registering a test metrics and calling it via\nRedfish.\n\nGoogle-Bug-Id: 366274679\nChange-Id: Ideb198637c6131c38076cdbc55be171b0c9f7d09\nSigned-off-by: Harsh Tyagi \u003charshtya@google.com\u003e\n"
    },
    {
      "commit": "d02172aefe5b2b167b904375d42d4ca519ad91b8",
      "tree": "d33b06fc551412e54a4181d3e23aa1e142dbbec6",
      "parents": [
        "ffebbddf6adfc8550d0f5c526ad71f9c71c33551"
      ],
      "author": {
        "name": "Harsh Tyagi",
        "email": "harshtya@google.com",
        "time": "Mon Nov 25 20:35:46 2024 +0000"
      },
      "committer": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Fri Mar 21 22:41:47 2025 +0000"
      },
      "message": "Add the Dbus Metric Store Dbus Interface\n\nDesign Doc: go/bmc-nvme-metrics-api-simplicious-2.0\n\nThe above change creates a Dbus interface skeleton for getting the\nmetric providing a unique name of the metrics.\n\nTested: Manually tested by creating a class implementing the interface\nbody\n\nGoogle-Bug-Id: 383168687\nChange-Id: I453c6e5765b93152c03f6da210e7ac56035640bf\nSigned-off-by: Harsh Tyagi \u003charshtya@google.com\u003e\n"
    },
    {
      "commit": "ffebbddf6adfc8550d0f5c526ad71f9c71c33551",
      "tree": "0a5dd39c792a40f1c6b4bcf2845b1e25bbbdc983",
      "parents": [
        "2157f753851caf96c9c397de9af13dcbc26b6490"
      ],
      "author": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Fri Mar 21 00:46:54 2025 +0000"
      },
      "committer": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Fri Mar 21 00:59:20 2025 +0000"
      },
      "message": "unitest: Add time scaler for nvme_cache test\n\nSimilar to https://gbmc-review.googlesource.com/c/dbus-sensors/+/19414,\nvalgrind will serviously slow down the processing time. In the valgrind\nwrapper, slowdown the timer 10x to compensate the slow processing.\n\nTested: unitest pass in valgrind wrapper\nSigned-off-by: Hao Jiang \u003cjianghao@google.com\u003e\nChange-Id: I619ecdf1b7d56f9ecd43ce0a399d083d2bca42fe\n"
    },
    {
      "commit": "2157f753851caf96c9c397de9af13dcbc26b6490",
      "tree": "bdfcd1b96d965505ef89735f64c28076e2cdd2df",
      "parents": [
        "24d3906795cc553c20cf69c6a75e8b560f6708a1"
      ],
      "author": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Fri Mar 21 00:09:52 2025 +0000"
      },
      "committer": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Fri Mar 21 00:09:52 2025 +0000"
      },
      "message": "NVMeCache: unitest: add the second half for concurrency test\n\nAdd caller G to caller J based on the example:\n\ngo/nvme-mi-cache-time-scheduling#heading\u003dh.xnlsabh6sfwj\n\nFixes some minor bugs with the unitest:\n\n* using floating number instead of integer when calculating the\n  SchduledTime\n* the completion of (force) refresh was accidentally using a wrong flag\n  variable.\n\nTested: unitest\nGoogle-Bug-Id: 348660385\nSigned-off-by: Hao Jiang \u003cjianghao@google.com\u003e\nChange-Id: I6af8676cecb836b65069142db83307f4fdd4acdd\n"
    },
    {
      "commit": "24d3906795cc553c20cf69c6a75e8b560f6708a1",
      "tree": "cd1da733c3c8ca567bc99a4ceb6edf3557f2e56e",
      "parents": [
        "e73450b3c8d078143ed3b5896cf29f803e8c3321"
      ],
      "author": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Thu Mar 20 23:00:36 2025 +0000"
      },
      "committer": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Thu Mar 20 23:51:58 2025 +0000"
      },
      "message": "NVMeCache: enhance with executingTask\n\nThere is a corner case that the task is enqueued when the same type of\ntask is under executing. In this case, the task has been dequeued so the\noriginal duplication check will fail to find for the task and insert a\nredundant schedule task in the task queue.\n\nNow we check the task under execution for duplication as well.\n\nAlso enhance the unit test to cover this scenario.\n\nTested: unitest\nGoogle-Bug-Id: 348660385\nSigned-off-by: Hao Jiang \u003cjianghao@google.com\u003e\nChange-Id: I6cc5e2ee65876afa747e7ccfb6e8cd5daaaaac73\n"
    },
    {
      "commit": "e73450b3c8d078143ed3b5896cf29f803e8c3321",
      "tree": "79e210b286d525e06e89f03559b58c1a790414fa",
      "parents": [
        "927f2b0a24dcfd5544eacfbd2c41674d80b76d82"
      ],
      "author": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Tue Oct 08 00:35:08 2024 +0000"
      },
      "committer": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Thu Mar 20 23:40:35 2025 +0000"
      },
      "message": "NVMeCache: Handles immediate_execution_queue\n\nIntroduce the validFlags to the scheduler tasks. That is because the\ntimer.cancel() doesn\u0027t guarantee to broadcast the cancel error code to\nall scheduled jobs. If the job is expired and waiting in the\nimmediate_execution queue, that job will not receive the cancellation.\n\nUse the valid flag to signal these jobs.\n\nFix another minor issue that the interval of max duration will exceed\nthe limit of timepoint.\n\nAlso added the unit test for concurrent cache refresh request.\n\nTested: unitest passed\nGoogle-Bug-Id: 348660385\nSigned-off-by: Hao Jiang \u003cjianghao@google.com\u003e\nChange-Id: I4d119cae15219df585a3531e68e591695760f696\n"
    },
    {
      "commit": "927f2b0a24dcfd5544eacfbd2c41674d80b76d82",
      "tree": "6f7209731ace8fa69a0e7693b7526d3f65e5444a",
      "parents": [
        "acef02b07a14324477fd54b4b89f48f575821b4e"
      ],
      "author": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Thu Oct 03 21:50:29 2024 +0000"
      },
      "committer": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Thu Mar 20 22:25:48 2025 +0000"
      },
      "message": "NVMe: Add NVMeCache\n\nCreated Metric classes to cache the NVMe telemetries.\n\nThe Metric classes will be scheduled by the Scheduler class with a fixed\nrefreshing interval. A Metric can also be triggered by the Refresh()\nmethod for a immediate schedule for a cache refresh.\n\n`readDevice` function must be provided for the implementation of\ntelemetry reading from NVMe device.\n\nDesign: go/nvme-mi-cache-time-scheduling\n\nTested: unitest passed\nGoogle-Bug-Id: 348660385\nSigned-off-by: Hao Jiang \u003cjianghao@google.com\u003e\nChange-Id: Iaa460834d3689023908752126863896f2be240ae\n"
    },
    {
      "commit": "acef02b07a14324477fd54b4b89f48f575821b4e",
      "tree": "e0863b4340e7be469064736608695c9365484c5c",
      "parents": [
        "1917a375882f3369bbd03083ad2bc8f1a2344d63"
      ],
      "author": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Tue Feb 04 00:21:24 2025 +0000"
      },
      "committer": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Thu Feb 13 02:10:48 2025 +0000"
      },
      "message": "unitest: update the setup.sh for test environment\n\nstart-stop-daemon requires root service for recent docker build. Adding\nthe `sudo` in case the docker user is not root. The mapperx still run\nunder the current user.\n\nSigned-off-by: Hao Jiang \u003cjianghao@google.com\u003e\nChange-Id: Iff5525952bce8543d5637b7b321319a87a053da5\n"
    },
    {
      "commit": "1917a375882f3369bbd03083ad2bc8f1a2344d63",
      "tree": "34bef4c14cf98fee7e604197f0a41da9339f4abc",
      "parents": [
        "c310c4ce65bf1893d46d07d8937fca9e5d3b6292"
      ],
      "author": {
        "name": "Muhammad Usama",
        "email": "muhammadusama@google.com",
        "time": "Fri Jan 17 02:29:10 2025 +0000"
      },
      "committer": {
        "name": "Muhammad Usama",
        "email": "muhammadusama@google.com",
        "time": "Fri Jan 17 02:29:10 2025 +0000"
      },
      "message": "nvmed: pin the phosphor-dbus-interface revision\n\nTESTED\u003dN/A (Trivial)\n\nChange-Id: I7b45916289d7c474b4ab891d6b91c901c1685881\nSigned-off-by: Muhammad Usama \u003cmuhammadusama@google.com\u003e\n"
    },
    {
      "commit": "c310c4ce65bf1893d46d07d8937fca9e5d3b6292",
      "tree": "6e59de1864c5f085a67b15c006776c29954faf00",
      "parents": [
        "da51982e0801f05b85da7510e78c8c3879d9e0a0"
      ],
      "author": {
        "name": "Muhammad Usama",
        "email": "muhammadusama@google.com",
        "time": "Thu Dec 12 18:36:22 2024 +0000"
      },
      "committer": {
        "name": "Muhammad Usama Chaudhry",
        "email": "muhammadusama@google.com",
        "time": "Fri Dec 13 16:30:18 2024 -0800"
      },
      "message": "NVMeMi: Fix transferring data via AdminXfer\n\nAdminXfer does not support bidirectional transfer. When transferring\ndata to the drive using AdminXfer, the response data size must be 0,\nas no data is expected back from the drive in the response. The\nresponse data is equal to request data length only in fetch request.\n\nTested: Manually\nGoogle-Bug-Id: 369851251\nChange-Id: I0ab84980b83f31c4c311e81c5222cde118a249d2\nSigned-off-by: Muhammad Usama \u003cmuhammadusama@google.com\u003e\n"
    },
    {
      "commit": "da51982e0801f05b85da7510e78c8c3879d9e0a0",
      "tree": "1f52503d6fb739f08b7ec81d0feee825c053573d",
      "parents": [
        "8bb7360ed2c4b416629bc7d486b335653142a694"
      ],
      "author": {
        "name": "David Tang",
        "email": "davtang@google.com",
        "time": "Tue Dec 10 04:10:08 2024 +0000"
      },
      "committer": {
        "name": "David Tang",
        "email": "davtang@google.com",
        "time": "Tue Dec 10 04:10:28 2024 +0000"
      },
      "message": "[clang-tidy] Delete openbmc-no-clang to enable clang-tidy in presubmit\n\n.openbmc-no-clang prevents compilation with clang and running\nclang-tidy, since this repo is ready to enable clang-tidy, we can delete\nthis file to enable it.\n\nGoogle-Bug-Id: 380138875\nChange-Id: I7c3967917e016e77efaf0a9b4d1feb16d1909a44\nSigned-off-by: David Tang \u003cdavtang@google.com\u003e\n"
    },
    {
      "commit": "8bb7360ed2c4b416629bc7d486b335653142a694",
      "tree": "2e4108d29113b45d0327e59c81f815e062bf9b46",
      "parents": [
        "786f67e2e740a87df49d9dfd6b66ff085985446d"
      ],
      "author": {
        "name": "David Tang",
        "email": "davtang@google.com",
        "time": "Wed Dec 04 17:53:38 2024 +0000"
      },
      "committer": {
        "name": "David Tang",
        "email": "davtang@google.com",
        "time": "Thu Dec 05 17:54:22 2024 +0000"
      },
      "message": "[clang-tidy] Fix clang-tidy errors from g3/gsgys config\n\nFix the clang-tidy errors found here: https://paste.googleplex.com/5777302242983936\n\nChange-Id: Ic05ee0b3271b3effdf19eb707eb703cdd906dcbf\nSigned-off-by: David Tang \u003cdavtang@google.com\u003e\n"
    },
    {
      "commit": "786f67e2e740a87df49d9dfd6b66ff085985446d",
      "tree": "a5389b4e83df413ed0ef41d5760865744eb4acf5",
      "parents": [
        "0da5917a009a3bec2311e97c65c6cc9558f5ebca"
      ],
      "author": {
        "name": "David Tang",
        "email": "davtang@google.com",
        "time": "Thu Nov 14 21:08:38 2024 +0000"
      },
      "committer": {
        "name": "David Tang",
        "email": "davtang@google.com",
        "time": "Thu Nov 14 21:37:47 2024 +0000"
      },
      "message": "[clang-tidy] NOLINT cert-err60-cpp/cert-err09-cpp errors, disable clang-analyzer-optin.cplusplus.VirtualCall\n\nWe NOLINT these cert errors as exception handling will be refactored,\nthis work is being tracked in b/375054188. We also disable clang-analyzer-optin.cplusplus.VirtualCall, this check is inherited from the upstream clang-tidy configuration, we will not enforce this check, incompatible with current implementation of multiple NVMe files.\n\nGoogle-Bug-Id: 375055106\nChange-Id: I5aad67ed6c2437d2fa62d8c0a491b092f6aa7295\nSigned-off-by: David Tang \u003cdavtang@google.com\u003e\n"
    },
    {
      "commit": "0da5917a009a3bec2311e97c65c6cc9558f5ebca",
      "tree": "faa2e7fa4848fa183ee198c58329a52c9df2c0b5",
      "parents": [
        "c3dfe56015cb9e05f13633fd1348d1c36e629c89"
      ],
      "author": {
        "name": "David Tang",
        "email": "davtang@google.com",
        "time": "Thu Nov 14 17:54:55 2024 +0000"
      },
      "committer": {
        "name": "David Tang",
        "email": "davtang@google.com",
        "time": "Thu Nov 14 18:03:21 2024 +0000"
      },
      "message": "[clang-tidy] Fix clang++ compile errors\n\nexport-dynamic is an unrecognized option when compiling with clang++,\nadd ternary to pass -rdynamic instead when compiling in clang++ as the\nlink_args in meson.build\n\nAlso update comment in .clang-tidy-ignore\n\nGoogle-Bug-Id: 375055106\nChange-Id: Ie68cb6e96f086a06d607e4d25ecee4988b833726\nSigned-off-by: David Tang \u003cdavtang@google.com\u003e\n"
    },
    {
      "commit": "c3dfe56015cb9e05f13633fd1348d1c36e629c89",
      "tree": "8fa07066cee7683515d22770b63e52651c7d1efa",
      "parents": [
        "6f02e779a255f2ffb6bedef94a06bcae726b9986"
      ],
      "author": {
        "name": "David Tang",
        "email": "davtang@google.com",
        "time": "Fri Nov 01 16:48:46 2024 +0000"
      },
      "committer": {
        "name": "David Tang",
        "email": "davtang@google.com",
        "time": "Thu Nov 14 16:53:25 2024 +0000"
      },
      "message": "[clang-tidy] Update clang-tidy-ignore\n\nIgnore subprojects/* and build/* since we are only concerned about\nerrors thrown in the source code for this repository and build in a\nseparate directory for clang-tidy. We are only concerned with nvme files in this repository, safely ignore the clang-diagnostic-errors being thrown from PSUEvent, TachSensor, etc and the files that include these classes. The dependencies are not set up for these as they are unused.\n\nGoogle-Bug-Id: 375055106\nChange-Id: I16bb6434ce8ebdc7db77c9d0a4f8afbb8d9e6d30\nSigned-off-by: David Tang \u003cdavtang@google.com\u003e\n"
    },
    {
      "commit": "6f02e779a255f2ffb6bedef94a06bcae726b9986",
      "tree": "3852428cbe278b5bc6bae52892d22a75ab987436",
      "parents": [
        "b66b58640cde3eb305e9103edc411baffff7f1b2"
      ],
      "author": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Thu Nov 07 02:05:23 2024 +0000"
      },
      "committer": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Thu Nov 07 22:40:50 2024 +0000"
      },
      "message": "nvme: use async operation for PIPE write\n\nThe default pipe buffer size is 16 pages (a.k.a 65,536 bytes). If the\ntelemetry size is larger that the buffer, then the pipe write will\nbecome blocking until the client read from it.\n\nUsing async write will free the blocking of main thread regardless the\ntelemetry size and client behavior.\n\nAlso the read end of PIPE now release after a timer(5 seconds). It will\ngive the client more time to duplicate the fd before the pipe get\nreleased, in case the client is busy.\n\nTested:\nRun dnvme stress test for 10 hours on izumi + A1 machine.\nAnd found no issue.\n\nGoogle-Bug-Id: 377742542\nSigned-off-by: Hao Jiang \u003cjianghao@google.com\u003e\nChange-Id: Ife4cef3b0f01c8ab9f0194860783a9940255b947\n"
    },
    {
      "commit": "b66b58640cde3eb305e9103edc411baffff7f1b2",
      "tree": "bb5f5d2fd0553f04c177e8490b598585f464e6c0",
      "parents": [
        "726a14a728a19632be16d3a5dbea80a667d08b37"
      ],
      "author": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Wed Nov 06 17:54:24 2024 +0000"
      },
      "committer": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Thu Nov 07 21:54:39 2024 +0000"
      },
      "message": "nvme: close the read fd for pipe after write()\n\nDuring the nvme daemon stress test, we found the daemon occasionally\nreported EPIPE. That is due to the unexpected DBus client behavior when\nit didn\u0027t open/dup the read fd soon enough before the daemon closing the\nfd.\n\nAccording to linux pipe(7):\n\nIf all file descriptors referring to the read end of a pipe have been\nclosed, then a write(2) will cause a SIGPIPE signal to be generated for\nthe calling process. If the calling process is ignoring this signal,\nthen write(2) fails with the error EPIPE.\n\nNow move the closing of read fd afterwards the write operation, so that no\nEPIPE will be reported. It will also give the client more allowance to dup the\nfd.\n\nGoogle-Bug-Id: 377742542\nSigned-off-by: Hao Jiang \u003cjianghao@google.com\u003e\nChange-Id: Idce1b7a764b44f2691980d282cd4829d88dbe3ce\n"
    },
    {
      "commit": "726a14a728a19632be16d3a5dbea80a667d08b37",
      "tree": "7a03e189067a2aea39842a5ceaece85e7391c4b5",
      "parents": [
        "9618cacf7039ded849e8d5758004e2552c0c6579"
      ],
      "author": {
        "name": "David Tang",
        "email": "davtang@google.com",
        "time": "Tue Oct 29 17:20:54 2024 +0000"
      },
      "committer": {
        "name": "David Tang",
        "email": "davtang@google.com",
        "time": "Tue Oct 29 17:38:23 2024 +0000"
      },
      "message": "[clang-tidy] Fix remaining misc errors\n\nFix all remaining errors in dbus-sensors repository excluding those\ntracked in b/375054188 and  b/376266948.\n\nChange-Id: Ia3bc9a5fba8a57ddef628c26123c6001814053a7\nSigned-off-by: David Tang \u003cdavtang@google.com\u003e\n"
    },
    {
      "commit": "9618cacf7039ded849e8d5758004e2552c0c6579",
      "tree": "f97e8a8c015c4cc9d12ee106cd9fd059ef2f8d08",
      "parents": [
        "3e50d18c74fef853e3c7ae6fb0b2a8c695b42ba5"
      ],
      "author": {
        "name": "David Tang",
        "email": "davtang@google.com",
        "time": "Tue Oct 22 17:47:07 2024 +0000"
      },
      "committer": {
        "name": "David Tang",
        "email": "davtang@google.com",
        "time": "Fri Oct 25 17:10:40 2024 +0000"
      },
      "message": "[clang-tidy] Fix bugprone-* errors\n\nFix the following bugprone-* errors:\nbugprone-use-after-move\nbugprone-throw-keyword-missing\nbugprone-move-forwarding-reference\n\nTested\u003dhttps://fusion2.corp.google.com/0daa0b4d-cfca-33dc-a5b7-7277964a3d21\nNo new failures are introduced when running stability testing suite, nvme_redfish_test expected fail from b/373731790\n\nChange-Id: I68fcd5bb5f7821e0b85ed77c59620ce86a89c6d7\nSigned-off-by: David Tang \u003cdavtang@google.com\u003e\n"
    },
    {
      "commit": "3e50d18c74fef853e3c7ae6fb0b2a8c695b42ba5",
      "tree": "278754881f5b4490407ba4c014e3c4253f6f54ae",
      "parents": [
        "99c38d0aa1fecf0a9ce3498b44b04fc1f84658b9"
      ],
      "author": {
        "name": "David Tang",
        "email": "davtang@google.com",
        "time": "Tue Oct 22 16:54:38 2024 +0000"
      },
      "committer": {
        "name": "David Tang",
        "email": "davtang@google.com",
        "time": "Fri Oct 25 17:10:18 2024 +0000"
      },
      "message": "[clang-tidy] Fix google-* errors\n\nFix google-explicit-constructor errors\n\nTested\u003dhttps://fusion2.corp.google.com/0daa0b4d-cfca-33dc-a5b7-7277964a3d21\nNo new failures are introduced when running stability testing suite, nvme_redfish_test expected fail from b/373731790\n\nChange-Id: Ifbea8b12b19aedad60de4373a92c51b1b7f0cf14\nSigned-off-by: David Tang \u003cdavtang@google.com\u003e\n"
    },
    {
      "commit": "99c38d0aa1fecf0a9ce3498b44b04fc1f84658b9",
      "tree": "85dd8124a4eefd21ed04543c2b0cfae2364b9039",
      "parents": [
        "a6dd4b28ea4b09ef2846cffc20bf37d61f553639"
      ],
      "author": {
        "name": "David Tang",
        "email": "davtang@google.com",
        "time": "Tue Oct 22 16:48:29 2024 +0000"
      },
      "committer": {
        "name": "David Tang",
        "email": "davtang@google.com",
        "time": "Fri Oct 25 17:09:48 2024 +0000"
      },
      "message": "[clang-tidy] Fix modernize-* errors\n\nFix the following modernize-* errors:\nmodernize errors\nmodernize-make-shared\nmodernize-use-default\nmodernize-return-braced-init-list\nmodernize-use-emplace\nmodernize-loop-convert\n\nTested\u003dhttps://fusion2.corp.google.com/0daa0b4d-cfca-33dc-a5b7-7277964a3d21\nNo new failures are introduced when running stability testing suite, nvme_redfish_test expected fail from b/373731790\n\nChange-Id: I79918bbd241be3878cb3c96e39bf7821abf3abd1\nSigned-off-by: David Tang \u003cdavtang@google.com\u003e\n"
    },
    {
      "commit": "a6dd4b28ea4b09ef2846cffc20bf37d61f553639",
      "tree": "3bc0023c99be29dfdb8f10dc213ef088fd277d66",
      "parents": [
        "176cadc46ec68c94d1e3deab4a7c3ad688e1ac96"
      ],
      "author": {
        "name": "David Tang",
        "email": "davtang@google.com",
        "time": "Tue Oct 15 00:52:57 2024 +0000"
      },
      "committer": {
        "name": "David Tang",
        "email": "davtang@google.com",
        "time": "Fri Oct 25 17:09:25 2024 +0000"
      },
      "message": "[clang-tidy] Fix performance-* errors\n\nFix the following performance-* errors:\nperformance-move-const-arg\nperformance-unnecessary-value-param\nperformance-inefficient-vector-operation\nperformance-for-range-copy\n\nTested\u003dhttps://fusion2.corp.google.com/0daa0b4d-cfca-33dc-a5b7-7277964a3d21\nNo new failures are introduced when running stability testing suite, nvme_redfish_test expected fail from b/373731790\n\nGoogle-Bug-Id: 343545884\nChange-Id: I0ee1c2b813295b0069a868cc335f796e5fc5d0d4\nSigned-off-by: David Tang \u003cdavtang@google.com\u003e\n"
    },
    {
      "commit": "176cadc46ec68c94d1e3deab4a7c3ad688e1ac96",
      "tree": "3b34c9530549237ad60cf6751bb086ee78ccbd26",
      "parents": [
        "83a191f31d2914dc53fc0fb589a65c9c923afcbc"
      ],
      "author": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Tue Oct 22 17:11:28 2024 +0000"
      },
      "committer": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Tue Oct 22 18:34:00 2024 +0000"
      },
      "message": "NVMe: remove the self capture for the worker thread\n\nWe found an uncaught std::system_error w/ type of\nresource_deadlock_would_occur and led to a sigabrt.\n\nIt was because when the lifetime of worker is held by the worker thread\nitself, the deconstruction may happen in the worker thread instead of\nthe main thread, leading to the deadlock.\n\nThe bug was introduced by the change\nhttps://gbmc-review.git.corp.google.com/c/dbus-sensors/+/16062, when\nremoving the mutex, which protected scene from happening.\n\nGiven the mutex is no longer needed, the self capture is unnecessary\neither. So the worker thread will not capture any resources.\nThese resources captured by the callback functions are executed in\nthe main thread instead of the worker thread by design, which have\nbeen/will be avoiding this deadlock.\n\nGoogle-Bug-Id: b/372694841\nSigned-off-by: Hao Jiang \u003cjianghao@google.com\u003e\nChange-Id: Ic12ab0781c612c83236ec7a987fd0ee662cc882b\n"
    },
    {
      "commit": "83a191f31d2914dc53fc0fb589a65c9c923afcbc",
      "tree": "0ce6000d92a46b1c18847344d3886d2b0d8339c7",
      "parents": [
        "8d817eb48d2d00392937b3f72743974f0bc6f5df"
      ],
      "author": {
        "name": "David Tang",
        "email": "davtang@google.com",
        "time": "Tue Oct 15 00:05:13 2024 +0000"
      },
      "committer": {
        "name": "David Tang",
        "email": "davtang@google.com",
        "time": "Wed Oct 16 22:53:09 2024 +0000"
      },
      "message": "[clang-tidy] Fix cppcoreguidelines-* errors\n\nFix the following cppcoreguidelines-* errors:\ncppcoreguidelines-explicit-virtual-functions\ncppcoreguidelines-prefer-member-initializer\ncppcoreguidelines-pro-type-member-init\ncppcoreguidelines-pro-type-vararg\ncppcoreguidelines-pro-bounds-array-to-pointer-decay\ncppcoreguidelines-pro-avoid-c-arrays\ncppcoreguidelines-pro-type-reinterpret-cast\ncppcoreguidelines-pro-type-union-access\ncppcoreguidelines-macro-usage\n\nChange-Id: I94b366ce23f92e9539c87a07c08fc6d05f4529ed\nSigned-off-by: David Tang \u003cdavtang@google.com\u003e\n"
    },
    {
      "commit": "8d817eb48d2d00392937b3f72743974f0bc6f5df",
      "tree": "c47c58b6f21247764f4168de5368ea343e43d3d9",
      "parents": [
        "8dc350d28a584413be8cb491027b2be23a32bf5b"
      ],
      "author": {
        "name": "David Tang",
        "email": "davtang@google.com",
        "time": "Mon Oct 07 23:19:05 2024 +0000"
      },
      "committer": {
        "name": "David Tang",
        "email": "davtang@google.com",
        "time": "Wed Oct 09 16:14:26 2024 +0000"
      },
      "message": "[clang-tidy] Resolve readability-* errors\n\nFix the following clang-tidy errors:\nreadability-else-after-return\nreadability-implicit-bool-conversion\nreadability-simplify-boolean-expr\nreadability-identifier-naming\nreadability-redundant-control-flow\nreadability-redundant-access-specifier\nreadability-redundant-member-init\nreadability-redundant-smartptr-get\nreadability-qualified-auto\nreadability-braces-around-statements\nreadability-inconsistent-declaration-parameter-name\nreadability-convert-member-functions-to-static\nreadability-isolate-declaration\nreadability-container-size-empty\nreadability-uppercase-literal-suffix\nreadability-named-parameter\n\nGoogle-Bug-Id: 343545884\nChange-Id: Ib3e8b202d0cbe13e0bc958eca18be1e1494cd5cf\nSigned-off-by: David Tang \u003cdavtang@google.com\u003e\n"
    },
    {
      "commit": "8dc350d28a584413be8cb491027b2be23a32bf5b",
      "tree": "0e86fc15198a0b323d42833fee71fe1cc309bc6b",
      "parents": [
        "5668050af3390621473d8cd1f4a1531d7a61be6e"
      ],
      "author": {
        "name": "Muhammad Usama",
        "email": "muhammadusama@google.com",
        "time": "Tue Sep 24 19:48:09 2024 +0000"
      },
      "committer": {
        "name": "Muhammad Usama",
        "email": "muhammadusama@google.com",
        "time": "Tue Sep 24 19:48:09 2024 +0000"
      },
      "message": "fix the valgrind uninit error for MI tests\n\nGoogle-Bug-Id: 367716722\nChange-Id: I64bf0dedd9af650af02afe61212aeb4bd458abe5\nSigned-off-by: Muhammad Usama \u003cmuhammadusama@google.com\u003e\n"
    },
    {
      "commit": "5668050af3390621473d8cd1f4a1531d7a61be6e",
      "tree": "98fcacd838a91a909e72a47e9152c4cb7765acb4",
      "parents": [
        "bfedb00c31180d4731c5224225d0cdd4e5f07977"
      ],
      "author": {
        "name": "Muhammad Usama",
        "email": "muhammadusama@google.com",
        "time": "Thu Sep 19 20:26:27 2024 +0000"
      },
      "committer": {
        "name": "Muhammad Usama",
        "email": "muhammadusama@google.com",
        "time": "Tue Sep 24 19:46:01 2024 +0000"
      },
      "message": "fix code format for clang-format\n\nGoogle-Bug-Id: 367716722\nChange-Id: I26b441fa632af73096db9de54df53cef251436ff\nSigned-off-by: Muhammad Usama \u003cmuhammadusama@google.com\u003e\n"
    },
    {
      "commit": "bfedb00c31180d4731c5224225d0cdd4e5f07977",
      "tree": "c80054e2ac055dbdf2a341ef36e46db203df2bdb",
      "parents": [
        "b820af0fd0aab139646d001e119a5af43362e960"
      ],
      "author": {
        "name": "Muhammad Usama",
        "email": "muhammadusama@google.com",
        "time": "Wed Jun 12 05:36:25 2024 +0000"
      },
      "committer": {
        "name": "Muhammad Usama",
        "email": "muhammadusama@google.com",
        "time": "Wed Sep 11 23:49:11 2024 +0000"
      },
      "message": "NVMeMi: Add delay while optimizing the Endpoint\n\nWithout the delay, we endup in a tight loop in corner\ncases. Also, remove the isOptimize flag now the timer\nshould handle the same purpose. This is a short term\nfix and will be removed after the \"issue-14\" series is in.\nhttps://gbmc-review.googlesource.com/q/topic:%22cc-issue-14%22\n\nTested: https://paste.googleplex.com/5336195299278848\nGoogle-Bug-Id: 346434788\nChange-Id: Iba903ff5886fd0d9fb67e5dadda76830eeb35fe5\nSigned-off-by: Muhammad Usama \u003cmuhammadusama@google.com\u003e\n"
    },
    {
      "commit": "b820af0fd0aab139646d001e119a5af43362e960",
      "tree": "da4893e2462a431f75fefb0417efa43a8b70586e",
      "parents": [
        "cbd18814994d75471f7bca9c23121608ec36e6e3"
      ],
      "author": {
        "name": "Harsh Tyagi",
        "email": "harshtya@google.com",
        "time": "Tue Aug 13 22:32:25 2024 +0000"
      },
      "committer": {
        "name": "Harsh Tyagi",
        "email": "harshtya@google.com",
        "time": "Tue Aug 13 22:35:54 2024 +0000"
      },
      "message": "Add optional lookup intf name param in parseThresholdFromConfig\n\nThis will allow us to retrieve threshold objects from EM config with a\ndynamic parameter as some plugin might have a different interface name.\n\nTested:\nBuilds successfully\n\nfusion2: n/a\n\nGoogle-Bug-Id: 359233963\nChange-Id: I06d8c3d1406a18d1b31c9579ce96d455e7037516\nSigned-off-by: Harsh Tyagi \u003charshtya@google.com\u003e\n"
    },
    {
      "commit": "cbd18814994d75471f7bca9c23121608ec36e6e3",
      "tree": "596e0d2d503c38b23dedd00bcb2ba587249b26c2",
      "parents": [
        "0b998328613856698ecdd9024a8ef4eb9edef22a"
      ],
      "author": {
        "name": "Muhammad Usama",
        "email": "muhammadusama@google.com",
        "time": "Mon Jul 08 18:38:53 2024 +0000"
      },
      "committer": {
        "name": "Muhammad Usama Chaudhry",
        "email": "muhammadusama@google.com",
        "time": "Mon Jul 08 19:20:01 2024 +0000"
      },
      "message": "NVMeSubsys: fill drive capacity in addition to MN/SN\n\nTested: Manually (https://paste.googleplex.com/4818378076454912)\nGoogle-Bug-Id: 349374278\nChange-Id: If581fbad106800c45567e27bacec0f8fd07d4979\nSigned-off-by: Muhammad Usama \u003cmuhammadusama@google.com\u003e\n"
    },
    {
      "commit": "0b998328613856698ecdd9024a8ef4eb9edef22a",
      "tree": "f58911a141f12a470a050dca9418e4406384c8b9",
      "parents": [
        "10b99bb74c488c664e38060ad8262ce3e886408c"
      ],
      "author": {
        "name": "Muhammad Usama",
        "email": "muhammadusama@google.com",
        "time": "Thu Jun 06 21:00:49 2024 +0000"
      },
      "committer": {
        "name": "Muhammad Usama Chaudhry",
        "email": "muhammadusama@google.com",
        "time": "Thu Jun 06 23:50:09 2024 +0000"
      },
      "message": "NVMeSubsys: Stop the subsystem while recovering MCTP EP\n\nBefore we were not stopping the subsystem resulting in multiple\nrecovery calls to be made which could result in first recovery\nloop to fail.\n\nChange-Id: I8cc5d7c6e2bee8f01db9ea2dc765d51b06d9c36c\nSigned-off-by: Muhammad Usama \u003cmuhammadusama@google.com\u003e\n"
    },
    {
      "commit": "10b99bb74c488c664e38060ad8262ce3e886408c",
      "tree": "b70045b84bf2dbf7f7c176412b596ee6580a4ebc",
      "parents": [
        "80e5c363a63d1fc9385a0512f55a7e0b1bf30d06"
      ],
      "author": {
        "name": "Muhammad Usama",
        "email": "muhammadusama@google.com",
        "time": "Mon Jun 03 19:09:11 2024 +0000"
      },
      "committer": {
        "name": "Muhammad Usama",
        "email": "muhammadusama@google.com",
        "time": "Tue Jun 04 02:06:18 2024 +0000"
      },
      "message": "NVMeMI: Remove the async timer to optimize EP\n\nAlso,\n* Move the get/set timeout inside the worker thread\n* Use device instead of Endpoint in error conditions\n\nPreviously, we were using the async timer to avoid the tight loop\nwhile optimizing the MCTP endpoint. With MCTP recoverability, this\nwill be handle by the calls to the MCTPd to recover the endpoint.\nThis will also avoid the case where the handler is called when the\nMCTP state is already transition to Reset resulting in segmentation\nfault. Also, move the get/set timeout inside the worker threads and\nguard the endpoint\n\nGoogle-Bug-Id: 341322615\n\nChange-Id: Ic3331e2b587af148b6183a9dabdf1c8f9cd547c6\nSigned-off-by: Muhammad Usama \u003cmuhammadusama@google.com\u003e\n"
    },
    {
      "commit": "80e5c363a63d1fc9385a0512f55a7e0b1bf30d06",
      "tree": "81a0154b09fc3eb8239cfbb7a0797f02034e7567",
      "parents": [
        "824f7a724b7ee1e3d8d6bb2972f9407a988dd673"
      ],
      "author": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Thu Apr 25 19:15:51 2024 +0000"
      },
      "committer": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Mon Apr 29 23:57:34 2024 +0000"
      },
      "message": "NVMeMI: use active ns list for adminListNamespaces\n\nDetails refer to the bug: b/336894111#comment7\n\nNote:\n* Do not upstream this change\n* Revert this change when the knuckle fw bug is fixed:\nb/336923377\n\nTested: b/336894111#comment8\nGoogle-Bug-Id: 336894111\nSigned-off-by: Hao Jiang \u003cjianghao@google.com\u003e\nChange-Id: Ia39babd9ca278ba039728d7459dc193ea75c5c76\n"
    },
    {
      "commit": "824f7a724b7ee1e3d8d6bb2972f9407a988dd673",
      "tree": "da27f7a06cd7b5021aca223e88db02652e14d46a",
      "parents": [
        "8611af537bf277e5ebd51a125425e7aa6802da29"
      ],
      "author": {
        "name": "Jinliang Wang",
        "email": "jinliangw@google.com",
        "time": "Mon Apr 29 12:26:26 2024 -0700"
      },
      "committer": {
        "name": "Jinliang Wang",
        "email": "jinliangw@google.com",
        "time": "Mon Apr 29 13:18:46 2024 -0700"
      },
      "message": "nvmed: add comment stub for google patch context\n\nTested: local build\nGoogle-Bug-Id: 336280484\nChange-Id: Iba1f678232ecbc406b2b572f38c277d89903c1a6\nSigned-off-by: Jinliang Wang \u003cjinliangw@google.com\u003e\n"
    },
    {
      "commit": "8611af537bf277e5ebd51a125425e7aa6802da29",
      "tree": "4ab2b5395672b0d106a2673de42df4edfbf447d8",
      "parents": [
        "0fb69f310e8280c37b52a399244a2576978c4283"
      ],
      "author": {
        "name": "Jinliang Wang",
        "email": "jinliangw@google.com",
        "time": "Thu Apr 25 20:31:46 2024 -0700"
      },
      "committer": {
        "name": "Jinliang Wang",
        "email": "jinliangw@google.com",
        "time": "Mon Apr 29 13:18:44 2024 -0700"
      },
      "message": "nvmed: enhance print message\n\n1) print subsystem name, so we can map subsystem to EID\n2) print smbus as hex\n3) add space after ]\n\nTested:\nhttps://paste.googleplex.com/5906485053227008\n\nChange-Id: I8e92f7e6024570ed900100310f6dbdf784903122\nSigned-off-by: Jinliang Wang \u003cjinliangw@google.com\u003e\n"
    },
    {
      "commit": "0fb69f310e8280c37b52a399244a2576978c4283",
      "tree": "bc8f5db654fc54c4c4841c3a9b63e55ae6624409",
      "parents": [
        "b4779e46c6dc4146442765f0fdae2f36420de41f"
      ],
      "author": {
        "name": "Jinliang Wang",
        "email": "jinliangw@google.com",
        "time": "Fri Apr 19 23:11:30 2024 -0700"
      },
      "committer": {
        "name": "Jinliang Wang",
        "email": "jinliangw@google.com",
        "time": "Mon Apr 22 21:43:37 2024 +0000"
      },
      "message": "nvmed: detect banned i2c bus and skip creation of NVMeSubsystem\n\nOptional `/usr/bin/init-banned-i2c-bus.sh` script (go/gbmccl/182579)\nis a platform specific script to detect i2c buses which don\u0027t support\nNVMe-MI.\n\nTested:\nTested with go/gbmccl/182579\n\nGoogle-Bug-Id: 336042883\nChange-Id: I6108433be3c59f2e5375dfce66ccd214c2511c04\nSigned-off-by: Jinliang Wang \u003cjinliangw@google.com\u003e\n"
    },
    {
      "commit": "b4779e46c6dc4146442765f0fdae2f36420de41f",
      "tree": "73b03e188a5d24c3d464bb653c7ee2a7c114a339",
      "parents": [
        "66957197965ecbc9031eaf4f269173029dddff47"
      ],
      "author": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Tue Mar 26 21:45:16 2024 +0000"
      },
      "committer": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Mon Apr 22 20:43:27 2024 +0000"
      },
      "message": "NVMeSubsys: Make the initiate process attached\n\nOriginally, the workflow for namespace initialization\n(fillDrive()/updateVolumes()/querySupportedFormats()) was executed after\nthe subsystem init process and in the Start state. That caused several\nissues:\n* We can not redo the init if errors happened in the NS init.\n* The external clients on DBus can introduce tasks and delays the NS\n  init.\n* The external client can receive misleading information with partially\n  init NS.\n\nUse stackful coroutine(yield_context) to make the initialization process\nattached. It will mark the subsystem in Start state only if there is no\nerrors(exception) happening in the init process. Otherwise the whole\ninit process will roll back to the next successful subsystem health\npoll.\n\nAdditionally, the controllers (and other components if any) will be\nstarted at the end of the init process, before which all external calls\nwill return errors.\n\nTested: ran the full gbmc NVMe test flow (b/333397759#comment6)\nGoogle-Bug-Id: 330783959\nSigned-off-by: Hao Jiang \u003cjianghao@google.com\u003e\nChange-Id: Ic127b246546f8f3e66155c2e8547474b0c4dd166\n"
    },
    {
      "commit": "66957197965ecbc9031eaf4f269173029dddff47",
      "tree": "e22e5ad9b71c1a1902922ff3e0b47b8a23feefb2",
      "parents": [
        "1c9c2ee5d4bf4405991f13555214d638aeffbb21"
      ],
      "author": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Fri Apr 12 22:34:20 2024 +0000"
      },
      "committer": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Sat Apr 13 01:06:48 2024 +0000"
      },
      "message": "NVMeMain: stop susbsystem start/stop with MCTP status change\n\nCurrently the thermal sensors and plugs are binded to the subsystem\nstart/stop lifetime. With the MCTP recoverability, it binds the\nstart/stop also to the MCTP interface.\n\nIt is problematic since during the MCTP down period, the system still\nneeds the thermal and the plugin interface for functionilty like thermal\ncontrol.\n\nRemove the subsystem.start()/stop() from the MCTP config callback, so\nthe subsystem only starts when the EEPROM interface detected, and stops\nwhen the EEPROM interface removes. This behavior is align with the\nprevious ahead of MCTP recoverability.\n\nGoogle-Bug-Id: b/333946719\nTested: http://sponge2/a4a7f497-2d94-4798-a055-b1f48c091221\nSigned-off-by: Hao Jiang \u003cjianghao@google.com\u003e\nChange-Id: Icd1d7218bbaed2b2d24ab05c44afa5c42c33723f\n"
    },
    {
      "commit": "1c9c2ee5d4bf4405991f13555214d638aeffbb21",
      "tree": "8a79cbd0dc46072d33e6d8844e129e9be4dff2c6",
      "parents": [
        "a5fe75c11e2112e5401e59a980bf9de88e32d6d3"
      ],
      "author": {
        "name": "Andrew Jeffery",
        "email": "andrew@codeconstruct.com.au",
        "time": "Mon Mar 18 12:19:04 2024 +1030"
      },
      "committer": {
        "name": "Muhammad Usama Chaudhry",
        "email": "muhammadusama@google.com",
        "time": "Wed Mar 27 18:15:39 2024 +0000"
      },
      "message": "nvmesensor: Implement MCTP endpoint recovery\n\nMCTP endpoint recovery allows for device removals and partial or\ncomplete failures of MCTP endpoints to be managed effectively. The\nrecovery implementation rests on the `.Recover` method and related\nbehaviors exposed by mctpd[1].\n\nThe implementation comes in several parts:\n\n1. Adjusting NVMeMi::start() to take an MctpEndpoint\n\n2. A new request method exposed by NVMeMi: recover()\n\n3. NVMeSubsystem issuing a call to NVMeMi::recover() when it judges the\n   endpoint to be in an error state\n\n4. Integration of endpoint lifecycle management using events exposed by\n   the MctpEndpoint instance associated with an MCTP-capable device.\n\nTrack related MctpDevice, NVMeMiIntf and NVMeSubsystem instances\nin an NVMeDevice struct held by the NVMeMap type. On exposure of a\nnew drive configuration from EntityManager we hook the NVMeMi and\nNVMeSubsystem start() and stop() calls into the MctpEndpoint lifecycle.\n\nNVMeSubsystem\u0027s call to NVMeMi::recover() when successive NVMe MI\ncommands fail results in one of:\n\n1. A determination that the endpoint is available\n\n2. A determination that the endpoint was temporarily unreachable, but\n   was reconfigured successfully\n\n3. A determination that the endpooint cannot be recovered, and its\n   representation is removed from DBus\n\nThese lifecycle events are delivered through the callbacks passed into\nMctpEndpoint::subscribe().\n\nNVMeMi::recover() needs access to the MctpEndpoint instance on which it\nshould invoke the `.Recover` DBus method. To accommodate that we\nswitch NVMeMi::start(int network, uint8_t eid) to instead take a\nstd::shared_ptr\u003cMctpEndpoint\u003e directly. Further, as we now have the\nNVMeMi::recover() capability, we rework the power state match callback\nto function in terms of recover() rather than start() and stop()\ndirectly. This enables removal of NVMeMi::start(), as the endpoint\nsetup is now handled by the MctpEndpoint lifecycle events and\nMctpDevice::setup().\n\nWith access to a std::shared_ptr\u003cMctpEndpoint\u003e there\u0027s now no need\nfor the `nid` and `eid` class members as they are encapsulated by the\nMctpEndpoint. Remove those, as well as the `bus` and `addr` members,\nwhich are encapsulated by std::shared_ptr\u003cMctpDevice\u003e passed through\nthe constructor. The removal of these members drives a cleanup of\nall the logging that exploited them, which is reduced to calls to\n`device-\u003edescribe()` or `endpoint-\u003edescribe()` as required. Finally, the\nDBus call for configuring the MCTP device MTU is also impacted by the\nremoval of the `nid` and `eid` members. However, its functionality is\nencapsulated in the MctpEndpoint implementation, so the impacted method\nis converted to the MctpEndpoint implementation instead.\n\n[1]: https://github.com/CodeConstruct/mctp/blob/69ed224ff9b5206ca7f3a5e047a9da61377d2ca7/docs/endpoint-recovery.md\n\nChange-Id: I62c601c7b92a007f8467d36fbeecd7451fbc111d\nSigned-off-by: Andrew Jeffery \u003candrew@codeconstruct.com.au\u003e\n"
    },
    {
      "commit": "a5fe75c11e2112e5401e59a980bf9de88e32d6d3",
      "tree": "d90a563ff1b3df49d5c4e7d93b3a9152eedc5596",
      "parents": [
        "6f081672cace6b62e8bd5c0ca607305b5740f12b"
      ],
      "author": {
        "name": "Andrew Jeffery",
        "email": "andrew@codeconstruct.com.au",
        "time": "Mon Mar 18 10:40:51 2024 +1030"
      },
      "committer": {
        "name": "Muhammad Usama Chaudhry",
        "email": "muhammadusama@google.com",
        "time": "Wed Mar 27 18:15:28 2024 +0000"
      },
      "message": "NVMeSubsys: Cleanup cooldown state on stop()\n\nIf the subsystem is stopped and subsequently started then we should not\nassume that cooldown continues to apply. Reset unavailableCount in\nthe stop() path.\n\nChange-Id: I03860e0f9391661cc5b7e9a40bbe8df7a636ed54\nSigned-off-by: Andrew Jeffery \u003candrew@codeconstruct.com.au\u003e\n"
    },
    {
      "commit": "6f081672cace6b62e8bd5c0ca607305b5740f12b",
      "tree": "45ac3c49e33f34254484c4457f3ed14a15baccec",
      "parents": [
        "e086ca3118ff7a7842e801aa585436120c4a10c8"
      ],
      "author": {
        "name": "Andrew Jeffery",
        "email": "andrew@codeconstruct.com.au",
        "time": "Mon Jan 08 17:16:56 2024 +1030"
      },
      "committer": {
        "name": "Muhammad Usama Chaudhry",
        "email": "muhammadusama@google.com",
        "time": "Wed Mar 27 18:14:32 2024 +0000"
      },
      "message": "NVMeMi: Pass endpoint parameters directly to epConnect()\n\nThe early implementation of NVMeMi::start() combined setup of the MCTP\nendpoint for the NVMe device with setup of the NVMe MI connection.\nStatus::Configured was introduced into the internal state machine to\nexplicitly separate the reset, configured and connected phases and the\nexpectations on class member state in each.\n\nThe overload of start() reduces the need for Status::Configured.\nRemove Status::Configured now to separate the resulting refactor of\nthe internal state machine from the subsequent introduction of endpoint\nrecovery functionality.\n\nChange-Id: I73bfa06d2b17c6af38b596fa1b42a36d32e10b55\nSigned-off-by: Andrew Jeffery \u003candrew@codeconstruct.com.au\u003e\n"
    },
    {
      "commit": "e086ca3118ff7a7842e801aa585436120c4a10c8",
      "tree": "6feecd52147c88e6bebe35431f0a0b5da7a56f8e",
      "parents": [
        "020d09d6677e8ebcea011b641095355c19e13371"
      ],
      "author": {
        "name": "Andrew Jeffery",
        "email": "andrew@codeconstruct.com.au",
        "time": "Tue Mar 12 10:26:34 2024 +1030"
      },
      "committer": {
        "name": "Muhammad Usama Chaudhry",
        "email": "muhammadusama@google.com",
        "time": "Wed Mar 27 18:14:16 2024 +0000"
      },
      "message": "NVMeMi: Overload start() to take network and eid\n\nSplit the NVMeMi::start() method into two parts:\n\n1. `start()`: Calls mctpd\u0027s SetupEndpoint to configure the\n   endpoint on the MCTP-capable device, and then invokes\n\n2. `start(int network, uint8_t eid)`: Which performs actions necessary\n   to bring up the NVMe MI connection used by the NVMeMi instance\n\nSeparating out `start(int network, uint8_t eid)` provides a path\nfor external initialization of the endpoint to provide the endpoint\nparameters to the NVMeMi instance. Initialization and maintenance of\nMCTP endpoints is implemented in the MctpDevice and MctpEndpoint\nclasses, and it\u0027s intended that we move these responsibilities out of\nthe NVMeMi implementation.\n\nWe retain `start()` as this is currently invoked by the power state\nmatch callback and NVMeSensorMain, which cannot yet provide these values\nto NVMeMi.\n\nFinally, this split enables removal of the Status::Configured state,\nwhich will be done in a subsequent patch. Status::Configured was\nintroduced to provide a degree of isolation between connection phases\nin the NVMeMi implementation, but I think that\u0027s better achieved by the\nsplit implemented here.\n\nChange-Id: I43f40947cfe0beb77d9a2e0dea4a6111a9d5752b\nSigned-off-by: Andrew Jeffery \u003candrew@codeconstruct.com.au\u003e\n"
    },
    {
      "commit": "020d09d6677e8ebcea011b641095355c19e13371",
      "tree": "8244e5274eb57f0c44413c105cd9ed52c4d39e14",
      "parents": [
        "467f3188e1dba27d84a2b25064668fefc6c07435"
      ],
      "author": {
        "name": "Andrew Jeffery",
        "email": "andrew@codeconstruct.com.au",
        "time": "Fri Mar 08 19:35:03 2024 +1030"
      },
      "committer": {
        "name": "Muhammad Usama Chaudhry",
        "email": "muhammadusama@google.com",
        "time": "Wed Mar 27 18:13:56 2024 +0000"
      },
      "message": "NVMeMi: Remove unused getNID(), getEID()\n\nThese were defined via NVMeMiIntf but never called in practice. Reduce\nAPI surface by removing the methods. Removing them now avoids the need\nto change their implementation for no net benefit when we implement\nsupport for endpoint recovery.\n\nChange-Id: Ifbdeae85156f27f5aa2d35d5d031e14f691bdb38\nSigned-off-by: Andrew Jeffery \u003candrew@codeconstruct.com.au\u003e\n"
    },
    {
      "commit": "467f3188e1dba27d84a2b25064668fefc6c07435",
      "tree": "8dcfcee8e5c8418c9d7fca8e9a37ed2c36e67a4b",
      "parents": [
        "72eee90a1fadc68094d65c783b080e4671ffd52d"
      ],
      "author": {
        "name": "Andrew Jeffery",
        "email": "andrew@codeconstruct.com.au",
        "time": "Fri Mar 08 18:47:37 2024 +1030"
      },
      "committer": {
        "name": "Muhammad Usama Chaudhry",
        "email": "muhammadusama@google.com",
        "time": "Wed Mar 27 18:13:40 2024 +0000"
      },
      "message": "NVMeMi: Remove unused mctpPath\n\nmctpPath, part of the result from the call to\n`xyz.openbmc_project.MCTP /xyz/ openbmc_project/mctp\nau.com.CodeConstruct.MCTP SetupEndpoint`, was recorded but never used.\nMinimize the state management admin work by removing it.\n\nChange-Id: I2657104422ded2f2b58626d79d7c56f54c45921e\nSigned-off-by: Andrew Jeffery \u003candrew@codeconstruct.com.au\u003e\n"
    },
    {
      "commit": "72eee90a1fadc68094d65c783b080e4671ffd52d",
      "tree": "8620445450dca622371aa20d7a8628cd03cd66be",
      "parents": [
        "f69603072d62aec0ce79a147703069ef003facf7"
      ],
      "author": {
        "name": "Andrew Jeffery",
        "email": "andrew@codeconstruct.com.au",
        "time": "Mon Jan 08 20:32:12 2024 +1030"
      },
      "committer": {
        "name": "Muhammad Usama Chaudhry",
        "email": "muhammadusama@google.com",
        "time": "Wed Mar 27 18:12:50 2024 +0000"
      },
      "message": "NVMeMi: Abstract the worker policy from the MI implementation\n\nPassing the worker through the constructor allows us to inject\nalternative worker implementations for testing, but also to lift the\npolicy of selecting which worker to the edges of the daemon\nimplementation.\n\nChange-Id: I28a3d6da97c9008cbec947033a9da80d22c0d5a0\nSigned-off-by: Andrew Jeffery \u003candrew@codeconstruct.com.au\u003e\n"
    },
    {
      "commit": "f69603072d62aec0ce79a147703069ef003facf7",
      "tree": "09a619dfea78bc388b2aad22f241c7f5e491aec7",
      "parents": [
        "12bb637567f37575cc4219a07fd37d2185901760"
      ],
      "author": {
        "name": "Andrew Jeffery",
        "email": "andrew@codeconstruct.com.au",
        "time": "Mon Jan 08 20:20:45 2024 +1030"
      },
      "committer": {
        "name": "Muhammad Usama Chaudhry",
        "email": "muhammadusama@google.com",
        "time": "Wed Mar 27 18:11:58 2024 +0000"
      },
      "message": "NVMeMi: Remove mctpMtx\n\nWe now use flushOperations() to uphold the property of no valid jobs\nqueued in the worker queue before invoking `nvme_mi_close()`. Further,\ncalls into the NVMeMi command APIs are guarded with a call to\nNVMeMi::isEndpointDegraded(), preventing recursive queuing of worker\njobs accessing nvme_mi_ep_t memory from an existing worker job.\n\nRemove mctpMtx as it is now redundant.\n\nChange-Id: Ica36e6fed3f438be39c79b65258b0bcabafecbe4\nSigned-off-by: Andrew Jeffery \u003candrew@codeconstruct.com.au\u003e\n"
    },
    {
      "commit": "12bb637567f37575cc4219a07fd37d2185901760",
      "tree": "1d44f6b58abd27c2ebcce1c07bd1acac21a20bf8",
      "parents": [
        "0f13d46aab8429bc9360826f9c51ecdcd6854e26"
      ],
      "author": {
        "name": "Andrew Jeffery",
        "email": "andrew@codeconstruct.com.au",
        "time": "Fri Feb 16 15:06:01 2024 +1030"
      },
      "committer": {
        "name": "Muhammad Usama Chaudhry",
        "email": "muhammadusama@google.com",
        "time": "Wed Mar 27 18:11:02 2024 +0000"
      },
      "message": "NVMeMi: Eliminate connection state races with worker thread jobs\n\nIadf8eefbda9 (\"NVMeMi: Flush pending operations before nvme_mi_close()\")\ndefers the close of the endpoint connection via the worker thread.\nThis is to ensure that queued jobs could complete before the a\nreconnection attempt forces the invalidation of any captured controller\npointers.\n\nHowever, we need to also to account for preventing a subsequent\n`start()` call (implemented in terms of `epConnect()`) from\nmodifying other essential state. Jobs queued in the worker all take a\n`shared_from_this()` reference to the NVMeMi instance, and dereference\nthrough it to access members such as nvmeEP. It\u0027s not enough to protect\nthe controller objects alone.\n\nIntroduce `Status::Terminating`. Invocation of `epReset()` immediately\ntransitions to `Status::Terminating` instead of `Status::Reset`, and\nmoves the transition to `Status::Reset` into the deferred job. This\nprevents progress in a subsequent `epConnect()` invocation until the\ndeferred job has executed.\n\nChange-Id: Ic0322eec68bf34499260f823797f1edec607a189\nSigned-off-by: Andrew Jeffery \u003candrew@codeconstruct.com.au\u003e\n"
    },
    {
      "commit": "0f13d46aab8429bc9360826f9c51ecdcd6854e26",
      "tree": "81a7d9aa04de1fec5792d0da2777f33c40e20f64",
      "parents": [
        "1d1c56e5c4d90cfca516b57ba09dacf370316f4b"
      ],
      "author": {
        "name": "Andrew Jeffery",
        "email": "andrew@codeconstruct.com.au",
        "time": "Mon Jan 08 16:09:50 2024 +1030"
      },
      "committer": {
        "name": "Muhammad Usama Chaudhry",
        "email": "muhammadusama@google.com",
        "time": "Wed Mar 27 18:09:20 2024 +0000"
      },
      "message": "NVMeMi: Lift connectivity transitions to methods\n\nIsolate the actions required for connectivity state transitions to their\nown \"event\" methods. This assists with reasoning about the behavior and\ncorrectness of the implementation.\n\nWith that philosophy in mind, we also introduce a \"Configured\" state to\ncapture the property that the network ID, EID and path variables are in\na valid state, and introduce a method to perform the transition to make\nsure that property is upheld in the face of exceptions from the message\nhandling.\n\nChange-Id: I1a8daf678e6a1b4275d740034a8f54d7d21a64e1\nSigned-off-by: Andrew Jeffery \u003candrew@codeconstruct.com.au\u003e\n"
    },
    {
      "commit": "1d1c56e5c4d90cfca516b57ba09dacf370316f4b",
      "tree": "7e7dec84e4b0d1d380cf5f73a4e0d050e418d308",
      "parents": [
        "c6f5a7094072fa95eb7650df5ef3841f2ee4f40c"
      ],
      "author": {
        "name": "Andrew Jeffery",
        "email": "andrew@codeconstruct.com.au",
        "time": "Fri Mar 08 16:04:22 2024 +1030"
      },
      "committer": {
        "name": "Muhammad Usama Chaudhry",
        "email": "muhammadusama@google.com",
        "time": "Wed Mar 27 18:09:20 2024 +0000"
      },
      "message": "NVMeSubsystem: Mark destructor as override\n\nAs recommended by clang-tidy, given we inherit from other classes.\n\nChange-Id: Ie4049eda8ee33b2966c69a9869852ca135b29ccf\nSigned-off-by: Andrew Jeffery \u003candrew@codeconstruct.com.au\u003e\n"
    },
    {
      "commit": "c6f5a7094072fa95eb7650df5ef3841f2ee4f40c",
      "tree": "c5cded5634525de16a4cf0ea7e559efd17f5511e",
      "parents": [
        "388429e048e8309da926378caf8a943587bc4737"
      ],
      "author": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Tue Mar 26 00:00:49 2024 +0000"
      },
      "committer": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Tue Mar 26 21:47:04 2024 +0000"
      },
      "message": "Unitest: Config the polling rate to 100ms\n\nThe unitest has been expand to the edge of 30s. The test was based on\nthe normal NVMe susystem health polling rate of 1 second. This change\nwill increase the polling rate by 10x to reduce the unitesting time.\n\nWhen running via valgrind, remains the normal polling rate \u003d 1s. That is\nbecause the valgrind will serviously slow down the processing time so\nthat the polling rate will be bottlenecked by the handling(processing)\nspeed.\n\nSigned-off-by: Hao Jiang \u003cjianghao@google.com\u003e\nChange-Id: Ic38fe8d71b5c9fcbfb294c3ff8ae678131fd4f58\n"
    },
    {
      "commit": "388429e048e8309da926378caf8a943587bc4737",
      "tree": "317a2afb1fa2111aef0e154275c5621ce710bff2",
      "parents": [
        "c752857b9295250eaa62871c8a3ca80bbbf5e68f"
      ],
      "author": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Mon Mar 25 21:41:02 2024 +0000"
      },
      "committer": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Tue Mar 26 21:47:04 2024 +0000"
      },
      "message": "Unitest: Add InitErrorInjection test\n\nInjecting errors for NVMe subsystem initialization process. The\nsubsystem class should be resistant to the errors and proceed to normal\ninit process after all errors gone.\n\nGoogle-Bug-Id: 326355507\nSigned-off-by: Hao Jiang \u003cjianghao@google.com\u003e\nChange-Id: I237da6879ed82dbaffcdcab5077770dbe6ec25ab\n"
    },
    {
      "commit": "c752857b9295250eaa62871c8a3ca80bbbf5e68f",
      "tree": "18fb2ce370c3b4989cf8744febf0f20734be920a",
      "parents": [
        "3b138748f7f9749561e4ac6018beddbb501d10f6"
      ],
      "author": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Fri Mar 22 21:37:01 2024 +0000"
      },
      "committer": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Tue Mar 26 21:47:04 2024 +0000"
      },
      "message": "NVMeController: add States of Enabled/Disabled\n\nUsing the state variable instead of nvmeCtrl ptr as indication for\ncontroller state.\n\nThe most important reason is the nvmeCtrl is retrieved from controller\nlist (via MI data structure or NVMe Admin). That controller list is\nretrievable as long as the subsystem is functional, regardless of the\nactual controller status (online/offline/enable/shutdown). That is why\nthe nvmeCtrl ptr allocated in the constructor of NVMeController class\nand binding its lifetime to the class.\n\nThus we need an additional state to indicate controller\u0027s functionality\nlife cycle.\n\nCurrently, the state machine has:\n  * Enabled: fully initialized and ready to serve the external client\n    from DBus.\n  * Disabled: detected from subsystem but functionally not ready to\n    serve.\n\nAs for now, the controller is only set to Disabled during the shutdown\nprocess, which is synchronized to the previous behavior.\n\nSoon, it will also been used for the initialization process to prevent\nthe anxious clients from early interfere.\n\nGoogle-Bug-Id: 326355507\nSigned-off-by: Hao Jiang \u003cjianghao@google.com\u003e\nChange-Id: I1afd8e4e1bf1561fde1ae8957668fdf3511c21f0\n"
    },
    {
      "commit": "3b138748f7f9749561e4ac6018beddbb501d10f6",
      "tree": "c6ea95a9a06f193d8e64ca323ce015c0ca802560",
      "parents": [
        "0e90932e867fb591ca68f0ba1cee4d5d39c56d9d"
      ],
      "author": {
        "name": "Andrew Jeffery",
        "email": "andrew@codeconstruct.com.au",
        "time": "Tue Mar 12 12:30:27 2024 +1030"
      },
      "committer": {
        "name": "Muhammad Usama Chaudhry",
        "email": "muhammadusama@google.com",
        "time": "Tue Mar 26 17:05:34 2024 +0000"
      },
      "message": "MctpEndpoint: Integrate remove behavior into MctpdDevice\n\n9498075d1375 (\"Revert \"MctpEndpoint: Introduce StaticEntity container\nclass\"\") outlines the need for a different design-point than we\nset out on in ac513c858a9e (\"MctpEndpoint: Introduce StaticEntity\ncontainer class\"). The latter commit externalised the handling of\nInterfacesRemoved events from the MctpDevice and MctpEndpoint classes\nto use the signal as input to resume polling via a timer invoking\nMctpDevice::setup(). This felt a little untidy at the time, but\nmanageable.\n\nThe improved understanding of the needs that drove the revert above\ntriggered me to reconsider this separation. Better encapsulation\nof behavior is achieved by integrating the handling of endpoint\nInterfacesRemoved signals into MctpDevice. MctpDevice is then\nself-contained with respect to managing the lifecycle of its\nMctpEndpoint. From here we can integrate handling of MctpDevice into\nNVMeSensorMain such that its MctpEndpoint\u0027s remove event callback\ntriggers the required polling.\n\nChange-Id: I7d0d69d7235c19ebfbdef83fe1094719fd82f2fd\nSigned-off-by: Andrew Jeffery \u003candrew@codeconstruct.com.au\u003e\n"
    },
    {
      "commit": "0e90932e867fb591ca68f0ba1cee4d5d39c56d9d",
      "tree": "73d0b159347f97d2a68a5bcaff206b1b2e7e3a51",
      "parents": [
        "6d09d5629a35b9d2de2c029083bb380df5896458"
      ],
      "author": {
        "name": "Andrew Jeffery",
        "email": "andrew@codeconstruct.com.au",
        "time": "Tue Mar 12 13:25:12 2024 +1030"
      },
      "committer": {
        "name": "Muhammad Usama Chaudhry",
        "email": "muhammadusama@google.com",
        "time": "Tue Mar 26 17:05:34 2024 +0000"
      },
      "message": "MctpEndpoint: Describe the device associated with an endpoint\n\nProvide as much context as possible from MctpEndpoint::describe() by\nimplementing it in terms of MctpDevice::describe(). The lifetime of an\nMctpEndpoint is dominated by the lifetime of its associated MctpDevice.\nPass an MctpDevice reference into the generated MctpEndpoint at\nconstruction.\n\nChange-Id: I3313f74d9e897feb2f2ea5c05eeaa6d3049412c0\nSigned-off-by: Andrew Jeffery \u003candrew@codeconstruct.com.au\u003e\n"
    },
    {
      "commit": "6d09d5629a35b9d2de2c029083bb380df5896458",
      "tree": "855343e292495957398ecb097c41751c315a83ac",
      "parents": [
        "ab0d44c46158290779eb4bc94114b854f813a226"
      ],
      "author": {
        "name": "Andrew Jeffery",
        "email": "andrew@codeconstruct.com.au",
        "time": "Tue Mar 12 08:51:53 2024 +1030"
      },
      "committer": {
        "name": "Muhammad Usama Chaudhry",
        "email": "muhammadusama@google.com",
        "time": "Tue Mar 26 17:05:34 2024 +0000"
      },
      "message": "MctpEndpoint: constify describe() for Mctp{Device,Endpoint}\n\ndescribe() doesn\u0027t mutate its instance so make it available in contexts\nwhere the object is const.\n\nChange-Id: Id74d98b7fc199dead87c5dc2ee7a659598cad763\nSigned-off-by: Andrew Jeffery \u003candrew@codeconstruct.com.au\u003e\n"
    },
    {
      "commit": "ab0d44c46158290779eb4bc94114b854f813a226",
      "tree": "908a378f5af92c5d106294d690862cda00057b36",
      "parents": [
        "86a780b2639b6d5a3c4ef66997d145a968a9bc0f"
      ],
      "author": {
        "name": "Andrew Jeffery",
        "email": "andrew@codeconstruct.com.au",
        "time": "Thu Mar 07 16:12:12 2024 +1030"
      },
      "committer": {
        "name": "Muhammad Usama Chaudhry",
        "email": "muhammadusama@google.com",
        "time": "Tue Mar 26 17:05:34 2024 +0000"
      },
      "message": "MctpEndpoint: Define virtual destructors for abstract classes\n\nAddress an oversight in 92b17d1966e6 (\"Add MctpEndpoint sources for\nhandling endpoint operations\").\n\nChange-Id: Icf9eee1897ba647da0b9818709f389e5f2ae06a1\nSigned-off-by: Andrew Jeffery \u003candrew@codeconstruct.com.au\u003e\n"
    },
    {
      "commit": "86a780b2639b6d5a3c4ef66997d145a968a9bc0f",
      "tree": "1865e458d7a6f997b60886fde20c2b2fbe819d5c",
      "parents": [
        "a8662b60a855ef647916448963c774ac96a81889"
      ],
      "author": {
        "name": "Andrew Jeffery",
        "email": "andrew@codeconstruct.com.au",
        "time": "Tue Mar 12 12:31:33 2024 +1030"
      },
      "committer": {
        "name": "Muhammad Usama Chaudhry",
        "email": "muhammadusama@google.com",
        "time": "Mon Mar 25 21:53:42 2024 +0000"
      },
      "message": "Revert \"MctpEndpoint: Introduce StaticEntity container class\"\n\nThis reverts commit ac513c858a9efaf28f040c641bdd287d6f942221.\n\nStaticEntity was motivated by the expectation that the lifetime of an\nNVMeSubsystem instance would be bounded by the lifetime of its\nassociated MCTP endpoint. However, that design point is contrary to\nconsumer needs as inventory data is exposed by the NVMeSubsystem\nimplementation.\n\nInstead, the lifetime of an NVMeSubsystem instance must remain related\nto the presence of its EM configuration (which is in-turn bounded by the\npresence of the FRU EEPROM describing it). The lifecycle of its MCTP\nendpoint should drive start() and stop() events on the NVMeSubsystem\ninstance instead. This ensures that inventory data exposed by the\nNVMeSubsystem implementation remains available for query even in the\nabsence of the endpoint with which the subsystem communicates.\n\nChange-Id: I9cd560d04de1825327cddaafa3818fee7b42634e\nSigned-off-by: Andrew Jeffery \u003candrew@codeconstruct.com.au\u003e\n"
    },
    {
      "commit": "a8662b60a855ef647916448963c774ac96a81889",
      "tree": "274ca76bc885d73a257c1021c22b2e70329050dc",
      "parents": [
        "eecb5317186eed6b00838a33679c33a2f0e42567"
      ],
      "author": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Wed Dec 27 22:45:04 2023 +0000"
      },
      "committer": {
        "name": "Hao Jiang",
        "email": "jianghao@google.com",
        "time": "Thu Mar 21 20:27:38 2024 +0000"
      },
      "message": "NVMeSubsys: print error when Drive is unfunctional\n\nPrinted the error msg when the NVMe device returns Drive Unfunctional or\nDrive Not Ready status to nvmed. Thus the log will have a clue that the\nsubsystem will transit into stop status.\n\nSigned-off-by: Hao Jiang \u003cjianghao@google.com\u003e\nChange-Id: Ia28413505102a6761cfcae5ca277a44801e9413e\n"
    },
    {
      "commit": "eecb5317186eed6b00838a33679c33a2f0e42567",
      "tree": "a0c53e852d94e6733c3913263c15f52833247f93",
      "parents": [
        "ac513c858a9efaf28f040c641bdd287d6f942221"
      ],
      "author": {
        "name": "Andrew Jeffery",
        "email": "andrew@codeconstruct.com.au",
        "time": "Mon Jan 08 16:08:29 2024 +1030"
      },
      "committer": {
        "name": "Muhammad Usama Chaudhry",
        "email": "muhammadusama@google.com",
        "time": "Mon Mar 04 19:36:38 2024 +0000"
      },
      "message": "NVMeMi: Flush pending operations before nvme_mi_close()\n\nHolding `mctpMtx` serializes actions on `nvmeEP` between the main thread\nand jobs posted to the queue of the NVMeMiWorker thread. Releasing\n`mctpMtx` on the main thread allows jobs to progress in the worker\nthread, which takes the lock over each job. On release, jobs in the\nworker thread\u0027s queue may access invalid memory if `nvmeEP` is closed\nunder `mctpMtx` on the main thread.\n\nInstead, defer `nvme_mi_close()` via `flushOperations()` ensure nvmeEP\u0027s\nassociated memory remains valid for already queued jobs.\n\nPreviously `nvme_mi_close()` via `NVMeMi::stop()` was unlikely as\nwe lacked support for a full NVMeMi lifecycle. With the introduction\nof support for endpoint recovery we bind the NVMeMi lifetime to the\nlifetime of the endpoint object exposed by `mctpd`, making its existence\nmuch more dynamic and more likely to expose issues on destruction.\n\nOn that subject, `NVMeMi::stop()` was previously called by the NVMeMi\ndestructor. As we\u0027re deferring the update to member state in `stop()`,\nimplementing the destructor this way is no-longer valid: Attempting to\ncapture a `NVMeMi::shared_from_this()` reference in the job\u0027s lambda\nwill throw a `std::bad_weak_ptr`.\n\nIf the destructor is executing it must be the case that the last shared\nreference to the NVMeMi instance has been dropped. As jobs enqueued\nin the worker all capture an `NVMeMi::shared_from_this()` reference,\nexecution of the destructor implies that no relevant jobs remain in the\nworker\u0027s queue. Further, as the destructor is running there\u0027s no need to\nupdate other state of the instance, as the instance reaches the end of\nits lifetime at the end of the execution of the destructor.\n\nGiven that, reimplement the destructor as an direct (not deferred)\ninvocation of `nvme_mi_close(nvmeEP)`.\n\nChange-Id: Iadf8eefbda91293d4321d96e14e3054372d35b0f\nSigned-off-by: Andrew Jeffery \u003candrew@codeconstruct.com.au\u003e\n"
    }
  ],
  "next": "ac513c858a9efaf28f040c641bdd287d6f942221"
}
