kern: implement 13.1.0 kernel changes

This commit is contained in:
Michael Scire 2021-10-25 17:34:47 -07:00
parent ebca23305e
commit 1d5f66be56
4 changed files with 10 additions and 2 deletions

View file

@ -52,6 +52,10 @@ namespace ams::kern::arch::arm64::cpu {
__asm__ __volatile__("dmb sy" ::: "memory"); __asm__ __volatile__("dmb sy" ::: "memory");
} }
ALWAYS_INLINE void DataMemoryBarrierInnerShareable() {
__asm__ __volatile__("dmb ish" ::: "memory");
}
ALWAYS_INLINE void InstructionMemoryBarrier() { ALWAYS_INLINE void InstructionMemoryBarrier() {
__asm__ __volatile__("isb" ::: "memory"); __asm__ __volatile__("isb" ::: "memory");
} }

View file

@ -74,6 +74,9 @@ namespace ams::kern {
/* Release an instance of the lock. */ /* Release an instance of the lock. */
if ((--m_lock_count) == 0) { if ((--m_lock_count) == 0) {
/* Perform a memory barrier here. */
cpu::DataMemoryBarrierInnerShareable();
/* We're no longer going to hold the lock. Take note of what cores need scheduling. */ /* We're no longer going to hold the lock. Take note of what cores need scheduling. */
const u64 cores_needing_scheduling = SchedulerType::UpdateHighestPriorityThreads(); const u64 cores_needing_scheduling = SchedulerType::UpdateHighestPriorityThreads();

View file

@ -58,7 +58,7 @@ namespace ams::svc {
/* This is the highest SVC version supported by Atmosphere, to be updated on new kernel releases. */ /* This is the highest SVC version supported by Atmosphere, to be updated on new kernel releases. */
/* NOTE: Official kernel versions have SVC major = SDK major + 4, SVC minor = SDK minor. */ /* NOTE: Official kernel versions have SVC major = SDK major + 4, SVC minor = SDK minor. */
constexpr inline u32 SupportedKernelMajorVersion = ConvertToSvcMajorVersion(13); constexpr inline u32 SupportedKernelMajorVersion = ConvertToSvcMajorVersion(13);
constexpr inline u32 SupportedKernelMinorVersion = ConvertToSvcMinorVersion( 3); constexpr inline u32 SupportedKernelMinorVersion = ConvertToSvcMinorVersion( 4);
constexpr inline u32 SupportedKernelVersion = EncodeKernelVersion(SupportedKernelMajorVersion, SupportedKernelMinorVersion); constexpr inline u32 SupportedKernelVersion = EncodeKernelVersion(SupportedKernelMajorVersion, SupportedKernelMinorVersion);

View file

@ -126,7 +126,8 @@ _ZN3ams4kern10KScheduler12ScheduleImplEv:
cmp x7, x18 cmp x7, x18
b.ne 1f b.ne 1f
/* If they're the same, then we can just return as there's nothing to do. */ /* If they're the same, then we can just issue a memory barrier and return. */
dmb ish
ret ret
0: /* The interrupt task thread is runnable. */ 0: /* The interrupt task thread is runnable. */