Received: by 2002:a05:6358:e9c4:b0:b2:91dc:71ab with SMTP id hc4csp878787rwb; Thu, 4 Aug 2022 12:41:01 -0700 (PDT) X-Google-Smtp-Source: AA6agR6rBWuvAjJUC/TVpwK21OHMFlbB5ODZX+1uW6dWgxjsN/hC8O7jOCYYME1ee0UukKtO0/SK X-Received: by 2002:a17:907:2d12:b0:72b:67fb:89a5 with SMTP id gs18-20020a1709072d1200b0072b67fb89a5mr2529879ejc.507.1659642061005; Thu, 04 Aug 2022 12:41:01 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1659642060; cv=none; d=google.com; s=arc-20160816; b=F4PC4ftiFKaQ4Q79OhzxWnFkuY5EUZU+sbv9bxMfS5Safb1gusyC81n1Ei3KT1XfJw L1sf0X8SPCoKOlp4p0K5HB+XPVl1ZWx8kmgpkNFQER/QDPtV7m+JxjROZdWIYMfMmz8e tiIbqFT8f9DpkVoDsO2Ekt8PzQlHd6nO3giulv1WSROG55U0q5vUT6puLT6Co0PfoRVP GP4FPPB2OkeZbXyz8Qyxu0mq8uh5s5pTweoBOCMDRH6Ssnjo6CkVGpGIbzjag6NBd6wF OlDDj6BmBpIi+Tqhz71MxM1HdxIEydGDwc+uESjzfi6pVNzTVRNaKBkGsmwAdKkixrdF xkxg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:dkim-signature; bh=bVALqVTUnqV3lcvJzi/YzDZb6mzm8cCv/nt8rs+22ls=; b=x1ZtxVVXwvNpIb7JbtvMy97vInYjM5SyABxGAANxMb3DJV3PSRptopjGRH5EK7ZveN fZQ38kh1l55dw4qdbCEe7F5oITfTESsEO4NaLyZuOBKLqlQKhgLhEdp1RRwsrrT20Xb6 PRm+lNCykLJBBEnBVKsNoPc4sZjRHK0LEQto2FRsXU/UQb0IwccsoicrKIfsse9CcjGh ivnciL//BBj7OG7d9cfpOjq66w0sHcsGR///QMNMWURa1MjLkfhrFJ6ItPqLpirTVDrU qPC9zES0xrTqHAZKFwwyBmHQr+RmFItVDSjtwfLI05oZ3ZjKt7DbcIVi8y/qzYGeWFVt 5GuQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=qdNtAT26; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id sc37-20020a1709078a2500b0072ee427f1e6si1599680ejc.934.2022.08.04.12.40.35; Thu, 04 Aug 2022 12:41:00 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=qdNtAT26; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235773AbiHDS4b (ORCPT + 99 others); Thu, 4 Aug 2022 14:56:31 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48316 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232130AbiHDS43 (ORCPT ); Thu, 4 Aug 2022 14:56:29 -0400 Received: from mail-qt1-x82c.google.com (mail-qt1-x82c.google.com [IPv6:2607:f8b0:4864:20::82c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 838DC175B9 for ; Thu, 4 Aug 2022 11:56:28 -0700 (PDT) Received: by mail-qt1-x82c.google.com with SMTP id h7so519669qtu.2 for ; Thu, 04 Aug 2022 11:56:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc; bh=bVALqVTUnqV3lcvJzi/YzDZb6mzm8cCv/nt8rs+22ls=; b=qdNtAT26wkBHtepS1n/e8GS+wgIy1R7t+9Fg8hEbc7ASBeGbC+QeeNrP5ZsrAiwTj9 rMHUJ5ganVNDE7+NA+NiLQpZQAwNsqmtiZ5z7R4IITi0VWpKWRXzEaL94NNXIG4LDzqW ZyVedSLny9ByjXpuIJfTRcuSpw79Tqe0TooAabsgDiB//X90OYt1+9Y0aw2wqA8YO6rw d6d3RnycFuw7vo4akSGz637fSdyU9X+0T0NQvzyZD8uYFhdt25rFVRyPsG5twNKv5+Rl USZjJlzSfFq3WaMXnc/jvES3JPJLGj2s7ZeQ7wIDeIGd7i/upxwx6VixZQGUlrksDmzH n2dw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc; bh=bVALqVTUnqV3lcvJzi/YzDZb6mzm8cCv/nt8rs+22ls=; b=yQz7IKavbAhL34ZCF6dj007iMB97NoU3HXVdJ5s+g6SPkKxucRPWStfzhDVqCU7Zq4 5G1bM1l+GPrmg1HndO+j8vhm9ER1FfcMT6cfBl2dLFtfDpIVq/LRd8QSDUK4alIINBVg rGoPXZHgBpTxhpXaKfIUd1kEX2N+lzxUliPfx4BaZS4FYHs711E6f1T6cU0Ob5zBS47X MZdWXq+QT0gfTlFCYkG55fGbsMw29+QcRStf7Xt0gaWV1CK8EFwEoDE1YVfmhbeqeb/S T7pIOsVOTvX3lifw/3SKvMmuK/QOpsUZCJqVSOTqr3HUlr/+HLBmAZuxEas65gXhE1MZ MFCA== X-Gm-Message-State: ACgBeo11znPKNuddW9+g9FnIQq8Yp540OOXRkeAEUyP/8TPk7S7Tsjgj ypnNLoKaw/z8Y9rAquNi3qbq9NN+DjCGpUIQ1xPTDz2BXthBTA== X-Received: by 2002:a05:622a:1102:b0:31f:29ed:2e2 with SMTP id e2-20020a05622a110200b0031f29ed02e2mr2777169qty.54.1659639387605; Thu, 04 Aug 2022 11:56:27 -0700 (PDT) MIME-Version: 1.0 References: <20220804180358.32944-1-ubizjak@gmail.com> <91ccae0b-6135-6163-f59b-4e99624090a5@intel.com> In-Reply-To: <91ccae0b-6135-6163-f59b-4e99624090a5@intel.com> From: Uros Bizjak Date: Thu, 4 Aug 2022 20:56:16 +0200 Message-ID: Subject: Re: [PATCH] x86/acrn: Improve ACRN hypercalls To: Dave Hansen Cc: x86@kernel.org, linux-kernel@vger.kernel.org, Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , "H. Peter Anvin" Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM, RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, Aug 4, 2022 at 8:41 PM Dave Hansen wrote: > > On 8/4/22 11:03, Uros Bizjak wrote: > > As explained in section 6.47.5.2, "Specifying Registers for Local Variables" > > of the GCC info documentation, the correct way to specify register for > > input operands when calling Extended 'asm' is to define a local register > > variable and associate it with a specified register: > > > > register unsigned long r8 asm ("r8") = hcall_id; > > IIRC, that's what the ACRN folks proposed first. But, it's more fragile > because you can't, for instance, put a printk() in that function between > the variable definition and assebly. Yes, this is also stated in the documentation. The solution is to: --quote-- register int *p1 asm ("r0") = ...; register int *p2 asm ("r1") = ...; register int *result asm ("r0"); asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2)); _Warning:_ In the above example, be aware that a register (for example 'r0') can be call-clobbered by subsequent code, including function calls and library calls for arithmetic operators on other variables (for example the initialization of 'p2'). In this case, use temporary variables for expressions between the register assignments: int t1 = ...; register int *p1 asm ("r0") = ...; register int *p2 asm ("r1") = t1; register int *result asm ("r0"); asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2)); --/quote-- The %r8 is not preserved across function calls, so your statement above is correct. But as long as there is no function call *between* the variable definition and the assembly, the approach with the local register variable works without any problems. It is even something GCC itself has used in its library for years. Uros.