svn commit: r334014 - head/sys/powerpc/pseries
Justin Hibbits
jhibbits at FreeBSD.org
Tue May 22 03:24:18 UTC 2018
Author: jhibbits
Date: Tue May 22 03:24:16 2018
New Revision: 334014
URL: https://svnweb.freebsd.org/changeset/base/334014
Log:
Add a comment explaining the need of a global temporary variable
cpu_xirr is used only as a temporary location for the OPAL call in
PIC_DISPATCH().
Requested by: nwhitehorn
Modified:
head/sys/powerpc/pseries/xics.c
Modified: head/sys/powerpc/pseries/xics.c
==============================================================================
--- head/sys/powerpc/pseries/xics.c Tue May 22 03:22:02 2018 (r334013)
+++ head/sys/powerpc/pseries/xics.c Tue May 22 03:24:16 2018 (r334014)
@@ -140,6 +140,15 @@ static driver_t xics_driver = {
};
#ifdef POWERNV
+/* We can only pass physical addresses into OPAL. Kernel stacks are in the KVA,
+ * not in the direct map, so we need to somehow extract the physical address.
+ * However, pmap_kextract() takes locks, which is forbidden in a critical region
+ * (which PMAP_DISPATCH() operates in). The kernel is mapped into the Direct
+ * Map (0xc000....), and the CPU implicitly drops the top two bits when doing
+ * real address by nature that the bus width is smaller than 64-bits. Placing
+ * cpu_xirr into the DMAP lets us take advantage of this and avoids the
+ * pmap_kextract() that would otherwise be needed if using the stack variable.
+ */
static uint32_t cpu_xirr[MAXCPU];
#endif
More information about the svn-src-all
mailing list