From e1293b14f877e59b468a04af24dbdac29c172bfd Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Sun, 14 Jul 2019 18:11:00 +0300 Subject: [PATCH] sys_net: add vm::temporary_unlock --- rpcs3/Emu/Cell/lv2/sys_net.cpp | 56 ++++++++++++++++++++++++++++++++-- 1 file changed, 54 insertions(+), 2 deletions(-) diff --git a/rpcs3/Emu/Cell/lv2/sys_net.cpp b/rpcs3/Emu/Cell/lv2/sys_net.cpp index 6de4dcf440..9b9b49f801 100644 --- a/rpcs3/Emu/Cell/lv2/sys_net.cpp +++ b/rpcs3/Emu/Cell/lv2/sys_net.cpp @@ -24,8 +24,6 @@ #include #endif - - LOG_CHANNEL(sys_net); static std::vector s_to_awake; @@ -267,6 +265,8 @@ lv2_socket::~lv2_socket() s32 sys_net_bnet_accept(ppu_thread& ppu, s32 s, vm::ptr addr, vm::ptr paddrlen) { + vm::temporary_unlock(ppu); + sys_net.warning("sys_net_bnet_accept(s=%d, addr=*0x%x, paddrlen=*0x%x)", s, addr, paddrlen); lv2_socket::socket_type native_socket = -1; @@ -395,6 +395,8 @@ s32 sys_net_bnet_accept(ppu_thread& ppu, s32 s, vm::ptr addr, s32 sys_net_bnet_bind(ppu_thread& ppu, s32 s, vm::cptr addr, u32 addrlen) { + vm::temporary_unlock(ppu); + sys_net.warning("sys_net_bnet_bind(s=%d, addr=*0x%x, addrlen=%u)", s, addr, addrlen); if (addr->sa_family != SYS_NET_AF_INET) @@ -431,6 +433,8 @@ s32 sys_net_bnet_bind(ppu_thread& ppu, s32 s, vm::cptr addr, u s32 sys_net_bnet_connect(ppu_thread& ppu, s32 s, vm::ptr addr, u32 addrlen) { + vm::temporary_unlock(ppu); + sys_net.warning("sys_net_bnet_connect(s=%d, addr=*0x%x, addrlen=%u)", s, addr, addrlen); s32 result = 0; @@ -580,6 +584,8 @@ s32 sys_net_bnet_connect(ppu_thread& ppu, s32 s, vm::ptr addr, s32 sys_net_bnet_getpeername(ppu_thread& ppu, s32 s, vm::ptr addr, vm::ptr paddrlen) { + vm::temporary_unlock(ppu); + sys_net.warning("sys_net_bnet_getpeername(s=%d, addr=*0x%x, paddrlen=*0x%x)", s, addr, paddrlen); const auto sock = idm::check(s, [&](lv2_socket& sock) -> s32 @@ -621,6 +627,8 @@ s32 sys_net_bnet_getpeername(ppu_thread& ppu, s32 s, vm::ptr a s32 sys_net_bnet_getsockname(ppu_thread& ppu, s32 s, vm::ptr addr, vm::ptr paddrlen) { + vm::temporary_unlock(ppu); + sys_net.warning("sys_net_bnet_getsockname(s=%d, addr=*0x%x, paddrlen=*0x%x)", s, addr, paddrlen); const auto sock = idm::check(s, [&](lv2_socket& sock) -> s32 @@ -662,6 +670,8 @@ s32 sys_net_bnet_getsockname(ppu_thread& ppu, s32 s, vm::ptr a s32 sys_net_bnet_getsockopt(ppu_thread& ppu, s32 s, s32 level, s32 optname, vm::ptr optval, vm::ptr optlen) { + vm::temporary_unlock(ppu); + sys_net.warning("sys_net_bnet_getsockopt(s=%d, level=0x%x, optname=0x%x, optval=*0x%x, optlen=*0x%x)", s, level, optname, optval, optlen); int native_level = -1; @@ -850,6 +860,8 @@ s32 sys_net_bnet_getsockopt(ppu_thread& ppu, s32 s, s32 level, s32 optname, vm:: s32 sys_net_bnet_listen(ppu_thread& ppu, s32 s, s32 backlog) { + vm::temporary_unlock(ppu); + sys_net.warning("sys_net_bnet_listen(s=%d, backlog=%d)", s, backlog); const auto sock = idm::check(s, [&](lv2_socket& sock) -> s32 @@ -874,6 +886,8 @@ s32 sys_net_bnet_listen(ppu_thread& ppu, s32 s, s32 backlog) s32 sys_net_bnet_recvfrom(ppu_thread& ppu, s32 s, vm::ptr buf, u32 len, s32 flags, vm::ptr addr, vm::ptr paddrlen) { + vm::temporary_unlock(ppu); + sys_net.warning("sys_net_bnet_recvfrom(s=%d, buf=*0x%x, len=%u, flags=0x%x, addr=*0x%x, paddrlen=*0x%x)", s, buf, len, flags, addr, paddrlen); if (flags & ~(SYS_NET_MSG_PEEK | SYS_NET_MSG_DONTWAIT | SYS_NET_MSG_WAITALL)) @@ -1010,18 +1024,24 @@ s32 sys_net_bnet_recvfrom(ppu_thread& ppu, s32 s, vm::ptr buf, u32 len, s3 s32 sys_net_bnet_recvmsg(ppu_thread& ppu, s32 s, vm::ptr msg, s32 flags) { + vm::temporary_unlock(ppu); + sys_net.todo("sys_net_bnet_recvmsg(s=%d, msg=*0x%x, flags=0x%x)", s, msg, flags); return 0; } s32 sys_net_bnet_sendmsg(ppu_thread& ppu, s32 s, vm::cptr msg, s32 flags) { + vm::temporary_unlock(ppu); + sys_net.todo("sys_net_bnet_sendmsg(s=%d, msg=*0x%x, flags=0x%x)", s, msg, flags); return 0; } s32 sys_net_bnet_sendto(ppu_thread& ppu, s32 s, vm::cptr buf, u32 len, s32 flags, vm::cptr addr, u32 addrlen) { + vm::temporary_unlock(ppu); + sys_net.warning("sys_net_bnet_sendto(s=%d, buf=*0x%x, len=%u, flags=0x%x, addr=*0x%x, addrlen=%u)", s, buf, len, flags, addr, addrlen); if (flags & ~(SYS_NET_MSG_DONTWAIT | SYS_NET_MSG_WAITALL)) @@ -1149,6 +1169,8 @@ s32 sys_net_bnet_sendto(ppu_thread& ppu, s32 s, vm::cptr buf, u32 len, s32 s32 sys_net_bnet_setsockopt(ppu_thread& ppu, s32 s, s32 level, s32 optname, vm::cptr optval, u32 optlen) { + vm::temporary_unlock(ppu); + sys_net.warning("sys_net_bnet_setsockopt(s=%d, level=0x%x, optname=0x%x, optval=*0x%x, optlen=%u)", s, level, optname, optval, optlen); int native_int = 0; @@ -1334,6 +1356,8 @@ s32 sys_net_bnet_setsockopt(ppu_thread& ppu, s32 s, s32 level, s32 optname, vm:: s32 sys_net_bnet_shutdown(ppu_thread& ppu, s32 s, s32 how) { + vm::temporary_unlock(ppu); + sys_net.warning("sys_net_bnet_shutdown(s=%d, how=%d)", s, how); if (how < 0 || how > 2) @@ -1373,6 +1397,8 @@ s32 sys_net_bnet_shutdown(ppu_thread& ppu, s32 s, s32 how) s32 sys_net_bnet_socket(ppu_thread& ppu, s32 family, s32 type, s32 protocol) { + vm::temporary_unlock(ppu); + sys_net.warning("sys_net_bnet_socket(family=%d, type=%d, protocol=%d)", family, type, protocol); if (family != SYS_NET_AF_INET && family != SYS_NET_AF_UNSPEC) @@ -1426,6 +1452,8 @@ s32 sys_net_bnet_socket(ppu_thread& ppu, s32 family, s32 type, s32 protocol) s32 sys_net_bnet_close(ppu_thread& ppu, s32 s) { + vm::temporary_unlock(ppu); + sys_net.warning("sys_net_bnet_close(s=%d)", s); const auto sock = idm::withdraw(s); @@ -1443,6 +1471,8 @@ s32 sys_net_bnet_close(ppu_thread& ppu, s32 s) s32 sys_net_bnet_poll(ppu_thread& ppu, vm::ptr fds, s32 nfds, s32 ms) { + vm::temporary_unlock(ppu); + sys_net.warning("sys_net_bnet_poll(fds=*0x%x, nfds=%d, ms=%d)", fds, nfds, ms); atomic_t signaled{0}; @@ -1612,6 +1642,8 @@ s32 sys_net_bnet_poll(ppu_thread& ppu, vm::ptr fds, s32 nfds, s3 s32 sys_net_bnet_select(ppu_thread& ppu, s32 nfds, vm::ptr readfds, vm::ptr writefds, vm::ptr exceptfds, vm::ptr _timeout) { + vm::temporary_unlock(ppu); + sys_net.warning("sys_net_bnet_select(nfds=%d, readfds=*0x%x, writefds=*0x%x, exceptfds=*0x%x, timeout=*0x%x)", nfds, readfds, writefds, exceptfds, _timeout); atomic_t signaled{0}; @@ -1823,60 +1855,80 @@ s32 sys_net_bnet_select(ppu_thread& ppu, s32 nfds, vm::ptr readf s32 _sys_net_open_dump(ppu_thread& ppu, s32 len, s32 flags) { + vm::temporary_unlock(ppu); + sys_net.todo("_sys_net_open_dump(len=%d, flags=0x%x)", len, flags); return 0; } s32 _sys_net_read_dump(ppu_thread& ppu, s32 id, vm::ptr buf, s32 len, vm::ptr pflags) { + vm::temporary_unlock(ppu); + sys_net.todo("_sys_net_read_dump(id=0x%x, buf=*0x%x, len=%d, pflags=*0x%x)", id, buf, len, pflags); return 0; } s32 _sys_net_close_dump(ppu_thread& ppu, s32 id, vm::ptr pflags) { + vm::temporary_unlock(ppu); + sys_net.todo("_sys_net_close_dump(id=0x%x, pflags=*0x%x)", id, pflags); return 0; } s32 _sys_net_write_dump(ppu_thread& ppu, s32 id, vm::cptr buf, s32 len, u32 unknown) { + vm::temporary_unlock(ppu); + sys_net.todo(__func__); return 0; } s32 sys_net_abort(ppu_thread& ppu, s32 type, u64 arg, s32 flags) { + vm::temporary_unlock(ppu); + sys_net.todo("sys_net_abort(type=%d, arg=0x%x, flags=0x%x)", type, arg, flags); return 0; } s32 sys_net_infoctl(ppu_thread& ppu, s32 cmd, vm::ptr arg) { + vm::temporary_unlock(ppu); + sys_net.todo("sys_net_infoctl(cmd=%d, arg=*0x%x)", cmd, arg); return 0; } s32 sys_net_control(ppu_thread& ppu, u32 arg1, s32 arg2, vm::ptr arg3, s32 arg4) { + vm::temporary_unlock(ppu); + sys_net.todo("sys_net_control(0x%x, %d, *0x%x, %d)", arg1, arg2, arg3, arg4); return 0; } s32 sys_net_bnet_ioctl(ppu_thread& ppu, s32 arg1, u32 arg2, u32 arg3) { + vm::temporary_unlock(ppu); + sys_net.todo("sys_net_bnet_ioctl(%d, 0x%x, 0x%x)", arg1, arg2, arg3); return 0; } s32 sys_net_bnet_sysctl(ppu_thread& ppu, u32 arg1, u32 arg2, u32 arg3, vm::ptr arg4, u32 arg5, u32 arg6) { + vm::temporary_unlock(ppu); + sys_net.todo("sys_net_bnet_sysctl(0x%x, 0x%x, 0x%x, *0x%x, 0x%x, 0x%x)", arg1, arg2, arg3, arg4, arg5, arg6); return 0; } s32 sys_net_eurus_post_command(ppu_thread& ppu, s32 arg1, u32 arg2, u32 arg3) { + vm::temporary_unlock(ppu); + sys_net.todo("sys_net_eurus_post_command(%d, 0x%x, 0x%x)", arg1, arg2, arg3); return 0; }