All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] genirq/msi: Do not use pci_msi_[un]mask_irq as default methods
@ 2015-10-13 18:14 Marc Zyngier
  2015-10-14  2:21 ` Jiang Liu
                   ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: Marc Zyngier @ 2015-10-13 18:14 UTC (permalink / raw)
  To: Thomas Gleixner, Jiang Liu, Bjorn Helgaas; +Cc: linux-kernel

When we create a generic MSI domain, that MSI_FLAG_USE_DEF_CHIP_OPS
is set, and that any of .mask or .unmask are NULL in the irq_chip
structure, we set them to pci_msi_[un]mask_irq.

This is a bad idea for at least two reasons:
- PCI_MSI might not be selected, kernel fails to build (yes, this is
  legitimate, at least on arm64!)
- This may not be a PCI/MSI domain at all (platform MSI, for example)

Either way, this looks wrong. Move the overriding of mask/unmask to
the PCI counterpart, and panic is any of these two methods is not
set in the core code (they really should be present).

Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
---
 drivers/pci/msi.c | 4 ++++
 kernel/irq/msi.c  | 6 +-----
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/drivers/pci/msi.c b/drivers/pci/msi.c
index d449714..4a7da3c 100644
--- a/drivers/pci/msi.c
+++ b/drivers/pci/msi.c
@@ -1243,6 +1243,10 @@ static void pci_msi_domain_update_chip_ops(struct msi_domain_info *info)
 	BUG_ON(!chip);
 	if (!chip->irq_write_msi_msg)
 		chip->irq_write_msi_msg = pci_msi_domain_write_msg;
+	if (!chip->irq_mask)
+		chip->irq_mask = pci_msi_mask_irq;
+	if (!chip->irq_unmask)
+		chip->irq_unmask = pci_msi_unmask_irq;
 }
 
 /**
diff --git a/kernel/irq/msi.c b/kernel/irq/msi.c
index 7e6512b..be9149f 100644
--- a/kernel/irq/msi.c
+++ b/kernel/irq/msi.c
@@ -228,11 +228,7 @@ static void msi_domain_update_chip_ops(struct msi_domain_info *info)
 {
 	struct irq_chip *chip = info->chip;
 
-	BUG_ON(!chip);
-	if (!chip->irq_mask)
-		chip->irq_mask = pci_msi_mask_irq;
-	if (!chip->irq_unmask)
-		chip->irq_unmask = pci_msi_unmask_irq;
+	BUG_ON(!chip || !chip->irq_mask || !chip->irq_unmask);
 	if (!chip->irq_set_affinity)
 		chip->irq_set_affinity = msi_domain_set_affinity;
 }
-- 
2.1.4


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

* Re: [PATCH] genirq/msi: Do not use pci_msi_[un]mask_irq as default methods
  2015-10-13 18:14 [PATCH] genirq/msi: Do not use pci_msi_[un]mask_irq as default methods Marc Zyngier
@ 2015-10-14  2:21 ` Jiang Liu
  2015-10-15  8:40 ` Thomas Gleixner
  2015-10-16 12:18 ` [tip:irq/urgent] genirq/msi: Do not use pci_msi_[un] mask_irq " tip-bot for Marc Zyngier
  2 siblings, 0 replies; 5+ messages in thread
From: Jiang Liu @ 2015-10-14  2:21 UTC (permalink / raw)
  To: Marc Zyngier, Thomas Gleixner, Bjorn Helgaas; +Cc: linux-kernel

On 2015/10/14 2:14, Marc Zyngier wrote:
> When we create a generic MSI domain, that MSI_FLAG_USE_DEF_CHIP_OPS
> is set, and that any of .mask or .unmask are NULL in the irq_chip
> structure, we set them to pci_msi_[un]mask_irq.
> 
> This is a bad idea for at least two reasons:
> - PCI_MSI might not be selected, kernel fails to build (yes, this is
>   legitimate, at least on arm64!)
> - This may not be a PCI/MSI domain at all (platform MSI, for example)
> 
> Either way, this looks wrong. Move the overriding of mask/unmask to
> the PCI counterpart, and panic is any of these two methods is not
> set in the core code (they really should be present).
Hi Marc,
	Thanks for fixing this,
Reviewed-by: Jiang Liu <jiang.liu@linux.intel.com>
Thanks,
Gerry


