|
@@ -791,6 +791,37 @@ static u32 lguest_apic_read(u32 reg)
|
|
|
{
|
|
|
return 0;
|
|
|
}
|
|
|
+
|
|
|
+static u64 lguest_apic_icr_read(void)
|
|
|
+{
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+static void lguest_apic_icr_write(u32 low, u32 id)
|
|
|
+{
|
|
|
+ /* Warn to see if there's any stray references */
|
|
|
+ WARN_ON(1);
|
|
|
+}
|
|
|
+
|
|
|
+static void lguest_apic_wait_icr_idle(void)
|
|
|
+{
|
|
|
+ return;
|
|
|
+}
|
|
|
+
|
|
|
+static u32 lguest_apic_safe_wait_icr_idle(void)
|
|
|
+{
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+static struct apic_ops lguest_basic_apic_ops = {
|
|
|
+ .read = lguest_apic_read,
|
|
|
+ .write = lguest_apic_write,
|
|
|
+ .write_atomic = lguest_apic_write,
|
|
|
+ .icr_read = lguest_apic_icr_read,
|
|
|
+ .icr_write = lguest_apic_icr_write,
|
|
|
+ .wait_icr_idle = lguest_apic_wait_icr_idle,
|
|
|
+ .safe_wait_icr_idle = lguest_apic_safe_wait_icr_idle,
|
|
|
+};
|
|
|
#endif
|
|
|
|
|
|
/* STOP! Until an interrupt comes in. */
|
|
@@ -990,9 +1021,7 @@ __init void lguest_init(void)
|
|
|
|
|
|
#ifdef CONFIG_X86_LOCAL_APIC
|
|
|
/* apic read/write intercepts */
|
|
|
- pv_apic_ops.apic_write = lguest_apic_write;
|
|
|
- pv_apic_ops.apic_write_atomic = lguest_apic_write;
|
|
|
- pv_apic_ops.apic_read = lguest_apic_read;
|
|
|
+ apic_ops = &lguest_basic_apic_ops;
|
|
|
#endif
|
|
|
|
|
|
/* time operations */
|