diff options
| -rw-r--r-- | drivers/misc/habanalabs/debugfs.c | 7 | ||||
| -rw-r--r-- | drivers/misc/habanalabs/habanalabs.h | 8 | ||||
| -rw-r--r-- | drivers/misc/habanalabs/memory.c | 29 |
3 files changed, 23 insertions, 21 deletions
diff --git a/drivers/misc/habanalabs/debugfs.c b/drivers/misc/habanalabs/debugfs.c index a53c12aff6ad..974a87789bd8 100644 --- a/drivers/misc/habanalabs/debugfs.c +++ b/drivers/misc/habanalabs/debugfs.c | |||
| @@ -232,6 +232,7 @@ static int vm_show(struct seq_file *s, void *data) | |||
| 232 | struct hl_vm_phys_pg_pack *phys_pg_pack = NULL; | 232 | struct hl_vm_phys_pg_pack *phys_pg_pack = NULL; |
| 233 | enum vm_type_t *vm_type; | 233 | enum vm_type_t *vm_type; |
| 234 | bool once = true; | 234 | bool once = true; |
| 235 | u64 j; | ||
| 235 | int i; | 236 | int i; |
| 236 | 237 | ||
| 237 | if (!dev_entry->hdev->mmu_enable) | 238 | if (!dev_entry->hdev->mmu_enable) |
| @@ -260,7 +261,7 @@ static int vm_show(struct seq_file *s, void *data) | |||
| 260 | } else { | 261 | } else { |
| 261 | phys_pg_pack = hnode->ptr; | 262 | phys_pg_pack = hnode->ptr; |
| 262 | seq_printf(s, | 263 | seq_printf(s, |
| 263 | " 0x%-14llx %-10u %-4u\n", | 264 | " 0x%-14llx %-10llu %-4u\n", |
| 264 | hnode->vaddr, phys_pg_pack->total_size, | 265 | hnode->vaddr, phys_pg_pack->total_size, |
| 265 | phys_pg_pack->handle); | 266 | phys_pg_pack->handle); |
| 266 | } | 267 | } |
| @@ -282,9 +283,9 @@ static int vm_show(struct seq_file *s, void *data) | |||
| 282 | phys_pg_pack->page_size); | 283 | phys_pg_pack->page_size); |
| 283 | seq_puts(s, " physical address\n"); | 284 | seq_puts(s, " physical address\n"); |
| 284 | seq_puts(s, "---------------------\n"); | 285 | seq_puts(s, "---------------------\n"); |
| 285 | for (i = 0 ; i < phys_pg_pack->npages ; i++) { | 286 | for (j = 0 ; j < phys_pg_pack->npages ; j++) { |
| 286 | seq_printf(s, " 0x%-14llx\n", | 287 | seq_printf(s, " 0x%-14llx\n", |
| 287 | phys_pg_pack->pages[i]); | 288 | phys_pg_pack->pages[j]); |
| 288 | } | 289 | } |
| 289 | } | 290 | } |
| 290 | spin_unlock(&vm->idr_lock); | 291 | spin_unlock(&vm->idr_lock); |
diff --git a/drivers/misc/habanalabs/habanalabs.h b/drivers/misc/habanalabs/habanalabs.h index a7c95e9f9b9a..806f0a5ee4d8 100644 --- a/drivers/misc/habanalabs/habanalabs.h +++ b/drivers/misc/habanalabs/habanalabs.h | |||
| @@ -793,11 +793,11 @@ struct hl_vm_hash_node { | |||
| 793 | * struct hl_vm_phys_pg_pack - physical page pack. | 793 | * struct hl_vm_phys_pg_pack - physical page pack. |
| 794 | * @vm_type: describes the type of the virtual area descriptor. | 794 | * @vm_type: describes the type of the virtual area descriptor. |
| 795 | * @pages: the physical page array. | 795 | * @pages: the physical page array. |
| 796 | * @npages: num physical pages in the pack. | ||
| 797 | * @total_size: total size of all the pages in this list. | ||
| 796 | * @mapping_cnt: number of shared mappings. | 798 | * @mapping_cnt: number of shared mappings. |
| 797 | * @asid: the context related to this list. | 799 | * @asid: the context related to this list. |
| 798 | * @npages: num physical pages in the pack. | ||
| 799 | * @page_size: size of each page in the pack. | 800 | * @page_size: size of each page in the pack. |
| 800 | * @total_size: total size of all the pages in this list. | ||
| 801 | * @flags: HL_MEM_* flags related to this list. | 801 | * @flags: HL_MEM_* flags related to this list. |
| 802 | * @handle: the provided handle related to this list. | 802 | * @handle: the provided handle related to this list. |
| 803 | * @offset: offset from the first page. | 803 | * @offset: offset from the first page. |
| @@ -807,11 +807,11 @@ struct hl_vm_hash_node { | |||
| 807 | struct hl_vm_phys_pg_pack { | 807 | struct hl_vm_phys_pg_pack { |
| 808 | enum vm_type_t vm_type; /* must be first */ | 808 | enum vm_type_t vm_type; /* must be first */ |
| 809 | u64 *pages; | 809 | u64 *pages; |
| 810 | u64 npages; | ||
| 811 | u64 total_size; | ||
| 810 | atomic_t mapping_cnt; | 812 | atomic_t mapping_cnt; |
| 811 | u32 asid; | 813 | u32 asid; |
| 812 | u32 npages; | ||
| 813 | u32 page_size; | 814 | u32 page_size; |
| 814 | u32 total_size; | ||
| 815 | u32 flags; | 815 | u32 flags; |
| 816 | u32 handle; | 816 | u32 handle; |
| 817 | u32 offset; | 817 | u32 offset; |
diff --git a/drivers/misc/habanalabs/memory.c b/drivers/misc/habanalabs/memory.c index 3a12fd1a5274..4f8c968e441a 100644 --- a/drivers/misc/habanalabs/memory.c +++ b/drivers/misc/habanalabs/memory.c | |||
| @@ -56,9 +56,9 @@ static int alloc_device_memory(struct hl_ctx *ctx, struct hl_mem_in *args, | |||
| 56 | struct hl_device *hdev = ctx->hdev; | 56 | struct hl_device *hdev = ctx->hdev; |
| 57 | struct hl_vm *vm = &hdev->vm; | 57 | struct hl_vm *vm = &hdev->vm; |
| 58 | struct hl_vm_phys_pg_pack *phys_pg_pack; | 58 | struct hl_vm_phys_pg_pack *phys_pg_pack; |
| 59 | u64 paddr = 0; | 59 | u64 paddr = 0, total_size, num_pgs, i; |
| 60 | u32 total_size, num_pgs, num_curr_pgs, page_size, page_shift; | 60 | u32 num_curr_pgs, page_size, page_shift; |
| 61 | int handle, rc, i; | 61 | int handle, rc; |
| 62 | bool contiguous; | 62 | bool contiguous; |
| 63 | 63 | ||
| 64 | num_curr_pgs = 0; | 64 | num_curr_pgs = 0; |
| @@ -73,7 +73,7 @@ static int alloc_device_memory(struct hl_ctx *ctx, struct hl_mem_in *args, | |||
| 73 | paddr = (u64) gen_pool_alloc(vm->dram_pg_pool, total_size); | 73 | paddr = (u64) gen_pool_alloc(vm->dram_pg_pool, total_size); |
| 74 | if (!paddr) { | 74 | if (!paddr) { |
| 75 | dev_err(hdev->dev, | 75 | dev_err(hdev->dev, |
| 76 | "failed to allocate %u huge contiguous pages\n", | 76 | "failed to allocate %llu huge contiguous pages\n", |
| 77 | num_pgs); | 77 | num_pgs); |
| 78 | return -ENOMEM; | 78 | return -ENOMEM; |
| 79 | } | 79 | } |
| @@ -267,7 +267,7 @@ static void free_phys_pg_pack(struct hl_device *hdev, | |||
| 267 | struct hl_vm_phys_pg_pack *phys_pg_pack) | 267 | struct hl_vm_phys_pg_pack *phys_pg_pack) |
| 268 | { | 268 | { |
| 269 | struct hl_vm *vm = &hdev->vm; | 269 | struct hl_vm *vm = &hdev->vm; |
| 270 | int i; | 270 | u64 i; |
| 271 | 271 | ||
| 272 | if (!phys_pg_pack->created_from_userptr) { | 272 | if (!phys_pg_pack->created_from_userptr) { |
| 273 | if (phys_pg_pack->contiguous) { | 273 | if (phys_pg_pack->contiguous) { |
| @@ -519,7 +519,7 @@ static inline int add_va_block(struct hl_device *hdev, | |||
| 519 | * - Return the start address of the virtual block | 519 | * - Return the start address of the virtual block |
| 520 | */ | 520 | */ |
| 521 | static u64 get_va_block(struct hl_device *hdev, | 521 | static u64 get_va_block(struct hl_device *hdev, |
| 522 | struct hl_va_range *va_range, u32 size, u64 hint_addr, | 522 | struct hl_va_range *va_range, u64 size, u64 hint_addr, |
| 523 | bool is_userptr) | 523 | bool is_userptr) |
| 524 | { | 524 | { |
| 525 | struct hl_vm_va_block *va_block, *new_va_block = NULL; | 525 | struct hl_vm_va_block *va_block, *new_va_block = NULL; |
| @@ -577,7 +577,8 @@ static u64 get_va_block(struct hl_device *hdev, | |||
| 577 | } | 577 | } |
| 578 | 578 | ||
| 579 | if (!new_va_block) { | 579 | if (!new_va_block) { |
| 580 | dev_err(hdev->dev, "no available va block for size %u\n", size); | 580 | dev_err(hdev->dev, "no available va block for size %llu\n", |
| 581 | size); | ||
| 581 | goto out; | 582 | goto out; |
| 582 | } | 583 | } |
| 583 | 584 | ||
| @@ -648,8 +649,8 @@ static int init_phys_pg_pack_from_userptr(struct hl_ctx *ctx, | |||
| 648 | struct hl_vm_phys_pg_pack *phys_pg_pack; | 649 | struct hl_vm_phys_pg_pack *phys_pg_pack; |
| 649 | struct scatterlist *sg; | 650 | struct scatterlist *sg; |
| 650 | dma_addr_t dma_addr; | 651 | dma_addr_t dma_addr; |
| 651 | u64 page_mask; | 652 | u64 page_mask, total_npages; |
| 652 | u32 npages, total_npages, page_size = PAGE_SIZE; | 653 | u32 npages, page_size = PAGE_SIZE; |
| 653 | bool first = true, is_huge_page_opt = true; | 654 | bool first = true, is_huge_page_opt = true; |
| 654 | int rc, i, j; | 655 | int rc, i, j; |
| 655 | 656 | ||
| @@ -750,9 +751,9 @@ static int map_phys_page_pack(struct hl_ctx *ctx, u64 vaddr, | |||
| 750 | struct hl_vm_phys_pg_pack *phys_pg_pack) | 751 | struct hl_vm_phys_pg_pack *phys_pg_pack) |
| 751 | { | 752 | { |
| 752 | struct hl_device *hdev = ctx->hdev; | 753 | struct hl_device *hdev = ctx->hdev; |
| 753 | u64 next_vaddr = vaddr, paddr; | 754 | u64 next_vaddr = vaddr, paddr, mapped_pg_cnt = 0, i; |
| 754 | u32 page_size = phys_pg_pack->page_size; | 755 | u32 page_size = phys_pg_pack->page_size; |
| 755 | int i, rc = 0, mapped_pg_cnt = 0; | 756 | int rc = 0; |
| 756 | 757 | ||
| 757 | for (i = 0 ; i < phys_pg_pack->npages ; i++) { | 758 | for (i = 0 ; i < phys_pg_pack->npages ; i++) { |
| 758 | paddr = phys_pg_pack->pages[i]; | 759 | paddr = phys_pg_pack->pages[i]; |
| @@ -764,7 +765,7 @@ static int map_phys_page_pack(struct hl_ctx *ctx, u64 vaddr, | |||
| 764 | rc = hl_mmu_map(ctx, next_vaddr, paddr, page_size); | 765 | rc = hl_mmu_map(ctx, next_vaddr, paddr, page_size); |
| 765 | if (rc) { | 766 | if (rc) { |
| 766 | dev_err(hdev->dev, | 767 | dev_err(hdev->dev, |
| 767 | "map failed for handle %u, npages: %d, mapped: %d", | 768 | "map failed for handle %u, npages: %llu, mapped: %llu", |
| 768 | phys_pg_pack->handle, phys_pg_pack->npages, | 769 | phys_pg_pack->handle, phys_pg_pack->npages, |
| 769 | mapped_pg_cnt); | 770 | mapped_pg_cnt); |
| 770 | goto err; | 771 | goto err; |
| @@ -985,10 +986,10 @@ static int unmap_device_va(struct hl_ctx *ctx, u64 vaddr) | |||
| 985 | struct hl_vm_hash_node *hnode = NULL; | 986 | struct hl_vm_hash_node *hnode = NULL; |
| 986 | struct hl_userptr *userptr = NULL; | 987 | struct hl_userptr *userptr = NULL; |
| 987 | enum vm_type_t *vm_type; | 988 | enum vm_type_t *vm_type; |
| 988 | u64 next_vaddr; | 989 | u64 next_vaddr, i; |
| 989 | u32 page_size; | 990 | u32 page_size; |
| 990 | bool is_userptr; | 991 | bool is_userptr; |
| 991 | int i, rc; | 992 | int rc; |
| 992 | 993 | ||
| 993 | /* protect from double entrance */ | 994 | /* protect from double entrance */ |
| 994 | mutex_lock(&ctx->mem_hash_lock); | 995 | mutex_lock(&ctx->mem_hash_lock); |
