diff options
| -rw-r--r-- | arch/powerpc/kernel/kexec_elf_64.c | 6 | ||||
| -rw-r--r-- | arch/powerpc/perf/core-book3s.c | 6 | ||||
| -rw-r--r-- | arch/powerpc/perf/power8-pmu.c | 3 | ||||
| -rw-r--r-- | arch/powerpc/perf/power9-pmu.c | 3 | ||||
| -rw-r--r-- | arch/powerpc/platforms/powernv/opal-imc.c | 4 |
5 files changed, 19 insertions, 3 deletions
diff --git a/arch/powerpc/kernel/kexec_elf_64.c b/arch/powerpc/kernel/kexec_elf_64.c index ba4f18a43ee8..52a29fc73730 100644 --- a/arch/powerpc/kernel/kexec_elf_64.c +++ b/arch/powerpc/kernel/kexec_elf_64.c | |||
| @@ -547,6 +547,7 @@ static int elf_exec_load(struct kimage *image, struct elfhdr *ehdr, | |||
| 547 | kbuf.memsz = phdr->p_memsz; | 547 | kbuf.memsz = phdr->p_memsz; |
| 548 | kbuf.buf_align = phdr->p_align; | 548 | kbuf.buf_align = phdr->p_align; |
| 549 | kbuf.buf_min = phdr->p_paddr + base; | 549 | kbuf.buf_min = phdr->p_paddr + base; |
| 550 | kbuf.mem = KEXEC_BUF_MEM_UNKNOWN; | ||
| 550 | ret = kexec_add_buffer(&kbuf); | 551 | ret = kexec_add_buffer(&kbuf); |
| 551 | if (ret) | 552 | if (ret) |
| 552 | goto out; | 553 | goto out; |
| @@ -581,7 +582,8 @@ static void *elf64_load(struct kimage *image, char *kernel_buf, | |||
| 581 | struct kexec_buf kbuf = { .image = image, .buf_min = 0, | 582 | struct kexec_buf kbuf = { .image = image, .buf_min = 0, |
| 582 | .buf_max = ppc64_rma_size }; | 583 | .buf_max = ppc64_rma_size }; |
| 583 | struct kexec_buf pbuf = { .image = image, .buf_min = 0, | 584 | struct kexec_buf pbuf = { .image = image, .buf_min = 0, |
| 584 | .buf_max = ppc64_rma_size, .top_down = true }; | 585 | .buf_max = ppc64_rma_size, .top_down = true, |
| 586 | .mem = KEXEC_BUF_MEM_UNKNOWN }; | ||
| 585 | 587 | ||
| 586 | ret = build_elf_exec_info(kernel_buf, kernel_len, &ehdr, &elf_info); | 588 | ret = build_elf_exec_info(kernel_buf, kernel_len, &ehdr, &elf_info); |
| 587 | if (ret) | 589 | if (ret) |
| @@ -606,6 +608,7 @@ static void *elf64_load(struct kimage *image, char *kernel_buf, | |||
| 606 | kbuf.bufsz = kbuf.memsz = initrd_len; | 608 | kbuf.bufsz = kbuf.memsz = initrd_len; |
| 607 | kbuf.buf_align = PAGE_SIZE; | 609 | kbuf.buf_align = PAGE_SIZE; |
| 608 | kbuf.top_down = false; | 610 | kbuf.top_down = false; |
| 611 | kbuf.mem = KEXEC_BUF_MEM_UNKNOWN; | ||
| 609 | ret = kexec_add_buffer(&kbuf); | 612 | ret = kexec_add_buffer(&kbuf); |
| 610 | if (ret) | 613 | if (ret) |
| 611 | goto out; | 614 | goto out; |
| @@ -638,6 +641,7 @@ static void *elf64_load(struct kimage *image, char *kernel_buf, | |||
| 638 | kbuf.bufsz = kbuf.memsz = fdt_size; | 641 | kbuf.bufsz = kbuf.memsz = fdt_size; |
| 639 | kbuf.buf_align = PAGE_SIZE; | 642 | kbuf.buf_align = PAGE_SIZE; |
| 640 | kbuf.top_down = true; | 643 | kbuf.top_down = true; |
| 644 | kbuf.mem = KEXEC_BUF_MEM_UNKNOWN; | ||
| 641 | ret = kexec_add_buffer(&kbuf); | 645 | ret = kexec_add_buffer(&kbuf); |
| 642 | if (ret) | 646 | if (ret) |
| 643 | goto out; | 647 | goto out; |
diff --git a/arch/powerpc/perf/core-book3s.c b/arch/powerpc/perf/core-book3s.c index 7e129f62cd67..ca92e01d0bd1 100644 --- a/arch/powerpc/perf/core-book3s.c +++ b/arch/powerpc/perf/core-book3s.c | |||
| @@ -1846,6 +1846,7 @@ static int power_pmu_event_init(struct perf_event *event) | |||
| 1846 | int n; | 1846 | int n; |
| 1847 | int err; | 1847 | int err; |
| 1848 | struct cpu_hw_events *cpuhw; | 1848 | struct cpu_hw_events *cpuhw; |
| 1849 | u64 bhrb_filter; | ||
| 1849 | 1850 | ||
| 1850 | if (!ppmu) | 1851 | if (!ppmu) |
| 1851 | return -ENOENT; | 1852 | return -ENOENT; |
| @@ -1951,13 +1952,14 @@ static int power_pmu_event_init(struct perf_event *event) | |||
| 1951 | err = power_check_constraints(cpuhw, events, cflags, n + 1); | 1952 | err = power_check_constraints(cpuhw, events, cflags, n + 1); |
| 1952 | 1953 | ||
| 1953 | if (has_branch_stack(event)) { | 1954 | if (has_branch_stack(event)) { |
| 1954 | cpuhw->bhrb_filter = ppmu->bhrb_filter_map( | 1955 | bhrb_filter = ppmu->bhrb_filter_map( |
| 1955 | event->attr.branch_sample_type); | 1956 | event->attr.branch_sample_type); |
| 1956 | 1957 | ||
| 1957 | if (cpuhw->bhrb_filter == -1) { | 1958 | if (bhrb_filter == -1) { |
| 1958 | put_cpu_var(cpu_hw_events); | 1959 | put_cpu_var(cpu_hw_events); |
| 1959 | return -EOPNOTSUPP; | 1960 | return -EOPNOTSUPP; |
| 1960 | } | 1961 | } |
| 1962 | cpuhw->bhrb_filter = bhrb_filter; | ||
| 1961 | } | 1963 | } |
| 1962 | 1964 | ||
| 1963 | put_cpu_var(cpu_hw_events); | 1965 | put_cpu_var(cpu_hw_events); |
diff --git a/arch/powerpc/perf/power8-pmu.c b/arch/powerpc/perf/power8-pmu.c index b47e9fb5e899..3a5fcc20ff31 100644 --- a/arch/powerpc/perf/power8-pmu.c +++ b/arch/powerpc/perf/power8-pmu.c | |||
| @@ -25,6 +25,7 @@ enum { | |||
| 25 | #define POWER8_MMCRA_IFM1 0x0000000040000000UL | 25 | #define POWER8_MMCRA_IFM1 0x0000000040000000UL |
| 26 | #define POWER8_MMCRA_IFM2 0x0000000080000000UL | 26 | #define POWER8_MMCRA_IFM2 0x0000000080000000UL |
| 27 | #define POWER8_MMCRA_IFM3 0x00000000C0000000UL | 27 | #define POWER8_MMCRA_IFM3 0x00000000C0000000UL |
| 28 | #define POWER8_MMCRA_BHRB_MASK 0x00000000C0000000UL | ||
| 28 | 29 | ||
| 29 | /* | 30 | /* |
| 30 | * Raw event encoding for PowerISA v2.07 (Power8): | 31 | * Raw event encoding for PowerISA v2.07 (Power8): |
| @@ -239,6 +240,8 @@ static u64 power8_bhrb_filter_map(u64 branch_sample_type) | |||
| 239 | 240 | ||
| 240 | static void power8_config_bhrb(u64 pmu_bhrb_filter) | 241 | static void power8_config_bhrb(u64 pmu_bhrb_filter) |
| 241 | { | 242 | { |
| 243 | pmu_bhrb_filter &= POWER8_MMCRA_BHRB_MASK; | ||
| 244 | |||
| 242 | /* Enable BHRB filter in PMU */ | 245 | /* Enable BHRB filter in PMU */ |
| 243 | mtspr(SPRN_MMCRA, (mfspr(SPRN_MMCRA) | pmu_bhrb_filter)); | 246 | mtspr(SPRN_MMCRA, (mfspr(SPRN_MMCRA) | pmu_bhrb_filter)); |
| 244 | } | 247 | } |
diff --git a/arch/powerpc/perf/power9-pmu.c b/arch/powerpc/perf/power9-pmu.c index 738ed26c538d..08c3ef796198 100644 --- a/arch/powerpc/perf/power9-pmu.c +++ b/arch/powerpc/perf/power9-pmu.c | |||
| @@ -88,6 +88,7 @@ enum { | |||
| 88 | #define POWER9_MMCRA_IFM1 0x0000000040000000UL | 88 | #define POWER9_MMCRA_IFM1 0x0000000040000000UL |
| 89 | #define POWER9_MMCRA_IFM2 0x0000000080000000UL | 89 | #define POWER9_MMCRA_IFM2 0x0000000080000000UL |
| 90 | #define POWER9_MMCRA_IFM3 0x00000000C0000000UL | 90 | #define POWER9_MMCRA_IFM3 0x00000000C0000000UL |
| 91 | #define POWER9_MMCRA_BHRB_MASK 0x00000000C0000000UL | ||
| 91 | 92 | ||
| 92 | /* Nasty Power9 specific hack */ | 93 | /* Nasty Power9 specific hack */ |
| 93 | #define PVR_POWER9_CUMULUS 0x00002000 | 94 | #define PVR_POWER9_CUMULUS 0x00002000 |
| @@ -296,6 +297,8 @@ static u64 power9_bhrb_filter_map(u64 branch_sample_type) | |||
| 296 | 297 | ||
| 297 | static void power9_config_bhrb(u64 pmu_bhrb_filter) | 298 | static void power9_config_bhrb(u64 pmu_bhrb_filter) |
| 298 | { | 299 | { |
| 300 | pmu_bhrb_filter &= POWER9_MMCRA_BHRB_MASK; | ||
| 301 | |||
| 299 | /* Enable BHRB filter in PMU */ | 302 | /* Enable BHRB filter in PMU */ |
| 300 | mtspr(SPRN_MMCRA, (mfspr(SPRN_MMCRA) | pmu_bhrb_filter)); | 303 | mtspr(SPRN_MMCRA, (mfspr(SPRN_MMCRA) | pmu_bhrb_filter)); |
| 301 | } | 304 | } |
diff --git a/arch/powerpc/platforms/powernv/opal-imc.c b/arch/powerpc/platforms/powernv/opal-imc.c index 1b6932890a73..186109bdd41b 100644 --- a/arch/powerpc/platforms/powernv/opal-imc.c +++ b/arch/powerpc/platforms/powernv/opal-imc.c | |||
| @@ -157,6 +157,10 @@ static int imc_pmu_create(struct device_node *parent, int pmu_index, int domain) | |||
| 157 | struct imc_pmu *pmu_ptr; | 157 | struct imc_pmu *pmu_ptr; |
| 158 | u32 offset; | 158 | u32 offset; |
| 159 | 159 | ||
| 160 | /* Return for unknown domain */ | ||
| 161 | if (domain < 0) | ||
| 162 | return -EINVAL; | ||
| 163 | |||
| 160 | /* memory for pmu */ | 164 | /* memory for pmu */ |
| 161 | pmu_ptr = kzalloc(sizeof(*pmu_ptr), GFP_KERNEL); | 165 | pmu_ptr = kzalloc(sizeof(*pmu_ptr), GFP_KERNEL); |
| 162 | if (!pmu_ptr) | 166 | if (!pmu_ptr) |
