Thread (5 messages) 5 messages, 3 authors, 2021-02-15

Re: [PATCH] arm64: mm: correct the start of physical address in linear map

From: Pavel Tatashin <pasha.tatashin@soleen.com>
Date: 2021-02-13 18:18:54
Also in: lkml

We're ignoring the portion from the linear mapping's start PA to the
point of wraparound. Could the start and end of the hot plugged memory
fall within this range and, as a result, the hot plug operation be
incorrectly blocked?
Hi Tyler,

Thank you for looking at this fix. The maximum addressable PA's can be
seen in this function: id_aa64mmfr0_parange_to_phys_shift(). For
example for PA shift 32, the linear map must be able to cover any
physical addresses from 0 to "1 << 32". Therefore, 0 to __pa(PAGE_END
- 1); must include 0 to "1<<32".

The randomization of the linear map tries to hide where exactly within
the linear map the [0 to max_phys] addresses are located by changing
PHYS_OFFSET (linear map space is usually much bigger than PA space).
Therefore, the beginning or end of a linear map can actually convert
to completely bagus high PA addresses, but this is normal.

Thank you,
Pasha
Tyler
quoted
+
      /*
       * Linear mapping region is the range [PAGE_OFFSET..(PAGE_END - 1)]
       * accommodating both its ends but excluding PAGE_END. Max physical
       * range which can be mapped inside this linear mapping range, must
       * also be derived from its end points.
       */
-     return start >= __pa(_PAGE_OFFSET(vabits_actual)) &&
-            (start + size - 1) <= __pa(PAGE_END - 1);
+     return start >= start_linear_pa && (start + size - 1) <= end_linear_pa;
 }

 int arch_add_memory(int nid, u64 start, u64 size,
--
2.25.1
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help