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