diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2016-06-20 13:18:58 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2016-06-20 13:18:58 -0400 |
commit | 97f78c7de8ae38c007fec406d40df99ae62b36de (patch) | |
tree | 72cfab7732f5e60cba75f8d2d1a92ccb5a1fd693 | |
parent | 4e183d7add15e8bdd131aa14976e26ca3d71a889 (diff) | |
parent | 9254e70c4ef1fee2e5c43feded4433d19cbb6177 (diff) |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux
Pull s390 fixes from Martin Schwidefsky:
"Two more bugs fixes for 4.7:
- a KVM regression introduced with the pgtable.c code split
- a perf issue with two hardware PMUs using a shared event context"
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux:
s390/cpum_cf: use perf software context for hardware counters
KVM: s390/mm: Fix CMMA reset during reboot
-rw-r--r-- | arch/s390/kernel/perf_cpum_cf.c | 8 | ||||
-rw-r--r-- | arch/s390/mm/pgtable.c | 2 |
2 files changed, 3 insertions, 7 deletions
diff --git a/arch/s390/kernel/perf_cpum_cf.c b/arch/s390/kernel/perf_cpum_cf.c index 59215c518f37..7ec63b1d920d 100644 --- a/arch/s390/kernel/perf_cpum_cf.c +++ b/arch/s390/kernel/perf_cpum_cf.c | |||
@@ -649,6 +649,8 @@ static int cpumf_pmu_commit_txn(struct pmu *pmu) | |||
649 | 649 | ||
650 | /* Performance monitoring unit for s390x */ | 650 | /* Performance monitoring unit for s390x */ |
651 | static struct pmu cpumf_pmu = { | 651 | static struct pmu cpumf_pmu = { |
652 | .task_ctx_nr = perf_sw_context, | ||
653 | .capabilities = PERF_PMU_CAP_NO_INTERRUPT, | ||
652 | .pmu_enable = cpumf_pmu_enable, | 654 | .pmu_enable = cpumf_pmu_enable, |
653 | .pmu_disable = cpumf_pmu_disable, | 655 | .pmu_disable = cpumf_pmu_disable, |
654 | .event_init = cpumf_pmu_event_init, | 656 | .event_init = cpumf_pmu_event_init, |
@@ -708,12 +710,6 @@ static int __init cpumf_pmu_init(void) | |||
708 | goto out; | 710 | goto out; |
709 | } | 711 | } |
710 | 712 | ||
711 | /* The CPU measurement counter facility does not have overflow | ||
712 | * interrupts to do sampling. Sampling must be provided by | ||
713 | * external means, for example, by timers. | ||
714 | */ | ||
715 | cpumf_pmu.capabilities |= PERF_PMU_CAP_NO_INTERRUPT; | ||
716 | |||
717 | cpumf_pmu.attr_groups = cpumf_cf_event_group(); | 713 | cpumf_pmu.attr_groups = cpumf_cf_event_group(); |
718 | rc = perf_pmu_register(&cpumf_pmu, "cpum_cf", PERF_TYPE_RAW); | 714 | rc = perf_pmu_register(&cpumf_pmu, "cpum_cf", PERF_TYPE_RAW); |
719 | if (rc) { | 715 | if (rc) { |
diff --git a/arch/s390/mm/pgtable.c b/arch/s390/mm/pgtable.c index 4324b87f9398..9f0ce0e6eeb4 100644 --- a/arch/s390/mm/pgtable.c +++ b/arch/s390/mm/pgtable.c | |||
@@ -437,7 +437,7 @@ void ptep_zap_unused(struct mm_struct *mm, unsigned long addr, | |||
437 | pgste = pgste_get_lock(ptep); | 437 | pgste = pgste_get_lock(ptep); |
438 | pgstev = pgste_val(pgste); | 438 | pgstev = pgste_val(pgste); |
439 | pte = *ptep; | 439 | pte = *ptep; |
440 | if (pte_swap(pte) && | 440 | if (!reset && pte_swap(pte) && |
441 | ((pgstev & _PGSTE_GPS_USAGE_MASK) == _PGSTE_GPS_USAGE_UNUSED || | 441 | ((pgstev & _PGSTE_GPS_USAGE_MASK) == _PGSTE_GPS_USAGE_UNUSED || |
442 | (pgstev & _PGSTE_GPS_ZERO))) { | 442 | (pgstev & _PGSTE_GPS_ZERO))) { |
443 | ptep_zap_swap_entry(mm, pte_to_swp_entry(pte)); | 443 | ptep_zap_swap_entry(mm, pte_to_swp_entry(pte)); |