* no clear language in the specification prohibiting different
                 * values for different controllers in the subsystem.
                 */
-               atomic_bs = (1 + ns->ctrl->awupf) * bs;
-       }
-
-       if (!ns->ctrl->subsys->atomic_bs) {
-               ns->ctrl->subsys->atomic_bs = atomic_bs;
-       } else if (ns->ctrl->subsys->atomic_bs != atomic_bs) {
-               dev_err_ratelimited(ns->ctrl->device,
-                       "%s: Inconsistent Atomic Write Size, Namespace will not be added: Subsystem=%d bytes, Controller/Namespace=%d bytes\n",
-                       ns->disk ? ns->disk->disk_name : "?",
-                       ns->ctrl->subsys->atomic_bs,
-                       atomic_bs);
+               atomic_bs = (1 + ns->ctrl->subsys->awupf) * bs;
        }
 
        lim->atomic_write_hw_max = atomic_bs;
        if (!nvme_update_disk_info(ns, id, &lim))
                capacity = 0;
 
-       /*
-        * Validate the max atomic write size fits within the subsystem's
-        * atomic write capabilities.
-        */
-       if (lim.atomic_write_hw_max > ns->ctrl->subsys->atomic_bs) {
-               blk_mq_unfreeze_queue(ns->disk->queue, memflags);
-               ret = -ENXIO;
-               goto out;
-       }
-
        nvme_config_discard(ns, &lim);
        if (IS_ENABLED(CONFIG_BLK_DEV_ZONED) &&
            ns->head->ids.csi == NVME_CSI_ZNS)
        memcpy(subsys->model, id->mn, sizeof(subsys->model));
        subsys->vendor_id = le16_to_cpu(id->vid);
        subsys->cmic = id->cmic;
+       subsys->awupf = le16_to_cpu(id->awupf);
 
        /* Versions prior to 1.4 don't necessarily report a valid type */
        if (id->cntrltype == NVME_CTRL_DISC ||
                if (ret)
                        goto out_free;
        }
+
+       if (le16_to_cpu(id->awupf) != ctrl->subsys->awupf) {
+               dev_err_ratelimited(ctrl->device,
+                       "inconsistent AWUPF, controller not added (%u/%u).\n",
+                       le16_to_cpu(id->awupf), ctrl->subsys->awupf);
+               ret = -EINVAL;
+               goto out_free;
+       }
+
        memcpy(ctrl->subsys->firmware_rev, id->fr,
               sizeof(ctrl->subsys->firmware_rev));
 
                dev_pm_qos_expose_latency_tolerance(ctrl->device);
        else if (!ctrl->apst_enabled && prev_apst_enabled)
                dev_pm_qos_hide_latency_tolerance(ctrl->device);
-       ctrl->awupf = le16_to_cpu(id->awupf);
 out_free:
        kfree(id);
        return ret;