nvmesensor: fix crash caused by passthruInterface during host reboot

During host power cycle or reboot, nvmesensor will crash due to the
exception `org.freedesktop.DBus.Error.FileExists: File exists` and
restart.

The original patch forgot to remove the passthruInterface in the
destructor function of NVMeControllerEnabled class. When device
warm-reboot, nvmesensor will delete and recreate NVMeControllerEnabled,
thus triggering this FileExists DBus error.

Tested:
Before the fix, nvmesensor will crash when `ipmitool chassis power cycle`
After the fix, nvmesensor doesn't crash when `ipmitool chassis power cycle`

Google-Bug-Id: 301320438
Change-Id: I970643b54a75d6160f9f873ca501bb69dc64d626
Signed-off-by: Jinliang Wang <jinliangw@google.com>
diff --git a/recipes-phosphor/sensors/dbus-sensors/0002-nvmesensor-Manually-implement-StorageController.patch b/recipes-phosphor/sensors/dbus-sensors/0002-nvmesensor-Manually-implement-StorageController.patch
index 6ad60e2..3b0ae40 100644
--- a/recipes-phosphor/sensors/dbus-sensors/0002-nvmesensor-Manually-implement-StorageController.patch
+++ b/recipes-phosphor/sensors/dbus-sensors/0002-nvmesensor-Manually-implement-StorageController.patch
@@ -1,20 +1,22 @@
-From cc906069a6e78d5c2106ac3318c998a5547067bc Mon Sep 17 00:00:00 2001
+From 0afe31b95ed8b3112e441b82164ac24cefb0083f Mon Sep 17 00:00:00 2001
 From: Matt Johnston <matt@codeconstruct.com.au>
 Date: Thu, 20 Apr 2023 16:13:50 +0800
-Subject: [PATCH 02/16] nvmesensor: Manually implement StorageController
+Subject: [PATCH] nvmesensor: Manually implement StorageController
 
 To allow using async methods
 
 Signed-off-by: Matt Johnston <matt@codeconstruct.com.au>
 Change-Id: Idf32130353305c23177b6183000509841e3d7db6
 (cherry picked from commit ee8f227955ea376c633b3da83242ce650e4a1cba)
+
+%% original patch: 0002-nvmesensor-Manually-implement-StorageController.patch
 ---
  src/NVMeController.cpp | 20 ++++++++++++++------
  src/NVMeController.hpp |  7 +++++--
  2 files changed, 19 insertions(+), 8 deletions(-)
 
 diff --git a/src/NVMeController.cpp b/src/NVMeController.cpp
-index 765844d..09e0bd7 100644
+index b7114fb..28dd3a9 100644
 --- a/src/NVMeController.cpp
 +++ b/src/NVMeController.cpp
 @@ -44,16 +44,16 @@ NVMeControllerEnabled::NVMeControllerEnabled(
@@ -56,9 +58,9 @@
      NVMeAdmin::emit_added();
  }
  
