adf_dev_restarting_notify(accel_dev); if (adf_dev_restart(accel_dev)) { /* The device hanged and we can't restart it so stop here */
dev_err(&GET_DEV(accel_dev), "Restart device failed\n"); if (reset_data->mode == ADF_DEV_RESET_ASYNC)
kfree(reset_data);
WARN(1, "QAT: device restart failed. Device is unusable\n"); return;
}
/* The dev is back alive. Notify the caller if in sync mode */ if (reset_data->mode == ADF_DEV_RESET_ASYNC)
kfree(reset_data); else
complete(&reset_data->compl);
}
/* If in sync mode wait for the result */ if (mode == ADF_DEV_RESET_SYNC) { int ret = 0; /* Maximum device reset time is 10 seconds */ unsignedlong wait_jiffies = msecs_to_jiffies(10000); unsignedlong timeout = wait_for_completion_timeout(
&reset_data->compl, wait_jiffies); if (!timeout) {
dev_err(&GET_DEV(accel_dev), "Reset device timeout expired\n");
cancel_work_sync(&reset_data->reset_work);
ret = -EFAULT;
}
kfree(reset_data); return ret;
} return 0;
}
static pci_ers_result_t adf_slot_reset(struct pci_dev *pdev)
{ struct adf_accel_dev *accel_dev = adf_devmgr_pci_to_accel_dev(pdev); int res = 0;
if (!pdev->is_busmaster)
pci_set_master(pdev);
pci_restore_state(pdev);
pci_save_state(pdev);
res = adf_dev_up(accel_dev, false); if (res && res != -EALREADY) return PCI_ERS_RESULT_DISCONNECT;
if (!accel_dev->is_vf) { /* Disable arbitration to stop processing of new requests */ if (accel_dev->autoreset_on_error && hw_device->exit_arb)
hw_device->exit_arb(accel_dev); if (accel_dev->pf.vf_info)
adf_pf2vf_notify_fatal_error(accel_dev);
adf_dev_autoreset(accel_dev);
}
kfree(wq_data);
}
int adf_notify_fatal_error(struct adf_accel_dev *accel_dev)
{ struct adf_fatal_error_data *wq_data;
wq_data = kzalloc(sizeof(*wq_data), GFP_ATOMIC); if (!wq_data) return -ENOMEM;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.