diff options
| -rw-r--r-- | tools/perf/util/machine.c | 32 |
1 files changed, 20 insertions, 12 deletions
diff --git a/tools/perf/util/machine.c b/tools/perf/util/machine.c index 61959aba7e27..3c520baa198c 100644 --- a/tools/perf/util/machine.c +++ b/tools/perf/util/machine.c | |||
| @@ -1421,6 +1421,20 @@ static void machine__set_kernel_mmap(struct machine *machine, | |||
| 1421 | machine->vmlinux_map->end = ~0ULL; | 1421 | machine->vmlinux_map->end = ~0ULL; |
| 1422 | } | 1422 | } |
| 1423 | 1423 | ||
| 1424 | static void machine__update_kernel_mmap(struct machine *machine, | ||
| 1425 | u64 start, u64 end) | ||
| 1426 | { | ||
| 1427 | struct map *map = machine__kernel_map(machine); | ||
| 1428 | |||
| 1429 | map__get(map); | ||
| 1430 | map_groups__remove(&machine->kmaps, map); | ||
| 1431 | |||
| 1432 | machine__set_kernel_mmap(machine, start, end); | ||
| 1433 | |||
| 1434 | map_groups__insert(&machine->kmaps, map); | ||
| 1435 | map__put(map); | ||
| 1436 | } | ||
| 1437 | |||
| 1424 | int machine__create_kernel_maps(struct machine *machine) | 1438 | int machine__create_kernel_maps(struct machine *machine) |
| 1425 | { | 1439 | { |
| 1426 | struct dso *kernel = machine__get_kernel(machine); | 1440 | struct dso *kernel = machine__get_kernel(machine); |
| @@ -1453,17 +1467,11 @@ int machine__create_kernel_maps(struct machine *machine) | |||
| 1453 | goto out_put; | 1467 | goto out_put; |
| 1454 | } | 1468 | } |
| 1455 | 1469 | ||
| 1456 | /* we have a real start address now, so re-order the kmaps */ | 1470 | /* |
| 1457 | map = machine__kernel_map(machine); | 1471 | * we have a real start address now, so re-order the kmaps |
| 1458 | 1472 | * assume it's the last in the kmaps | |
| 1459 | map__get(map); | 1473 | */ |
| 1460 | map_groups__remove(&machine->kmaps, map); | 1474 | machine__update_kernel_mmap(machine, addr, ~0ULL); |
| 1461 | |||
| 1462 | /* assume it's the last in the kmaps */ | ||
| 1463 | machine__set_kernel_mmap(machine, addr, ~0ULL); | ||
| 1464 | |||
| 1465 | map_groups__insert(&machine->kmaps, map); | ||
| 1466 | map__put(map); | ||
| 1467 | } | 1475 | } |
| 1468 | 1476 | ||
| 1469 | if (machine__create_extra_kernel_maps(machine, kernel)) | 1477 | if (machine__create_extra_kernel_maps(machine, kernel)) |
| @@ -1599,7 +1607,7 @@ static int machine__process_kernel_mmap_event(struct machine *machine, | |||
| 1599 | if (strstr(kernel->long_name, "vmlinux")) | 1607 | if (strstr(kernel->long_name, "vmlinux")) |
| 1600 | dso__set_short_name(kernel, "[kernel.vmlinux]", false); | 1608 | dso__set_short_name(kernel, "[kernel.vmlinux]", false); |
| 1601 | 1609 | ||
| 1602 | machine__set_kernel_mmap(machine, event->mmap.start, | 1610 | machine__update_kernel_mmap(machine, event->mmap.start, |
| 1603 | event->mmap.start + event->mmap.len); | 1611 | event->mmap.start + event->mmap.len); |
| 1604 | 1612 | ||
| 1605 | /* | 1613 | /* |
