mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 18:50:05 +01:00
pv-grub: fix boot crash when no fb is available
When no fb is available, init_fbfront will return, so the local semaphore for synchronization with the kbd thread would get dropped. Using a global static semaphore instead fixes this. Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org> xen-unstable changeset: 21105:a3f7352d83eb xen-unstable date: Tue Apr 06 07:13:01 2010 +0100
This commit is contained in:
1 parent
16d51b88a1
commit
07035f5c69
1 file changed
+4
-6
@@ -651,12 +651,11 @@ int console_getkey (void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static DECLARE_MUTEX_LOCKED(kbd_sem);
|
||||
static void kbd_thread(void *p)
|
||||
{
|
||||
struct semaphore *sem = p;
|
||||
|
||||
kbd_dev = init_kbdfront(NULL, 1);
|
||||
up(sem);
|
||||
up(&kbd_sem);
|
||||
}
|
||||
|
||||
struct fbfront_dev *fb_open(void *fb, int width, int height, int depth)
|
||||
@@ -665,10 +664,9 @@ struct fbfront_dev *fb_open(void *fb, int width, int height, int depth)
|
||||
int linesize = width * (depth / 8);
|
||||
int memsize = linesize * height;
|
||||
int numpages = (memsize + PAGE_SIZE - 1) / PAGE_SIZE;
|
||||
DECLARE_MUTEX_LOCKED(sem);
|
||||
int i;
|
||||
|
||||
create_thread("kbdfront", kbd_thread, &sem);
|
||||
create_thread("kbdfront", kbd_thread, &kbd_sem);
|
||||
|
||||
mfns = malloc(numpages * sizeof(*mfns));
|
||||
for (i = 0; i < numpages; i++) {
|
||||
@@ -681,7 +679,7 @@ struct fbfront_dev *fb_open(void *fb, int width, int height, int depth)
|
||||
if (!fb_dev)
|
||||
return NULL;
|
||||
|
||||
down(&sem);
|
||||
down(&kbd_sem);
|
||||
if (!kbd_dev)
|
||||
return NULL;
|
||||
|
||||
|
||||