diff options
author | Alex Waterman <alexw@nvidia.com> | 2015-06-10 16:53:23 -0400 |
---|---|---|
committer | Terje Bergstrom <tbergstrom@nvidia.com> | 2015-06-11 14:12:58 -0400 |
commit | ed776185eca52c6ed044a45f42c61d50a1803dc6 (patch) | |
tree | bb2d508f66b6147b12bdc01a6dc8ac400cae9693 /drivers/gpu | |
parent | 0035aff30712a4506a028345b171eb616572bddb (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')
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/gk20a_allocator.c | 5 |
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, | |||
604 | static u64 __balloc_do_alloc(struct gk20a_allocator *a, u64 order, int pte_size) | 604 | static 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! */ |