Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 91450
b: refs/heads/master
c: fd35cff
h: refs/heads/master
v: v3
  • Loading branch information
Manish Ahuja authored and Paul Mackerras committed Mar 25, 2008
1 parent 091ef5a commit 3551264
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 1 deletion.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: a9c508dae10a821dc95653178eec018abc90482e
refs/heads/master: fd35cff8d285c6ae30c66a70321ebbcd2a4615ec
35 changes: 35 additions & 0 deletions trunk/arch/powerpc/platforms/pseries/phyp_dump.c
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand All @@ -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)
Expand Down

0 comments on commit 3551264

Please sign in to comment.