From: Andrew Cooper Date: Fri, 27 Aug 2021 13:46:52 +0000 (+0100) Subject: xen/domain: Fix label position in domain_teardown() X-Git-Tag: archive/raspbian/4.16.0+51-g0941d6cb-1+rpi1~2^2~42^2~247 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=8064488062641ae505b2a7369611c38057a7788b;p=xen.git xen/domain: Fix label position in domain_teardown() As explained in the comments, a progress label wants to be before the function it refers to for the higher level logic to make sense. As it happens, the effects are benign because gnttab_mappings is immediately adjacent to teardown in terms of co-routine exit points. There is and will always be a corner case with 0. Help alleviate this visually (at least slightly) with a BUILD_BUG_ON() to ensure the property which makes this function do anything useful. There is also a visual corner case when changing from PROGRESS() to PROGRESS_VCPU(). The important detail is to check that there is a "return rc;" logically between each PROGRESS*() marker. Fixes: b1ee10be5625 ("gnttab: add preemption check to gnttab_release_mappings()") Signed-off-by: Andrew Cooper Acked-by: Jan Beulich --- diff --git a/xen/common/domain.c b/xen/common/domain.c index 14b1341e53..0d3385ad5a 100644 --- a/xen/common/domain.c +++ b/xen/common/domain.c @@ -419,11 +419,13 @@ static int domain_teardown(struct domain *d) }; case PROG_none: + BUILD_BUG_ON(PROG_none != 0); + + PROGRESS(gnttab_mappings): rc = gnttab_release_mappings(d); if ( rc ) return rc; - PROGRESS(gnttab_mappings): for_each_vcpu ( d, v ) { PROGRESS_VCPU(teardown);