On Tue, 2016-06-28 at 13:34 +1000, Benjamin Herrenschmidt wrote: > On Tue, 2016-06-28 at 13:11 +1000, Samuel Mendoza-Jonas wrote: > > Update the hvc driver to use the OPAL irqchip if made available by > > the > > running firmware. If it is not present, the driver falls back to > > the > > existing OPAL event number. > > One thing that worries me a bit with the original transition to using > an interrupt from the old OPAL callback is that when passed an > interrupt, > the HVC thread assumes interrupts work reliably and thus stops > polling. Note to Greg: This patch is fine, this is a reflexion about a change that was already done. > However, not all platforms have a functional serial interrupt. For > example rhesus doesn't. In fact we don't always know when we build > the device-tree whether the serial interrupt will work or not. > > Now we might be saved by the OPAL heartbeat ... we do call > opal_poll_events regularily there. But I'd like you to verify it > by disabling the LPC interrupt for example on an openpower machine > and see how the console beahves. > > Cheers, > Ben. > > > > Signed-off-by: Samuel Mendoza-Jonas <sam@xxxxxxxxxxxxxxxx> > > Cc: <stable@xxxxxxxxxxxxxxx> # 4.1.x- > > --- > > drivers/tty/hvc/hvc_opal.c | 12 +++++++++++- > > 1 file changed, 11 insertions(+), 1 deletion(-) > > > > diff --git a/drivers/tty/hvc/hvc_opal.c > > b/drivers/tty/hvc/hvc_opal.c > > index b7cd0ae..8c53f5b 100644 > > --- a/drivers/tty/hvc/hvc_opal.c > > +++ b/drivers/tty/hvc/hvc_opal.c > > @@ -170,6 +170,8 @@ static int hvc_opal_probe(struct > > platform_device *dev) > > hv_protocol_t proto; > > unsigned int termno, irq, boot = 0; > > const __be32 *reg; > > + u32 prop; > > + int rc; > > > > if (of_device_is_compatible(dev->dev.of_node, "ibm,opal- > > console-raw")) { > > proto = HV_PROTOCOL_RAW; > > @@ -214,7 +216,15 @@ static int hvc_opal_probe(struct > > platform_device *dev) > > dev->dev.of_node->full_name, > > boot ? " (boot console)" : ""); > > > > - irq = opal_event_request(ilog2(OPAL_EVENT_CONSOLE_INPUT)); > > + rc = of_property_read_u32(dev->dev.of_node, "interrupts", > > &prop); > > + if (rc) { > > + pr_info("hvc%d: No interrupts property, using OPAL > > event\n", > > + termno); > > + irq = > > opal_event_request(ilog2(OPAL_EVENT_CONSOLE_INPUT)); > > + } else { > > + irq = irq_of_parse_and_map(dev->dev.of_node, 0); > > + } > > + > > if (!irq) { > > pr_err("hvc_opal: Unable to map interrupt for > > device %s\n", > > dev->dev.of_node->full_name); -- To unsubscribe from this list: send the line "unsubscribe stable" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html