This code is now only here for some unfortunate Intel graphics chips based on PowerVR, and I don't have a machine with one of those. vga_post_init() gets called from vga_attach() in any case, and vga_post_free() doesn't seem to be called at all. I've booted this on amd64 (real) and i386 (virtualized) with no problems.
ok? diff --git sys/arch/amd64/pci/vga_post.c sys/arch/amd64/pci/vga_post.c index 32876649ddd..36596490d35 100644 --- sys/arch/amd64/pci/vga_post.c +++ sys/arch/amd64/pci/vga_post.c @@ -125,13 +125,15 @@ vga_post_init(int bus, int device, int function) vaddr_t sys_image, sys_bios_data; int err; - sys_bios_data = uvm_km_valloc(kernel_map, PAGE_SIZE); + sys_bios_data = (vaddr_t)km_alloc(PAGE_SIZE, &kv_any, &kp_none, + &kd_nowait); if (sys_bios_data == 0) return NULL; - sys_image = uvm_km_valloc(kernel_map, 1024 * 1024); + sys_image = (vaddr_t)km_alloc(1024 * 1024, &kv_any, &kp_none, + &kd_nowait); if (sys_image == 0) { - uvm_km_free(kernel_map, sys_bios_data, PAGE_SIZE); + km_free((void *)sys_bios_data, PAGE_SIZE, &kv_any, &kp_none); return NULL; } sc = malloc(sizeof(*sc), M_DEVBUF, M_WAITOK|M_ZERO); @@ -140,7 +142,7 @@ vga_post_init(int bus, int device, int function) err = uvm_pglistalloc(BASE_MEMORY, 0, (paddr_t)-1, 0, 0, &sc->ram_backing, BASE_MEMORY/PAGE_SIZE, UVM_PLA_WAITOK); if (err) { - uvm_km_free(kernel_map, sc->sys_image, 1024 * 1024); + km_free((void *)sc->sys_image, 1024 * 1024, &kv_any, &kp_none); free(sc, M_DEVBUF, sizeof(*sc)); return NULL; } @@ -152,7 +154,7 @@ vga_post_init(int bus, int device, int function) pmap_update(pmap_kernel()); memcpy((void *)sc->bios_data, (void *)sys_bios_data, PAGE_SIZE); pmap_kremove(sys_bios_data, PAGE_SIZE); - uvm_km_free(kernel_map, sys_bios_data, PAGE_SIZE); + km_free((void *)sys_bios_data, PAGE_SIZE, &kv_any, &kp_none); iter = 0; TAILQ_FOREACH(pg, &sc->ram_backing, pageq) { @@ -209,7 +211,7 @@ vga_post_free(struct vga_post *sc) { uvm_pglistfree(&sc->ram_backing); pmap_kremove(sc->sys_image, 1024 * 1024); - uvm_km_free(kernel_map, sc->sys_image, 1024 * 1024); + km_free((void *)sc->sys_image, 1024 * 1024, &kv_any, &kp_none) pmap_update(pmap_kernel()); free(sc, M_DEVBUF, sizeof(*sc)); } diff --git sys/arch/i386/pci/vga_post.c sys/arch/i386/pci/vga_post.c index c85ee05dcdb..2464fd6019c 100644 --- sys/arch/i386/pci/vga_post.c +++ sys/arch/i386/pci/vga_post.c @@ -126,13 +126,15 @@ vga_post_init(int bus, int device, int function) vaddr_t sys_image, sys_bios_data; int err; - sys_bios_data = uvm_km_valloc(kernel_map, PAGE_SIZE); + sys_bios_data = (vaddr_t)km_alloc(PAGE_SIZE, &kv_any, &kp_none, + &kd_nowait); if (sys_bios_data == 0) return NULL; - sys_image = uvm_km_valloc(kernel_map, 1024 * 1024); + sys_image = (vaddr_t)km_alloc(1024 * 1024, &kv_any, &kp_none, + &kd_nowait); if (sys_image == 0) { - uvm_km_free(kernel_map, sys_bios_data, PAGE_SIZE); + km_free((void *)sys_bios_data, PAGE_SIZE, &kv_any, &kp_none); return NULL; } sc = malloc(sizeof(*sc), M_DEVBUF, M_WAITOK|M_ZERO); @@ -141,7 +143,7 @@ vga_post_init(int bus, int device, int function) err = uvm_pglistalloc(BASE_MEMORY, 0, (paddr_t)-1, 0, 0, &sc->ram_backing, BASE_MEMORY/PAGE_SIZE, UVM_PLA_WAITOK); if (err) { - uvm_km_free(kernel_map, sc->sys_image, 1024 * 1024); + km_free((void *)sc->sys_image, 1024 * 1024, &kv_any, &kp_none); free(sc, M_DEVBUF, sizeof *sc); return NULL; } @@ -153,7 +155,7 @@ vga_post_init(int bus, int device, int function) pmap_update(pmap_kernel()); memcpy((void *)sc->bios_data, (void *)sys_bios_data, PAGE_SIZE); pmap_kremove(sys_bios_data, PAGE_SIZE); - uvm_km_free(kernel_map, sys_bios_data, PAGE_SIZE); + km_free((void *)sys_bios_data, PAGE_SIZE, &kv_any, &kp_none); iter = 0; TAILQ_FOREACH(pg, &sc->ram_backing, pageq) { @@ -211,7 +213,7 @@ vga_post_free(struct vga_post *sc) uvm_pglistfree(&sc->ram_backing); pmap_kremove(sc->sys_image, 1024 * 1024); - uvm_km_free(kernel_map, sc->sys_image, 1024 * 1024); + km_free((void *)sc->sys_image, 1024 * 1024, &kv_any, &kp_none); pmap_update(pmap_kernel()); free(sc, M_DEVBUF, sizeof *sc); }