@@ -42,7 +42,7 @@ struct dpc_dev {
struct work_struct work;
int cap_pos;
bool rp;
- struct dpc_rp_pio_regs *rp_pio;
+ u32 rp_pio_status;
};
static const char * const rp_pio_error_string[] = {
@@ -123,10 +123,10 @@ static void interrupt_event_handler(struct work_struct *work)
dpc_wait_link_inactive(pdev);
if (dpc->rp && dpc_wait_rp_inactive(dpc))
return;
- if (dpc->rp && dpc->rp_pio->status)
+ if (dpc->rp && dpc->rp_pio_status)
pci_write_config_dword(pdev,
dpc->cap_pos + PCI_EXP_DPC_RP_PIO_STATUS,
- dpc->rp_pio->status);
+ dpc->rp_pio_status);
pci_write_config_word(pdev, dpc->cap_pos + PCI_EXP_DPC_STATUS,
PCI_EXP_DPC_STATUS_TRIGGER | PCI_EXP_DPC_STATUS_INTERRUPT);
@@ -139,10 +139,9 @@ static void dpc_rp_pio_print_tlp_header(struct pci_dev *dev,
t->dw0, t->dw1, t->dw2, t->dw3);
}
-static void dpc_rp_pio_print_error(struct dpc_dev *dpc)
+static void dpc_rp_pio_print_error(struct dpc_dev *dpc, struct dpc_rp_pio_regs *rp_pio)
{
struct pci_dev *pdev = dpc->dev->port;
- struct dpc_rp_pio_regs *rp_pio = dpc->rp_pio;
int i;
u32 status;
@@ -172,10 +171,9 @@ static void dpc_rp_pio_print_error(struct dpc_dev *dpc)
rp_pio->tlp_prefix_log[i]);
}
-static void dpc_rp_pio_get_info(struct dpc_dev *dpc)
+static void dpc_rp_pio_get_info(struct dpc_dev *dpc, struct dpc_rp_pio_regs *rp_pio)
{
struct pci_dev *pdev = dpc->dev->port;
- struct dpc_rp_pio_regs *rp_pio = dpc->rp_pio;
int i;
u16 cap;
u16 status;
@@ -230,8 +228,12 @@ static void dpc_rp_pio_get_info(struct dpc_dev *dpc)
static void dpc_precess_rp_pio_error(struct dpc_dev *dpc)
{
- dpc_rp_pio_get_info(dpc);
- dpc_rp_pio_print_error(dpc);
+ struct dpc_rp_pio_regs rp_pio_regs;
+
+ dpc_rp_pio_get_info(dpc, &rp_pio_regs);
+ dpc_rp_pio_print_error(dpc, &rp_pio_regs);
+
+ dpc->rp_pio_status = rp_pio_regs.status;
}
static irqreturn_t dpc_irq(int irq, void *context)
@@ -299,12 +301,6 @@ static int dpc_probe(struct pcie_device *dev)
dpc->rp = (cap & PCI_EXP_DPC_CAP_RP_EXT);
- if (dpc->rp) {
- dpc->rp_pio = devm_kzalloc(&pdev->dev, sizeof(*dpc->rp_pio),
- GFP_KERNEL);
- if (!dpc->rp_pio)
- return -ENOMEM;
- }
Thanks
Dongdong