gru: allow users to specify gru chiplet 1
authorJack Steiner <steiner@sgi.com>
Wed, 16 Dec 2009 00:48:04 +0000 (16:48 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Wed, 16 Dec 2009 15:20:14 +0000 (07:20 -0800)
Add table & user request infrastructure that is needed to allow users to
specify the blade and chiplet for allocation of GRU contexts.  Use of this
information is in a subsequent patch.

Signed-off-by: Jack Steiner <steiner@sgi.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
drivers/misc/sgi-gru/grufault.c
drivers/misc/sgi-gru/grulib.h
drivers/misc/sgi-gru/grumain.c
drivers/misc/sgi-gru/grutables.h

index a9f0cf4830052d5f346d02260862537ffb4d8b8f..a69d119921ff7832c748721020ff8077937ff7ea 100644 (file)
@@ -763,6 +763,16 @@ int gru_set_context_option(unsigned long arg)
                return -EINVAL;
 
        switch (req.op) {
+       case sco_blade_chiplet:
+               /* Select blade/chiplet for GRU context */
+               if (req.val1 < -1 || req.val1 >= GRU_MAX_BLADES || !gru_base[req.val1] ||
+                   req.val0 < -1 || req.val0 >= GRU_CHIPLETS_PER_HUB) {
+                       ret = -EINVAL;
+               } else {
+                       gts->ts_user_blade_id = req.val1;
+                       gts->ts_user_chiplet_id = req.val0;
+               }
+               break;
        case sco_gseg_owner:
                /* Register the current task as the GSEG owner */
                gts->ts_tgid_owner = current->tgid;
index 889bc442a3e81c8d09791f0e7256935f5378ee2b..e94ee2b8bd648253b37787b18f22d167bbbd9cc7 100644 (file)
@@ -98,11 +98,12 @@ struct gru_unload_context_req {
 /*
  * Structure used to set context options
  */
-enum {sco_gseg_owner, sco_cch_req_slice};
+enum {sco_gseg_owner, sco_cch_req_slice, sco_blade_chiplet};
 struct gru_set_context_option_req {
        unsigned long   gseg;
        int             op;
-       unsigned long   val1;
+       int             val0;
+       long            val1;
 };
 
 /*
index 3bc643dad606aa955788fa866bb6c12a7e315ee5..f449c2dbc1e3b24cdd7ff5eca8bf632ff358276b 100644 (file)
@@ -328,6 +328,8 @@ struct gru_thread_state *gru_alloc_gts(struct vm_area_struct *vma,
        gts->ts_cbr_au_count = cbr_au_count;
        gts->ts_dsr_au_count = dsr_au_count;
        gts->ts_user_options = options;
+       gts->ts_user_blade_id = -1;
+       gts->ts_user_chiplet_id = -1;
        gts->ts_tsid = tsid;
        gts->ts_ctxnum = NULLCTX;
        gts->ts_tlb_int_select = -1;
index f7b553a56ed0de31f4488f87855723e9c1967e5c..27131fb2253fe5d63e25e4f72d1f106dfa8e1ed4 100644 (file)
@@ -369,6 +369,8 @@ struct gru_thread_state {
        long                    ts_user_options;/* misc user option flags */
        pid_t                   ts_tgid_owner;  /* task that is using the
                                                   context - for migration */
+       short                   ts_user_blade_id;/* user selected blade */
+       char                    ts_user_chiplet_id;/* user selected chiplet */
        unsigned short          ts_sizeavail;   /* Pagesizes in use */
        int                     ts_tsid;        /* thread that owns the
                                                   structure */