Index: rockchip/rk_drm.c =================================================================== RCS file: /cvsroot/src/sys/arch/arm/rockchip/rk_drm.c,v retrieving revision 1.2 diff -p -u -r1.2 rk_drm.c --- rockchip/rk_drm.c 14 Nov 2019 20:39:46 -0000 1.2 +++ rockchip/rk_drm.c 15 Dec 2019 00:46:22 -0000 @@ -401,7 +401,8 @@ rk_drm_load(struct drm_device *ddev, uns if (num_crtc == 0) { aprint_error_dev(sc->sc_dev, "no display interface ports configured\n"); - return ENXIO; + error = ENXIO; + goto drmerr; } fbdev = kmem_zalloc(sizeof(*fbdev), KM_SLEEP); @@ -410,7 +411,7 @@ rk_drm_load(struct drm_device *ddev, uns error = drm_fb_helper_init(ddev, &fbdev->helper, num_crtc, num_crtc); if (error) - goto drmerr; + goto allocerr; fbdev->helper.fb = kmem_zalloc(sizeof(struct rk_drm_framebuffer), KM_SLEEP); @@ -426,9 +427,10 @@ rk_drm_load(struct drm_device *ddev, uns return 0; +allocerr: + kmem_free(fbdev, sizeof(*fbdev)); drmerr: drm_mode_config_cleanup(ddev); - kmem_free(fbdev, sizeof(*fbdev)); return error; } Index: sunxi/sunxi_drm.c =================================================================== RCS file: /cvsroot/src/sys/arch/arm/sunxi/sunxi_drm.c,v retrieving revision 1.9 diff -p -u -r1.9 sunxi_drm.c --- sunxi/sunxi_drm.c 24 Nov 2019 12:21:14 -0000 1.9 +++ sunxi/sunxi_drm.c 15 Dec 2019 00:46:22 -0000 @@ -440,7 +440,8 @@ sunxi_drm_load(struct drm_device *ddev, if (num_crtc == 0) { aprint_error_dev(sc->sc_dev, "no pipelines configured\n"); - return ENXIO; + error = ENXIO; + goto drmerr; } fbdev = kmem_zalloc(sizeof(*fbdev), KM_SLEEP); @@ -449,7 +450,7 @@ sunxi_drm_load(struct drm_device *ddev, error = drm_fb_helper_init(ddev, &fbdev->helper, num_crtc, num_crtc); if (error) - goto drmerr; + goto allocerr; fbdev->helper.fb = kmem_zalloc(sizeof(struct sunxi_drm_framebuffer), KM_SLEEP); @@ -465,9 +466,10 @@ sunxi_drm_load(struct drm_device *ddev, return 0; +allocerr: + kmem_free(fbdev, sizeof(*fbdev)); drmerr: drm_mode_config_cleanup(ddev); - kmem_free(fbdev, sizeof(*fbdev)); return error; } Index: ti/ti_lcdc.c =================================================================== RCS file: /cvsroot/src/sys/arch/arm/ti/ti_lcdc.c,v retrieving revision 1.3 diff -p -u -r1.3 ti_lcdc.c --- ti/ti_lcdc.c 4 Nov 2019 09:38:38 -0000 1.3 +++ ti/ti_lcdc.c 15 Dec 2019 00:46:22 -0000 @@ -622,12 +622,14 @@ tilcdc_load(struct drm_device *ddev, uns ep = fdt_endpoint_get_from_index(&sc->sc_ports, TILCDC_PORT_OUTPUT, 0); if (ep == NULL) { aprint_error_dev(sc->sc_dev, "couldn't find endpoint\n"); - return ENXIO; + error = ENXIO; + goto drmerr; } error = fdt_endpoint_activate_direct(ep, true); if (error != 0) { aprint_error_dev(sc->sc_dev, "couldn't activate endpoint: %d\n", error); - return error; + error = ENXIO; + goto drmerr; } fbdev = kmem_zalloc(sizeof(*fbdev), KM_SLEEP); @@ -636,7 +638,7 @@ tilcdc_load(struct drm_device *ddev, uns error = drm_fb_helper_init(ddev, &fbdev->helper, 1, 1); if (error) - goto drmerr; + goto allocerr; fbdev->helper.fb = kmem_zalloc(sizeof(struct tilcdc_framebuffer), KM_SLEEP); @@ -648,9 +650,10 @@ tilcdc_load(struct drm_device *ddev, uns return 0; +allocerr: + kmem_free(fbdev, sizeof(*fbdev)); drmerr: drm_mode_config_cleanup(ddev); - kmem_free(fbdev, sizeof(*fbdev)); return error; }