From patchwork Fri Feb 14 02:35:36 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: 13974375 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 4159B136326 for ; Fri, 14 Feb 2025 02:35:50 +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=1739500552; cv=none; b=XP36k9YjAclMeqzCzB8gv98h/IrLMeOQKKz8IjIIq0ijKXNhLF+63AltSuvupWe4Bsb1ne10tkwUf6a6wxnPE4yDJweIYUqKrlNVl5Zk1tEuw2CspI6tKsMV1mc17r5l2tktlqSNLfjR1XkZPylvvGFNyF2O6jxp+6ciJTJP1h8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739500552; c=relaxed/simple; bh=MxrsUIMwpSF3a45K0ErscHgs+LNbTlmNP28Z4qAvIJM=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=PRX9xyBkpOWeaT/FliqJwqso0sh/s8Hic7jQgPggVOXJtJ8/seitO+U88ugJ+rXmErpyI9D4cXylGKexA6vYqeOc9wk5D9t4zXWyzj8GcSCoGSQHS6s1AmQO2Re7p0Hm4YnKD6x5iRGa80hJWnvCgACYc6VoUg/9gx0XZDfFgB0= 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=z1nFhGrw; 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="z1nFhGrw" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-220e04e67e2so40048725ad.2 for ; Thu, 13 Feb 2025 18:35:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1739500550; x=1740105350; 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=VtI+Vb8g7MbKlHF8GNGco7nXiQ3egRGy3mLNKXIfjFI=; b=z1nFhGrwD/cTr9YV3DEKzz9HwOHOvXxZiy9+nipSB3FbG5xmVtBCCzj6mFT63gtn3d ycvPGEcPMlZoanJnqiiFI0xSVP0R2ymdkQZRi7SYIH3MXwTAxubq2b3oW4ussDpxF2ta P5TeLH/BB2jvTCflysHK6Q8wtNBRGBPScybiFEKeKDP9Ov1ITpEMA0HLr0lm6siI/4GE wcQvHk3HTvYEDqrjBSLDZ7a2z1n6Zv1dlxOBXeWpvDvXkK9dWzFkgGf7uENA8xEO7dpp D9OFXdDI1IxY9xpP49vGRoe9efKlHLgo0MFXLJArKFEOJiEr67SH/emdIVA4Y1B3EYyG TyyA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739500550; x=1740105350; 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=VtI+Vb8g7MbKlHF8GNGco7nXiQ3egRGy3mLNKXIfjFI=; b=T89N/M5lHQegwgat/3Srb5dwfwu83qQK0YNXla9F2tq82j722WEZdY7Nyss/TyM1qF LJHDlZI2i8NbavL9ZdkU0+OdGFLWRv84xMqRfQBrr2WBSB5YYyKvQoQneaJyieC0eKe+ gA/4v1tRAsYLFc1WMVq6Rm61pm3NXYF4vN/zvWqmn2KKxTOR+/c3eI5UbZQt3JnHE8cO mrEVUnT/xFz+eXZTUc9Nmae5I/9UgWUkIfjRw48rp8NbZee1omWBZe6CtM9dGpVf/cnV yLJuK+r6gJLkbSAAW1fAAK5KwT/nr2ZbOlYpaKOUC854sBC+T4I85r/C0opcfs+MYS1h nNUQ== X-Gm-Message-State: AOJu0Ywg9fzSoGMK4RBTTRtv4gwZJxtglB4P63uGqdZZekQBD/hMCBIS FhGWuxh5WSsub0BALR2jKBq8j9CUZIOnwesJPqSytV2sgVJPJX7XJ200q2WUshFMYjR/w3SUk4/ C6g== X-Google-Smtp-Source: AGHT+IEZkABvOwmS6IjrFeu3QfP9CHXLyOdMiHH8akLSOTV9UOUWzmKIqcQGcE5KRMmess+aKOE/s1kUAS4= X-Received: from pfbih2.prod.google.com ([2002:a05:6a00:8c02:b0:730:8f44:a42b]) (user=pandoh job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a21:6493:b0:1ee:67ec:2279 with SMTP id adf61e73a8af0-1ee67ec2304mr11194420637.26.1739500550581; Thu, 13 Feb 2025 18:35:50 -0800 (PST) Date: Thu, 13 Feb 2025 18:35:36 -0800 In-Reply-To: <20250214023543.992372-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: <20250214023543.992372-1-pandoh@google.com> X-Mailer: git-send-email 2.48.1.601.g30ceb7b040-goog Message-ID: <20250214023543.992372-2-pandoh@google.com> Subject: [PATCH v2 1/8] PCI/AER: Remove aer_print_port_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 , Jon Pan-Doh Info logged is duplicated when the source device is processed. In both cases, BDF and error severity are derived from aer_error_info. If no source device is found, then an error is logged with the BDF from aer_error_info. Code flow: aer_isr_one_error() -> aer_print_port_info() -> find_source_device() -> return/pci_info() if no device found else continue -> aer_process_err_devices() -> aer_print_error() aer_print_port_info(): pcieport 0000:00:04.0: Correctable error message received from 0000:01:00.0 aer_print_error(): e1000e 0000:01:00.0: PCIe Bus Error: severity=Correctable, type=Data Link Layer, (Receiver ID) e1000e 0000:01:00.0: device [8086:10d3] error status/mask=00000040/0000e000 e1000e 0000:01:00.0: [ 6] BadTLP Tested using aer-inject[1]. No more root port log on dmesg. [1] https://git.kernel.org/pub/scm/linux/kernel/git/gong.chen/aer-inject.git Signed-off-by: Jon Pan-Doh Reviewed-by: Karolina Stolarek --- drivers/pci/pcie/aer.c | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/drivers/pci/pcie/aer.c b/drivers/pci/pcie/aer.c index ad4206125b86..9a8cc81d01e4 100644 --- a/drivers/pci/pcie/aer.c +++ b/drivers/pci/pcie/aer.c @@ -733,18 +733,6 @@ 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) -{ - u8 bus = info->id >> 8; - u8 devfn = info->id & 0xff; - - pci_info(dev, "%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_FUNC(devfn)); -} - #ifdef CONFIG_ACPI_APEI_PCIEAER int cper_severity_to_aer(int cper_severity) { @@ -1296,7 +1284,6 @@ 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); if (find_source_device(pdev, &e_info)) aer_process_err_devices(&e_info); @@ -1315,8 +1302,6 @@ static void aer_isr_one_error(struct aer_rpc *rpc, else e_info.multi_error_valid = 0; - aer_print_port_info(pdev, &e_info); - if (find_source_device(pdev, &e_info)) aer_process_err_devices(&e_info); } From patchwork Fri Feb 14 02:35:37 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: 13974376 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 88AE1C2EF for ; Fri, 14 Feb 2025 02:36:09 +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=1739500571; cv=none; b=ER/lfevhP2TZDv6IeH1S75gch1eGIcXlyqq7pzMvlybD1GtO5EH9DB9WczGUzNAUK9NmIIvD73+zRqYQo1shtFWNMAq6/qZclLRSM6jtXV4HuzArgsZoNkiYomBpR5ZQ/ukhfsJupZA+zrcm+kLAWWzaxPbbB0kLQ+2MqJtAlF0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739500571; c=relaxed/simple; bh=VTTLIbqD93j3gEw0ixYhYa1LOotH74ztlOXG+Booe/U=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=V7d9qmtILWYiXdfJZ0Svx5a/ewHJpuaKhcQ+GsbFC3L1YjMxttBPTEQB8JIzkFmhDd0zm9FzFhShZMYlAK3yeh9Nck3lfNrp2/3wxdotCZ8jt1MG1h+BUoMVrIEoG6sz01xE2iUrxQLu3IJUbVBf6ggZJ6NxpklZn7ih3jnvH7g= 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=ula34NDc; 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="ula34NDc" Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-2fa6793e8b8so3788406a91.1 for ; Thu, 13 Feb 2025 18:36:09 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1739500569; x=1740105369; 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=r6DnEV3CPo8T10VipgQF2oA8JBGrjoBd8ykisKiCS7Q=; b=ula34NDcSnJIOVz3A04WaYXHAZw30cUb24tESdiqFJlkBFnYkLIFLgjkbBbB874F61 N0rGGDwXRDDloY6Jxm5GoJ0Rj1U77JRDNHDVKaoerk/IfrqKA/eZUrzHjzGFT1uW41HN e0YKAoht7wvXVqcWPQsM3ozelZVkltVjEr5N0spf/BCW/ghn0RP/4PZwK5Cdseaqv6nN ctlqpWXIlANONAVpLRQuPwNgTFYUeIh4/KKpUw1JRGOeMxLqfZxJS2PAGsDQLxB+vCoO GkgfYZEIZ54UnUhFIRNrG78/EDUsI4/+F072jkWqOwDqHV3aN+NWUKTW1lR58/CtS7tO /LIg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739500569; x=1740105369; 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=r6DnEV3CPo8T10VipgQF2oA8JBGrjoBd8ykisKiCS7Q=; b=hjlrNeYkUPTlzFLzONJDxGr3f59SbhmIDhBX1qxY9Arva1/EABzSskgRhrRoIle3eN C4dwl/2W4mWEgrJNh7E3wLTd8xAIEBab3+TPHDnnGKa3WCIQV3QSEM3BgKvRB5JY9xDx 00hNlPGcQgJJTSxAg9u9wRcTXpwKXSm1UAw6jpHT5aZOJ8ux90A6bXNOnUCoAlbZP4G0 /O9ueZn6wB+83TsgXMjaNndLrDxUcJ0KJXvxcGIZLOYraTPmwkM2qNqSzNagf/Kc8mIh l+sEnaRsZlEA/xzzVr+4PNDWcLbaGmVg2cR/C3D7iM5ga8yhJhnpAmNNaGXl4iJgGG3R iTxQ== X-Gm-Message-State: AOJu0YyGDxdTmT77RhIKYSbGDiTFS1OHkDafa8DRQaY6mq8lDWR/iOjh NfZ78Zlhe77CXkTwqdQMFM8XrxOYqOmVuX3dyEFqO+QZ6F+EDfkHUF3deiW+7LBng8kICgwAeFN VrA== X-Google-Smtp-Source: AGHT+IFxNcRd+Bizj2VPFq517kiqItT3K/Zz3LTjSU4h5J6xWUo0Smlmeg3ya9M9QLtaB+25f4abhkPkpvo= X-Received: from pgmp34.prod.google.com ([2002:a63:1e62:0:b0:ada:48e3:831f]) (user=pandoh job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a21:3996:b0:1e1:afa9:d39b with SMTP id adf61e73a8af0-1ee5e530b58mr18640487637.7.1739500568749; Thu, 13 Feb 2025 18:36:08 -0800 (PST) Date: Thu, 13 Feb 2025 18:35:37 -0800 In-Reply-To: <20250214023543.992372-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: <20250214023543.992372-1-pandoh@google.com> X-Mailer: git-send-email 2.48.1.601.g30ceb7b040-goog Message-ID: <20250214023543.992372-3-pandoh@google.com> Subject: [PATCH v2 2/8] PCI/AER: Use the same log level for all messages 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 , 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 function and propagate the result down the call chain. Make aer_print_port_info output to match the level of the reported error. Signed-off-by: Karolina Stolarek Reviewed-by: Jon Pan-Doh --- drivers/pci/pci.h | 2 +- drivers/pci/pcie/aer.c | 43 ++++++++++++++++++++++-------------------- drivers/pci/pcie/dpc.c | 2 +- 3 files changed, 25 insertions(+), 22 deletions(-) diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h index 01e51db8d285..8cb816ee5388 100644 --- a/drivers/pci/pci.h +++ b/drivers/pci/pci.h @@ -550,7 +550,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, struct pcie_tlp_log *log); diff --git a/drivers/pci/pcie/aer.c b/drivers/pci/pcie/aer.c index 9a8cc81d01e4..f1fdaa052cf6 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(" ")); @@ -753,15 +749,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); @@ -773,13 +772,13 @@ 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_print_error(dev, &info); - pci_err(dev, "aer_layer=%s, aer_agent=%s\n", + 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", aer_error_layer[layer], aer_agent_string[agent]); if (aer_severity != AER_CORRECTABLE) - pci_err(dev, "aer_uncor_severity: 0x%08x\n", + aer_printk(level, dev, "aer_uncor_severity: 0x%08x\n", aer->uncor_severity); if (tlp_header_valid) @@ -1244,14 +1243,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)) @@ -1269,6 +1269,7 @@ static void aer_isr_one_error(struct aer_rpc *rpc, { struct pci_dev *pdev = rpc->rpd; struct aer_err_info e_info; + const char *level; pci_rootport_aer_stats_incr(pdev, e_src); @@ -1279,6 +1280,7 @@ static void aer_isr_one_error(struct aer_rpc *rpc, if (e_src->status & PCI_ERR_ROOT_COR_RCV) { e_info.id = ERR_COR_ID(e_src->id); e_info.severity = AER_CORRECTABLE; + level = KERN_WARNING; if (e_src->status & PCI_ERR_ROOT_MULTI_COR_RCV) e_info.multi_error_valid = 1; @@ -1286,11 +1288,12 @@ static void aer_isr_one_error(struct aer_rpc *rpc, e_info.multi_error_valid = 0; if (find_source_device(pdev, &e_info)) - aer_process_err_devices(&e_info); + aer_process_err_devices(&e_info, level); } if (e_src->status & PCI_ERR_ROOT_UNCOR_RCV) { e_info.id = ERR_UNCOR_ID(e_src->id); + level = KERN_ERR; if (e_src->status & PCI_ERR_ROOT_FATAL_RCV) e_info.severity = AER_FATAL; @@ -1303,7 +1306,7 @@ static void aer_isr_one_error(struct aer_rpc *rpc, e_info.multi_error_valid = 0; if (find_source_device(pdev, &e_info)) - aer_process_err_devices(&e_info); + aer_process_err_devices(&e_info, level); } } diff --git a/drivers/pci/pcie/dpc.c b/drivers/pci/pcie/dpc.c index 242cabd5eeeb..f06fad95f2eb 100644 --- a/drivers/pci/pcie/dpc.c +++ b/drivers/pci/pcie/dpc.c @@ -287,7 +287,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 Feb 14 02:35:38 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: 13974377 X-Patchwork-Delegate: bhelgaas@google.com Received: from mail-yw1-f201.google.com (mail-yw1-f201.google.com [209.85.128.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 A0B40C2EF for ; Fri, 14 Feb 2025 02:36:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739500574; cv=none; b=nCIyMwcfuhNSsuiHGTxYZxRnslf2E3yL56nFx96mGTqSsLAn56SsFZppc2N5XMNXJ1go/r+aNIGO7Zcwwbuqe+hQU6Ap8MBvNBUKMqK4Mj328L7LIuq/iac99XAbH2XVZ4q6xOcWt5kInT+UA3Fd0jWaZQ+eXIf+bfn3hzxtBas= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739500574; c=relaxed/simple; bh=o0rJn9m6wmHGOu6s8YJwfI8S6S7/Wy5vHh7NM6AR5pE=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=D5d1dsHAoWUVJTM7siy2Vc0CJucVD+VqFABMUsf4d9CY2y5LHHty30CFDiwSbMIbdUMPLPhuyyCWDYwKgRl0J8Lp+FYDKJIGzEH3zH8EXotd2lcoDbpEvAZlhgP5Ozi67bAMaE+Gy8HIo5BYnOwkZK3JA3MhoG92s8JZdGck1p0= 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=L4eyeltH; arc=none smtp.client-ip=209.85.128.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="L4eyeltH" Received: by mail-yw1-f201.google.com with SMTP id 00721157ae682-6fb33e7a5dfso13974787b3.2 for ; Thu, 13 Feb 2025 18:36:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1739500571; x=1740105371; 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=FXwDFR7jTCsSat48d4MGYeivPqa/JH9YFjZem/QbpTY=; b=L4eyeltHDtHQgcUE2ViFKC5tPlo37zZ+b9v7LckpCUI55sAaYV4cuJEaDs/atJOtlm xXVja4q8V8dTedWSUrgavPLvTXwO0Pvc9REv10BD5c62iBRuSdMwQ4PGZuzL7MBzLATx fi3GtaHu8qo6VgVtUXtiztBa1ASzvVHkbC6olclsWRRhP6UJ2rP23UZttZAVV67xRRdP /U7nIlzO/wLhGZ1WWeG37zk4nzwGWzYYnRqRAGYFj7BuxZJPLZHn2zFs/3kDdtZ7N++Z CiLRoA2UcsNzrNG1pyhxsLIhlpFDEntp67bW0yZGmYekksOTERwJUqCDP4EZOKfSuqnh naEg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739500571; x=1740105371; 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=FXwDFR7jTCsSat48d4MGYeivPqa/JH9YFjZem/QbpTY=; b=obkbOP4rxbv1kX1woZaRLw7mjcl7zZYavhZ/vL/0HJnya5PRmntabV/crAYm3zINm4 3zO8YkCWxgko49Ck8ExlJnsDbMRV5ttfN7nsuaHCVRqWaOSrOuHbrTC3JzaIbu+fBfp7 P3LjdnDRvGZ0HHa69HO8GsHhpId4IjNOUMGfsWKDwIOPTwNBQKYF3oMHYAGBx3t+YoWn eDZjXpSZ2x+17aQz46q1kLkiJtIMR17w7Q0DaDPznKXfiIGVcdZW1pFLXYoZoFCnCG2R hvQbthFeBwxx1YiljOo4APO4zGABtNRK1VaptVuHLW2nVuJgzRT5IMTsYBF+7xGylaYn Y1fQ== X-Gm-Message-State: AOJu0YzQZV8IHjRC4QVoq/lHOtGmBV2i5FG1sjRSqWf0MfQ85FbQSOdv 78OYe3tV/c1E1TmZtWYSTnXT/lOvpNo1pSH8KBEYxs6F1uFjKo5/tE4u/+O/ivkuYNqi63MmkgF uuw== X-Google-Smtp-Source: AGHT+IH2JpSRr3nyqkfZ/2g1NWVxxN8SFQ5P14LZP5nzNWTlBWD3xZrErltPfU92fyp5+VX7v7C6eKkgaMs= X-Received: from ywbkg10.prod.google.com ([2002:a05:690c:760a:b0:6f9:7647:ac85]) (user=pandoh job=prod-delivery.src-stubby-dispatcher) by 2002:a05:690c:3703:b0:6f9:82ae:5988 with SMTP id 00721157ae682-6fb32c9ac38mr51565317b3.22.1739500571618; Thu, 13 Feb 2025 18:36:11 -0800 (PST) Date: Thu, 13 Feb 2025 18:35:38 -0800 In-Reply-To: <20250214023543.992372-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: <20250214023543.992372-1-pandoh@google.com> X-Mailer: git-send-email 2.48.1.601.g30ceb7b040-goog Message-ID: <20250214023543.992372-4-pandoh@google.com> Subject: [PATCH v2 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 , Jon Pan-Doh Decouple stat collection from internal AER print functions. AERs from ghes or cxl drivers have stat collection in pci_print_aer as that is where aer_err_info is populated. Tested using aer-inject[1]. AER sysfs counters still updated correctly. [1] https://git.kernel.org/pub/scm/linux/kernel/git/gong.chen/aer-inject.git Signed-off-by: Jon Pan-Doh --- 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 8cb816ee5388..26104aee06c0 100644 --- a/drivers/pci/pci.h +++ b/drivers/pci/pci.h @@ -550,6 +550,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 f1fdaa052cf6..d6edb95d468f 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, @@ -772,6 +770,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", @@ -1250,8 +1250,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 f06fad95f2eb..a85ea76b4dea 100644 --- a/drivers/pci/pcie/dpc.c +++ b/drivers/pci/pcie/dpc.c @@ -287,6 +287,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 Feb 14 02:35:39 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: 13974378 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 100CB13B592 for ; Fri, 14 Feb 2025 02:36:14 +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=1739500576; cv=none; b=vAAlyQh1fxGpZs37xu1vjTV2pLJ2yk3DQpRFcI0x9MClfcJhw0PYs1zRymuV4oq2nvXsFhoOjjpJQ+RzTELLELI7Vza5l6d2i6iQ0t+fMgTsNyUzJUHL8oQUkP79BMqzuapQW8VrTD/yfMzm/SGsmWSqmzWpQrUDhdCX6d+GnP0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739500576; c=relaxed/simple; bh=9FvMqsfOCHYzIest4Kkdkzdcs9PwzdyFvtsSIllgA+w=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=JpQXQT2GTctRo0h1h2GkExhiKfOjJYc/G8TbtESBBDv3LkG2BBKK4fFrZrWQVzLn7R+yBbb6E8zPXhiCk62tiLDBNhep0ZEAJzCaMv0FzDA8v4iF+Ljpw5L7/mAPGfEeDaKje4RHzlq3oKYOZY+HRnM00YQ+MofemzIOOM9RNgQ= 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=EpHfOWjV; 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="EpHfOWjV" Received: by mail-pj1-f74.google.com with SMTP id 98e67ed59e1d1-2f2a9f056a8so3322131a91.2 for ; Thu, 13 Feb 2025 18:36:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1739500574; x=1740105374; 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=/J8FPPeyiF/y9KPB4qL0TgAFGSjHczh1/T/MLVMcmZM=; b=EpHfOWjVPteKq5NYSuyzF/wfPFbD/RXySmAEvDvyRw7hdQihR27K5rngeTvs/wuf6P uyIMZGsxpA6qzHkV2gRAJ0HA0aMZm3U24as4VZ1vhn7vJbSRe312H3ivCSqBk1+SVEGS oP54nNFAIhvJcOWCA/2uJavVci4QoKOShCQCQs1nVQcEXWsLP0YEF7MQ60XQF8pgVxZN DU6wZFBPYrnKQqNJBVLLyoGsUlTx35669q8uI1uftj7Z3F+dbNYmuhLa7GFQuWDZ5QhG fEAkdiA8TB+Fr6O712pEE6vv8B7veVfEN6seNVJBiXV6oXlPtaS7/10f/bG6tNwFCPVP 8YXQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739500574; x=1740105374; 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=/J8FPPeyiF/y9KPB4qL0TgAFGSjHczh1/T/MLVMcmZM=; b=JoDz25OLtgibJBOjpmjaFlCHwY/xpDuPfDSML10y7Ceaknt/dWJo0SQqfEUQzvqoIb OrqnX4AGgUz4fe4myvX/uescA50bsCQRBwX1TOASLd7NRix6JksU3/L/Uvy+k98GgX3y rKVxmHeDQWH8sxiXvcWXenf1YMetTnLJIlTi5gQQkaItuiCOe7n5nF/8dsxYr6kIoGLw Ea+PqfteURKxe8UTb0d8EUsOYUo8OfvyQNkH3B+ky3NJLV9kGJW+j+bJK4q+js8MkPH1 LadZMdJQ04odAlHGAkorV40DCciDc7hpnUdYWmNaovopLV/Ooe9ldt5aXnKHUznJi1xj xyUg== X-Gm-Message-State: AOJu0YyOkTV+xr3mrR9NB9DnrdotYdeFRUDH1213JL07haJNXBA1bKA3 BgrpQrvPu/IBQAx3MVghs+yyfEA6rpfE3D+qHt31XlBdFpd7/84p247WThBQ5jqzzpc7N8iKfzg 1AA== X-Google-Smtp-Source: AGHT+IHNFtGLfDb7fOFkAOf7Vp2+E6j3GmY66aXRD4KBwbFbqG5nPsptgB2ti+wn8mHR7Q2cLl7wJOvwbuM= X-Received: from pjbqn11.prod.google.com ([2002:a17:90b:3d4b:b0:2fa:15aa:4d1e]) (user=pandoh job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90a:da83:b0:2ee:7698:e565 with SMTP id 98e67ed59e1d1-2fbf5bece56mr14606450a91.8.1739500574348; Thu, 13 Feb 2025 18:36:14 -0800 (PST) Date: Thu, 13 Feb 2025 18:35:39 -0800 In-Reply-To: <20250214023543.992372-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: <20250214023543.992372-1-pandoh@google.com> X-Mailer: git-send-email 2.48.1.601.g30ceb7b040-goog Message-ID: <20250214023543.992372-5-pandoh@google.com> Subject: [PATCH v2 4/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 , Jon Pan-Doh Update name to reflect the broader definition of structs/variables that are stored (e.g. ratelimits). Signed-off-by: Jon Pan-Doh 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 d6edb95d468f..b4f902fd5ef6 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(struct 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 3c2c8d8eb1fd..7f55009a626b 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 Feb 14 02:35:40 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: 13974379 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 64FA2137930 for ; Fri, 14 Feb 2025 02:36:18 +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=1739500579; cv=none; b=W3TwGt5BFQce6s1Hj3eHxpXA6mKZZFL2ZBzPpob5c28nx39W5bFZis48lIf9yAH/N8RMf+rxzEEtDOscfa9Yab1keqTNEUf3fcU/ZSMnTsSANtMfTyanmoRBw9007Xj4VsRyAqO83+FaE8K4q9vAeVJjIqP4fE1drcDjq0+lZ+A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739500579; c=relaxed/simple; bh=GPzOoUZY2/G8/jdv5l9hLV+gKD/CWyouhEXll5KMmJc=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=LRAmkAMFia79Hs9cV4Oi9vCuC2jgUix6TTceyxBKq0nRgS+ajS00ZtvmdcpNmpJxcGjg4M8dMhA5R8mO4FBx8apCLImWBbMWqKh/cZGFcePefHQQ++wYHNldmUgGpTrkefC4YKzl3hhH+DEW/4ZlxtPlkGP69xxtkdA8mmdrHls= 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=GFFmORj5; 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="GFFmORj5" Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-2fc318bd470so84189a91.0 for ; Thu, 13 Feb 2025 18:36:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1739500577; x=1740105377; 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=9W9BFxI+YRnR7tfqCSoyQdI4xkMFTHFH7uD6a1Bk1nc=; b=GFFmORj5Tem6kV4JtqSl9ER1+ayodWJzz/EfPVhsSWFZNCjpaQVhZ6czfeS59Jl8ke IEwHWGl42jChAv0v0xhfhIgrSpvTzsKcJSnyS1FAB3hIOLaUIX5cvQiXFS6ilphB2Lsw fmhYXIAA/0czN7c6m90MuptvVIPz6EAdKJcjAaX+3exIKNXW4uVhP4v31aV9LEz3mieY 4lK7miPNsn2mTclL6lu9JiiYyvnXa75/b44HHkPjGNVWVI3DYtkdwdOaHmThvL4Cp47s YatvULo6TYmtESWLYB5OOn/xPKYc7xB2MXnuHSuZVEyfJ2dXkEcY7wO5jPtX6tjcWt8Z wRNw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739500577; x=1740105377; 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=9W9BFxI+YRnR7tfqCSoyQdI4xkMFTHFH7uD6a1Bk1nc=; b=DHUttPoOBsYGsmFwHKAJBJ56/+pDxTlgZlimhITrvy9qURC6I88beVUcUWUGm41fyB 1YyMy7zg6LBIut0i/3rBLkzQ7lr/BD6/WxbNmp+uXMaPRVjZqtqEqvHU83g6n2bC7o+e WK5IgymLrrd+5ov1ltGlOumkQDhkY2oTp0KqxnVokO+j/MX8vIFvEhkCO+dq3fciqf0R EvKUEq5xE/jGiDS7aeLONiTo61/DMGBdH3QdzLSt/7FY5MBFMF/DifHMOgamkGABiP1E SWkkuGDh5a5kBsYi3UWHG46aUIQOKk2Zlv4KmHJLJVO2AH04QPyTWALT1iNHHdJPPZqJ l6rA== X-Gm-Message-State: AOJu0YxgzXUhW1Hj9tbmMV1PlAY/+a5fmSAuGMHi6iFPZqLjTAxAMYFC gSDeCcR6VZ2FVtycnQMYrg5omYgjpH6W5mz7mTaPt9VZGC15TgkIIyDwAHUPekXlzseW3NSlEsP i/Q== X-Google-Smtp-Source: AGHT+IFeVdRVPjECaLJLPQPxCuwg3oEgqlTj0jR54Zq3B6tDKvAISVm/S8W7wz5Yr9SGXCnExhyEdLXgAXI= X-Received: from pglo12.prod.google.com ([2002:a63:4e4c:0:b0:7fd:3ffb:bf1b]) (user=pandoh job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a21:6da8:b0:1e1:cbbf:be0 with SMTP id adf61e73a8af0-1ee5e5bbea4mr17562703637.22.1739500577538; Thu, 13 Feb 2025 18:36:17 -0800 (PST) Date: Thu, 13 Feb 2025 18:35:40 -0800 In-Reply-To: <20250214023543.992372-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: <20250214023543.992372-1-pandoh@google.com> X-Mailer: git-send-email 2.48.1.601.g30ceb7b040-goog Message-ID: <20250214023543.992372-6-pandoh@google.com> Subject: [PATCH v2 5/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 , Jon Pan-Doh Spammy devices can flood kernel logs with AER errors and slow/stall execution. Add per-device ratelimits for AER errors (correctable and uncorrectable). Set the default rate to the default kernel ratelimit (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 Reviewed-by: Karolina Stolarek --- drivers/pci/pcie/aer.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/drivers/pci/pcie/aer.c b/drivers/pci/pcie/aer.c index b4f902fd5ef6..c5b5381e2930 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| \ @@ -378,6 +383,10 @@ void pci_aer_init(struct pci_dev *dev) return; dev->aer_report = kzalloc(sizeof(struct 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, @@ -697,6 +706,7 @@ void aer_print_error(struct pci_dev *dev, struct aer_err_info *info, { int layer, agent; int id = pci_dev_id(dev); + struct ratelimit_state *ratelimit; if (!info->status) { pci_err(dev, "PCIe Bus Error: severity=%s, type=Inaccessible, (Unregistered Agent ID)\n", @@ -704,6 +714,14 @@ void aer_print_error(struct pci_dev *dev, struct aer_err_info *info, goto out; } + if (info->severity == AER_CORRECTABLE) + ratelimit = &dev->aer_report->cor_log_ratelimit; + else + ratelimit = &dev->aer_report->uncor_log_ratelimit; + + if (!__ratelimit(ratelimit)) + return; + layer = AER_GET_LAYER_ERROR(info->severity, info->status); agent = AER_GET_AGENT(info->severity, info->status); @@ -749,12 +767,15 @@ void pci_print_aer(struct pci_dev *dev, int aer_severity, u32 status, mask; const char *level; struct aer_err_info info; + struct ratelimit_state *ratelimit; if (aer_severity == AER_CORRECTABLE) { + ratelimit = &dev->aer_report->cor_log_ratelimit; status = aer->cor_status; mask = aer->cor_mask; level = KERN_WARNING; } else { + ratelimit = &dev->aer_report->uncor_log_ratelimit; status = aer->uncor_status; mask = aer->uncor_mask; tlp_header_valid = status & AER_LOG_TLP_MASKS; @@ -772,6 +793,9 @@ void pci_print_aer(struct pci_dev *dev, int aer_severity, pci_dev_aer_stats_incr(dev, &info); + if (!__ratelimit(ratelimit)) + 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", From patchwork Fri Feb 14 02:35:41 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: 13974380 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 16686136326 for ; Fri, 14 Feb 2025 02:36:20 +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=1739500582; cv=none; b=V4hEGVXoh0KtYo6iDsgebmJzE0srW7YtShdxHNzYFMAusAhu2Sapb5EuXpyu+jJe7IoByoz+iOhuXsWBiP7FSfXJbIQVWXntOYB7TRLObV/jihITWmKJyMUdUaN3P+wvXXdiAeGhEyf2r5zyTDvesRKwCzWof6SUv2q5fEUvhAw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739500582; c=relaxed/simple; bh=EzL9kqERF1mODaTi99Vbdpckz6nLMDysk548L5d6Vb4=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=QkBHRV1VlmpBk4oAc9gY2uuJQRlyJgYa9+C+vauQhnm5oYceVJkD7SP7U8iNvzbjojVc45/NND5TmC5dkb/x/VkAmDXdo4oeotmdz/fnIfPAt40IW0cruHVgCz7RJdqh/CdjpXYtRCrI6wsq8ShuXx2oyDu73su6pnRMLCKQ/Ac= 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=F+s3kjsP; 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="F+s3kjsP" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-21f81fc2248so31889665ad.1 for ; Thu, 13 Feb 2025 18:36:20 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1739500580; x=1740105380; 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=Td3ceVC7nM5D2trC4k/dzsDkTskRZy82gMGh4G32pR8=; b=F+s3kjsPUPv+CHYZkwG1xL+KCyFn5Qpee3K0zRhsbcaaGx05yNes1Xu7tJ6tE2CPvT OgxrjaagTeysK2GWsTWmEvbx1qH7/zpWtq7h/LtkOWOoXuEB4wT9mZgm20EvNrLENXRd o36k6Ka8N58sMhftAQ5FRsWcTvkwOZq2TDeHSXWrax1GZr0jQz+BYER+6W6s7SmScpqG jHDJnTz9OpdpPIrWnX9r5t1MD5/+rQ20CdxJzuuU+PAAS6v/cmqmFYqEBsl1MyEdomCa LeCEz654/OMgRzhZwN1dTxSE2wuzIDrhUMSOje4cdeN76r3NLBA6h1Jzo94OtJ8sSl6Y L4Gg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739500580; x=1740105380; 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=Td3ceVC7nM5D2trC4k/dzsDkTskRZy82gMGh4G32pR8=; b=WlLjNQ2Ck9xvJGBORyvGN2Di65A72J16fhVIrnrwGtbbvVgOV7X4etYD/ACFio+ZYJ Uxl5Kd8O8RGQycjx+VDUhqwYwyyfiXvi15iAODoDW6lkY5btwr+q/Yvdc3zs17i9f2zu OdRVhCjBoaLO4LYDui+P1Ts1tCvKQO9kHWtSvyQqjX6sV26RhHQF1w2HkHt7G9CGg/gS Z8lmgT0avwyqmluvwbVisIgP8XjC+XiDVe3A2D8XOOJzJVacHm4OdZ8cZ/eymqc4NcU0 q74J8eYgOq4LqassBFtsT7mewGTlT90M1CCbBXg1bKANV8Aiozdfnx7m4Bbg2MgNEjLY z+Uw== X-Gm-Message-State: AOJu0YwfkPGIWUBFuaJOHdt419cdJsaUTn+AvB3gs9nQ7UJQJPzAtgg7 QPGiz47G7lFqvKPGJUfwUDJ5DIprW92S94jaZyQfEqFuphknlDKNbREsGJLZHKIxprFz9vfc9Nh YnQ== X-Google-Smtp-Source: AGHT+IEWL/tiYuXrrzRgSg6FkYb3PyvmccoXHAVXizuwydkViuZezPyz14DTdeAyr8AlWR2uoZ8puctTn34= X-Received: from plbkb11.prod.google.com ([2002:a17:903:338b:b0:220:d668:ff89]) (user=pandoh job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:950:b0:220:e63c:5b08 with SMTP id d9443c01a7336-220e63c5e07mr48241045ad.11.1739500580401; Thu, 13 Feb 2025 18:36:20 -0800 (PST) Date: Thu, 13 Feb 2025 18:35:41 -0800 In-Reply-To: <20250214023543.992372-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: <20250214023543.992372-1-pandoh@google.com> X-Mailer: git-send-email 2.48.1.601.g30ceb7b040-goog Message-ID: <20250214023543.992372-7-pandoh@google.com> Subject: [PATCH v2 6/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 , Jon Pan-Doh Add ratelimits section for rationale and defaults. Signed-off-by: Jon Pan-Doh --- Documentation/PCI/pcieaer-howto.rst | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Documentation/PCI/pcieaer-howto.rst b/Documentation/PCI/pcieaer-howto.rst index f013f3b27c82..167c0b277b62 100644 --- a/Documentation/PCI/pcieaer-howto.rst +++ b/Documentation/PCI/pcieaer-howto.rst @@ -85,6 +85,14 @@ 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 +-------------- + +Error messages are ratelimited per device and error type. This prevents +spammy devices from flooding the console and stalling execution. Set the +default ratelimit to DEFAULT_RATELIMIT_BURST over +DEFAULT_RATELIMIT_INTERVAL (10 per 5 seconds). + AER Statistics / Counters ------------------------- From patchwork Fri Feb 14 02:35:42 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: 13974381 X-Patchwork-Delegate: bhelgaas@google.com Received: from mail-oo1-f73.google.com (mail-oo1-f73.google.com [209.85.161.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 D61F9136326 for ; Fri, 14 Feb 2025 02:36:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.161.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739500585; cv=none; b=e+2qqwiWJR0/bklPdbRBdnPfRk12+m+DaGRSCgPm7sC2AnySULQQWKxi3XcJR+ad7e8J8R1KfZCBZfKEztNoA8vxIHitf3j9BTgqQf2yvRo0SvGb4gkz4ZLbGmePOETaQ+2yXkiRvZZNu3enVMKaH45aH/XOSlXO44/M3MbNreM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739500585; c=relaxed/simple; bh=zHNPwjvqMbYWPRe/BLv8C6Omqisj5M1d3E76jv1VA8w=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=hrih9f3iBLsh9QNT87gYUjMBxZ3EByTkv8inNdMuMl+ZE+xFaTFv6NtqRvIHyAfTuJRV23Bxs6B32qM+z+rXoU9/b+uAPH5QTso1eBAdkK7hwtHAali0d5xy5XGNyQCdcQlwkV+w4A4Yferr/4/wNk2hFgj3BX1UYEWfOfCxtF8= 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=q+ZzaWcN; arc=none smtp.client-ip=209.85.161.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="q+ZzaWcN" Received: by mail-oo1-f73.google.com with SMTP id 006d021491bc7-5fa6a278c85so1234668eaf.1 for ; Thu, 13 Feb 2025 18:36:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1739500583; x=1740105383; 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=9pNKB3I7BbHswYn15akFQPmWXBgHAWIqEvH/mkoVFIs=; b=q+ZzaWcNKICpnoUSBnYE4hurClRg79mtD++cxNMM8nwe1q7bsRiye9t5tCmtP0Zcqo /aXqhic8nkLEgOs8A8KdH7bZuTzo0Y8Mp6nRQWNyZ4gEFi+hPRwzsFNSbnT5M0YRZgr5 JZvkG/b/QA79FOOlKrkrSfXrCvmr5NX6aYa5x0PLTtzUEBEWp9r9Iu+16PoaqfWuvOz4 hni7uWcd2Qs9I1o4QYqn8GR9cKfTxTjYTRLAYNuLD363e0UQdNmXizk8GDWt0fJOzrq0 jZzl4lAGlJ9LoWuwt/V9R6OD4iRX0SMk4+F/a9xx66A15+9iFGKDi0GxewT5SCx1+ddQ /0Fw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739500583; x=1740105383; 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=9pNKB3I7BbHswYn15akFQPmWXBgHAWIqEvH/mkoVFIs=; b=fdcuZDjaIW5Ap2Ir5shT5D4UpPNNIfLiFjuRbZD1VJBYJ9FgIdi7QQbadre85juTI+ g2nTsh+YGQvQSgR6a6RnIe80g8ChJLjH8bSfwpYpzB2UoEvhm6vjS/ahleB+MNc81FD+ K3cPInfh4inHA+1nFLWxnWux9I3ZZEQMqA2ypxGltdA1xpeimLtRFHqPAN+MFD/IDtPj xJ7xvfBYEb58j8LXOObaWVPJbfGjP8do/kAMdzjVajfYlGErP/8ovL1Oi/G7g99r4Boc b4u9xccUrjMC8UzrURRTNQiz5+F8iZpmFEjsZSS+AwTVsMzjLPFNdo1nr+UKJylxtw/W JF2g== X-Gm-Message-State: AOJu0Yw0HITcYGO7MHRUMQsubAAOiZeFK/IF2TZlxZcRoQs5w54QWRuF rquv2I6cPYBvplzZjQReMk5RpRjMJWq5vxMDMQT+5hJd2yJVKroldsvkfEwKhKgEuMvyKRu4N6V dVA== X-Google-Smtp-Source: AGHT+IETEcb+HqvPWWcqKtpyXb7igRCn39lwXsrDdowGWQWVHtaKFahmg+pSv5Z0oMC7HkZucD5yjjeo90Q= X-Received: from oabdy38.prod.google.com ([2002:a05:6870:c7a6:b0:2bc:757d:e145]) (user=pandoh job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6870:e393:b0:296:5928:7a42 with SMTP id 586e51a60fabf-2b8dad8de41mr5414220fac.22.1739500583033; Thu, 13 Feb 2025 18:36:23 -0800 (PST) Date: Thu, 13 Feb 2025 18:35:42 -0800 In-Reply-To: <20250214023543.992372-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: <20250214023543.992372-1-pandoh@google.com> X-Mailer: git-send-email 2.48.1.601.g30ceb7b040-goog Message-ID: <20250214023543.992372-8-pandoh@google.com> Subject: [PATCH v2 7/8] PCI/AER: Add AER 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 , Jon Pan-Doh Allow userspace to read/write log ratelimits per device. Create aer/ sysfs directory to store them and any future aer configs. Tested using aer-inject[1]. Configured correctable log ratelimits to 5. Sent 6 AER errors. Observed 5 errors logged while AER stats (cat /sys/bus/pci/devices//aer_dev_correctable) shows 6. [1] https://git.kernel.org/pub/scm/linux/kernel/git/gong.chen/aer-inject.git Signed-off-by: Jon Pan-Doh --- .../testing/sysfs-bus-pci-devices-aer_stats | 20 +++++++ Documentation/PCI/pcieaer-howto.rst | 3 ++ drivers/pci/pci-sysfs.c | 1 + drivers/pci/pci.h | 1 + drivers/pci/pcie/aer.c | 52 +++++++++++++++++++ 5 files changed, 77 insertions(+) diff --git a/Documentation/ABI/testing/sysfs-bus-pci-devices-aer_stats b/Documentation/ABI/testing/sysfs-bus-pci-devices-aer_stats index d1f67bb81d5d..c1221614c079 100644 --- a/Documentation/ABI/testing/sysfs-bus-pci-devices-aer_stats +++ b/Documentation/ABI/testing/sysfs-bus-pci-devices-aer_stats @@ -117,3 +117,23 @@ 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. +Provides configurable ratelimits of logs/irq per error type. Writing a +nonzero value changes the number of errors (burst) allowed per 5 second +window before ratelimiting. Reading gets the current ratelimits. + +What: /sys/bus/pci/devices//aer/ratelimit_cor_log +Date: March 2025 +KernelVersion: 6.15.0 +Contact: linux-pci@vger.kernel.org, pandoh@google.com +Description: Log ratelimit for correctable errors. + +What: /sys/bus/pci/devices//aer/ratelimit_uncor_log +Date: March 2025 +KernelVersion: 6.15.0 +Contact: linux-pci@vger.kernel.org, pandoh@google.com +Description: Log ratelimit for uncorrectable errors. diff --git a/Documentation/PCI/pcieaer-howto.rst b/Documentation/PCI/pcieaer-howto.rst index 167c0b277b62..ab5b0f232204 100644 --- a/Documentation/PCI/pcieaer-howto.rst +++ b/Documentation/PCI/pcieaer-howto.rst @@ -93,6 +93,9 @@ spammy devices from flooding the console and stalling execution. Set the default ratelimit to DEFAULT_RATELIMIT_BURST over DEFAULT_RATELIMIT_INTERVAL (10 per 5 seconds). +Ratelimits are exposed in the form of sysfs attributes and configurable. +See Documentation/ABI/testing/sysfs-bus-pci-devices-aer_stats. + AER Statistics / Counters ------------------------- 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 26104aee06c0..26d30a99c48b 100644 --- a/drivers/pci/pci.h +++ b/drivers/pci/pci.h @@ -887,6 +887,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 c5b5381e2930..1237faee6542 100644 --- a/drivers/pci/pcie/aer.c +++ b/drivers/pci/pcie/aer.c @@ -626,6 +626,58 @@ const struct attribute_group aer_stats_attr_group = { .is_visible = aer_stats_attrs_are_visible, }; +#define aer_ratelimit_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, "%u errors every %u seconds\n", \ + pdev->aer_report->ratelimit.burst, \ + pdev->aer_report->ratelimit.interval / HZ); \ +} \ + \ + 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_attr(ratelimit_cor_log, cor_log_ratelimit); +aer_ratelimit_attr(ratelimit_uncor_log, uncor_log_ratelimit); + +static struct attribute *aer_attrs[] __ro_after_init = { + &dev_attr_ratelimit_cor_log.attr, + &dev_attr_ratelimit_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; From patchwork Fri Feb 14 02:35:43 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: 13974382 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 5DB88136326 for ; Fri, 14 Feb 2025 02:36:26 +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=1739500587; cv=none; b=npYhPq8BiijUeTl+8aoz1agWvywh+r1bIoKnXvPWF/vGguxPoVVgMHDw0AxLjFDTM0fFVHg1fWq/IeLBIRdhj+LXTnyVAy5jL1NjEPweaSAnYQ4ur2tmP1LBtVADIc5EaPqz/1weoR8lzDwi78QI/u+2oPkjUnPNwX5BaUqa8mU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739500587; c=relaxed/simple; bh=Yuq5l1NiN6fjvrrWbUu7o5sj3p+udm3WIOCWFe+Pze4=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=aJ5Tm2BPWatz5T1Rmj+TT3s/E0zDOcjeooq7X2QiYIokPBM/V2QSK74WI+7U1ABsk0UUhUt3LU6J0RxsmCcgqjsXrdlrApCA228ABaOt4SctW5V+zz+wHl+f0jt1V4+fygCqcaODEuW+vgQnCMFdBaz0TKLZnGNk4muasdhayX0= 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=0xfzyJWF; 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="0xfzyJWF" Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-2f816a85facso3345232a91.3 for ; Thu, 13 Feb 2025 18:36:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1739500586; x=1740105386; 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=CNzbR5kAPwkRGF4I5JQHtNxEieO0XebzGWjA9DqqAA4=; b=0xfzyJWFh+Q0FdzpFwGUcw0oilVdzRejGtSEHjyBcfJvptI/HBrKDRqZdYBx2mUVWz +GboayY/Pm/eTSc8aJid0iZRRo6ZEMFQCWZG8kQZojSJ/QLPBOAaoHRj449kvX31Fc29 8L6pqW2gR/o4Iid3q1RzbaS7E93R5jA3NxEpOmUnOhBhfe1n8XagbOXeox8tjmDKlVUq VvYQpvnl+JBrykZ4/14iKt3vVD/mBpwtHV2p3sH63RfbF2ZDfUkpbuRKuMjTSTjSAatQ dgzyhmebMp/4IWvjFVpe0h9M/j8bjiKJ3N1wcV2RsHVtqpq6iAB+R+NL3xB0WsyXY5im uEwQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739500586; x=1740105386; 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=CNzbR5kAPwkRGF4I5JQHtNxEieO0XebzGWjA9DqqAA4=; b=sK51nQkt6prBP61n4SreJgO2+uj0zc8EDNl6BIk6Qa12gOgGlfLbAA3OUpGQbCUPmm NzMZTmTS0oZ+8/aeFk48H+jN8HPyy0xmdCmkyeSSBX27H24N6Esr1NvIKiclElwJNyzR nmzTO2s/h29y0MAK8FSbxHLg2vxel2FhHWCPbfExlhYHsUgsh/4b7hUQCbIrfmZuyf+8 +w10I0MhPau2APzIP9Gn/2FjZt87ZIWHi2YW+OLwepXTWSCZvIYY+O1kkpdACaM07CyC wIzQ2RR2Vaz0D0jcRgCzlrNUs8wYSGMvXIi1lsaJyRu3n3IzYzM3Xn8l6NyJlRoTBwvy RQTg== X-Gm-Message-State: AOJu0YxEuXPw2QgbVc3mQHOvxnUQiFcGfot2lyzjZWHNhJ6EgaPD2+/j 8YKB/UZL43aoYZs0pMuWFnr4xNdXklgZuENbybbVsjJCFRPnUyHznGmzGTUc48dRCcSH1ZmUeDh 1mw== X-Google-Smtp-Source: AGHT+IG1g6c+44C3V48azkYXd4gzAXt2GdLC0WxcnLaJo6TRqwDB5OQDRqYp8mHnHyVAN7wVlqw1o7Qgxuw= X-Received: from pfbay3.prod.google.com ([2002:a05:6a00:3003:b0:730:8d2f:6eb1]) (user=pandoh job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:804:b0:730:75b1:721b with SMTP id d2e1a72fcca58-7322c3f6d6emr15182215b3a.18.1739500585880; Thu, 13 Feb 2025 18:36:25 -0800 (PST) Date: Thu, 13 Feb 2025 18:35:43 -0800 In-Reply-To: <20250214023543.992372-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: <20250214023543.992372-1-pandoh@google.com> X-Mailer: git-send-email 2.48.1.601.g30ceb7b040-goog Message-ID: <20250214023543.992372-9-pandoh@google.com> Subject: [PATCH v2 8/8] PCI/AER: Update AER sysfs ABI filename 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 , Jon Pan-Doh Change Documentation/ABI/testing/sysfs-bus-pci-devices-aer_stats to Documentation/ABI/testing/sysfs-bus-pci-devices-aer to reflect the broader scope of AER sysfs attributes (e.g. stats and ratelimits). Signed-off-by: Jon Pan-Doh --- ...fs-bus-pci-devices-aer_stats => sysfs-bus-pci-devices-aer} | 0 Documentation/PCI/pcieaer-howto.rst | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) rename Documentation/ABI/testing/{sysfs-bus-pci-devices-aer_stats => sysfs-bus-pci-devices-aer} (100%) diff --git a/Documentation/ABI/testing/sysfs-bus-pci-devices-aer_stats b/Documentation/ABI/testing/sysfs-bus-pci-devices-aer similarity index 100% rename from Documentation/ABI/testing/sysfs-bus-pci-devices-aer_stats rename to Documentation/ABI/testing/sysfs-bus-pci-devices-aer diff --git a/Documentation/PCI/pcieaer-howto.rst b/Documentation/PCI/pcieaer-howto.rst index ab5b0f232204..912d70b9e178 100644 --- a/Documentation/PCI/pcieaer-howto.rst +++ b/Documentation/PCI/pcieaer-howto.rst @@ -94,14 +94,14 @@ default ratelimit to DEFAULT_RATELIMIT_BURST over DEFAULT_RATELIMIT_INTERVAL (10 per 5 seconds). Ratelimits are exposed in the form of sysfs attributes and configurable. -See Documentation/ABI/testing/sysfs-bus-pci-devices-aer_stats. +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 ===============