* they would have formed disjoint trees (different "dsa,member" values).
  */
 int dsa_tree_change_tag_proto(struct dsa_switch_tree *dst,
-                             struct net_device *master,
                              const struct dsa_device_ops *tag_ops,
                              const struct dsa_device_ops *old_tag_ops)
 {
         * attempts to change the tagging protocol. If we ever lift the IFF_UP
         * restriction, there needs to be another mutex which serializes this.
         */
-       if (master->flags & IFF_UP)
-               goto out_unlock;
-
        list_for_each_entry(dp, &dst->ports, list) {
-               if (!dsa_port_is_user(dp))
-                       continue;
+               if (dsa_port_is_cpu(dp) && (dp->master->flags & IFF_UP))
+                       goto out_unlock;
 
-               if (dp->slave->flags & IFF_UP)
+               if (dsa_port_is_user(dp) && (dp->slave->flags & IFF_UP))
                        goto out_unlock;
        }
 
 
 int dsa_tree_notify(struct dsa_switch_tree *dst, unsigned long e, void *v);
 int dsa_broadcast(unsigned long e, void *v);
 int dsa_tree_change_tag_proto(struct dsa_switch_tree *dst,
-                             struct net_device *master,
                              const struct dsa_device_ops *tag_ops,
                              const struct dsa_device_ops *old_tag_ops);
 void dsa_tree_master_admin_state_change(struct dsa_switch_tree *dst,
 
                 */
                goto out;
 
-       err = dsa_tree_change_tag_proto(cpu_dp->ds->dst, dev, new_tag_ops,
+       err = dsa_tree_change_tag_proto(cpu_dp->ds->dst, new_tag_ops,
                                        old_tag_ops);
        if (err) {
                /* On failure the old tagger is restored, so we don't need the