From patchwork Mon Mar 13 17:02:04 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fenghua Yu X-Patchwork-Id: 68955 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp1305580wrd; Mon, 13 Mar 2023 10:14:18 -0700 (PDT) X-Google-Smtp-Source: AK7set8CfZ2QYU8m75MKTlPv0jJzXCR+QBxGYY6IOqjcCSdhQTmSektdcEUF1IT7PX0JUZWoZyGv X-Received: by 2002:a05:6a00:1819:b0:5a8:ac15:534d with SMTP id y25-20020a056a00181900b005a8ac15534dmr13302237pfa.13.1678727658024; Mon, 13 Mar 2023 10:14:18 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1678727658; cv=none; d=google.com; s=arc-20160816; b=BZetQfCWxV0uK3mgitQsfqcBIlJcyuuT9091BTwOiCnPvd+UCaGdx+HpiM5F8UBjKz 8B5LVcaaeYUDzxxw+CNtm75ozlfwGvNbrFMKj00O/IBmlrYivMdd3Acs8mZdQc+KsGdE ZW241jl7U5kLhXB+UWSrquxbCDzIp7nNiCZLxcFE02yiHqICP5DGYK/6Af1+eZiUlits tlvmr+iJVHaQFopTh0hoPVLiQa65GZsoDZzvvvWSjvO5sO+2y24YL5snLmjTjAe6weTO j+Y6X09y75D88tlOhlNvzgC0PeuUqRu/AqdqZZbgBEKKtgo0IsHtZzHgonVwkOiPpwhC X6gA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=uANeK8TMsD3aD8EjOWoTcIVCT30YBQcbC8b7XWfMhME=; b=BVhmyBZRBS18oNsY2YnftFZfudI7NVLikROORbuPwqKoA7jXyJ3sJRRtWx+B3QA0bi 8isESBYYgb7U/507v7JWu6dcJhqZyl9a83rhkBen582wi5Joel7N1QB8tOeqkyDdGTZg 3nT2qUdPeFb7D70lbfblsHSS55ngwVWMPe9j7VSqhYMUocc2DYsQubcPWIDEuV5TB92E 4vAi1Ybd17f5LTY3aRxSw1uZj8kCbvIe57PWfKzHyKGdM5qLdJEbJOpJ2AYN7fWKvKiS fhLFNKYGEWj6U+2XehYNF87ET7E99gnI1PNGz6ecUV74dfoh5VRhva/rACb4TPFE/EW2 9nCQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=VKvuY0pb; 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=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id p23-20020a63e657000000b00502f457059dsi6966048pgj.330.2023.03.13.10.14.05; Mon, 13 Mar 2023 10:14:18 -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=@intel.com header.s=Intel header.b=VKvuY0pb; 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=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230230AbjCMRF1 (ORCPT + 99 others); Mon, 13 Mar 2023 13:05:27 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41142 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230327AbjCMRE4 (ORCPT ); Mon, 13 Mar 2023 13:04:56 -0400 Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3F57742BE7; Mon, 13 Mar 2023 10:04:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1678727062; x=1710263062; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=MwbXdVdXHEET8kRfN+0wwJVjHIBrLAgznNDkutHFUxs=; b=VKvuY0pbFVER+9UfE9QEz9oh6kH2ZMzS5JwQV9bKyZGBogg9QlrmK9EB fIhM/2GTr+L3DXIoyXh/YT1rMM5DRseTPX+MWVM80FTEV4N+vsQtIf0PA zPN1vqPYnUsdM3UHafdHPToHPTeoWDnrQkU6NJ8GVJgVxh4X3IUnLLpBy hsS5ajYdhfSIq+fWKvfxutTNUAbnM+YznYTGAHPtYxzQf/675dHZLg6t+ yh1LDBZC52sGKSL9ds8KkI/p5S+avJBKT5xPrUYiWx21U2wfkT+zk0yP/ fB/EPjIO2c5FcFOqyUbDanx7CiJaclNCfuhneuO+cXmq548TzTLDGbQa1 Q==; X-IronPort-AV: E=McAfee;i="6500,9779,10648"; a="334679615" X-IronPort-AV: E=Sophos;i="5.98,257,1673942400"; d="scan'208";a="334679615" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Mar 2023 10:02:40 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6500,9779,10648"; a="708950888" X-IronPort-AV: E=Sophos;i="5.98,257,1673942400"; d="scan'208";a="708950888" Received: from fyu1.sc.intel.com ([172.25.103.126]) by orsmga008.jf.intel.com with ESMTP; 13 Mar 2023 10:02:39 -0700 From: Fenghua Yu To: "Vinod Koul" , "Dave Jiang" Cc: dmaengine@vger.kernel.org, "linux-kernel" , Sanjay Kumar , Tony Zhu , Fenghua Yu Subject: [PATCH v3 01/16] dmaengine: idxd: make misc interrupt one shot Date: Mon, 13 Mar 2023 10:02:04 -0700 Message-Id: <20230313170219.1956012-2-fenghua.yu@intel.com> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20230313170219.1956012-1-fenghua.yu@intel.com> References: <20230313170219.1956012-1-fenghua.yu@intel.com> MIME-Version: 1.0 X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_NONE 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 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1760273532805001597?= X-GMAIL-MSGID: =?utf-8?q?1760273532805001597?= From: Dave Jiang Current code continuously processes the interrupt as long as the hardware is setting the status bit. There's no reason to do that since the threaded handler will get called again if another interrupt is asserted. Also through testing, it has shown that if a misprogrammed (or malicious) agent can continuously submit descriptors with bad completion record and causes errors to be reported via the misc interrupt. Continuous processing by the thread can cause software hang watchdog to kick off since the thread isn't giving up the CPU. Reported-by: Sanjay Kumar Tested-by: Tony Zhu Signed-off-by: Dave Jiang Co-developed-by: Fenghua Yu Signed-off-by: Fenghua Yu --- drivers/dma/idxd/irq.c | 38 ++++++++++++-------------------------- 1 file changed, 12 insertions(+), 26 deletions(-) diff --git a/drivers/dma/idxd/irq.c b/drivers/dma/idxd/irq.c index aa314ebec587..0d639303b515 100644 --- a/drivers/dma/idxd/irq.c +++ b/drivers/dma/idxd/irq.c @@ -217,13 +217,22 @@ static void idxd_int_handle_revoke(struct work_struct *work) kfree(revoke); } -static int process_misc_interrupts(struct idxd_device *idxd, u32 cause) +irqreturn_t idxd_misc_thread(int vec, void *data) { + struct idxd_irq_entry *irq_entry = data; + struct idxd_device *idxd = ie_to_idxd(irq_entry); struct device *dev = &idxd->pdev->dev; union gensts_reg gensts; u32 val = 0; int i; bool err = false; + u32 cause; + + cause = ioread32(idxd->reg_base + IDXD_INTCAUSE_OFFSET); + if (!cause) + return IRQ_NONE; + + iowrite32(cause, idxd->reg_base + IDXD_INTCAUSE_OFFSET); if (cause & IDXD_INTC_HALT_STATE) goto halt; @@ -301,7 +310,7 @@ static int process_misc_interrupts(struct idxd_device *idxd, u32 cause) val); if (!err) - return 0; + goto out; halt: gensts.bits = ioread32(idxd->reg_base + IDXD_GENSTATS_OFFSET); @@ -324,33 +333,10 @@ static int process_misc_interrupts(struct idxd_device *idxd, u32 cause) "idxd halted, need %s.\n", gensts.reset_type == IDXD_DEVICE_RESET_FLR ? "FLR" : "system reset"); - return -ENXIO; } } - return 0; -} - -irqreturn_t idxd_misc_thread(int vec, void *data) -{ - struct idxd_irq_entry *irq_entry = data; - struct idxd_device *idxd = ie_to_idxd(irq_entry); - int rc; - u32 cause; - - cause = ioread32(idxd->reg_base + IDXD_INTCAUSE_OFFSET); - if (cause) - iowrite32(cause, idxd->reg_base + IDXD_INTCAUSE_OFFSET); - - while (cause) { - rc = process_misc_interrupts(idxd, cause); - if (rc < 0) - break; - cause = ioread32(idxd->reg_base + IDXD_INTCAUSE_OFFSET); - if (cause) - iowrite32(cause, idxd->reg_base + IDXD_INTCAUSE_OFFSET); - } - +out: return IRQ_HANDLED; }