* Register the current task as the user of the GSEG slice.
  * Needed for TLB fault interrupt targeting.
  */
-int gru_set_task_slice(long address)
+int gru_set_context_option(unsigned long arg)
 {
        struct gru_thread_state *gts;
+       struct gru_set_context_option_req req;
+       int ret = 0;
 
-       STAT(set_task_slice);
-       gru_dbg(grudev, "address 0x%lx\n", address);
-       gts = gru_alloc_locked_gts(address);
+       STAT(set_context_option);
+       if (copy_from_user(&req, (void __user *)arg, sizeof(req)))
+               return -EFAULT;
+       gru_dbg(grudev, "op %d, gseg 0x%lx, value1 0x%lx\n", req.op, req.gseg, req.val1);
+
+       gts = gru_alloc_locked_gts(req.gseg);
        if (!gts)
                return -EINVAL;
 
-       gts->ts_tgid_owner = current->tgid;
+       switch (req.op) {
+       case sco_gseg_owner:
+               /* Register the current task as the GSEG owner */
+               gts->ts_tgid_owner = current->tgid;
+               break;
+       default:
+               ret = -EINVAL;
+       }
        gru_unlock_gts(gts);
 
-       return 0;
+       return ret;
 }
 
        case GRU_CREATE_CONTEXT:
                err = gru_create_new_context(arg);
                break;
-       case GRU_SET_TASK_SLICE:
-               err = gru_set_task_slice(arg);
+       case GRU_SET_CONTEXT_OPTION:
+               err = gru_set_context_option(arg);
                break;
        case GRU_USER_GET_EXCEPTION_DETAIL:
                err = gru_get_exception_detail(arg);
 
 /* Set Number of Request Blocks */
 #define GRU_CREATE_CONTEXT             _IOWR(GRU_IOCTL_NUM, 1, void *)
 
-/* Register task as using the slice */
-#define GRU_SET_TASK_SLICE             _IOWR(GRU_IOCTL_NUM, 5, void *)
+/*  Set Context Options */
+#define GRU_SET_CONTEXT_OPTION         _IOWR(GRU_IOCTL_NUM, 4, void *)
 
 /* Fetch exception detail */
 #define GRU_USER_GET_EXCEPTION_DETAIL  _IOWR(GRU_IOCTL_NUM, 6, void *)
        unsigned long   gseg;
 };
 
+/*
+ * Structure used to set context options
+ */
+enum {sco_gseg_owner};
+struct gru_set_context_option_req {
+       unsigned long   gseg;
+       int             op;
+       unsigned long   val1;
+};
+
 /*
  * Structure used to pass TLB flush parameters to the driver
  */
 
        printstat(s, user_flush_tlb);
        printstat(s, user_unload_context);
        printstat(s, user_exception);
-       printstat(s, set_task_slice);
+       printstat(s, set_context_option);
        printstat(s, migrate_check);
        printstat(s, migrated_retarget);
        printstat(s, migrated_unload);
 
        atomic_long_t user_flush_tlb;
        atomic_long_t user_unload_context;
        atomic_long_t user_exception;
-       atomic_long_t set_task_slice;
+       atomic_long_t set_context_option;
        atomic_long_t migrate_check;
        atomic_long_t migrated_retarget;
        atomic_long_t migrated_unload;
 extern int gru_user_flush_tlb(unsigned long arg);
 extern int gru_user_unload_context(unsigned long arg);
 extern int gru_get_exception_detail(unsigned long arg);
-extern int gru_set_task_slice(long address);
+extern int gru_set_context_option(unsigned long address);
 extern int gru_cpu_fault_map_id(void);
 extern struct vm_area_struct *gru_find_vma(unsigned long vaddr);
 extern void gru_flush_all_tlb(struct gru_state *gru);