From patchwork Mon Mar 6 16:31:23 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fenghua Yu X-Patchwork-Id: 64951 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp1951096wrd; Mon, 6 Mar 2023 08:56:02 -0800 (PST) X-Google-Smtp-Source: AK7set/SkMVYkDK7TVAvW0icQOz0Wsdd8TACjb/UsKG8HDSAU3I5HqBdusJIWPM+z60aGQZ5FrdZ X-Received: by 2002:a05:6a20:440c:b0:ce:5c14:2838 with SMTP id ce12-20020a056a20440c00b000ce5c142838mr17169673pzb.54.1678121762173; Mon, 06 Mar 2023 08:56:02 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678121762; cv=none; d=google.com; s=arc-20160816; b=ekj7502zKlCDfdQfvre94SgM92bgauBZCt3j/2rE7cro+NCWbO7IbPJbIk+bnbp3QG 3q4yGIoSKwi2m2UlvG3bjtzwavOjGdsP5jAX5OtZzV9lgf2nvxArYgiSfSnpw/PQun7g Mp8+guNkkqc6Xzo+6mkmYcG9f1+U+GEAjs0DmtPctFp9p431uq0CxDy1bQy80JHymee8 bgCRzzg5zAZV4zUYyQnGeVd6fovJq/gkq8rfUFnyyG5xjMqVENfBRno7Kkn6HmuVreS2 +JMJu4UYk4lYMHMh/jmK2+7ki6LTCOo9eT2CjWsD5mb1NQA4Ou2i1NUFc3Mme9JBm7T1 rS8Q== 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=oFcRReBn4L55fmuuxgzhgg4SgjFxXmB/PVAxfwe73hmKkMxaJox6LCdHFy+0MX7W4V kBgQmWEU+Qwc+oAHRNiTD8rFEMkQ2GhC96SDfIJ0/6NX9wG568A4uCIUxq0By6rn0+b1 PMEspqxcItipDaBL3GcTyBbqF/wYTDdVRVUP2yv0hUfSiJusGoh9oO57HXtwtwpyG3E6 8uv7egSYp/VR0HtkFI+sBS91TmvJfETtbaba5Xis6nI54+8viR+09Zp48fetZ8fYRl+K UfMG853+wcMFgItLpFQol0GksarnBvFe4rO6SQEfg4kYhaZG/huoSVlCqtlsy0fD7q+i S4OA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=Mt+AFGW1; 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 f14-20020a63f74e000000b005033551a700si9541961pgk.438.2023.03.06.08.55.48; Mon, 06 Mar 2023 08:56:02 -0800 (PST) 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=Mt+AFGW1; 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 S230216AbjCFQoU (ORCPT + 99 others); Mon, 6 Mar 2023 11:44:20 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35152 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230190AbjCFQoF (ORCPT ); Mon, 6 Mar 2023 11:44:05 -0500 Received: from mga06.intel.com (mga06b.intel.com [134.134.136.31]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8F322CDF4; Mon, 6 Mar 2023 08:43:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1678121020; x=1709657020; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=MwbXdVdXHEET8kRfN+0wwJVjHIBrLAgznNDkutHFUxs=; b=Mt+AFGW1VFvJlcO+XR3lRjr7241deIknkGQIfI+qmm7uWjEDG5eKuR7r 6s1JxXC4fpFzg73qEyKIm/17Dr/9brGybCn8kKsnYGs0dunytIicOqUGT NbkuAl0rm4YFx9Gx8KUTD7b/QlHuX94500LO+vWnn+4tHuTDsCSSox2Ii u7UR7zlgKehBw60CHtcjmsIHZicQZsMFM6r0fImKhWPGw2VmTAFgM8ZQZ +CkUXcR1pmb5Pm1GP8FVHywqCFsHMOhEp491Wu5+WHecGruV6VU5NABVE DLURhpr+MiVu0iReidVE3G3E8bOt6mWiz8HWNvQG/LKf6pPVMRP48X956 w==; X-IronPort-AV: E=McAfee;i="6500,9779,10641"; a="398181141" X-IronPort-AV: E=Sophos;i="5.98,238,1673942400"; d="scan'208";a="398181141" Received: from orsmga007.jf.intel.com ([10.7.209.58]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 Mar 2023 08:31:55 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6500,9779,10641"; a="669504470" X-IronPort-AV: E=Sophos;i="5.98,238,1673942400"; d="scan'208";a="669504470" Received: from fyu1.sc.intel.com ([172.25.103.126]) by orsmga007.jf.intel.com with ESMTP; 06 Mar 2023 08:31:54 -0800 From: Fenghua Yu To: "Vinod Koul" , "Dave Jiang" Cc: dmaengine@vger.kernel.org, "linux-kernel" , Sanjay Kumar , Tony Zhu , Fenghua Yu Subject: [PATCH v2 01/16] dmaengine: idxd: make misc interrupt one shot Date: Mon, 6 Mar 2023 08:31:23 -0800 Message-Id: <20230306163138.587484-2-fenghua.yu@intel.com> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20230306163138.587484-1-fenghua.yu@intel.com> References: <20230306163138.587484-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?1759638204820616848?= X-GMAIL-MSGID: =?utf-8?q?1759638204820616848?= 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; }