Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f4aa4355 authored by qctecmdr's avatar qctecmdr Committed by Gerrit - the friendly Code Review server
Browse files

Merge "mm: slub: update slab_alloc interface to capture slab stacks"

parents 6bd93187 891d9b3e
Loading
Loading
Loading
Loading
+22 −0
Original line number Diff line number Diff line
@@ -4568,6 +4568,9 @@ struct location {
	long max_pid;
	DECLARE_BITMAP(cpus, NR_CPUS);
	nodemask_t nodes;
#ifdef CONFIG_STACKTRACE
	unsigned long addrs[TRACK_ADDRS_COUNT]; /* Called from address */
#endif
};

struct loc_track {
@@ -4610,6 +4613,7 @@ static int add_location(struct loc_track *t, struct kmem_cache *s,
	struct location *l;
	unsigned long caddr;
	unsigned long age = jiffies - track->when;
	unsigned int i = 0;

	start = -1;
	end = t->count;
@@ -4667,6 +4671,15 @@ static int add_location(struct loc_track *t, struct kmem_cache *s,
	t->count++;
	l->count = 1;
	l->addr = track->addr;
#ifdef CONFIG_STACKTRACE
	for (i = 0; i < TRACK_ADDRS_COUNT; i++)
		if (l->addrs[i]) {
			l->addrs[i] = track->addrs[i];
			continue;
		} else
			break;

#endif
	l->sum_time = age;
	l->min_time = age;
	l->max_time = age;
@@ -6126,10 +6139,19 @@ static int alloc_trace_locations(struct seq_file *seq, struct kmem_cache *s,

	for (i = 0; i < t.count; i++) {
		struct location *l = &t.loc[i];
		unsigned int j = 0;

		seq_printf(seq,
		"alloc_list: call_site=%pS count=%zu object_size=%zu slab_size=%zu slab_name=%s\n",
			l->addr, l->count, s->object_size, s->size, s->name);
#ifdef CONFIG_STACKTRACE
		for (j = 0; j < TRACK_ADDRS_COUNT; j++)
			if (l->addrs[j]) {
				seq_printf(seq, "%pS\n", l->addrs[j]);
				continue;
			} else
				break;
#endif
	}

	free_loc_track(&t);