mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-30 03:27:44 -04:00
Merge branch 'perf/urgent' into perf/core, to pick up fixes and refresh the branch
Signed-off-by: Ingo Molnar <[email protected]>
This commit is contained in:
commit
ba6cc93d61
320 changed files with 3030 additions and 1847 deletions
|
|
@ -68,6 +68,7 @@ static const char * const map_type_name[] = {
|
|||
[BPF_MAP_TYPE_DEVMAP] = "devmap",
|
||||
[BPF_MAP_TYPE_SOCKMAP] = "sockmap",
|
||||
[BPF_MAP_TYPE_CPUMAP] = "cpumap",
|
||||
[BPF_MAP_TYPE_XSKMAP] = "xskmap",
|
||||
[BPF_MAP_TYPE_SOCKHASH] = "sockhash",
|
||||
[BPF_MAP_TYPE_CGROUP_STORAGE] = "cgroup_storage",
|
||||
};
|
||||
|
|
|
|||
|
|
@ -759,12 +759,18 @@ class DebugfsProvider(Provider):
|
|||
if len(vms) == 0:
|
||||
self.do_read = False
|
||||
|
||||
self.paths = filter(lambda x: "{}-".format(pid) in x, vms)
|
||||
self.paths = list(filter(lambda x: "{}-".format(pid) in x, vms))
|
||||
|
||||
else:
|
||||
self.paths = []
|
||||
self.do_read = True
|
||||
self.reset()
|
||||
|
||||
def _verify_paths(self):
|
||||
"""Remove invalid paths"""
|
||||
for path in self.paths:
|
||||
if not os.path.exists(os.path.join(PATH_DEBUGFS_KVM, path)):
|
||||
self.paths.remove(path)
|
||||
continue
|
||||
|
||||
def read(self, reset=0, by_guest=0):
|
||||
"""Returns a dict with format:'file name / field -> current value'.
|
||||
|
|
@ -780,6 +786,7 @@ class DebugfsProvider(Provider):
|
|||
# If no debugfs filtering support is available, then don't read.
|
||||
if not self.do_read:
|
||||
return results
|
||||
self._verify_paths()
|
||||
|
||||
paths = self.paths
|
||||
if self._pid == 0:
|
||||
|
|
@ -1096,15 +1103,16 @@ class Tui(object):
|
|||
pid = self.stats.pid_filter
|
||||
self.screen.erase()
|
||||
gname = self.get_gname_from_pid(pid)
|
||||
self._gname = gname
|
||||
if gname:
|
||||
gname = ('({})'.format(gname[:MAX_GUEST_NAME_LEN] + '...'
|
||||
if len(gname) > MAX_GUEST_NAME_LEN
|
||||
else gname))
|
||||
if pid > 0:
|
||||
self.screen.addstr(0, 0, 'kvm statistics - pid {0} {1}'
|
||||
.format(pid, gname), curses.A_BOLD)
|
||||
self._headline = 'kvm statistics - pid {0} {1}'.format(pid, gname)
|
||||
else:
|
||||
self.screen.addstr(0, 0, 'kvm statistics - summary', curses.A_BOLD)
|
||||
self._headline = 'kvm statistics - summary'
|
||||
self.screen.addstr(0, 0, self._headline, curses.A_BOLD)
|
||||
if self.stats.fields_filter:
|
||||
regex = self.stats.fields_filter
|
||||
if len(regex) > MAX_REGEX_LEN:
|
||||
|
|
@ -1162,6 +1170,19 @@ class Tui(object):
|
|||
|
||||
return sorted_items
|
||||
|
||||
if not self._is_running_guest(self.stats.pid_filter):
|
||||
if self._gname:
|
||||
try: # ...to identify the guest by name in case it's back
|
||||
pids = self.get_pid_from_gname(self._gname)
|
||||
if len(pids) == 1:
|
||||
self._refresh_header(pids[0])
|
||||
self._update_pid(pids[0])
|
||||
return
|
||||
except:
|
||||
pass
|
||||
self._display_guest_dead()
|
||||
# leave final data on screen
|
||||
return
|
||||
row = 3
|
||||
self.screen.move(row, 0)
|
||||
self.screen.clrtobot()
|
||||
|
|
@ -1184,6 +1205,7 @@ class Tui(object):
|
|||
# print events
|
||||
tavg = 0
|
||||
tcur = 0
|
||||
guest_removed = False
|
||||
for key, values in get_sorted_events(self, stats):
|
||||
if row >= self.screen.getmaxyx()[0] - 1 or values == (0, 0):
|
||||
break
|
||||
|
|
@ -1191,7 +1213,10 @@ class Tui(object):
|
|||
key = self.get_gname_from_pid(key)
|
||||
if not key:
|
||||
continue
|
||||
cur = int(round(values.delta / sleeptime)) if values.delta else ''
|
||||
cur = int(round(values.delta / sleeptime)) if values.delta else 0
|
||||
if cur < 0:
|
||||
guest_removed = True
|
||||
continue
|
||||
if key[0] != ' ':
|
||||
if values.delta:
|
||||
tcur += values.delta
|
||||
|
|
@ -1204,13 +1229,21 @@ class Tui(object):
|
|||
values.value * 100 / float(ltotal), cur))
|
||||
row += 1
|
||||
if row == 3:
|
||||
self.screen.addstr(4, 1, 'No matching events reported yet')
|
||||
if guest_removed:
|
||||
self.screen.addstr(4, 1, 'Guest removed, updating...')
|
||||
else:
|
||||
self.screen.addstr(4, 1, 'No matching events reported yet')
|
||||
if row > 4:
|
||||
tavg = int(round(tcur / sleeptime)) if tcur > 0 else ''
|
||||
self.screen.addstr(row, 1, '%-40s %10d %8s' %
|
||||
('Total', total, tavg), curses.A_BOLD)
|
||||
self.screen.refresh()
|
||||
|
||||
def _display_guest_dead(self):
|
||||
marker = ' Guest is DEAD '
|
||||
y = min(len(self._headline), 80 - len(marker))
|
||||
self.screen.addstr(0, y, marker, curses.A_BLINK | curses.A_STANDOUT)
|
||||
|
||||
def _show_msg(self, text):
|
||||
"""Display message centered text and exit on key press"""
|
||||
hint = 'Press any key to continue'
|
||||
|
|
@ -1219,10 +1252,10 @@ class Tui(object):
|
|||
(x, term_width) = self.screen.getmaxyx()
|
||||
row = 2
|
||||
for line in text:
|
||||
start = (term_width - len(line)) / 2
|
||||
start = (term_width - len(line)) // 2
|
||||
self.screen.addstr(row, start, line)
|
||||
row += 1
|
||||
self.screen.addstr(row + 1, (term_width - len(hint)) / 2, hint,
|
||||
self.screen.addstr(row + 1, (term_width - len(hint)) // 2, hint,
|
||||
curses.A_STANDOUT)
|
||||
self.screen.getkey()
|
||||
|
||||
|
|
@ -1319,6 +1352,12 @@ class Tui(object):
|
|||
msg = '"' + str(val) + '": Invalid value'
|
||||
self._refresh_header()
|
||||
|
||||
def _is_running_guest(self, pid):
|
||||
"""Check if pid is still a running process."""
|
||||
if not pid:
|
||||
return True
|
||||
return os.path.isdir(os.path.join('/proc/', str(pid)))
|
||||
|
||||
def _show_vm_selection_by_guest(self):
|
||||
"""Draws guest selection mask.
|
||||
|
||||
|
|
@ -1346,7 +1385,7 @@ class Tui(object):
|
|||
if not guest or guest == '0':
|
||||
break
|
||||
if guest.isdigit():
|
||||
if not os.path.isdir(os.path.join('/proc/', guest)):
|
||||
if not self._is_running_guest(guest):
|
||||
msg = '"' + guest + '": Not a running process'
|
||||
continue
|
||||
pid = int(guest)
|
||||
|
|
|
|||
|
|
@ -46,6 +46,9 @@
|
|||
# Kselftest framework requirement - SKIP code is 4.
|
||||
ksft_skip=4
|
||||
|
||||
# Some systems don't have a ping6 binary anymore
|
||||
which ping6 > /dev/null 2>&1 && ping6=$(which ping6) || ping6=$(which ping)
|
||||
|
||||
tests="
|
||||
pmtu_vti6_exception vti6: PMTU exceptions
|
||||
pmtu_vti4_exception vti4: PMTU exceptions
|
||||
|
|
@ -274,7 +277,7 @@ test_pmtu_vti6_exception() {
|
|||
mtu "${ns_b}" veth_b 4000
|
||||
mtu "${ns_a}" vti6_a 5000
|
||||
mtu "${ns_b}" vti6_b 5000
|
||||
${ns_a} ping6 -q -i 0.1 -w 2 -s 60000 ${vti6_b_addr} > /dev/null
|
||||
${ns_a} ${ping6} -q -i 0.1 -w 2 -s 60000 ${vti6_b_addr} > /dev/null
|
||||
|
||||
# Check that exception was created
|
||||
if [ "$(route_get_dst_pmtu_from_exception "${ns_a}" ${vti6_b_addr})" = "" ]; then
|
||||
|
|
@ -334,7 +337,7 @@ test_pmtu_vti4_link_add_mtu() {
|
|||
fail=0
|
||||
|
||||
min=68
|
||||
max=$((65528 - 20))
|
||||
max=$((65535 - 20))
|
||||
# Check invalid values first
|
||||
for v in $((min - 1)) $((max + 1)); do
|
||||
${ns_a} ip link add vti4_a mtu ${v} type vti local ${veth4_a_addr} remote ${veth4_b_addr} key 10 2>/dev/null
|
||||
|
|
|
|||
|
|
@ -312,6 +312,54 @@
|
|||
"$TC actions flush action police"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "6aaf",
|
||||
"name": "Add police actions with conform-exceed control pass/pipe [with numeric values]",
|
||||
"category": [
|
||||
"actions",
|
||||
"police"
|
||||
],
|
||||
"setup": [
|
||||
[
|
||||
"$TC actions flush action police",
|
||||
0,
|
||||
1,
|
||||
255
|
||||
]
|
||||
],
|
||||
"cmdUnderTest": "$TC actions add action police rate 3mbit burst 250k conform-exceed 0/3 index 1",
|
||||
"expExitCode": "0",
|
||||
"verifyCmd": "$TC actions get action police index 1",
|
||||
"matchPattern": "action order [0-9]*: police 0x1 rate 3Mbit burst 250Kb mtu 2Kb action pass/pipe",
|
||||
"matchCount": "1",
|
||||
"teardown": [
|
||||
"$TC actions flush action police"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "29b1",
|
||||
"name": "Add police actions with conform-exceed control <invalid>/drop",
|
||||
"category": [
|
||||
"actions",
|
||||
"police"
|
||||
],
|
||||
"setup": [
|
||||
[
|
||||
"$TC actions flush action police",
|
||||
0,
|
||||
1,
|
||||
255
|
||||
]
|
||||
],
|
||||
"cmdUnderTest": "$TC actions add action police rate 3mbit burst 250k conform-exceed 10/drop index 1",
|
||||
"expExitCode": "255",
|
||||
"verifyCmd": "$TC actions ls action police",
|
||||
"matchPattern": "action order [0-9]*: police 0x1 rate 3Mbit burst 250Kb mtu 2Kb action ",
|
||||
"matchCount": "0",
|
||||
"teardown": [
|
||||
"$TC actions flush action police"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "c26f",
|
||||
"name": "Add police action with invalid peakrate value",
|
||||
|
|
|
|||
|
|
@ -159,12 +159,6 @@ static const char * const page_flag_names[] = {
|
|||
};
|
||||
|
||||
|
||||
static const char * const debugfs_known_mountpoints[] = {
|
||||
"/sys/kernel/debug",
|
||||
"/debug",
|
||||
0,
|
||||
};
|
||||
|
||||
/*
|
||||
* data structures
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -30,8 +30,8 @@ struct slabinfo {
|
|||
int alias;
|
||||
int refs;
|
||||
int aliases, align, cache_dma, cpu_slabs, destroy_by_rcu;
|
||||
int hwcache_align, object_size, objs_per_slab;
|
||||
int sanity_checks, slab_size, store_user, trace;
|
||||
unsigned int hwcache_align, object_size, objs_per_slab;
|
||||
unsigned int sanity_checks, slab_size, store_user, trace;
|
||||
int order, poison, reclaim_account, red_zone;
|
||||
unsigned long partial, objects, slabs, objects_partial, objects_total;
|
||||
unsigned long alloc_fastpath, alloc_slowpath;
|
||||
|
|
|
|||
Loading…
Reference in a new issue