[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v9 05/11] xen: grant_table: implement grant_table_warn_active_grants()
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 <vkuznets@xxxxxxxxxx> Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx> > --- > 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 > _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |