crypto: qat - add sysfs_added flag for ras
The qat_ras sysfs attribute group is registered within the adf_dev_start() function, alongside other driver components. If any of the functions preceding the group registration fails, the adf_dev_start() function returns, and the caller, to undo the operation, invokes adf_dev_stop() followed by adf_dev_shutdown(). However, the current flow lacks information about whether the registration of the qat_ras attribute group was successful or not. In cases where this condition is encountered, an error similar to the following might be reported: 4xxx 0000:6b:00.0: Starting device qat_dev0 4xxx 0000:6b:00.0: qat_dev0 started 9 acceleration engines 4xxx 0000:6b:00.0: Failed to send init message 4xxx 0000:6b:00.0: Failed to start device qat_dev0 sysfs group 'qat_ras' not found for kobject '0000:6b:00.0' ... sysfs_remove_groups+0x29/0x50 adf_sysfs_stop_ras+0x4b/0x80 [intel_qat] adf_dev_stop+0x43/0x1d0 [intel_qat] adf_dev_down+0x4b/0x150 [intel_qat] ... 4xxx 0000:6b:00.0: qat_dev0 stopped 9 acceleration engines 4xxx 0000:6b:00.0: Resetting device qat_dev0 To prevent attempting to remove attributes from a group that has not been added yet, a flag named 'sysfs_added' is introduced. This flag is set to true upon the successful registration of the attribute group. Fixes: 532d7f6bc458 ("crypto: qat - add error counters") Signed-off-by: Damian Muszynski <damian.muszynski@intel.com> Reviewed-by: Giovanni Cabiddu <giovanni.cabiddu@intel.com> Reviewed-by: Ahsan Atta <ahsan.atta@intel.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
parent
2d37b3649c
commit
65089000ba
@ -92,6 +92,7 @@ enum ras_errors {
|
|||||||
|
|
||||||
struct adf_error_counters {
|
struct adf_error_counters {
|
||||||
atomic_t counter[ADF_RAS_ERRORS];
|
atomic_t counter[ADF_RAS_ERRORS];
|
||||||
|
bool sysfs_added;
|
||||||
bool enabled;
|
bool enabled;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -99,6 +99,8 @@ void adf_sysfs_start_ras(struct adf_accel_dev *accel_dev)
|
|||||||
if (device_add_group(&GET_DEV(accel_dev), &qat_ras_group))
|
if (device_add_group(&GET_DEV(accel_dev), &qat_ras_group))
|
||||||
dev_err(&GET_DEV(accel_dev),
|
dev_err(&GET_DEV(accel_dev),
|
||||||
"Failed to create qat_ras attribute group.\n");
|
"Failed to create qat_ras attribute group.\n");
|
||||||
|
|
||||||
|
accel_dev->ras_errors.sysfs_added = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void adf_sysfs_stop_ras(struct adf_accel_dev *accel_dev)
|
void adf_sysfs_stop_ras(struct adf_accel_dev *accel_dev)
|
||||||
@ -106,7 +108,10 @@ void adf_sysfs_stop_ras(struct adf_accel_dev *accel_dev)
|
|||||||
if (!accel_dev->ras_errors.enabled)
|
if (!accel_dev->ras_errors.enabled)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
device_remove_group(&GET_DEV(accel_dev), &qat_ras_group);
|
if (accel_dev->ras_errors.sysfs_added) {
|
||||||
|
device_remove_group(&GET_DEV(accel_dev), &qat_ras_group);
|
||||||
|
accel_dev->ras_errors.sysfs_added = false;
|
||||||
|
}
|
||||||
|
|
||||||
ADF_RAS_ERR_CTR_CLEAR(accel_dev->ras_errors);
|
ADF_RAS_ERR_CTR_CLEAR(accel_dev->ras_errors);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user