/* * By writing to the 'recovery' sysfs entry, we control the behavior of the * recovery mechanism dynamically. The default value of this entry is "enabled". * * The 'recovery' sysfs entry supports these commands: * * enabled: When enabled, the remote processor will be automatically * recovered whenever it crashes. Moreover, if the remote * processor crashes while recovery is disabled, it will * be automatically recovered too as soon as recovery is enabled. * * disabled: When disabled, a remote processor will remain in a crashed * state if it crashes. This is useful for debugging purposes; * without it, debugging a crash is substantially harder. * * recover: This function will trigger an immediate recovery if the * remote processor is in a crashed state, without changing * or checking the recovery state (enabled/disabled). * This is useful during debugging sessions, when one expects * additional crashes to happen after enabling recovery. In this * case, enabling recovery will make it hard to debug subsequent * crashes, so it's recommended to keep recovery disabled, and * instead use the "recover" command as needed.
*/ static ssize_t recovery_store(struct device *dev, struct device_attribute *attr, constchar *buf, size_t count)
{ struct rproc *rproc = to_rproc(dev);
if (sysfs_streq(buf, "enabled")) { /* change the flag and begin the recovery process if needed */
rproc->recovery_disabled = false;
rproc_trigger_recovery(rproc);
} elseif (sysfs_streq(buf, "disabled")) {
rproc->recovery_disabled = true;
} elseif (sysfs_streq(buf, "recover")) { /* begin the recovery process without changing the flag */
rproc_trigger_recovery(rproc);
} else { return -EINVAL;
}
return count;
} static DEVICE_ATTR_RW(recovery);
/* * A coredump-configuration-to-string lookup table, for exposing a * human readable configuration via sysfs. Always keep in sync with * enum rproc_coredump_mechanism
*/ staticconstchar * const rproc_coredump_str[] = {
[RPROC_COREDUMP_DISABLED] = "disabled",
[RPROC_COREDUMP_ENABLED] = "enabled",
[RPROC_COREDUMP_INLINE] = "inline",
};
/* Expose the current coredump configuration via debugfs */ static ssize_t coredump_show(struct device *dev, struct device_attribute *attr, char *buf)
{ struct rproc *rproc = to_rproc(dev);
/* * By writing to the 'coredump' sysfs entry, we control the behavior of the * coredump mechanism dynamically. The default value of this entry is "default". * * The 'coredump' sysfs entry supports these commands: * * disabled: This is the default coredump mechanism. Recovery will proceed * without collecting any dump. * * default: When the remoteproc crashes the entire coredump will be * copied to a separate buffer and exposed to userspace. * * inline: The coredump will not be copied to a separate buffer and the * recovery process will have to wait until data is read by * userspace. But this avoid usage of extra memory.
*/ static ssize_t coredump_store(struct device *dev, struct device_attribute *attr, constchar *buf, size_t count)
{ struct rproc *rproc = to_rproc(dev);
/* * If the remote processor has been started by an external * entity we have no idea of what image it is running. As such * simply display a generic string rather then rproc->firmware.
*/ if (rproc->state == RPROC_ATTACHED)
firmware = "unknown";
return sprintf(buf, "%s\n", firmware);
}
/* Change firmware name via sysfs */ static ssize_t firmware_store(struct device *dev, struct device_attribute *attr, constchar *buf, size_t count)
{ struct rproc *rproc = to_rproc(dev); int err;
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.