[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH] grant-tables: do not fail attempts to GNTTABOP_set_version to the current version
# HG changeset patch # User Ian Campbell <ian.campbell@xxxxxxxxxx> # Date 1259835732 0 # Node ID 2c88f78095f90c9c2e3e5149afadecb50c29c6b3 # Parent aa0b5558564f882903ca1c84948bc2a3619d9f73 grant-tables: do not fail attempts to GNTTABOP_set_version to the current version. even if theiur are active grants. This triggers when checkpoint a guest which essentially resumes without actually having gone through the suspend so the domain is already latched to v2 inside Xen. Also return the current actual version on success and failure. Not terribly useful with only 2 options but is more robust to future developments. Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx> Cc: Jeremy Fitzhardinge <jeremy@xxxxxxxx> Cc: Brendan Cully <brendan@xxxxxxxxxx> Cc: Steven Smith <Steven.Smith@xxxxxxxxxxxxx> diff -r aa0b5558564f -r 2c88f78095f9 xen/common/grant_table.c --- a/xen/common/grant_table.c Wed Dec 02 18:46:14 2009 +0000 +++ b/xen/common/grant_table.c Thu Dec 03 10:22:12 2009 +0000 @@ -1972,14 +1972,19 @@ struct domain *d = current->domain; struct grant_table *gt = d->grant_table; struct active_grant_entry *act; - long res = 0; + long res; int i; if (copy_from_guest(&op, uop, 1)) return -EFAULT; + res = -EINVAL; if (op.version != 1 && op.version != 2) - return -EINVAL; + goto out; + + res = 0; + if ( gt->gt_version == op.version ) + goto out; spin_lock(>->lock); /* Make sure that the grant table isn't currently in use when we @@ -1997,7 +2002,7 @@ gt->gt_version, op.version); res = -EBUSY; - goto out; + goto out_unlock; } } } @@ -2009,7 +2014,7 @@ { res = gnttab_populate_status_frames(d, gt); if ( res < 0) - goto out; + goto out_unlock; } if ( op.version < 2 && gt->gt_version == 2 ) @@ -2025,8 +2030,14 @@ gt->gt_version = op.version; +out_unlock: + spin_unlock(>->lock); + out: - spin_unlock(>->lock); + op.version = gt->gt_version; + + if (copy_to_guest(uop, &op, 1)) + res = -EFAULT; return res; } diff -r aa0b5558564f -r 2c88f78095f9 xen/include/public/grant_table.h --- a/xen/include/public/grant_table.h Wed Dec 02 18:46:14 2009 +0000 +++ b/xen/include/public/grant_table.h Thu Dec 03 10:22:12 2009 +0000 @@ -463,7 +463,7 @@ */ #define GNTTABOP_set_version 8 struct gnttab_set_version { - /* IN parameters */ + /* IN/OUT parameters */ uint32_t version; }; typedef struct gnttab_set_version gnttab_set_version_t; _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |