[Skiboot] [PATCH] Revert "fsp/console: Allocate irq for each hvc console"

Samuel Mendoza-Jonas sam at mendozajonas.com
Wed Nov 23 17:03:22 AEDT 2016


On Wed, 2016-11-23 at 16:52 +1100, Samuel Mendoza-Jonas wrote:
> On Tue, 2016-11-22 at 10:49 +0530, Pridhiviraj Paidipeddi wrote:
> > This reverts commit 583c8203dcb26b42cea81e4734ea926dae05dbb9.
> 
> Stewart, please don't merge this yet.
> Without the patch to add irqs for hvc consoles, we'll get the original
> lockup problem in Linux 4.2+ that this aimed to solve. We'll need to
> work out something to make older kernels happy.

Ah as I page this back into my brain we should be saved by commit fd6b71fc
which ignores unresponsive consoles (eg. hvc1). Still, without this patch
host serial will be unusable on Firenze systems.

> 
> > 
> > Below is the WARNING in pre 4.2 linux kernels which is raised in firenze
> > systems due to interrupts mapping failure.
> > 
> > [    0.947741] irq: irq-62==>hwirq-0x3e mapping failed: -22
> > [    0.947793] ------------[ cut here ]------------
> > [    0.947838] WARNING: at kernel/irq/irqdomain.c:485
> > 
> > So this commit 583c8203dcb26b42cea81e4734ea926dae05dbb9 is causing
> > the above kernel WARNING(found by git-bisect).
> > 
> > Signed-off-by: Pridhiviraj Paidipeddi <ppaidipe at linux.vnet.ibm.com>
> > ---
> >  hw/fsp/fsp-console.c | 26 +++++---------------------
> >  1 file changed, 5 insertions(+), 21 deletions(-)
> > 
> > diff --git a/hw/fsp/fsp-console.c b/hw/fsp/fsp-console.c
> > index 0080d73..5e27197 100644
> > --- a/hw/fsp/fsp-console.c
> > +++ b/hw/fsp/fsp-console.c
> > @@ -55,7 +55,6 @@ struct fsp_serial {
> >  	struct fsp_serbuf_hdr	*out_buf;
> >  	struct fsp_msg		*poke_msg;
> >  	u8			waiting;
> > -	u64			irq;
> >  };
> >  
> >  #define SER_BUFFER_SIZE 0x00040000UL
> > @@ -194,7 +193,6 @@ static size_t fsp_write_vserial(struct fsp_serial *fs, const char *buf,
> >  #ifndef DISABLE_CON_PENDING_EVT
> >  	opal_update_pending_evt(OPAL_EVENT_CONSOLE_OUTPUT,
> >  				OPAL_EVENT_CONSOLE_OUTPUT);
> > -	opal_update_pending_evt(fs->irq, fs->irq);
> >  #endif
> >  	return len;
> >  }
> > @@ -467,7 +465,6 @@ static bool fsp_con_msg_vt(u32 cmd_sub_mod, struct fsp_msg *msg)
> >  		lock(&fsp_con_lock);
> >  		opal_update_pending_evt(OPAL_EVENT_CONSOLE_INPUT,
> >  					OPAL_EVENT_CONSOLE_INPUT);
> > -		opal_update_pending_evt(fs->irq, fs->irq);
> >  		unlock(&fsp_con_lock);
> >  	}
> >  	return true;
> > @@ -707,10 +704,8 @@ static int64_t fsp_console_read(int64_t term_number, int64_t *length,
> >  			}
> >  		}
> >  	}
> > -	if (!pending) {
> > -		opal_update_pending_evt(fs->irq, 0);
> > +	if (!pending)
> >  		opal_update_pending_evt(OPAL_EVENT_CONSOLE_INPUT, 0);
> > -	}
> >  
> >  	unlock(&fsp_con_lock);
> >  
> > @@ -746,14 +741,11 @@ void fsp_console_poll(void *data __unused)
> >  
> >  			if (!fs->open)
> >  				continue;
> > -			if (sb->next_out == sb->next_in) {
> > -				opal_update_pending_evt(fs->irq, 0);
> > +			if (sb->next_out == sb->next_in)
> >  				continue;
> > -			}
> > -			if (fs->log_port) {
> > +			if (fs->log_port)
> >  				__flush_console(true);
> > -				opal_update_pending_evt(fs->irq, 0);
> > -			} else {
> > +			else {
> >  #ifdef OPAL_DEBUG_CONSOLE_POLL
> >  				if (debug < 5) {
> >  					prlog(PR_DEBUG,"OPAL: %d still pending"
> > @@ -918,7 +910,7 @@ void fsp_console_reset(void)
> >  void fsp_console_add_nodes(void)
> >  {
> >  	unsigned int i;
> > -	struct dt_node *consoles, *opal_event;
> > +	struct dt_node *consoles;
> >  
> >  	consoles = dt_new(opal_node, "consoles");
> >  	dt_add_property_cells(consoles, "#address-cells", 1);
> > @@ -943,14 +935,6 @@ void fsp_console_add_nodes(void)
> >  				     "#write-buffer-size", SER_BUF_DATA_SIZE);
> >  		dt_add_property_cells(fs_node, "reg", i);
> >  		dt_add_property_string(fs_node, "device_type", "serial");
> > -
> > -		fs->irq = opal_dynamic_event_alloc();
> > -		dt_add_property_cells(fs_node, "interrupts", ilog2(fs->irq));
> > -
> > -		opal_event = dt_find_by_name(opal_node, "event");
> > -		if (opal_event)
> > -			dt_add_property_cells(fs_node, "interrupt-parent",
> > -					      opal_event->phandle);
> >  	}
> >  }
> >  
> 
> _______________________________________________
> Skiboot mailing list
> Skiboot at lists.ozlabs.org
> https://lists.ozlabs.org/listinfo/skiboot



More information about the Skiboot mailing list