From patchwork Thu Jun 28 03:03:22 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 140394 Delivered-To: patch@linaro.org Received: by 2002:a2e:9754:0:0:0:0:0 with SMTP id f20-v6csp1649684ljj; Wed, 27 Jun 2018 20:12:50 -0700 (PDT) X-Google-Smtp-Source: AAOMgpdWaImBPeohaxwdbo2HmBhh9e0LOKuGtt/TpZUXVu1KbGGqJwE7HHgnKKlV4oTKspQUWEBH X-Received: by 2002:aed:25ac:: with SMTP id x41-v6mr7843575qtc.286.1530155570211; Wed, 27 Jun 2018 20:12:50 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1530155570; cv=none; d=google.com; s=arc-20160816; b=bG0Zn2yBRYNQd4PyYs/YPSV06j7InB6QlsK0BzklJebqbfsfHcFE4jcJ4G+MyB/4W4 PrRkRucTx6RXCO8mQNVF6tRSXkjVpVpNptSnjkjN26/Ioz1YyvT3i87Onl0mAHxOjFbj K66T7IOPgDOEKhlu9X/l+n/oF22tUXedVgUyB6oI5gbhAehgP+MWlypUslp93PJL/JSY tOoPW3CI4yMaw0jC/Gb/vUCWSuaF153rH9hAQZvJO76mPkUlJgZARBinxauNKMNOtrjm 0c9KRbGKkCk0oFnH/GY2iXUOQ5mytMQQdRwGYZK5RKs850AdfPirooOyfWJTkiOxJkRV j8vw== 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:subject:references:in-reply-to :message-id:date:to:from:dkim-signature:arc-authentication-results; bh=aHlqpS7RETtmpB2uggIW2fraBTAjhAqUaCXBJAbuBE8=; b=OGb2DONh6Zuded+/RW6lNuQzZgtRZFvMIDwM769jpRSyq6MQ0N/6+qMfcVzWeiLS2z /xchRSdIFYf7qYyCS0xpRahi8WLvUGOrelAEh+Z+oEBiXjQOwrMvtO2HK7/NxUDrozO0 Unm6qjkq04XSIHk/C9UqlgIh7/S40TKUUI0yHbLbCerYLwCAaaOWXMW8GTPmWPUVHGaI WSlqTSYZR0cEQeYawinxbr7DEC7bQDJ3oGM4sJLz4lCy424F+3yi6xPfeFX/QJ5KEb3i Hbz4/RcSov/3+o4xU1dFBmEfL+PiUpwZj0pPqYpqjvFt3I0cpeJ+hE2hPdJnMiXb9yEK XvAg== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=CxdgLthm; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [2001:4830:134:3::11]) by mx.google.com with ESMTPS id 16-v6si386772qtc.245.2018.06.27.20.12.50 for (version=TLS1 cipher=AES128-SHA bits=128/128); Wed, 27 Jun 2018 20:12:50 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) client-ip=2001:4830:134:3::11; Authentication-Results: mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=CxdgLthm; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:34286 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fYNMX-0003um-MS for patch@linaro.org; Wed, 27 Jun 2018 23:12:49 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:40022) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fYNDy-000573-Ez for qemu-devel@nongnu.org; Wed, 27 Jun 2018 23:03:59 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fYNDu-00080z-Hk for qemu-devel@nongnu.org; Wed, 27 Jun 2018 23:03:58 -0400 Received: from mail-pg0-x236.google.com ([2607:f8b0:400e:c05::236]:42720) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fYNDu-000800-Ck for qemu-devel@nongnu.org; Wed, 27 Jun 2018 23:03:54 -0400 Received: by mail-pg0-x236.google.com with SMTP id c10-v6so1794446pgu.9 for ; Wed, 27 Jun 2018 20:03:54 -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; bh=aHlqpS7RETtmpB2uggIW2fraBTAjhAqUaCXBJAbuBE8=; b=CxdgLthmO345k1/TbiJlil7fhHHhsK6E0ja/c5RmXXyE0cPBrdB6YP+OE8KRzOprDW CakHsDl7oiPNgUD6sMI7KtIiH/qoqNb4+V/iAy+A0HY1XeezKU45hOlUBseICqvuI0E9 LWMSFs1eGu7m5dR5SpXmcInnkWzlPbscl/8A0= 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; bh=aHlqpS7RETtmpB2uggIW2fraBTAjhAqUaCXBJAbuBE8=; b=k1nAxTzmXFIE9OuMsVVt22vGnL+IsnYYOmPPSG7KijcOWUT+JBr3GS6Ek1TkKTAWRU qDNKG/LvawxMvuxzM18ETnHjVGqeWYobVwybtAevXY0X1E4MGhvt5mkFx0WgCCBDcQay pEv1971dGb4p6VzQFTy8hc+VwT9WLJGfYoUQhhOOknLmQSlKgUQPsfyXuRAmZ4wEHDzQ Crrz/7gZwjO/ZTfRXSDBI0aA3Tn+LVHqI7xLmqHEWdsK2nyjzlACpA7VOc/UatP7NTYl 5Sg1HB67HzAma2yNCz9PTxZJr5cciX8mdbXXgPr3iRCMxtsK6zYSdK+vZMnWGsYrtjR7 SBNA== X-Gm-Message-State: APt69E21P1cWHtfqDqo6XDiV+2vxxvoacDNYmnGLZlBjIx5ovrTUPdzN xT74t6daTslt3p+13Yjem5dZ2VhOCoA= X-Received: by 2002:a63:6d8b:: with SMTP id i133-v6mr7473053pgc.215.1530155033026; Wed, 27 Jun 2018 20:03:53 -0700 (PDT) Received: from cloudburst.twiddle.net (97-126-112-211.tukw.qwest.net. [97.126.112.211]) by smtp.gmail.com with ESMTPSA id y15-v6sm8030489pfm.136.2018.06.27.20.03.51 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 27 Jun 2018 20:03:52 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Wed, 27 Jun 2018 20:03:22 -0700 Message-Id: <20180628030330.15615-16-richard.henderson@linaro.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180628030330.15615-1-richard.henderson@linaro.org> References: <20180628030330.15615-1-richard.henderson@linaro.org> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400e:c05::236 Subject: [Qemu-devel] [PATCH v3 15/23] target/openrisc: Fix tlb flushing in mtspr X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: shorne@gmail.com Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" The previous code was confused, avoiding the flush of the old entry if the new entry is invalid. We need to flush the old page if the old entry is valid and the new page if the new entry is valid. This bug was masked by over-flushing elsewhere. Signed-off-by: Richard Henderson --- target/openrisc/sys_helper.c | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) -- 2.17.1 diff --git a/target/openrisc/sys_helper.c b/target/openrisc/sys_helper.c index 7f458b0d17..c9702cd26c 100644 --- a/target/openrisc/sys_helper.c +++ b/target/openrisc/sys_helper.c @@ -32,6 +32,7 @@ void HELPER(mtspr)(CPUOpenRISCState *env, target_ulong spr, target_ulong rb) #ifndef CONFIG_USER_ONLY OpenRISCCPU *cpu = openrisc_env_get_cpu(env); CPUState *cs = CPU(cpu); + target_ulong mr; int idx; switch (spr) { @@ -85,12 +86,15 @@ void HELPER(mtspr)(CPUOpenRISCState *env, target_ulong spr, target_ulong rb) case TO_SPR(1, 512) ... TO_SPR(1, 512+DTLB_SIZE-1): /* DTLBW0MR 0-127 */ idx = spr - TO_SPR(1, 512); - if (!(rb & 1)) { - tlb_flush_page(cs, env->tlb.dtlb[idx].mr & TARGET_PAGE_MASK); + mr = env->tlb.dtlb[idx].mr; + if (mr & 1) { + tlb_flush_page(cs, mr & TARGET_PAGE_MASK); + } + if (rb & 1) { + tlb_flush_page(cs, rb & TARGET_PAGE_MASK); } env->tlb.dtlb[idx].mr = rb; break; - case TO_SPR(1, 640) ... TO_SPR(1, 640+DTLB_SIZE-1): /* DTLBW0TR 0-127 */ idx = spr - TO_SPR(1, 640); env->tlb.dtlb[idx].tr = rb; @@ -102,14 +106,18 @@ void HELPER(mtspr)(CPUOpenRISCState *env, target_ulong spr, target_ulong rb) case TO_SPR(1, 1280) ... TO_SPR(1, 1407): /* DTLBW3MR 0-127 */ case TO_SPR(1, 1408) ... TO_SPR(1, 1535): /* DTLBW3TR 0-127 */ break; + case TO_SPR(2, 512) ... TO_SPR(2, 512+ITLB_SIZE-1): /* ITLBW0MR 0-127 */ idx = spr - TO_SPR(2, 512); - if (!(rb & 1)) { - tlb_flush_page(cs, env->tlb.itlb[idx].mr & TARGET_PAGE_MASK); + mr = env->tlb.itlb[idx].mr; + if (mr & 1) { + tlb_flush_page(cs, mr & TARGET_PAGE_MASK); + } + if (rb & 1) { + tlb_flush_page(cs, rb & TARGET_PAGE_MASK); } env->tlb.itlb[idx].mr = rb; break; - case TO_SPR(2, 640) ... TO_SPR(2, 640+ITLB_SIZE-1): /* ITLBW0TR 0-127 */ idx = spr - TO_SPR(2, 640); env->tlb.itlb[idx].tr = rb; @@ -121,6 +129,7 @@ void HELPER(mtspr)(CPUOpenRISCState *env, target_ulong spr, target_ulong rb) case TO_SPR(2, 1280) ... TO_SPR(2, 1407): /* ITLBW3MR 0-127 */ case TO_SPR(2, 1408) ... TO_SPR(2, 1535): /* ITLBW3TR 0-127 */ break; + case TO_SPR(5, 1): /* MACLO */ env->mac = deposit64(env->mac, 0, 32, rb); break;