diff options
| author | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2013-05-27 10:42:53 +0900 | 
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2013-05-27 10:42:53 +0900 | 
| commit | 4993632218e2202d4f110c8e83ae819ca26e6845 (patch) | |
| tree | 0872195b8c09b03d54adaaaf4304d1285091b031 /tools/perf/scripts/python/net_dropmonitor.py | |
| parent | 1c4e2d70afb132058bfe979f6854c1d0a732b556 (diff) | |
| parent | e4aa937ec75df0eea0bee03bffa3303ad36c986b (diff) | |
Merge 3.10-rc3 into driver-core-next
We want the changes here.
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'tools/perf/scripts/python/net_dropmonitor.py')
| -rwxr-xr-x | tools/perf/scripts/python/net_dropmonitor.py | 39 | 
1 files changed, 21 insertions, 18 deletions
| diff --git a/tools/perf/scripts/python/net_dropmonitor.py b/tools/perf/scripts/python/net_dropmonitor.py index a4ffc9500023..b5740599aabd 100755 --- a/tools/perf/scripts/python/net_dropmonitor.py +++ b/tools/perf/scripts/python/net_dropmonitor.py @@ -15,35 +15,38 @@ kallsyms = []  def get_kallsyms_table():  	global kallsyms +  	try:  		f = open("/proc/kallsyms", "r") -		linecount = 0 -		for line in f: -			linecount = linecount+1 -		f.seek(0)  	except:  		return - -	j = 0  	for line in f:  		loc = int(line.split()[0], 16)  		name = line.split()[2] -		j = j +1 -		if ((j % 100) == 0): -			print "\r" + str(j) + "/" + str(linecount), -		kallsyms.append({ 'loc': loc, 'name' : name}) - -	print "\r" + str(j) + "/" + str(linecount) +		kallsyms.append((loc, name))  	kallsyms.sort() -	return  def get_sym(sloc):  	loc = int(sloc) -	for i in kallsyms: -		if (i['loc'] >= loc): -			return (i['name'], i['loc']-loc) -	return (None, 0) + +	# Invariant: kallsyms[i][0] <= loc for all 0 <= i <= start +	#            kallsyms[i][0] > loc for all end <= i < len(kallsyms) +	start, end = -1, len(kallsyms) +	while end != start + 1: +		pivot = (start + end) // 2 +		if loc < kallsyms[pivot][0]: +			end = pivot +		else: +			start = pivot + +	# Now (start == -1 or kallsyms[start][0] <= loc) +	# and (start == len(kallsyms) - 1 or loc < kallsyms[start + 1][0]) +	if start >= 0: +		symloc, name = kallsyms[start] +		return (name, loc - symloc) +	else: +		return (None, 0)  def print_drop_table():  	print "%25s %25s %25s" % ("LOCATION", "OFFSET", "COUNT") @@ -64,7 +67,7 @@ def trace_end():  # called from perf, when it finds a correspoinding event  def skb__kfree_skb(name, context, cpu, sec, nsec, pid, comm, -			skbaddr, protocol, location): +		   skbaddr, location, protocol):  	slocation = str(location)  	try:  		drop_log[slocation] = drop_log[slocation] + 1 | 
