xen-devel.lists.xenproject.org archive mirror
 help / color / mirror / Atom feed
From: Vitaly Kuznetsov <vkuznets@redhat.com>
To: xen-devel@lists.xenproject.org
Cc: Andrew Jones <drjones@redhat.com>,
	Julien Grall <julien.grall@linaro.org>,
	Keir Fraser <keir@xen.org>,
	Ian Campbell <ian.campbell@citrix.com>,
	Stefano Stabellini <stefano.stabellini@eu.citrix.com>,
	Andrew Cooper <andrew.cooper3@citrix.com>,
	Ian Jackson <ian.jackson@eu.citrix.com>,
	Olaf Hering <olaf@aepfle.de>, Tim Deegan <tim@xen.org>,
	David Vrabel <david.vrabel@citrix.com>,
	Jan Beulich <jbeulich@suse.com>, Wei Liu <wei.liu2@citrix.com>,
	Daniel De Graaf <dgdegra@tycho.nsa.gov>
Subject: [PATCH v11 05/11] xen: grant_table: implement grant_table_warn_active_grants()
Date: Fri,  4 Sep 2015 15:39:45 +0200	[thread overview]
Message-ID: <1441373991-18332-6-git-send-email-vkuznets@redhat.com> (raw)
In-Reply-To: <1441373991-18332-1-git-send-email-vkuznets@redhat.com>

Log first 10 active grants for a domain. This function is going to be used
for soft reset, active grants on this path usually mean misbehaving backends
refusing to release their mappings on shutdown. We need that in addition to
the already existent 'g' keyhandler as such misbehaving backends can cause a
domain to crash right after the soft reset operation and 'g' option won't be
available in this case.

Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com>
Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Acked-by: Jan Beulich <jbeulich@suse.com>
---
Changes since v10:
- None.
---
 xen/common/grant_table.c      | 35 +++++++++++++++++++++++++++++++++++
 xen/include/xen/grant_table.h |  5 +++++
 2 files changed, 40 insertions(+)

diff --git a/xen/common/grant_table.c b/xen/common/grant_table.c
index 2b449d5..23185e7 100644
--- a/xen/common/grant_table.c
+++ b/xen/common/grant_table.c
@@ -3352,6 +3352,41 @@ gnttab_release_mappings(
     }
 }
 
+void grant_table_warn_active_grants(struct domain *d)
+{
+    struct grant_table *gt = d->grant_table;
+    struct active_grant_entry *act;
+    grant_ref_t ref;
+    unsigned int nr_active = 0;
+
+#define WARN_GRANT_MAX 10
+
+    read_lock(&gt->lock);
+
+    for ( ref = 0; ref != nr_grant_entries(gt); ref++ )
+    {
+        act = active_entry_acquire(gt, ref);
+        if ( !act->pin )
+        {
+            active_entry_release(act);
+            continue;
+        }
+
+        nr_active++;
+        if ( nr_active <= WARN_GRANT_MAX )
+            printk(XENLOG_G_DEBUG "Dom%d has an active grant: GFN: %lx (MFN: %lx)\n",
+                   d->domain_id, act->gfn, act->frame);
+        active_entry_release(act);
+    }
+
+    if ( nr_active > WARN_GRANT_MAX )
+        printk(XENLOG_G_DEBUG "Dom%d has too many (%d) active grants to report\n",
+               d->domain_id, nr_active);
+
+    read_unlock(&gt->lock);
+
+#undef WARN_GRANT_MAX
+}
 
 void
 grant_table_destroy(
diff --git a/xen/include/xen/grant_table.h b/xen/include/xen/grant_table.h
index 5263fd6..1c29cee 100644
--- a/xen/include/xen/grant_table.h
+++ b/xen/include/xen/grant_table.h
@@ -89,6 +89,11 @@ void grant_table_destroy(
     struct domain *d);
 void grant_table_init_vcpu(struct vcpu *v);
 
+/*
+ * Check if domain has active grants and log first 10 of them.
+ */
+void grant_table_warn_active_grants(struct domain *d);
+
 /* Domain death release of granted mappings of other domains' memory. */
 void
 gnttab_release_mappings(
-- 
2.4.3

  parent reply	other threads:[~2015-09-04 13:40 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-09-04 13:39 [PATCH v11 00/11] toolstack-assisted approach to PVHVM guest kexec Vitaly Kuznetsov
2015-09-04 13:39 ` [PATCH v11 01/11] xen: introduce SHUTDOWN_soft_reset shutdown reason Vitaly Kuznetsov
2015-09-04 13:39 ` [PATCH v11 02/11] libxl: support " Vitaly Kuznetsov
2015-09-04 13:39 ` [PATCH v11 03/11] xl: introduce enum domain_restart_type Vitaly Kuznetsov
2015-09-04 13:39 ` [PATCH v11 04/11] xen: evtchn: make evtchn_reset() ready for soft reset Vitaly Kuznetsov
2015-09-04 13:39 ` Vitaly Kuznetsov [this message]
2015-09-04 13:39 ` [PATCH v11 06/11] xen: Introduce XEN_DOMCTL_soft_reset Vitaly Kuznetsov
2015-09-04 13:39 ` [PATCH v11 07/11] flask: DOMCTL_soft_reset support Vitaly Kuznetsov
2015-09-04 13:39 ` [PATCH v11 08/11] xen: arch-specific hooks for domain_soft_reset() Vitaly Kuznetsov
2015-09-04 13:39 ` [PATCH v11 09/11] libxc: support XEN_DOMCTL_soft_reset operation Vitaly Kuznetsov
2015-09-04 13:39 ` [PATCH v11 10/11] libxl: add LIBXL_DEVICE_MODEL_SAVE_FILE Vitaly Kuznetsov
2015-09-04 13:39 ` [PATCH v11 11/11] (lib)xl: soft reset support Vitaly Kuznetsov
2015-09-14 16:15   ` Wei Liu
2015-09-14 16:54     ` Vitaly Kuznetsov
2015-09-14 17:46       ` Wei Liu
2015-09-15  8:38     ` Ian Campbell
2015-09-15 12:57       ` Jan Beulich

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=1441373991-18332-6-git-send-email-vkuznets@redhat.com \
    --to=vkuznets@redhat.com \
    --cc=andrew.cooper3@citrix.com \
    --cc=david.vrabel@citrix.com \
    --cc=dgdegra@tycho.nsa.gov \
    --cc=drjones@redhat.com \
    --cc=ian.campbell@citrix.com \
    --cc=ian.jackson@eu.citrix.com \
    --cc=jbeulich@suse.com \
    --cc=julien.grall@linaro.org \
    --cc=keir@xen.org \
    --cc=olaf@aepfle.de \
    --cc=stefano.stabellini@eu.citrix.com \
    --cc=tim@xen.org \
    --cc=wei.liu2@citrix.com \
    --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 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).