Diff below switches to the MI equivalent and kills the MD-specific
API.
ok?
Index: arch/amd64/amd64/amd64_mem.c
===================================================================
RCS file: /cvs/src/sys/arch/amd64/amd64/amd64_mem.c,v
retrieving revision 1.13
diff -u -p -r1.13 amd64_mem.c
--- arch/amd64/amd64/amd64_mem.c 26 Apr 2016 15:27:32 -0000 1.13
+++ arch/amd64/amd64/amd64_mem.c 24 Jul 2018 21:55:40 -0000
@@ -274,12 +274,14 @@ mrt2mtrr(u_int64_t flags)
void
mrstore(struct mem_range_softc *sc)
{
- disable_intr(); /* disable interrupts */
+ u_long s;
+
+ s = intr_disable();
#ifdef MULTIPROCESSOR
x86_broadcast_ipi(X86_IPI_MTRR);
#endif
mrstoreone(sc);
- enable_intr();
+ intr_restore(s);
}
/*
@@ -616,7 +618,9 @@ mrinit_cpu(struct mem_range_softc *sc)
void
mrreload_cpu(struct mem_range_softc *sc)
{
- disable_intr();
+ u_long s;
+
+ s = intr_disable();
mrstoreone(sc); /* set MTRRs to match BSP */
- enable_intr();
+ intr_restore(s);
}
Index: arch/amd64/amd64/cpu.c
===================================================================
RCS file: /cvs/src/sys/arch/amd64/amd64/cpu.c,v
retrieving revision 1.125
diff -u -p -r1.125 cpu.c
--- arch/amd64/amd64/cpu.c 12 Jul 2018 14:11:11 -0000 1.125
+++ arch/amd64/amd64/cpu.c 24 Jul 2018 21:55:40 -0000
@@ -800,7 +800,7 @@ cpu_hatch(void *v)
s = splhigh();
lcr8(0);
- enable_intr();
+ intr_enable();
nanouptime(&ci->ci_schedstate.spc_runtime);
splx(s);
Index: arch/amd64/amd64/hibernate_machdep.c
===================================================================
RCS file: /cvs/src/sys/arch/amd64/amd64/hibernate_machdep.c,v
retrieving revision 1.44
diff -u -p -r1.44 hibernate_machdep.c
--- arch/amd64/amd64/hibernate_machdep.c 4 Jul 2018 01:41:56 -0000
1.44
+++ arch/amd64/amd64/hibernate_machdep.c 24 Jul 2018 21:55:40 -0000
@@ -440,13 +440,13 @@ hibernate_inflate_skip(union hibernate_i
void
hibernate_enable_intr_machdep(void)
{
- enable_intr();
+ intr_enable();
}
void
hibernate_disable_intr_machdep(void)
{
- disable_intr();
+ intr_disable();
}
#ifdef MULTIPROCESSOR
Index: arch/amd64/amd64/i8259.c
===================================================================
RCS file: /cvs/src/sys/arch/amd64/amd64/i8259.c,v
retrieving revision 1.10
diff -u -p -r1.10 i8259.c
--- arch/amd64/amd64/i8259.c 14 Oct 2017 04:44:43 -0000 1.10
+++ arch/amd64/amd64/i8259.c 24 Jul 2018 21:55:40 -0000
@@ -162,8 +162,9 @@ i8259_hwunmask(struct pic *pic, int pin)
{
unsigned port;
u_int8_t byte;
+ u_long s;
- disable_intr(); /* XXX */
+ s = intr_disable();
i8259_imen &= ~(1 << pin);
#ifdef PIC_MASKDELAY
delay(10);
@@ -176,7 +177,7 @@ i8259_hwunmask(struct pic *pic, int pin)
byte = i8259_imen & 0xff;
}
outb(port, byte);
- enable_intr();
+ intr_restore(s);
}
static void
Index: arch/amd64/amd64/ipifuncs.c
===================================================================
RCS file: /cvs/src/sys/arch/amd64/amd64/ipifuncs.c,v
retrieving revision 1.31
diff -u -p -r1.31 ipifuncs.c
--- arch/amd64/amd64/ipifuncs.c 5 Jun 2018 06:39:10 -0000 1.31
+++ arch/amd64/amd64/ipifuncs.c 24 Jul 2018 21:55:40 -0000
@@ -111,7 +111,7 @@ x86_64_ipi_halt(struct cpu_info *ci)
SCHED_ASSERT_UNLOCKED();
KASSERT(!_kernel_lock_held());
- disable_intr();
+ intr_disable();
lapic_disable();
wbinvd();
ci->ci_flags &= ~CPUF_RUNNING;
Index: arch/amd64/amd64/lapic.c
===================================================================
RCS file: /cvs/src/sys/arch/amd64/amd64/lapic.c,v
retrieving revision 1.51
diff -u -p -r1.51 lapic.c
--- arch/amd64/amd64/lapic.c 20 Apr 2018 07:27:54 -0000 1.51
+++ arch/amd64/amd64/lapic.c 24 Jul 2018 21:55:40 -0000
@@ -174,13 +174,14 @@ lapic_cpu_number(void)
void
lapic_map(paddr_t lapic_base)
{
- int s;
pt_entry_t *pte;
vaddr_t va;
u_int64_t msr;
+ u_long s;
+ int tpr;
- disable_intr();
- s = lapic_tpr;
+ s = intr_disable();
+ tpr = lapic_tpr;
msr = rdmsr(MSR_APICBASE);
@@ -208,7 +209,7 @@ lapic_map(paddr_t lapic_base)
x2apic_enabled = 1;
codepatch_call(CPTAG_EOI, &x2apic_eoi);
- lapic_writereg(LAPIC_TPRI, s);
+ lapic_writereg(LAPIC_TPRI, tpr);
va = (vaddr_t)&local_apic;
} else {
/*
@@ -226,7 +227,7 @@ lapic_map(paddr_t lapic_base)
*pte = lapic_base | PG_RW | PG_V | PG_N | PG_G | pg_nx;
invlpg(va);
- lapic_tpr = s;
+ lapic_tpr = tpr;
}
/*
@@ -240,7 +241,7 @@ lapic_map(paddr_t lapic_base)
DPRINTF("%s: entered lapic page va 0x%llx pa 0x%llx\n", __func__,
(uint64_t)va, (uint64_t)lapic_base);
- enable_intr();
+ intr_restore(s);
}
/*
@@ -479,7 +480,7 @@ lapic_calibrate_timer(struct cpu_info *c
{
unsigned int startapic, endapic;
u_int64_t dtick, dapic, tmp;
- long rf = read_rflags();
+ u_long s;
int i;
if (mp_verbose)
@@ -493,7 +494,7 @@ lapic_calibrate_timer(struct cpu_info *c
lapic_writereg(LAPIC_DCR_TIMER, LAPIC_DCRT_DIV1);
lapic_writereg(LAPIC_ICR_TIMER, 0x80000000);
- disable_intr();
+ s = intr_disable();
/* wait for current cycle to finish */
wait_next_cycle();
@@ -505,7 +506,8 @@ lapic_calibrate_timer(struct cpu_info *c
wait_next_cycle();
endapic = lapic_gettick();
- write_rflags(rf);
+
+ intr_restore(s);
dtick = hz * rtclock_tval;
dapic = startapic-endapic;
Index: arch/amd64/amd64/machdep.c
===================================================================
RCS file: /cvs/src/sys/arch/amd64/amd64/machdep.c,v
retrieving revision 1.248
diff -u -p -r1.248 machdep.c
--- arch/amd64/amd64/machdep.c 12 Jul 2018 14:11:11 -0000 1.248
+++ arch/amd64/amd64/machdep.c 24 Jul 2018 21:55:40 -0000
@@ -1705,7 +1705,7 @@ init_x86_64(paddr_t first_avail)
softintr_init();
splraise(IPL_IPI);
- enable_intr();
+ intr_enable();
#ifdef DDB
db_machine_init();
@@ -1718,8 +1718,7 @@ init_x86_64(paddr_t first_avail)
void
cpu_reset(void)
{
-
- disable_intr();
+ intr_disable();
if (cpuresetfn)
(*cpuresetfn)();
Index: arch/amd64/amd64/tsc.c
===================================================================
RCS file: /cvs/src/sys/arch/amd64/amd64/tsc.c,v
retrieving revision 1.9
diff -u -p -r1.9 tsc.c
--- arch/amd64/amd64/tsc.c 8 Apr 2018 18:26:29 -0000 1.9
+++ arch/amd64/amd64/tsc.c 24 Jul 2018 21:55:40 -0000
@@ -120,7 +120,7 @@ uint64_t
measure_tsc_freq(struct timecounter *tc)
{
uint64_t count1, count2, frequency, min_freq, tsc1, tsc2;
- u_long ef;
+ u_long s;
int delay_usec, i, err1, err2, usec, success = 0;
/* warmup the timers */
@@ -133,14 +133,13 @@ measure_tsc_freq(struct timecounter *tc)
delay_usec = 100000;
for (i = 0; i < 3; i++) {
- ef = read_rflags();
- disable_intr();
+ s = intr_disable();
err1 = get_tsc_and_timecount(tc, &tsc1, &count1);
delay(delay_usec);
err2 = get_tsc_and_timecount(tc, &tsc2, &count2);
- write_rflags(ef);
+ intr_restore(s);
if (err1 || err2)
continue;
Index: arch/amd64/amd64/vmm.c
===================================================================
RCS file: /cvs/src/sys/arch/amd64/amd64/vmm.c,v
retrieving revision 1.216
diff -u -p -r1.216 vmm.c
--- arch/amd64/amd64/vmm.c 12 Jul 2018 10:16:41 -0000 1.216
+++ arch/amd64/amd64/vmm.c 24 Jul 2018 21:55:40 -0000
@@ -3905,6 +3905,7 @@ vcpu_run_vmx(struct vcpu *vcpu, struct v
struct vmx_invvpid_descriptor vid;
uint64_t eii, procbased, int_st;
uint16_t irq;
+ u_long s;
resume = 0;
irq = vrp->vrp_irq;
@@ -4099,9 +4100,9 @@ vcpu_run_vmx(struct vcpu *vcpu, struct v
#endif /* VMM_DEBUG */
/* Disable interrupts and save the current host FPU state. */
- disable_intr();
+ s = intr_disable();
if ((ret = vmm_fpurestore(vcpu))) {
- enable_intr();
+ intr_restore(s);
break;
}
@@ -4116,7 +4117,7 @@ vcpu_run_vmx(struct vcpu *vcpu, struct v
*/
vmm_fpusave(vcpu);
- enable_intr();
+ intr_restore(s);
exit_reason = VM_EXIT_NONE;
if (ret == 0) {
Index: arch/amd64/include/cpufunc.h
===================================================================
RCS file: /cvs/src/sys/arch/amd64/include/cpufunc.h,v
retrieving revision 1.29
diff -u -p -r1.29 cpufunc.h
--- arch/amd64/include/cpufunc.h 24 Jul 2018 14:49:44 -0000 1.29
+++ arch/amd64/include/cpufunc.h 24 Jul 2018 21:55:40 -0000
@@ -152,18 +152,6 @@ void setidt(int idx, /*XXX*/caddr_t func
/* XXXX ought to be in psl.h with spl() functions */
-static __inline void
-disable_intr(void)
-{
- __asm volatile("cli");
-}
-
-static __inline void
-enable_intr(void)
-{
- __asm volatile("sti");
-}
-
static __inline u_long
read_rflags(void)
{
@@ -182,7 +170,7 @@ write_rflags(u_long ef)
static __inline void
intr_enable(void)
{
- enable_intr();
+ __asm volatile("sti");
}
static __inline u_long
@@ -191,7 +179,7 @@ intr_disable(void)
u_long ef;
ef = read_rflags();
- disable_intr();
+ __asm volatile("cli");
return (ef);
}
Index: arch/amd64/isa/clock.c
===================================================================
RCS file: /cvs/src/sys/arch/amd64/isa/clock.c,v
retrieving revision 1.27
diff -u -p -r1.27 clock.c
--- arch/amd64/isa/clock.c 9 Jul 2018 19:38:33 -0000 1.27
+++ arch/amd64/isa/clock.c 24 Jul 2018 21:55:40 -0000
@@ -201,18 +201,17 @@ rtcintr(void *arg)
int
gettick(void)
{
- u_long ef;
+ u_long s;
u_char lo, hi;
/* Don't want someone screwing with the counter while we're here. */
mtx_enter(&timer_mutex);
- ef = read_rflags();
- disable_intr();
+ s = intr_disable();
/* Select counter 0 and latch it. */
outb(IO_TIMER1+TIMER_MODE, TIMER_SEL0 | TIMER_LATCH);
lo = inb(IO_TIMER1+TIMER_CNTR0);
hi = inb(IO_TIMER1+TIMER_CNTR0);
- write_rflags(ef);
+ intr_restore(s);
mtx_leave(&timer_mutex);
return ((hi << 8) | lo);
}
@@ -632,10 +631,9 @@ i8254_get_timecount(struct timecounter *
{
u_char hi, lo;
u_int count;
- u_long ef;
+ u_long s;
- ef = read_rflags();
- disable_intr();
+ s = intr_disable();
outb(IO_TIMER1+TIMER_MODE, TIMER_SEL0 | TIMER_LATCH);
lo = inb(IO_TIMER1+TIMER_CNTR0);
@@ -649,7 +647,8 @@ i8254_get_timecount(struct timecounter *
}
i8254_lastcount = count;
count += i8254_offset;
- write_rflags(ef);
+
+ intr_restore(s);
return (count);
}
Index: dev/pci/drm/drm_linux.h
===================================================================
RCS file: /cvs/src/sys/dev/pci/drm/drm_linux.h,v
retrieving revision 1.89
diff -u -p -r1.89 drm_linux.h
--- dev/pci/drm/drm_linux.h 25 Jun 2018 22:29:16 -0000 1.89
+++ dev/pci/drm/drm_linux.h 24 Jul 2018 21:55:41 -0000
@@ -898,8 +898,8 @@ void flush_delayed_work(struct delayed_w
typedef void *async_cookie_t;
#define async_schedule(func, data) (func)((data), NULL)
-#define local_irq_disable() disable_intr()
-#define local_irq_enable() enable_intr()
+#define local_irq_disable() intr_disable()
+#define local_irq_enable() intr_enable()
#define setup_timer(x, y, z) timeout_set((x), (void (*)(void *))(y), (void
*)(z))
#define mod_timer(x, y) timeout_add((x), (y - jiffies))