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);
 }

Reply via email to