diff options
author | Keir Fraser <keir.fraser@citrix.com> | 2010-04-12 18:02:19 +0100 |
---|---|---|
committer | Keir Fraser <keir.fraser@citrix.com> | 2010-04-12 18:02:19 +0100 |
commit | 07035f5c69299452bc9750fd8bbdd9a308c8bbba (patch) | |
tree | 61629a80f72bee90ccdf3708550f82b7c552aa91 | |
parent | 16d51b88a1fc4ac481b124ed11d0e6938c4b8e53 (diff) | |
download | xen-07035f5c69299452bc9750fd8bbdd9a308c8bbba.tar.gz xen-07035f5c69299452bc9750fd8bbdd9a308c8bbba.tar.bz2 xen-07035f5c69299452bc9750fd8bbdd9a308c8bbba.zip |
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
-rw-r--r-- | stubdom/grub/mini-os.c | 10 |
1 files changed, 4 insertions, 6 deletions
diff --git a/stubdom/grub/mini-os.c b/stubdom/grub/mini-os.c index 4f1804170b..251e2ad000 100644 --- a/stubdom/grub/mini-os.c +++ b/stubdom/grub/mini-os.c @@ -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; |