#define ITS_CMD_QUEUE_SZ               SZ_64K
 #define ITS_CMD_QUEUE_NR_ENTRIES       (ITS_CMD_QUEUE_SZ / sizeof(struct its_cmd_block))
 
-typedef struct its_collection *(*its_cmd_builder_t)(struct its_cmd_block *,
+typedef struct its_collection *(*its_cmd_builder_t)(struct its_node *,
+                                                   struct its_cmd_block *,
                                                    struct its_cmd_desc *);
 
-typedef struct its_vpe *(*its_cmd_vbuilder_t)(struct its_cmd_block *,
+typedef struct its_vpe *(*its_cmd_vbuilder_t)(struct its_node *,
+                                             struct its_cmd_block *,
                                              struct its_cmd_desc *);
 
 static void its_mask_encode(u64 *raw_cmd, u64 val, int h, int l)
        cmd->raw_cmd[3] = cpu_to_le64(cmd->raw_cmd[3]);
 }
 
-static struct its_collection *its_build_mapd_cmd(struct its_cmd_block *cmd,
+static struct its_collection *its_build_mapd_cmd(struct its_node *its,
+                                                struct its_cmd_block *cmd,
                                                 struct its_cmd_desc *desc)
 {
        unsigned long itt_addr;
        return NULL;
 }
 
-static struct its_collection *its_build_mapc_cmd(struct its_cmd_block *cmd,
+static struct its_collection *its_build_mapc_cmd(struct its_node *its,
+                                                struct its_cmd_block *cmd,
                                                 struct its_cmd_desc *desc)
 {
        its_encode_cmd(cmd, GITS_CMD_MAPC);
        return desc->its_mapc_cmd.col;
 }
 
-static struct its_collection *its_build_mapti_cmd(struct its_cmd_block *cmd,
+static struct its_collection *its_build_mapti_cmd(struct its_node *its,
+                                                 struct its_cmd_block *cmd,
                                                  struct its_cmd_desc *desc)
 {
        struct its_collection *col;
        return col;
 }
 
-static struct its_collection *its_build_movi_cmd(struct its_cmd_block *cmd,
+static struct its_collection *its_build_movi_cmd(struct its_node *its,
+                                                struct its_cmd_block *cmd,
                                                 struct its_cmd_desc *desc)
 {
        struct its_collection *col;
        return col;
 }
 
-static struct its_collection *its_build_discard_cmd(struct its_cmd_block *cmd,
+static struct its_collection *its_build_discard_cmd(struct its_node *its,
+                                                   struct its_cmd_block *cmd,
                                                    struct its_cmd_desc *desc)
 {
        struct its_collection *col;
        return col;
 }
 
-static struct its_collection *its_build_inv_cmd(struct its_cmd_block *cmd,
+static struct its_collection *its_build_inv_cmd(struct its_node *its,
+                                               struct its_cmd_block *cmd,
                                                struct its_cmd_desc *desc)
 {
        struct its_collection *col;
        return col;
 }
 
-static struct its_collection *its_build_int_cmd(struct its_cmd_block *cmd,
+static struct its_collection *its_build_int_cmd(struct its_node *its,
+                                               struct its_cmd_block *cmd,
                                                struct its_cmd_desc *desc)
 {
        struct its_collection *col;
        return col;
 }
 
-static struct its_collection *its_build_clear_cmd(struct its_cmd_block *cmd,
+static struct its_collection *its_build_clear_cmd(struct its_node *its,
+                                                 struct its_cmd_block *cmd,
                                                  struct its_cmd_desc *desc)
 {
        struct its_collection *col;
        return col;
 }
 
-static struct its_collection *its_build_invall_cmd(struct its_cmd_block *cmd,
+static struct its_collection *its_build_invall_cmd(struct its_node *its,
+                                                  struct its_cmd_block *cmd,
                                                   struct its_cmd_desc *desc)
 {
        its_encode_cmd(cmd, GITS_CMD_INVALL);
        return NULL;
 }
 
-static struct its_vpe *its_build_vinvall_cmd(struct its_cmd_block *cmd,
+static struct its_vpe *its_build_vinvall_cmd(struct its_node *its,
+                                            struct its_cmd_block *cmd,
                                             struct its_cmd_desc *desc)
 {
        its_encode_cmd(cmd, GITS_CMD_VINVALL);
        return desc->its_vinvall_cmd.vpe;
 }
 
-static struct its_vpe *its_build_vmapp_cmd(struct its_cmd_block *cmd,
+static struct its_vpe *its_build_vmapp_cmd(struct its_node *its,
+                                          struct its_cmd_block *cmd,
                                           struct its_cmd_desc *desc)
 {
        unsigned long vpt_addr;
        return desc->its_vmapp_cmd.vpe;
 }
 
-static struct its_vpe *its_build_vmapti_cmd(struct its_cmd_block *cmd,
+static struct its_vpe *its_build_vmapti_cmd(struct its_node *its,
+                                           struct its_cmd_block *cmd,
                                            struct its_cmd_desc *desc)
 {
        u32 db;
        return desc->its_vmapti_cmd.vpe;
 }
 
-static struct its_vpe *its_build_vmovi_cmd(struct its_cmd_block *cmd,
+static struct its_vpe *its_build_vmovi_cmd(struct its_node *its,
+                                          struct its_cmd_block *cmd,
                                           struct its_cmd_desc *desc)
 {
        u32 db;
        return desc->its_vmovi_cmd.vpe;
 }
 
-static struct its_vpe *its_build_vmovp_cmd(struct its_cmd_block *cmd,
+static struct its_vpe *its_build_vmovp_cmd(struct its_node *its,
+                                          struct its_cmd_block *cmd,
                                           struct its_cmd_desc *desc)
 {
        its_encode_cmd(cmd, GITS_CMD_VMOVP);
                raw_spin_unlock_irqrestore(&its->lock, flags);          \
                return;                                                 \
        }                                                               \
-       sync_obj = builder(cmd, desc);                                  \
+       sync_obj = builder(its, cmd, desc);                             \
        its_flush_cmd(its, cmd);                                        \
                                                                        \
        if (sync_obj) {                                                 \
                if (!sync_cmd)                                          \
                        goto post;                                      \
                                                                        \
-               buildfn(sync_cmd, sync_obj);                            \
+               buildfn(its, sync_cmd, sync_obj);                       \
                its_flush_cmd(its, sync_cmd);                           \
        }                                                               \
                                                                        \
                pr_err_ratelimited("ITS cmd %ps failed\n", builder);    \
 }
 
-static void its_build_sync_cmd(struct its_cmd_block *sync_cmd,
+static void its_build_sync_cmd(struct its_node *its,
+                              struct its_cmd_block *sync_cmd,
                               struct its_collection *sync_col)
 {
        its_encode_cmd(sync_cmd, GITS_CMD_SYNC);
 static BUILD_SINGLE_CMD_FUNC(its_send_single_command, its_cmd_builder_t,
                             struct its_collection, its_build_sync_cmd)
 
-static void its_build_vsync_cmd(struct its_cmd_block *sync_cmd,
+static void its_build_vsync_cmd(struct its_node *its,
+                               struct its_cmd_block *sync_cmd,
                                struct its_vpe *sync_vpe)
 {
        its_encode_cmd(sync_cmd, GITS_CMD_VSYNC);