mirror of
git://nv-tegra.nvidia.com/linux-nvgpu.git
synced 2025-12-22 09:12:24 +03:00
gpu: nvgpu: accept small_big_split in vm_init
Currently, when unified address space is not requested, nvgpu_vm_init splits user vm at a fixed address of 56G. Modify nvgpu_vm_init to allow user to specify small big page vm split. JIRA NVGPU-5302 Change-Id: I6ed33a4dc080f10a723cb9bd486f0d36c0cee0e9 Signed-off-by: Vedashree Vidwans <vvidwans@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/c/linux-nvgpu/+/2428326 Reviewed-by: automaticguardword <automaticguardword@nvidia.com> Reviewed-by: svc-mobile-coverity <svc-mobile-coverity@nvidia.com> Reviewed-by: svc-mobile-misra <svc-mobile-misra@nvidia.com> Reviewed-by: svc-mobile-cert <svc-mobile-cert@nvidia.com> Reviewed-by: Sami Kiminki <skiminki@nvidia.com> Reviewed-by: Alex Waterman <alexw@nvidia.com> Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> GVS: Gerrit_Virtual_Submit Tested-by: Sami Kiminki <skiminki@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
This commit is contained in:
committed by
Alex Waterman
parent
7f9ce100f8
commit
00d1e10ff2
@@ -63,7 +63,8 @@ int test_gr_ctx_error_injection(struct unit_module *m,
|
||||
|
||||
vm = nvgpu_vm_init(g, SZ_4K, SZ_4K << 10,
|
||||
nvgpu_safe_sub_u64(1ULL << 37, SZ_4K << 10),
|
||||
(1ULL << 32), false, false, false, "dummy");
|
||||
(1ULL << 32), 0ULL,
|
||||
false, false, false, "dummy");
|
||||
if (!vm) {
|
||||
unit_return_fail(m, "failed to allocate VM");
|
||||
}
|
||||
|
||||
@@ -796,7 +796,8 @@ int test_gr_init_hal_error_injection(struct unit_module *m,
|
||||
|
||||
vm = nvgpu_vm_init(g, SZ_4K, SZ_4K << 10,
|
||||
nvgpu_safe_sub_u64(1ULL << 37, SZ_4K << 10),
|
||||
(1ULL << 32), false, false, false, "dummy");
|
||||
(1ULL << 32), 0ULL,
|
||||
false, false, false, "dummy");
|
||||
if (!vm) {
|
||||
unit_return_fail(m, "failed to allocate VM");
|
||||
}
|
||||
|
||||
@@ -148,7 +148,8 @@ int test_gr_obj_ctx_error_injection(struct unit_module *m,
|
||||
/* Setup VM */
|
||||
vm = nvgpu_vm_init(g, SZ_4K, SZ_4K << 10,
|
||||
nvgpu_safe_sub_u64(1ULL << 37, SZ_4K << 10),
|
||||
(1ULL << 32), false, false, false, "dummy");
|
||||
(1ULL << 32), 0ULL,
|
||||
false, false, false, "dummy");
|
||||
if (!vm) {
|
||||
unit_return_fail(m, "failed to allocate VM");
|
||||
}
|
||||
|
||||
@@ -102,6 +102,7 @@ static struct vm_gk20a *init_vm_env(struct unit_module *m, struct gk20a *g,
|
||||
low_hole,
|
||||
0ULL,
|
||||
nvgpu_safe_sub_u64(aperture_size, low_hole),
|
||||
0ULL,
|
||||
big_pages,
|
||||
false,
|
||||
false,
|
||||
|
||||
@@ -196,6 +196,7 @@ static int init_mm(struct unit_module *m, struct gk20a *g)
|
||||
low_hole,
|
||||
0ULL,
|
||||
nvgpu_safe_sub_u64(aperture_size, low_hole),
|
||||
0ULL,
|
||||
true,
|
||||
false,
|
||||
false,
|
||||
|
||||
@@ -355,6 +355,7 @@ static int init_mm(struct unit_module *m, struct gk20a *g)
|
||||
low_hole,
|
||||
0ULL,
|
||||
nvgpu_safe_sub_u64(aperture_size, low_hole),
|
||||
0ULL,
|
||||
true,
|
||||
false,
|
||||
false,
|
||||
@@ -978,6 +979,7 @@ static struct vm_gk20a *init_test_req_vm(struct gk20a *g)
|
||||
|
||||
return nvgpu_vm_init(g, g->ops.mm.gmmu.get_default_big_page_size(),
|
||||
low_hole, user_reserved, kernel_reserved,
|
||||
nvgpu_gmmu_va_small_page_limit(),
|
||||
big_pages, true, true, "testmem");
|
||||
}
|
||||
|
||||
|
||||
@@ -161,6 +161,7 @@ static int init_mm(struct unit_module *m, struct gk20a *g)
|
||||
low_hole,
|
||||
0ULL,
|
||||
nvgpu_safe_sub_u64(aperture_size, low_hole),
|
||||
0ULL,
|
||||
true,
|
||||
false,
|
||||
false,
|
||||
|
||||
@@ -150,6 +150,7 @@ static int init_mm(struct unit_module *m, struct gk20a *g)
|
||||
low_hole,
|
||||
0ULL,
|
||||
nvgpu_safe_sub_u64(aperture_size, low_hole),
|
||||
0ULL,
|
||||
true,
|
||||
false,
|
||||
false,
|
||||
@@ -163,7 +164,7 @@ static int init_mm(struct unit_module *m, struct gk20a *g)
|
||||
mm->bar1.vm = nvgpu_vm_init(g,
|
||||
g->ops.mm.gmmu.get_default_big_page_size(),
|
||||
SZ_4K, 0ULL, nvgpu_safe_sub_u64(mm->bar1.aperture_size, SZ_4K),
|
||||
false, false, false, "bar1");
|
||||
0ULL, false, false, false, "bar1");
|
||||
if (mm->bar1.vm == NULL) {
|
||||
unit_return_fail(m, "'bar1' nvgpu_vm_init failed\n");
|
||||
}
|
||||
|
||||
@@ -141,6 +141,7 @@ static int init_mm(struct unit_module *m, struct gk20a *g)
|
||||
low_hole,
|
||||
0ULL,
|
||||
nvgpu_safe_sub_u64(aperture_size, low_hole),
|
||||
0ULL,
|
||||
true,
|
||||
false,
|
||||
false,
|
||||
|
||||
@@ -136,6 +136,7 @@ static int init_mm(struct unit_module *m, struct gk20a *g)
|
||||
low_hole,
|
||||
0ULL,
|
||||
nvgpu_safe_sub_u64(aperture_size, low_hole),
|
||||
0ULL,
|
||||
true,
|
||||
false,
|
||||
false,
|
||||
@@ -149,7 +150,7 @@ static int init_mm(struct unit_module *m, struct gk20a *g)
|
||||
mm->bar2.vm = nvgpu_vm_init(g,
|
||||
g->ops.mm.gmmu.get_default_big_page_size(),
|
||||
SZ_4K, 0ULL, nvgpu_safe_sub_u64(mm->bar2.aperture_size, SZ_4K),
|
||||
false, false, false, "bar2");
|
||||
0ULL, false, false, false, "bar2");
|
||||
if (mm->bar2.vm == NULL) {
|
||||
unit_return_fail(m, "'bar2' nvgpu_vm_init failed\n");
|
||||
}
|
||||
|
||||
@@ -176,6 +176,7 @@ static int init_mm(struct unit_module *m, struct gk20a *g)
|
||||
low_hole,
|
||||
0ULL,
|
||||
nvgpu_safe_sub_u64(aperture_size, low_hole),
|
||||
0ULL,
|
||||
true,
|
||||
false,
|
||||
false,
|
||||
@@ -189,7 +190,7 @@ static int init_mm(struct unit_module *m, struct gk20a *g)
|
||||
mm->bar2.vm = nvgpu_vm_init(g,
|
||||
g->ops.mm.gmmu.get_default_big_page_size(),
|
||||
SZ_4K, 0ULL, nvgpu_safe_sub_u64(mm->bar2.aperture_size, SZ_4K),
|
||||
false, false, false, "bar2");
|
||||
0ULL, false, false, false, "bar2");
|
||||
if (mm->bar2.vm == NULL) {
|
||||
unit_return_fail(m, "'bar2' nvgpu_vm_init failed\n");
|
||||
}
|
||||
|
||||
@@ -201,6 +201,7 @@ static int init_mm(struct unit_module *m, struct gk20a *g)
|
||||
low_hole,
|
||||
0ULL,
|
||||
nvgpu_safe_sub_u64(aperture_size, low_hole),
|
||||
0ULL,
|
||||
true,
|
||||
false,
|
||||
false,
|
||||
@@ -214,7 +215,7 @@ static int init_mm(struct unit_module *m, struct gk20a *g)
|
||||
mm->bar2.vm = nvgpu_vm_init(g,
|
||||
g->ops.mm.gmmu.get_default_big_page_size(),
|
||||
SZ_4K, 0ULL, nvgpu_safe_sub_u64(mm->bar2.aperture_size, SZ_4K),
|
||||
false, false, false, "bar2");
|
||||
0ULL, false, false, false, "bar2");
|
||||
if (mm->bar2.vm == NULL) {
|
||||
unit_return_fail(m, "'bar2' nvgpu_vm_init failed\n");
|
||||
}
|
||||
|
||||
@@ -225,6 +225,7 @@ static struct vm_gk20a *create_test_vm(struct unit_module *m, struct gk20a *g)
|
||||
low_hole,
|
||||
user_vma,
|
||||
kernel_reserved,
|
||||
nvgpu_gmmu_va_small_page_limit(),
|
||||
true,
|
||||
false,
|
||||
true,
|
||||
@@ -924,6 +925,7 @@ int test_init_error_paths(struct unit_module *m, struct gk20a *g, void *__args)
|
||||
low_hole,
|
||||
user_vma,
|
||||
kernel_reserved,
|
||||
nvgpu_gmmu_va_small_page_limit(),
|
||||
big_pages,
|
||||
false,
|
||||
true,
|
||||
@@ -945,6 +947,7 @@ int test_init_error_paths(struct unit_module *m, struct gk20a *g, void *__args)
|
||||
low_hole,
|
||||
user_vma,
|
||||
default_aperture_size, /* invalid aperture size */
|
||||
nvgpu_gmmu_va_small_page_limit(),
|
||||
big_pages,
|
||||
false,
|
||||
true,
|
||||
@@ -962,6 +965,7 @@ int test_init_error_paths(struct unit_module *m, struct gk20a *g, void *__args)
|
||||
nvgpu_vm_do_init(&g->mm, vm,
|
||||
g->ops.mm.gmmu.get_default_big_page_size(),
|
||||
low_hole, user_vma, kernel_reserved,
|
||||
nvgpu_gmmu_va_small_page_limit(),
|
||||
big_pages, false, true, __func__)
|
||||
)) {
|
||||
unit_err(m, "BUG() was not called but it was expected (3).\n");
|
||||
@@ -975,6 +979,7 @@ int test_init_error_paths(struct unit_module *m, struct gk20a *g, void *__args)
|
||||
ret = nvgpu_vm_do_init(&g->mm, vm,
|
||||
g->ops.mm.gmmu.get_default_big_page_size(),
|
||||
low_hole, user_vma, kernel_reserved,
|
||||
nvgpu_gmmu_va_small_page_limit(),
|
||||
big_pages, true, true, __func__);
|
||||
g->is_virtual = false;
|
||||
if (ret != -ENOSYS) {
|
||||
@@ -988,6 +993,7 @@ int test_init_error_paths(struct unit_module *m, struct gk20a *g, void *__args)
|
||||
ret = nvgpu_vm_do_init(&g->mm, vm,
|
||||
g->ops.mm.gmmu.get_default_big_page_size(),
|
||||
low_hole, user_vma, kernel_reserved,
|
||||
nvgpu_gmmu_va_small_page_limit(),
|
||||
big_pages, true, true, __func__);
|
||||
g->ops.mm.vm_as_alloc_share = hal_vm_as_alloc_share_success;
|
||||
if (ret != -1) {
|
||||
@@ -996,18 +1002,7 @@ int test_init_error_paths(struct unit_module *m, struct gk20a *g, void *__args)
|
||||
goto exit;
|
||||
}
|
||||
|
||||
/* Invalid VM configuration */
|
||||
low_hole += nvgpu_gmmu_va_small_page_limit();
|
||||
if (!EXPECT_BUG(
|
||||
nvgpu_vm_do_init(&g->mm, vm,
|
||||
g->ops.mm.gmmu.get_default_big_page_size(),
|
||||
low_hole, user_vma, kernel_reserved,
|
||||
big_pages, false, false, __func__)
|
||||
)) {
|
||||
unit_err(m, "BUG() was not called but it was expected (6).\n");
|
||||
ret = UNIT_FAIL;
|
||||
goto exit;
|
||||
}
|
||||
/* Invalid VM configuration - This scenario is not feasible */
|
||||
low_hole = SZ_1M * 64;
|
||||
|
||||
/* Cause nvgpu_gmmu_init_page_table to fail */
|
||||
@@ -1015,6 +1010,7 @@ int test_init_error_paths(struct unit_module *m, struct gk20a *g, void *__args)
|
||||
ret = nvgpu_vm_do_init(&g->mm, vm,
|
||||
g->ops.mm.gmmu.get_default_big_page_size(),
|
||||
low_hole, user_vma, kernel_reserved,
|
||||
nvgpu_gmmu_va_small_page_limit(),
|
||||
big_pages, false, true, __func__);
|
||||
nvgpu_posix_enable_fault_injection(kmem_fi, false, 0);
|
||||
if (ret != -ENOMEM) {
|
||||
@@ -1028,6 +1024,7 @@ int test_init_error_paths(struct unit_module *m, struct gk20a *g, void *__args)
|
||||
ret = nvgpu_vm_do_init(&g->mm, vm,
|
||||
g->ops.mm.gmmu.get_default_big_page_size(),
|
||||
low_hole, user_vma, kernel_reserved,
|
||||
nvgpu_gmmu_va_small_page_limit(),
|
||||
big_pages, false, true, __func__);
|
||||
nvgpu_posix_enable_fault_injection(kmem_fi, false, 0);
|
||||
if (ret != -ENOMEM) {
|
||||
@@ -1041,6 +1038,7 @@ int test_init_error_paths(struct unit_module *m, struct gk20a *g, void *__args)
|
||||
ret = nvgpu_vm_do_init(&g->mm, vm,
|
||||
g->ops.mm.gmmu.get_default_big_page_size(),
|
||||
low_hole, user_vma, kernel_reserved,
|
||||
nvgpu_gmmu_va_small_page_limit(),
|
||||
big_pages, false, false, __func__);
|
||||
nvgpu_posix_enable_fault_injection(kmem_fi, false, 0);
|
||||
if (ret != -ENOMEM) {
|
||||
@@ -1054,6 +1052,7 @@ int test_init_error_paths(struct unit_module *m, struct gk20a *g, void *__args)
|
||||
ret = nvgpu_vm_do_init(&g->mm, vm,
|
||||
g->ops.mm.gmmu.get_default_big_page_size(),
|
||||
low_hole, user_vma, kernel_reserved,
|
||||
nvgpu_gmmu_va_small_page_limit(),
|
||||
big_pages, false, false, __func__);
|
||||
nvgpu_posix_enable_fault_injection(kmem_fi, false, 0);
|
||||
if (ret != -ENOMEM) {
|
||||
@@ -1067,8 +1066,9 @@ int test_init_error_paths(struct unit_module *m, struct gk20a *g, void *__args)
|
||||
ret = nvgpu_vm_do_init(&g->mm, vm,
|
||||
g->ops.mm.gmmu.get_default_big_page_size(),
|
||||
nvgpu_gmmu_va_small_page_limit(),
|
||||
((u64)SZ_1G * 200U), 0, big_pages, false, false,
|
||||
__func__);
|
||||
((u64)SZ_1G * 200U), 0,
|
||||
nvgpu_gmmu_va_small_page_limit(), big_pages,
|
||||
false, false, __func__);
|
||||
vm->guest_managed = false;
|
||||
if (ret != -EINVAL) {
|
||||
unit_err(m, "nvgpu_vm_do_init didn't fail as expected (11).\n");
|
||||
@@ -1080,6 +1080,7 @@ int test_init_error_paths(struct unit_module *m, struct gk20a *g, void *__args)
|
||||
ret = nvgpu_vm_do_init(&g->mm, vm,
|
||||
g->ops.mm.gmmu.get_default_big_page_size(),
|
||||
low_hole, user_vma, kernel_reserved,
|
||||
nvgpu_gmmu_va_small_page_limit(),
|
||||
big_pages, false, false,
|
||||
"very_long_vm_name_to_fail_vm_init");
|
||||
if (ret != -EINVAL) {
|
||||
@@ -1092,6 +1093,7 @@ int test_init_error_paths(struct unit_module *m, struct gk20a *g, void *__args)
|
||||
ret = nvgpu_vm_do_init(&g->mm, vm,
|
||||
g->ops.mm.gmmu.get_default_big_page_size(),
|
||||
low_hole, user_vma, kernel_reserved,
|
||||
nvgpu_gmmu_va_small_page_limit(),
|
||||
big_pages, false, false, __func__);
|
||||
if (ret != 0) {
|
||||
unit_err(m, "nvgpu_vm_do_init did not succeed as expected (B).\n");
|
||||
@@ -1103,6 +1105,7 @@ int test_init_error_paths(struct unit_module *m, struct gk20a *g, void *__args)
|
||||
ret = nvgpu_vm_do_init(&g->mm, vm,
|
||||
g->ops.mm.gmmu.get_default_big_page_size(),
|
||||
low_hole, user_vma, kernel_reserved,
|
||||
nvgpu_gmmu_va_small_page_limit(),
|
||||
false, false, false, __func__);
|
||||
if (ret != 0) {
|
||||
unit_err(m, "nvgpu_vm_do_init did not succeed as expected (C).\n");
|
||||
@@ -1114,7 +1117,8 @@ int test_init_error_paths(struct unit_module *m, struct gk20a *g, void *__args)
|
||||
ret = nvgpu_vm_do_init(&g->mm, vm,
|
||||
g->ops.mm.gmmu.get_default_big_page_size(),
|
||||
nvgpu_gmmu_va_small_page_limit(),
|
||||
0ULL, kernel_reserved, big_pages,
|
||||
0ULL, kernel_reserved,
|
||||
nvgpu_gmmu_va_small_page_limit(), big_pages,
|
||||
false, false, __func__);
|
||||
if (ret != 0) {
|
||||
unit_err(m, "nvgpu_vm_do_init did not succeed as expected (D).\n");
|
||||
@@ -1200,6 +1204,7 @@ int test_map_buf(struct unit_module *m, struct gk20a *g, void *__args)
|
||||
low_hole,
|
||||
user_vma,
|
||||
kernel_reserved,
|
||||
nvgpu_gmmu_va_small_page_limit(),
|
||||
big_pages,
|
||||
false,
|
||||
true,
|
||||
@@ -1445,6 +1450,7 @@ int test_map_buf_gpu_va(struct unit_module *m,
|
||||
low_hole,
|
||||
user_vma,
|
||||
kernel_reserved,
|
||||
nvgpu_gmmu_va_small_page_limit(),
|
||||
big_pages,
|
||||
false,
|
||||
true,
|
||||
@@ -1717,6 +1723,7 @@ int test_batch(struct unit_module *m, struct gk20a *g, void *__args)
|
||||
low_hole,
|
||||
user_vma,
|
||||
kernel_reserved,
|
||||
nvgpu_gmmu_va_small_page_limit(),
|
||||
big_pages,
|
||||
false,
|
||||
true,
|
||||
|
||||
@@ -88,6 +88,7 @@ static int init_channel_vm(struct unit_module *m, struct nvgpu_channel *ch)
|
||||
low_hole,
|
||||
0ULL,
|
||||
nvgpu_safe_sub_u64(aperture_size, low_hole),
|
||||
0ULL,
|
||||
true,
|
||||
false,
|
||||
false,
|
||||
|
||||
Reference in New Issue
Block a user