#include <linux/kernel.h>
#include <linux/notifier.h>
#include <linux/netdevice.h>
#include <linux/etherdevice.h>
#include <linux/if_bridge.h>
#include <linux/workqueue.h>
#include <linux/if_vlan.h>
#include <linux/rtnetlink.h>
#include <net/switchdev.h>
static LIST_HEAD(deferred);
static DEFINE_SPINLOCK(deferred_lock);
typedef void switchdev_deferred_func_t(struct net_device *dev,
struct switchdev_deferred_item {
switchdev_deferred_func_t *func;
static struct switchdev_deferred_item *switchdev_deferred_dequeue(void)
struct switchdev_deferred_item *dfitem;
spin_lock_bh(&deferred_lock);
if (list_empty(&deferred)) {
dfitem = list_first_entry(&deferred,
struct switchdev_deferred_item, list);
spin_unlock_bh(&deferred_lock);
void switchdev_deferred_process(void)