From owner-svn-ports-head@freebsd.org Thu Sep 12 00:55:31 2019 Return-Path: Delivered-To: svn-ports-head@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 777EDE555B; Thu, 12 Sep 2019 00:55:31 +0000 (UTC) (envelope-from jbeich@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 46TL0g2cPhz4blH; Thu, 12 Sep 2019 00:55:31 +0000 (UTC) (envelope-from jbeich@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 38095EFDF; Thu, 12 Sep 2019 00:55:31 +0000 (UTC) (envelope-from jbeich@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id x8C0tVmm075656; Thu, 12 Sep 2019 00:55:31 GMT (envelope-from jbeich@FreeBSD.org) Received: (from jbeich@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id x8C0tUvI075652; Thu, 12 Sep 2019 00:55:30 GMT (envelope-from jbeich@FreeBSD.org) Message-Id: <201909120055.x8C0tUvI075652@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: jbeich set sender to jbeich@FreeBSD.org using -f From: Jan Beich Date: Thu, 12 Sep 2019 00:55:30 +0000 (UTC) To: ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org Subject: svn commit: r511845 - in head/emulators/rpcs3: . files X-SVN-Group: ports-head X-SVN-Commit-Author: jbeich X-SVN-Commit-Paths: in head/emulators/rpcs3: . files X-SVN-Commit-Revision: 511845 X-SVN-Commit-Repository: ports MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-ports-head@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for the ports tree for head List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 12 Sep 2019 00:55:31 -0000 Author: jbeich Date: Thu Sep 12 00:55:30 2019 New Revision: 511845 URL: https://svnweb.freebsd.org/changeset/ports/511845 Log: emulators/rpcs3: update to 0.0.6.8690 Changes: https://github.com/RPCS3/rpcs3/compare/cb66d0569...27af75fe7 Added: head/emulators/rpcs3/files/extra-patch-revert-4504ac2d1248 (contents, props changed) Modified: head/emulators/rpcs3/Makefile (contents, props changed) head/emulators/rpcs3/distinfo (contents, props changed) head/emulators/rpcs3/files/extra-patch-revert-5bd17a44c972 (contents, props changed) Modified: head/emulators/rpcs3/Makefile ============================================================================== --- head/emulators/rpcs3/Makefile Thu Sep 12 00:30:33 2019 (r511844) +++ head/emulators/rpcs3/Makefile Thu Sep 12 00:55:30 2019 (r511845) @@ -2,9 +2,8 @@ PORTNAME= rpcs3 DISTVERSIONPREFIX= v -DISTVERSION= 0.0.7-8674 # git rev-list --count HEAD -DISTVERSIONSUFFIX= -gcb66d0569 -PORTREVISION= 1 +DISTVERSION= 0.0.7-8690 # git rev-list --count HEAD +DISTVERSIONSUFFIX= -g27af75fe7 CATEGORIES= emulators MAINTAINER= jbeich@FreeBSD.org @@ -51,6 +50,7 @@ LLD_UNSAFE= yes # XXX ports/219089 # XXX Remove after FreeBSD 11.2/12.0 reach EOL i.e., around 2020-02-01 .if !exists(/usr/include/c++/v1/charconv) && exists(/usr/lib/libc++.so) EXTRA_PATCHES+= ${PATCHDIR}/extra-patch-revert-f9ad6358563b +EXTRA_PATCHES+= ${PATCHDIR}/extra-patch-revert-4504ac2d1248 EXTRA_PATCHES+= ${PATCHDIR}/extra-patch-revert-5bd17a44c972 .endif Modified: head/emulators/rpcs3/distinfo ============================================================================== --- head/emulators/rpcs3/distinfo Thu Sep 12 00:30:33 2019 (r511844) +++ head/emulators/rpcs3/distinfo Thu Sep 12 00:55:30 2019 (r511845) @@ -1,6 +1,6 @@ -TIMESTAMP = 1568045762 -SHA256 (RPCS3-rpcs3-v0.0.7-8674-gcb66d0569_GH0.tar.gz) = d5d370cabced09dfcf3a65e420e2782661a98bce30d9458fe9077880a4030fef -SIZE (RPCS3-rpcs3-v0.0.7-8674-gcb66d0569_GH0.tar.gz) = 5578023 +TIMESTAMP = 1568233855 +SHA256 (RPCS3-rpcs3-v0.0.7-8690-g27af75fe7_GH0.tar.gz) = b61ee696f3f555efaee90fef8fe49a1280d146a8029d53b76f848383c39dac50 +SIZE (RPCS3-rpcs3-v0.0.7-8690-g27af75fe7_GH0.tar.gz) = 5573156 SHA256 (RPCS3-hidapi-hidapi-0.8.0-rc1-27-g9220f5e_GH0.tar.gz) = 3120e0b701943f452760e45f9fc1ac50bab356ad4c807b4cac4598041c5ca1a5 SIZE (RPCS3-hidapi-hidapi-0.8.0-rc1-27-g9220f5e_GH0.tar.gz) = 105400 SHA256 (RPCS3-llvm-b860b5e8f4ee_GH0.tar.gz) = c151972a0c8ceac568c24b61e63d2ecbdac0f125185e23fc2238e0a14048256e Added: head/emulators/rpcs3/files/extra-patch-revert-4504ac2d1248 ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/emulators/rpcs3/files/extra-patch-revert-4504ac2d1248 Thu Sep 12 00:55:30 2019 (r511845) @@ -0,0 +1,218 @@ +rpcs3/util/atomic.cpp:95:3: error: use of undeclared identifier 'fallback_wait' + fallback_wait(data, size, old_value, timeout); + ^ +rpcs3/util/atomic.cpp:219:4: error: use of undeclared identifier 'fallback_notify_one' + fallback_notify_one(data); + ^ +rpcs3/util/atomic.cpp:307:5: error: use of undeclared identifier 'fallback_notify_all' + fallback_notify_all(data); + ^ + +--- rpcs3/util/atomic.cpp.orig 2019-09-10 16:25:39 UTC ++++ rpcs3/util/atomic.cpp +@@ -15,14 +15,11 @@ + // Pointer mask without bits used as hash, assuming signed 48-bit pointers + static constexpr u64 s_pointer_mask = 0xffff'ffff'ffff & ~(s_hashtable_size - 1); + +-// Max number of waiters is 32767 +-static constexpr u64 s_waiter_mask = 0x7fff'0000'0000'0000; +- +-// +-static constexpr u64 s_collision_bit = 0x8000'0000'0000'0000; ++// Max number of waiters is 65535 ++static constexpr u64 s_waiter_mask = 0xffff'0000'0000'0000; + + // Implementation detail (remaining bits out of 32 available for futex) +-static constexpr u64 s_signal_mask = 0xffffffff & ~(s_waiter_mask | s_pointer_mask | s_collision_bit); ++static constexpr u64 s_signal_mask = 0xffffffff & ~(s_waiter_mask | s_pointer_mask); + + // Callback for wait() function, returns false if wait should return + static thread_local bool(*s_tls_wait_cb)(const void* data) = [](const void*) +@@ -182,8 +179,6 @@ + + u32 new_value = 0; + +- bool fallback = false; +- + const auto [_, ok] = entry.fetch_op([&](u64& value) + { + if ((value & s_waiter_mask) == s_waiter_mask || (value & s_signal_mask) == s_signal_mask) +@@ -196,17 +191,11 @@ + { + // Store pointer bits + value |= (iptr & s_pointer_mask); +- fallback = false; +- +-#ifdef _WIN32 +- value += s_signal_mask & -s_signal_mask; +-#endif + } + else + { +- // Set collision bit +- value |= s_collision_bit; +- fallback = true; ++ // Set pointer bits to all ones (collision, TODO) ++ value |= s_pointer_mask; + } + + // Add waiter +@@ -220,11 +209,7 @@ + return; + } + +- if (fallback) +- { +- fallback_wait(data, size, old_value, timeout); +- } +- else if (ptr_cmp(data, size, old_value) && s_tls_wait_cb(data)) ++ if (ptr_cmp(data, size, old_value) && s_tls_wait_cb(data)) + { + #ifdef _WIN32 + LARGE_INTEGER qw; +@@ -260,13 +245,6 @@ + { + value -= s_waiter_mask & -s_waiter_mask; + +-#ifdef _WIN32 +- if (!fallback) +- { +- value -= s_signal_mask & -s_signal_mask; +- } +-#endif +- + if ((value & s_waiter_mask) == 0) + { + // Reset on last waiter +@@ -279,7 +257,7 @@ + return false; + }); + +- if (ok || fallback) ++ if (ok) + { + break; + } +@@ -306,20 +284,15 @@ + + atomic_t& entry = s_hashtable[iptr % s_hashtable_size]; + ++ bool fallback = false; ++ + const auto [prev, ok] = entry.fetch_op([&](u64& value) + { + if (value & s_waiter_mask && (value & s_pointer_mask) == (iptr & s_pointer_mask)) + { + #ifdef _WIN32 +- if ((value & s_signal_mask) == 0) +- { +- // No relevant waiters, do nothing +- return false; +- } +- +- // Try to decrement if possible ++ // Try to decrement if no collision + value -= s_waiter_mask & -s_waiter_mask; +- value -= s_signal_mask & -s_signal_mask; + + if ((value & s_waiter_mask) == 0) + { +@@ -337,22 +310,30 @@ + + if ((value & s_signal_mask) == s_signal_mask) + { +- // Signal will overflow, fallback to notify_all +- notify_all(data); ++ // Signal will overflow, fallback ++ fallback = true; + return false; + } + #endif ++ + return true; + } +- else if (value & s_waiter_mask && value & s_collision_bit) ++ ++ if (value & s_waiter_mask && (value & s_pointer_mask) == s_pointer_mask) + { +- fallback_notify_one(data); +- return false; ++ // Collision, notify everything ++ fallback = true; + } + + return false; + }); + ++ if (fallback) ++ { ++ notify_all(data); ++ return; ++ } ++ + if (ok) + { + #ifdef _WIN32 +@@ -375,32 +356,11 @@ + { + if (value & s_waiter_mask) + { +- if ((value & s_pointer_mask) == (iptr & s_pointer_mask)) ++ if ((value & s_pointer_mask) == s_pointer_mask || (value & s_pointer_mask) == (iptr & s_pointer_mask)) + { +- if ((value & s_signal_mask) == 0) +- { +- // No relevant waiters, do nothing +- return false; +- } +- +- const u64 count = (value & s_signal_mask) / (s_signal_mask & -s_signal_mask); +- value -= (s_waiter_mask & -s_waiter_mask) * count; +- value -= (s_signal_mask & -s_signal_mask) * count; +- +- if ((value & s_waiter_mask) == 0) +- { +- // Reset on last waiter +- value = 0; +- } +- ++ value = 0; + return true; + } +- +- if (value & s_collision_bit) +- { +- fallback_notify_all(data); +- return false; +- } + } + + return false; +@@ -411,7 +371,7 @@ + return; + } + +- for (u64 count = old & s_signal_mask; count; count -= s_signal_mask & -s_signal_mask) ++ for (u64 count = old & s_waiter_mask; count; count -= s_waiter_mask & -s_waiter_mask) + { + NtReleaseKeyedEvent(nullptr, &entry, false, nullptr); + } +@@ -426,17 +386,11 @@ + return false; + } + +- if ((value & s_pointer_mask) == (iptr & s_pointer_mask)) ++ if ((value & s_pointer_mask) == s_pointer_mask || (value & s_pointer_mask) == (iptr & s_pointer_mask)) + { + value += s_signal_mask & -s_signal_mask; + return true; + } +- +- if (value & s_collision_bit) +- { +- fallback_notify_all(data); +- return false; +- } + } + + return false; Modified: head/emulators/rpcs3/files/extra-patch-revert-5bd17a44c972 ============================================================================== --- head/emulators/rpcs3/files/extra-patch-revert-5bd17a44c972 Thu Sep 12 00:30:33 2019 (r511844) +++ head/emulators/rpcs3/files/extra-patch-revert-5bd17a44c972 Thu Sep 12 00:55:30 2019 (r511845) @@ -25,7 +25,7 @@ rpcs3/util/atomic.cpp:94:7: error: member reference ba ptls->mapped().cond.notify_one(); ~~~~^ ~~~~~~ ---- rpcs3/util/atomic.cpp.orig 2019-08-04 18:16:19 UTC +--- rpcs3/util/atomic.cpp.orig 2019-09-10 16:25:39 UTC +++ rpcs3/util/atomic.cpp @@ -2,10 +2,6 @@ @@ -38,7 +38,7 @@ rpcs3/util/atomic.cpp:94:7: error: member reference ba // Should be at least 65536, currently 2097152. static constexpr std::uintptr_t s_hashtable_size = 1u << 21; -@@ -31,113 +27,6 @@ static inline bool ptr_cmp(const void* data, std::size_t size, u64 old_value) +@@ -40,134 +36,8 @@ static inline bool ptr_cmp(const void* data, std::size return false; } @@ -77,22 +77,41 @@ rpcs3/util/atomic.cpp:94:7: error: member reference ba - return s_waiter_maps[std::hash()(ptr) % std::size(s_waiter_maps)]; - } - -- void fallback_wait(const void* data, std::size_t size, u64 old_value) +- void fallback_wait(const void* data, std::size_t size, u64 old_value, u64 timeout) - { - auto& wmap = get_fallback_map(data); - +- if (!timeout) +- { +- return; +- } +- - // Update node key - s_tls_waiter.key() = data; - -- if (std::unique_lock lock(wmap.mutex); ptr_cmp(data, size, old_value)) +- if (std::unique_lock lock(wmap.mutex); ptr_cmp(data, size, old_value) && s_tls_wait_cb(data)) - { - // Add node to the waiter list -- std::condition_variable& cond = wmap.list.insert(std::move(s_tls_waiter))->second.cond; +- const auto iter = wmap.list.insert(std::move(s_tls_waiter)); - - // Wait until the node is returned to its TLS location +- if (timeout + 1) +- { +- if (!iter->second.cond.wait_for(lock, std::chrono::nanoseconds(timeout), [&] +- { +- return 1 && s_tls_waiter; +- })) +- { +- // Put it back +- s_tls_waiter = wmap.list.extract(iter); +- } +- +- return; +- } +- - while (!s_tls_waiter) - { -- cond.wait(lock); +- iter->second.cond.wait(lock); - } - } - } @@ -132,9 +151,9 @@ rpcs3/util/atomic.cpp:94:7: error: member reference ba - -#if !defined(_WIN32) && !defined(__linux__) - --void atomic_storage_futex::wait(const void* data, std::size_t size, u64 old_value) --{ -- fallback_wait(data, size, old_value); + void atomic_storage_futex::wait(const void* data, std::size_t size, u64 old_value, u64 timeout) + { +- fallback_wait(data, size, old_value, timeout); -} - -void atomic_storage_futex::notify_one(const void* data) @@ -149,12 +168,17 @@ rpcs3/util/atomic.cpp:94:7: error: member reference ba - -#else - - void atomic_storage_futex::wait(const void* data, std::size_t size, u64 old_value) - { - #ifdef _WIN32 -@@ -337,5 +226,3 @@ void atomic_storage_futex::notify_all(const void* data) +-void atomic_storage_futex::wait(const void* data, std::size_t size, u64 old_value, u64 timeout) +-{ + if (!timeout) + { + return; +@@ -402,8 +272,6 @@ void atomic_storage_futex::notify_all(const void* data } #endif } - -#endif + + void atomic_storage_futex::set_wait_callback(bool(*cb)(const void* data)) + {