From 285ecfc1ee461291cdd239b28f6b7666203b2bc3 Mon Sep 17 00:00:00 2001 From: Corey Lewis Date: Thu, 26 Sep 2024 13:05:07 +1000 Subject: [PATCH] squash haskell: PR suggestions Signed-off-by: Corey Lewis --- spec/haskell/src/SEL4/Object/FPU/AARCH64.hs | 9 +++++---- spec/haskell/src/SEL4/Object/TCB/AARCH64.hs | 2 ++ 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/spec/haskell/src/SEL4/Object/FPU/AARCH64.hs b/spec/haskell/src/SEL4/Object/FPU/AARCH64.hs index 08114ac63f..2aa51a7857 100644 --- a/spec/haskell/src/SEL4/Object/FPU/AARCH64.hs +++ b/spec/haskell/src/SEL4/Object/FPU/AARCH64.hs @@ -18,6 +18,7 @@ import {-# SOURCE #-} SEL4.Object.TCB(asUser, threadGet) import Data.Bits import Data.Maybe +import Data.Traversable(for) saveFpuState :: PPtr TCB -> Kernel () saveFpuState tcbPtr = do @@ -33,10 +34,10 @@ switchLocalFpuOwner :: Maybe (PPtr TCB) -> Kernel () switchLocalFpuOwner newOwner = do doMachineOp enableFpu curFpuOwner <- gets (armKSCurFPUOwner . ksArchState) - when (isJust curFpuOwner) (saveFpuState (fromJust curFpuOwner)) - if isJust newOwner - then loadFpuState (fromJust newOwner) - else doMachineOp disableFpu + for curFpuOwner saveFpuState + case newOwner of + Nothing -> doMachineOp disableFpu + Just tcbPtr -> loadFpuState tcbPtr modifyArchState (\s -> s { armKSCurFPUOwner = newOwner }) fpuRelease :: PPtr TCB -> Kernel () diff --git a/spec/haskell/src/SEL4/Object/TCB/AARCH64.hs b/spec/haskell/src/SEL4/Object/TCB/AARCH64.hs index 113e012784..805ab06d3d 100644 --- a/spec/haskell/src/SEL4/Object/TCB/AARCH64.hs +++ b/spec/haskell/src/SEL4/Object/TCB/AARCH64.hs @@ -58,6 +58,8 @@ postSetFlags :: PPtr TCB -> TcbFlags -> Kernel () postSetFlags t flags = when (tcbFlagToWord (ArchFlag FpuDisabled) .&. flags /= 0) (fpuRelease t) +-- Save and clear FPU state before setting the domain of a TCB, to ensure that +-- we do not later write to cross-domain state. prepareSetDomain :: PPtr TCB -> Domain -> Kernel () prepareSetDomain t newDom = do curDom <- curDomain