Lines Matching full:gang
17 struct spu_gang *gang; in alloc_spu_gang() local
19 gang = kzalloc(sizeof *gang, GFP_KERNEL); in alloc_spu_gang()
20 if (!gang) in alloc_spu_gang()
23 kref_init(&gang->kref); in alloc_spu_gang()
24 mutex_init(&gang->mutex); in alloc_spu_gang()
25 mutex_init(&gang->aff_mutex); in alloc_spu_gang()
26 INIT_LIST_HEAD(&gang->list); in alloc_spu_gang()
27 INIT_LIST_HEAD(&gang->aff_list_head); in alloc_spu_gang()
28 gang->alive = 1; in alloc_spu_gang()
31 return gang; in alloc_spu_gang()
36 struct spu_gang *gang; in destroy_spu_gang() local
37 gang = container_of(kref, struct spu_gang, kref); in destroy_spu_gang()
38 WARN_ON(gang->contexts || !list_empty(&gang->list)); in destroy_spu_gang()
39 kfree(gang); in destroy_spu_gang()
42 struct spu_gang *get_spu_gang(struct spu_gang *gang) in get_spu_gang() argument
44 kref_get(&gang->kref); in get_spu_gang()
45 return gang; in get_spu_gang()
48 int put_spu_gang(struct spu_gang *gang) in put_spu_gang() argument
50 return kref_put(&gang->kref, &destroy_spu_gang); in put_spu_gang()
53 void spu_gang_add_ctx(struct spu_gang *gang, struct spu_context *ctx) in spu_gang_add_ctx() argument
55 mutex_lock(&gang->mutex); in spu_gang_add_ctx()
56 ctx->gang = get_spu_gang(gang); in spu_gang_add_ctx()
57 list_add(&ctx->gang_list, &gang->list); in spu_gang_add_ctx()
58 gang->contexts++; in spu_gang_add_ctx()
59 mutex_unlock(&gang->mutex); in spu_gang_add_ctx()
62 void spu_gang_remove_ctx(struct spu_gang *gang, struct spu_context *ctx) in spu_gang_remove_ctx() argument
64 mutex_lock(&gang->mutex); in spu_gang_remove_ctx()
65 WARN_ON(ctx->gang != gang); in spu_gang_remove_ctx()
68 gang->aff_flags &= ~AFF_OFFSETS_SET; in spu_gang_remove_ctx()
71 gang->contexts--; in spu_gang_remove_ctx()
72 mutex_unlock(&gang->mutex); in spu_gang_remove_ctx()
74 put_spu_gang(gang); in spu_gang_remove_ctx()