mirror of
https://github.com/torvalds/linux.git
synced 2024-11-06 03:51:48 +00:00
[POWERPC] pseries: phyp dump: Tracking memory range freed
This tracks the size freed. For now it does a simple rudimentary calculation of the ranges freed. The idea is to keep it simple at the external shell script level and send in large chunks for now. Signed-off-by: Manish Ahuja <mahuja@us.ibm.com> Signed-off-by: Paul Mackerras <paulus@samba.org>
This commit is contained in:
parent
a9c508dae1
commit
fd35cff8d2
@ -261,6 +261,39 @@ static void release_memory_range(unsigned long start_pfn,
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* track_freed_range -- Counts the range being freed.
|
||||
* Once the counter goes to zero, it re-registers dump for
|
||||
* future use.
|
||||
*/
|
||||
static void
|
||||
track_freed_range(unsigned long addr, unsigned long length)
|
||||
{
|
||||
static unsigned long scratch_area_size, reserved_area_size;
|
||||
|
||||
if (addr < phyp_dump_info->init_reserve_start)
|
||||
return;
|
||||
|
||||
if ((addr >= phyp_dump_info->init_reserve_start) &&
|
||||
(addr <= phyp_dump_info->init_reserve_start +
|
||||
phyp_dump_info->init_reserve_size))
|
||||
reserved_area_size += length;
|
||||
|
||||
if ((addr >= phyp_dump_info->reserved_scratch_addr) &&
|
||||
(addr <= phyp_dump_info->reserved_scratch_addr +
|
||||
phyp_dump_info->reserved_scratch_size))
|
||||
scratch_area_size += length;
|
||||
|
||||
if ((reserved_area_size == phyp_dump_info->init_reserve_size) &&
|
||||
(scratch_area_size == phyp_dump_info->reserved_scratch_size)) {
|
||||
|
||||
invalidate_last_dump(&phdr,
|
||||
phyp_dump_info->reserved_scratch_addr);
|
||||
register_dump_area(&phdr,
|
||||
phyp_dump_info->reserved_scratch_addr);
|
||||
}
|
||||
}
|
||||
|
||||
/* ------------------------------------------------- */
|
||||
/**
|
||||
* sysfs_release_region -- sysfs interface to release memory range.
|
||||
@ -285,6 +318,8 @@ static ssize_t store_release_region(struct kobject *kobj,
|
||||
if (ret != 2)
|
||||
return -EINVAL;
|
||||
|
||||
track_freed_range(start_addr, length);
|
||||
|
||||
/* Range-check - don't free any reserved memory that
|
||||
* wasn't reserved for phyp-dump */
|
||||
if (start_addr < phyp_dump_info->init_reserve_start)
|
||||
|
Loading…
Reference in New Issue
Block a user