src_root->subsys_mask &= ~(1 << ssid);
                src_root->cgrp.child_subsys_mask &= ~(1 << ssid);
 
+               /* default hierarchy doesn't enable controllers by default */
                dst_root->subsys_mask |= 1 << ssid;
-               dst_root->cgrp.child_subsys_mask |= 1 << ssid;
+               if (dst_root != &cgrp_dfl_root)
+                       dst_root->cgrp.child_subsys_mask |= 1 << ssid;
 
                if (ss->bind)
                        ss->bind(css);
        struct cgroup_subsys *ss;
        struct kernfs_node *kn;
 
-       /*
-        * XXX: The default hierarchy isn't fully implemented yet.  Block
-        * !root cgroup creation on it for now.
-        */
-       if (root == &cgrp_dfl_root)
-               return -EINVAL;
-
        /* allocate the cgroup and its ID, 0 is reserved for the root */
        cgrp = kzalloc(sizeof(*cgrp), GFP_KERNEL);
        if (!cgrp)
                }
        }
 
-       cgrp->child_subsys_mask = parent->child_subsys_mask;
+       /*
+        * On the default hierarchy, a child doesn't automatically inherit
+        * child_subsys_mask from the parent.  Each is configured manually.
+        */
+       if (!cgroup_on_dfl(cgrp))
+               cgrp->child_subsys_mask = parent->child_subsys_mask;
 
        kernfs_activate(kn);