goto retry;
                }
-               MLX5_SET64(manage_pages_in, in, pas[i], addr);
+               MLX5_ARRAY_SET64(manage_pages_in, in, pas, i, addr);
        }
 
        MLX5_SET(manage_pages_in, in, opcode, MLX5_CMD_OP_MANAGE_PAGES);
                if (fwp->func_id != func_id)
                        continue;
 
-               MLX5_SET64(manage_pages_out, out, pas[i], fwp->addr);
+               MLX5_ARRAY_SET64(manage_pages_out, out, pas, i, fwp->addr);
                i++;
        }
 
 
        ___t; \
 })
 
-#define MLX5_SET64(typ, p, fld, v) do { \
+#define __MLX5_SET64(typ, p, fld, v) do { \
        BUILD_BUG_ON(__mlx5_bit_sz(typ, fld) != 64); \
-       BUILD_BUG_ON(__mlx5_bit_off(typ, fld) % 64); \
        *((__be64 *)(p) + __mlx5_64_off(typ, fld)) = cpu_to_be64(v); \
 } while (0)
 
+#define MLX5_SET64(typ, p, fld, v) do { \
+       BUILD_BUG_ON(__mlx5_bit_off(typ, fld) % 64); \
+       __MLX5_SET64(typ, p, fld, v); \
+} while (0)
+
+#define MLX5_ARRAY_SET64(typ, p, fld, idx, v) do { \
+       BUILD_BUG_ON(__mlx5_bit_off(typ, fld) % 64); \
+       __MLX5_SET64(typ, p, fld[idx], v); \
+} while (0)
+
 #define MLX5_GET64(typ, p, fld) be64_to_cpu(*((__be64 *)(p) + __mlx5_64_off(typ, fld)))
 
 #define MLX5_GET64_PR(typ, p, fld) ({ \