diff options
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/bar_init.c | 19 | ||||
| -rw-r--r-- | kernel/main.c | 5 |
2 files changed, 18 insertions, 6 deletions
diff --git a/kernel/bar_init.c b/kernel/bar_init.c index f4c982a..b5703d8 100644 --- a/kernel/bar_init.c +++ b/kernel/bar_init.c @@ -56,20 +56,31 @@ int nv_vgpu_bar_init(struct nv_vgpu_device *vgpu) bar_size = pci_resource_len(pdev, 1); if (bar_addr && bar_size) { vgpu->bars[1].gpa = bar_addr; - vgpu->bars[1].size = bar_size; + /* + * m143 (1.0 VRAM sizes): expose the EMULATED framebuffer size as + * BAR1's size, not the physical aperture. The guest derives its + * BAR1 from the VFIO region info (config-space BAR writes are + * ignored) and every GSCI/PFB report already carries + * fb_emul_size; leaving the physical 256 MB here made 1G/2G types + * tell the guest one size and expose another (the shadow is + * fb_emul_size, so vidmem bounds and mmap math must match it). + */ + vgpu->bars[1].size = nv_vgpu_fb_emul_size(vgpu); /* Emulated vidmem: a dedicated host-RAM buffer backing the guest's * VRAM aperture. Do NOT map the host GPU's real BAR1 - guest VRAM * accesses must hit our own clean buffer, not the (broken) host * GPU's VRAM. Allocated lazily on first use to keep mdev create - * cheap; 256MB to match the GSCI fb size. */ + * cheap; sized by the mdev type (512M/1G/2G). */ vgpu->bars[1].vaddr = vzalloc(nv_vgpu_fb_emul_size(vgpu)); if (!vgpu->bars[1].vaddr) { nv_vgpu_err(vgpu, "Failed to allocate emulated vidmem (%llu MiB)", (unsigned long long)(nv_vgpu_fb_emul_size(vgpu) >> 20)); return -ENOMEM; } - nv_vgpu_info(vgpu, "BAR1: gpa=0x%llx, size=0x%llx, emulated vidmem=%p", - bar_addr, bar_size, vgpu->bars[1].vaddr); + nv_vgpu_info(vgpu, "BAR1: gpa=0x%llx, size=0x%llx (emulated, %llu MiB), emulated vidmem=%p", + bar_addr, vgpu->bars[1].size, + (unsigned long long)(nv_vgpu_fb_emul_size(vgpu) >> 20), + vgpu->bars[1].vaddr); } bar_addr = pci_resource_start(pdev, 2); diff --git a/kernel/main.c b/kernel/main.c index 258de41..ac970f1 100644 --- a/kernel/main.c +++ b/kernel/main.c @@ -387,15 +387,16 @@ EXPORT_SYMBOL(nv_vgpu_find_type_info); static void nv_vgpu_create_static_types(void) { int i; - struct nv_vgpu_type_info static_types[5] = { + struct nv_vgpu_type_info static_types[6] = { { .name = "nvidia-vgpu-ampere", .description = "NVIDIA Ampere vGPU", .vdev_id = 0x10de2235, .pdev_id = 0x10de2235, .max_instances = 1, .vram_mb = 512 }, { .name = "nvidia-vgpu-hopper", .description = "NVIDIA Hopper vGPU", .vdev_id = 0x10de2331, .pdev_id = 0x10de2331, .max_instances = 1, .vram_mb = 512 }, { .name = "nvidia-vgpu-turing", .description = "NVIDIA Turing vGPU", .vdev_id = 0x10de1ed3, .pdev_id = 0x10de1ed3, .max_instances = 2, .vram_mb = 512 }, { .name = "nvidia-vgpu-turing-1g", .description = "NVIDIA Turing vGPU (1 GiB)", .vdev_id = 0x10de1ed3, .pdev_id = 0x10de1ed3, .max_instances = 2, .vram_mb = 1024 }, + { .name = "nvidia-vgpu-turing-2g", .description = "NVIDIA Turing vGPU (2 GiB)", .vdev_id = 0x10de1ed3, .pdev_id = 0x10de1ed3, .max_instances = 2, .vram_mb = 2048 }, { .name = "nvidia-vgpu-pascal", .description = "NVIDIA Pascal vGPU", .vdev_id = 0x10de1db1, .pdev_id = 0x10de1db1, .max_instances = 1, .vram_mb = 512 }, }; - for (i = 0; i < 5; i++) { + for (i = 0; i < 6; i++) { nv_vgpu_register_type_info(&static_types[i]); } } |
