Received: by 2002:ac0:a5b6:0:0:0:0:0 with SMTP id m51-v6csp1275463imm; Fri, 8 Jun 2018 13:06:02 -0700 (PDT) X-Google-Smtp-Source: ADUXVKK5KqxJ7eFfR1dJ/43teZcggECgDF1tkgbpGd4JPcYwprHtPyZQXiP/Q1LHgNgs6RrC4pc7 X-Received: by 2002:a63:65c2:: with SMTP id z185-v6mr6429088pgb.163.1528488362734; Fri, 08 Jun 2018 13:06:02 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1528488362; cv=none; d=google.com; s=arc-20160816; b=siSZvUWhXmFYS35nKRsr6JZ15MUwcWHIZ/I/DrpqX0mD0x36d+BNyMlzUxxZZpBoDy pipqWLR7/yYEbPymCbSpH5RqhONlkwrVuCri3pFTT6Q8cE7lcSllCBACddhxxrFivDNq YiQlAlswwU8fBJuyzP2S6lOwz3qRrdkmjiPQLAQKMRsJgSangwICyFckMbPlZhksSeFD 3dVzFrLAEvBYkP0vR/tnKI6zotvkxk3sJ7L5qgGO2oRpGVXSreqpp3gLZgw4fxmihxaY mu4labhXptzZfn1RPcYswCnpo2fyZY7mhnP6JDceSdeqr3dhlk5iGQ5jy0xxken2NVoA Lc0A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:cc:to:from :subject:dkim-signature:arc-authentication-results; bh=F/JLP3QipJd3sehmO5siTquwxdi/XeE6tMuuRvlJGsQ=; b=nHNzFJQfQIFUdIpCd3xql0gPDyMyuI4Jjx161wEjwkEP+nIG1gt/MiKNindbuIq3rO YUHyfyg5xDYcqj0OmeNVcMwKOomblnn8rNVtmu2YWQu34LnaPFI0pyrbsWij12OTi0vO nC27hS0Jn0yB/3YsrLKGaFK3xLMyxNHQEK4FLxOj7Ghus+xVM7syg3ebs5AKe4d6zLRn Jdw4BJwTIouJZOULA4lbZ5zIUpVZ4KdUgLolPoRhkRKQMYh+Swt6dhfaJBskAQTtGH1P +zeV+7UbX7khFerd+3ZTemFMe9MBTKnWfntuVkbCLDlj8joDM7ZDWXeGmnT6rrXh3aNE rZwA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=N+qtlHPw; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id ay5-v6si55575814plb.459.2018.06.08.13.05.48; Fri, 08 Jun 2018 13:06:02 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=N+qtlHPw; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752946AbeFHUFC (ORCPT + 99 others); Fri, 8 Jun 2018 16:05:02 -0400 Received: from mail.kernel.org ([198.145.29.99]:48778 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752910AbeFHUE7 (ORCPT ); Fri, 8 Jun 2018 16:04:59 -0400 Received: from localhost (unknown [150.199.191.185]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id C00DE20874; Fri, 8 Jun 2018 20:04:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1528488299; bh=Ziul8qsl6lk1Qi5XCu1Ew27xtDs+019j5RoIQPU84bg=; h=Subject:From:To:Cc:Date:In-Reply-To:References:From; b=N+qtlHPw4dAY7MLayPg01SwslpMc1bXb5ArPi1sAaI8JXQ6WHwvNyQ/M9dVW++Ewm bP/FKFisiEIM6eLZ0fr38x2ywAlEDiTUe2jl0ptox8xEt7BHKpdeuLYwVXMZSh+7i4 wMDmAmJ5XBQERFN4omNrG0NTpAm27skVBYw5pPh4= Subject: [PATCH v1 02/13] PCI/AER: Reorder code to group probe/remove stuff together From: Bjorn Helgaas To: linux-pci@vger.kernel.org Cc: Keith Busch , Borislav Petkov , Oza Pawandeep , linux-kernel@vger.kernel.org Date: Fri, 08 Jun 2018 15:04:58 -0500 Message-ID: <152848829801.11888.15206194993821178939.stgit@bhelgaas-glaptop.roam.corp.google.com> In-Reply-To: <152848785553.11888.12243539903985770441.stgit@bhelgaas-glaptop.roam.corp.google.com> References: <152848785553.11888.12243539903985770441.stgit@bhelgaas-glaptop.roam.corp.google.com> User-Agent: StGit/0.18 MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Bjorn Helgaas Reorder code to group probe/remove stuff together. No functional change intended. Signed-off-by: Bjorn Helgaas --- drivers/pci/pcie/aer/aerdrv.c | 116 +++++++++++++++++++++-------------------- 1 file changed, 58 insertions(+), 58 deletions(-) diff --git a/drivers/pci/pcie/aer/aerdrv.c b/drivers/pci/pcie/aer/aerdrv.c index c6d1b664a6ea..8d3bc28821ba 100644 --- a/drivers/pci/pcie/aer/aerdrv.c +++ b/drivers/pci/pcie/aer/aerdrv.c @@ -35,6 +35,64 @@ bool pci_aer_available(void) return !pcie_aer_disable && pci_msi_enabled(); } +/** + * aer_irq - Root Port's ISR + * @irq: IRQ assigned to Root Port + * @context: pointer to Root Port data structure + * + * Invoked when Root Port detects AER messages. + */ +irqreturn_t aer_irq(int irq, void *context) +{ + unsigned int status, id; + struct pcie_device *pdev = (struct pcie_device *)context; + struct aer_rpc *rpc = get_service_data(pdev); + int next_prod_idx; + unsigned long flags; + int pos; + + pos = pdev->port->aer_cap; + /* + * Must lock access to Root Error Status Reg, Root Error ID Reg, + * and Root error producer/consumer index + */ + spin_lock_irqsave(&rpc->e_lock, flags); + + /* Read error status */ + pci_read_config_dword(pdev->port, pos + PCI_ERR_ROOT_STATUS, &status); + if (!(status & (PCI_ERR_ROOT_UNCOR_RCV|PCI_ERR_ROOT_COR_RCV))) { + spin_unlock_irqrestore(&rpc->e_lock, flags); + return IRQ_NONE; + } + + /* Read error source and clear error status */ + pci_read_config_dword(pdev->port, pos + PCI_ERR_ROOT_ERR_SRC, &id); + pci_write_config_dword(pdev->port, pos + PCI_ERR_ROOT_STATUS, status); + + /* Store error source for later DPC handler */ + next_prod_idx = rpc->prod_idx + 1; + if (next_prod_idx == AER_ERROR_SOURCES_MAX) + next_prod_idx = 0; + if (next_prod_idx == rpc->cons_idx) { + /* + * Error Storm Condition - possibly the same error occurred. + * Drop the error. + */ + spin_unlock_irqrestore(&rpc->e_lock, flags); + return IRQ_HANDLED; + } + rpc->e_sources[rpc->prod_idx].status = status; + rpc->e_sources[rpc->prod_idx].id = id; + rpc->prod_idx = next_prod_idx; + spin_unlock_irqrestore(&rpc->e_lock, flags); + + /* Invoke DPC handler */ + schedule_work(&rpc->dpc_handler); + + return IRQ_HANDLED; +} +EXPORT_SYMBOL_GPL(aer_irq); + static int set_device_error_reporting(struct pci_dev *dev, void *data) { bool enable = *((bool *)data); @@ -141,64 +199,6 @@ static void aer_disable_rootport(struct aer_rpc *rpc) pci_write_config_dword(pdev, pos + PCI_ERR_ROOT_STATUS, reg32); } -/** - * aer_irq - Root Port's ISR - * @irq: IRQ assigned to Root Port - * @context: pointer to Root Port data structure - * - * Invoked when Root Port detects AER messages. - */ -irqreturn_t aer_irq(int irq, void *context) -{ - unsigned int status, id; - struct pcie_device *pdev = (struct pcie_device *)context; - struct aer_rpc *rpc = get_service_data(pdev); - int next_prod_idx; - unsigned long flags; - int pos; - - pos = pdev->port->aer_cap; - /* - * Must lock access to Root Error Status Reg, Root Error ID Reg, - * and Root error producer/consumer index - */ - spin_lock_irqsave(&rpc->e_lock, flags); - - /* Read error status */ - pci_read_config_dword(pdev->port, pos + PCI_ERR_ROOT_STATUS, &status); - if (!(status & (PCI_ERR_ROOT_UNCOR_RCV|PCI_ERR_ROOT_COR_RCV))) { - spin_unlock_irqrestore(&rpc->e_lock, flags); - return IRQ_NONE; - } - - /* Read error source and clear error status */ - pci_read_config_dword(pdev->port, pos + PCI_ERR_ROOT_ERR_SRC, &id); - pci_write_config_dword(pdev->port, pos + PCI_ERR_ROOT_STATUS, status); - - /* Store error source for later DPC handler */ - next_prod_idx = rpc->prod_idx + 1; - if (next_prod_idx == AER_ERROR_SOURCES_MAX) - next_prod_idx = 0; - if (next_prod_idx == rpc->cons_idx) { - /* - * Error Storm Condition - possibly the same error occurred. - * Drop the error. - */ - spin_unlock_irqrestore(&rpc->e_lock, flags); - return IRQ_HANDLED; - } - rpc->e_sources[rpc->prod_idx].status = status; - rpc->e_sources[rpc->prod_idx].id = id; - rpc->prod_idx = next_prod_idx; - spin_unlock_irqrestore(&rpc->e_lock, flags); - - /* Invoke DPC handler */ - schedule_work(&rpc->dpc_handler); - - return IRQ_HANDLED; -} -EXPORT_SYMBOL_GPL(aer_irq); - /** * aer_alloc_rpc - allocate Root Port data structure * @dev: pointer to the pcie_dev data structure