From patchwork Wed Mar 24 01:43:28 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 407787 Delivered-To: patch@linaro.org Received: by 2002:a02:8562:0:0:0:0:0 with SMTP id g89csp20716jai; Tue, 23 Mar 2021 18:56:00 -0700 (PDT) X-Google-Smtp-Source: ABdhPJw4XA1dw0ZtAXEYy2GyFhfE3b3feI1sKVP5oCrC2bO22VXY7KCxJzVl+8MXQVx1oQnPvk0u X-Received: by 2002:a02:ccb2:: with SMTP id t18mr762186jap.123.1616550960233; Tue, 23 Mar 2021 18:56:00 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1616550960; cv=none; d=google.com; s=arc-20160816; b=Mq0wAQkVy1Wul8if2qGkWdIQFQUDYpks++pxKiVbhrISJZXLFvAUTV0e1kxu+oe6sS fkoN1FLOEU5H4S/ILgTciTazkrtum+9GpvsZElMOcx7J53H2jUJEILQ7/7zrVkcxDikW 0wZ3Ye8xocC9XrOvlm6/rc6kbToHR3UKkb1EuEDfEjtrlLmCy60li9Pt2QtawC8EO0qc sSUdCRvbwzFPKfa7HGFlDSpKOHUTcTB8cY4ypYReapt6fmf/4x5J6TGjSqCkbxpNtl1+ hKgvMgvKabFO/VtGs8+j8H+cEZSWZSQj0UXzebJudrwk3R09Dezu4GS61QeH97osRCcq ihaw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:to:from :dkim-signature; bh=TRTvaKGiSvx53wjPubAax9jKEnNNfX7W0YfiA8JJ1s4=; b=XRFTPN65GP1GUBjRNW90X2agK+P3EAquPnMpITUHKgKm7AWdJfd3MDpmnFEx6KTUYU V0TAhxKwH3HeSIAB8UEFCWT2lqyN+4A7T4/0THpnzTz/KKS6T6oPFNGfqpJr36zbzXzr FmrAM8xI2XRTsQ+z0Oaw0dniX/yTohV628YVs6uevriiynWf0mXgbzMTDPZpcosElsUd 2YWnuYBN/0R+ZRYM8ya6cZo+2kzMJVb47L/u9scNlgfOOcVk1y/1t1fTCR/S+zYbLpBI 93n0FErZ3wDFNeJkwNrOuEegzVLvqdJmmYgufkh/IYQ5HoqksYPza47k6ZvVtOrF9TtO MSUA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=reNos8zT; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id b24si647245jaq.29.2021.03.23.18.56.00 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Tue, 23 Mar 2021 18:56:00 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=reNos8zT; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:43298 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lOskZ-0006vL-Ma for patch@linaro.org; Tue, 23 Mar 2021 21:55:59 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38604) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lOsYp-0005z9-ND for qemu-devel@nongnu.org; Tue, 23 Mar 2021 21:43:51 -0400 Received: from mail-oi1-x22c.google.com ([2607:f8b0:4864:20::22c]:45046) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1lOsYa-0005ia-5R for qemu-devel@nongnu.org; Tue, 23 Mar 2021 21:43:48 -0400 Received: by mail-oi1-x22c.google.com with SMTP id a8so19178506oic.11 for ; Tue, 23 Mar 2021 18:43:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=TRTvaKGiSvx53wjPubAax9jKEnNNfX7W0YfiA8JJ1s4=; b=reNos8zTfIQ7Vp9FIn5NP3C46v/nl4ex9Wkm9oek5TMp8Xmt0174cF2NbcN3ORPIIU 7eyuA1bb+Dxsrh1zJhaiordqcu4O6AcVo7SAcqNC+oaURKxhtNwguszLxfwL8lv5MyJn EaQkFX9uPk4qiI9hYZf6OTfhR8ApINQLSvPjAAhGEZW5Q/QXdxmK3GBIh28Wpz30TZYA x5AU+V2F4VUqCEcaTAlNKY21BDTPoIYlT5mtzdrUVCU3T600iI8FlufaC9Sty9aplFUE AmhHd8g7sv9wJXTQDHL6TPFh8QRvmUnvlTe8dYbiD8T+DoL+ndt/AqqCDamBj4dybdW+ w95g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=TRTvaKGiSvx53wjPubAax9jKEnNNfX7W0YfiA8JJ1s4=; b=jyna/sWlYNq64NwxkgAfhDNfUCOJ33KLSuNQpU6oXx/CH4G1Sy+tGQH9AXrzljXgpa 67frrQueXl/9cD3pf3a/GmC9iWMSfgtmp+ahbr4sDcoDykowqJ9wF22eKHMR0YU9ELqX a/UDMW387cKUVn0lI60Ea7BPqheBAfygelS+Phxi5R6Iu60Ya+5HafTRJXbOzAktU8u3 /D1EuRlt702/z+MshvbKtWzDK8EWI9VYxbxRuzfupqkLonN3ZpV2e35vNAO1lkIRkpqF iQXZCU9nyaH5/8QkcLsQxtJca21O5Kw5C1F9d4D3pBoLh28aWEtFYuU81ZxF7Apcxw47 rdnQ== X-Gm-Message-State: AOAM530A05GtWFt0eODqLDZVEZl8fXUmXbOcft8F4iUg5IdFaVtNkqP2 71YrxeGT0PQxy97h2HJJc5I1+5CW2w4pHPfY X-Received: by 2002:aca:2103:: with SMTP id 3mr706767oiz.80.1616550214907; Tue, 23 Mar 2021 18:43:34 -0700 (PDT) Received: from localhost.localdomain (168.189-204-159.bestelclientes.com.mx. [189.204.159.168]) by smtp.gmail.com with ESMTPSA id c9sm203601ooq.31.2021.03.23.18.43.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 23 Mar 2021 18:43:34 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PULL 1/5] tcg: Do not set guard pages on the rx portion of code_gen_buffer Date: Tue, 23 Mar 2021 19:43:28 -0600 Message-Id: <20210324014332.6331-2-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210324014332.6331-1-richard.henderson@linaro.org> References: <20210324014332.6331-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::22c; envelope-from=richard.henderson@linaro.org; helo=mail-oi1-x22c.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org, Roman Bolshakov Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" The rw portion of the buffer is the only one in which overruns can be generated. Allow the rx portion to be more completely covered by huge pages. Signed-off-by: Richard Henderson Tested-by: Roman Bolshakov Reviewed-by: Roman Bolshakov Message-Id: <20210320165720.1813545-2-richard.henderson@linaro.org> --- tcg/tcg.c | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) -- 2.25.1 diff --git a/tcg/tcg.c b/tcg/tcg.c index de91bb6e9e..88c9e6f8a4 100644 --- a/tcg/tcg.c +++ b/tcg/tcg.c @@ -828,7 +828,6 @@ void tcg_region_init(void) size_t region_size; size_t n_regions; size_t i; - uintptr_t splitwx_diff; n_regions = tcg_n_regions(); @@ -858,8 +857,11 @@ void tcg_region_init(void) /* account for that last guard page */ region.end -= page_size; - /* set guard pages */ - splitwx_diff = tcg_splitwx_diff; + /* + * Set guard pages in the rw buffer, as that's the one into which + * buffer overruns could occur. Do not set guard pages in the rx + * buffer -- let that one use hugepages throughout. + */ for (i = 0; i < region.n; i++) { void *start, *end; int rc; @@ -867,10 +869,6 @@ void tcg_region_init(void) tcg_region_bounds(i, &start, &end); rc = qemu_mprotect_none(end, page_size); g_assert(!rc); - if (splitwx_diff) { - rc = qemu_mprotect_none(end + splitwx_diff, page_size); - g_assert(!rc); - } } tcg_region_trees_init(); From patchwork Wed Mar 24 01:43:29 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 407786 Delivered-To: patch@linaro.org Received: by 2002:a02:8562:0:0:0:0:0 with SMTP id g89csp19740jai; Tue, 23 Mar 2021 18:53:52 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxoP1yh8qDx5sGeHUyjav3FJpJrLcyY0ZH+smUCIB2HsQ6qG9eEruey8NGJuPiLDtHHgVLa X-Received: by 2002:a02:aa92:: with SMTP id u18mr750551jai.119.1616550832793; Tue, 23 Mar 2021 18:53:52 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1616550832; cv=none; d=google.com; s=arc-20160816; b=zhYjzqG1A+aeA3+9saYxxKU4Um97/49eNMmKcd5jqb4VXNLBDMN+PpJ4HGfgh/X0PF O84EY0a5fBkQ7B7DChME3DEvwXdgh4egBqaMHTENMO4pm/LI94lxTsSlGP9GkynNWb2p iaAoHaXmTYXWpDemmd2LCUJXWbuBubJrwFM99cUiZWuv+XU79U0pkSBqW2Kx5gkzIXpC 59KnhrbnySvQTKSAd4ixhHa90fY5VDtVwkF9Qx4b+6MbaaIxW5Akd0i1iKSbzwNGxWna e08P8eQ8k5Ngri3KpqT/qJwDON8I9zmBWkzEXwxBOks5tJbmp218OycWwYWByEfbaDnS KEOw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:to:from :dkim-signature; bh=DsSc9dreF6wvzxcw7uDCKMSE3jEvXRT6fQS54ICyVMQ=; b=Rndv7rP5+g16jVP/4Wc1irOpsW6t6+Vlg8WkTpT2zSXC+cFZAfmqz2kby8VNnFMyCD SKXe5wJMrH/y4VBwnhr9K0ohRNJmmlUIIpkmDekr54D5arF+YnFJKjDb6GqdA46qpZqm yRbyPUTwgUmXIttMTuhEP7MGTHiGaGKa5jr8PA6sEG1fqQhi8Mxdz+Ewqehn6ACJStqV i/b90tS3pu5TpQAwkVzs+b6ukZMd8/myJ/YLUOdc1WfxTIbUDAFCSEhRTL+IOU/KBaUr acHC+HuubRYJqgnhtB3ziGsVKpllYG2o+x1QO1MmGGNCQG2IO+6KCxHvj9ew2vsvIPyL L7ww== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=T5qC0n9b; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id i13si675039ilm.103.2021.03.23.18.53.52 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Tue, 23 Mar 2021 18:53:52 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=T5qC0n9b; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:38486 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lOsiW-0004w3-7C for patch@linaro.org; Tue, 23 Mar 2021 21:53:52 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38582) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lOsYl-0005xL-RW for qemu-devel@nongnu.org; Tue, 23 Mar 2021 21:43:49 -0400 Received: from mail-oo1-xc35.google.com ([2607:f8b0:4864:20::c35]:42558) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1lOsYb-0005if-SX for qemu-devel@nongnu.org; Tue, 23 Mar 2021 21:43:45 -0400 Received: by mail-oo1-xc35.google.com with SMTP id h3-20020a4ae8c30000b02901b68b39e2d3so5430782ooe.9 for ; Tue, 23 Mar 2021 18:43:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=DsSc9dreF6wvzxcw7uDCKMSE3jEvXRT6fQS54ICyVMQ=; b=T5qC0n9bxBGVWypiYHvESuCH1PHIqjSyxIF5fx4XGmlLmF5Jd8/iA+P+PF3zSyn5TA V9IId+sDI3JxGbrw/QyaN9XjINMc3c+uStWVndiZHx7BvA1Kq0svS8qawxS5DUoAOZiw ukhdp1jbCjQV9aQ2qLf1bibWF0r5gvyD7YqMucRDhIk7dFUQzbg90Og777y6L7P3iWKr M0yYWJqUvgXW5MjvpsJM+NPIApBuL6ADn5aXLvMLJk+5iLInJTlTd5geJAcfaA7Vvyrk y7XoHXPTvniw0nVDSRZBuSJ465WfhrHfyK5/yQCVHRyrub+gzS4panKUisI7kfsx1S1d jHPA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=DsSc9dreF6wvzxcw7uDCKMSE3jEvXRT6fQS54ICyVMQ=; b=Lia7KV9YyugDdC2W8B1LVXYLITbSsZSFKkbq6PzBDB2F1MGGlFmyztLUTie01/SRIW fRvJgc8FGgqX4Cj0T1JeC4YS2xX1qnE2yZYLydlSJOhkzlMB4GsFZEZBPOfH4/RExuWZ 8CmRi5GLj5yuJErye2k5+qalilNcbnOCNw86iy+8ogRnG00s+zqYzPJt0ZH2dkpwg528 SYNSTEjUguWgifAkRn1iz5CRtp6IerE02XYA+YDOJB7nULX5BxP0D5VfXv/kLDgVD8au wcqj0RkSAmrR3ZaJ/90VwVGZXlveXz7OQ1CoYh/CDrCzhRAz9lomeVkikv3jj0Co3ZP0 RPGQ== X-Gm-Message-State: AOAM531WZewlepSl3DRFn+MxaCq58GAiZYPcR6SZFsLvYa0ls0cIWjFO ni1EVfF8bhl/I+Eviz7zH98ctzpcxPKuueHp X-Received: by 2002:a4a:6b44:: with SMTP id h4mr701736oof.38.1616550215886; Tue, 23 Mar 2021 18:43:35 -0700 (PDT) Received: from localhost.localdomain (168.189-204-159.bestelclientes.com.mx. [189.204.159.168]) by smtp.gmail.com with ESMTPSA id c9sm203601ooq.31.2021.03.23.18.43.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 23 Mar 2021 18:43:35 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PULL 2/5] tcg: Workaround macOS 11.2 mprotect bug Date: Tue, 23 Mar 2021 19:43:29 -0600 Message-Id: <20210324014332.6331-3-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210324014332.6331-1-richard.henderson@linaro.org> References: <20210324014332.6331-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::c35; envelope-from=richard.henderson@linaro.org; helo=mail-oo1-xc35.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org, Roman Bolshakov Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" There's a change in mprotect() behaviour [1] in the latest macOS on M1 and it's not yet clear if it's going to be fixed by Apple. As a short-term fix, ignore failures setting up the guard pages. [1] https://gist.github.com/hikalium/75ae822466ee4da13cbbe486498a191f Signed-off-by: Richard Henderson Tested-by: Roman Bolshakov Reviewed-by: Roman Bolshakov Buglink: https://bugs.launchpad.net/qemu/+bug/1914849 Message-Id: <20210320165720.1813545-3-richard.henderson@linaro.org> --- tcg/tcg.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) -- 2.25.1 diff --git a/tcg/tcg.c b/tcg/tcg.c index 88c9e6f8a4..1fbe0b686d 100644 --- a/tcg/tcg.c +++ b/tcg/tcg.c @@ -864,11 +864,15 @@ void tcg_region_init(void) */ for (i = 0; i < region.n; i++) { void *start, *end; - int rc; tcg_region_bounds(i, &start, &end); - rc = qemu_mprotect_none(end, page_size); - g_assert(!rc); + + /* + * macOS 11.2 has a bug (Apple Feedback FB8994773) in which mprotect + * rejects a permission change from RWX -> NONE. Guard pages are + * nice for bug detection but are not essential; ignore any failure. + */ + (void)qemu_mprotect_none(end, page_size); } tcg_region_trees_init(); From patchwork Wed Mar 24 01:43:30 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 407782 Delivered-To: patch@linaro.org Received: by 2002:a02:8562:0:0:0:0:0 with SMTP id g89csp16139jai; Tue, 23 Mar 2021 18:45:47 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxhgDX6jn3BTTp5+QcRgJGIBLFmh7bVG+55omJ1dkl0egIqSzZEogfpM+Wt+/hcxrF+YteV X-Received: by 2002:a05:6602:24d4:: with SMTP id h20mr762493ioe.4.1616550347674; Tue, 23 Mar 2021 18:45:47 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1616550347; cv=none; d=google.com; s=arc-20160816; b=rS5l+rslrTrXB2WRqpf0iSN1HjRp7ELok2DfgWTJzR8pFKa83i52r2ROxb6irSnes0 RBH7pYYne3o4MVCXcZ8MURFCVD+j7PAk+xL9dTyA+LlhAikDC5Sdx01cFvVp/58XnQjt wUsNU/5hyxWDJxVldgm4wBZWdJR0Y32891tdV+KzdPn+eDNtMjC4721KDFqdxVnL8nMJ FdGzN3ZUMNygcdBh7BuDLl1PmNaX50ajtv2ruLaBY/JWG2y58KRkRLSnU3Vd5oURR7bL iS2I776pwwe8//vXolT+vjepCDJlu6I2nO3IQJXtxr1V6KjD1unZpv/OcR9LTiDcCltk +CdA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:to:from :dkim-signature; bh=0e93t7AcpX0MjpVEUPJ+qK951VVe9n5DKhcqYQAAQ+4=; b=yQABAFJbzPrbJAFdNWRy+01BJymQM5x3fG7jQsFxiy510ivD40WvkKF3E8qiCK/9/D lYwEwRVdH6IgUdBGqJkuaQl0l7FtuSwFx/jI2lUUh4x0/imxe/G6GEI+TE5W728puDjL oWu9E2ir2tL2VoB/chC7j/t9o6sq9t3yLMY0e3sbFRnyswIc9Mm78Yrqd8OWlX2HonS2 hwpLmwBkeS1K1jRuwj+uzcSTJ7ZiTKCXuaRrgQ4/1/mA5qWHcO5QsA+DzGrXZUxi5r87 29LiqpSO+4N4s7OpQQUEy6iHQhRl3oMiofQOstTPS6+vdFXb17IlblIYnWtaPz154tbU ncqg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=ckMQQ3HF; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id t5si566280ilu.91.2021.03.23.18.45.47 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Tue, 23 Mar 2021 18:45:47 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=ckMQQ3HF; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:49326 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lOsag-0005yM-Vr for patch@linaro.org; Tue, 23 Mar 2021 21:45:47 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38564) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lOsYi-0005vd-0D for qemu-devel@nongnu.org; Tue, 23 Mar 2021 21:43:44 -0400 Received: from mail-oi1-x230.google.com ([2607:f8b0:4864:20::230]:36681) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1lOsYd-0005jM-OF for qemu-devel@nongnu.org; Tue, 23 Mar 2021 21:43:43 -0400 Received: by mail-oi1-x230.google.com with SMTP id c16so10304113oib.3 for ; Tue, 23 Mar 2021 18:43:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=0e93t7AcpX0MjpVEUPJ+qK951VVe9n5DKhcqYQAAQ+4=; b=ckMQQ3HFhr+elAIS1qIUVUMpiwJLmburz5CjITSwDDix6ocT7D0ZoI+vt3FSE0Flyr okcEAEgHBz8NgdqNe+TmPA5O//9YbcXyeMrUobDUvHRhUpAcFsute9mzqUSU/NuZezCa 0b3vygxVQyRRGQrHBa0IEDQG28DzOcnk+voI+D8J6ZvDs0HPPtmLdeEQo0ihUQmMshc+ xPwL70EcXNgeMBn7h+DRKb4vC/MzorVsJWqLvj914MuDJUvlP/glHamooosqhC9fHvaU 1e59XdR6iQCX9gY4Q0i6u0Zwcj4vOdW8XFj31h/Rz5s5aPANfxaa8Sln72ThNjkaU2m3 ypMw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=0e93t7AcpX0MjpVEUPJ+qK951VVe9n5DKhcqYQAAQ+4=; b=VkPAygWB5Cbtk/ydFrGUCX3WdFCceAlao0NV4ADeq8WX3U/HOwTVwn9GyupHuYYGwv uilOYvf0VXB+mBeagPEBBza7GTLniy2fJUbeve16EK3CW6WR+jSyHQ7RloVRS8qvAtZE YOVEPVtxrb4WpN87pSMyEAf3o9CJdqSkkNoqqKXzRrsEKF+ZpgzxMZmwbUsZkpQ6joGb tdBVN/ICP0qw+HkfehVjlefY3Gu6prkVicIeKQkf4Sz3VjGYdJkM21vBLQef5KfZdoaP mZwgZZgjJbQj32f02D1pbjhlM4s0xsxVpuBECcJWDrcqqZ4eYtFyKQKuRFBbXLE5Jpdk BoFg== X-Gm-Message-State: AOAM531GnfCF9NEh++S30vaGJUWcI7ny3Tj9+xQBECpwx2if/dex3moU X0AKLHkKEIfWDBclf/D/hPi1gjJaK1caKgVP X-Received: by 2002:aca:2104:: with SMTP id 4mr713558oiz.124.1616550216942; Tue, 23 Mar 2021 18:43:36 -0700 (PDT) Received: from localhost.localdomain (168.189-204-159.bestelclientes.com.mx. [189.204.159.168]) by smtp.gmail.com with ESMTPSA id c9sm203601ooq.31.2021.03.23.18.43.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 23 Mar 2021 18:43:36 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PULL 3/5] exec: Rename exec-vary.c as page-vary.c Date: Tue, 23 Mar 2021 19:43:30 -0600 Message-Id: <20210324014332.6331-4-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210324014332.6331-1-richard.henderson@linaro.org> References: <20210324014332.6331-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::230; envelope-from=richard.henderson@linaro.org; helo=mail-oi1-x230.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org, =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" exec-vary.c is about variable page size handling, rename it page-vary.c. Currently this file is target specific (built once for each target), comment this. Signed-off-by: Philippe Mathieu-Daudé Message-Id: <20210322112427.4045204-2-f4bug@amsat.org> [rth: Update MAINTAINERS] Signed-off-by: Richard Henderson --- meson.build | 3 ++- exec-vary.c => page-vary.c | 2 +- MAINTAINERS | 1 + 3 files changed, 4 insertions(+), 2 deletions(-) rename exec-vary.c => page-vary.c (98%) -- 2.25.1 diff --git a/meson.build b/meson.build index 5c85a15364..f0dd8aa089 100644 --- a/meson.build +++ b/meson.build @@ -1933,7 +1933,6 @@ subdir('softmmu') common_ss.add(capstone) specific_ss.add(files('cpu.c', 'disas.c', 'gdbstub.c'), capstone) -specific_ss.add(files('exec-vary.c')) specific_ss.add(when: 'CONFIG_TCG', if_true: files( 'fpu/softfloat.c', 'tcg/optimize.c', @@ -1945,6 +1944,8 @@ specific_ss.add(when: 'CONFIG_TCG', if_true: files( )) specific_ss.add(when: 'CONFIG_TCG_INTERPRETER', if_true: files('tcg/tci.c')) +specific_ss.add(files('page-vary.c')) + subdir('backends') subdir('disas') subdir('migration') diff --git a/exec-vary.c b/page-vary.c similarity index 98% rename from exec-vary.c rename to page-vary.c index a603b1b433..344f9fcf76 100644 --- a/exec-vary.c +++ b/page-vary.c @@ -1,5 +1,5 @@ /* - * Variable page size handling + * Variable page size handling -- target specific part. * * Copyright (c) 2003 Fabrice Bellard * diff --git a/MAINTAINERS b/MAINTAINERS index 9147e9a429..ed68de3cec 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -117,6 +117,7 @@ R: Paolo Bonzini S: Maintained F: softmmu/cpus.c F: cpus-common.c +F: page-vary.c F: accel/tcg/ F: accel/stubs/tcg-stub.c F: util/cacheinfo.c From patchwork Wed Mar 24 01:43:31 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 407783 Delivered-To: patch@linaro.org Received: by 2002:a02:8562:0:0:0:0:0 with SMTP id g89csp17704jai; Tue, 23 Mar 2021 18:48:58 -0700 (PDT) X-Google-Smtp-Source: ABdhPJw4Mc9gMsDF/Mts9VeKyDupBcORxyCYRfzFyQ97E4n+P1fC7D2O4TmGVwqXOC/oIg5mFjAd X-Received: by 2002:a02:a303:: with SMTP id q3mr794669jai.32.1616550538146; Tue, 23 Mar 2021 18:48:58 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1616550538; cv=none; d=google.com; s=arc-20160816; b=E20UcKIf14BZbRFxaZHsbfChOVEXQuKcLUE7g7KgPLCU62XTud2RxYYYWXIpDVxNBr Rm0n5QUDt7IvDweai4cGfCChi6KHf7fmQVFYTsnU5xABc8A68cOlSJel1saZNwtpSBbG bleZ0qy2+1jhb+Rgx2NKq+I8y3/WxyG340XZHCM+q6D51q79/d92DpRQF+0bpP3270oI q/vdzWToPLXX6/wlxWETkHKEOxzHfLmiuJLbjr/9O1TNLdSkX8FtbtAyRgmttNdHVLfS QTN5Bz9D3na4MRCcUyyrMh2gqKXOLScO4lomRU2M3pYNosl47Ng8mlHxNhGLcQfyu970 J0WQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:to:from :dkim-signature; bh=NbPfp2/HarteDkEoK6vgLYJvIbLA4R8fYVtBiQeWrMA=; b=ZSGN1OQa/7Hpf4qNOIz+MQi/gLoltmgePATyuaEjRjW00NiiioTQI9/qmCRt3w41k9 UGEig+78vLns8U25ubNQdB4HQs0crGtinH32JsZbof1GcABYcaAIX/CkpIBHP0NCsFNK YQpiv0Shu29wKTpcV6ZockJv8i9Kswz1jKWpWypUsGLB+z2fwMgwhRe78BkGnatPLcWx 4T7ol7ryCS8ldlsbagHOO9ohoZ2nX5Gu8gHIR8sdFABGqTAycW4wAWaDyUputfO0YQXK nOVjKmPCRYYuMI8wDUtPHpjp+y3tUHpGHWK5/aqnLbqYrGKZyeF1v018r5xW1afCgO9B 1MVA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=CBsldl65; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id r21si686648ioa.81.2021.03.23.18.48.58 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Tue, 23 Mar 2021 18:48:58 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=CBsldl65; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:56620 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lOsdl-0000gz-Jc for patch@linaro.org; Tue, 23 Mar 2021 21:48:57 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38586) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lOsYl-0005xe-TK for qemu-devel@nongnu.org; Tue, 23 Mar 2021 21:43:49 -0400 Received: from mail-oi1-x22f.google.com ([2607:f8b0:4864:20::22f]:38577) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1lOsYd-0005je-PV for qemu-devel@nongnu.org; Tue, 23 Mar 2021 21:43:47 -0400 Received: by mail-oi1-x22f.google.com with SMTP id f9so19194392oiw.5 for ; Tue, 23 Mar 2021 18:43:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=NbPfp2/HarteDkEoK6vgLYJvIbLA4R8fYVtBiQeWrMA=; b=CBsldl65VrNqA3HV3AryVPc8Knfy9N/Ul6+L8PpjECXw14NTsAQn7uJZgvgdbgY0o8 zPBkXo232jm7DwZLah+RubrvqRWx+5jEfuM6JwTICZrXXJo3k0s68YYBwC7h/XVsiQdJ pYYybCDXJLgAxYaHR6VLtcMwnw2AFMw/UT56oRrK4JtMgySgzGokkjEjSR982vF0DMH6 jKV/voifyqc/eXihp1rk3rhXNmdMW9/ZKjV1XBQ9Jp0W2XE8XPyPhsk59dV0sbrWhLJ0 VRwe6HMq+R60U3vh0xZGTP00wqZ7v7KpHxz/8ib04H/2irp83HTsKK2TrZvme6qePirA UKig== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=NbPfp2/HarteDkEoK6vgLYJvIbLA4R8fYVtBiQeWrMA=; b=qzlIToUXQY8K9zkfWFRLYV3WB1vFMILr7eDU9qThAdAr26Z/nXJkBEUeMvRmvvc/2a VN6kofU6wAFlwLxABXj8T1VVV2Mfsu9EjDT3kGPCwHDgvdoDnyRntvID3xI2xqvDmt/f 9Xi7cOYGc3lZS6CqwOK1zA3cWFjj7aSqOBsT9rIegRmOqZpQoLriV/CZqZaxbRxAaFCn Yd9v/YgllfoyBAH4/H3DNQtieMiyuYPHQc7GskkezkREpp/iJYg3wfWo/hJtC5u5JhmS BocbtRaMAQLM15keoY9HXxl+MScy82HUnlUhEetfylffhXaPRrIsj2I/9RNJFs/iEITk 44Ew== X-Gm-Message-State: AOAM531G18MxT9Wz1kw+SALOWXTXaBlYZ3AJQZXF/C4qn7aLAcIxUrMf Cwhp8wo14X+OewiN0u8ag2arU+XCPXFyxAlk X-Received: by 2002:aca:4b03:: with SMTP id y3mr755120oia.78.1616550217935; Tue, 23 Mar 2021 18:43:37 -0700 (PDT) Received: from localhost.localdomain (168.189-204-159.bestelclientes.com.mx. [189.204.159.168]) by smtp.gmail.com with ESMTPSA id c9sm203601ooq.31.2021.03.23.18.43.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 23 Mar 2021 18:43:37 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PULL 4/5] exec: Extract 'page-vary.h' header Date: Tue, 23 Mar 2021 19:43:31 -0600 Message-Id: <20210324014332.6331-5-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210324014332.6331-1-richard.henderson@linaro.org> References: <20210324014332.6331-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::22f; envelope-from=richard.henderson@linaro.org; helo=mail-oi1-x22f.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org, =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" In the next commit we will extract the generic code out of page-vary.c, only keeping the target specific code. Both files will use the same TargetPageBits structure, so make its declaration in a shared header. As the common header can not use target specific types, use a uint64_t to hold the page mask value, and add a cast back to target_long in the TARGET_PAGE_MASK definitions. Signed-off-by: Philippe Mathieu-Daudé Message-Id: <20210322112427.4045204-3-f4bug@amsat.org> Signed-off-by: Richard Henderson --- include/exec/cpu-all.h | 11 ++++------- include/exec/page-vary.h | 29 +++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 7 deletions(-) create mode 100644 include/exec/page-vary.h -- 2.25.1 diff --git a/include/exec/cpu-all.h b/include/exec/cpu-all.h index 76443eb11d..b0a422c7b6 100644 --- a/include/exec/cpu-all.h +++ b/include/exec/cpu-all.h @@ -215,11 +215,7 @@ static inline void stl_phys_notdirty(AddressSpace *as, hwaddr addr, uint32_t val /* page related stuff */ #ifdef TARGET_PAGE_BITS_VARY -typedef struct { - bool decided; - int bits; - target_long mask; -} TargetPageBits; +# include "exec/page-vary.h" #if defined(CONFIG_ATTRIBUTE_ALIAS) || !defined(IN_EXEC_VARY) extern const TargetPageBits target_page; #else @@ -227,10 +223,11 @@ extern TargetPageBits target_page; #endif #ifdef CONFIG_DEBUG_TCG #define TARGET_PAGE_BITS ({ assert(target_page.decided); target_page.bits; }) -#define TARGET_PAGE_MASK ({ assert(target_page.decided); target_page.mask; }) +#define TARGET_PAGE_MASK ({ assert(target_page.decided); \ + (target_long)target_page.mask; }) #else #define TARGET_PAGE_BITS target_page.bits -#define TARGET_PAGE_MASK target_page.mask +#define TARGET_PAGE_MASK ((target_long)target_page.mask) #endif #define TARGET_PAGE_SIZE (-(int)TARGET_PAGE_MASK) #else diff --git a/include/exec/page-vary.h b/include/exec/page-vary.h new file mode 100644 index 0000000000..799d6310d6 --- /dev/null +++ b/include/exec/page-vary.h @@ -0,0 +1,29 @@ +/* + * Definitions for cpus with variable page sizes. + * + * Copyright (c) 2003 Fabrice Bellard + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, see . + */ + +#ifndef EXEC_PAGE_VARY_H +#define EXEC_PAGE_VARY_H + +typedef struct { + bool decided; + int bits; + uint64_t mask; +} TargetPageBits; + +#endif /* EXEC_PAGE_VARY_H */ From patchwork Wed Mar 24 01:43:32 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 407784 Delivered-To: patch@linaro.org Received: by 2002:a02:8562:0:0:0:0:0 with SMTP id g89csp18057jai; Tue, 23 Mar 2021 18:49:46 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxTLgvs//Td7rQhuGmK9U940ZZNNezLRw2jCJVDmgpWzzs86vffrZ3d4cLEftTbKQb0MPF4 X-Received: by 2002:a05:6e02:1688:: with SMTP id f8mr860587ila.110.1616550586734; Tue, 23 Mar 2021 18:49:46 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1616550586; cv=none; d=google.com; s=arc-20160816; b=OdLq4M1WfB7Gq+JfzUjVkZtd8W0aQIStcfYI/x9uDvoGcxBCwjigLJ5GbHtWybkn2D MihagUrvqErFSO1t36keSSfViOLAM/WdwEsoTU2DM4eQTWkh/DsJCyCUFNnLeWTijeDt cxyZEfbBqtqqP/tq/AMopRPNNglnD6MJQTpGCQyBFuCv3hwcDcJpJoXYNLZA3k8YV6Uf GIasFBYWKwKahUwXjA7xzWuSUJ9O4ILM/t0CNtq8eYGIXlxU/dx4yurw46gkgz10g7sD lYFuOFR+z7q6sg+SDjVffsEwHFvmDic1URTHyDUnVzt0lVqX1ut1AH27Bjl0sco00wAZ mMXQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:to:from :dkim-signature; bh=fWgqA9QIHHI+TQJjaLupeuAekMYMAEES1TIcXaDxulI=; b=anwr4SjaEJCAkQyttz+bnt1FNQz/eQvT6UN4zBklofFPEv2E+KI1pbP7iR+NWRRGBL oFwLcGgghObVPB7ePq2Tyf1K9fcC+6q0rNdNYsW4Nf/uY8LNKTGVnx3YH49TDbWk1NiU S6oAcpomLPVBfwJWByA/vjdaEQ6vHrzraOPfj6R9QiHngdLcMbK/4c7xPsAhyPTZhYX5 ejncJ1M4ysbiLYmjoSFUw9vE1XjEtRNB3JfnYki7Un6khQxUfWgPpGc4ZwbvY2WS++uo u9xxRLZEYeh1LVt24lG8IwGRiqFfWciHmle7Zd0gtffFOTQ8yqnCKc9YpDDhg+N/U1Rt BMlw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=U0jyxp0H; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id j7si527502ilu.78.2021.03.23.18.49.46 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Tue, 23 Mar 2021 18:49:46 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=U0jyxp0H; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:57932 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lOseY-0001DI-5i for patch@linaro.org; Tue, 23 Mar 2021 21:49:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38602) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lOsYp-0005z8-N3 for qemu-devel@nongnu.org; Tue, 23 Mar 2021 21:43:51 -0400 Received: from mail-oi1-x235.google.com ([2607:f8b0:4864:20::235]:33409) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1lOsYf-0005kQ-PH for qemu-devel@nongnu.org; Tue, 23 Mar 2021 21:43:51 -0400 Received: by mail-oi1-x235.google.com with SMTP id w70so19186863oie.0 for ; Tue, 23 Mar 2021 18:43:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=fWgqA9QIHHI+TQJjaLupeuAekMYMAEES1TIcXaDxulI=; b=U0jyxp0HdCFGy53Ex1+VMHt0OZTkP7ps2lXbKLUr+CukYmDa/wiThSPJ6L88xMlSSd 68EDLYzopg2l/uuYFrUv/ef0wqf1hpqNISddCWg/Tpuh5/rrtULb/D4ckJWcJf753IoX eP68ZzOdOD3UWGfCgyM8Q0JEijZT6J+xHaOFjBJWJVuqLCOm2VaZhmiiRDgxilDvYUOn 25imMZR0XwliJkUyrMlI7HocPfCNRj9SkAnl1EgAQ1bRq3Dbnh9j3BvdZGTUTT3WR30B TOhgwmAzMe3JXEdKV02q6TrdOzat34xoeutFetCF74zFrfiW+LrgI/gZJAI5/U7D1hql qMww== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=fWgqA9QIHHI+TQJjaLupeuAekMYMAEES1TIcXaDxulI=; b=U8t9phlADRWPf/hLVy3VhD1pcjOoSUHW4K8sjlpUuJ0SquvHYOtx0ysdaaCt5hcAGV yGTEIb5iw9Zsd0WH7jBSOdjUD7cxs4JwRA0kIoNs2H+V5Yaf3ki/l3hStgJAtC//mUnl qPDvXFzacHYtwX+R09Da0DwrMDH6ufk/V+Cs2T/X1viYk3JsDX/Z80pJwyYUqSs3mUgT 4JcNZtfRr8j25C39OUYcSvllXQthmjBRoaKtTXndO1Sh/0Z2B71bB/yartgcj78toLfc +9QCQzsUO8Ycwtys3rQ9+a3GDfpkKqNhaRrCkcMnPbC087HE3G5YA6HYjNl1dKd8ye9V PF0A== X-Gm-Message-State: AOAM5310jUUfQBUJmytQD61f7nPkbX2fdWXu1sRBWwuHcTuK2gcni5c7 SNHMoOEFbUzelBoqD/Iw1lQaAPTAKDZjh0Im X-Received: by 2002:aca:b446:: with SMTP id d67mr736255oif.6.1616550218985; Tue, 23 Mar 2021 18:43:38 -0700 (PDT) Received: from localhost.localdomain (168.189-204-159.bestelclientes.com.mx. [189.204.159.168]) by smtp.gmail.com with ESMTPSA id c9sm203601ooq.31.2021.03.23.18.43.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 23 Mar 2021 18:43:38 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PULL 5/5] exec: Build page-vary-common.c with -fno-lto Date: Tue, 23 Mar 2021 19:43:32 -0600 Message-Id: <20210324014332.6331-6-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210324014332.6331-1-richard.henderson@linaro.org> References: <20210324014332.6331-1-richard.henderson@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::235; envelope-from=richard.henderson@linaro.org; helo=mail-oi1-x235.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org, Gavin Shan , =?utf-8?q?Phi?= =?utf-8?q?lippe_Mathieu-Daud=C3=A9?= Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" In bbc17caf81f, we used an alias attribute to allow target_page to be declared const, and yet be initialized late. This fails when using LTO with several versions of gcc. The compiler looks through the alias and decides that the const variable is statically initialized to zero, then propagates that zero to many uses of the variable. This can be avoided by compiling one object file with -fno-lto. In this way, any initializer cannot be seen, and the constant propagation does not occur. Since we are certain to have this separate compilation unit, we can drop the alias attribute as well. We simply have differing declarations for target_page in different compilation units. Drop the use of init_target_page, and drop the configure detection for CONFIG_ATTRIBUTE_ALIAS. In order to change the compilation flags for a file with meson, we must use a static_library. This runs into specific_ss, where we would need to create many static_library instances. Fix this by splitting page-vary.c: the page-vary-common.c part is compiled once as a static_library, while the page-vary.c part is left in specific_ss in order to handle the target-specific value of TARGET_PAGE_BITS_MIN. Reported-by: Gavin Shan Signed-off-by: Richard Henderson Message-Id: <20210321211534.2101231-1-richard.henderson@linaro.org> [PMD: Fix typo in subject, split original patch in 3] Signed-off-by: Philippe Mathieu-Daudé Tested-by: Gavin Shan Message-Id: <20210322112427.4045204-4-f4bug@amsat.org> [rth: Update MAINTAINERS] Signed-off-by: Richard Henderson --- configure | 19 ---------- meson.build | 18 +++++++++ include/exec/cpu-all.h | 4 -- include/exec/page-vary.h | 5 +++ page-vary-common.c | 54 +++++++++++++++++++++++++++ page-vary.c | 79 +++------------------------------------- MAINTAINERS | 1 + 7 files changed, 84 insertions(+), 96 deletions(-) create mode 100644 page-vary-common.c -- 2.25.1 diff --git a/configure b/configure index 61872096a8..edf9dc8985 100755 --- a/configure +++ b/configure @@ -4889,21 +4889,6 @@ if test "$plugins" = "yes" && "for this purpose. You can't build with --static." fi -######################################## -# See if __attribute__((alias)) is supported. -# This false for Xcode 9, but has been remedied for Xcode 10. -# Unfortunately, travis uses Xcode 9 by default. - -attralias=no -cat > $TMPC << EOF -int x = 1; -extern const int y __attribute__((alias("x"))); -int main(void) { return 0; } -EOF -if compile_prog "" "" ; then - attralias=yes -fi - ######################################## # check if getauxval is available. @@ -5935,10 +5920,6 @@ if test "$atomic64" = "yes" ; then echo "CONFIG_ATOMIC64=y" >> $config_host_mak fi -if test "$attralias" = "yes" ; then - echo "CONFIG_ATTRIBUTE_ALIAS=y" >> $config_host_mak -fi - if test "$getauxval" = "yes" ; then echo "CONFIG_GETAUXVAL=y" >> $config_host_mak fi diff --git a/meson.build b/meson.build index f0dd8aa089..c6f4b0cf5e 100644 --- a/meson.build +++ b/meson.build @@ -1944,6 +1944,24 @@ specific_ss.add(when: 'CONFIG_TCG', if_true: files( )) specific_ss.add(when: 'CONFIG_TCG_INTERPRETER', if_true: files('tcg/tci.c')) +# Work around a gcc bug/misfeature wherein constant propagation looks +# through an alias: +# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99696 +# to guess that a const variable is always zero. Without lto, this is +# impossible, as the alias is restricted to page-vary-common.c. Indeed, +# without lto, not even the alias is required -- we simply use different +# declarations in different compilation units. +pagevary = files('page-vary-common.c') +if get_option('b_lto') + pagevary_flags = ['-fno-lto'] + if get_option('cfi') + pagevary_flags += '-fno-sanitize=cfi-icall' + endif + pagevary = static_library('page-vary-common', sources: pagevary, + c_args: pagevary_flags) + pagevary = declare_dependency(link_with: pagevary) +endif +common_ss.add(pagevary) specific_ss.add(files('page-vary.c')) subdir('backends') diff --git a/include/exec/cpu-all.h b/include/exec/cpu-all.h index b0a422c7b6..d76b0b9e02 100644 --- a/include/exec/cpu-all.h +++ b/include/exec/cpu-all.h @@ -216,11 +216,7 @@ static inline void stl_phys_notdirty(AddressSpace *as, hwaddr addr, uint32_t val #ifdef TARGET_PAGE_BITS_VARY # include "exec/page-vary.h" -#if defined(CONFIG_ATTRIBUTE_ALIAS) || !defined(IN_EXEC_VARY) extern const TargetPageBits target_page; -#else -extern TargetPageBits target_page; -#endif #ifdef CONFIG_DEBUG_TCG #define TARGET_PAGE_BITS ({ assert(target_page.decided); target_page.bits; }) #define TARGET_PAGE_MASK ({ assert(target_page.decided); \ diff --git a/include/exec/page-vary.h b/include/exec/page-vary.h index 799d6310d6..c22a7a742e 100644 --- a/include/exec/page-vary.h +++ b/include/exec/page-vary.h @@ -26,4 +26,9 @@ typedef struct { uint64_t mask; } TargetPageBits; +#ifdef IN_PAGE_VARY +extern bool set_preferred_target_page_bits_common(int bits); +extern void finalize_target_page_bits_common(int min); +#endif + #endif /* EXEC_PAGE_VARY_H */ diff --git a/page-vary-common.c b/page-vary-common.c new file mode 100644 index 0000000000..9175556498 --- /dev/null +++ b/page-vary-common.c @@ -0,0 +1,54 @@ +/* + * Variable page size handling -- target independent part. + * + * Copyright (c) 2003 Fabrice Bellard + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, see . + */ + +#define IN_PAGE_VARY 1 + +#include "qemu/osdep.h" +#include "qemu-common.h" +#include "exec/page-vary.h" + +/* WARNING: This file must *not* be complied with -flto. */ + +TargetPageBits target_page; + +bool set_preferred_target_page_bits_common(int bits) +{ + /* + * The target page size is the lowest common denominator for all + * the CPUs in the system, so we can only make it smaller, never + * larger. And we can't make it smaller once we've committed to + * a particular size. + */ + if (target_page.bits == 0 || target_page.bits > bits) { + if (target_page.decided) { + return false; + } + target_page.bits = bits; + } + return true; +} + +void finalize_target_page_bits_common(int min) +{ + if (target_page.bits == 0) { + target_page.bits = min; + } + target_page.mask = -1ull << target_page.bits; + target_page.decided = true; +} diff --git a/page-vary.c b/page-vary.c index 344f9fcf76..057c7f1815 100644 --- a/page-vary.c +++ b/page-vary.c @@ -17,92 +17,25 @@ * License along with this library; if not, see . */ +#define IN_PAGE_VARY 1 + #include "qemu/osdep.h" #include "qemu-common.h" - -#define IN_EXEC_VARY 1 - #include "exec/exec-all.h" -#ifdef TARGET_PAGE_BITS_VARY -# ifdef CONFIG_ATTRIBUTE_ALIAS -/* - * We want to declare the "target_page" variable as const, which tells - * the compiler that it can cache any value that it reads across calls. - * This avoids multiple assertions and multiple reads within any one user. - * - * This works because we finish initializing the data before we ever read - * from the "target_page" symbol. - * - * This also requires that we have a non-constant symbol by which we can - * perform the actual initialization, and which forces the data to be - * allocated within writable memory. Thus "init_target_page", and we use - * that symbol exclusively in the two functions that initialize this value. - * - * The "target_page" symbol is created as an alias of "init_target_page". - */ -static TargetPageBits init_target_page; - -/* - * Note that this is *not* a redundant decl, this is the definition of - * the "target_page" symbol. The syntax for this definition requires - * the use of the extern keyword. This seems to be a GCC bug in - * either the syntax for the alias attribute or in -Wredundant-decls. - * - * See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91765 - */ -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wredundant-decls" - -extern const TargetPageBits target_page - __attribute__((alias("init_target_page"))); - -# pragma GCC diagnostic pop -# else -/* - * When aliases are not supported then we force two different declarations, - * by way of suppressing the header declaration with IN_EXEC_VARY. - * We assume that on such an old compiler, LTO cannot be used, and so the - * compiler cannot not detect the mismatched declarations, and all is well. - */ -TargetPageBits target_page; -# define init_target_page target_page -# endif -#endif - bool set_preferred_target_page_bits(int bits) { - /* - * The target page size is the lowest common denominator for all - * the CPUs in the system, so we can only make it smaller, never - * larger. And we can't make it smaller once we've committed to - * a particular size. - */ #ifdef TARGET_PAGE_BITS_VARY assert(bits >= TARGET_PAGE_BITS_MIN); - if (init_target_page.bits == 0 || init_target_page.bits > bits) { - if (init_target_page.decided) { - return false; - } - init_target_page.bits = bits; - } -#endif + return set_preferred_target_page_bits_common(bits); +#else return true; +#endif } void finalize_target_page_bits(void) { #ifdef TARGET_PAGE_BITS_VARY - if (init_target_page.bits == 0) { - init_target_page.bits = TARGET_PAGE_BITS_MIN; - } - init_target_page.mask = (target_long)-1 << init_target_page.bits; - init_target_page.decided = true; - - /* - * For the benefit of an -flto build, prevent the compiler from - * hoisting a read from target_page before we finish initializing. - */ - barrier(); + finalize_target_page_bits_common(TARGET_PAGE_BITS_MIN); #endif } diff --git a/MAINTAINERS b/MAINTAINERS index ed68de3cec..10ed6d7624 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -118,6 +118,7 @@ S: Maintained F: softmmu/cpus.c F: cpus-common.c F: page-vary.c +F: page-vary-common.c F: accel/tcg/ F: accel/stubs/tcg-stub.c F: util/cacheinfo.c