From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id D6DDBC4332F for ; Fri, 25 Nov 2022 17:16:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:Cc:To:Subject:Message-ID:Date:From: In-Reply-To:References:MIME-Version:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=psCEEe9JFpwQ25OQR8LWhP+68yFCqdzmtzl9sY4K2qI=; b=subt21nGiu1pJj qfWyWCNjPwbIdNJeYq3H3VRibL5lXpPqKXUgbLBRvYUq+cHPKjWP45bDbfS9RZUnScVdloxdbhR7r l2+KTGiyF4FKJTFjDTPoxoEDvtnAjIQnpexlS36KPvYAQDTtC3tXDIJQOwbYcizbTiGztYWYS2AuN VqpQ9AHopaNfUTkQm56lVj34uwWGTv/oU3j3/ghEgSo04ecSdo3ZSH5QTDtsV3+b0VjzE9EcpQQ8+ A2BWFMObxR9AtSHGH/epJBXUDF8KLc9TFZ8dMErW8YX3JDHmAaOAi3Bkjlkt+BNzs/NFMqvNBf3oK cJptcgl9+tOzem16R+Rw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1oycIb-000h5t-9M; Fri, 25 Nov 2022 17:15:37 +0000 Received: from mail-io1-xd2d.google.com ([2607:f8b0:4864:20::d2d]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1oycIY-000h4V-5I for linux-arm-kernel@lists.infradead.org; Fri, 25 Nov 2022 17:15:35 +0000 Received: by mail-io1-xd2d.google.com with SMTP id 11so3484386iou.0 for ; Fri, 25 Nov 2022 09:15:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=IW9TW2hjrT+/De0pJl1J2xvxRS2i1/S0hDRBrqezdyE=; b=i95daCPbgmjJiaRUVDPwpjztsQpU5y1IZdtrbvbWhoqPaeLXPbMAiWP5GlDzc9//P+ 1x7oYxNZsjvdPj5ccAZRy+GC4mjgA5WwpSUILvWLfYvYR7I0rjh1oo0ny5jCePDycVn1 2RZu7gZtDqX6wFcDUgcQT0WzCzKDMp8hbCeBI= 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:subject:date:message-id :reply-to; bh=IW9TW2hjrT+/De0pJl1J2xvxRS2i1/S0hDRBrqezdyE=; b=rzsSlgZYpKkIboB/fu2gVx7lYeBmJ7SAZTL0mp057ShNH0UVHXpcpbxuyet0L/zR1U RNPWU43wTCoTsthmIgGvwkZuKpooHUwdug7ZAgJBykMAkgY7jNv1K4nQqTEf/PlPxg+O E4MBr0NMkvn7QPxBLs7eOZoqNV++sbabNIgnVXGZAIr+fvgV76/xfkkVMOE02KBuUFTM QO2QA3h+uahxR43Kff8eH3lEdhSbZWR4ZkkNjFsAFRMQQJOC0QVJimAt5VoAv55pgUAW izCcQFz+fl8E29bZlJi/22pYQKOMQJr0LEjmBQY/RKUWcYHej1LhfJHaPYwY5k7xg/SZ 2kUA== X-Gm-Message-State: ANoB5pkV03zERfLwOyPevLYK8ij1aOM481MteuCQwQrSB6QwiAlET6Gw AfSZ5F09p3a99/9KtQ2lejYNDVzX9kBBUwLb X-Google-Smtp-Source: AA0mqf7bFW/QESUXwDYcaJaeWfrB2daF80otuzDsKb2W8bpxCeEcnSk/ybtRPWrCrHRo9WB9Mplqfg== X-Received: by 2002:a02:a197:0:b0:373:83fe:19c0 with SMTP id n23-20020a02a197000000b0037383fe19c0mr17574536jah.156.1669396532741; Fri, 25 Nov 2022 09:15:32 -0800 (PST) Received: from mail-il1-f178.google.com (mail-il1-f178.google.com. [209.85.166.178]) by smtp.gmail.com with ESMTPSA id r4-20020a92ce84000000b002eb3b43cd63sm1428039ilo.18.2022.11.25.09.15.29 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 25 Nov 2022 09:15:30 -0800 (PST) Received: by mail-il1-f178.google.com with SMTP id z9so2223312ilu.10 for ; Fri, 25 Nov 2022 09:15:29 -0800 (PST) X-Received: by 2002:a05:6e02:1312:b0:302:f7e9:ca64 with SMTP id g18-20020a056e02131200b00302f7e9ca64mr1841112ilr.133.1669396529417; Fri, 25 Nov 2022 09:15:29 -0800 (PST) MIME-Version: 1.0 References: <20221125-mtk-iommu-v1-0-bb5ecac97a28@chromium.org> In-Reply-To: From: Ricardo Ribalda Date: Fri, 25 Nov 2022 18:15:18 +0100 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH] iommu/mediatek: Fix crash on isr after kexec() To: Robin Murphy Cc: Joerg Roedel , Matthias Brugger , Yong Wu , Will Deacon , iommu@lists.linux.dev, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20221125_091534_239342_7392395B X-CRM114-Status: GOOD ( 30.22 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Hi Robin Thanks for your review! On Fri, 25 Nov 2022 at 18:02, Robin Murphy wrote: > > On 2022-11-25 16:28, Ricardo Ribalda wrote: > > If the system is rebooted via isr(), the IRQ handler might be triggerd > > before the domain is initialized. Resulting on an invalid memory access > > error. > > > > Fix: > > [ 0.500930] Unable to handle kernel read from unreadable memory at virtual address 0000000000000070 > > [ 0.501166] Call trace: > > [ 0.501174] report_iommu_fault+0x28/0xfc > > [ 0.501180] mtk_iommu_isr+0x10c/0x1c0 > > Hmm, shouldn't we clear any pending faults at probe in > mtk_iommu_hw_init(), before the IRQ is requested? mtk_iommu_isr() might > still want to be robust against a spurious interrupt, but then it can > simply return without doing anything at all if the domain is NULL, since > we'll know that's the case. > > Thanks, > Robin. > > (It might be nice if request_irq() had a flag to say "if this IRQ looks > pending already just clear it" for drivers that know it could only be > spurious at that point; kexec seems to lead to this problem quite a lot...) It is not only about the "last" IRQ before kexec. The peripherals under the IOMMU might still active and producing faults and therefore IRQs. I tried this: @@ -886,6 +886,11 @@ static int mtk_iommu_hw_init(const struct mtk_iommu_data *data, unsigned int ban upper_32_bits(data->protect_base); writel_relaxed(regval, bankx->base + REG_MMU_IVRP_PADDR); + /* Clear previous IRQs */ + regval = readl_relaxed(bankx->base + REG_MMU_INT_CONTROL0); + regval |= F_INT_CLR_BIT; + writel_relaxed(regval, bankx->base + REG_MMU_INT_CONTROL0); + if (devm_request_irq(bankx->pdev, bankx->irq, mtk_iommu_isr, 0, dev_name(bankx->pdev), (void *)bankx)) { writel_relaxed(0, bankx->base + REG_MMU_PT_BASE_ADDR); And I still get the same crash > > > Signed-off-by: Ricardo Ribalda > > --- > > To: Yong Wu > > To: Joerg Roedel > > To: Will Deacon > > To: Robin Murphy > > To: Matthias Brugger > > Cc: iommu@lists.linux.dev > > Cc: linux-mediatek@lists.infradead.org > > Cc: linux-arm-kernel@lists.infradead.org > > Cc: linux-kernel@vger.kernel.org > > --- > > drivers/iommu/mtk_iommu.c | 2 +- > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > diff --git a/drivers/iommu/mtk_iommu.c b/drivers/iommu/mtk_iommu.c > > index 2ab2ecfe01f8..17f6be5a5097 100644 > > --- a/drivers/iommu/mtk_iommu.c > > +++ b/drivers/iommu/mtk_iommu.c > > @@ -454,7 +454,7 @@ static irqreturn_t mtk_iommu_isr(int irq, void *dev_id) > > fault_larb = data->plat_data->larbid_remap[fault_larb][sub_comm]; > > } > > > > - if (report_iommu_fault(&dom->domain, bank->parent_dev, fault_iova, > > + if (dom && report_iommu_fault(&dom->domain, bank->parent_dev, fault_iova, > > write ? IOMMU_FAULT_WRITE : IOMMU_FAULT_READ)) { > > dev_err_ratelimited( > > bank->parent_dev, > > > > --- > > base-commit: 4312098baf37ee17a8350725e6e0d0e8590252d4 > > change-id: 20221125-mtk-iommu-13023f971298 > > > > Best regards, -- Ricardo Ribalda _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel