Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 12 Sep 2019 00:55:30 +0000 (UTC)
From:      Jan Beich <jbeich@FreeBSD.org>
To:        ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org
Subject:   svn commit: r511845 - in head/emulators/rpcs3: . files
Message-ID:  <201909120055.x8C0tUvI075652@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
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<u64>& 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<const void*>()(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))
+ {



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201909120055.x8C0tUvI075652>