void *type_dev;
        struct devlink_port_attrs attrs;
        u8 attrs_set:1,
-          switch_port:1;
+          switch_port:1,
+          registered:1;
        struct delayed_work type_warn_dw;
        struct list_head reporter_list;
        struct mutex reporters_lock; /* Protects reporter_list */
 
 }
 
 #define ASSERT_DEVLINK_PORT_REGISTERED(devlink_port)                           \
-       WARN_ON_ONCE(!(devlink_port)->devlink)
+       WARN_ON_ONCE(!(devlink_port)->registered)
 #define ASSERT_DEVLINK_PORT_NOT_REGISTERED(devlink_port)                       \
-       WARN_ON_ONCE((devlink_port)->devlink)
+       WARN_ON_ONCE((devlink_port)->registered)
 
 static struct devlink_port *devlink_port_get_by_index(struct devlink *devlink,
                                                      unsigned int port_index)
 
        ASSERT_DEVLINK_PORT_NOT_REGISTERED(devlink_port);
 
+       devlink_port->registered = true;
        devlink_port->devlink = devlink;
        devlink_port->index = port_index;
        spin_lock_init(&devlink_port->type_lock);
        WARN_ON(!list_empty(&devlink_port->reporter_list));
        WARN_ON(!list_empty(&devlink_port->region_list));
        mutex_destroy(&devlink_port->reporters_lock);
+       devlink_port->registered = false;
 }
 EXPORT_SYMBOL_GPL(devl_port_unregister);