Move the CR0.WP manipulation KPI to x86.
This should allow to avoid some #ifdefs in the common x86/ code. Requested by: markj Sponsored by: The FreeBSD Foundation MFC after: 1 week
This commit is contained in:
parent
f8478f0d43
commit
0a1d8bb0a4
@ -2597,31 +2597,6 @@ clear_pcb_flags(struct pcb *pcb, const u_int flags)
|
||||
: "cc", "memory");
|
||||
}
|
||||
|
||||
/*
|
||||
* Enable and restore kernel text write permissions.
|
||||
* Callers must ensure that disable_wp()/restore_wp() are executed
|
||||
* without rescheduling on the same core.
|
||||
*/
|
||||
bool
|
||||
disable_wp(void)
|
||||
{
|
||||
u_int cr0;
|
||||
|
||||
cr0 = rcr0();
|
||||
if ((cr0 & CR0_WP) == 0)
|
||||
return (false);
|
||||
load_cr0(cr0 & ~CR0_WP);
|
||||
return (true);
|
||||
}
|
||||
|
||||
void
|
||||
restore_wp(bool old_wp)
|
||||
{
|
||||
|
||||
if (old_wp)
|
||||
load_cr0(rcr0() | CR0_WP);
|
||||
}
|
||||
|
||||
#ifdef KDB
|
||||
|
||||
/*
|
||||
|
@ -53,8 +53,6 @@ void amd64_conf_fast_syscall(void);
|
||||
void amd64_db_resume_dbreg(void);
|
||||
void amd64_lower_shared_page(struct sysentvec *);
|
||||
void amd64_syscall(struct thread *td, int traced);
|
||||
bool disable_wp(void);
|
||||
void restore_wp(bool old_wp);
|
||||
void doreti_iret(void) __asm(__STRING(doreti_iret));
|
||||
void doreti_iret_fault(void) __asm(__STRING(doreti_iret_fault));
|
||||
void ld_ds(void) __asm(__STRING(ld_ds));
|
||||
|
@ -119,6 +119,8 @@ void busdma_swi(void);
|
||||
bool cpu_mwait_usable(void);
|
||||
void cpu_probe_amdc1e(void);
|
||||
void cpu_setregs(void);
|
||||
bool disable_wp(void);
|
||||
void restore_wp(bool old_wp);
|
||||
void dump_add_page(vm_paddr_t);
|
||||
void dump_drop_page(vm_paddr_t);
|
||||
void finishidentcpu(void);
|
||||
|
@ -621,3 +621,29 @@ hw_ibrs_disable_handler(SYSCTL_HANDLER_ARGS)
|
||||
SYSCTL_PROC(_hw, OID_AUTO, ibrs_disable, CTLTYPE_INT | CTLFLAG_RWTUN |
|
||||
CTLFLAG_NOFETCH | CTLFLAG_MPSAFE, NULL, 0, hw_ibrs_disable_handler, "I",
|
||||
"Disable Indirect Branch Restricted Speculation");
|
||||
|
||||
/*
|
||||
* Enable and restore kernel text write permissions.
|
||||
* Callers must ensure that disable_wp()/restore_wp() are executed
|
||||
* without rescheduling on the same core.
|
||||
*/
|
||||
bool
|
||||
disable_wp(void)
|
||||
{
|
||||
u_int cr0;
|
||||
|
||||
cr0 = rcr0();
|
||||
if ((cr0 & CR0_WP) == 0)
|
||||
return (false);
|
||||
load_cr0(cr0 & ~CR0_WP);
|
||||
return (true);
|
||||
}
|
||||
|
||||
void
|
||||
restore_wp(bool old_wp)
|
||||
{
|
||||
|
||||
if (old_wp)
|
||||
load_cr0(rcr0() | CR0_WP);
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user