[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH v2 11/11] TESTING XTF
Add an arbitrary "resource type 2" which uses "frames" of a fixed format so both Xen (for a PVH dom0) and XTF (for a PV dom0) can check the integrity of the marshalled buffer. Skip the hypercall preempt check to allow the compat PVH logic a chance to hit the 1020 limit in the XLAT buffer. Do not apply. Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> --- xen/common/memory.c | 39 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/xen/common/memory.c b/xen/common/memory.c index ec276cb9b1..15a8ed253e 100644 --- a/xen/common/memory.c +++ b/xen/common/memory.c @@ -1022,11 +1022,33 @@ static unsigned int resource_max_frames(struct domain *d, case XENMEM_resource_grant_table: return gnttab_resource_max_frames(d, id); + case 2: + return 2900; + default: return arch_resource_max_frames(d, type, id); } } +static int _acquire_2(unsigned int id, unsigned long frame, + unsigned int nr_frames, xen_pfn_t mfn_list[]) +{ + unsigned int i; + + for ( i = 0; i < nr_frames; ++i ) + { + mfn_list[i] = 0xdead0000 + frame + i; + + /* Simulate some -ERESTARTs */ + if ( i && ((frame + i) == 22 || + (frame + i) == 37 || + (frame + i) == 1040) ) + break; + } + + return i; +} + /* * Returns -errno on error, or positive in the range [1, nr_frames] on * success. Returning less than nr_frames contitutes a request for a @@ -1041,6 +1063,9 @@ static int _acquire_resource( case XENMEM_resource_grant_table: return gnttab_acquire_resource(d, id, frame, nr_frames, mfn_list); + case 2: + return _acquire_2(id, frame, nr_frames, mfn_list); + default: return arch_acquire_resource(d, type, id, frame, nr_frames, mfn_list); } @@ -1151,6 +1176,18 @@ static int acquire_resource( for ( i = 0; !rc && i < done; i++ ) { + /* + * For debug type 2, check that the marshalled-in frames are + * correct, rather than actually inserting them into the P2M. + */ + if ( xmar.type == 2 ) + { + if ( gfn_list[i] != mfn_list[i] ) + panic("gfn %#lx != mfn %#lx, i %lu\n", + gfn_list[i], mfn_list[i], i + xmar.frame); + continue; + } + rc = set_foreign_p2m_entry(currd, gfn_list[i], _mfn(mfn_list[i])); /* rc should be -EIO for any iteration other than the first */ @@ -1172,7 +1209,7 @@ static int acquire_resource( * still got work to do other work is pending. */ if ( done < todo || - (xmar.nr_frames && hypercall_preempt_check()) ) + (0 && xmar.nr_frames && hypercall_preempt_check()) ) { rc = hypercall_create_continuation( __HYPERVISOR_memory_op, "lh", -- 2.11.0
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |