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
This commit is contained in:
parent
b3033826a6
commit
ab59c4d9f1
@ -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);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user