pid_t pid;
  
  
 +      if (!ia64_platform_is("sn2")) {
 +              return -ENODEV;
 +      }
 +
        /*
         * xpc_remote_copy_buffer is used as a temporary buffer for bte_copy'ng
-        * both a partition's reserved page and its XPC variables. Its size was
-        * based on the size of a reserved page. So we need to ensure that the
-        * XPC variables will fit as well.
+        * various portions of a partition's reserved page. Its size is based
+        * on the size of the reserved page header and part_nasids mask. So we
+        * need to ensure that the other items will fit as well.
         */
-       if (XPC_VARS_ALIGNED_SIZE > XPC_RSVD_PAGE_ALIGNED_SIZE) {
+       if (XPC_RP_VARS_SIZE > XPC_RP_HEADER_SIZE + XP_NASID_MASK_BYTES) {
                dev_err(xpc_part, "xpc_remote_copy_buffer is not big enough\n");
                return -EPERM;
        }
 
  
  
  /* original protection values for each node */
 -u64 xpc_prot_vec[MAX_COMPACT_NODES];
 +u64 xpc_prot_vec[MAX_NUMNODES];
  
  
- /* this partition's reserved page */
+ /* this partition's reserved page pointers */
  struct xpc_rsvd_page *xpc_rsvd_page;
- 
- /* this partition's XPC variables (within the reserved page) */
+ static u64 *xpc_part_nasids;
+ static u64 *xpc_mach_nasids;
  struct xpc_vars *xpc_vars;
  struct xpc_vars_part *xpc_vars_part;