be less anal about locking the iothread.

It's expensive and we have bigger problems for now than *tiny* memory
inconsistency...
This commit is contained in:
espes 2013-03-20 18:40:23 +11:00
parent 72666216a8
commit 939c91d5ef
1 changed files with 10 additions and 11 deletions

View File

@ -1339,13 +1339,12 @@ static void pgraph_method(NV2AState *d,
subchannel_data->object_instance = parameter;
qemu_mutex_unlock(&d->pgraph.lock);
qemu_mutex_lock_iothread();
//qemu_mutex_lock_iothread();
load_graphics_object(d, parameter, object);
qemu_mutex_unlock_iothread();
//qemu_mutex_unlock_iothread();
return;
}
uint32_t class_method = (object->graphics_class << 16) | method;
switch (class_method) {
case NV_MEMORY_TO_MEMORY_FORMAT_DMA_NOTIFY:
@ -1615,8 +1614,8 @@ static void pgraph_method(NV2AState *d,
kelvin->semaphore_offset = parameter;
break;
case NV097_BACK_END_WRITE_SEMAPHORE_RELEASE:
qemu_mutex_unlock(&d->pgraph.lock);
qemu_mutex_lock_iothread();
//qemu_mutex_unlock(&d->pgraph.lock);
//qemu_mutex_lock_iothread();
dma_semaphore = load_dma_object(d, kelvin->dma_semaphore);
assert(kelvin->semaphore_offset < dma_semaphore.limit);
@ -1624,8 +1623,8 @@ static void pgraph_method(NV2AState *d,
stl_le_phys(dma_semaphore.start + kelvin->semaphore_offset,
parameter);
qemu_mutex_lock(&d->pgraph.lock);
qemu_mutex_unlock_iothread();
//qemu_mutex_lock(&d->pgraph.lock);
//qemu_mutex_unlock_iothread();
break;
@ -1762,12 +1761,12 @@ static void *pfifo_puller_thread(void *arg)
qemu_mutex_unlock(&state->cache_lock);
if (command->method == 0) {
qemu_mutex_lock_iothread();
//qemu_mutex_lock_iothread();
entry = ramht_lookup(d, command->parameter);
assert(entry.valid);
assert(entry.channel_id == state->channel_id);
qemu_mutex_unlock_iothread();
//qemu_mutex_unlock_iothread();
switch (entry.engine) {
case ENGINE_SOFTWARE:
@ -1796,12 +1795,12 @@ static void *pfifo_puller_thread(void *arg)
/* methods that take objects.
* TODO: Check this range is correct for the nv2a */
if (command->method >= 0x180 && command->method < 0x200) {
qemu_mutex_lock_iothread();
//qemu_mutex_lock_iothread();
entry = ramht_lookup(d, parameter);
assert(entry.valid);
assert(entry.channel_id == state->channel_id);
parameter = entry.instance;
qemu_mutex_unlock_iothread();
//qemu_mutex_unlock_iothread();
}
qemu_mutex_lock(&state->pull_lock);