------- Comment From <email address hidden> 2019-07-05 07:48 EDT-------
I have tried to last 2 days to find a patch series to apply the required patch which failed above.
The difference between upstream linux kernel 5.2.0rc7 and the ubuntu
18.04 kernel I downloaded from
url = git://kernel.ubuntu.com/ubuntu/ubuntu-bionic
branch master-next
in regards to the function machine__create_kernel_maps() in file tools/perf/util/machine.c
is very big.
Command
git log --oneline '-L: machine__create_kernel_maps:tools/perf/util/machine.c'
identifies the difference of applied patches. The following patches
are missing in ubuntu version:
Commit-ID Description
ed9adb2035b5 perf machine: Read also the end of the kernel
977c7a6d1e26 perf machine: Update kernel map address and re-order properly
1c5aae7710bb perf machine: Create maps for x86 PTI entry trampolines
3183f8ca304f perf symbols: Unify symbol maps
ee05d21791db perf machine: Set main kernel end address properly
1fb87b8e9599 perf machine: Don't search for active kernel start in __machine__create_kernel_maps
Already the first patch missing:
Commit-ID Description
1fb87b8e9599 perf machine: Don't search for active kernel start in __machine__create_kernel_maps
does not apply because in this patch a function named machine__set_kernel_mmap()
is moved in file perf/tools/util/machine.c but this function is missing
in the ubuntu 18.04 master-next tree.
It turned out that this tree also misses patch:
Having found the starting patch, I can applied the following patch sequence:
root@s8360046:~/ubuntu-bionic# patch -p1 < ../patches/0001-perf-machine-Generalize- machine__set_kernel_mmap.patch
patching file tools/perf/util/machine.c
Hunk #1 succeeded at 1255 (offset -7 lines).
Hunk #2 succeeded at 1370 (offset -5 lines).
root@s8360046:~/ubuntu-bionic# patch -p1 < ../patches/0001-perf-machine-Don-t-search-for-active-kernel-start-in.patch
patching file tools/perf/util/machine.c
Hunk #1 succeeded at 849 (offset -7 lines).
Hunk #2 succeeded at 861 (offset -7 lines).
Hunk #3 succeeded at 1212 (offset -7 lines).
Hunk #4 succeeded at 1254 (offset -7 lines).
patching file tools/perf/util/machine.h
Hunk #1 succeeded at 239 (offset 1 line).
root@s8360046:~/ubuntu-bionic# patch -p1 < ../patches/0001-perf-machine-Set-main-kernel-end-address-properly.patch
patching file tools/perf/util/machine.c
Hunk #1 succeeded at 1020 (offset 1 line).
Hunk #2 succeeded at 1227 (offset 1 line).
Hunk #3 succeeded at 1254 (offset 1 line).
root@s8360046:~/ubuntu-bionic# patch -p1 < ../patches/0001-perf-machine-Update-kernel-map-address-and-re-order-.patch
patching file tools/perf/util/machine.c
Hunk #1 succeeded at 1223 with fuzz 1 (offset -198 lines).
Hunk #2 succeeded at 1269 with fuzz 1 (offset -198 lines).
Hunk #3 succeeded at 1381 (offset -226 lines).
root@s8360046:~/ubuntu-bionic# patch -p1 < ../patches/0001-perf-machine-Read-also-the-end-of-the-kernel.patch
patching file tools/perf/util/machine.c
Hunk #1 succeeded at 821 (offset -103 lines).
Hunk #2 succeeded at 847 (offset -103 lines).
Hunk #3 succeeded at 1248 (offset -199 lines).
Hunk #4 FAILED at 1466.
Hunk #5 FAILED at 1478.
2 out of 5 hunks FAILED -- saving rejects to file tools/perf/util/machine.c.rej
root@s8360046:~/ubuntu-bionic#
The last patch is the one we need and it fails.
Refering to above patch list, I do not want to apply these two patches:
Commit-ID Description
1c5aae7710bb perf machine: Create maps for x86 PTI entry trampolines
3183f8ca304f perf symbols: Unify symbol maps
Both patches require tremendous change in the symbol table code of perf and
introduce trampoline functionality to handle security fixes in the kernel for x86.
If you want to apply these two patch, better upgrade the perf tool completely.
Appling the last patch, the last 2 hunks fail because of missing context.
The changes itself are trivial, but I can not do the changes as the code of the last patch is not from IBM.
Here is the difference from the file tools/perf/util/machine.c.rej:
-- tools/perf/util/machine.c
+++ tools/perf/util/machine.c
@@ -1466,9 +1472,9 @@ int machine__create_kernel_maps(struct machine *machine)
"continuing anyway...\n", machine->pid);
}
- if (!machine__get_running_kernel_start(machine, &name, &addr)) {
+ if (!machine__get_running_kernel_start(machine, &name, &start, &end)) {
if (name &&
- map__set_kallsyms_ref_reloc_sym(machine->vmlinux_map, name, addr)) {
+ map__set_kallsyms_ref_reloc_sym(machine->vmlinux_map, name, start)) {
machine__destroy_kernel_maps(machine);
ret = -1;
goto out_put;
@@ -1478,16 +1484,19 @@ int machine__create_kernel_maps(struct machine *machine)
* we have a real start address now, so re-order the kmaps
* assume it's the last in the kmaps
*/
- machine__update_kernel_mmap(machine, addr, ~0ULL);
+ machine__update_kernel_mmap(machine, start, end);
}
if (machine__create_extra_kernel_maps(machine, kernel))
pr_debug("Problems creating extra kernel maps, continuing anyway...\n");
- /* update end address of the kernel map using adjacent module address */
- map = map__next(machine__kernel_map(machine));
- if (map)
- machine__set_kernel_mmap(machine, addr, map->start);
+ if (end == ~0ULL) {
+ /* update end address of the kernel map using adjacent module address */
+ map = map__next(machine__kernel_map(machine));
+ if (map)
+ machine__set_kernel_mmap(machine, start, map->start);
+ }
+
out_put:
dso__put(kernel);
return ret;
Hope this helps. Sorry that I did not come to a better solution. The differences between both
versions of perf is just too big.
Ubuntu 18.04 is based on Linux 4.15 whereas the reqired patch was made for linux 5.2.
I have not compiled the perf tool nor tested the result
------- Comment From <email address hidden> 2019-07-05 07:48 EDT-------
I have tried to last 2 days to find a patch series to apply the required patch which failed above.
The difference between upstream linux kernel 5.2.0rc7 and the ubuntu ubuntu. com/ubuntu/ ubuntu- bionic _create_ kernel_ maps() in file tools/perf/ util/machine. c
18.04 kernel I downloaded from
url = git://kernel.
branch master-next
in regards to the function machine_
is very big.
Command _create_ kernel_ maps:tools/ perf/util/ machine. c'
git log --oneline '-L: machine_
identifies the difference of applied patches. The following patches
are missing in ubuntu version:
Commit-ID Description _create_ kernel_ maps
ed9adb2035b5 perf machine: Read also the end of the kernel
977c7a6d1e26 perf machine: Update kernel map address and re-order properly
1c5aae7710bb perf machine: Create maps for x86 PTI entry trampolines
3183f8ca304f perf symbols: Unify symbol maps
ee05d21791db perf machine: Set main kernel end address properly
1fb87b8e9599 perf machine: Don't search for active kernel start in __machine_
Already the first patch missing: _create_ kernel_ maps
Commit-ID Description
1fb87b8e9599 perf machine: Don't search for active kernel start in __machine_
does not apply because in this patch a function named machine_ _set_kernel_ mmap() util/machine. c but this function is missing
is moved in file perf/tools/
in the ubuntu 18.04 master-next tree.
It turned out that this tree also misses patch:
Commit-ID Description _set_kernel_ mmap()
05db6ff73d80 perf machine: Generalize machine_
Having found the starting patch, I can applied the following patch sequence: ~/ubuntu- bionic# patch -p1 < ../patches/ 0001-perf- machine- Generalize- machine_ _set_kernel_ mmap.patch util/machine. c ~/ubuntu- bionic# patch -p1 < ../patches/ 0001-perf- machine- Don-t-search- for-active- kernel- start-in. patch util/machine. c util/machine. h ~/ubuntu- bionic# patch -p1 < ../patches/ 0001-perf- machine- Set-main- kernel- end-address- properly. patch util/machine. c ~/ubuntu- bionic# patch -p1 < ../patches/ 0001-perf- machine- Update- kernel- map-address- and-re- order-. patch util/machine. c ~/ubuntu- bionic# patch -p1 < ../patches/ 0001-perf- machine- Read-also- the-end- of-the- kernel. patch util/machine. c util/machine. c.rej ~/ubuntu- bionic#
root@s8360046:
patching file tools/perf/
Hunk #1 succeeded at 1255 (offset -7 lines).
Hunk #2 succeeded at 1370 (offset -5 lines).
root@s8360046:
patching file tools/perf/
Hunk #1 succeeded at 849 (offset -7 lines).
Hunk #2 succeeded at 861 (offset -7 lines).
Hunk #3 succeeded at 1212 (offset -7 lines).
Hunk #4 succeeded at 1254 (offset -7 lines).
patching file tools/perf/
Hunk #1 succeeded at 239 (offset 1 line).
root@s8360046:
patching file tools/perf/
Hunk #1 succeeded at 1020 (offset 1 line).
Hunk #2 succeeded at 1227 (offset 1 line).
Hunk #3 succeeded at 1254 (offset 1 line).
root@s8360046:
patching file tools/perf/
Hunk #1 succeeded at 1223 with fuzz 1 (offset -198 lines).
Hunk #2 succeeded at 1269 with fuzz 1 (offset -198 lines).
Hunk #3 succeeded at 1381 (offset -226 lines).
root@s8360046:
patching file tools/perf/
Hunk #1 succeeded at 821 (offset -103 lines).
Hunk #2 succeeded at 847 (offset -103 lines).
Hunk #3 succeeded at 1248 (offset -199 lines).
Hunk #4 FAILED at 1466.
Hunk #5 FAILED at 1478.
2 out of 5 hunks FAILED -- saving rejects to file tools/perf/
root@s8360046:
The last patch is the one we need and it fails.
Refering to above patch list, I do not want to apply these two patches:
Commit-ID Description
1c5aae7710bb perf machine: Create maps for x86 PTI entry trampolines
3183f8ca304f perf symbols: Unify symbol maps
Both patches require tremendous change in the symbol table code of perf and
introduce trampoline functionality to handle security fixes in the kernel for x86.
If you want to apply these two patch, better upgrade the perf tool completely.
Appling the last patch, the last 2 hunks fail because of missing context.
The changes itself are trivial, but I can not do the changes as the code of the last patch is not from IBM.
Here is the difference from the file tools/perf/ util/machine. c.rej: util/machine. c util/machine. c _create_ kernel_ maps(struct machine *machine)
-- tools/perf/
+++ tools/perf/
@@ -1466,9 +1472,9 @@ int machine_
"continuing anyway...\n", machine->pid);
}
- if (!machine_ _get_running_ kernel_ start(machine, &name, &addr)) { _get_running_ kernel_ start(machine, &name, &start, &end)) { kallsyms_ ref_reloc_ sym(machine- >vmlinux_ map, name, addr)) { kallsyms_ ref_reloc_ sym(machine- >vmlinux_ map, name, start)) { _destroy_ kernel_ maps(machine) ; _create_ kernel_ maps(struct machine *machine)
+ if (!machine_
if (name &&
- map__set_
+ map__set_
machine_
ret = -1;
goto out_put;
@@ -1478,16 +1484,19 @@ int machine_
* we have a real start address now, so re-order the kmaps _update_ kernel_ mmap(machine, addr, ~0ULL); _update_ kernel_ mmap(machine, start, end);
* assume it's the last in the kmaps
*/
- machine_
+ machine_
}
if (machine_ _create_ extra_kernel_ maps(machine, kernel))
pr_debug("Problems creating extra kernel maps, continuing anyway...\n");
- /* update end address of the kernel map using adjacent module address */ machine_ _kernel_ map(machine) ); _set_kernel_ mmap(machine, addr, map->start); machine_ _kernel_ map(machine) ); _set_kernel_ mmap(machine, start, map->start);
- map = map__next(
- if (map)
- machine_
+ if (end == ~0ULL) {
+ /* update end address of the kernel map using adjacent module address */
+ map = map__next(
+ if (map)
+ machine_
+ }
+
out_put:
dso__put(kernel);
return ret;
Hope this helps. Sorry that I did not come to a better solution. The differences between both
versions of perf is just too big.
Ubuntu 18.04 is based on Linux 4.15 whereas the reqired patch was made for linux 5.2.
I have not compiled the perf tool nor tested the result