-@@ -309,7 +316,8 @@ NVMeControllerEnabled::~NVMeControllerEnabled()
- {
+@@ -310,7 +317,8 @@ NVMeControllerEnabled::~NVMeControllerEnabled()
      objServer.remove_interface(securityInterface);
+     objServer.remove_interface(passthruInterface);
      NVMeAdmin::emit_removed();
 -    StorageController::emit_removed();
 +    // StorageController::emit_removed();
@@ -92,5 +94,5 @@
      public std::enable_shared_from_this<NVMeControllerEnabled>
  
 -- 
-2.42.0.283.g2d96d420d3-goog
+2.42.0.515.g380fc7ccd1-goog
 
diff --git a/recipes-phosphor/sensors/dbus-sensors/0016-NVMe-Add-Serial-Model-Firmware-Version.patch b/recipes-phosphor/sensors/dbus-sensors/0016-NVMe-Add-Serial-Model-Firmware-Version.patch
index 2103616..e1b55ae 100644
--- a/recipes-phosphor/sensors/dbus-sensors/0016-NVMe-Add-Serial-Model-Firmware-Version.patch
+++ b/recipes-phosphor/sensors/dbus-sensors/0016-NVMe-Add-Serial-Model-Firmware-Version.patch
@@ -1,11 +1,13 @@
-From c8e70b8c830ce63548348ce9436f1286f6e31566 Mon Sep 17 00:00:00 2001
+From 95273ff72b7825131778917a486879732b644bd0 Mon Sep 17 00:00:00 2001
 From: Matt Johnston <matt@codeconstruct.com.au>
 Date: Fri, 19 May 2023 17:12:03 +0800
-Subject: [PATCH 16/16] NVMe: Add Serial, Model, Firmware Version
+Subject: [PATCH] NVMe: Add Serial, Model, Firmware Version
 
 Signed-off-by: Matt Johnston <matt@codeconstruct.com.au>
 Change-Id: I8532aa9841f1cc331decd5581b3e4b9dc5f2dd5b
 (cherry picked from commit d480c4b1222c97e79dc4875581f59c01c0bed949)
+
+%% original patch: 0016-NVMe-Add-Serial-Model-Firmware-Version.patch
 ---
  src/NVMeController.cpp | 11 +++++++----
  src/NVMeController.hpp |  9 +++++++++
@@ -17,7 +19,7 @@
  7 files changed, 86 insertions(+), 5 deletions(-)
 
 diff --git a/src/NVMeController.cpp b/src/NVMeController.cpp
-index 3539a9d..49e4035 100644
+index 05df964..dbe62e5 100644
 --- a/src/NVMeController.cpp
 +++ b/src/NVMeController.cpp
 @@ -29,11 +29,10 @@ std::shared_ptr<NVMeControllerEnabled>
@@ -44,10 +46,10 @@
  }
  
  void NVMeControllerEnabled::start(
-@@ -337,6 +338,8 @@ void NVMeControllerEnabled::firmwareCommitAsync(uint8_t commitAction,
- NVMeControllerEnabled::~NVMeControllerEnabled()
+@@ -338,6 +339,8 @@ NVMeControllerEnabled::~NVMeControllerEnabled()
  {
      objServer.remove_interface(securityInterface);
+     objServer.remove_interface(passthruInterface);
 +    SoftwareVersion::emit_removed();
 +    SoftwareExtVersion::emit_removed();
      NVMeAdmin::emit_removed();
@@ -236,5 +238,5 @@
 +    return s;
 +}
 -- 
-2.42.0.283.g2d96d420d3-goog
+2.42.0.515.g380fc7ccd1-goog
 
diff --git a/recipes-phosphor/sensors/dbus-sensors/0052-nvmesensor-add-Admin-non-data-command-passthru-DBus-.patch b/recipes-phosphor/sensors/dbus-sensors/0052-nvmesensor-add-Admin-non-data-command-passthru-DBus-.patch
index e071095..65ada87 100644
--- a/recipes-phosphor/sensors/dbus-sensors/0052-nvmesensor-add-Admin-non-data-command-passthru-DBus-.patch
+++ b/recipes-phosphor/sensors/dbus-sensors/0052-nvmesensor-add-Admin-non-data-command-passthru-DBus-.patch
@@ -1,4 +1,4 @@
-From 95a3e7de6ad14af09e87f8b0cbbd68b45d926fbf Mon Sep 17 00:00:00 2001
+From 3bf450c957cea1af200daa0324fde86b8e8e8606 Mon Sep 17 00:00:00 2001
 From: Jinliang Wang <jinliangw@google.com>
 Date: Wed, 30 Aug 2023 15:39:30 -0700
 Subject: [PATCH] nvmesensor: add Admin non data command passthru DBus
@@ -33,19 +33,21 @@
 
 Change-Id: Ibb25ffa0c4bb3c4f675dc9a027b5f86b8022fc11
 Signed-off-by: Jinliang Wang <jinliangw@google.com>
+
+%% original patch: 0052-nvmesensor-add-Admin-non-data-command-passthru-DBus-.patch
 ---
- src/NVMeController.cpp | 68 ++++++++++++++++++++++++++++++++++++++++++
+ src/NVMeController.cpp | 69 ++++++++++++++++++++++++++++++++++++++++++
  src/NVMeController.hpp |  6 ++++
  src/NVMeIntf.hpp       |  8 ++++-
- src/NVMeMi.cpp         | 30 +++++++++++++++++++
+ src/NVMeMi.cpp         | 30 ++++++++++++++++++
  src/NVMeMi.hpp         |  7 +++++
- 5 files changed, 118 insertions(+), 1 deletion(-)
+ 5 files changed, 119 insertions(+), 1 deletion(-)
 
 diff --git a/src/NVMeController.cpp b/src/NVMeController.cpp
-index 215b2e4..6d96417 100644
+index 1297bb4..b0f99a9 100644
 --- a/src/NVMeController.cpp
 +++ b/src/NVMeController.cpp
-@@ -81,6 +81,26 @@ void NVMeControllerEnabled::init()
+@@ -78,6 +78,26 @@ void NVMeControllerEnabled::init()
      assocIntf->register_property("Associations", associations);
      assocIntf->initialize();
  
@@ -72,7 +74,15 @@
  
      securityInterface = objServer.add_interface(
          path, "xyz.openbmc_project.Inventory.Item.StorageControllerSecurity");
-@@ -459,6 +479,54 @@ std::vector<uint8_t> NVMeControllerEnabled::securityReceiveMethod(
+@@ -287,6 +307,7 @@ void NVMeControllerEnabled::firmwareCommitAsync(uint8_t commitAction,
+ NVMeControllerEnabled::~NVMeControllerEnabled()
+ {
+     objServer.remove_interface(securityInterface);
++    objServer.remove_interface(passthruInterface);
+     NVMeAdmin::emit_removed();
+     StorageController::emit_removed();
+ }
+@@ -414,6 +435,54 @@ std::vector<uint8_t> NVMeControllerEnabled::securityReceiveMethod(
      return data;
  }
  
@@ -128,7 +138,7 @@
  {
  
 diff --git a/src/NVMeController.hpp b/src/NVMeController.hpp
-index fc798dc..a3522b2 100644
+index 538d9de..8c64883 100644
 --- a/src/NVMeController.hpp
 +++ b/src/NVMeController.hpp
 @@ -75,6 +75,7 @@ class NVMeController
@@ -139,7 +149,7 @@
  
      std::shared_ptr<NVMeMiIntf> nvmeIntf;
      nvme_mi_ctrl_t nvmeCtrl;
-@@ -200,4 +201,9 @@ class NVMeControllerEnabled :
+@@ -186,4 +187,9 @@ class NVMeControllerEnabled :
                                                 uint16_t proto_specific,
                                                 uint32_t transfer_length);
  
@@ -150,10 +160,10 @@
 +                              uint32_t cdw13, uint32_t cdw14, uint32_t cdw15);
  };
 diff --git a/src/NVMeIntf.hpp b/src/NVMeIntf.hpp
-index 7917748..20ffda7 100644
+index 3a2fa32..7751fac 100644
 --- a/src/NVMeIntf.hpp
 +++ b/src/NVMeIntf.hpp
-@@ -198,7 +198,13 @@ class NVMeMiIntf
+@@ -194,7 +194,13 @@ class NVMeMiIntf
          uint32_t transfer_length,
          std::function<void(const std::error_code&, int nvme_status,
                             const std::span<uint8_t> data)>&& cb) = 0;
@@ -169,10 +179,10 @@
       * adminXfer() -  Raw admin transfer interface.
       * @ctrl: controller to send the admin command to
 diff --git a/src/NVMeMi.cpp b/src/NVMeMi.cpp
-index 74d6e27..a8b56ed 100644
+index 60595e8..695bec8 100644
 --- a/src/NVMeMi.cpp
 +++ b/src/NVMeMi.cpp
-@@ -1255,3 +1255,33 @@ void NVMeMi::adminSecurityReceive(
+@@ -1138,3 +1138,33 @@ void NVMeMi::adminSecurityReceive(
          io.post([cb{std::move(cb)}, post_err]() { cb(post_err, -1, {}); });
      }
  }
@@ -207,10 +217,10 @@
 +    }
 +}
 diff --git a/src/NVMeMi.hpp b/src/NVMeMi.hpp
-index 054382f..59b48d4 100644
+index 0a86dcf..b8b6c45 100644
 --- a/src/NVMeMi.hpp
 +++ b/src/NVMeMi.hpp
-@@ -63,6 +63,13 @@ class NVMeMi : public NVMeMiIntf, public std::enable_shared_from_this<NVMeMi>
+@@ -59,6 +59,13 @@ class NVMeMi : public NVMeMiIntf, public std::enable_shared_from_this<NVMeMi>
          std::function<void(const std::error_code&, int nvme_status,
                             std::span<uint8_t> data)>&& cb) override;
  
@@ -225,5 +235,5 @@
      // the transfer size for nvme mi messages.
      // define in github.com/linux-nvme/libnvme/blob/master/src/nvme/mi.c
 -- 
-2.42.0.283.g2d96d420d3-goog
+2.42.0.515.g380fc7ccd1-goog