mirror of https://gitee.com/openkylin/linux.git
staging: ion: debugfs to shrink pool
This patch enables debugfs file /sys/kernel/debug/ion/heaps/system_shrink to shrink pool and get pool size. This technically enables debugfs shrinking for all heaps, not just the system heap although the system heap is the only one with a shrinker right now. It is already implemented but not complete. This patch completes and enables it. Reading the file returns pool size in page unit and writing the number of pages shrinks pool. It flushes all pages to write zero at the file. Signed-off-by: Gioh Kim <gioh.kim@lge.com> Reviewed-by: Laura Abbott <labbott@redhat.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
b44d9ce3b8
commit
aeb7fa7b4f
|
@ -1466,7 +1466,6 @@ static const struct file_operations debug_heap_fops = {
|
||||||
.release = single_release,
|
.release = single_release,
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef DEBUG_HEAP_SHRINKER
|
|
||||||
static int debug_shrink_set(void *data, u64 val)
|
static int debug_shrink_set(void *data, u64 val)
|
||||||
{
|
{
|
||||||
struct ion_heap *heap = data;
|
struct ion_heap *heap = data;
|
||||||
|
@ -1474,15 +1473,14 @@ static int debug_shrink_set(void *data, u64 val)
|
||||||
int objs;
|
int objs;
|
||||||
|
|
||||||
sc.gfp_mask = -1;
|
sc.gfp_mask = -1;
|
||||||
sc.nr_to_scan = 0;
|
sc.nr_to_scan = val;
|
||||||
|
|
||||||
if (!val)
|
if (!val) {
|
||||||
return 0;
|
objs = heap->shrinker.count_objects(&heap->shrinker, &sc);
|
||||||
|
sc.nr_to_scan = objs;
|
||||||
|
}
|
||||||
|
|
||||||
objs = heap->shrinker.shrink(&heap->shrinker, &sc);
|
heap->shrinker.scan_objects(&heap->shrinker, &sc);
|
||||||
sc.nr_to_scan = objs;
|
|
||||||
|
|
||||||
heap->shrinker.shrink(&heap->shrinker, &sc);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1495,14 +1493,13 @@ static int debug_shrink_get(void *data, u64 *val)
|
||||||
sc.gfp_mask = -1;
|
sc.gfp_mask = -1;
|
||||||
sc.nr_to_scan = 0;
|
sc.nr_to_scan = 0;
|
||||||
|
|
||||||
objs = heap->shrinker.shrink(&heap->shrinker, &sc);
|
objs = heap->shrinker.count_objects(&heap->shrinker, &sc);
|
||||||
*val = objs;
|
*val = objs;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
DEFINE_SIMPLE_ATTRIBUTE(debug_shrink_fops, debug_shrink_get,
|
DEFINE_SIMPLE_ATTRIBUTE(debug_shrink_fops, debug_shrink_get,
|
||||||
debug_shrink_set, "%llu\n");
|
debug_shrink_set, "%llu\n");
|
||||||
#endif
|
|
||||||
|
|
||||||
void ion_device_add_heap(struct ion_device *dev, struct ion_heap *heap)
|
void ion_device_add_heap(struct ion_device *dev, struct ion_heap *heap)
|
||||||
{
|
{
|
||||||
|
@ -1540,8 +1537,7 @@ void ion_device_add_heap(struct ion_device *dev, struct ion_heap *heap)
|
||||||
path, heap->name);
|
path, heap->name);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef DEBUG_HEAP_SHRINKER
|
if (heap->shrinker.count_objects && heap->shrinker.scan_objects) {
|
||||||
if (heap->shrinker.shrink) {
|
|
||||||
char debug_name[64];
|
char debug_name[64];
|
||||||
|
|
||||||
snprintf(debug_name, 64, "%s_shrink", heap->name);
|
snprintf(debug_name, 64, "%s_shrink", heap->name);
|
||||||
|
@ -1556,7 +1552,7 @@ void ion_device_add_heap(struct ion_device *dev, struct ion_heap *heap)
|
||||||
path, debug_name);
|
path, debug_name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
up_write(&dev->lock);
|
up_write(&dev->lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue