xen-devel.lists.xenproject.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] x86/MSI: fix MSI-X case of freeing IRQ
@ 2014-10-02  7:05 Jan Beulich
  2014-10-02  8:03 ` Andrew Cooper
  0 siblings, 1 reply; 2+ messages in thread
From: Jan Beulich @ 2014-10-02  7:05 UTC (permalink / raw)
  To: xen-devel; +Cc: Keir Fraser

[-- Attachment #1: Type: text/plain, Size: 1386 bytes --]

Commit d1b6d0a024 ("x86: enable multi-vector MSI") went a little too
far with moving things around in msi_free_irqs() in order to streamline
the code: We shouldn't drop the MSI-X control page reference before
calling destroy_irq(), as the latter will call us back via
desc->handler->shutdown() (effectively invoking to msi_set_mask_bit()).

Signed-off-by: Jan Beulich <jbeulich@suse.com>

--- a/xen/arch/x86/msi.c
+++ b/xen/arch/x86/msi.c
@@ -496,15 +496,8 @@ int __setup_msi_irq(struct irq_desc *des
 
 int msi_free_irq(struct msi_desc *entry)
 {
-    unsigned int nr = entry->msi.nvec;
-
-    if ( entry->msi_attrib.type == PCI_CAP_ID_MSIX )
-    {
-        unsigned long start;
-        start = (unsigned long)entry->mask_base & ~(PAGE_SIZE - 1);
-        msix_put_fixmap(entry->dev->msix, virt_to_fix(start));
-        nr = 1;
-    }
+    unsigned int nr = entry->msi_attrib.type != PCI_CAP_ID_MSIX
+                      ? entry->msi.nvec : 1;
 
     while ( nr-- )
     {
@@ -515,6 +508,10 @@ int msi_free_irq(struct msi_desc *entry)
             iommu_update_ire_from_msi(entry + nr, NULL);
     }
 
+    if ( entry->msi_attrib.type == PCI_CAP_ID_MSIX )
+        msix_put_fixmap(entry->dev->msix,
+                        virt_to_fix((unsigned long)entry->mask_base));
+
     list_del(&entry->list);
     xfree(entry);
     return 0;




[-- Attachment #2: x86-MSI-X-free-irq.patch --]
[-- Type: text/plain, Size: 1422 bytes --]

x86/MSI: fix MSI-X case of freeing IRQ

Commit d1b6d0a024 ("x86: enable multi-vector MSI") went a little too
far with moving things around in msi_free_irqs() in order to streamline
the code: We shouldn't drop the MSI-X control page reference before
calling destroy_irq(), as the latter will call us back via
desc->handler->shutdown() (effectively invoking to msi_set_mask_bit()).

Signed-off-by: Jan Beulich <jbeulich@suse.com>

--- a/xen/arch/x86/msi.c
+++ b/xen/arch/x86/msi.c
@@ -496,15 +496,8 @@ int __setup_msi_irq(struct irq_desc *des
 
 int msi_free_irq(struct msi_desc *entry)
 {
-    unsigned int nr = entry->msi.nvec;
-
-    if ( entry->msi_attrib.type == PCI_CAP_ID_MSIX )
-    {
-        unsigned long start;
-        start = (unsigned long)entry->mask_base & ~(PAGE_SIZE - 1);
-        msix_put_fixmap(entry->dev->msix, virt_to_fix(start));
-        nr = 1;
-    }
+    unsigned int nr = entry->msi_attrib.type != PCI_CAP_ID_MSIX
+                      ? entry->msi.nvec : 1;
 
     while ( nr-- )
     {
@@ -515,6 +508,10 @@ int msi_free_irq(struct msi_desc *entry)
             iommu_update_ire_from_msi(entry + nr, NULL);
     }
 
+    if ( entry->msi_attrib.type == PCI_CAP_ID_MSIX )
+        msix_put_fixmap(entry->dev->msix,
+                        virt_to_fix((unsigned long)entry->mask_base));
+
     list_del(&entry->list);
     xfree(entry);
     return 0;

[-- Attachment #3: Type: text/plain, Size: 126 bytes --]

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel

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

* Re: [PATCH] x86/MSI: fix MSI-X case of freeing IRQ
  2014-10-02  7:05 [PATCH] x86/MSI: fix MSI-X case of freeing IRQ Jan Beulich
@ 2014-10-02  8:03 ` Andrew Cooper
  0 siblings, 0 replies; 2+ messages in thread
From: Andrew Cooper @ 2014-10-02  8:03 UTC (permalink / raw)
  To: Jan Beulich, xen-devel; +Cc: Keir Fraser


[-- Attachment #1.1: Type: text/plain, Size: 1659 bytes --]

On 02/10/2014 08:05, Jan Beulich wrote:
> Commit d1b6d0a024 ("x86: enable multi-vector MSI") went a little too
> far with moving things around in msi_free_irqs() in order to streamline
> the code: We shouldn't drop the MSI-X control page reference before
> calling destroy_irq(), as the latter will call us back via
> desc->handler->shutdown() (effectively invoking to msi_set_mask_bit()).
>
> Signed-off-by: Jan Beulich <jbeulich@suse.com>

Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>

>
> --- a/xen/arch/x86/msi.c
> +++ b/xen/arch/x86/msi.c
> @@ -496,15 +496,8 @@ int __setup_msi_irq(struct irq_desc *des
>  
>  int msi_free_irq(struct msi_desc *entry)
>  {
> -    unsigned int nr = entry->msi.nvec;
> -
> -    if ( entry->msi_attrib.type == PCI_CAP_ID_MSIX )
> -    {
> -        unsigned long start;
> -        start = (unsigned long)entry->mask_base & ~(PAGE_SIZE - 1);
> -        msix_put_fixmap(entry->dev->msix, virt_to_fix(start));
> -        nr = 1;
> -    }
> +    unsigned int nr = entry->msi_attrib.type != PCI_CAP_ID_MSIX
> +                      ? entry->msi.nvec : 1;
>  
>      while ( nr-- )
>      {
> @@ -515,6 +508,10 @@ int msi_free_irq(struct msi_desc *entry)
>              iommu_update_ire_from_msi(entry + nr, NULL);
>      }
>  
> +    if ( entry->msi_attrib.type == PCI_CAP_ID_MSIX )
> +        msix_put_fixmap(entry->dev->msix,
> +                        virt_to_fix((unsigned long)entry->mask_base));
> +
>      list_del(&entry->list);
>      xfree(entry);
>      return 0;
>
>
>
>
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xen.org
> http://lists.xen.org/xen-devel


[-- Attachment #1.2: Type: text/html, Size: 2555 bytes --]

[-- Attachment #2: Type: text/plain, Size: 126 bytes --]

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel

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

end of thread, other threads:[~2014-10-02  8:03 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-10-02  7:05 [PATCH] x86/MSI: fix MSI-X case of freeing IRQ Jan Beulich
2014-10-02  8:03 ` Andrew Cooper

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).