};
 
 struct devlink_port_attrs {
-       u8 split:1,
-          switch_port:1;
+       u8 split:1;
        enum devlink_port_flavour flavour;
        struct netdev_phys_item_id switch_id;
        union {
        enum devlink_port_type desired_type;
        void *type_dev;
        struct devlink_port_attrs attrs;
-       u8 attrs_set:1;
+       u8 attrs_set:1,
+          switch_port:1;
        struct delayed_work type_warn_dw;
 };
 
 
        devlink_port->attrs_set = true;
        attrs->flavour = flavour;
        if (switch_id) {
-               attrs->switch_port = true;
+               devlink_port->switch_port = true;
                if (WARN_ON(switch_id_len > MAX_PHYS_ITEM_ID_LEN))
                        switch_id_len = MAX_PHYS_ITEM_ID_LEN;
                memcpy(attrs->switch_id.id, switch_id, switch_id_len);
                attrs->switch_id.id_len = switch_id_len;
        } else {
-               attrs->switch_port = false;
+               devlink_port->switch_port = false;
        }
        return 0;
 }
         * any devlink lock as only permanent values are accessed.
         */
        devlink_port = netdev_to_devlink_port(dev);
-       if (!devlink_port || !devlink_port->attrs.switch_port)
+       if (!devlink_port || !devlink_port->switch_port)
                return -EOPNOTSUPP;
 
        memcpy(ppid, &devlink_port->attrs.switch_id, sizeof(*ppid));