From patchwork Wed Nov 28 21:31:56 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrii Anisov X-Patchwork-Id: 152348 Delivered-To: patch@linaro.org Received: by 2002:a2e:299d:0:0:0:0:0 with SMTP id p29-v6csp1610182ljp; Wed, 28 Nov 2018 13:34:34 -0800 (PST) X-Google-Smtp-Source: AFSGD/UKPDPd4hk1ho/mjZo3h4IGK10MpJg0tGQtTv83AS+fEMk0s2PsNsHD4kb8/VTRvGQ0IWfR X-Received: by 2002:a25:5f4d:: with SMTP id h13-v6mr39924929ybm.252.1543440874208; Wed, 28 Nov 2018 13:34:34 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1543440874; cv=none; d=google.com; s=arc-20160816; b=bnHcBOqDoSGnPcrmHrwr9vO5g46Xhgg8hTLf4GYMcwpQ9n6IrtFTl+6rbzNsSeXS7J T9XPswPAZYvBNvR7mZzNZvyXN7nIvdZAWxVmZKV4srS7ZNPJHosjBYqbuwnZbX83gJ4/ rX2XeljrmlYcjhcyEJG0A9TGaENjtCnnr2ylMFX59BGA/Mo9lTbvy18yoKFCLgHfyLDk AaieoPOUP/v2yOYqlPQ+AAHVGjyEYcgJocTo9O2cAyM1xhJo+ao+iLDyMsUYfbYOqI19 1NEt5Pi4cK22bHcofQch9qiokPCFJIW82Zn3eJbb7B704YRnuFebr+xF5pYI5Qoz16Gy KdhA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version:cc :list-subscribe:list-help:list-post:list-unsubscribe:list-id :precedence:subject:references:in-reply-to:message-id:date:to:from :dkim-signature; bh=hK/r5uY0hM0upHd4cdIglo7H4RLcvNUYvfzQafzih10=; b=jdCtYwr9AEUe7P1O9uu2w34j3WgxdBf8PCPrIt8x6uu9TOkBXqzVgj/OypmaVnt/fR kxQH7lqJ3QHtZCewDF+0nvIu62b/ej8Jarf5u/W8iHbuDoQX6QLmV/VngV2ZahoYOJRh 9Moe8ygnOA3IRhKZlAqujtxEFlYauyuhTjXHAHW/WNOysVm26J/kXK1joccgecfmkfuo uurmRXPWEams3PKRYErVoP2SqwfFQqZA5wvcJownyfKpvkkixS83oXVv41ewNBYboSdK 0Pc8ljarcljrkLQvgm37kWFyjX+FWj3wzwOnUkcbCWBZyv0kzUs3LvPI5eT0mVc5aEF3 Dk+A== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=jmdLpyPa; spf=pass (google.com: best guess record for domain of xen-devel-bounces@lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from lists.xenproject.org (lists.xenproject.org. [192.237.175.120]) by mx.google.com with ESMTPS id e190si5751503ywh.248.2018.11.28.13.34.34 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 28 Nov 2018 13:34:34 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of xen-devel-bounces@lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=jmdLpyPa; spf=pass (google.com: best guess record for domain of xen-devel-bounces@lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1gS7RT-0008Uj-Bf; Wed, 28 Nov 2018 21:32:19 +0000 Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1gS7RS-0008Uc-M5 for xen-devel@lists.xenproject.org; Wed, 28 Nov 2018 21:32:18 +0000 X-Inumbo-ID: 13a98848-f355-11e8-9a16-bc764e045a96 Received: from mail-lj1-x244.google.com (unknown [2a00:1450:4864:20::244]) by us1-rack-dfw2.inumbo.com (Halon) with ESMTPS id 13a98848-f355-11e8-9a16-bc764e045a96; Wed, 28 Nov 2018 21:32:17 +0000 (UTC) Received: by mail-lj1-x244.google.com with SMTP id v1-v6so24845150ljd.0 for ; Wed, 28 Nov 2018 13:32:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=+p9217LHwZgbQO/7RlJCTxhaTdSJiZVKhjjLcSD62Cg=; b=jmdLpyPauolC1CZeDMdDdzbNuIXzbrGYNGK1SkUQuwnR9joawGLx2pnvZ9oyxViqmA zmvhY+pk1CoksFuITf2OXmWuj2m0XtlZWAQSMO3GEqtI+wPNuwiqBafII2PTlI4Q7v5E z+QIGe+ZY+93Eeyd1FtDNuuSMInulLZ/oHpVsu8Z7+4jASUHmPCu7QtXCy0Y2sJrBvgZ LGP78fun1KPoVLc0pZkdlzN307aDZxmL+6NBfAyrnEWv6xSgdRDx5XbjyhEx5LXXGZng FhhPiiAfdS5PybHrDAHZterhcWTWXA5rOtpbDuUutwWIJPZ2VuLH9H867s8KCs/qw4fU MsBw== 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=+p9217LHwZgbQO/7RlJCTxhaTdSJiZVKhjjLcSD62Cg=; b=cw5as3TO+ohPsDNO832SyuJo2zemclfsBe6wQ/lpshf1kRRiZM5DxTesHAwHnasghI 4G36hCQnqelQMF3aGqE6prw39/wUVQWP9GrwRVMk1Ja8NoZXrmH5HK6kxPUMuC30Em7A fELceoF5wcpU3Dr86CLv6BTpFjAsT9Ys1n16mhkRdZOd0A2TDGl5pFukoBS5TLX+Mz7/ t0YE+xyfD2gQLTYNcdFuTQpyaIHY/SsewtEiOqihYY42kbjzkAfLQ/V0DdNJZDQHJVuk 8lmRYg8agQxSsKiLggAKKwto4DT9wimzrFTI1DtpvfAHuguPv2+Ljb2t4cVy7TDeYcR7 q0zQ== X-Gm-Message-State: AGRZ1gIdKjUIvZ6Tc6yv/b8quHBxzYSgTENeel+1dfIca+IQD0IvxUFT R/b0KWIlbFmVdFGxM5vWjgA= X-Received: by 2002:a2e:2b85:: with SMTP id r5-v6mr23519766ljr.91.1543440735499; Wed, 28 Nov 2018 13:32:15 -0800 (PST) Received: from aanisov-work.kyiv.epam.com (ll-22.209.223.85.sovam.net.ua. [85.223.209.22]) by smtp.gmail.com with ESMTPSA id e14-v6sm1273476ljb.31.2018.11.28.13.32.14 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 28 Nov 2018 13:32:14 -0800 (PST) From: Andrii Anisov To: Date: Wed, 28 Nov 2018 23:31:56 +0200 Message-Id: <1543440731-21947-2-git-send-email-andrii.anisov@gmail.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1543440731-21947-1-git-send-email-andrii.anisov@gmail.com> References: <1543440731-21947-1-git-send-email-andrii.anisov@gmail.com> Subject: [Xen-devel] [RFC 01/16] xen/arm: Re-enable interrupt later in the trap path X-BeenThere: xen-devel@lists.xenproject.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Cc: xen-devel@lists.xenproject.org, Julien Grall , Stefano Stabellini , Andrii Anisov MIME-Version: 1.0 Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" From: Julien Grall This makes function enter_hypervisor_head() being executed with irqs locked. This also give a fine side effect - it assures that LRs are cleared prior to any IRQs processing, which leads to a better (faster) IRQs processing. Signed-off-by: Julien Grall [Andrii: add a justification commit message] Signed-off-by: Andrii Anisov --- xen/arch/arm/arm64/entry.S | 11 +++++------ xen/arch/arm/traps.c | 6 ++++++ 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/xen/arch/arm/arm64/entry.S b/xen/arch/arm/arm64/entry.S index 97b05f5..8f28789 100644 --- a/xen/arch/arm/arm64/entry.S +++ b/xen/arch/arm/arm64/entry.S @@ -195,7 +195,6 @@ hyp_error_invalid: hyp_error: entry hyp=1 - msr daifclr, #2 mov x0, sp bl do_trap_hyp_serror exit hyp=1 @@ -203,7 +202,7 @@ hyp_error: /* Traps taken in Current EL with SP_ELx */ hyp_sync: entry hyp=1 - msr daifclr, #6 + msr daifclr, #4 mov x0, sp bl do_trap_hyp_sync exit hyp=1 @@ -304,7 +303,7 @@ guest_sync_slowpath: ALTERNATIVE("bl check_pending_vserror; cbnz x0, 1f", "nop; nop", SKIP_SYNCHRONIZE_SERROR_ENTRY_EXIT) - msr daifclr, #6 + msr daifclr, #4 mov x0, sp bl do_trap_guest_sync 1: @@ -332,7 +331,7 @@ guest_fiq_invalid: guest_error: entry hyp=0, compat=0 - msr daifclr, #6 + msr daifclr, #4 mov x0, sp bl do_trap_guest_serror exit hyp=0, compat=0 @@ -347,7 +346,7 @@ guest_sync_compat: ALTERNATIVE("bl check_pending_vserror; cbnz x0, 1f", "nop; nop", SKIP_SYNCHRONIZE_SERROR_ENTRY_EXIT) - msr daifclr, #6 + msr daifclr, #4 mov x0, sp bl do_trap_guest_sync 1: @@ -375,7 +374,7 @@ guest_fiq_invalid_compat: guest_error_compat: entry hyp=0, compat=1 - msr daifclr, #6 + msr daifclr, #4 mov x0, sp bl do_trap_guest_serror exit hyp=0, compat=1 diff --git a/xen/arch/arm/traps.c b/xen/arch/arm/traps.c index 88ffeeb..18355e9 100644 --- a/xen/arch/arm/traps.c +++ b/xen/arch/arm/traps.c @@ -2038,6 +2038,8 @@ static void enter_hypervisor_head(struct cpu_user_regs *regs) { struct vcpu *v = current; + ASSERT(!local_irq_is_enabled()); + /* If the guest has disabled the workaround, bring it back on. */ if ( needs_ssbd_flip(v) ) arm_smccc_1_1_smc(ARM_SMCCC_ARCH_WORKAROUND_2_FID, 1, NULL); @@ -2072,6 +2074,7 @@ void do_trap_guest_sync(struct cpu_user_regs *regs) const union hsr hsr = { .bits = regs->hsr }; enter_hypervisor_head(regs); + local_irq_enable(); switch ( hsr.ec ) { @@ -2207,6 +2210,7 @@ void do_trap_hyp_sync(struct cpu_user_regs *regs) const union hsr hsr = { .bits = regs->hsr }; enter_hypervisor_head(regs); + local_irq_enable(); switch ( hsr.ec ) { @@ -2245,6 +2249,7 @@ void do_trap_hyp_sync(struct cpu_user_regs *regs) void do_trap_hyp_serror(struct cpu_user_regs *regs) { enter_hypervisor_head(regs); + local_irq_enable(); __do_trap_serror(regs, VABORT_GEN_BY_GUEST(regs)); } @@ -2252,6 +2257,7 @@ void do_trap_hyp_serror(struct cpu_user_regs *regs) void do_trap_guest_serror(struct cpu_user_regs *regs) { enter_hypervisor_head(regs); + local_irq_enable(); __do_trap_serror(regs, true); }