soc: qcom: pil: Do not do complete ramdump for minidump elf32

If minidump is configured to be ELF32, avoid using complete
ramdump property, so that only the required segments area is
dumped.

Change-Id: I34fe359204309fda47d0a665ca641cb042d87054
Signed-off-by: Neeraj Upadhyay <neeraju@codeaurora.org>
Signed-off-by: Mukesh Ojha <mojha@codeaurora.org>
This commit is contained in:
Neeraj Upadhyay 2019-10-22 23:47:31 +05:30 committed by Mukesh Ojha
parent b82c85fc28
commit d7b8ff66af
3 changed files with 34 additions and 6 deletions

View File

@ -413,8 +413,8 @@ static int pil_do_minidump(struct pil_desc *desc, void *ramdump_dev)
}
if (desc->minidump_as_elf32)
ret = do_elf_ramdump(ramdump_dev, ramdump_segs,
ss_valid_seg_cnt);
ret = do_minidump_elf32(ramdump_dev, ramdump_segs,
ss_valid_seg_cnt);
else
ret = do_minidump(ramdump_dev, ramdump_segs, ss_valid_seg_cnt);
if (ret)

View File

@ -399,7 +399,7 @@ void destroy_ramdump_device(void *dev)
EXPORT_SYMBOL(destroy_ramdump_device);
static int _do_ramdump(void *handle, struct ramdump_segment *segments,
int nsegments, bool use_elf)
int nsegments, bool use_elf, bool complete_ramdump)
{
int ret, i;
struct ramdump_device *rd_dev = (struct ramdump_device *)handle;
@ -427,7 +427,7 @@ static int _do_ramdump(void *handle, struct ramdump_segment *segments,
return -EPIPE;
}
if (rd_dev->complete_ramdump) {
if (complete_ramdump) {
for (i = 0; i < nsegments-1; i++)
segments[i].size =
segments[i + 1].address - segments[i].address;
@ -628,7 +628,10 @@ static int _do_minidump(void *handle, struct ramdump_segment *segments,
int do_ramdump(void *handle, struct ramdump_segment *segments, int nsegments)
{
return _do_ramdump(handle, segments, nsegments, false);
struct ramdump_device *rd_dev = (struct ramdump_device *)handle;
return _do_ramdump(handle, segments, nsegments, false,
rd_dev->complete_ramdump);
}
EXPORT_SYMBOL(do_ramdump);
@ -638,10 +641,20 @@ int do_minidump(void *handle, struct ramdump_segment *segments, int nsegments)
}
EXPORT_SYMBOL(do_minidump);
int do_minidump_elf32(void *handle, struct ramdump_segment *segments,
int nsegments)
{
return _do_ramdump(handle, segments, nsegments, true, false);
}
EXPORT_SYMBOL(do_minidump_elf32);
int
do_elf_ramdump(void *handle, struct ramdump_segment *segments, int nsegments)
{
return _do_ramdump(handle, segments, nsegments, true);
struct ramdump_device *rd_dev = (struct ramdump_device *)handle;
return _do_ramdump(handle, segments, nsegments, true,
rd_dev->complete_ramdump);
}
EXPORT_SYMBOL(do_elf_ramdump);

View File

@ -39,6 +39,8 @@ extern int do_elf_ramdump(void *handle, struct ramdump_segment *segments,
int nsegments);
extern int do_minidump(void *handle, struct ramdump_segment *segments,
int nsegments);
extern int do_minidump_elf32(void *handle, struct ramdump_segment *segments,
int nsegments);
#else
static inline void *create_ramdump_device(const char *dev_name,
@ -62,6 +64,19 @@ static inline int do_elf_ramdump(void *handle, struct ramdump_segment *segments,
{
return -ENODEV;
}
static inline int do_minidump(void *handle, struct ramdump_segment *segments,
int nsegments)
{
return -ENODEV;
}
static inline int do_minidump_elf32(void *handle,
struct ramdump_segment *segments, int nsegments)
{
return -ENODEV;
}
#endif /* CONFIG_MSM_SUBSYSTEM_RESTART */
#endif