[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH 3/4] xen/domctl: Introduce fault_ttl
To inject a simulated resource failure, for testing purposes. Given a specific set of hypercall parameters, the failure is in a repeatable position, for the currently booted Xen. The exact position of failures is highly dependent on the build of Xen, and hardware support. Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> --- CC: Jan Beulich <JBeulich@xxxxxxxx> CC: Roger Pau Monné <roger.pau@xxxxxxxxxx> CC: Wei Liu <wl@xxxxxxx> CC: Stefano Stabellini <sstabellini@xxxxxxxxxx> CC: Julien Grall <julien@xxxxxxx> CC: Volodymyr Babchuk <Volodymyr_Babchuk@xxxxxxxx> CC: Tamas K Lengyel <tamas@xxxxxxxxxxxxx> RFC: * Probably wants to be Kconfig'd * I'm thinking of dropping handle from xen_domctl_createdomain because it's a waste of valuable space. --- xen/common/dmalloc.c | 8 +++++++- xen/common/domain.c | 8 ++++++-- xen/include/public/domctl.h | 1 + xen/include/xen/sched.h | 1 + 4 files changed, 15 insertions(+), 3 deletions(-) diff --git a/xen/common/dmalloc.c b/xen/common/dmalloc.c index e3a0e546c2..1f5d0f5627 100644 --- a/xen/common/dmalloc.c +++ b/xen/common/dmalloc.c @@ -10,7 +10,13 @@ void dfree(struct domain *d, void *ptr) void *_dzalloc(struct domain *d, size_t size, size_t align) { - void *ptr = _xmalloc(size, align); + void *ptr; + + if ( atomic_read(&d->fault_ttl) && + atomic_dec_and_test(&d->fault_ttl) ) + return NULL; + + ptr = _xmalloc(size, align); if ( ptr ) atomic_inc(&d->dalloc_heap); diff --git a/xen/common/domain.c b/xen/common/domain.c index 1db1c0e70a..cd73321980 100644 --- a/xen/common/domain.c +++ b/xen/common/domain.c @@ -427,14 +427,18 @@ struct domain *domain_create(domid_t domid, if ( (d = alloc_domain_struct()) == NULL ) return ERR_PTR(-ENOMEM); - d->options = config ? config->flags : 0; - /* Sort out our idea of is_system_domain(). */ d->domain_id = domid; /* Debug sanity. */ ASSERT(is_system_domain(d) ? config == NULL : config != NULL); + if ( config ) + { + d->options = config->flags; + atomic_set(&d->fault_ttl, config->fault_ttl); + } + /* Sort out our idea of is_control_domain(). */ d->is_privileged = is_priv; diff --git a/xen/include/public/domctl.h b/xen/include/public/domctl.h index 666aeb71bf..aaa3d66616 100644 --- a/xen/include/public/domctl.h +++ b/xen/include/public/domctl.h @@ -48,6 +48,7 @@ /* XEN_DOMCTL_createdomain */ struct xen_domctl_createdomain { /* IN parameters */ + uint32_t fault_ttl; uint32_t ssidref; xen_domain_handle_t handle; /* Is this an HVM guest (as opposed to a PV guest)? */ diff --git a/xen/include/xen/sched.h b/xen/include/xen/sched.h index 8ed8b55a1e..620a9f20e5 100644 --- a/xen/include/xen/sched.h +++ b/xen/include/xen/sched.h @@ -349,6 +349,7 @@ struct domain atomic_t shr_pages; /* shared pages */ atomic_t paged_pages; /* paged-out pages */ + atomic_t fault_ttl; /* Time until a simulated resource failure. */ atomic_t dalloc_heap; /* Number of xmalloc-like allocations. */ /* Scheduling. */ -- 2.11.0
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |