From patchwork Fri Mar 21 01:57:59 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Pan-Doh X-Patchwork-Id: 14024774 X-Patchwork-Delegate: bhelgaas@google.com Received: from mail-pl1-f201.google.com (mail-pl1-f201.google.com [209.85.214.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 40A711E0DBA for ; Fri, 21 Mar 2025 01:58:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742522301; cv=none; b=Q1F3QJ3/9DFlFQCgY8/dDUCU6G5ObdQrX5scuOwetUUhYkkwYHKrLDyT+tV+8L/dRGiQGeJiuAcUKoC1gSPWYX2JgA6VYP/UpshS7n4XqZaeYlIXKXSeoHUVmmS/yqbAylSgnZW273YAej7U/NupRQXMiN/e05MgU+SMqftMiBU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742522301; c=relaxed/simple; bh=7almazT6KfTWEap1S6wf9x3QXeB8agLb0ZD6yXeWsVw=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=urDGTN8jcneFI2T0GmWT7ABgkfWTb5qecY6Fd2Stc4zGo9ICMagSjEVDwR7segEQk2t61saBeUNrtW43tDnueCbQ8Aji3zdvZPsIWnui/d5f7eAoskji2ataUMUetgorXmRHB7IevSt2xtM/5ZTwtZvDK00aZYenkNrWYOopxiw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--pandoh.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=mpElgeHg; arc=none smtp.client-ip=209.85.214.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--pandoh.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="mpElgeHg" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-2241e7e3addso19584835ad.1 for ; Thu, 20 Mar 2025 18:58:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1742522297; x=1743127097; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=FDlB1RVfCR7nk6uMtaKocbEO2vLTixw+qKZEpWq08Rs=; b=mpElgeHg+QVjMyKCfquqo/i5QQabMUao13Jvmjnpz1U+M28NJXhJm6RAMFn1vhu7PF dypS2ArjdwZrjHB5isBIopIkySPemN3r+7zFBl9si3o2Nd0FoSTUPbgdSiFn5cGYexC9 uIzk3B5uKrgadO0yUvSwoX857Ic47fGhCpK21Xec/fwYWq8grcx3gNKiTgWcvF2v8D7H yzGR4lVa/vYkoHKC7tw1ReHfQy0pPocB0ytcYlTdrgZI6Wo+Au77mPeKLE5Hk6SIpYMJ j22JDUWTA5k/bkFqloUMdpp0shZBtQKTPI5m+F9zWdCSfOpEUou5gbNWVh5WMJ+AcW15 88Fg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742522297; x=1743127097; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=FDlB1RVfCR7nk6uMtaKocbEO2vLTixw+qKZEpWq08Rs=; b=fZ9GcsbSDyhO2qDVy5tt5Y6MTyFGeztLHseYEEyix9Si2CiM7jqfDKNiE5/hFbWCRb mb8UVhQc2TyjKu5O6Bzd4xMvxdPnlH5GGp3je+cUBKnkaI4odSSEH/C9ummZ4w0WRcmm 7xAJo7B28rdEYeL3pjCzjU1CRHuojx4c7g0amZfoq4FU8dYlFAnLIxBRNZ7D1uqVjj+w ZltCRx61mdVD8DM8qY8AcU07p6NaaKBKCM2/ZLw6v8ldDM7m+nMkPJD7Vf20mZKQP/VM SYTG9qgnC986IGPVirFKjaOh5/JG4o3Ub5uY9xPLy/3/AmjUB2dtLljWeQ8Sq9U9ECF4 rITg== X-Gm-Message-State: AOJu0Ywb6+yYUIp0dsBvoD5f7rElUJtJK0pWIDn5jRVZynyM18KS9OY9 YrEVXgVqar+eGUkA6AT5yfkUeiiM3fuUcS6w570RNi2M1cdd2pPx7cyhy2UkecvRW7oEUBe6+vF KjA== X-Google-Smtp-Source: AGHT+IGHfQViGTBq/dvJbC2+GdWKb5TEL9gO4pgkG21ms2i8spYMzfpoBd1feq8YhFByhasH/lwrTXYqglE= X-Received: from pfjt20.prod.google.com ([2002:a05:6a00:21d4:b0:736:4ad6:181b]) (user=pandoh job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:ecc4:b0:224:1935:fb91 with SMTP id d9443c01a7336-22780da5a45mr21718265ad.27.1742522297452; Thu, 20 Mar 2025 18:58:17 -0700 (PDT) Date: Thu, 20 Mar 2025 18:57:59 -0700 In-Reply-To: <20250321015806.954866-1-pandoh@google.com> Precedence: bulk X-Mailing-List: linux-pci@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250321015806.954866-1-pandoh@google.com> X-Mailer: git-send-email 2.49.0.395.g12beb8f557-goog Message-ID: <20250321015806.954866-2-pandoh@google.com> Subject: [PATCH v5 1/8] PCI/AER: Check log level once and propagate down From: Jon Pan-Doh To: Bjorn Helgaas , Karolina Stolarek Cc: linux-pci@vger.kernel.org, Martin Petersen , Ben Fuller , Drew Walton , Anil Agrawal , Tony Luck , " =?utf-8?q?Ilpo_J=C3=A4rvinen?= " , Sathyanarayanan Kuppuswamy , Lukas Wunner , Jonathan Cameron , Sargun Dhillon , "Paul E . McKenney" , Jon Pan-Doh From: Karolina Stolarek When reporting an AER error, we check its type multiple times to determine the log level for each message. Do this check only in the top-level functions (aer_isr_one_error(), pci_print_aer()) and propagate the result down the call chain. Signed-off-by: Karolina Stolarek Signed-off-by: Jon Pan-Doh Reported-by: Sargun Dhillon Acked-by: Paul E. McKenney Reviewed-by: Jon Pan-Doh Reviewed-by: Kuppuswamy Sathyanarayanan --- drivers/pci/pci.h | 2 +- drivers/pci/pcie/aer.c | 34 +++++++++++++++++----------------- drivers/pci/pcie/dpc.c | 2 +- 3 files changed, 19 insertions(+), 19 deletions(-) diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h index b8911d1e10dc..75985b96ecc1 100644 --- a/drivers/pci/pci.h +++ b/drivers/pci/pci.h @@ -551,7 +551,7 @@ struct aer_err_info { }; int aer_get_device_error_info(struct pci_dev *dev, struct aer_err_info *info); -void aer_print_error(struct pci_dev *dev, struct aer_err_info *info); +void aer_print_error(struct pci_dev *dev, struct aer_err_info *info, const char *level); int pcie_read_tlp_log(struct pci_dev *dev, int where, int where2, unsigned int tlp_len, bool flit, diff --git a/drivers/pci/pcie/aer.c b/drivers/pci/pcie/aer.c index 9cff7069577e..45629e1ea058 100644 --- a/drivers/pci/pcie/aer.c +++ b/drivers/pci/pcie/aer.c @@ -670,20 +670,18 @@ static void pci_rootport_aer_stats_incr(struct pci_dev *pdev, } static void __aer_print_error(struct pci_dev *dev, - struct aer_err_info *info) + struct aer_err_info *info, + const char *level) { const char **strings; unsigned long status = info->status & ~info->mask; - const char *level, *errmsg; + const char *errmsg; int i; - if (info->severity == AER_CORRECTABLE) { + if (info->severity == AER_CORRECTABLE) strings = aer_correctable_error_string; - level = KERN_WARNING; - } else { + else strings = aer_uncorrectable_error_string; - level = KERN_ERR; - } for_each_set_bit(i, &status, 32) { errmsg = strings[i]; @@ -696,11 +694,11 @@ static void __aer_print_error(struct pci_dev *dev, pci_dev_aer_stats_incr(dev, info); } -void aer_print_error(struct pci_dev *dev, struct aer_err_info *info) +void aer_print_error(struct pci_dev *dev, struct aer_err_info *info, + const char *level) { int layer, agent; int id = pci_dev_id(dev); - const char *level; if (!info->status) { pci_err(dev, "PCIe Bus Error: severity=%s, type=Inaccessible, (Unregistered Agent ID)\n", @@ -711,8 +709,6 @@ void aer_print_error(struct pci_dev *dev, struct aer_err_info *info) layer = AER_GET_LAYER_ERROR(info->severity, info->status); agent = AER_GET_AGENT(info->severity, info->status); - level = (info->severity == AER_CORRECTABLE) ? KERN_WARNING : KERN_ERR; - aer_printk(level, dev, "PCIe Bus Error: severity=%s, type=%s, (%s)\n", aer_error_severity_string[info->severity], aer_error_layer[layer], aer_agent_string[agent]); @@ -720,7 +716,7 @@ void aer_print_error(struct pci_dev *dev, struct aer_err_info *info) aer_printk(level, dev, " device [%04x:%04x] error status/mask=%08x/%08x\n", dev->vendor, dev->device, info->status, info->mask); - __aer_print_error(dev, info); + __aer_print_error(dev, info, level); if (info->tlp_header_valid) pcie_print_tlp_log(dev, &info->tlp, dev_fmt(" ")); @@ -765,15 +761,18 @@ void pci_print_aer(struct pci_dev *dev, int aer_severity, { int layer, agent, tlp_header_valid = 0; u32 status, mask; + const char *level; struct aer_err_info info; if (aer_severity == AER_CORRECTABLE) { status = aer->cor_status; mask = aer->cor_mask; + level = KERN_WARNING; } else { status = aer->uncor_status; mask = aer->uncor_mask; tlp_header_valid = status & AER_LOG_TLP_MASKS; + level = KERN_ERR; } layer = AER_GET_LAYER_ERROR(aer_severity, status); @@ -786,7 +785,7 @@ void pci_print_aer(struct pci_dev *dev, int aer_severity, info.first_error = PCI_ERR_CAP_FEP(aer->cap_control); pci_err(dev, "aer_status: 0x%08x, aer_mask: 0x%08x\n", status, mask); - __aer_print_error(dev, &info); + __aer_print_error(dev, &info, level); pci_err(dev, "aer_layer=%s, aer_agent=%s\n", aer_error_layer[layer], aer_agent_string[agent]); @@ -1257,14 +1256,15 @@ int aer_get_device_error_info(struct pci_dev *dev, struct aer_err_info *info) return 1; } -static inline void aer_process_err_devices(struct aer_err_info *e_info) +static inline void aer_process_err_devices(struct aer_err_info *e_info, + const char *level) { int i; /* Report all before handle them, not to lost records by reset etc. */ for (i = 0; i < e_info->error_dev_num && e_info->dev[i]; i++) { if (aer_get_device_error_info(e_info->dev[i], e_info)) - aer_print_error(e_info->dev[i], e_info); + aer_print_error(e_info->dev[i], e_info, level); } for (i = 0; i < e_info->error_dev_num && e_info->dev[i]; i++) { if (aer_get_device_error_info(e_info->dev[i], e_info)) @@ -1300,7 +1300,7 @@ static void aer_isr_one_error(struct aer_rpc *rpc, aer_print_port_info(pdev, &e_info); if (find_source_device(pdev, &e_info)) - aer_process_err_devices(&e_info); + aer_process_err_devices(&e_info, KERN_WARNING); } if (e_src->status & PCI_ERR_ROOT_UNCOR_RCV) { @@ -1319,7 +1319,7 @@ static void aer_isr_one_error(struct aer_rpc *rpc, aer_print_port_info(pdev, &e_info); if (find_source_device(pdev, &e_info)) - aer_process_err_devices(&e_info); + aer_process_err_devices(&e_info, KERN_ERR); } } diff --git a/drivers/pci/pcie/dpc.c b/drivers/pci/pcie/dpc.c index df42f15c9829..9e4c9ac737a7 100644 --- a/drivers/pci/pcie/dpc.c +++ b/drivers/pci/pcie/dpc.c @@ -289,7 +289,7 @@ void dpc_process_error(struct pci_dev *pdev) else if (reason == PCI_EXP_DPC_STATUS_TRIGGER_RSN_UNCOR && dpc_get_aer_uncorrect_severity(pdev, &info) && aer_get_device_error_info(pdev, &info)) { - aer_print_error(pdev, &info); + aer_print_error(pdev, &info, KERN_ERR); pci_aer_clear_nonfatal_status(pdev); pci_aer_clear_fatal_status(pdev); } From patchwork Fri Mar 21 01:58:00 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Jon Pan-Doh X-Patchwork-Id: 14024775 X-Patchwork-Delegate: bhelgaas@google.com Received: from mail-pj1-f74.google.com (mail-pj1-f74.google.com [209.85.216.74]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CD6AF9461 for ; Fri, 21 Mar 2025 01:58:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742522303; cv=none; b=TwhsGgGF/fNEGq7DwbKya9HNAebvujyio4KfnJk4Ey/3NiOclpCh33goNwW3hfLg/pWRZta0lG7J5Ccp16BLk9xKk3tdyYvd97LUGs7hLGZ/XAavSTA4l0DcWhjxXsG884yKhhvXrDlkydJQ/Z9p7jxn6PFUfIm2Dj83USl08jg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742522303; c=relaxed/simple; bh=KZOcOyizsUrn78Tt3nRHBxYUDqgCvXlp2As7lgDjcgQ=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=InMk3rDTNT88OhpMd3kTakU9plQzC4eVcC9VIANZ4VLxrTkV3WJlUXbdoGwZEEJR78Xhasg2lzg5wo/ituUKg9Mt+wUok+lzbSLiVoT0hXiOdnZCV+068OxrrfLEjIs3VMQ4KR3GruMRELneD5EQ583QOVzDRB/rJ5BArKybt18= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--pandoh.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=EFZeufen; arc=none smtp.client-ip=209.85.216.74 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--pandoh.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="EFZeufen" Received: by mail-pj1-f74.google.com with SMTP id 98e67ed59e1d1-2ff8a2c7912so2318533a91.1 for ; Thu, 20 Mar 2025 18:58:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1742522300; x=1743127100; darn=vger.kernel.org; h=content-transfer-encoding:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:from:to:cc:subject:date:message-id :reply-to; bh=GGqOhVbhYbRp09iQ8MkomGhZ6WYASwULI1k3fzWO1To=; b=EFZeufenmYGQ4Xh1B6qffl7x/QNj3moWjQ+BdJ+R652mO2aH+gdYMhqfSP5POM52yB b384toBNBtiWij6PzfEBXSJX9GCcI6UVu1PjB53zVPEUdbPy2jOK+RedCEel91QLMTE2 PNWOdeqmz47aBgNEKD9IjbRvDasjxS777q62qDGgkAlScV+NYiHo73wy/z8PXqcD8ZHx rGsBMYD3CwR8Ync9AmeTz5X8KwiB/SPMScSQqs/i8DMijdOFnXkHJiYMNPi6hlsOrfUL oygsFBjGR0I8ZxCySw0GYy+FnicQenoSWoogAONPR6VGJvg1EbW3kxiZ+S6WfyKuYuzI dujw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742522300; x=1743127100; h=content-transfer-encoding:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to; bh=GGqOhVbhYbRp09iQ8MkomGhZ6WYASwULI1k3fzWO1To=; b=lzLWxJvyZ5mE4Ui5Bcog1hgEhbcPiaFDHYZQgoyNYmuxFKy+AX2atasttB28/oNJ7j eVpO+fdtfiK5+ngi4lz+bkFXI0ND2PDenSJB48Udaz/1HGSGLmO9KEOVR/78phpkHWVF LZyt+c2QF7/XewiApke8JCwZcNYB2ljNurJB/HmkSILUmUY0XOpfEtjRmO6BghG28rTo XMkeS8oXEJEoQin7iTHWfs9eMqo8kMYHTuzfk0w6RacJFt0t4y5mPSRHcYAkArOiyK06 X/r3fIPTnCOXhlHcLg2olUHKS9W78VsqsXSTgQA+NCsN/iK+HFm2VB+cBJfDSNUrfyo3 sgsw== X-Gm-Message-State: AOJu0YwfuQW4tyodKar4ExMdaAra9eQ2npsJcMYXvbPnDvRbY3Urybi0 rYUH0P37CDyV1ncAWmPL/ZnQJJmZBngE+CdMGRTSiRTU/1SoDADkEMVn6wT63bEnFkUQaaASN7D JaQ== X-Google-Smtp-Source: AGHT+IEGk4/ag7wItbxC5hY9A3Qv+9sMPGiy2A1c6kctOI6EBzYxep0n89spcU0PrQWe+aGsDAgI97wgwts= X-Received: from pjur6.prod.google.com ([2002:a17:90a:d406:b0:2ee:4a90:3d06]) (user=pandoh job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:38d0:b0:2fa:30e9:2051 with SMTP id 98e67ed59e1d1-301d42b3a2dmr8394844a91.5.1742522300062; Thu, 20 Mar 2025 18:58:20 -0700 (PDT) Date: Thu, 20 Mar 2025 18:58:00 -0700 In-Reply-To: <20250321015806.954866-1-pandoh@google.com> Precedence: bulk X-Mailing-List: linux-pci@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250321015806.954866-1-pandoh@google.com> X-Mailer: git-send-email 2.49.0.395.g12beb8f557-goog Message-ID: <20250321015806.954866-3-pandoh@google.com> Subject: [PATCH v5 2/8] PCI/AER: Make all pci_print_aer() log levels depend on error type From: Jon Pan-Doh To: Bjorn Helgaas , Karolina Stolarek Cc: linux-pci@vger.kernel.org, Martin Petersen , Ben Fuller , Drew Walton , Anil Agrawal , Tony Luck , " =?utf-8?q?Ilpo_J=C3=A4rvinen?= " , Sathyanarayanan Kuppuswamy , Lukas Wunner , Jonathan Cameron , Sargun Dhillon , "Paul E . McKenney" , Jon Pan-Doh From: Karolina Stolarek Some existing logs in pci_print_aer() log with error severity by default. Convert them to depend on error type (consistent with rest of AER logging). Signed-off-by: Karolina Stolarek Signed-off-by: Jon Pan-Doh Reported-by: Sargun Dhillon Acked-by: Paul E. McKenney Reviewed-by: Ilpo Järvinen Reviewed-by: Kuppuswamy Sathyanarayanan --- drivers/pci/pcie/aer.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/drivers/pci/pcie/aer.c b/drivers/pci/pcie/aer.c index 45629e1ea058..3116b4678081 100644 --- a/drivers/pci/pcie/aer.c +++ b/drivers/pci/pcie/aer.c @@ -784,14 +784,14 @@ void pci_print_aer(struct pci_dev *dev, int aer_severity, info.mask = mask; info.first_error = PCI_ERR_CAP_FEP(aer->cap_control); - pci_err(dev, "aer_status: 0x%08x, aer_mask: 0x%08x\n", status, mask); + aer_printk(level, dev, "aer_status: 0x%08x, aer_mask: 0x%08x\n", status, mask); __aer_print_error(dev, &info, level); - pci_err(dev, "aer_layer=%s, aer_agent=%s\n", - aer_error_layer[layer], aer_agent_string[agent]); + aer_printk(level, dev, "aer_layer=%s, aer_agent=%s\n", + aer_error_layer[layer], aer_agent_string[agent]); if (aer_severity != AER_CORRECTABLE) - pci_err(dev, "aer_uncor_severity: 0x%08x\n", - aer->uncor_severity); + aer_printk(level, dev, "aer_uncor_severity: 0x%08x\n", + aer->uncor_severity); if (tlp_header_valid) pcie_print_tlp_log(dev, &aer->header_log, dev_fmt(" ")); From patchwork Fri Mar 21 01:58:01 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Pan-Doh X-Patchwork-Id: 14024776 X-Patchwork-Delegate: bhelgaas@google.com Received: from mail-pj1-f73.google.com (mail-pj1-f73.google.com [209.85.216.73]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E777D1E0DBA for ; Fri, 21 Mar 2025 01:58:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742522306; cv=none; b=k0UA68UwByv8O4A8I1qRSWs/gLlzvNpR9V8bnjU2AcsZIgRDv5aFq7ztv7Gz6uup4idFbzP32dV0X8wBnZYm/dHB+PoCECsUa66KahynidTp/V6MnkGnznqPLYHs0tDzzIHXiHVbU3aVi7RvQ2iXalF4iKresLlEryFRErsaNio= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742522306; c=relaxed/simple; bh=dTbJMiOM8w8eTApIsT0zFZVI4R8afXrqoMJE/SCp08k=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=RwvZ81qIHR9UznIQmSBXdXptxz4YYI/KGthzPhOAZlH8MdAV8wtK6sBFbAMkb3EoiMDPHFOVSYzcXF7UJoBn909aOSAIoL29sG+dbg7x8McH4Ag2EOQrJGq744p1MVs9uW+RNiwAZ5sWs656AYF83m+PFDTfoxlQGyYMgsitD3I= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--pandoh.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=uJ2slKpt; arc=none smtp.client-ip=209.85.216.73 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--pandoh.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="uJ2slKpt" Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-2ff605a7a43so3673829a91.3 for ; Thu, 20 Mar 2025 18:58:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1742522303; x=1743127103; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=5o+H1+slcsM+kRAnO5vDiFeOSdTxVMfuQTpFrFusKP8=; b=uJ2slKpty7U+qCGHRqv/BiTkFZX19K/omtrHudyXKLGApaQBG1YEZzEMjHaJD+EP31 GqhJ1PuWZJpxSRFpCIoagCDbH7AIrE7FBVV1m8N59jgdbuiQXzD1BxJPG1mBEh3pBtBy lvZ1PF3BtRurEinXCO25uopWA33kVvkAx9KEq31cAehXUYiv6x0B+1ZIrmAh3NqzQgZh 7iVRGZTjT/lOQkg5yvTLtSQBiFU3VkGcAcIYg71/R3Qfe6nadREaEI+XQJtOUd8DuE6S epXFAIYuaaiLUI+afpSBUsazi/cgAfnOCzyrQc8m+I7RXjLnT2aZZHm9YWxiNlBEP+xb iTHw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742522303; x=1743127103; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=5o+H1+slcsM+kRAnO5vDiFeOSdTxVMfuQTpFrFusKP8=; b=QZWTfwJLlnae58ahxSk8OL3hFnFNY6jK6sEpRfU89O/mIhNRsIvRvA4XhZFYZ0rDlI iYh+wmJLQUt8zHai4q5bLkm68shmB0hr0HHS7bPE0AJ5V+KYh62V6FXnmYS2R1ds7Hzz 87HMfvUxbaPPRnAfD3t+FYAdFqiCKsOmVcePi9Z/kkCOM91Y42sCeBdNNJN4FtlxjeWu pGxq0Fv0jxhs3CTrZvD3t0WiTb810vKpEgojCEMPcIrcbRfc/f7gU+Gaf9f9i+/TlsAw ZqgUyYhOi7JzsKXgFJTlSS45CEs+A/rpCQm7vAUM1ocxYZtK13p43MoOo/Kpxc8SsXPv 2NEA== X-Gm-Message-State: AOJu0YxQXnE0FAp3rHI/uFBVupmtEpBsIhiYE4Dvqu55zHvnEd70uldl jeA+/QeVGmM5AkweikOtMIYFIFRLU6XJGcEfZD7ZJk4RYAGvCGMTkonoXq/WDjfAFfgOT88S77T 0Tg== X-Google-Smtp-Source: AGHT+IGilcyPCWNu864h2jEzpMYcvLo7bAWmF9h6hjnvT1Z817uL9EvDSbCLT5XwdmbKQHLLxfj8CGZErvY= X-Received: from pjbpq9.prod.google.com ([2002:a17:90b:3d89:b0:2fa:a101:755]) (user=pandoh job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:528b:b0:2fa:17dd:6afa with SMTP id 98e67ed59e1d1-3030feb1d3dmr2539113a91.17.1742522303169; Thu, 20 Mar 2025 18:58:23 -0700 (PDT) Date: Thu, 20 Mar 2025 18:58:01 -0700 In-Reply-To: <20250321015806.954866-1-pandoh@google.com> Precedence: bulk X-Mailing-List: linux-pci@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250321015806.954866-1-pandoh@google.com> X-Mailer: git-send-email 2.49.0.395.g12beb8f557-goog Message-ID: <20250321015806.954866-4-pandoh@google.com> Subject: [PATCH v5 3/8] PCI/AER: Move AER stat collection out of __aer_print_error() From: Jon Pan-Doh To: Bjorn Helgaas , Karolina Stolarek Cc: linux-pci@vger.kernel.org, Martin Petersen , Ben Fuller , Drew Walton , Anil Agrawal , Tony Luck , " =?utf-8?q?Ilpo_J=C3=A4rvinen?= " , Sathyanarayanan Kuppuswamy , Lukas Wunner , Jonathan Cameron , Sargun Dhillon , "Paul E . McKenney" , Jon Pan-Doh Decouple stat collection from internal AER print functions, so the ratelimit does not impact the error counters. The stats collection is no longer buried in nested functions, simplifying the function flow. AERs from ghes or cxl drivers are a minor exception. Stat collection occurs in pci_print_aer(), an external interface, as that is where aer_err_info is populated. Signed-off-by: Jon Pan-Doh Reported-by: Sargun Dhillon Acked-by: Paul E. McKenney --- drivers/pci/pci.h | 1 + drivers/pci/pcie/aer.c | 10 ++++++---- drivers/pci/pcie/dpc.c | 1 + 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h index 75985b96ecc1..9d63d32f041c 100644 --- a/drivers/pci/pci.h +++ b/drivers/pci/pci.h @@ -551,6 +551,7 @@ struct aer_err_info { }; int aer_get_device_error_info(struct pci_dev *dev, struct aer_err_info *info); +void pci_dev_aer_stats_incr(struct pci_dev *pdev, struct aer_err_info *info); void aer_print_error(struct pci_dev *dev, struct aer_err_info *info, const char *level); int pcie_read_tlp_log(struct pci_dev *dev, int where, int where2, diff --git a/drivers/pci/pcie/aer.c b/drivers/pci/pcie/aer.c index 3116b4678081..e5db1fdd8421 100644 --- a/drivers/pci/pcie/aer.c +++ b/drivers/pci/pcie/aer.c @@ -617,8 +617,7 @@ const struct attribute_group aer_stats_attr_group = { .is_visible = aer_stats_attrs_are_visible, }; -static void pci_dev_aer_stats_incr(struct pci_dev *pdev, - struct aer_err_info *info) +void pci_dev_aer_stats_incr(struct pci_dev *pdev, struct aer_err_info *info) { unsigned long status = info->status & ~info->mask; int i, max = -1; @@ -691,7 +690,6 @@ static void __aer_print_error(struct pci_dev *dev, aer_printk(level, dev, " [%2d] %-22s%s\n", i, errmsg, info->first_error == i ? " (First)" : ""); } - pci_dev_aer_stats_incr(dev, info); } void aer_print_error(struct pci_dev *dev, struct aer_err_info *info, @@ -784,6 +782,8 @@ void pci_print_aer(struct pci_dev *dev, int aer_severity, info.mask = mask; info.first_error = PCI_ERR_CAP_FEP(aer->cap_control); + pci_dev_aer_stats_incr(dev, &info); + aer_printk(level, dev, "aer_status: 0x%08x, aer_mask: 0x%08x\n", status, mask); __aer_print_error(dev, &info, level); aer_printk(level, dev, "aer_layer=%s, aer_agent=%s\n", @@ -1263,8 +1263,10 @@ static inline void aer_process_err_devices(struct aer_err_info *e_info, /* Report all before handle them, not to lost records by reset etc. */ for (i = 0; i < e_info->error_dev_num && e_info->dev[i]; i++) { - if (aer_get_device_error_info(e_info->dev[i], e_info)) + if (aer_get_device_error_info(e_info->dev[i], e_info)) { + pci_dev_aer_stats_incr(e_info->dev[i], e_info); aer_print_error(e_info->dev[i], e_info, level); + } } for (i = 0; i < e_info->error_dev_num && e_info->dev[i]; i++) { if (aer_get_device_error_info(e_info->dev[i], e_info)) diff --git a/drivers/pci/pcie/dpc.c b/drivers/pci/pcie/dpc.c index 9e4c9ac737a7..81cd6e8ff3a4 100644 --- a/drivers/pci/pcie/dpc.c +++ b/drivers/pci/pcie/dpc.c @@ -289,6 +289,7 @@ void dpc_process_error(struct pci_dev *pdev) else if (reason == PCI_EXP_DPC_STATUS_TRIGGER_RSN_UNCOR && dpc_get_aer_uncorrect_severity(pdev, &info) && aer_get_device_error_info(pdev, &info)) { + pci_dev_aer_stats_incr(pdev, &info); aer_print_error(pdev, &info, KERN_ERR); pci_aer_clear_nonfatal_status(pdev); pci_aer_clear_fatal_status(pdev); From patchwork Fri Mar 21 01:58:02 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Pan-Doh X-Patchwork-Id: 14024777 X-Patchwork-Delegate: bhelgaas@google.com Received: from mail-pj1-f74.google.com (mail-pj1-f74.google.com [209.85.216.74]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 91DF99461 for ; Fri, 21 Mar 2025 01:58:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742522309; cv=none; b=ZYZtP7psXJHo2C+De0KAfK87h8ltaBhixt8/x5t8fibAf80qGe8oGXpQLhtc82sniCAUJA9TMCJq6En4dd17mz2JZRCqiD0EmnBWBfeuN1d+U6HsKkPlnUMszrJcE+ShT7rhPnYDeOPAc52TMHUQxVvdaZ539tDZd7+cNNwhkUw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742522309; c=relaxed/simple; bh=n4iud0iTs3ti+9DTUS/fzRYy+lrK7xEU8OitWgZBH/M=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=L+wg1YDtW6n5C8Fe1Q1j6QmBE7yVSdrqbMVizaCrCUE8xJUbE/v743mcwd+BPuMwibXRJAeRkvNi+CeGAoc3EJIfOL+5TSMeoQKsG8J9HvFKCqwiE1FksvPLQS5iTTELHC/UgEnT/fyd76DWw92P+TqVCpRxXv2hKHMc/QtcXyE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--pandoh.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=AmExqWzF; arc=none smtp.client-ip=209.85.216.74 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--pandoh.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="AmExqWzF" Received: by mail-pj1-f74.google.com with SMTP id 98e67ed59e1d1-2ff854a2541so2246945a91.0 for ; Thu, 20 Mar 2025 18:58:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1742522306; x=1743127106; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=R8hwWNQ07sLMLFvkrCgP33Nv+kRi/W1sjysWfPlbkf0=; b=AmExqWzF4fGHJoMml0r66BDD0f6+zGdVhbf2FB1y5QgUtv/KpjEx/Ddf505Vrw1lZ2 RV+RstdLPYFb+LXYBcY5SS+raaz2+ixhhpOP71QI7ab+QGfRGYgkjlTyICfRBUjh4dV0 dm6gd6xP30yMNozI2SbPBcLR4k/A6Mhs/5ljVBPY70QlQN94CG+IFqlL8cXEN3UnwEgT /2OAKyeFWA9Ph71EzahjP7C7jm66HNNRNPFRp9CD/ad2HsTJyhEGnKWu5mxwWXe3Liry 3DzNCWv3a4bOMrYWGhkj3lFXJwCP7Ki4fzoGzBRSnf2zBOlTKkPOBnfjBcpvrCuvQyfL uXVw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742522306; x=1743127106; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=R8hwWNQ07sLMLFvkrCgP33Nv+kRi/W1sjysWfPlbkf0=; b=SiaJsvVSwCbEsskNeO4LjwT6M5FGbYInNYHySBPn3+n7oJLbAkpFgbTjjLolVMhyhw UHl3fDX3y6iI2AyW0BQCK3W9XKNM+5BsLB8BTVY/rW35bYiekScBRj06YKQgW2xNWRMk 0rs7BnJIxSsapx6EZW68H66r7sDQGhZAUw1x91hJD2irULbUQZ0YXp1y1J8O3tYBF/G/ NsD+ihPaadJi80cfnr6Gf3HD6iPTCFCyAHLI/hF0XMJmsZ4FmBVCvGj+I1mHuxJjD2Q0 9asurxtEBR66CGWRXmTRT8ncneXwH3wAinIDYDXGkLd86XZovii8eG0OSwxWFgbZm9hj Ldcw== X-Gm-Message-State: AOJu0YzjqYJ+8qpQUsnfoRi9+DwtgIredQCmtHiVjmMSj8xoTE5HbFgN ZXLM8VGznQLKcbmGCV3UkzFTkLePxUL4ApcKRFUzgIs7nxwPSZWDujYoeHyr/QVfH0oNDPaMI3u 0dw== X-Google-Smtp-Source: AGHT+IFV4Qnu7njkqEmJkPc551/MF4B61d9nnZf8CNgqRm3ak75Uqd98BpHSuS21FUWXsEk4xWjupK8Y3EU= X-Received: from pjl4.prod.google.com ([2002:a17:90b:2f84:b0:2fc:2f33:e07d]) (user=pandoh job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:2641:b0:2ff:7331:18bc with SMTP id 98e67ed59e1d1-3030ff10899mr2036372a91.26.1742522305896; Thu, 20 Mar 2025 18:58:25 -0700 (PDT) Date: Thu, 20 Mar 2025 18:58:02 -0700 In-Reply-To: <20250321015806.954866-1-pandoh@google.com> Precedence: bulk X-Mailing-List: linux-pci@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250321015806.954866-1-pandoh@google.com> X-Mailer: git-send-email 2.49.0.395.g12beb8f557-goog Message-ID: <20250321015806.954866-5-pandoh@google.com> Subject: [PATCH v5 4/8] PCI/AER: Rename aer_print_port_info() to aer_printrp_info() From: Jon Pan-Doh To: Bjorn Helgaas , Karolina Stolarek Cc: linux-pci@vger.kernel.org, Martin Petersen , Ben Fuller , Drew Walton , Anil Agrawal , Tony Luck , " =?utf-8?q?Ilpo_J=C3=A4rvinen?= " , Sathyanarayanan Kuppuswamy , Lukas Wunner , Jonathan Cameron , Sargun Dhillon , "Paul E . McKenney" , Jon Pan-Doh Update function/param names to be more descriptive. This is a preparatory patch for when source devices are iterated through to institue rate limits. Signed-off-by: Jon Pan-Doh Reported-by: Sargun Dhillon --- drivers/pci/pcie/aer.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/drivers/pci/pcie/aer.c b/drivers/pci/pcie/aer.c index e5db1fdd8421..3c63a6963608 100644 --- a/drivers/pci/pcie/aer.c +++ b/drivers/pci/pcie/aer.c @@ -727,15 +727,15 @@ void aer_print_error(struct pci_dev *dev, struct aer_err_info *info, info->severity, info->tlp_header_valid, &info->tlp); } -static void aer_print_port_info(struct pci_dev *dev, struct aer_err_info *info) +static void aer_print_rp_info(struct pci_dev *rp, struct aer_err_info *info) { u8 bus = info->id >> 8; u8 devfn = info->id & 0xff; - pci_info(dev, "%s%s error message received from %04x:%02x:%02x.%d\n", + pci_info(rp, "%s%s error message received from %04x:%02x:%02x.%d\n", info->multi_error_valid ? "Multiple " : "", aer_error_severity_string[info->severity], - pci_domain_nr(dev->bus), bus, PCI_SLOT(devfn), + pci_domain_nr(rp->bus), bus, PCI_SLOT(devfn), PCI_FUNC(devfn)); } @@ -1299,7 +1299,7 @@ static void aer_isr_one_error(struct aer_rpc *rpc, e_info.multi_error_valid = 1; else e_info.multi_error_valid = 0; - aer_print_port_info(pdev, &e_info); + aer_print_rp_info(pdev, &e_info); if (find_source_device(pdev, &e_info)) aer_process_err_devices(&e_info, KERN_WARNING); @@ -1318,7 +1318,7 @@ static void aer_isr_one_error(struct aer_rpc *rpc, else e_info.multi_error_valid = 0; - aer_print_port_info(pdev, &e_info); + aer_print_rp_info(pdev, &e_info); if (find_source_device(pdev, &e_info)) aer_process_err_devices(&e_info, KERN_ERR); From patchwork Fri Mar 21 01:58:03 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Pan-Doh X-Patchwork-Id: 14024778 X-Patchwork-Delegate: bhelgaas@google.com Received: from mail-pj1-f74.google.com (mail-pj1-f74.google.com [209.85.216.74]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5AAD51E0DE3 for ; Fri, 21 Mar 2025 01:58:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742522312; cv=none; b=N1Vi/HqJDUEM7Xd1rNFCdhvWWkwWKw9mZLAzFfXKRHaiXrtnsA1G30YMsDqKZAc37jJ4kq+UR2iB5NPgCMzbomfsGjizfEJ+n3NgsAZkfJL9XiD4LoIJmS44qFz8o2uAKOKE4e6CFI/IoOsadr5AVTtwC0BlU4K2O6BQSpgb5nw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742522312; c=relaxed/simple; bh=eBDlw3kYxKBsIrrLfYRs4hkA241Bq3t/M760Hvx7rhk=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=FHO89i8u9NDDKB5UFrdW8Rt+ewA6xQ8OahzMHpEvmMm+x9VtXht6v3LraUlNlMeKfzVD4+v5hY1gAdx9hfiUlGjJNJGFTQf9SQGM91qClod0C4cHPPDXkQeC+7KFI2+41bB/RewDALnVw1Fbpzwdvex8XhXCFucyYhePFL5S8Z8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--pandoh.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=KNXzMXxj; arc=none smtp.client-ip=209.85.216.74 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--pandoh.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="KNXzMXxj" Received: by mail-pj1-f74.google.com with SMTP id 98e67ed59e1d1-2ff6aaa18e8so2145078a91.1 for ; Thu, 20 Mar 2025 18:58:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1742522308; x=1743127108; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=rSlDRCpgl37U9figS6TqEc6twssN3tdNNFoHohbnql0=; b=KNXzMXxjel8hMfBhn6QcKXqXziqTyiupKgepXc3aJtJqTEu4JjU1SlG6Tj0HMa9i58 obiEuyiSUHJ/jLnuUhuSbm6fTy1tCimifsVEaBZ5ZHR/uFH+IvpmJiWfQq+lyiBnalE5 LQzTCtiUoG7B9vvcns80IrvOh/ZQ9WT21la1PPF+oCum5KrLmW8jTGri03nAp92wd99K TGke3Q0iBI1THOWTRdvpUh4d4wAqjZR6z8C+0g66qkDQhqbw3T2za2JO3ITEf/d89Tyh VMKxiWLvxgr/oL+YQnhDIh85nUkqsxlNvYOhSDzwdDyBzdb7xMQIf5ErhOsZFb9g1ze5 oZVQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742522308; x=1743127108; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=rSlDRCpgl37U9figS6TqEc6twssN3tdNNFoHohbnql0=; b=VIDtBCMBcKBK881qC4uyIO9yiFhQAUdE9RPMatoexoESh3/pOKKYeF2VPj3p+UgmRK qDZlnPeMUsnAyif3Fqbcm33HsTIPgSxro2bBM2gSpPS94L9qp9qKqwO/g0BhTJmpuXX6 xb+iY0CGQsj71CmUCp0ygF3Lh9J659L6mH12Elbc6Kzn8gWQI9ZyC8YGF5OJA+BIf54z lDx76cYgyeEWl23mXoVb2XrvgPlxFK262cwzi5gs6JjPzWqaKYq2rHAX5136ldweTDOJ GzeKZ4gRj/KMg0wq+wGeS3OlPmNYqoL/O7W9CIsY2+HP1ZouctOezKz/Wx+xK3LSiPJO zGNA== X-Gm-Message-State: AOJu0Ywakknxzm5olR8q/7SUG0DwWC4FbkCtrlmrteCPi2DhyDWU98WG vircWuCLW51NSXcqchdpURd9ydWwdXDeFWq5j2Tj6We9kJ6ZrcW+zY/41EgRGyY9eRutvWRoemM jhg== X-Google-Smtp-Source: AGHT+IHk5Z2jgxcqta/SZb+1nluywN8KlkoF4GjKvueD2//+gFmaBcTddVKcDcp9+ykg1z+1s3QBGHHOkPw= X-Received: from pjbee11.prod.google.com ([2002:a17:90a:fc4b:b0:2ea:46ed:5d3b]) (user=pandoh job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:2ed0:b0:2fe:b470:dde4 with SMTP id 98e67ed59e1d1-3030fe8bcb9mr2785653a91.12.1742522308600; Thu, 20 Mar 2025 18:58:28 -0700 (PDT) Date: Thu, 20 Mar 2025 18:58:03 -0700 In-Reply-To: <20250321015806.954866-1-pandoh@google.com> Precedence: bulk X-Mailing-List: linux-pci@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250321015806.954866-1-pandoh@google.com> X-Mailer: git-send-email 2.49.0.395.g12beb8f557-goog Message-ID: <20250321015806.954866-6-pandoh@google.com> Subject: [PATCH v5 5/8] PCI/AER: Rename struct aer_stats to aer_report From: Jon Pan-Doh To: Bjorn Helgaas , Karolina Stolarek Cc: linux-pci@vger.kernel.org, Martin Petersen , Ben Fuller , Drew Walton , Anil Agrawal , Tony Luck , " =?utf-8?q?Ilpo_J=C3=A4rvinen?= " , Sathyanarayanan Kuppuswamy , Lukas Wunner , Jonathan Cameron , Sargun Dhillon , "Paul E . McKenney" , Jon Pan-Doh Update name to reflect the broader definition of structs/variables that are stored (e.g. ratelimits). This is a preparatory patch for adding rate limit support. Signed-off-by: Karolina Stolarek Signed-off-by: Jon Pan-Doh Reported-by: Sargun Dhillon Acked-by: Paul E. McKenney Reviewed-by: Karolina Stolarek --- drivers/pci/pcie/aer.c | 50 +++++++++++++++++++++--------------------- include/linux/pci.h | 2 +- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/drivers/pci/pcie/aer.c b/drivers/pci/pcie/aer.c index 3c63a6963608..f657edca8769 100644 --- a/drivers/pci/pcie/aer.c +++ b/drivers/pci/pcie/aer.c @@ -54,11 +54,11 @@ struct aer_rpc { DECLARE_KFIFO(aer_fifo, struct aer_err_source, AER_ERROR_SOURCES_MAX); }; -/* AER stats for the device */ -struct aer_stats { +/* AER report for the device */ +struct aer_report { /* - * Fields for all AER capable devices. They indicate the errors + * Stats for all AER capable devices. They indicate the errors * "as seen by this device". Note that this may mean that if an * end point is causing problems, the AER counters may increment * at its link partner (e.g. root port) because the errors will be @@ -80,7 +80,7 @@ struct aer_stats { u64 dev_total_nonfatal_errs; /* - * Fields for Root ports & root complex event collectors only, these + * Stats for Root ports & root complex event collectors only, these * indicate the total number of ERR_COR, ERR_FATAL, and ERR_NONFATAL * messages received by the root port / event collector, INCLUDING the * ones that are generated internally (by the rootport itself) @@ -377,7 +377,7 @@ void pci_aer_init(struct pci_dev *dev) if (!dev->aer_cap) return; - dev->aer_stats = kzalloc(sizeof(struct aer_stats), GFP_KERNEL); + dev->aer_report = kzalloc(sizeof(*dev->aer_report), GFP_KERNEL); /* * We save/restore PCI_ERR_UNCOR_MASK, PCI_ERR_UNCOR_SEVER, @@ -398,8 +398,8 @@ void pci_aer_init(struct pci_dev *dev) void pci_aer_exit(struct pci_dev *dev) { - kfree(dev->aer_stats); - dev->aer_stats = NULL; + kfree(dev->aer_report); + dev->aer_report = NULL; } #define AER_AGENT_RECEIVER 0 @@ -537,10 +537,10 @@ static const char *aer_agent_string[] = { { \ unsigned int i; \ struct pci_dev *pdev = to_pci_dev(dev); \ - u64 *stats = pdev->aer_stats->stats_array; \ + u64 *stats = pdev->aer_report->stats_array; \ size_t len = 0; \ \ - for (i = 0; i < ARRAY_SIZE(pdev->aer_stats->stats_array); i++) {\ + for (i = 0; i < ARRAY_SIZE(pdev->aer_report->stats_array); i++) {\ if (strings_array[i]) \ len += sysfs_emit_at(buf, len, "%s %llu\n", \ strings_array[i], \ @@ -551,7 +551,7 @@ static const char *aer_agent_string[] = { i, stats[i]); \ } \ len += sysfs_emit_at(buf, len, "TOTAL_%s %llu\n", total_string, \ - pdev->aer_stats->total_field); \ + pdev->aer_report->total_field); \ return len; \ } \ static DEVICE_ATTR_RO(name) @@ -572,7 +572,7 @@ aer_stats_dev_attr(aer_dev_nonfatal, dev_nonfatal_errs, char *buf) \ { \ struct pci_dev *pdev = to_pci_dev(dev); \ - return sysfs_emit(buf, "%llu\n", pdev->aer_stats->field); \ + return sysfs_emit(buf, "%llu\n", pdev->aer_report->field); \ } \ static DEVICE_ATTR_RO(name) @@ -599,7 +599,7 @@ static umode_t aer_stats_attrs_are_visible(struct kobject *kobj, struct device *dev = kobj_to_dev(kobj); struct pci_dev *pdev = to_pci_dev(dev); - if (!pdev->aer_stats) + if (!pdev->aer_report) return 0; if ((a == &dev_attr_aer_rootport_total_err_cor.attr || @@ -622,25 +622,25 @@ void pci_dev_aer_stats_incr(struct pci_dev *pdev, struct aer_err_info *info) unsigned long status = info->status & ~info->mask; int i, max = -1; u64 *counter = NULL; - struct aer_stats *aer_stats = pdev->aer_stats; + struct aer_report *aer_report = pdev->aer_report; - if (!aer_stats) + if (!aer_report) return; switch (info->severity) { case AER_CORRECTABLE: - aer_stats->dev_total_cor_errs++; - counter = &aer_stats->dev_cor_errs[0]; + aer_report->dev_total_cor_errs++; + counter = &aer_report->dev_cor_errs[0]; max = AER_MAX_TYPEOF_COR_ERRS; break; case AER_NONFATAL: - aer_stats->dev_total_nonfatal_errs++; - counter = &aer_stats->dev_nonfatal_errs[0]; + aer_report->dev_total_nonfatal_errs++; + counter = &aer_report->dev_nonfatal_errs[0]; max = AER_MAX_TYPEOF_UNCOR_ERRS; break; case AER_FATAL: - aer_stats->dev_total_fatal_errs++; - counter = &aer_stats->dev_fatal_errs[0]; + aer_report->dev_total_fatal_errs++; + counter = &aer_report->dev_fatal_errs[0]; max = AER_MAX_TYPEOF_UNCOR_ERRS; break; } @@ -652,19 +652,19 @@ void pci_dev_aer_stats_incr(struct pci_dev *pdev, struct aer_err_info *info) static void pci_rootport_aer_stats_incr(struct pci_dev *pdev, struct aer_err_source *e_src) { - struct aer_stats *aer_stats = pdev->aer_stats; + struct aer_report *aer_report = pdev->aer_report; - if (!aer_stats) + if (!aer_report) return; if (e_src->status & PCI_ERR_ROOT_COR_RCV) - aer_stats->rootport_total_cor_errs++; + aer_report->rootport_total_cor_errs++; if (e_src->status & PCI_ERR_ROOT_UNCOR_RCV) { if (e_src->status & PCI_ERR_ROOT_FATAL_RCV) - aer_stats->rootport_total_fatal_errs++; + aer_report->rootport_total_fatal_errs++; else - aer_stats->rootport_total_nonfatal_errs++; + aer_report->rootport_total_nonfatal_errs++; } } diff --git a/include/linux/pci.h b/include/linux/pci.h index e4bf67bf8172..900edb6f8f62 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h @@ -346,7 +346,7 @@ struct pci_dev { u8 hdr_type; /* PCI header type (`multi' flag masked out) */ #ifdef CONFIG_PCIEAER u16 aer_cap; /* AER capability offset */ - struct aer_stats *aer_stats; /* AER stats for this device */ + struct aer_report *aer_report; /* AER report for this device */ #endif #ifdef CONFIG_PCIEPORTBUS struct rcec_ea *rcec_ea; /* RCEC cached endpoint association */ From patchwork Fri Mar 21 01:58:04 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Pan-Doh X-Patchwork-Id: 14024779 X-Patchwork-Delegate: bhelgaas@google.com Received: from mail-pl1-f201.google.com (mail-pl1-f201.google.com [209.85.214.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6E13F9461 for ; Fri, 21 Mar 2025 01:58:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742522314; cv=none; b=eIjXHKl19A1UJe2ifrFs4vWvTxfoEaa8aQ2aeG0nZnyFdneF6uBm5BOaiR0ztJIdWYEhv4EIYcAAdylZ6LBRHlV8+EgPIxX5OdbxcX1wR4dcCAS/CuQKu0xR3N8gonZzPcXHr542g9sFrwJ40IatLolD9kwIme/zG24bE1ey0s0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742522314; c=relaxed/simple; bh=Dv0OrT1aOp/AiyKeGrJdOxYHIy8emc6M//R/VqR35jo=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=CJ+kimg1E9/nmxwkdbQxKXRz4cdeu2FGgAzuy+FwiFrqSjpQ4UKbUP1Gk3ZwzqnD0J6yyS0FaMMTfyOC3m46Qo3x3m5SZ5/AAt73QBPcO+j4ejD9j86hM8XhiuDL8InpPiL90qvN3dNk7CK/BAGQ+RnKidDE9Vi0bBQJt8nOSg4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--pandoh.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=PlYoWdFi; arc=none smtp.client-ip=209.85.214.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--pandoh.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="PlYoWdFi" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-2265a09dbfcso37777235ad.0 for ; Thu, 20 Mar 2025 18:58:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1742522311; x=1743127111; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=IT7oOIT1hV+oLCjRgsylPtWxCIwotQg+2TsJM4XByJk=; b=PlYoWdFi7pf5AbcskCbUXjlciSaAj/m2qd/VA2sgfX+z+ykFTqPX73dYZ6XGNXe7NP AKau6VOQ02rcMrJIPMk6GlfLN9AtEXdnvFaoL8jOZotO3Jo5/3+UOkyIRZsT7GWbJlGT 6r282yOnphxJQ4RYSgZCsBKjd/uwPg+GqLGXDT/lYt4Sz/Ks7kW2Jw4om5SKEgyx3t9L V/Aey7dC0TpYMVlzv9Pn2duBEB/4XrUPdHt3eUPriBuYoLssepENR9RUzC/EtX59baaE Qqa/2aFN6bB4rsk/Kxa4F1Eb/4xIXcMWMrck9adamtOTPCzE9js6tS5Oibe/wp6Vnhm+ +9VQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742522311; x=1743127111; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=IT7oOIT1hV+oLCjRgsylPtWxCIwotQg+2TsJM4XByJk=; b=qYKBvxiy5Fyax6ieHpxu27VLuU9d6wT4LPNLoe/IgXEyR2j5VbnocwYSxFkh3F7sg/ Dmlf7jwEiScMK9G8i/gdL/WUrtcFDyWkbviU7388n78ZNl2YQldiq2xKPIodMOiApXW2 13yDefGe/DYrInR6iKFk5CYL5Ke58YSoTygMqc2stGjtnbrW9Va1XsI5si/dWz4sF1Z8 pfM/bYKB94gIt0gahYR7/kRUTdYZOBlX5Jlp2qmnaAG1QFxzMAfhg9LiqEZOYHR5VT3r GauLqAkCBtGcZH2PIR3JntWmGlCDom3VNfh8mHiF/BI8XrZ4fVM38aZQX3sthl6ZwhUF +Tew== X-Gm-Message-State: AOJu0Yz6Onb74PVBe92l3D61jjr0N09kMZIlmVHmW7u5H8cYCJ2+s95g hzA95QaxH6M4KbGtOzPD6Rz35HvnuJmuo/UUGZvWL6EyTxq/JF9EOtfmXoxH+xyuxxLZZlzdvki bfg== X-Google-Smtp-Source: AGHT+IHe+RHDLdx0PBYYg/Fnx/HxJfWs7d2gEk6Z04w/el2dAKqaJqQ/8mXWdx3UoU3YfxP15GppmbUq7RY= X-Received: from pfbna38.prod.google.com ([2002:a05:6a00:3e26:b0:736:a70b:53c7]) (user=pandoh job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:e84d:b0:21f:164d:93fe with SMTP id d9443c01a7336-22780e25e01mr20969205ad.53.1742522310836; Thu, 20 Mar 2025 18:58:30 -0700 (PDT) Date: Thu, 20 Mar 2025 18:58:04 -0700 In-Reply-To: <20250321015806.954866-1-pandoh@google.com> Precedence: bulk X-Mailing-List: linux-pci@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250321015806.954866-1-pandoh@google.com> X-Mailer: git-send-email 2.49.0.395.g12beb8f557-goog Message-ID: <20250321015806.954866-7-pandoh@google.com> Subject: [PATCH v5 6/8] PCI/AER: Introduce ratelimit for error logs From: Jon Pan-Doh To: Bjorn Helgaas , Karolina Stolarek Cc: linux-pci@vger.kernel.org, Martin Petersen , Ben Fuller , Drew Walton , Anil Agrawal , Tony Luck , " =?utf-8?q?Ilpo_J=C3=A4rvinen?= " , Sathyanarayanan Kuppuswamy , Lukas Wunner , Jonathan Cameron , Sargun Dhillon , "Paul E . McKenney" , Jon Pan-Doh Spammy devices can flood kernel logs with AER errors and slow/stall execution. Add per-device ratelimits for AER correctable and uncorrectable errors that use the kernel defaults (10 per 5s). Tested using aer-inject[1]. Sent 11 AER errors. Observed 10 errors logged while AER stats (cat /sys/bus/pci/devices//aer_dev_correctable) show true count of 11. [1] https://git.kernel.org/pub/scm/linux/kernel/git/gong.chen/aer-inject.git Signed-off-by: Jon Pan-Doh Reported-by: Sargun Dhillon Acked-by: Paul E. McKenney --- drivers/pci/pci.h | 4 +- drivers/pci/pcie/aer.c | 87 ++++++++++++++++++++++++++++++++---------- drivers/pci/pcie/dpc.c | 2 +- 3 files changed, 71 insertions(+), 22 deletions(-) diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h index 9d63d32f041c..f709290e9e00 100644 --- a/drivers/pci/pci.h +++ b/drivers/pci/pci.h @@ -533,6 +533,7 @@ static inline bool pci_dev_test_and_set_removed(struct pci_dev *dev) struct aer_err_info { struct pci_dev *dev[AER_MAX_MULTI_ERR_DEVICES]; + bool ratelimited[AER_MAX_MULTI_ERR_DEVICES]; int error_dev_num; unsigned int id:16; @@ -552,7 +553,8 @@ struct aer_err_info { int aer_get_device_error_info(struct pci_dev *dev, struct aer_err_info *info); void pci_dev_aer_stats_incr(struct pci_dev *pdev, struct aer_err_info *info); -void aer_print_error(struct pci_dev *dev, struct aer_err_info *info, const char *level); +void aer_print_error(struct pci_dev *dev, struct aer_err_info *info, + const char *level, bool ratelimited); int pcie_read_tlp_log(struct pci_dev *dev, int where, int where2, unsigned int tlp_len, bool flit, diff --git a/drivers/pci/pcie/aer.c b/drivers/pci/pcie/aer.c index f657edca8769..e0f526960134 100644 --- a/drivers/pci/pcie/aer.c +++ b/drivers/pci/pcie/aer.c @@ -28,6 +28,7 @@ #include #include #include +#include #include #include #include @@ -88,6 +89,10 @@ struct aer_report { u64 rootport_total_cor_errs; u64 rootport_total_fatal_errs; u64 rootport_total_nonfatal_errs; + + /* Ratelimits for errors */ + struct ratelimit_state cor_log_ratelimit; + struct ratelimit_state uncor_log_ratelimit; }; #define AER_LOG_TLP_MASKS (PCI_ERR_UNC_POISON_TLP| \ @@ -379,6 +384,11 @@ void pci_aer_init(struct pci_dev *dev) dev->aer_report = kzalloc(sizeof(*dev->aer_report), GFP_KERNEL); + ratelimit_state_init(&dev->aer_report->cor_log_ratelimit, + DEFAULT_RATELIMIT_INTERVAL, DEFAULT_RATELIMIT_BURST); + ratelimit_state_init(&dev->aer_report->uncor_log_ratelimit, + DEFAULT_RATELIMIT_INTERVAL, DEFAULT_RATELIMIT_BURST); + /* * We save/restore PCI_ERR_UNCOR_MASK, PCI_ERR_UNCOR_SEVER, * PCI_ERR_COR_MASK, and PCI_ERR_CAP. Root and Root Complex Event @@ -668,6 +678,18 @@ static void pci_rootport_aer_stats_incr(struct pci_dev *pdev, } } +static bool aer_ratelimited(struct pci_dev *dev, unsigned int severity) +{ + struct ratelimit_state *ratelimit; + + if (severity == AER_CORRECTABLE) + ratelimit = &dev->aer_report->cor_log_ratelimit; + else + ratelimit = &dev->aer_report->uncor_log_ratelimit; + + return !__ratelimit(ratelimit); +} + static void __aer_print_error(struct pci_dev *dev, struct aer_err_info *info, const char *level) @@ -693,11 +715,17 @@ static void __aer_print_error(struct pci_dev *dev, } void aer_print_error(struct pci_dev *dev, struct aer_err_info *info, - const char *level) + const char *level, bool ratelimited) { int layer, agent; int id = pci_dev_id(dev); + trace_aer_event(dev_name(&dev->dev), (info->status & ~info->mask), + info->severity, info->tlp_header_valid, &info->tlp); + + if (ratelimited) + return; + if (!info->status) { pci_err(dev, "PCIe Bus Error: severity=%s, type=Inaccessible, (Unregistered Agent ID)\n", aer_error_severity_string[info->severity]); @@ -722,21 +750,31 @@ void aer_print_error(struct pci_dev *dev, struct aer_err_info *info, out: if (info->id && info->error_dev_num > 1 && info->id == id) pci_err(dev, " Error of this Agent is reported first\n"); - - trace_aer_event(dev_name(&dev->dev), (info->status & ~info->mask), - info->severity, info->tlp_header_valid, &info->tlp); } static void aer_print_rp_info(struct pci_dev *rp, struct aer_err_info *info) { u8 bus = info->id >> 8; u8 devfn = info->id & 0xff; + struct pci_dev *dev; + bool ratelimited = false; + int i; - pci_info(rp, "%s%s error message received from %04x:%02x:%02x.%d\n", - info->multi_error_valid ? "Multiple " : "", - aer_error_severity_string[info->severity], - pci_domain_nr(rp->bus), bus, PCI_SLOT(devfn), - PCI_FUNC(devfn)); + /* extract endpoint device ratelimit */ + for (i = 0; i < info->error_dev_num; i++) { + dev = info->dev[i]; + if (info->id == pci_dev_id(dev)) { + ratelimited = info->ratelimited[i]; + break; + } + } + + if (!ratelimited) + pci_info(rp, "%s%s error message received from %04x:%02x:%02x.%d\n", + info->multi_error_valid ? "Multiple " : "", + aer_error_severity_string[info->severity], + pci_domain_nr(rp->bus), bus, PCI_SLOT(devfn), + PCI_FUNC(devfn)); } #ifdef CONFIG_ACPI_APEI_PCIEAER @@ -784,6 +822,12 @@ void pci_print_aer(struct pci_dev *dev, int aer_severity, pci_dev_aer_stats_incr(dev, &info); + trace_aer_event(dev_name(&dev->dev), (status & ~mask), + aer_severity, tlp_header_valid, &aer->header_log); + + if (aer_ratelimited(dev, aer_severity)) + return; + aer_printk(level, dev, "aer_status: 0x%08x, aer_mask: 0x%08x\n", status, mask); __aer_print_error(dev, &info, level); aer_printk(level, dev, "aer_layer=%s, aer_agent=%s\n", @@ -795,9 +839,6 @@ void pci_print_aer(struct pci_dev *dev, int aer_severity, if (tlp_header_valid) pcie_print_tlp_log(dev, &aer->header_log, dev_fmt(" ")); - - trace_aer_event(dev_name(&dev->dev), (status & ~mask), - aer_severity, tlp_header_valid, &aer->header_log); } EXPORT_SYMBOL_NS_GPL(pci_print_aer, "CXL"); @@ -808,8 +849,12 @@ EXPORT_SYMBOL_NS_GPL(pci_print_aer, "CXL"); */ static int add_error_device(struct aer_err_info *e_info, struct pci_dev *dev) { - if (e_info->error_dev_num < AER_MAX_MULTI_ERR_DEVICES) { - e_info->dev[e_info->error_dev_num] = pci_dev_get(dev); + int dev_idx = e_info->error_dev_num; + unsigned int severity = e_info->severity; + + if (dev_idx < AER_MAX_MULTI_ERR_DEVICES) { + e_info->dev[dev_idx] = pci_dev_get(dev); + e_info->ratelimited[dev_idx] = aer_ratelimited(dev, severity); e_info->error_dev_num++; return 0; } @@ -1265,7 +1310,8 @@ static inline void aer_process_err_devices(struct aer_err_info *e_info, for (i = 0; i < e_info->error_dev_num && e_info->dev[i]; i++) { if (aer_get_device_error_info(e_info->dev[i], e_info)) { pci_dev_aer_stats_incr(e_info->dev[i], e_info); - aer_print_error(e_info->dev[i], e_info, level); + aer_print_error(e_info->dev[i], e_info, level, + e_info->ratelimited[i]); } } for (i = 0; i < e_info->error_dev_num && e_info->dev[i]; i++) { @@ -1299,10 +1345,11 @@ static void aer_isr_one_error(struct aer_rpc *rpc, e_info.multi_error_valid = 1; else e_info.multi_error_valid = 0; - aer_print_rp_info(pdev, &e_info); - if (find_source_device(pdev, &e_info)) + if (find_source_device(pdev, &e_info)) { + aer_print_rp_info(pdev, &e_info); aer_process_err_devices(&e_info, KERN_WARNING); + } } if (e_src->status & PCI_ERR_ROOT_UNCOR_RCV) { @@ -1318,10 +1365,10 @@ static void aer_isr_one_error(struct aer_rpc *rpc, else e_info.multi_error_valid = 0; - aer_print_rp_info(pdev, &e_info); - - if (find_source_device(pdev, &e_info)) + if (find_source_device(pdev, &e_info)) { + aer_print_rp_info(pdev, &e_info); aer_process_err_devices(&e_info, KERN_ERR); + } } } diff --git a/drivers/pci/pcie/dpc.c b/drivers/pci/pcie/dpc.c index 81cd6e8ff3a4..42a36df4a651 100644 --- a/drivers/pci/pcie/dpc.c +++ b/drivers/pci/pcie/dpc.c @@ -290,7 +290,7 @@ void dpc_process_error(struct pci_dev *pdev) dpc_get_aer_uncorrect_severity(pdev, &info) && aer_get_device_error_info(pdev, &info)) { pci_dev_aer_stats_incr(pdev, &info); - aer_print_error(pdev, &info, KERN_ERR); + aer_print_error(pdev, &info, KERN_ERR, false); pci_aer_clear_nonfatal_status(pdev); pci_aer_clear_fatal_status(pdev); } From patchwork Fri Mar 21 01:58:05 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Pan-Doh X-Patchwork-Id: 14024780 X-Patchwork-Delegate: bhelgaas@google.com Received: from mail-pl1-f202.google.com (mail-pl1-f202.google.com [209.85.214.202]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1DF521DFD95 for ; Fri, 21 Mar 2025 01:58:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742522317; cv=none; b=RrFD1GaiZcYlF31RE/b0gjNXQZewnUyzFuVlSoEXH7Z8R65VAKsLRnJtp8qwhI/gZp80DCeRlVt5B9e0U9uS1AHLl573EaoW8wcpnJkVL7ytpJfmA9N6Jbfa5fJ/Nfn5HN28JqWd918F2MtJHFrd8mCtjIOna+X3HtYIx/3Yjjw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742522317; c=relaxed/simple; bh=9XedSuAs+PcMxam+6jM/ZI9aC4u/aia2p6UH/CBQFto=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=UhVqpQgylD6miMq/eHI0KhURWL83Ge5YWnT0ZeAe03VT1IfRc+z8PUbmn98ATqTrPTJV+uM6LEbXeXZV1ZFl6gbEhagPKd6NSFkoLzC7VhhxuUZjyoiM23lf53+qAuclP0uMVohGAmTbnTxDRgXRp1/Rj5cp6VValet60aWKBtE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--pandoh.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=J11HKGsE; arc=none smtp.client-ip=209.85.214.202 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--pandoh.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="J11HKGsE" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-2233b764fc8so22244005ad.3 for ; Thu, 20 Mar 2025 18:58:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1742522313; x=1743127113; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=dkyXCP/lPdH8yGr8EWVQ+s8St28L9FhUSKnHg2FvWac=; b=J11HKGsEVF8tzsEz3t3CfrTKXDcG/wWgQ51lyJetH7rqYLLuLMZ6nZjbQ13dYevYqB ekmnuQxn9qY7dbYE+EXK0RpdVwsbPWgKdP9Ctw2yzlFdNyrwlMLUd6lPsY3Hk3pnNlGD cBdJ3FEzq1/1jD1QfmVoKqsNqn1D72MIGMXp6Q9mTTXy9jhUedGhLLue7kLNEVSh+1Tg bQhKGatIPj8si+MybJ6MewHfWDRRKY2LrGA1KavBMJNc60dxxecYqDNmJjJQJBPhgiCd GwTe2+9nmjFZEubXEEEWkeLVZkkOU3Gv4n3mHqljQTNRfRV1S+mxruHj19XOOCP/hIYc Bslg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742522313; x=1743127113; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=dkyXCP/lPdH8yGr8EWVQ+s8St28L9FhUSKnHg2FvWac=; b=qV4wUJbrVcxBBy0NPbZuuV/Q2Qlj5lRDB9++YJl+kgvVjhTYdYzGlxrGPpPv5zxdAp pvZ7NS+vaJyA45VkXhE4cXfFJxLJkgmyfwovtwpWViozxDQkeEgb0ocO8945UQdsWoz2 kzZALy8HMVoiXUShzYTHnE8DvCbODhKU+XZQ6EQNxdVRBbysZc38A6mxRPxaUP8+wqbf Y+xPZKArH3LpF2bZzbTJsXZdYRvRhlxLBudN+gmiZMeOTsr/xlNNW1t43YW9cToQYLxS O58aZmJyhmfnjwJInVx54ATJ/fMgD9FjDgNodeZOrEHl4XWcfUCDkk7kUbbyABAWhSRQ 1IAg== X-Gm-Message-State: AOJu0Yy9RXSnlrHJMYDACYc50K0UscRWbgWyO6mRSxJmQmQ7DcTZNOjp LMpUeysQqy2H8eozhlfIJ6APU1xJ4anlom3zKkRXkixac1bcfTp7gQFCIRERHnBRLva5bOT3Ofd gog== X-Google-Smtp-Source: AGHT+IFCdeu6Fz8xHwUpBmkSIe2ywyMCjM/6AiMtqN8xK5e/csPHNiTk/3gabtv+u2i45cmrXMlHNAfnES8= X-Received: from plcn1.prod.google.com ([2002:a17:902:d2c1:b0:223:52c5:17f6]) (user=pandoh job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:2cb:b0:221:78a1:27fb with SMTP id d9443c01a7336-22780c50872mr26811545ad.11.1742522313376; Thu, 20 Mar 2025 18:58:33 -0700 (PDT) Date: Thu, 20 Mar 2025 18:58:05 -0700 In-Reply-To: <20250321015806.954866-1-pandoh@google.com> Precedence: bulk X-Mailing-List: linux-pci@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250321015806.954866-1-pandoh@google.com> X-Mailer: git-send-email 2.49.0.395.g12beb8f557-goog Message-ID: <20250321015806.954866-8-pandoh@google.com> Subject: [PATCH v5 7/8] PCI/AER: Add ratelimits to PCI AER Documentation From: Jon Pan-Doh To: Bjorn Helgaas , Karolina Stolarek Cc: linux-pci@vger.kernel.org, Martin Petersen , Ben Fuller , Drew Walton , Anil Agrawal , Tony Luck , " =?utf-8?q?Ilpo_J=C3=A4rvinen?= " , Sathyanarayanan Kuppuswamy , Lukas Wunner , Jonathan Cameron , Sargun Dhillon , "Paul E . McKenney" , Jon Pan-Doh Add ratelimits section for rationale and defaults. Signed-off-by: Karolina Stolarek Signed-off-by: Jon Pan-Doh Reported-by: Sargun Dhillon Acked-by: Paul E. McKenney Reviewed-by: Kuppuswamy Sathyanarayanan --- Documentation/PCI/pcieaer-howto.rst | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Documentation/PCI/pcieaer-howto.rst b/Documentation/PCI/pcieaer-howto.rst index f013f3b27c82..896d2a232a90 100644 --- a/Documentation/PCI/pcieaer-howto.rst +++ b/Documentation/PCI/pcieaer-howto.rst @@ -85,6 +85,17 @@ In the example, 'Requester ID' means the ID of the device that sent the error message to the Root Port. Please refer to PCIe specs for other fields. +AER Ratelimits +-------------- + +Since error messages can be generated for each transaction, we may see +large volumes of errors reported. To prevent spammy devices from flooding +the console/stalling execution, messages are throttled by device and error +type (correctable vs. uncorrectable). + +AER uses the default ratelimit of DEFAULT_RATELIMIT_BURST (10 events) over +DEFAULT_RATELIMIT_INTERVAL (5 seconds). + AER Statistics / Counters ------------------------- From patchwork Fri Mar 21 01:58:06 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Pan-Doh X-Patchwork-Id: 14024781 X-Patchwork-Delegate: bhelgaas@google.com Received: from mail-pl1-f201.google.com (mail-pl1-f201.google.com [209.85.214.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 984B91DFE09 for ; Fri, 21 Mar 2025 01:58:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742522319; cv=none; b=pVMiVIOw8+6FI8/S+GuWmaagR3t72C5rGsyscqoMTpmUMfT/sxhYYMZbIH7zxtPPvB0OtVzsW7H9FvB2rYjEiDuao2L88KYT5OaaKTHOclTkGAw+CK/vjEl9lr91Gvq3tu1F/lYCvVcvNYSAsFxbIoUtDffuv2X6lqqKRlHD+U8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742522319; c=relaxed/simple; bh=Cyc+iGcTMC7PbEtu/AWAoorbDdcoNPH909ihUE8z8y0=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=U5cVVbtoINbFenic5Lpf2QsrBTlq9NyqCgry3I56evOo80URSiVWQMJfNzhvCZZlHAwXS3oRgyHENJ+WQekwG8EwjOdl9pLDCKnAcSK4YXGOqcIeNRUUyys6uh94qJWhCZNLuj31hCwNl8KKNj5z9PblkAapEASBNxtXMHF70Vs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--pandoh.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=wS4g56oP; arc=none smtp.client-ip=209.85.214.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--pandoh.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="wS4g56oP" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-223fd6e9408so31218705ad.1 for ; Thu, 20 Mar 2025 18:58:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1742522316; x=1743127116; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=RfbKQmTZJ7P0U94YU6LPwlYihNVjzFy2qGlkfDxqDUw=; b=wS4g56oPKfWty/Vr2ogMkVezCRIH9q8Kck6wlzV9OK98PuJxA3RRgF59QNRpl+LG1R 2+r2EaNB89a3NS6ER2GhvQynBuba0kNcPmBA7QJDVUtfiMfcgShq0BStqa5ckgVwmuWE IHQbc/a6zIeb+GSYC9zGGoK9wus4XvqMKVAQ4m4P5Nt8r8oqiJosa3KBlJpkeh4B/2Os uP8GQH4GScaCz0UuXi38MvQMmmbEuDi9fEkIwIrf1Ryjj4rkivZzbRJInt8bjiUqAG9X 8mgR5P5v9dZ360aYYOuVJ2zMZmepo79QphO4zKqKcYv+7EmT6ACQ0VfYMZs683M8zZza +Mmw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742522316; x=1743127116; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=RfbKQmTZJ7P0U94YU6LPwlYihNVjzFy2qGlkfDxqDUw=; b=AgulZASNCDBbGNnwLApMsQeBJBz0AUbZwUKQSRvxLdOZoAlF/Q9+NGxHMpbzxzG3ee hf99inzeYFDhdcuA9o1C6YbWfxYrsXa3qwc0yyzO/8/EhLLs2gArmd3E6YFXYySvJrZx VgMUPI2pi5M4MhkL2f3uY72seEys4QJJ4PYj1kTtn2CzAp1YJTMVwnvtkcmwdxYc67e8 QKO0yoVYegn9JNhQNDWA7o1mQXu7PbrJJxVyu4tX3pzxtjUkNqTK0jye6ylqGhmcxslr Ik0g1RCzz3WC+zYfk8VJDtLRiYTeKqZ7XadzD7SyNGWAMgoIDpk/AxCK3CyIxqTHRdKz 377Q== X-Gm-Message-State: AOJu0Yw9oixKsBWfXyBaF51Y8/LKqpEqePVoCjRC5BbNV2kgxriV64GC Zzhiu8bDB1tyU4LFFIADC20JXQtz6Cg072A09PO1Ofrss1oyhmncH5oWnTen9tl1SRt8MHvbpDb 0kQ== X-Google-Smtp-Source: AGHT+IFUhPFz6Qx4a/nyLTmNCrBaqSNFwX7hnbSAgXoyTwNl0auHjQkKFoZ1EukIvXvGzBfmVCEnLC7T/wQ= X-Received: from pfhx7.prod.google.com ([2002:a05:6a00:1887:b0:739:9e9:feea]) (user=pandoh job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:14d3:b0:736:476b:fccc with SMTP id d2e1a72fcca58-73905a05232mr2884251b3a.8.1742522315774; Thu, 20 Mar 2025 18:58:35 -0700 (PDT) Date: Thu, 20 Mar 2025 18:58:06 -0700 In-Reply-To: <20250321015806.954866-1-pandoh@google.com> Precedence: bulk X-Mailing-List: linux-pci@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250321015806.954866-1-pandoh@google.com> X-Mailer: git-send-email 2.49.0.395.g12beb8f557-goog Message-ID: <20250321015806.954866-9-pandoh@google.com> Subject: [PATCH v5 8/8] PCI/AER: Add sysfs attributes for log ratelimits From: Jon Pan-Doh To: Bjorn Helgaas , Karolina Stolarek Cc: linux-pci@vger.kernel.org, Martin Petersen , Ben Fuller , Drew Walton , Anil Agrawal , Tony Luck , " =?utf-8?q?Ilpo_J=C3=A4rvinen?= " , Sathyanarayanan Kuppuswamy , Lukas Wunner , Jonathan Cameron , Sargun Dhillon , "Paul E . McKenney" , Jon Pan-Doh Allow userspace to read/write log ratelimits per device (including enable/disable). Create aer/ sysfs directory to store them and any future aer configs. Update AER sysfs ABI filename to reflect the broader scope of AER sysfs attributes (e.g. stats and ratelimits). Documentation/ABI/testing/sysfs-bus-pci-devices-aer_stats -> Documentation/ABI/testing/sysfs-bus-pci-devices-aer Tested using aer-inject[1]. Configured correctable log ratelimit to 5. Sent 6 AER errors. Observed 5 errors logged while AER stats (cat /sys/bus/pci/devices//aer_dev_correctable) shows 6. Disabled ratelimiting and sent 6 more AER errors. Observed all 6 errors logged and accounted in AER stats (12 total errors). [1] https://git.kernel.org/pub/scm/linux/kernel/git/gong.chen/aer-inject.git Signed-off-by: Karolina Stolarek Signed-off-by: Jon Pan-Doh Reported-by: Sargun Dhillon Acked-by: Paul E. McKenney --- ...es-aer_stats => sysfs-bus-pci-devices-aer} | 34 +++++++ Documentation/PCI/pcieaer-howto.rst | 5 +- drivers/pci/pci-sysfs.c | 1 + drivers/pci/pci.h | 1 + drivers/pci/pcie/aer.c | 93 +++++++++++++++++++ 5 files changed, 133 insertions(+), 1 deletion(-) rename Documentation/ABI/testing/{sysfs-bus-pci-devices-aer_stats => sysfs-bus-pci-devices-aer} (77%) diff --git a/Documentation/ABI/testing/sysfs-bus-pci-devices-aer_stats b/Documentation/ABI/testing/sysfs-bus-pci-devices-aer similarity index 77% rename from Documentation/ABI/testing/sysfs-bus-pci-devices-aer_stats rename to Documentation/ABI/testing/sysfs-bus-pci-devices-aer index d1f67bb81d5d..771204197b71 100644 --- a/Documentation/ABI/testing/sysfs-bus-pci-devices-aer_stats +++ b/Documentation/ABI/testing/sysfs-bus-pci-devices-aer @@ -117,3 +117,37 @@ Date: July 2018 KernelVersion: 4.19.0 Contact: linux-pci@vger.kernel.org, rajatja@google.com Description: Total number of ERR_NONFATAL messages reported to rootport. + +PCIe AER ratelimits +------------------- + +These attributes show up under all the devices that are AER capable. +They represent configurable ratelimits of logs per error type. + +See Documentation/PCI/pcieaer-howto.rst for more info on ratelimits. + +What: /sys/bus/pci/devices//aer/ratelimit_log_enable +Date: March 2025 +KernelVersion: 6.15.0 +Contact: linux-pci@vger.kernel.org, pandoh@google.com +Description: Writing 1/0 enables/disables AER log ratelimiting. Reading + gets whether or not AER is currently enabled. Enabled by + default. + +What: /sys/bus/pci/devices//aer/ratelimit_burst_cor_log +Date: March 2025 +KernelVersion: 6.15.0 +Contact: linux-pci@vger.kernel.org, pandoh@google.com +Description: Ratelimit burst for correctable error logs. Writing a value + changes the number of errors (burst) allowed per interval + (5 second window) before ratelimiting. Reading gets the + current ratelimit burst. + +What: /sys/bus/pci/devices//aer/ratelimit_burst_uncor_log +Date: March 2025 +KernelVersion: 6.15.0 +Contact: linux-pci@vger.kernel.org, pandoh@google.com +Description: Ratelimit burst for uncorrectable error logs. Writing a + value changes the number of errors (burst) allowed per + interval (5 second window) before ratelimiting. Reading + gets the current ratelimit burst. diff --git a/Documentation/PCI/pcieaer-howto.rst b/Documentation/PCI/pcieaer-howto.rst index 896d2a232a90..043cdb3194be 100644 --- a/Documentation/PCI/pcieaer-howto.rst +++ b/Documentation/PCI/pcieaer-howto.rst @@ -96,12 +96,15 @@ type (correctable vs. uncorrectable). AER uses the default ratelimit of DEFAULT_RATELIMIT_BURST (10 events) over DEFAULT_RATELIMIT_INTERVAL (5 seconds). +Ratelimits are exposed in the form of sysfs attributes and configurable. +See Documentation/ABI/testing/sysfs-bus-pci-devices-aer. + AER Statistics / Counters ------------------------- When PCIe AER errors are captured, the counters / statistics are also exposed in the form of sysfs attributes which are documented at -Documentation/ABI/testing/sysfs-bus-pci-devices-aer_stats +Documentation/ABI/testing/sysfs-bus-pci-devices-aer. Developer Guide =============== diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c index b46ce1a2c554..16de3093294e 100644 --- a/drivers/pci/pci-sysfs.c +++ b/drivers/pci/pci-sysfs.c @@ -1801,6 +1801,7 @@ const struct attribute_group *pci_dev_attr_groups[] = { &pcie_dev_attr_group, #ifdef CONFIG_PCIEAER &aer_stats_attr_group, + &aer_attr_group, #endif #ifdef CONFIG_PCIEASPM &aspm_ctrl_attr_group, diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h index f709290e9e00..a356640fdb3f 100644 --- a/drivers/pci/pci.h +++ b/drivers/pci/pci.h @@ -891,6 +891,7 @@ void pci_no_aer(void); void pci_aer_init(struct pci_dev *dev); void pci_aer_exit(struct pci_dev *dev); extern const struct attribute_group aer_stats_attr_group; +extern const struct attribute_group aer_attr_group; void pci_aer_clear_fatal_status(struct pci_dev *dev); int pci_aer_clear_status(struct pci_dev *dev); int pci_aer_raw_clear_status(struct pci_dev *dev); diff --git a/drivers/pci/pcie/aer.c b/drivers/pci/pcie/aer.c index e0f526960134..ee3c285c26a6 100644 --- a/drivers/pci/pcie/aer.c +++ b/drivers/pci/pcie/aer.c @@ -627,6 +627,99 @@ const struct attribute_group aer_stats_attr_group = { .is_visible = aer_stats_attrs_are_visible, }; +/* + * Ratelimit enable toggle + * 0: disabled with ratelimit.interval = 0 + * 1: enabled with ratelimit.interval = nonzero + */ +static ssize_t ratelimit_log_enable_show(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + struct pci_dev *pdev = to_pci_dev(dev); + bool enable = pdev->aer_report->cor_log_ratelimit.interval != 0; + + return sysfs_emit(buf, "%d\n", enable); +} + +static ssize_t ratelimit_log_enable_store(struct device *dev, + struct device_attribute *attr, + const char *buf, size_t count) +{ + struct pci_dev *pdev = to_pci_dev(dev); + bool enable; + int interval; + + if (kstrtobool(buf, &enable) < 0) + return -EINVAL; + + if (enable) + interval = DEFAULT_RATELIMIT_INTERVAL; + else + interval = 0; + + pdev->aer_report->cor_log_ratelimit.interval = interval; + pdev->aer_report->uncor_log_ratelimit.interval = interval; + + return count; +} +static DEVICE_ATTR_RW(ratelimit_log_enable); + +#define aer_ratelimit_burst_attr(name, ratelimit) \ + static ssize_t \ + name##_show(struct device *dev, struct device_attribute *attr, \ + char *buf) \ +{ \ + struct pci_dev *pdev = to_pci_dev(dev); \ + \ + return sysfs_emit(buf, "%d\n", \ + pdev->aer_report->ratelimit.burst); \ +} \ + \ + static ssize_t \ + name##_store(struct device *dev, struct device_attribute *attr, \ + const char *buf, size_t count) \ +{ \ + struct pci_dev *pdev = to_pci_dev(dev); \ + int burst; \ + \ + if (kstrtoint(buf, 0, &burst) < 0) \ + return -EINVAL; \ + \ + pdev->aer_report->ratelimit.burst = burst; \ + \ + return count; \ +} \ +static DEVICE_ATTR_RW(name) + +aer_ratelimit_burst_attr(ratelimit_burst_cor_log, cor_log_ratelimit); +aer_ratelimit_burst_attr(ratelimit_burst_uncor_log, uncor_log_ratelimit); + +static struct attribute *aer_attrs[] = { + &dev_attr_ratelimit_log_enable.attr, + &dev_attr_ratelimit_burst_cor_log.attr, + &dev_attr_ratelimit_burst_uncor_log.attr, + NULL +}; + +static umode_t aer_attrs_are_visible(struct kobject *kobj, + struct attribute *a, int n) +{ + struct device *dev = kobj_to_dev(kobj); + struct pci_dev *pdev = to_pci_dev(dev); + + if (!pdev->aer_report) + return 0; + + return a->mode; +} + +const struct attribute_group aer_attr_group = { + .name = "aer", + .attrs = aer_attrs, + .is_visible = aer_attrs_are_visible, +}; + void pci_dev_aer_stats_incr(struct pci_dev *pdev, struct aer_err_info *info) { unsigned long status = info->status & ~info->mask;