remoteproc: Add mechanism for custom dump function assignment
This patch adds a mechanism for assigning each rproc dump segment with a custom dump function and private data. The dump function is to be called for each rproc segment during coredump if assigned. Signed-off-by: Sibi Sankar <sibis@codeaurora.org> [bjorn: reordred arguments to rproc_coredump_add_custom_segment()] Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
This commit is contained in:
parent
3952105df4
commit
ab8f873bb9
|
@ -1446,6 +1446,44 @@ int rproc_coredump_add_segment(struct rproc *rproc, dma_addr_t da, size_t size)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(rproc_coredump_add_segment);
|
EXPORT_SYMBOL(rproc_coredump_add_segment);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* rproc_coredump_add_custom_segment() - add custom coredump segment
|
||||||
|
* @rproc: handle of a remote processor
|
||||||
|
* @da: device address
|
||||||
|
* @size: size of segment
|
||||||
|
* @dumpfn: custom dump function called for each segment during coredump
|
||||||
|
* @priv: private data
|
||||||
|
*
|
||||||
|
* Add device memory to the list of segments to be included in the coredump
|
||||||
|
* and associate the segment with the given custom dump function and private
|
||||||
|
* data.
|
||||||
|
*
|
||||||
|
* Return: 0 on success, negative errno on error.
|
||||||
|
*/
|
||||||
|
int rproc_coredump_add_custom_segment(struct rproc *rproc,
|
||||||
|
dma_addr_t da, size_t size,
|
||||||
|
void (*dumpfn)(struct rproc *rproc,
|
||||||
|
struct rproc_dump_segment *segment,
|
||||||
|
void *dest),
|
||||||
|
void *priv)
|
||||||
|
{
|
||||||
|
struct rproc_dump_segment *segment;
|
||||||
|
|
||||||
|
segment = kzalloc(sizeof(*segment), GFP_KERNEL);
|
||||||
|
if (!segment)
|
||||||
|
return -ENOMEM;
|
||||||
|
|
||||||
|
segment->da = da;
|
||||||
|
segment->size = size;
|
||||||
|
segment->priv = priv;
|
||||||
|
segment->dump = dumpfn;
|
||||||
|
|
||||||
|
list_add_tail(&segment->node, &rproc->dump_segments);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(rproc_coredump_add_custom_segment);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* rproc_coredump() - perform coredump
|
* rproc_coredump() - perform coredump
|
||||||
* @rproc: rproc handle
|
* @rproc: rproc handle
|
||||||
|
|
|
@ -592,6 +592,12 @@ int rproc_boot(struct rproc *rproc);
|
||||||
void rproc_shutdown(struct rproc *rproc);
|
void rproc_shutdown(struct rproc *rproc);
|
||||||
void rproc_report_crash(struct rproc *rproc, enum rproc_crash_type type);
|
void rproc_report_crash(struct rproc *rproc, enum rproc_crash_type type);
|
||||||
int rproc_coredump_add_segment(struct rproc *rproc, dma_addr_t da, size_t size);
|
int rproc_coredump_add_segment(struct rproc *rproc, dma_addr_t da, size_t size);
|
||||||
|
int rproc_coredump_add_custom_segment(struct rproc *rproc,
|
||||||
|
dma_addr_t da, size_t size,
|
||||||
|
void (*dumpfn)(struct rproc *rproc,
|
||||||
|
struct rproc_dump_segment *segment,
|
||||||
|
void *dest),
|
||||||
|
void *priv);
|
||||||
|
|
||||||
static inline struct rproc_vdev *vdev_to_rvdev(struct virtio_device *vdev)
|
static inline struct rproc_vdev *vdev_to_rvdev(struct virtio_device *vdev)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue