mirror of
https://github.com/freebsd/freebsd-src
synced 2024-09-06 09:10:28 +00:00
Use csr_read() to read sstatus instead of inline assembly.
While here, remove a local variable to avoid the CSR read in non-debug kernels. Reviewed by: mhorne MFC after: 1 week Sponsored by: DARPA Differential Revision: https://reviews.freebsd.org/D23511
This commit is contained in:
parent
b68892fe61
commit
ac2b208d08
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=357594
|
@ -245,12 +245,10 @@ void
|
|||
do_trap_supervisor(struct trapframe *frame)
|
||||
{
|
||||
uint64_t exception;
|
||||
uint64_t sstatus;
|
||||
|
||||
/* Ensure we came from supervisor mode, interrupts disabled */
|
||||
__asm __volatile("csrr %0, sstatus" : "=&r" (sstatus));
|
||||
KASSERT((sstatus & (SSTATUS_SPP | SSTATUS_SIE)) == SSTATUS_SPP,
|
||||
("We must came from S mode with interrupts disabled"));
|
||||
KASSERT((csr_read(sstatus) & (SSTATUS_SPP | SSTATUS_SIE)) ==
|
||||
SSTATUS_SPP, ("Came from S mode with interrupts enabled"));
|
||||
|
||||
exception = (frame->tf_scause & EXCP_MASK);
|
||||
if (frame->tf_scause & EXCP_INTR) {
|
||||
|
@ -305,7 +303,6 @@ do_trap_user(struct trapframe *frame)
|
|||
{
|
||||
uint64_t exception;
|
||||
struct thread *td;
|
||||
uint64_t sstatus;
|
||||
struct pcb *pcb;
|
||||
|
||||
td = curthread;
|
||||
|
@ -313,9 +310,8 @@ do_trap_user(struct trapframe *frame)
|
|||
pcb = td->td_pcb;
|
||||
|
||||
/* Ensure we came from usermode, interrupts disabled */
|
||||
__asm __volatile("csrr %0, sstatus" : "=&r" (sstatus));
|
||||
KASSERT((sstatus & (SSTATUS_SPP | SSTATUS_SIE)) == 0,
|
||||
("We must came from U mode with interrupts disabled"));
|
||||
KASSERT((csr_read(sstatus) & (SSTATUS_SPP | SSTATUS_SIE)) == 0,
|
||||
("Came from U mode with interrupts enabled"));
|
||||
|
||||
exception = (frame->tf_scause & EXCP_MASK);
|
||||
if (frame->tf_scause & EXCP_INTR) {
|
||||
|
|
Loading…
Reference in a new issue