All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Durrant, Paul" <pdurrant@amazon.com>
To: Sander Eikelenboom <linux@eikelenboom.it>,
	Jan Beulich <jbeulich@suse.com>
Cc: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>,
	Paul Durrant <paul@xen.org>,
	Igor Druzhinin <igor.druzhinin@citrix.com>
Subject: Re: [Xen-devel] xen-unstable (4.14 to be): Assertion '!preempt_count()' failed at preempt.c:36
Date: Thu, 5 Dec 2019 08:35:18 +0000	[thread overview]
Message-ID: <62b58da082e449eb960bada0ea34e3f9@EX13D32EUC003.ant.amazon.com> (raw)
In-Reply-To: <08b761ad-c84b-3dad-2dd1-f9b69b0fe2a7@eikelenboom.it>

> -----Original Message-----
> From: Xen-devel <xen-devel-bounces@lists.xenproject.org> On Behalf Of
> Sander Eikelenboom
> Sent: 04 December 2019 21:04
> To: Jan Beulich <jbeulich@suse.com>
> Cc: xen-devel@lists.xenproject.org; Igor Druzhinin
> <igor.druzhinin@citrix.com>; Paul Durrant <paul@xen.org>
> Subject: Re: [Xen-devel] xen-unstable (4.14 to be): Assertion
> '!preempt_count()' failed at preempt.c:36
> 
> On 04/12/2019 18:30, Jan Beulich wrote:
> > On 04.12.2019 18:21, Sander Eikelenboom wrote:
> >> On current xen-unstable (4.14 to be) and AMD cpu:
> >>
> >> After rebooting the host, while the guests are starting, I hit the
> assertion below.
> >> xen-staging-4.13 seems fine on the same machine.
> >
> > Nothing between 4.13 RC4 and the tip of staging stands out,
> > so I wonder if you could bisect over this range? Or perhaps
> > someone else sees something I don't see (right now).
> >
> > Jan
> 
> Bisection came up with:
> 
> commit cd7dedad8209753e0fc8a97e61d04b74912b53dc
> Author: Paul Durrant <paul.durrant@citrix.com>
> Date:   Fri Nov 15 18:59:30 2019 +0000
> 
>     passthrough: simplify locking and logging
> 
>     Dropping the pcidevs lock between calling device_assigned() and
>     assign_device() means that the latter has to do the same check as the
>     former for no obvious gain. Also, since long running operations under
>     pcidevs lock already drop the lock and return -ERESTART periodically
> there
>     is little point in immediately failing an assignment operation with
>     -ERESTART just because the pcidevs lock could not be acquired (for the
>     second time, having already blocked on acquiring the lock in
>     device_assigned()).
> 
>     This patch instead acquires the lock once for assignment (or test
> assign)
>     operations directly in iommu_do_pci_domctl() and thus can remove the
>     duplicate domain ownership check in assign_device(). Whilst in the
>     neighbourhood, the patch also removes some debug logging from
>     assign_device() and deassign_device() and replaces it with proper
> error
>     logging, which allows error logging in iommu_do_pci_domctl() to be
>     removed.
> 
>     Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
>     Signed-off-by: Igor Druzhinin <igor.druzhinin@citrix.com>
>     Acked-by: Jan Beulich <jbeulich@suse.com>
> 

Going through the code, I notice a missing pcidevs_unlock() in the case of a device already assigned. I fixed it with a bit of re-structuring. Could you try the following patch?

---8<---
diff --git a/xen/drivers/passthrough/pci.c b/xen/drivers/passthrough/pci.c
index ced0c28e4f..c7207998a5 100644
--- a/xen/drivers/passthrough/pci.c
+++ b/xen/drivers/passthrough/pci.c
@@ -1696,16 +1696,12 @@ int iommu_do_pci_domctl(

         pcidevs_lock();
         ret = device_assigned(seg, bus, devfn);
-        if ( domctl->cmd == XEN_DOMCTL_test_assign_device )
+        if ( ret && domctl->cmd == XEN_DOMCTL_test_assign_device )
         {
-            if ( ret )
-            {
-                printk(XENLOG_G_INFO
-                       "%04x:%02x:%02x.%u already assigned, or non-existent\n",
-                       seg, bus, PCI_SLOT(devfn), PCI_FUNC(devfn));
-                ret = -EINVAL;
-            }
-            break;
+            printk(XENLOG_G_INFO
+                   "%04x:%02x:%02x.%u already assigned, or non-existent\n",
+                   seg, bus, PCI_SLOT(devfn), PCI_FUNC(devfn));
+            ret = -EINVAL;
         }
---8<---

Thanks,

  Paul


_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

  reply	other threads:[~2019-12-05  8:36 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-12-04 17:21 [Xen-devel] xen-unstable (4.14 to be): Assertion '!preempt_count()' failed at preempt.c:36 Sander Eikelenboom
2019-12-04 17:30 ` Jan Beulich
2019-12-04 21:03   ` Sander Eikelenboom
2019-12-05  8:35     ` Durrant, Paul [this message]
2019-12-05  8:43       ` Jan Beulich
2019-12-05  8:47         ` Durrant, Paul

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=62b58da082e449eb960bada0ea34e3f9@EX13D32EUC003.ant.amazon.com \
    --to=pdurrant@amazon.com \
    --cc=igor.druzhinin@citrix.com \
    --cc=jbeulich@suse.com \
    --cc=linux@eikelenboom.it \
    --cc=paul@xen.org \
    --cc=xen-devel@lists.xenproject.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.