diff mbox series

[v2,4/5] hw/psi-p9: Follow the external IRQ policy

Message ID 20190905030845.15540-4-oohall@gmail.com
State Superseded
Headers show
Series [v2,1/5] xive, interrupts: Add a mask() source op | expand

Checks

Context Check Description
snowpatch_ozlabs/apply_patch success Successfully applied on branch master (7b12d5489fcfd73ef7ec0cb27eff7f8a5f13b238)
snowpatch_ozlabs/snowpatch_job_snowpatch-skiboot fail Test snowpatch/job/snowpatch-skiboot on branch master
snowpatch_ozlabs/snowpatch_job_snowpatch-skiboot-dco success Signed-off-by present

Commit Message

Oliver O'Halloran Sept. 5, 2019, 3:08 a.m. UTC
The P8 PSI support follows the external IRQ policy and the P9 PSI
doesn't. There are no P9 platforms which define an .external_irq()
in the platform structure so this should not cause any functional
changes.

Linux is smart enough to mask LSIs without a registered handler so
directing them at the OS should be safe.

Cc: Cédric Le Goater <clg@kaod.org>
Signed-off-by: Oliver O'Halloran <oohall@gmail.com>
---
 hw/psi.c | 4 ++++
 1 file changed, 4 insertions(+)

Comments

Cédric Le Goater Sept. 5, 2019, 7:09 a.m. UTC | #1
On 05/09/2019 05:08, Oliver O'Halloran wrote:
> The P8 PSI support follows the external IRQ policy and the P9 PSI
> doesn't. There are no P9 platforms which define an .external_irq()
> in the platform structure so this should not cause any functional
> changes.
> 
> Linux is smart enough to mask LSIs without a registered handler so
> directing them at the OS should be safe.
> 
> Cc: Cédric Le Goater <clg@kaod.org>
> Signed-off-by: Oliver O'Halloran <oohall@gmail.com>

one comment below.

Reviewed-by: Cédric Le Goater <clg@kaod.org>

Thanks,

C.

> ---
>  hw/psi.c | 4 ++++
>  1 file changed, 4 insertions(+)
> 
> diff --git a/hw/psi.c b/hw/psi.c
> index 6c28eb0447ad..ba05be8403d9 100644
> --- a/hw/psi.c
> +++ b/hw/psi.c
> @@ -629,6 +629,10 @@ static uint64_t psi_p9_irq_attributes(struct irq_source *is __unused,
>  	 if (is_lpc_serirq)
>  		 return lpc_get_irq_policy(psi->chip_id, idx - P9_PSI_IRQ_LPC_SIRQ0);
>  
> +	if (idx == P9_PSI_IRQ_EXTERNAL)
> +		if (psi_ext_irq_policy == EXTERNAL_IRQ_POLICY_LINUX)

I would remove the test as this is always true. Less noise in the code.


> +			return IRQ_ATTR_TARGET_LINUX | IRQ_ATTR_TYPE_LSI;
> +
>  	return IRQ_ATTR_TARGET_OPAL | IRQ_ATTR_TYPE_LSI;
>  }
>  
>
diff mbox series

Patch

diff --git a/hw/psi.c b/hw/psi.c
index 6c28eb0447ad..ba05be8403d9 100644
--- a/hw/psi.c
+++ b/hw/psi.c
@@ -629,6 +629,10 @@  static uint64_t psi_p9_irq_attributes(struct irq_source *is __unused,
 	 if (is_lpc_serirq)
 		 return lpc_get_irq_policy(psi->chip_id, idx - P9_PSI_IRQ_LPC_SIRQ0);
 
+	if (idx == P9_PSI_IRQ_EXTERNAL)
+		if (psi_ext_irq_policy == EXTERNAL_IRQ_POLICY_LINUX)
+			return IRQ_ATTR_TARGET_LINUX | IRQ_ATTR_TYPE_LSI;
+
 	return IRQ_ATTR_TARGET_OPAL | IRQ_ATTR_TYPE_LSI;
 }