From 6afe4f79a2a7ab7546ed15d2b391a3d1192be5b2 Mon Sep 17 00:00:00 2001
From: Stefan Kalkowski <stefan.kalkowski@genode-labs.com>
Date: Thu, 27 Jun 2024 10:55:55 +0200
Subject: [PATCH] base: tie quota_lim_downscale template to size_t

* Always use size_t instead of template type
* Thereby we can remove 128-bit type from all architectures in base-hw

Ref genodelabs/genode#5310
---
 repos/base-hw/src/core/cpu_session_support.cc | 2 +-
 repos/base-hw/src/core/kernel/main.cc         | 3 ---
 repos/base-hw/src/core/kernel/thread.cc       | 3 +--
 repos/base-hw/src/core/spec/arm_v8/cpu.h      | 3 +--
 repos/base-hw/src/core/spec/riscv/cpu.h       | 2 --
 repos/base-hw/src/core/spec/x86_64/cpu.h      | 1 -
 repos/base/include/cpu_session/cpu_session.h  | 3 +--
 7 files changed, 4 insertions(+), 13 deletions(-)

diff --git a/repos/base-hw/src/core/cpu_session_support.cc b/repos/base-hw/src/core/cpu_session_support.cc
index 9b7bc77292..fbee7b6882 100644
--- a/repos/base-hw/src/core/cpu_session_support.cc
+++ b/repos/base-hw/src/core/cpu_session_support.cc
@@ -33,7 +33,7 @@ Dataspace_capability Cpu_thread_component::utcb()
 Cpu_session::Quota Cpu_session_component::quota()
 {
 	size_t const spu = Kernel::cpu_quota_us;
-	size_t const u = quota_lim_downscale<sizet_arithm_t>(_quota, spu);
+	size_t const u = quota_lim_downscale(_quota, spu);
 	return { spu, u };
 }
 
diff --git a/repos/base-hw/src/core/kernel/main.cc b/repos/base-hw/src/core/kernel/main.cc
index 48b7669b1c..6849895966 100644
--- a/repos/base-hw/src/core/kernel/main.cc
+++ b/repos/base-hw/src/core/kernel/main.cc
@@ -92,9 +92,6 @@ void Kernel::main_handle_kernel_entry()
 
 void Kernel::main_initialize_and_handle_kernel_entry()
 {
-	static_assert(sizeof(Core::sizet_arithm_t) >= 2 * sizeof(size_t),
-		"Bad result type for size_t arithmetics.");
-
 	using Boot_info = Hw::Boot_info<Board::Boot_info>;
 
 	static volatile bool     instance_initialized   { false };
diff --git a/repos/base-hw/src/core/kernel/thread.cc b/repos/base-hw/src/core/kernel/thread.cc
index c8161299f3..f794d6f86a 100644
--- a/repos/base-hw/src/core/kernel/thread.cc
+++ b/repos/base-hw/src/core/kernel/thread.cc
@@ -302,12 +302,11 @@ Cpu_job * Thread::helping_destination() {
 size_t Thread::_core_to_kernel_quota(size_t const quota) const
 {
 	using Genode::Cpu_session;
-	using Core::sizet_arithm_t;
 
 	/* we assert at timer construction that cpu_quota_us in ticks fits size_t */
 	size_t const ticks = (size_t)
 		_cpu->timer().us_to_ticks(Kernel::cpu_quota_us);
-	return Cpu_session::quota_lim_downscale<sizet_arithm_t>(quota, ticks);
+	return Cpu_session::quota_lim_downscale(quota, ticks);
 }
 
 
diff --git a/repos/base-hw/src/core/spec/arm_v8/cpu.h b/repos/base-hw/src/core/spec/arm_v8/cpu.h
index 86c88a9181..e4b38183cb 100644
--- a/repos/base-hw/src/core/spec/arm_v8/cpu.h
+++ b/repos/base-hw/src/core/spec/arm_v8/cpu.h
@@ -38,8 +38,7 @@ namespace Board { class Address_space_id_allocator; }
 namespace Core {
 
 	struct Cpu;
-	using sizet_arithm_t = __uint128_t;
-	using uint128_t      = __uint128_t;
+	using uint128_t = __uint128_t;
 }
 
 
diff --git a/repos/base-hw/src/core/spec/riscv/cpu.h b/repos/base-hw/src/core/spec/riscv/cpu.h
index c4fd1353d6..40db57db70 100644
--- a/repos/base-hw/src/core/spec/riscv/cpu.h
+++ b/repos/base-hw/src/core/spec/riscv/cpu.h
@@ -43,8 +43,6 @@ namespace Core {
 	 * CPU driver for core
 	 */
 	class Cpu;
-
-	using sizet_arithm_t = __uint128_t;
 }
 
 
diff --git a/repos/base-hw/src/core/spec/x86_64/cpu.h b/repos/base-hw/src/core/spec/x86_64/cpu.h
index 116ab5fc92..c1e815e86a 100644
--- a/repos/base-hw/src/core/spec/x86_64/cpu.h
+++ b/repos/base-hw/src/core/spec/x86_64/cpu.h
@@ -42,7 +42,6 @@ namespace Board { class Address_space_id_allocator; }
 namespace Core {
 
 	class Cpu;
-	using sizet_arithm_t = __uint128_t;
 }
 
 
diff --git a/repos/base/include/cpu_session/cpu_session.h b/repos/base/include/cpu_session/cpu_session.h
index a0c7200f4e..f47e6c1993 100644
--- a/repos/base/include/cpu_session/cpu_session.h
+++ b/repos/base/include/cpu_session/cpu_session.h
@@ -204,9 +204,8 @@ struct Genode::Cpu_session : Session
 	/**
 	 * Scale down 'value' from the 'QUOTA_LIMIT' space to a space with 'limit'
 	 */
-	template<typename T = size_t>
 	static size_t quota_lim_downscale(size_t const value, size_t const limit) {
-		return (size_t)(((T)value * limit) >> Cpu_session::QUOTA_LIMIT_LOG2); }
+		return (size_t)(((uint64_t)value * limit) >> Cpu_session::QUOTA_LIMIT_LOG2); }
 
 
 	/*****************************************