> 
> Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
> ---
>  drivers/pci/msi.c | 4 ++++
>  kernel/irq/msi.c  | 6 +-----
>  2 files changed, 5 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/pci/msi.c b/drivers/pci/msi.c
> index d449714..4a7da3c 100644
> --- a/drivers/pci/msi.c
> +++ b/drivers/pci/msi.c
> @@ -1243,6 +1243,10 @@ static void pci_msi_domain_update_chip_ops(struct msi_domain_info *info)
>  	BUG_ON(!chip);
>  	if (!chip->irq_write_msi_msg)
>  		chip->irq_write_msi_msg = pci_msi_domain_write_msg;
> +	if (!chip->irq_mask)
> +		chip->irq_mask = pci_msi_mask_irq;
> +	if (!chip->irq_unmask)
> +		chip->irq_unmask = pci_msi_unmask_irq;
>  }
>  
>  /**
> diff --git a/kernel/irq/msi.c b/kernel/irq/msi.c
> index 7e6512b..be9149f 100644
> --- a/kernel/irq/msi.c
> +++ b/kernel/irq/msi.c
> @@ -228,11 +228,7 @@ static void msi_domain_update_chip_ops(struct msi_domain_info *info)
>  {
>  	struct irq_chip *chip = info->chip;
>  
> -	BUG_ON(!chip);
> -	if (!chip->irq_mask)
> -		chip->irq_mask = pci_msi_mask_irq;
> -	if (!chip->irq_unmask)
> -		chip->irq_unmask = pci_msi_unmask_irq;
> +	BUG_ON(!chip || !chip->irq_mask || !chip->irq_unmask);
>  	if (!chip->irq_set_affinity)
>  		chip->irq_set_affinity = msi_domain_set_affinity;
>  }
> 

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

* Re: [PATCH] genirq/msi: Do not use pci_msi_[un]mask_irq as default methods
  2015-10-13 18:14 [PATCH] genirq/msi: Do not use pci_msi_[un]mask_irq as default methods Marc Zyngier
  2015-10-14  2:21 ` Jiang Liu
@ 2015-10-15  8:40 ` Thomas Gleixner
  2015-10-16  9:53   ` Thomas Gleixner
  2015-10-16 12:18 ` [tip:irq/urgent] genirq/msi: Do not use pci_msi_[un] mask_irq " tip-bot for Marc Zyngier
  2 siblings, 1 reply; 5+ messages in thread
From: Thomas Gleixner @ 2015-10-15  8:40 UTC (permalink / raw)
  To: Marc Zyngier; +Cc: Jiang Liu, Bjorn Helgaas, linux-kernel

On Tue, 13 Oct 2015, Marc Zyngier wrote:

> When we create a generic MSI domain, that MSI_FLAG_USE_DEF_CHIP_OPS
> is set, and that any of .mask or .unmask are NULL in the irq_chip
> structure, we set them to pci_msi_[un]mask_irq.
> 
> This is a bad idea for at least two reasons:
> - PCI_MSI might not be selected, kernel fails to build (yes, this is
>   legitimate, at least on arm64!)
> - This may not be a PCI/MSI domain at all (platform MSI, for example)
> 
> Either way, this looks wrong. Move the overriding of mask/unmask to
> the PCI counterpart, and panic is any of these two methods is not
> set in the core code (they really should be present).
> 
> Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>

Reviewed-by: Thomas Gleixner <tglx@linutronix.de>

> ---
>  drivers/pci/msi.c | 4 ++++
>  kernel/irq/msi.c  | 6 +-----
>  2 files changed, 5 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/pci/msi.c b/drivers/pci/msi.c
> index d449714..4a7da3c 100644
> --- a/drivers/pci/msi.c
> +++ b/drivers/pci/msi.c
> @@ -1243,6 +1243,10 @@ static void pci_msi_domain_update_chip_ops(struct msi_domain_info *info)
>  	BUG_ON(!chip);
>  	if (!chip->irq_write_msi_msg)
>  		chip->irq_write_msi_msg = pci_msi_domain_write_msg;
> +	if (!chip->irq_mask)
> +		chip->irq_mask = pci_msi_mask_irq;
> +	if (!chip->irq_unmask)
> +		chip->irq_unmask = pci_msi_unmask_irq;
>  }
>  
>  /**
> diff --git a/kernel/irq/msi.c b/kernel/irq/msi.c
> index 7e6512b..be9149f 100644
> --- a/kernel/irq/msi.c
> +++ b/kernel/irq/msi.c
> @@ -228,11 +228,7 @@ static void msi_domain_update_chip_ops(struct msi_domain_info *info)
>  {
>  	struct irq_chip *chip = info->chip;
>  
> -	BUG_ON(!chip);
> -	if (!chip->irq_mask)
> -		chip->irq_mask = pci_msi_mask_irq;
> -	if (!chip->irq_unmask)
> -		chip->irq_unmask = pci_msi_unmask_irq;
> +	BUG_ON(!chip || !chip->irq_mask || !chip->irq_unmask);
>  	if (!chip->irq_set_affinity)
>  		chip->irq_set_affinity = msi_domain_set_affinity;
>  }
> -- 
> 2.1.4
> 
> 

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

* Re: [PATCH] genirq/msi: Do not use pci_msi_[un]mask_irq as default methods
  2015-10-15  8:40 ` Thomas Gleixner
@ 2015-10-16  9:53   ` Thomas Gleixner
  0 siblings, 0 replies; 5+ messages in thread
From: Thomas Gleixner @ 2015-10-16  9:53 UTC (permalink / raw)
  To: Marc Zyngier; +Cc: Jiang Liu, Bjorn Helgaas, linux-kernel

Bjorn,

On Thu, 15 Oct 2015, Thomas Gleixner wrote:
> On Tue, 13 Oct 2015, Marc Zyngier wrote:
> 
> > When we create a generic MSI domain, that MSI_FLAG_USE_DEF_CHIP_OPS
> > is set, and that any of .mask or .unmask are NULL in the irq_chip
> > structure, we set them to pci_msi_[un]mask_irq.
> > 
> > This is a bad idea for at least two reasons:
> > - PCI_MSI might not be selected, kernel fails to build (yes, this is
> >   legitimate, at least on arm64!)
> > - This may not be a PCI/MSI domain at all (platform MSI, for example)
> > 
> > Either way, this looks wrong. Move the overriding of mask/unmask to
> > the PCI counterpart, and panic is any of these two methods is not
> > set in the core code (they really should be present).
> > 
> > Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>

Should I take that one?

Thanks,

	tglx

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

* [tip:irq/urgent] genirq/msi: Do not use pci_msi_[un] mask_irq as default methods
  2015-10-13 18:14 [PATCH] genirq/msi: Do not use pci_msi_[un]mask_irq as default methods Marc Zyngier
  2015-10-14  2:21 ` Jiang Liu
  2015-10-15  8:40 ` Thomas Gleixner
@ 2015-10-16 12:18 ` tip-bot for Marc Zyngier
  2 siblings, 0 replies; 5+ messages in thread
From: tip-bot for Marc Zyngier @ 2015-10-16 12:18 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: marc.zyngier, jiang.liu, mingo, tglx, linux-kernel, bhelgaas, hpa

Commit-ID:  0701c53e460ea64daf0ee789d0b08fef57800016
Gitweb:     http://git.kernel.org/tip/0701c53e460ea64daf0ee789d0b08fef57800016
Author:     Marc Zyngier <marc.zyngier@arm.com>
AuthorDate: Tue, 13 Oct 2015 19:14:45 +0100
Committer:  Thomas Gleixner <tglx@linutronix.de>
CommitDate: Fri, 16 Oct 2015 12:40:43 +0200

genirq/msi: Do not use pci_msi_[un]mask_irq as default methods

When we create a generic MSI domain, that MSI_FLAG_USE_DEF_CHIP_OPS
is set, and that any of .mask or .unmask are NULL in the irq_chip
structure, we set them to pci_msi_[un]mask_irq.

This is a bad idea for at least two reasons:
- PCI_MSI might not be selected, kernel fails to build (yes, this is
  legitimate, at least on arm64!)
- This may not be a PCI/MSI domain at all (platform MSI, for example)

Either way, this looks wrong. Move the overriding of mask/unmask to
the PCI counterpart, and panic is any of these two methods is not
set in the core code (they really should be present).

Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Cc: Jiang Liu <jiang.liu@linux.intel.com>
Cc: Bjorn Helgaas <bhelgaas@google.com>
Link: http://lkml.kernel.org/r/1444760085-27857-1-git-send-email-marc.zyngier@arm.com
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
 drivers/pci/msi.c | 4 ++++
 kernel/irq/msi.c  | 6 +-----
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/drivers/pci/msi.c b/drivers/pci/msi.c
index d449714..4a7da3c 100644
--- a/drivers/pci/msi.c
+++ b/drivers/pci/msi.c
@@ -1243,6 +1243,10 @@ static void pci_msi_domain_update_chip_ops(struct msi_domain_info *info)
 	BUG_ON(!chip);
 	if (!chip->irq_write_msi_msg)
 		chip->irq_write_msi_msg = pci_msi_domain_write_msg;
+	if (!chip->irq_mask)
+		chip->irq_mask = pci_msi_mask_irq;
+	if (!chip->irq_unmask)
+		chip->irq_unmask = pci_msi_unmask_irq;
 }
 
 /**
diff --git a/kernel/irq/msi.c b/kernel/irq/msi.c
index 7e6512b..be9149f 100644
--- a/kernel/irq/msi.c
+++ b/kernel/irq/msi.c
@@ -228,11 +228,7 @@ static void msi_domain_update_chip_ops(struct msi_domain_info *info)
 {
 	struct irq_chip *chip = info->chip;
 
-	BUG_ON(!chip);
-	if (!chip->irq_mask)
-		chip->irq_mask = pci_msi_mask_irq;
-	if (!chip->irq_unmask)
-		chip->irq_unmask = pci_msi_unmask_irq;
+	BUG_ON(!chip || !chip->irq_mask || !chip->irq_unmask);
 	if (!chip->irq_set_affinity)
 		chip->irq_set_affinity = msi_domain_set_affinity;
 }

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

end of thread, other threads:[~2015-10-16 12:18 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-10-13 18:14 [PATCH] genirq/msi: Do not use pci_msi_[un]mask_irq as default methods Marc Zyngier
2015-10-14  2:21 ` Jiang Liu
2015-10-15  8:40 ` Thomas Gleixner
2015-10-16  9:53   ` Thomas Gleixner
2015-10-16 12:18 ` [tip:irq/urgent] genirq/msi: Do not use pci_msi_[un] mask_irq " tip-bot for Marc Zyngier

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.