svn commit: r303225 - head/sys/dev/fb

John Baldwin jhb at FreeBSD.org
Sat Jul 23 14:38:10 UTC 2016


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


More information about the svn-src-head mailing list