From ab59c4d9f17049610002678a5fd1bdeb7917f82d Mon Sep 17 00:00:00 2001 From: John Baldwin Date: Sat, 23 Jul 2016 14:38:09 +0000 Subject: [PATCH] Use MTX_SYSINIT for the VESA lock. vesa_init_done isn't a reliable guard for the mutex init. If vesa_configure() doesn't find valid VESA info it will not set vesa_init_done, but the lock will remain initialized. Revert r303076 and use MTX_SYSINIT to deterministically init the lock. Reviewed by: royger MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D7290 --- sys/dev/fb/vesa.c | 20 +++----------------- 1 file changed, 3 insertions(+), 17 deletions(-) diff --git a/sys/dev/fb/vesa.c b/sys/dev/fb/vesa.c index 810d5d88e99b..d1439ece8316 100644 --- a/sys/dev/fb/vesa.c +++ b/sys/dev/fb/vesa.c @@ -79,6 +79,7 @@ struct adp_state { typedef struct adp_state adp_state_t; static struct mtx vesa_lock; +MTX_SYSINIT(vesa_lock, &vesa_lock, "VESA lock", MTX_DEF); static int vesa_state; static void *vesa_state_buf; @@ -134,7 +135,6 @@ static vi_fill_rect_t vesa_fill_rect; static vi_bitblt_t vesa_bitblt; static vi_diag_t vesa_diag; static int vesa_bios_info(int level); -static int vesa_late_load(int flags); static video_switch_t vesavidsw = { vesa_probe, @@ -1142,7 +1142,7 @@ vesa_configure(int flags) * initialization for now and try again later. */ if (adp == NULL) { - vga_sub_configure = vesa_late_load; + vga_sub_configure = vesa_configure; return (ENODEV); } @@ -1909,28 +1909,15 @@ vesa_bios_info(int level) static int vesa_load(void) -{ - - return (vesa_late_load(0)); -} - -/* - * To be called from the vga_sub_configure hook in case the VGA adapter is - * not found when VESA is loaded. - */ -static int -vesa_late_load(int flags) { int error; if (vesa_init_done) return (0); - mtx_init(&vesa_lock, "VESA lock", NULL, MTX_DEF); - /* locate a VGA adapter */ vesa_adp = NULL; - error = vesa_configure(flags); + error = vesa_configure(0); if (error == 0) vesa_bios_info(bootverbose); @@ -1966,7 +1953,6 @@ vesa_unload(void) } vesa_bios_uninit(); - mtx_destroy(&vesa_lock); return (error); }