]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
net: macb: Add shutdown operation support
authorAbin Joseph <abin.joseph@amd.com>
Tue, 10 Jun 2025 11:41:11 +0000 (17:11 +0530)
committerJakub Kicinski <kuba@kernel.org>
Thu, 12 Jun 2025 00:39:56 +0000 (17:39 -0700)
Implement the shutdown hook to ensure clean and complete deactivation of
MACB controller. The shutdown sequence is protected with 'rtnl_lock()'
to serialize access and prevent race conditions while detaching and
closing the network device. This ensure a safe transition when the Kexec
utility calls the shutdown hook, facilitating seamless loading and
booting of a new kernel from the currently running one.

Signed-off-by: Abin Joseph <abin.joseph@amd.com>
Link: https://patch.msgid.link/20250610114111.1708614-1-abin.joseph@amd.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/cadence/macb_main.c

index d1f1ae5ea161ccfc5b039ef233f7db46471187af..53aaf6b08e39a45bde5af61a05fb2b9fd653b2e7 100644 (file)
@@ -5654,6 +5654,20 @@ static int __maybe_unused macb_runtime_resume(struct device *dev)
        return 0;
 }
 
+static void macb_shutdown(struct platform_device *pdev)
+{
+       struct net_device *netdev = platform_get_drvdata(pdev);
+
+       rtnl_lock();
+
+       if (netif_running(netdev))
+               dev_close(netdev);
+
+       netif_device_detach(netdev);
+
+       rtnl_unlock();
+}
+
 static const struct dev_pm_ops macb_pm_ops = {
        SET_SYSTEM_SLEEP_PM_OPS(macb_suspend, macb_resume)
        SET_RUNTIME_PM_OPS(macb_runtime_suspend, macb_runtime_resume, NULL)
@@ -5667,6 +5681,7 @@ static struct platform_driver macb_driver = {
                .of_match_table = of_match_ptr(macb_dt_ids),
                .pm     = &macb_pm_ops,
        },
+       .shutdown       = macb_shutdown,
 };
 
 module_platform_driver(macb_driver);