sys_interrupt: add vm::temporary_unlock

This commit is contained in:
Nekotekina 2019-07-14 18:08:18 +03:00
parent 0a88a23bf5
commit f5ee8c1292
2 changed files with 10 additions and 4 deletions

View File

@ -37,8 +37,10 @@ void lv2_int_serv::join()
(*thread)();
}
error_code sys_interrupt_tag_destroy(u32 intrtag)
error_code sys_interrupt_tag_destroy(ppu_thread& ppu, u32 intrtag)
{
vm::temporary_unlock(ppu);
sys_interrupt.warning("sys_interrupt_tag_destroy(intrtag=0x%x)", intrtag);
const auto tag = idm::withdraw<lv2_obj, lv2_int_tag>(intrtag, [](lv2_int_tag& tag) -> CellError
@ -64,8 +66,10 @@ error_code sys_interrupt_tag_destroy(u32 intrtag)
return CELL_OK;
}
error_code _sys_interrupt_thread_establish(vm::ptr<u32> ih, u32 intrtag, u32 intrthread, u64 arg1, u64 arg2)
error_code _sys_interrupt_thread_establish(ppu_thread& ppu, vm::ptr<u32> ih, u32 intrtag, u32 intrthread, u64 arg1, u64 arg2)
{
vm::temporary_unlock(ppu);
sys_interrupt.warning("_sys_interrupt_thread_establish(ih=*0x%x, intrtag=0x%x, intrthread=0x%x, arg1=0x%llx, arg2=0x%llx)", ih, intrtag, intrthread, arg1, arg2);
CellError error = CELL_EAGAIN;
@ -124,6 +128,8 @@ error_code _sys_interrupt_thread_establish(vm::ptr<u32> ih, u32 intrtag, u32 int
error_code _sys_interrupt_thread_disestablish(ppu_thread& ppu, u32 ih, vm::ptr<u64> r13)
{
vm::temporary_unlock(ppu);
sys_interrupt.warning("_sys_interrupt_thread_disestablish(ih=0x%x, r13=*0x%x)", ih, r13);
const auto handler = idm::withdraw<lv2_obj, lv2_int_serv>(ih);

View File

@ -34,7 +34,7 @@ struct lv2_int_serv final : lv2_obj
// Syscalls
error_code sys_interrupt_tag_destroy(u32 intrtag);
error_code _sys_interrupt_thread_establish(vm::ptr<u32> ih, u32 intrtag, u32 intrthread, u64 arg1, u64 arg2);
error_code sys_interrupt_tag_destroy(ppu_thread& ppu, u32 intrtag);
error_code _sys_interrupt_thread_establish(ppu_thread& ppu, vm::ptr<u32> ih, u32 intrtag, u32 intrthread, u64 arg1, u64 arg2);
error_code _sys_interrupt_thread_disestablish(ppu_thread& ppu, u32 ih, vm::ptr<u64> r13);
void sys_interrupt_thread_eoi(ppu_thread& ppu);