Date: Sat, 23 Jul 2016 14:38:09 +0000 (UTC) From: John Baldwin <jhb@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r303225 - head/sys/dev/fb Message-ID: <201607231438.u6NEc9fG075708@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: jhb Date: Sat Jul 23 14:38:09 2016 New Revision: 303225 URL: https://svnweb.freebsd.org/changeset/base/303225 Log: 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 Modified: head/sys/dev/fb/vesa.c Modified: head/sys/dev/fb/vesa.c ============================================================================== --- head/sys/dev/fb/vesa.c Sat Jul 23 12:34:32 2016 (r303224) +++ head/sys/dev/fb/vesa.c Sat Jul 23 14:38:09 2016 (r303225) @@ -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); } @@ -1910,27 +1910,14 @@ 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); }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201607231438.u6NEc9fG075708>