|
@@ -153,6 +153,7 @@
|
|
extern struct gru_stats_s gru_stats;
|
|
extern struct gru_stats_s gru_stats;
|
|
extern struct gru_blade_state *gru_base[];
|
|
extern struct gru_blade_state *gru_base[];
|
|
extern unsigned long gru_start_paddr, gru_end_paddr;
|
|
extern unsigned long gru_start_paddr, gru_end_paddr;
|
|
|
|
+extern unsigned int gru_max_gids;
|
|
|
|
|
|
#define GRU_MAX_BLADES MAX_NUMNODES
|
|
#define GRU_MAX_BLADES MAX_NUMNODES
|
|
#define GRU_MAX_GRUS (GRU_MAX_BLADES * GRU_CHIPLETS_PER_BLADE)
|
|
#define GRU_MAX_GRUS (GRU_MAX_BLADES * GRU_CHIPLETS_PER_BLADE)
|
|
@@ -406,12 +407,12 @@ struct gru_state {
|
|
gru segments (64) */
|
|
gru segments (64) */
|
|
void *gs_gru_base_vaddr; /* Virtual address of
|
|
void *gs_gru_base_vaddr; /* Virtual address of
|
|
gru segments (64) */
|
|
gru segments (64) */
|
|
- unsigned char gs_gid; /* unique GRU number */
|
|
|
|
|
|
+ unsigned short gs_gid; /* unique GRU number */
|
|
|
|
+ unsigned short gs_blade_id; /* blade of GRU */
|
|
unsigned char gs_tgh_local_shift; /* used to pick TGH for
|
|
unsigned char gs_tgh_local_shift; /* used to pick TGH for
|
|
local flush */
|
|
local flush */
|
|
unsigned char gs_tgh_first_remote; /* starting TGH# for
|
|
unsigned char gs_tgh_first_remote; /* starting TGH# for
|
|
remote flush */
|
|
remote flush */
|
|
- unsigned short gs_blade_id; /* blade of GRU */
|
|
|
|
spinlock_t gs_asid_lock; /* lock used for
|
|
spinlock_t gs_asid_lock; /* lock used for
|
|
assigning asids */
|
|
assigning asids */
|
|
spinlock_t gs_lock; /* lock used for
|
|
spinlock_t gs_lock; /* lock used for
|
|
@@ -506,6 +507,10 @@ struct gru_blade_state {
|
|
(i) < GRU_CHIPLETS_PER_BLADE; \
|
|
(i) < GRU_CHIPLETS_PER_BLADE; \
|
|
(i)++, (gru)++)
|
|
(i)++, (gru)++)
|
|
|
|
|
|
|
|
+/* Scan all GRUs */
|
|
|
|
+#define foreach_gid(gid) \
|
|
|
|
+ for ((gid) = 0; (gid) < gru_max_gids; (gid)++)
|
|
|
|
+
|
|
/* Scan all active GTSs on a gru. Note: must hold ss_lock to use this macro. */
|
|
/* Scan all active GTSs on a gru. Note: must hold ss_lock to use this macro. */
|
|
#define for_each_gts_on_gru(gts, gru, ctxnum) \
|
|
#define for_each_gts_on_gru(gts, gru, ctxnum) \
|
|
for ((ctxnum) = 0; (ctxnum) < GRU_NUM_CCH; (ctxnum)++) \
|
|
for ((ctxnum) = 0; (ctxnum) < GRU_NUM_CCH; (ctxnum)++) \
|