linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] xen/pv: Add PV specific legacy_pic struct to expose legacy IRQs.
@ 2019-03-19 20:02 Jennifer Herbert
  2019-03-19 23:06 ` Boris Ostrovsky
  0 siblings, 1 reply; 6+ messages in thread
From: Jennifer Herbert @ 2019-03-19 20:02 UTC (permalink / raw)
  To: x86, xen-devel, linux-kernel
  Cc: Jennifer Herbert, Boris Ostrovsky, Juergen Gross,
	Stefano Stabellini, Thomas Gleixner, Ingo Molnar,
	Borislav Petkov, H. Peter Anvin

The ACPI tables doesn't always contain all IRQs for legacy devices
such as RTC.  Since no PIC controller is visible for a PV linux guest,
under Xen, legacy_pic currently defaults to the null_legacy_pic - with
reports no legacy IRQs.  Since the commit "rtc: cmos: Do not assume
irq 8 for rtc when there are no legacy irqs" by Hans de Goede
(commit id: a1e23a42f1bdc00e32fc4869caef12e4e6272f26), the rtc now
incorrectly decides it has no irq it can use, for some hardware.

This patch rectifies the problem by providing a xen legacy_pic
struct, which is much like the null_legacy_pic except that it
reports NR_IRQS_LEGACY irqs.

Signed-off-by: Jennifer Herbert <jennifer.herbert@citrix.com>
---
 arch/x86/xen/enlighten_pv.c | 39 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 39 insertions(+)

diff --git a/arch/x86/xen/enlighten_pv.c b/arch/x86/xen/enlighten_pv.c
index c54a493..7644bdf 100644
--- a/arch/x86/xen/enlighten_pv.c
+++ b/arch/x86/xen/enlighten_pv.c
@@ -33,6 +33,7 @@
 #include <linux/gfp.h>
 #include <linux/edd.h>
 #include <linux/frame.h>
+#include <linux/irq.h>
 
 #include <xen/xen.h>
 #include <xen/events.h>
@@ -49,6 +50,7 @@
 #include <xen/acpi.h>
 
 #include <asm/paravirt.h>
+#include <asm/i8259.h>
 #include <asm/apic.h>
 #include <asm/page.h>
 #include <asm/xen/pci.h>
@@ -1188,6 +1190,41 @@ static void __init xen_dom0_set_legacy_features(void)
 	x86_platform.legacy.rtc = 1;
 }
 
+/*
+ * The ACPI tables doesn't always contain all IRQ's for legacy devices
+ * such as RTC.  Since no PIC controller is visible, we'd otherwise
+ * default to the null_legacy_pic - with no legacy IRQs.  To allow drivers
+ * to use these IRQs despite this, provide a xen specific legacy_pic
+ * structure, which is noop, other then reporting NR_IRQS_LEGACY irqs.
+ */
+
+static void xen_legacy_pic_noop(void) { };
+static void xen_legacy_pic_uint_noop(unsigned int unused) { };
+static void xen_legacy_pic_int_noop(int unused) { };
+static int xen_legacy_pic_irq_pending_noop(unsigned int irq)
+{
+	return 0;
+}
+
+static int xen_legacy_pic_probe(void)
+{
+	pr_info("Using Xen legacy PIC\n");
+	return nr_legacy_irqs();
+}
+
+struct legacy_pic xen_legacy_pic = {
+	.nr_legacy_irqs = NR_IRQS_LEGACY,
+	.chip = &dummy_irq_chip,
+	.mask = xen_legacy_pic_uint_noop,
+	.unmask = xen_legacy_pic_uint_noop,
+	.mask_all = xen_legacy_pic_noop,
+	.restore_mask = xen_legacy_pic_noop,
+	.init = xen_legacy_pic_int_noop,
+	.probe = xen_legacy_pic_probe,
+	.irq_pending = xen_legacy_pic_irq_pending_noop,
+	.make_irq = xen_legacy_pic_uint_noop,
+};
+
 /* First C function to be called on Xen boot */
 asmlinkage __visible void __init xen_start_kernel(void)
 {
@@ -1267,6 +1304,8 @@ asmlinkage __visible void __init xen_start_kernel(void)
 
 	xen_init_capabilities();
 
+	legacy_pic = &xen_legacy_pic;
+
 #ifdef CONFIG_X86_LOCAL_APIC
 	/*
 	 * set up the basic apic ops.
-- 
1.8.3.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2019-03-27 14:57 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-03-19 20:02 [PATCH] xen/pv: Add PV specific legacy_pic struct to expose legacy IRQs Jennifer Herbert
2019-03-19 23:06 ` Boris Ostrovsky
2019-03-21 17:49   ` Jennifer Herbert
2019-03-25 14:23     ` [Xen-devel] " Jennifer Herbert
2019-03-25 14:40       ` Paul Durrant
2019-03-27 15:02         ` Boris Ostrovsky

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).