> Date: Sat, 2 Jan 2021 18:39:03 +1000
> From: Jonathan Matthew <[email protected]>
> 
> 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?

ok kettenis@

> 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