mirror of https://github.com/xemu-project/xemu.git
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:
parent
72666216a8
commit
939c91d5ef
21
hw/nv2a.c
21
hw/nv2a.c
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue