Thread (67 messages) 67 messages, 9 authors, 2024-10-18

Re: [PATCH v5 05/19] arm64: Detect if in a realm and set RIPAS RAM

From: Gavin Shan <hidden>
Date: 2024-09-10 00:09:51
Also in: kvm, kvmarm, linux-arm-kernel, lkml

On 8/31/24 1:54 AM, Steven Price wrote:
On 26/08/2024 11:03, Catalin Marinas wrote:
quoted
On Mon, Aug 19, 2024 at 02:19:10PM +0100, Steven Price wrote:
[...]
quoted
quoted
+
+void __init arm64_rsi_setup_memory(void)
+{
+	u64 i;
+	phys_addr_t start, end;
+
+	if (!is_realm_world())
+		return;
+
+	/*
+	 * Iterate over the available memory ranges and convert the state to
+	 * protected memory. We should take extra care to ensure that we DO NOT
+	 * permit any "DESTROYED" pages to be converted to "RAM".
+	 *
+	 * BUG_ON is used because if the attempt to switch the memory to
+	 * protected has failed here, then future accesses to the memory are
+	 * simply going to be reflected as a SEA (Synchronous External Abort)
+	 * which we can't handle.  Bailing out early prevents the guest limping
+	 * on and dying later.
+	 */
+	for_each_mem_range(i, &start, &end) {
+		BUG_ON(rsi_set_memory_range_protected_safe(start, end));
+	}
Would it help debugging if we print the memory ranges as well rather
than just a BUG_ON()?
Yes that would probably be useful - I'll fix that.
One potential issue I'm seeing is WARN_ON() followed by BUG_ON(). They're a bit
duplicate. I would suggest to remove the WARN_ON() and print informative messages
in rsi_set_memory_range().

   setup_arch
   arm64_rsi_setup_memory                    // BUG_ON(error)
   rsi_set_memory_range_protected_safe
   rsi_set_memory_range                      // WARN_ON(error)

Thanks,
Gavin
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help