diff --git a/recipes-phosphor/sensors/dbus-sensors/0008-psusensor-avoid-crash-by-activate-sensor-twice.patch b/recipes-phosphor/sensors/dbus-sensors/0008-psusensor-avoid-crash-by-activate-sensor-twice.patch
deleted file mode 100644
index 502d35c..0000000
--- a/recipes-phosphor/sensors/dbus-sensors/0008-psusensor-avoid-crash-by-activate-sensor-twice.patch
+++ /dev/null
@@ -1,267 +0,0 @@
-From bb701ef466e3d618c60e7f193e94a539a7bb730b Mon Sep 17 00:00:00 2001
-From: Peter Yin <peter.yin@quantatw.com>
-Date: Tue, 25 Jun 2024 14:57:08 +0800
-Subject: [PATCH] psusensor: avoid crash by activate sensor twice
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Sensor should just only activate or deactivate when power state change.
-
-Simplify powerStateChanged(), just do "sensor->activate()" instead of
-calling "createSensors()".
-
-Also add check in activate(), just return if sensor already activated.
-
-Tested result:
-Do a host power cycle and wait until ostate change to "Standby",
-psusensor is not crushing and PID remain same.
-```
-root@harma:~# systemctl status xyz.openbmc_project.psusensor
-● xyz.openbmc_project.psusensor.service - PSU Sensor
-     Loaded: loaded (/usr/lib/systemd/system/xyz.openbmc_project.psusensor.service; enabled; preset: enabled)
-    Drop-In: /usr/lib/systemd/system/xyz.openbmc_project.psusensor.service.d
-             └─psusensor-wait-host-state-ready.conf
-     Active: active (running) since Mon 2024-02-26 21:42:47 PST; 1min 10s ago
-   Main PID: 13355 (psusensor)
-        CPU: 8.344s
-     CGroup: /system.slice/xyz.openbmc_project.psusensor.service
-             └─13355 /usr/bin/psusensor
-
-Feb 26 21:43:54 harma psusensor[13355]: PSUSubEvent asserted by /sys/class/hwmon/hwmon25/in2_alarm
-Feb 26 21:43:54 harma psusensor[13355]: Failure assert
-Feb 26 21:43:55 harma psusensor[13355]: MB_DIMM_A10_TEMP_C read failed
-Feb 26 21:43:55 harma psusensor[13355]: MB_DIMM_A10_PWR_W read failed
-Feb 26 21:43:55 harma psusensor[13355]: Failure deassert
-Feb 26 21:43:56 harma psusensor[13355]: MB_DIMM_A10_TEMP_C read failed
-Feb 26 21:43:56 harma psusensor[13355]: MB_DIMM_A10_PWR_W read failed
-Feb 26 21:43:56 harma psusensor[13355]: PSUSubEvent asserted by /sys/class/hwmon/hwmon26/in2_alarm
-Feb 26 21:43:56 harma psusensor[13355]: Failure assert
-Feb 26 21:43:57 harma psusensor[13355]: MB_DIMM_A10_TEMP_C read failed
-root@harma:~#
-root@harma:~# obmcutil poweroff
-root@harma:~# sleep 10
-root@harma:~# obmcutil poweron
-root@harma:~# sleep 60
-root@harma:~# obmcutil osstate
-OperatingSystemState: xyz.openbmc_project.State.OperatingSystem.Status.OSStatus.Standby
-root@harma:~#
-root@harma:~# systemctl status xyz.openbmc_project.psusensor
-● xyz.openbmc_project.psusensor.service - PSU Sensor
-     Loaded: loaded (/usr/lib/systemd/system/xyz.openbmc_project.psusensor.service; enabled; preset: enabled)
-    Drop-In: /usr/lib/systemd/system/xyz.openbmc_project.psusensor.service.d
-             └─psusensor-wait-host-state-ready.conf
-     Active: active (running) since Mon 2024-02-26 21:42:47 PST; 3min 41s ago
-   Main PID: 13355 (psusensor)
-        CPU: 22.802s
-     CGroup: /system.slice/xyz.openbmc_project.psusensor.service
-             └─13355 /usr/bin/psusensor
-
-Feb 26 21:46:25 harma psusensor[13355]: MB_DIMM_A10_PWR_W read failed
-Feb 26 21:46:26 harma psusensor[13355]: PSUSubEvent asserted by /sys/class/hwmon/hwmon34/in2_alarm
-Feb 26 21:46:26 harma psusensor[13355]: Failure assert
-Feb 26 21:46:26 harma psusensor[13355]: MB_DIMM_A10_TEMP_C read failed
-Feb 26 21:46:26 harma psusensor[13355]: MB_DIMM_A10_PWR_W read failed
-Feb 26 21:46:26 harma psusensor[13355]: Failure deassert
-Feb 26 21:46:27 harma psusensor[13355]: MB_DIMM_A10_TEMP_C read failed
-Feb 26 21:46:27 harma psusensor[13355]: MB_DIMM_A10_PWR_W read failed
-Feb 26 21:46:27 harma psusensor[13355]: PSUSubEvent asserted by /sys/class/hwmon/hwmon25/in2_alarm
-Feb 26 21:46:27 harma psusensor[13355]: Failure assert
-```
-
-Change-Id: I3fb55c0f10ad26472470bb783ea5df5498a4c1a8
-Signed-off-by: Potin Lai <potin.lai@quantatw.com>
-Signed-off-by: Peter Yin <peter.yin@quantatw.com>
-(cherry picked from commit 18e5cbdba545fbec50214f47c48c4c8da87dae45)
-Patch Tracking Bug: b/388581787
-Upstream info / review: https://gerrit.openbmc.org/c/openbmc/dbus-sensors/+/69162
-Upstream-Status: Submitted
-Justification: In review upstream
-Signed-off-by: Benjamin Fair <benjaminfair@google.com>
----
- src/PSUSensor.cpp     |  8 ++----
- src/PSUSensor.hpp     |  3 +--
- src/PSUSensorMain.cpp | 61 ++++++++++++++++++++-----------------------
- 3 files changed, 31 insertions(+), 41 deletions(-)
-
-diff --git a/src/PSUSensor.cpp b/src/PSUSensor.cpp
-index 50b8d42..c3ec8de 100644
---- a/src/PSUSensor.cpp
-+++ b/src/PSUSensor.cpp
-@@ -114,16 +114,14 @@ bool PSUSensor::isActive()
-     return inputDev.is_open();
- }
- 
--void PSUSensor::activate(const std::string& newPath,
--                         const std::shared_ptr<I2CDevice>& newI2CDevice)
-+void PSUSensor::activate()
- {
-     if (isActive())
-     {
-         // Avoid activating an active sensor
-         return;
-     }
--    path = newPath;
--    i2cDevice = newI2CDevice;
-+
-     inputDev.open(path, boost::asio::random_access_file::read_only);
-     markAvailable(true);
-     setupRead();
-@@ -135,8 +133,6 @@ void PSUSensor::deactivate()
-     // close the input dev to cancel async operations
-     inputDev.close();
-     waitTimer.cancel();
--    i2cDevice = nullptr;
--    path = "";
- }
- 
- void PSUSensor::setupRead(void)
-diff --git a/src/PSUSensor.hpp b/src/PSUSensor.hpp
-index b49235f..5721ada 100644
---- a/src/PSUSensor.hpp
-+++ b/src/PSUSensor.hpp
-@@ -28,8 +28,7 @@ class PSUSensor : public Sensor, public std::enable_shared_from_this<PSUSensor>
-               const std::shared_ptr<I2CDevice>& i2cDevice);
-     ~PSUSensor() override;
-     void setupRead(void);
--    void activate(const std::string& newPath,
--                  const std::shared_ptr<I2CDevice>& newI2CDevice);
-+    void activate(void);
-     void deactivate(void);
-     bool isActive(void);
- 
-diff --git a/src/PSUSensorMain.cpp b/src/PSUSensorMain.cpp
-index d6bc84c..243f27f 100644
---- a/src/PSUSensorMain.cpp
-+++ b/src/PSUSensorMain.cpp
-@@ -289,8 +289,7 @@ static void createSensorsCallback(
-     std::shared_ptr<sdbusplus::asio::connection>& dbusConnection,
-     const ManagedObjectType& sensorConfigs,
-     const std::shared_ptr<boost::container::flat_set<std::string>>&
--        sensorsChanged,
--    bool activateOnly)
-+        sensorsChanged)
- {
-     int numCreated = 0;
-     bool firstScan = sensorsChanged == nullptr;
-@@ -441,10 +440,6 @@ static void createSensorsCallback(
-         std::shared_ptr<I2CDevice> i2cDev;
-         if (findI2CDev != devices.end())
-         {
--            if (activateOnly && !findI2CDev->second.second)
--            {
--                continue;
--            }
-             i2cDev = findI2CDev->second.first;
-         }
- 
-@@ -916,18 +911,16 @@ static void createSensorsCallback(
-                           << "\"\n";
-             }
-             // destruct existing one first if already created
--
--            auto& sensor = sensors[sensorName];
--            if (!activateOnly)
--            {
--                sensor = nullptr;
--            }
--
--            if (sensor != nullptr)
--            {
--                sensor->activate(sensorPathStr, i2cDev);
--            }
--            else
-+            sensors[sensorName] = std::make_shared<PSUSensor>(
-+                sensorPathStr, sensorType, objectServer, dbusConnection, io,
-+                sensorName, std::move(sensorThresholds), *interfacePath,
-+                readState, findSensorUnit->second, factor,
-+                psuProperty->maxReading, psuProperty->minReading,
-+                psuProperty->sensorOffset, labelHead, thresholdConfSize,
-+                pollRate, i2cDev);
-+            sensors[sensorName]->setupRead();
-+            ++numCreated;
-+            if constexpr (debug)
-             {
-                 sensors[sensorName] = std::make_shared<PSUSensor>(
-                     sensorPathStr, sensorType, objectServer, dbusConnection, io,
-@@ -1035,14 +1028,13 @@ void createSensors(
-     boost::asio::io_context& io, sdbusplus::asio::object_server& objectServer,
-     std::shared_ptr<sdbusplus::asio::connection>& dbusConnection,
-     const std::shared_ptr<boost::container::flat_set<std::string>>&
--        sensorsChanged,
--    bool activateOnly)
-+        sensorsChanged)
- {
-     auto getter = std::make_shared<GetSensorConfiguration>(
--        dbusConnection, [&io, &objectServer, &dbusConnection, sensorsChanged,
--                         activateOnly](const ManagedObjectType& sensorConfigs) {
-+        dbusConnection, [&io, &objectServer, &dbusConnection, sensorsChanged](
-+                         const ManagedObjectType& sensorConfigs) {
-         createSensorsCallback(io, objectServer, dbusConnection, sensorConfigs,
--                              sensorsChanged, activateOnly);
-+                              sensorsChanged);
-     });
-     std::vector<std::string> types(sensorTypes.size());
-     for (const auto& [type, dt] : sensorTypes)
-@@ -1184,13 +1176,17 @@ void propertyInitialize(void)
- static void powerStateChanged(
-     PowerState type, bool newState,
-     boost::container::flat_map<std::string, std::shared_ptr<PSUSensor>>&
--        sensors,
--    boost::asio::io_context& io, sdbusplus::asio::object_server& objectServer,
--    std::shared_ptr<sdbusplus::asio::connection>& dbusConnection)
-+        sensors)
- {
-     if (newState)
-     {
--        createSensors(io, objectServer, dbusConnection, nullptr, true);
-+        for (auto& [path, sensor] : sensors)
-+        {
-+            if (sensor != nullptr && sensor->readState == type)
-+            {
-+                sensor->activate();
-+            }
-+        }
-     }
-     else
-     {
-@@ -1218,15 +1214,14 @@ int main()
- 
-     propertyInitialize();
- 
--    auto powerCallBack = [&io, &objectServer, &systemBus](PowerState type,
--                                                          bool state) {
--        powerStateChanged(type, state, sensors, io, objectServer, systemBus);
-+    auto powerCallBack = [](PowerState type, bool state) {
-+        powerStateChanged(type, state, sensors);
-     };
- 
-     setupPowerMatchCallback(systemBus, powerCallBack);
- 
-     boost::asio::post(io, [&]() {
--        createSensors(io, objectServer, systemBus, nullptr, false);
-+        createSensors(io, objectServer, systemBus, nullptr);
-     });
-     boost::asio::steady_timer filterTimer(io);
-     std::function<void(sdbusplus::message_t&)> eventHandler =
-@@ -1247,7 +1242,7 @@ int main()
-             {
-                 std::cerr << "timer error\n";
-             }
--            createSensors(io, objectServer, systemBus, sensorsChanged, false);
-+            createSensors(io, objectServer, systemBus, sensorsChanged);
-         });
-     };
- 
-@@ -1302,7 +1297,7 @@ int main()
-                 std::cerr << "timer error\n";
-                 return;
-             }
--            createSensors(io, objectServer, systemBus, nullptr, false);
-+            createSensors(io, objectServer, systemBus, nullptr);
-         });
-     };
- 
--- 
-2.47.1.613.gc27f4b7a9f-goog
-
diff --git a/recipes-phosphor/sensors/dbus-sensors_%.bbappend b/recipes-phosphor/sensors/dbus-sensors_%.bbappend
index e532158..e621d30 100644
--- a/recipes-phosphor/sensors/dbus-sensors_%.bbappend
+++ b/recipes-phosphor/sensors/dbus-sensors_%.bbappend
@@ -8,7 +8,6 @@
   file://0005-dbus-sensors-Associate-CPU-inventory-with-CPU-sensor.patch \
   file://0006-cpusensor-Associate-DIMM-inventory-with-sensors.patch \
   file://0007-psusensor-Check-active-state-before-activation.patch \
-  file://0008-psusensor-avoid-crash-by-activate-sensor-twice.patch \
   file://0009-psusensor-DeviceMgmt-fix-device-not-found.patch \
   file://0101-RedfishSensor-It-reads-Redfish-sensors-to-D-Bus.patch \
   file://0102-RedfishSensor-Network-error-handling-teardown.patch \
