mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-30 10:49:28 +00:00
PCI/AER: Reorder code to group probe/remove stuff together
Reorder code to group probe/remove stuff together. No functional change intended. Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> Reviewed-by: Keith Busch <keith.busch@intel.com>
This commit is contained in:
parent
0054ca8e10
commit
3c43a64cb3
1 changed files with 58 additions and 58 deletions
|
@ -35,6 +35,64 @@ bool pci_aer_available(void)
|
||||||
return !pcie_aer_disable && pci_msi_enabled();
|
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)
|
static int set_device_error_reporting(struct pci_dev *dev, void *data)
|
||||||
{
|
{
|
||||||
bool enable = *((bool *)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);
|
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
|
* aer_alloc_rpc - allocate Root Port data structure
|
||||||
* @dev: pointer to the pcie_dev data structure
|
* @dev: pointer to the pcie_dev data structure
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue