Received: by 2002:a5b:505:0:0:0:0:0 with SMTP id o5csp6006209ybp; Tue, 8 Oct 2019 11:31:01 -0700 (PDT) X-Google-Smtp-Source: APXvYqwXSOrk8M2SJeEgXcO4uSWRtwiVBPSik3XJAmUDrwWSaxrSL23kJ9Ukub5/ycaPdxA91qFg X-Received: by 2002:a17:906:1c06:: with SMTP id k6mr29527353ejg.217.1570559461232; Tue, 08 Oct 2019 11:31:01 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1570559461; cv=none; d=google.com; s=arc-20160816; b=r+bzsdJGV8M+6i6gA0tNQG798SqmcAcNx44+PRfCbCg3vSq+gvFNmgjEIukChdMIK+ V5HrHVBZrgFgfVboXV4lsJMHs/mHM7Ri+X/cA3zDorXk2a9jPBmjzfF16DtMXV8QYHPK Mai4zzd3yRowALBg5VheXI8n2ORn7SixjayayNobl9bCjVxZtMAUJDcweZpBAPE/6/+n 7EKo99I4J+v+hj02KMEuWnPQFYOczDwzzouMlriA9nOWS/dQ6CILR6zp1jIt6LRRDOhe ozH9DAXphRkHfRuMOj2gBmoCm1P7zPAz79smog0YKVKHq0/blSNWBdNJfe4NOPhtYQGd b8EQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=nFBqKrWYzVevAqWlj4MwUnoGvm5LwGQa7c/udw32/uk=; b=dBuBqwibfmeejq4mFwInRdRnvcMQfQYW620t0u9kpcDd7SLr78A2Y5XRbLm9oeTvAk 33iKPf9FeXAU38wkTuWxit8M3rY1kP2WDxMl1EpeI98MCK4uCXl2KGfSguQDCXcakVwq 2HH53sjAHswBEAq9TXLkTnjMr0tKkVvJm1DwWtTxTWYVLOXb0y89vaH27p1T8mxQEsnG x8YX89Om/W8f22DE1UkfyRvm1suRR+ZrBw9SWDlAkLl/7s1ilJyaxmB2Lk1k9lpA2dSY nanu1EB0y9vA/V+/qrO46BTTO7sA4VNzYui8749hJCo2Thw10f2EXAcEVPQfZg1j/jt3 iu7A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=rr1wYHsW; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id v12si10681037edf.212.2019.10.08.11.30.36; Tue, 08 Oct 2019 11:31:01 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=rr1wYHsW; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729493AbfJHS3r (ORCPT + 99 others); Tue, 8 Oct 2019 14:29:47 -0400 Received: from mail-io1-f66.google.com ([209.85.166.66]:39762 "EHLO mail-io1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726098AbfJHS3q (ORCPT ); Tue, 8 Oct 2019 14:29:46 -0400 Received: by mail-io1-f66.google.com with SMTP id a1so38710115ioc.6 for ; Tue, 08 Oct 2019 11:29:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=nFBqKrWYzVevAqWlj4MwUnoGvm5LwGQa7c/udw32/uk=; b=rr1wYHsWE+EyQTfXmtPkbAae+AJF1dzTGin2U3uKmmzk2hp+/QHdrkZyJETn8YqklD c1Q6on7G5uUDJ7RoAa3O9givoK0OUo/hc4XKx66TY4OrJOl3HOT1kNlsYFj8mLVoon15 xpnHfpnD1b9yXc/A682iDYG6rONW8R8s5l1Gmws9beBQXQ1zZWQ3RBdEnPXOSUpeN6zy x/j1CWVPbo/bqVWQ6SbK9N2SINsFtagA1MFnyrDN9vSBhj7YgxmDs+piLLpDzNWtRd7W jMqPjI3TTQBFbATaKPaoLAlwvylsMkdueRvJ/s/+M80icDmygl7sHPnf2sUjFpsGrxmq xm3g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=nFBqKrWYzVevAqWlj4MwUnoGvm5LwGQa7c/udw32/uk=; b=jX3gHBlO9lJNdNSnIO9YBWKWR5wW9jhkeqwRLlWdBr3hkMphdNIy2IwejF9p6nID1m gVoZTo7DeZmt7l/dL9CPED3E1Oji9ECKtqVgLULHrRnOV+ojokC/L+kOgCHQQlL2Gpo5 yAaGV6jH6yivEBCLaWk/W+WQT4Kixce+Mi2JzlsGl3YOu//SxIQNYAFp4nr0bGucU9NO U70UpEL/JIgC7wwFO8THwv3qtxNJ/8fFWC4Osai4xIZJ7vQEzlu30fG14Vf4QfjwpYiF oS/RNIywZPPw23BYgGEz6/fIuJBlmGY8JXrYvAGTvwmvpUyqj87w0mVqPXG6iZxbQ1an 7YmQ== X-Gm-Message-State: APjAAAXmLTCB8l/JRRbPjiqRiDzYcTSrWB2JlRkDpSrlR4ifZteyNICV vFyXz6c7tGT7yaom7I9n6X9rUxl+HFk0A1EfTjftUg== X-Received: by 2002:a5e:8a43:: with SMTP id o3mr31593126iom.296.1570559384010; Tue, 08 Oct 2019 11:29:44 -0700 (PDT) MIME-Version: 1.0 References: <20191008180808.14181-1-vkuznets@redhat.com> In-Reply-To: <20191008180808.14181-1-vkuznets@redhat.com> From: Jim Mattson Date: Tue, 8 Oct 2019 11:29:32 -0700 Message-ID: Subject: Re: [PATCH] selftests: kvm: fix sync_regs_test with newer gccs To: Vitaly Kuznetsov Cc: kvm list , LKML , Paolo Bonzini , Sean Christopherson Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Oct 8, 2019 at 11:08 AM Vitaly Kuznetsov wrote: > > Commit 204c91eff798a ("KVM: selftests: do not blindly clobber registers in > guest asm") was intended to make test more gcc-proof, however, the result > is exactly the opposite: on newer gccs (e.g. 8.2.1) the test breaks with > > ==== Test Assertion Failure ==== > x86_64/sync_regs_test.c:168: run->s.regs.regs.rbx == 0xBAD1DEA + 1 > pid=14170 tid=14170 - Invalid argument > 1 0x00000000004015b3: main at sync_regs_test.c:166 (discriminator 6) > 2 0x00007f413fb66412: ?? ??:0 > 3 0x000000000040191d: _start at ??:? > rbx sync regs value incorrect 0x1. > > Apparently, compile is still free to play games with registers even > when they have variables attaches. > > Re-write guest code with 'asm volatile' by embedding ucall there and > making sure rbx is preserved. > > Fixes: 204c91eff798a ("KVM: selftests: do not blindly clobber registers in guest asm") > Signed-off-by: Vitaly Kuznetsov > --- > .../selftests/kvm/x86_64/sync_regs_test.c | 21 ++++++++++--------- > 1 file changed, 11 insertions(+), 10 deletions(-) > > diff --git a/tools/testing/selftests/kvm/x86_64/sync_regs_test.c b/tools/testing/selftests/kvm/x86_64/sync_regs_test.c > index 11c2a70a7b87..5c8224256294 100644 > --- a/tools/testing/selftests/kvm/x86_64/sync_regs_test.c > +++ b/tools/testing/selftests/kvm/x86_64/sync_regs_test.c > @@ -22,18 +22,19 @@ > > #define VCPU_ID 5 > > +#define UCALL_PIO_PORT ((uint16_t)0x1000) > + > +/* > + * ucall is embedded here to protect against compiler reshuffling registers > + * before calling a function. In this test we only need to get KVM_EXIT_IO > + * vmexit and preserve RBX, no additional information is needed. > + */ > void guest_code(void) > { > - /* > - * use a callee-save register, otherwise the compiler > - * saves it around the call to GUEST_SYNC. > - */ > - register u32 stage asm("rbx"); > - for (;;) { > - GUEST_SYNC(0); > - stage++; > - asm volatile ("" : : "r" (stage)); > - } > + asm volatile("1: in %[port], %%al\n" > + "add $0x1, %%rbx\n" > + "jmp 1b" > + : : [port] "d" (UCALL_PIO_PORT) : "rax", "rbx"); > } A better solution might be something like: register u32 stage = 0; for (;;) { asm volatile("in %[port], %%al" : : "b" (stage), [port] "d" (UCALL_PIO_PORT) : "rax"); stage++; } (Gmail no doubt has mangled the indentation. Sorry.)