diff options
| author | Thierry Reding <treding@nvidia.com> | 2015-01-23 03:05:06 -0500 |
|---|---|---|
| committer | Dave Airlie <airlied@redhat.com> | 2015-03-04 18:01:37 -0500 |
| commit | 440fd5283a87345cdd4237bdf45fb01130ea0056 (patch) | |
| tree | f41245531ea59406e0499067541a291ef75c1c51 /drivers | |
| parent | ed9ed50ccc2c16690b921171c809f6f15255ac65 (diff) | |
drm/mm: Support 4 GiB and larger ranges
The current implementation is limited by the number of addresses that
fit into an unsigned long. This causes problems on 32-bit Tegra where
unsigned long is 32-bit but drm_mm is used to manage an IOVA space of
4 GiB. Given the 32-bit limitation, the range is limited to 4 GiB - 1
(or 4 GiB - 4 KiB for page granularity).
This commit changes the start and size of the range to be an unsigned
64-bit integer, thus allowing much larger ranges to be supported.
[airlied: fix i915 warnings and coloring callback]
Signed-off-by: Thierry Reding <treding@nvidia.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Dave Airlie <airlied@redhat.com>
fixupo
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/gpu/drm/drm_mm.c | 152 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/i915_debugfs.c | 4 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/i915_gem_gtt.c | 6 |
3 files changed, 84 insertions, 78 deletions
diff --git a/drivers/gpu/drm/drm_mm.c b/drivers/gpu/drm/drm_mm.c index 04a209e2b66d..7fc6f8bd4821 100644 --- a/drivers/gpu/drm/drm_mm.c +++ b/drivers/gpu/drm/drm_mm.c | |||
| @@ -91,29 +91,29 @@ | |||
| 91 | */ | 91 | */ |
| 92 | 92 | ||
| 93 | static struct drm_mm_node *drm_mm_search_free_generic(const struct drm_mm *mm, | 93 | static struct drm_mm_node *drm_mm_search_free_generic(const struct drm_mm *mm, |
| 94 | unsigned long size, | 94 | u64 size, |
| 95 | unsigned alignment, | 95 | unsigned alignment, |
| 96 | unsigned long color, | 96 | unsigned long color, |
| 97 | enum drm_mm_search_flags flags); | 97 | enum drm_mm_search_flags flags); |
| 98 | static struct drm_mm_node *drm_mm_search_free_in_range_generic(const struct drm_mm *mm, | 98 | static struct drm_mm_node *drm_mm_search_free_in_range_generic(const struct drm_mm *mm, |
| 99 | unsigned long size, | 99 | u64 size, |
| 100 | unsigned alignment, | 100 | unsigned alignment, |
| 101 | unsigned long color, | 101 | unsigned long color, |
| 102 | unsigned long start, | 102 | u64 start, |
| 103 | unsigned long end, | 103 | u64 end, |
| 104 | enum drm_mm_search_flags flags); | 104 | enum drm_mm_search_flags flags); |
| 105 | 105 | ||
| 106 | static void drm_mm_insert_helper(struct drm_mm_node *hole_node, | 106 | static void drm_mm_insert_helper(struct drm_mm_node *hole_node, |
| 107 | struct drm_mm_node *node, | 107 | struct drm_mm_node *node, |
| 108 | unsigned long size, unsigned alignment, | 108 | u64 size, unsigned alignment, |
| 109 | unsigned long color, | 109 | unsigned long color, |
| 110 | enum drm_mm_allocator_flags flags) | 110 | enum drm_mm_allocator_flags flags) |
| 111 | { | 111 | { |
| 112 | struct drm_mm *mm = hole_node->mm; | 112 | struct drm_mm *mm = hole_node->mm; |
| 113 | unsigned long hole_start = drm_mm_hole_node_start(hole_node); | 113 | u64 hole_start = drm_mm_hole_node_start(hole_node); |
| 114 | unsigned long hole_end = drm_mm_hole_node_end(hole_node); | 114 | u64 hole_end = drm_mm_hole_node_end(hole_node); |
| 115 | unsigned long adj_start = hole_start; | 115 | u64 adj_start = hole_start; |
| 116 | unsigned long adj_end = hole_end; | 116 | u64 adj_end = hole_end; |
| 117 | 117 | ||
| 118 | BUG_ON(node->allocated); | 118 | BUG_ON(node->allocated); |
| 119 | 119 | ||
| @@ -124,12 +124,15 @@ static void drm_mm_insert_helper(struct drm_mm_node *hole_node, | |||
| 124 | adj_start = adj_end - size; | 124 | adj_start = adj_end - size; |
| 125 | 125 | ||
| 126 | if (alignment) { | 126 | if (alignment) { |
| 127 | unsigned tmp = adj_start % alignment; | 127 | u64 tmp = adj_start; |
| 128 | if (tmp) { | 128 | unsigned rem; |
| 129 | |||
| 130 | rem = do_div(tmp, alignment); | ||
| 131 | if (rem) { | ||
| 129 | if (flags & DRM_MM_CREATE_TOP) | 132 | if (flags & DRM_MM_CREATE_TOP) |
| 130 | adj_start -= tmp; | 133 | adj_start -= rem; |
| 131 | else | 134 | else |
| 132 | adj_start += alignment - tmp; | 135 | adj_start += alignment - rem; |
| 133 | } | 136 | } |
| 134 | } | 137 | } |
| 135 | 138 | ||
| @@ -176,9 +179,9 @@ static void drm_mm_insert_helper(struct drm_mm_node *hole_node, | |||
| 176 | int drm_mm_reserve_node(struct drm_mm *mm, struct drm_mm_node *node) | 179 | int drm_mm_reserve_node(struct drm_mm *mm, struct drm_mm_node *node) |
| 177 | { | 180 | { |
| 178 | struct drm_mm_node *hole; | 181 | struct drm_mm_node *hole; |
| 179 | unsigned long end = node->start + node->size; | 182 | u64 end = node->start + node->size; |
| 180 | unsigned long hole_start; | 183 | u64 hole_start; |
| 181 | unsigned long hole_end; | 184 | u64 hole_end; |
| 182 | 185 | ||
| 183 | BUG_ON(node == NULL); | 186 | BUG_ON(node == NULL); |
| 184 | 187 | ||
| @@ -227,7 +230,7 @@ EXPORT_SYMBOL(drm_mm_reserve_node); | |||
| 227 | * 0 on success, -ENOSPC if there's no suitable hole. | 230 | * 0 on success, -ENOSPC if there's no suitable hole. |
| 228 | */ | 231 | */ |
| 229 | int drm_mm_insert_node_generic(struct drm_mm *mm, struct drm_mm_node *node, | 232 | int drm_mm_insert_node_generic(struct drm_mm *mm, struct drm_mm_node *node, |
| 230 | unsigned long size, unsigned alignment, | 233 | u64 size, unsigned alignment, |
| 231 | unsigned long color, | 234 | unsigned long color, |
| 232 | enum drm_mm_search_flags sflags, | 235 | enum drm_mm_search_flags sflags, |
| 233 | enum drm_mm_allocator_flags aflags) | 236 | enum drm_mm_allocator_flags aflags) |
| @@ -246,16 +249,16 @@ EXPORT_SYMBOL(drm_mm_insert_node_generic); | |||
| 246 | 249 | ||
| 247 | static void drm_mm_insert_helper_range(struct drm_mm_node *hole_node, | 250 | static void drm_mm_insert_helper_range(struct drm_mm_node *hole_node, |
| 248 | struct drm_mm_node *node, | 251 | struct drm_mm_node *node, |
| 249 | unsigned long size, unsigned alignment, | 252 | u64 size, unsigned alignment, |
| 250 | unsigned long color, | 253 | unsigned long color, |
| 251 | unsigned long start, unsigned long end, | 254 | u64 start, u64 end, |
| 252 | enum drm_mm_allocator_flags flags) | 255 | enum drm_mm_allocator_flags flags) |
| 253 | { | 256 | { |
| 254 | struct drm_mm *mm = hole_node->mm; | 257 | struct drm_mm *mm = hole_node->mm; |
| 255 | unsigned long hole_start = drm_mm_hole_node_start(hole_node); | 258 | u64 hole_start = drm_mm_hole_node_start(hole_node); |
| 256 | unsigned long hole_end = drm_mm_hole_node_end(hole_node); | 259 | u64 hole_end = drm_mm_hole_node_end(hole_node); |
| 257 | unsigned long adj_start = hole_start; | 260 | u64 adj_start = hole_start; |
| 258 | unsigned long adj_end = hole_end; | 261 | u64 adj_end = hole_end; |
| 259 | 262 | ||
| 260 | BUG_ON(!hole_node->hole_follows || node->allocated); | 263 | BUG_ON(!hole_node->hole_follows || node->allocated); |
| 261 | 264 | ||
| @@ -271,12 +274,15 @@ static void drm_mm_insert_helper_range(struct drm_mm_node *hole_node, | |||
| 271 | mm->color_adjust(hole_node, color, &adj_start, &adj_end); | 274 | mm->color_adjust(hole_node, color, &adj_start, &adj_end); |
| 272 | 275 | ||
| 273 | if (alignment) { | 276 | if (alignment) { |
| 274 | unsigned tmp = adj_start % alignment; | 277 | u64 tmp = adj_start; |
| 275 | if (tmp) { | 278 | unsigned rem; |
| 279 | |||
| 280 | rem = do_div(tmp, alignment); | ||
| 281 | if (rem) { | ||
| 276 | if (flags & DRM_MM_CREATE_TOP) | 282 | if (flags & DRM_MM_CREATE_TOP) |
| 277 | adj_start -= tmp; | 283 | adj_start -= rem; |
| 278 | else | 284 | else |
| 279 | adj_start += alignment - tmp; | 285 | adj_start += alignment - rem; |
| 280 | } | 286 | } |
| 281 | } | 287 | } |
| 282 | 288 | ||
| @@ -324,9 +330,9 @@ static void drm_mm_insert_helper_range(struct drm_mm_node *hole_node, | |||
| 324 | * 0 on success, -ENOSPC if there's no suitable hole. | 330 | * 0 on success, -ENOSPC if there's no suitable hole. |
| 325 | */ | 331 | */ |
| 326 | int drm_mm_insert_node_in_range_generic(struct drm_mm *mm, struct drm_mm_node *node, | 332 | int drm_mm_insert_node_in_range_generic(struct drm_mm *mm, struct drm_mm_node *node, |
| 327 | unsigned long size, unsigned alignment, | 333 | u64 size, unsigned alignment, |
| 328 | unsigned long color, | 334 | unsigned long color, |
| 329 | unsigned long start, unsigned long end, | 335 | u64 start, u64 end, |
| 330 | enum drm_mm_search_flags sflags, | 336 | enum drm_mm_search_flags sflags, |
| 331 | enum drm_mm_allocator_flags aflags) | 337 | enum drm_mm_allocator_flags aflags) |
| 332 | { | 338 | { |
| @@ -387,32 +393,34 @@ void drm_mm_remove_node(struct drm_mm_node *node) | |||
| 387 | } | 393 | } |
| 388 | EXPORT_SYMBOL(drm_mm_remove_node); | 394 | EXPORT_SYMBOL(drm_mm_remove_node); |
| 389 | 395 | ||
| 390 | static int check_free_hole(unsigned long start, unsigned long end, | 396 | static int check_free_hole(u64 start, u64 end, u64 size, unsigned alignment) |
| 391 | unsigned long size, unsigned alignment) | ||
| 392 | { | 397 | { |
| 393 | if (end - start < size) | 398 | if (end - start < size) |
| 394 | return 0; | 399 | return 0; |
| 395 | 400 | ||
| 396 | if (alignment) { | 401 | if (alignment) { |
| 397 | unsigned tmp = start % alignment; | 402 | u64 tmp = start; |
| 403 | unsigned rem; | ||
| 404 | |||
| 405 | rem = do_div(tmp, alignment); | ||
| 398 | if (tmp) | 406 | if (tmp) |
| 399 | start += alignment - tmp; | 407 | start += alignment - rem; |
| 400 | } | 408 | } |
| 401 | 409 | ||
| 402 | return end >= start + size; | 410 | return end >= start + size; |
| 403 | } | 411 | } |
| 404 | 412 | ||
| 405 | static struct drm_mm_node *drm_mm_search_free_generic(const struct drm_mm *mm, | 413 | static struct drm_mm_node *drm_mm_search_free_generic(const struct drm_mm *mm, |
| 406 | unsigned long size, | 414 | u64 size, |
| 407 | unsigned alignment, | 415 | unsigned alignment, |
| 408 | unsigned long color, | 416 | unsigned long color, |
| 409 | enum drm_mm_search_flags flags) | 417 | enum drm_mm_search_flags flags) |
| 410 | { | 418 | { |
| 411 | struct drm_mm_node *entry; | 419 | struct drm_mm_node *entry; |
| 412 | struct drm_mm_node *best; | 420 | struct drm_mm_node *best; |
| 413 | unsigned long adj_start; | 421 | u64 adj_start; |
| 414 | unsigned long adj_end; | 422 | u64 adj_end; |
| 415 | unsigned long best_size; | 423 | u64 best_size; |
| 416 | 424 | ||
| 417 | BUG_ON(mm->scanned_blocks); | 425 | BUG_ON(mm->scanned_blocks); |
| 418 | 426 | ||
| @@ -421,7 +429,7 @@ static struct drm_mm_node *drm_mm_search_free_generic(const struct drm_mm *mm, | |||
| 421 | 429 | ||
| 422 | __drm_mm_for_each_hole(entry, mm, adj_start, adj_end, | 430 | __drm_mm_for_each_hole(entry, mm, adj_start, adj_end, |
| 423 | flags & DRM_MM_SEARCH_BELOW) { | 431 | flags & DRM_MM_SEARCH_BELOW) { |
| 424 | unsigned long hole_size = adj_end - adj_start; | 432 | u64 hole_size = adj_end - adj_start; |
| 425 | 433 | ||
| 426 | if (mm->color_adjust) { | 434 | if (mm->color_adjust) { |
| 427 | mm->color_adjust(entry, color, &adj_start, &adj_end); | 435 | mm->color_adjust(entry, color, &adj_start, &adj_end); |
| @@ -445,18 +453,18 @@ static struct drm_mm_node *drm_mm_search_free_generic(const struct drm_mm *mm, | |||
| 445 | } | 453 | } |
| 446 | 454 | ||
| 447 | static struct drm_mm_node *drm_mm_search_free_in_range_generic(const struct drm_mm *mm, | 455 | static struct drm_mm_node *drm_mm_search_free_in_range_generic(const struct drm_mm *mm, |
| 448 | unsigned long size, | 456 | u64 size, |
| 449 | unsigned alignment, | 457 | unsigned alignment, |
| 450 | unsigned long color, | 458 | unsigned long color, |
| 451 | unsigned long start, | 459 | u64 start, |
| 452 | unsigned long end, | 460 | u64 end, |
| 453 | enum drm_mm_search_flags flags) | 461 | enum drm_mm_search_flags flags) |
| 454 | { | 462 | { |
| 455 | struct drm_mm_node *entry; | 463 | struct drm_mm_node *entry; |
| 456 | struct drm_mm_node *best; | 464 | struct drm_mm_node *best; |
| 457 | unsigned long adj_start; | 465 | u64 adj_start; |
| 458 | unsigned long adj_end; | 466 | u64 adj_end; |
| 459 | unsigned long best_size; | 467 | u64 best_size; |
| 460 | 468 | ||
| 461 | BUG_ON(mm->scanned_blocks); | 469 | BUG_ON(mm->scanned_blocks); |
| 462 | 470 | ||
| @@ -465,7 +473,7 @@ static struct drm_mm_node *drm_mm_search_free_in_range_generic(const struct drm_ | |||
| 465 | 473 | ||
| 466 | __drm_mm_for_each_hole(entry, mm, adj_start, adj_end, | 474 | __drm_mm_for_each_hole(entry, mm, adj_start, adj_end, |
| 467 | flags & DRM_MM_SEARCH_BELOW) { | 475 | flags & DRM_MM_SEARCH_BELOW) { |
| 468 | unsigned long hole_size = adj_end - adj_start; | 476 | u64 hole_size = adj_end - adj_start; |
| 469 | 477 | ||
| 470 | if (adj_start < start) | 478 | if (adj_start < start) |
| 471 | adj_start = start; | 479 | adj_start = start; |
| @@ -561,7 +569,7 @@ EXPORT_SYMBOL(drm_mm_replace_node); | |||
| 561 | * adding/removing nodes to/from the scan list are allowed. | 569 | * adding/removing nodes to/from the scan list are allowed. |
| 562 | */ | 570 | */ |
| 563 | void drm_mm_init_scan(struct drm_mm *mm, | 571 | void drm_mm_init_scan(struct drm_mm *mm, |
| 564 | unsigned long size, | 572 | u64 size, |
| 565 | unsigned alignment, | 573 | unsigned alignment, |
| 566 | unsigned long color) | 574 | unsigned long color) |
| 567 | { | 575 | { |
| @@ -594,11 +602,11 @@ EXPORT_SYMBOL(drm_mm_init_scan); | |||
| 594 | * adding/removing nodes to/from the scan list are allowed. | 602 | * adding/removing nodes to/from the scan list are allowed. |
| 595 | */ | 603 | */ |
| 596 | void drm_mm_init_scan_with_range(struct drm_mm *mm, | 604 | void drm_mm_init_scan_with_range(struct drm_mm *mm, |
| 597 | unsigned long size, | 605 | u64 size, |
| 598 | unsigned alignment, | 606 | unsigned alignment, |
| 599 | unsigned long color, | 607 | unsigned long color, |
| 600 | unsigned long start, | 608 | u64 start, |
| 601 | unsigned long end) | 609 | u64 end) |
| 602 | { | 610 | { |
| 603 | mm->scan_color = color; | 611 | mm->scan_color = color; |
| 604 | mm->scan_alignment = alignment; | 612 | mm->scan_alignment = alignment; |
| @@ -627,8 +635,8 @@ bool drm_mm_scan_add_block(struct drm_mm_node *node) | |||
| 627 | { | 635 | { |
| 628 | struct drm_mm *mm = node->mm; | 636 | struct drm_mm *mm = node->mm; |
| 629 | struct drm_mm_node *prev_node; | 637 | struct drm_mm_node *prev_node; |
| 630 | unsigned long hole_start, hole_end; | 638 | u64 hole_start, hole_end; |
| 631 | unsigned long adj_start, adj_end; | 639 | u64 adj_start, adj_end; |
| 632 | 640 | ||
| 633 | mm->scanned_blocks++; | 641 | mm->scanned_blocks++; |
| 634 | 642 | ||
| @@ -731,7 +739,7 @@ EXPORT_SYMBOL(drm_mm_clean); | |||
| 731 | * | 739 | * |
| 732 | * Note that @mm must be cleared to 0 before calling this function. | 740 | * Note that @mm must be cleared to 0 before calling this function. |
| 733 | */ | 741 | */ |
| 734 | void drm_mm_init(struct drm_mm * mm, unsigned long start, unsigned long size) | 742 | void drm_mm_init(struct drm_mm * mm, u64 start, u64 size) |
| 735 | { | 743 | { |
| 736 | INIT_LIST_HEAD(&mm->hole_stack); | 744 | INIT_LIST_HEAD(&mm->hole_stack); |
| 737 | mm->scanned_blocks = 0; | 745 | mm->scanned_blocks = 0; |
| @@ -766,18 +774,17 @@ void drm_mm_takedown(struct drm_mm * mm) | |||
| 766 | } | 774 | } |
| 767 | EXPORT_SYMBOL(drm_mm_takedown); | 775 | EXPORT_SYMBOL(drm_mm_takedown); |
| 768 | 776 | ||
| 769 | static unsigned long drm_mm_debug_hole(struct drm_mm_node *entry, | 777 | static u64 drm_mm_debug_hole(struct drm_mm_node *entry, |
| 770 | const char *prefix) | 778 | const char *prefix) |
| 771 | { | 779 | { |
| 772 | unsigned long hole_start, hole_end, hole_size; | 780 | u64 hole_start, hole_end, hole_size; |
| 773 | 781 | ||
| 774 | if (entry->hole_follows) { | 782 | if (entry->hole_follows) { |
| 775 | hole_start = drm_mm_hole_node_start(entry); | 783 | hole_start = drm_mm_hole_node_start(entry); |
| 776 | hole_end = drm_mm_hole_node_end(entry); | 784 | hole_end = drm_mm_hole_node_end(entry); |
| 777 | hole_size = hole_end - hole_start; | 785 | hole_size = hole_end - hole_start; |
| 778 | printk(KERN_DEBUG "%s 0x%08lx-0x%08lx: %8lu: free\n", | 786 | pr_debug("%s %#llx-%#llx: %llu: free\n", prefix, hole_start, |
| 779 | prefix, hole_start, hole_end, | 787 | hole_end, hole_size); |
| 780 | hole_size); | ||
| 781 | return hole_size; | 788 | return hole_size; |
| 782 | } | 789 | } |
| 783 | 790 | ||
| @@ -792,35 +799,34 @@ static unsigned long drm_mm_debug_hole(struct drm_mm_node *entry, | |||
| 792 | void drm_mm_debug_table(struct drm_mm *mm, const char *prefix) | 799 | void drm_mm_debug_table(struct drm_mm *mm, const char *prefix) |
| 793 | { | 800 | { |
| 794 | struct drm_mm_node *entry; | 801 | struct drm_mm_node *entry; |
| 795 | unsigned long total_used = 0, total_free = 0, total = 0; | 802 | u64 total_used = 0, total_free = 0, total = 0; |
| 796 | 803 | ||
| 797 | total_free += drm_mm_debug_hole(&mm->head_node, prefix); | 804 | total_free += drm_mm_debug_hole(&mm->head_node, prefix); |
| 798 | 805 | ||
| 799 | drm_mm_for_each_node(entry, mm) { | 806 | drm_mm_for_each_node(entry, mm) { |
| 800 | printk(KERN_DEBUG "%s 0x%08lx-0x%08lx: %8lu: used\n", | 807 | pr_debug("%s %#llx-%#llx: %llu: used\n", prefix, entry->start, |
| 801 | prefix, entry->start, entry->start + entry->size, | 808 | entry->start + entry->size, entry->size); |
| 802 | entry->size); | ||
| 803 | total_used += entry->size; | 809 | total_used += entry->size; |
| 804 | total_free += drm_mm_debug_hole(entry, prefix); | 810 | total_free += drm_mm_debug_hole(entry, prefix); |
| 805 | } | 811 | } |
| 806 | total = total_free + total_used; | 812 | total = total_free + total_used; |
| 807 | 813 | ||
| 808 | printk(KERN_DEBUG "%s total: %lu, used %lu free %lu\n", prefix, total, | 814 | pr_debug("%s total: %llu, used %llu free %llu\n", prefix, total, |
| 809 | total_used, total_free); | 815 | total_used, total_free); |
| 810 | } | 816 | } |
| 811 | EXPORT_SYMBOL(drm_mm_debug_table); | 817 | EXPORT_SYMBOL(drm_mm_debug_table); |
| 812 | 818 | ||
| 813 | #if defined(CONFIG_DEBUG_FS) | 819 | #if defined(CONFIG_DEBUG_FS) |
| 814 | static unsigned long drm_mm_dump_hole(struct seq_file *m, struct drm_mm_node *entry) | 820 | static u64 drm_mm_dump_hole(struct seq_file *m, struct drm_mm_node *entry) |
| 815 | { | 821 | { |
| 816 | unsigned long hole_start, hole_end, hole_size; | 822 | u64 hole_start, hole_end, hole_size; |
| 817 | 823 | ||
| 818 | if (entry->hole_follows) { | 824 | if (entry->hole_follows) { |
| 819 | hole_start = drm_mm_hole_node_start(entry); | 825 | hole_start = drm_mm_hole_node_start(entry); |
| 820 | hole_end = drm_mm_hole_node_end(entry); | 826 | hole_end = drm_mm_hole_node_end(entry); |
| 821 | hole_size = hole_end - hole_start; | 827 | hole_size = hole_end - hole_start; |
| 822 | seq_printf(m, "0x%08lx-0x%08lx: 0x%08lx: free\n", | 828 | seq_printf(m, "%#llx-%#llx: %llu: free\n", hole_start, |
| 823 | hole_start, hole_end, hole_size); | 829 | hole_end, hole_size); |
| 824 | return hole_size; | 830 | return hole_size; |
| 825 | } | 831 | } |
| 826 | 832 | ||
| @@ -835,20 +841,20 @@ static unsigned long drm_mm_dump_hole(struct seq_file *m, struct drm_mm_node *en | |||
| 835 | int drm_mm_dump_table(struct seq_file *m, struct drm_mm *mm) | 841 | int drm_mm_dump_table(struct seq_file *m, struct drm_mm *mm) |
| 836 | { | 842 | { |
| 837 | struct drm_mm_node *entry; | 843 | struct drm_mm_node *entry; |
| 838 | unsigned long total_used = 0, total_free = 0, total = 0; | 844 | u64 total_used = 0, total_free = 0, total = 0; |
| 839 | 845 | ||
| 840 | total_free += drm_mm_dump_hole(m, &mm->head_node); | 846 | total_free += drm_mm_dump_hole(m, &mm->head_node); |
| 841 | 847 | ||
| 842 | drm_mm_for_each_node(entry, mm) { | 848 | drm_mm_for_each_node(entry, mm) { |
| 843 | seq_printf(m, "0x%08lx-0x%08lx: 0x%08lx: used\n", | 849 | seq_printf(m, "%#016llx-%#016llx: %llu: used\n", entry->start, |
| 844 | entry->start, entry->start + entry->size, | 850 | entry->start + entry->size, entry->size); |
| 845 | entry->size); | ||
| 846 | total_used += entry->size; | 851 | total_used += entry->size; |
| 847 | total_free += drm_mm_dump_hole(m, entry); | 852 | total_free += drm_mm_dump_hole(m, entry); |
| 848 | } | 853 | } |
| 849 | total = total_free + total_used; | 854 | total = total_free + total_used; |
| 850 | 855 | ||
| 851 | seq_printf(m, "total: %lu, used %lu free %lu\n", total, total_used, total_free); | 856 | seq_printf(m, "total: %llu, used %llu free %llu\n", total, |
| 857 | total_used, total_free); | ||
| 852 | return 0; | 858 | return 0; |
| 853 | } | 859 | } |
| 854 | EXPORT_SYMBOL(drm_mm_dump_table); | 860 | EXPORT_SYMBOL(drm_mm_dump_table); |
diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c index 96e811fe24ca..e8b18e542da4 100644 --- a/drivers/gpu/drm/i915/i915_debugfs.c +++ b/drivers/gpu/drm/i915/i915_debugfs.c | |||
| @@ -152,12 +152,12 @@ describe_obj(struct seq_file *m, struct drm_i915_gem_object *obj) | |||
| 152 | seq_puts(m, " (pp"); | 152 | seq_puts(m, " (pp"); |
| 153 | else | 153 | else |
| 154 | seq_puts(m, " (g"); | 154 | seq_puts(m, " (g"); |
| 155 | seq_printf(m, "gtt offset: %08lx, size: %08lx, type: %u)", | 155 | seq_printf(m, "gtt offset: %08llx, size: %08llx, type: %u)", |
| 156 | vma->node.start, vma->node.size, | 156 | vma->node.start, vma->node.size, |
| 157 | vma->ggtt_view.type); | 157 | vma->ggtt_view.type); |
| 158 | } | 158 | } |
| 159 | if (obj->stolen) | 159 | if (obj->stolen) |
| 160 | seq_printf(m, " (stolen: %08lx)", obj->stolen->start); | 160 | seq_printf(m, " (stolen: %08llx)", obj->stolen->start); |
| 161 | if (obj->pin_mappable || obj->fault_mappable) { | 161 | if (obj->pin_mappable || obj->fault_mappable) { |
| 162 | char s[3], *t = s; | 162 | char s[3], *t = s; |
| 163 | if (obj->pin_mappable) | 163 | if (obj->pin_mappable) |
diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.c b/drivers/gpu/drm/i915/i915_gem_gtt.c index 746f77fb57a3..dccdc8aad2e2 100644 --- a/drivers/gpu/drm/i915/i915_gem_gtt.c +++ b/drivers/gpu/drm/i915/i915_gem_gtt.c | |||
| @@ -1145,7 +1145,7 @@ static int gen6_ppgtt_init(struct i915_hw_ppgtt *ppgtt) | |||
| 1145 | 1145 | ||
| 1146 | ppgtt->base.clear_range(&ppgtt->base, 0, ppgtt->base.total, true); | 1146 | ppgtt->base.clear_range(&ppgtt->base, 0, ppgtt->base.total, true); |
| 1147 | 1147 | ||
| 1148 | DRM_DEBUG_DRIVER("Allocated pde space (%ldM) at GTT entry: %lx\n", | 1148 | DRM_DEBUG_DRIVER("Allocated pde space (%lldM) at GTT entry: %llx\n", |
| 1149 | ppgtt->node.size >> 20, | 1149 | ppgtt->node.size >> 20, |
| 1150 | ppgtt->node.start / PAGE_SIZE); | 1150 | ppgtt->node.start / PAGE_SIZE); |
| 1151 | 1151 | ||
| @@ -1713,8 +1713,8 @@ void i915_gem_gtt_finish_object(struct drm_i915_gem_object *obj) | |||
| 1713 | 1713 | ||
| 1714 | static void i915_gtt_color_adjust(struct drm_mm_node *node, | 1714 | static void i915_gtt_color_adjust(struct drm_mm_node *node, |
| 1715 | unsigned long color, | 1715 | unsigned long color, |
| 1716 | unsigned long *start, | 1716 | u64 *start, |
| 1717 | unsigned long *end) | 1717 | u64 *end) |
| 1718 | { | 1718 | { |
| 1719 | if (node->color != color) | 1719 | if (node->color != color) |
| 1720 | *start += 4096; | 1720 | *start += 4096; |
