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

Samuel Mendoza-Jonas sam at mendozajonas.com
Wed Nov 23 16:52:53 AEDT 2016


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.

> 
> 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);
>  	}
>  }
>  



More information about the Skiboot mailing list