From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: Re: [PATCH v9 05/11] xen: grant_table: implement grant_table_warn_active_grants() Date: Thu, 16 Jul 2015 14:43:45 -0400 Message-ID: <20150716184345.GG14309@x230.dumpdata.com> References: <1437064046-12174-1-git-send-email-vkuznets@redhat.com> <1437064046-12174-6-git-send-email-vkuznets@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Received: from mail6.bemta14.messagelabs.com ([193.109.254.103]) by lists.xen.org with esmtp (Exim 4.72) (envelope-from ) id 1ZFo9i-00087B-H2 for xen-devel@lists.xenproject.org; Thu, 16 Jul 2015 18:45:14 +0000 Content-Disposition: inline In-Reply-To: <1437064046-12174-6-git-send-email-vkuznets@redhat.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Vitaly Kuznetsov Cc: Wei Liu , Andrew Jones , Keir Fraser , Ian Campbell , Stefano Stabellini , Andrew Cooper , Julien Grall , Ian Jackson , Olaf Hering , Tim Deegan , David Vrabel , Jan Beulich , xen-devel@lists.xenproject.org, Daniel De Graaf List-Id: xen-devel@lists.xenproject.org On Thu, Jul 16, 2015 at 06:27:20PM +0200, Vitaly Kuznetsov wrote: > 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 Reviewed-by: Konrad Rzeszutek Wilk > --- > Changes since v8: > - Use WARN_GRANT_MAX define instead of hardcoded 10 [Konrad Rzeszutek Wilk] > - Update commit message explaining why 'g' keyhandler is not enough > [Konrad Rzeszutek Wilk] > --- > 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 92f078e..c2e0210 100644 > --- a/xen/common/grant_table.c > +++ b/xen/common/grant_table.c > @@ -3348,6 +3348,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(>->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(>->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 9c7b5a3..54005cc 100644 > --- a/xen/include/xen/grant_table.h > +++ b/xen/include/xen/grant_table.h > @@ -90,6 +90,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 >