vancouver: Avoid busy startup synchronizations

This commit is contained in:
Norman Feske 2013-05-16 20:33:13 +02:00
parent 78204b8f49
commit c48a7aa27f
5 changed files with 13 additions and 10 deletions

View File

@ -34,7 +34,6 @@ extern char _binary_mono_tff_start;
Font default_font(&_binary_mono_tff_start);
extern Genode::Lock global_lock;
extern bool console_init;
using Genode::env;
using Genode::Dataspace_client;
@ -195,7 +194,8 @@ void Vancouver_console::entry()
unsigned unchanged = 0;
bool cmp_even = 1;
console_init = true;
_startup_lock.unlock();
while (1) {
while (!input.is_pending()) {
@ -304,8 +304,12 @@ void Vancouver_console::entry()
Vancouver_console::Vancouver_console(Motherboard &mb, Genode::size_t vm_fb_size,
Genode::Dataspace_capability fb_ds)
:
_startup_lock(Genode::Lock::LOCKED),
_vm_fb_size(vm_fb_size), _mb(mb), _fb_size(0), _pixels(0), _guest_fb(0),
_regs(0), _fb_ds(fb_ds)
{
start();
/* shake hands with console thread */
_startup_lock.lock();
}

View File

@ -46,6 +46,7 @@ class Vancouver_console : public Thread<8192>, public StaticReceiver<Vancouver_c
{
private:
Genode::Lock _startup_lock;
Motherboard &_mb;
short *_pixels;
char *_guest_fb;

View File

@ -32,13 +32,13 @@
static Genode::Native_utcb utcb_backup;
extern Genode::Lock timeouts_lock;
extern bool disk_init;
Vancouver_disk::Vancouver_disk(Motherboard &mb,
char * backing_store_base,
char * backing_store_fb_base)
:
_startup_lock(Genode::Lock::LOCKED),
_mb(mb), _backing_store_base(backing_store_base),
_backing_store_fb_base(backing_store_fb_base)
{
@ -47,6 +47,9 @@ Vancouver_disk::Vancouver_disk(Motherboard &mb,
_diskcon[i].blk_size = 0;
}
start();
/* shake hands with disk thread */
_startup_lock.lock();
}
@ -57,7 +60,7 @@ void Vancouver_disk::entry()
/* attach to disk bus */
_mb.bus_disk.add(this, receive_static<MessageDisk>);
disk_init = true;
_startup_lock.unlock();
}

View File

@ -48,6 +48,7 @@ class Vancouver_disk : public Genode::Thread<8192>, public StaticReceiver<Vancou
Genode::size_t blk_cnt;
} _diskcon[MAX_DISKS];
Genode::Lock _startup_lock;
Motherboard &_mb;
char *_backing_store_base;
char *_backing_store_fb_base;

View File

@ -92,9 +92,6 @@ Genode::Lock *utcb_lock()
Genode::Lock global_lock(Genode::Lock::LOCKED);
Genode::Lock timeouts_lock(Genode::Lock::UNLOCKED);
volatile bool console_init = false;
volatile bool disk_init = false;
/* timer service */
using Genode::Thread;
@ -1622,9 +1619,6 @@ int main(int argc, char **argv)
guest_memory.backing_store_local_base(),
guest_memory.backing_store_fb_local_base());
/* wait for services */
while (!console_init || !disk_init);
machine.setup_devices(Genode::config()->xml_node().sub_node("machine"));
Genode::printf("\n--- Booting VM ---\n");