summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu
diff options
context:
space:
mode:
authorAlex Waterman <alexw@nvidia.com>2015-06-10 16:53:23 -0400
committerTerje Bergstrom <tbergstrom@nvidia.com>2015-06-11 14:12:58 -0400
commited776185eca52c6ed044a45f42c61d50a1803dc6 (patch)
treebb2d508f66b6147b12bdc01a6dc8ac400cae9693 /drivers/gpu/nvgpu
parent0035aff30712a4506a028345b171eb616572bddb (diff)
gpu: nvgpu: Check for split_order > max_order
When choosing an order of buddy to start splitting from (happens when no buddies of the requested alloc order exist) don't sit in the while loop past max_order. This makes no sense and hangs the system. Bug 1647902 Change-Id: I6900597d24944d3170bc76cd75f33794b07707d1 Signed-off-by: Alex Waterman <alexw@nvidia.com> Reviewed-on: http://git-master/r/756591 Reviewed-by: Automatic_Commit_Validation_User Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu')
-rw-r--r--drivers/gpu/nvgpu/gk20a/gk20a_allocator.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/gk20a_allocator.c b/drivers/gpu/nvgpu/gk20a/gk20a_allocator.c
index b6549cee..3694c96d 100644
--- a/drivers/gpu/nvgpu/gk20a/gk20a_allocator.c
+++ b/drivers/gpu/nvgpu/gk20a/gk20a_allocator.c
@@ -604,10 +604,11 @@ static struct gk20a_buddy *__balloc_find_buddy(struct gk20a_allocator *a,
604static u64 __balloc_do_alloc(struct gk20a_allocator *a, u64 order, int pte_size) 604static u64 __balloc_do_alloc(struct gk20a_allocator *a, u64 order, int pte_size)
605{ 605{
606 u64 split_order; 606 u64 split_order;
607 struct gk20a_buddy *bud; 607 struct gk20a_buddy *bud = NULL;
608 608
609 split_order = order; 609 split_order = order;
610 while (!(bud = __balloc_find_buddy(a, split_order, pte_size))) 610 while (split_order <= a->max_order &&
611 !(bud = __balloc_find_buddy(a, split_order, pte_size)))
611 split_order++; 612 split_order++;
612 613
613 /* Out of memory! */ 614 /* Out of memory! */