#
278412 |
|
08-Feb-2015 |
peter |
Repair ia64 build after r278347 - remove const from set_mcontext
|
#
271998 |
|
22-Sep-2014 |
marcel |
Make sure all memory updates are made visible before we let go of the thread in cpu_switch(). It's otherwise possible that on another CPU the thread continues from stale context data.
Note that this is prominent on newer CPUs, like the Montecito, that really take advantage of the weak memory ordering. First generation Itanium 2 is not that aggressive and does not need this.
This is a direct commit to stable/10.
Approved by: re@ (gjb)
|
#
271211 |
|
06-Sep-2014 |
marcel |
Fix the PCPU access macros. It was found that the PCPU pointer, when held in register r13, is used outside the bounds of critical_enter() and critical_exit() by virtue of optimizations performed by the compiler. The net effect being that address computations of fields in the PCPU structure could be relative to the PCPU structure of the CPU on which the address computation was performed and not related to the CPU that executes the actual load or store operation. The typical failure mode being that the per-CPU cache of UMA got corrupted due to accesses from other CPUs.
Adding more volatile decorating to the register expression does not help. The thinking being that volatile is assumed to work on memory references and not register references. Thus, the fix is to perform the address computation using a volatile inline assembly statement.
Additionally, since the reference is fundamentally non-atomic on ia64 by virtue of have a distinct address computation followed by the actual load or store operation, it is required to wrap the entire PCPU access in a critical section.
With PCPU_GET and friends requiring curthread now that they're in a critical section, low-level use of these macros in functions like cpu_switch() is not possible anymore. Consequently, a second order set of changes is needed to avoid using PCPU_GET and friends where curthread is either not set yet, or in the process of being changed. In those cases, explicit dereferencing of pcpup is needed. In those cases it is also possible to do that.
This is a direct commit to stable/10.
Approved by: re@ (marius)
|
#
270296 |
|
21-Aug-2014 |
emaste |
MFC r263815, r263872:
Move ia64 efi.h to sys in preparation for amd64 UEFI support
Prototypes specific to ia64 have been left in this file for now, under __ia64__, rather than moving them to a new header under sys/ia64. I anticipate that (some of) the corresponding functions will be shared by the amd64, arm64, i386, and ia64 architectures, and we can adjust this as EFI support on other than ia64 continues to develop.
Fix missed efi.h header change in r263815
Sponsored by: The FreeBSD Foundation
|
#
268201 |
|
02-Jul-2014 |
marcel |
MFC r263380 & r268185: Add KTR events for the PMAP interface functions.
|
#
268200 |
|
02-Jul-2014 |
marcel |
MFC r263323: Fix and improve exception tracing.
|
#
268199 |
|
02-Jul-2014 |
marcel |
MFC r263254: Move the implementation of kdb_cpu_trap() from <machine/kdb.h> to machdep.c.
|
#
261985 |
|
16-Feb-2014 |
marcel |
MFC r257487: Use LOG2_ID_PAGE_SIZE again for the identity mapping in regions 6 & 7.
|
#
278412 |
|
08-Feb-2015 |
peter |
Repair ia64 build after r278347 - remove const from set_mcontext
|
#
271998 |
|
22-Sep-2014 |
marcel |
Make sure all memory updates are made visible before we let go of the thread in cpu_switch(). It's otherwise possible that on another CPU the thread continues from stale context data.
Note that this is prominent on newer CPUs, like the Montecito, that really take advantage of the weak memory ordering. First generation Itanium 2 is not that aggressive and does not need this.
This is a direct commit to stable/10.
Approved by: re@ (gjb)
|
#
271211 |
|
06-Sep-2014 |
marcel |
Fix the PCPU access macros. It was found that the PCPU pointer, when held in register r13, is used outside the bounds of critical_enter() and critical_exit() by virtue of optimizations performed by the compiler. The net effect being that address computations of fields in the PCPU structure could be relative to the PCPU structure of the CPU on which the address computation was performed and not related to the CPU that executes the actual load or store operation. The typical failure mode being that the per-CPU cache of UMA got corrupted due to accesses from other CPUs.
Adding more volatile decorating to the register expression does not help. The thinking being that volatile is assumed to work on memory references and not register references. Thus, the fix is to perform the address computation using a volatile inline assembly statement.
Additionally, since the reference is fundamentally non-atomic on ia64 by virtue of have a distinct address computation followed by the actual load or store operation, it is required to wrap the entire PCPU access in a critical section.
With PCPU_GET and friends requiring curthread now that they're in a critical section, low-level use of these macros in functions like cpu_switch() is not possible anymore. Consequently, a second order set of changes is needed to avoid using PCPU_GET and friends where curthread is either not set yet, or in the process of being changed. In those cases, explicit dereferencing of pcpup is needed. In those cases it is also possible to do that.
This is a direct commit to stable/10.
Approved by: re@ (marius)
|
#
270296 |
|
21-Aug-2014 |
emaste |
MFC r263815, r263872:
Move ia64 efi.h to sys in preparation for amd64 UEFI support
Prototypes specific to ia64 have been left in this file for now, under __ia64__, rather than moving them to a new header under sys/ia64. I anticipate that (some of) the corresponding functions will be shared by the amd64, arm64, i386, and ia64 architectures, and we can adjust this as EFI support on other than ia64 continues to develop.
Fix missed efi.h header change in r263815
Sponsored by: The FreeBSD Foundation
|
#
268201 |
|
02-Jul-2014 |
marcel |
MFC r263380 & r268185: Add KTR events for the PMAP interface functions.
|
#
268200 |
|
02-Jul-2014 |
marcel |
MFC r263323: Fix and improve exception tracing.
|
#
268199 |
|
02-Jul-2014 |
marcel |
MFC r263254: Move the implementation of kdb_cpu_trap() from <machine/kdb.h> to machdep.c.
|
#
261985 |
|
16-Feb-2014 |
marcel |
MFC r257487: Use LOG2_ID_PAGE_SIZE again for the identity mapping in regions 6 & 7.
|