summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/nvgpu/gk20a/gk20a_allocator_buddy.c14
-rw-r--r--drivers/gpu/nvgpu/gk20a/gk20a_allocator_page.c8
2 files changed, 22 insertions, 0 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/gk20a_allocator_buddy.c b/drivers/gpu/nvgpu/gk20a/gk20a_allocator_buddy.c
index f9fb48b5..a8a031be 100644
--- a/drivers/gpu/nvgpu/gk20a/gk20a_allocator_buddy.c
+++ b/drivers/gpu/nvgpu/gk20a/gk20a_allocator_buddy.c
@@ -1090,6 +1090,19 @@ static u64 gk20a_buddy_alloc_end(struct gk20a_allocator *a)
1090 return ba->end; 1090 return ba->end;
1091} 1091}
1092 1092
1093static u64 gk20a_buddy_alloc_space(struct gk20a_allocator *a)
1094{
1095 struct gk20a_buddy_allocator *ba = a->priv;
1096 u64 space;
1097
1098 alloc_lock(a);
1099 space = ba->end - ba->start -
1100 (ba->bytes_alloced_real - ba->bytes_freed);
1101 alloc_unlock(a);
1102
1103 return space;
1104}
1105
1093/* 1106/*
1094 * Print the buddy allocator top level stats. If you pass @s as NULL then the 1107 * Print the buddy allocator top level stats. If you pass @s as NULL then the
1095 * stats are printed to the kernel log. This lets this code be used for 1108 * stats are printed to the kernel log. This lets this code be used for
@@ -1180,6 +1193,7 @@ static const struct gk20a_allocator_ops buddy_ops = {
1180 .length = gk20a_buddy_alloc_length, 1193 .length = gk20a_buddy_alloc_length,
1181 .end = gk20a_buddy_alloc_end, 1194 .end = gk20a_buddy_alloc_end,
1182 .inited = gk20a_buddy_alloc_inited, 1195 .inited = gk20a_buddy_alloc_inited,
1196 .space = gk20a_buddy_alloc_space,
1183 1197
1184 .fini = gk20a_buddy_allocator_destroy, 1198 .fini = gk20a_buddy_allocator_destroy,
1185 1199
diff --git a/drivers/gpu/nvgpu/gk20a/gk20a_allocator_page.c b/drivers/gpu/nvgpu/gk20a/gk20a_allocator_page.c
index 42eb9a14..2e5d46b9 100644
--- a/drivers/gpu/nvgpu/gk20a/gk20a_allocator_page.c
+++ b/drivers/gpu/nvgpu/gk20a/gk20a_allocator_page.c
@@ -57,6 +57,13 @@ static u64 gk20a_page_alloc_end(struct gk20a_allocator *a)
57 return gk20a_alloc_end(&va->source_allocator); 57 return gk20a_alloc_end(&va->source_allocator);
58} 58}
59 59
60static u64 gk20a_page_alloc_space(struct gk20a_allocator *a)
61{
62 struct gk20a_page_allocator *va = a->priv;
63
64 return gk20a_alloc_space(&va->source_allocator);
65}
66
60static int gk20a_page_reserve_co(struct gk20a_allocator *a, 67static int gk20a_page_reserve_co(struct gk20a_allocator *a,
61 struct gk20a_alloc_carveout *co) 68 struct gk20a_alloc_carveout *co)
62{ 69{
@@ -492,6 +499,7 @@ static const struct gk20a_allocator_ops page_ops = {
492 .length = gk20a_page_alloc_length, 499 .length = gk20a_page_alloc_length,
493 .end = gk20a_page_alloc_end, 500 .end = gk20a_page_alloc_end,
494 .inited = gk20a_page_alloc_inited, 501 .inited = gk20a_page_alloc_inited,
502 .space = gk20a_page_alloc_space,
495 503
496 .fini = gk20a_page_allocator_destroy, 504 .fini = gk20a_page_allocator_destroy,
497 505