#include <linux/mutex.h>
 #include <linux/rcupdate.h>
 #include <linux/slab.h>
+#include <linux/workqueue.h>
 #include <asm/byteorder.h>
 #include <net/devlink.h>
 
 
 static struct dentry *mlxsw_core_dbg_root;
 
+static struct workqueue_struct *mlxsw_wq;
+
 struct mlxsw_core_pcpu_stats {
        u64                     trap_rx_packets[MLXSW_TRAP_ID_MAX];
        u64                     trap_rx_bytes[MLXSW_TRAP_ID_MAX];
 }
 EXPORT_SYMBOL(mlxsw_cmd_exec);
 
+int mlxsw_core_schedule_dw(struct delayed_work *dwork, unsigned long delay)
+{
+       return queue_delayed_work(mlxsw_wq, dwork, delay);
+}
+EXPORT_SYMBOL(mlxsw_core_schedule_dw);
+
 static int __init mlxsw_core_module_init(void)
 {
-       mlxsw_core_dbg_root = debugfs_create_dir(mlxsw_core_driver_name, NULL);
-       if (!mlxsw_core_dbg_root)
+       int err;
+
+       mlxsw_wq = create_workqueue(mlxsw_core_driver_name);
+       if (!mlxsw_wq)
                return -ENOMEM;
+       mlxsw_core_dbg_root = debugfs_create_dir(mlxsw_core_driver_name, NULL);
+       if (!mlxsw_core_dbg_root) {
+               err = -ENOMEM;
+               goto err_debugfs_create_dir;
+       }
        return 0;
+
+err_debugfs_create_dir:
+       destroy_workqueue(mlxsw_wq);
+       return err;
 }
 
 static void __exit mlxsw_core_module_exit(void)
 {
        debugfs_remove_recursive(mlxsw_core_dbg_root);
+       destroy_workqueue(mlxsw_wq);
 }
 
 module_init(mlxsw_core_module_init);
 
 #include <linux/gfp.h>
 #include <linux/types.h>
 #include <linux/skbuff.h>
+#include <linux/workqueue.h>
 #include <net/devlink.h>
 
 #include "trap.h"
                         struct net_device *dev, bool split, u32 split_group);
 void mlxsw_core_port_fini(struct mlxsw_core_port *mlxsw_core_port);
 
+int mlxsw_core_schedule_dw(struct delayed_work *dwork, unsigned long delay);
+
 #define MLXSW_CONFIG_PROFILE_SWID_COUNT 8
 
 struct mlxsw_swid_config {
 
 
 static void mlxsw_sp_fdb_notify_work_schedule(struct mlxsw_sp *mlxsw_sp)
 {
-       schedule_delayed_work(&mlxsw_sp->fdb_notify.dw,
-                             msecs_to_jiffies(mlxsw_sp->fdb_notify.interval));
+       mlxsw_core_schedule_dw(&mlxsw_sp->fdb_notify.dw,
+                              msecs_to_jiffies(mlxsw_sp->fdb_notify.interval));
 }
 
 static void mlxsw_sp_fdb_notify_work(struct work_struct *work)