[PATCH, v2] powerpc: fix hardware PMU exception bug on PowerVM compatibility mode systems
PowerVM systems running compatibility mode on a few Power8 revisions are still vulnerable to the hardware defect that loses PMU exceptions arriving prior to a context switch. The software fix for this issue is enabled through the CPU_FTR_PMAO_BUG cpu_feature bit, nevertheless this bit also needs to be set for PowerVM compatibility mode systems. Fixes: 68f2f0d431d9ea4 ("powerpc: Add a cpu feature CPU_FTR_PMAO_BUG") Signed-off-by: Desnes A. Nunes do Rosario --- arch/powerpc/kernel/cputable.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/arch/powerpc/kernel/cputable.c b/arch/powerpc/kernel/cputable.c index e745abc5457a..245be4fafe13 100644 --- a/arch/powerpc/kernel/cputable.c +++ b/arch/powerpc/kernel/cputable.c @@ -2193,11 +2193,13 @@ static struct cpu_spec * __init setup_cpu_spec(unsigned long offset, * oprofile_cpu_type already has a value, then we are * possibly overriding a real PVR with a logical one, * and, in that case, keep the current value for -* oprofile_cpu_type. +* oprofile_cpu_type. Futhermore, let's ensure that the +* fix for the PMAO bug is enabled on compatibility mode. */ if (old.oprofile_cpu_type != NULL) { t->oprofile_cpu_type = old.oprofile_cpu_type; t->oprofile_type = old.oprofile_type; + t->cpu_features |= old.cpu_features & CPU_FTR_PMAO_BUG; } } -- 2.21.1
[PATCH] selftests/powerpc: Use write_pmc instead of count_pmc to reset PMCs at the end of ebb selftests
By using count_pmc() to reset the pmc instead of write_pmc(), an extra count is performed on ebb_state.stats.pmc_count[PMC_INDEX(pmc)] more than the value accounted by ebb_state.stats.ebb_count in the main test loops. This extra pmc_count makes a few tests fail occasionally on PowerVM systems with high workloads, such as cycles_test shown hereafter, where the ebb_count is occasionally above the upper limit due to this extra count. Moreover, this is also indicated by extra PMC1 trace_log on the output of a few tests: == ... [21]: counter = 8 [22]: register SPRN_MMCR0 = 0x8080 [23]: register SPRN_PMC1 = 0x8004 [24]: counter = 9 [25]: register SPRN_MMCR0 = 0x8080 [26]: register SPRN_PMC1 = 0x8004 [27]: counter = 10 [28]: register SPRN_MMCR0 = 0x8080 [29]: register SPRN_PMC1 = 0x8004 >> [30]: register SPRN_PMC1 = 0x451e PMC1 count (0x28546) above upper limit 0x283e8 (+0x15e) [FAIL] Test FAILED on line 52 failure: cycles == Signed-off-by: Desnes A. Nunes do Rosario --- .../powerpc/pmu/ebb/back_to_back_ebbs_test.c | 2 +- .../testing/selftests/powerpc/pmu/ebb/cycles_test.c | 2 +- .../powerpc/pmu/ebb/cycles_with_freeze_test.c| 2 +- .../powerpc/pmu/ebb/cycles_with_mmcr2_test.c | 2 +- tools/testing/selftests/powerpc/pmu/ebb/ebb.c| 2 +- .../powerpc/pmu/ebb/ebb_on_willing_child_test.c | 2 +- .../selftests/powerpc/pmu/ebb/lost_exception_test.c | 2 +- .../selftests/powerpc/pmu/ebb/multi_counter_test.c | 12 ++-- .../selftests/powerpc/pmu/ebb/multi_ebb_procs_test.c | 2 +- .../selftests/powerpc/pmu/ebb/pmae_handling_test.c | 2 +- .../selftests/powerpc/pmu/ebb/pmc56_overflow_test.c | 2 +- 11 files changed, 16 insertions(+), 16 deletions(-) diff --git a/tools/testing/selftests/powerpc/pmu/ebb/back_to_back_ebbs_test.c b/tools/testing/selftests/powerpc/pmu/ebb/back_to_back_ebbs_test.c index a2d7b0e3dca9..f133ab425f10 100644 --- a/tools/testing/selftests/powerpc/pmu/ebb/back_to_back_ebbs_test.c +++ b/tools/testing/selftests/powerpc/pmu/ebb/back_to_back_ebbs_test.c @@ -91,7 +91,7 @@ int back_to_back_ebbs(void) ebb_global_disable(); ebb_freeze_pmcs(); - count_pmc(1, sample_period); + write_pmc(1, pmc_sample_period(sample_period)); dump_ebb_state(); diff --git a/tools/testing/selftests/powerpc/pmu/ebb/cycles_test.c b/tools/testing/selftests/powerpc/pmu/ebb/cycles_test.c index bc893813483e..14a399a64729 100644 --- a/tools/testing/selftests/powerpc/pmu/ebb/cycles_test.c +++ b/tools/testing/selftests/powerpc/pmu/ebb/cycles_test.c @@ -42,7 +42,7 @@ int cycles(void) ebb_global_disable(); ebb_freeze_pmcs(); - count_pmc(1, sample_period); + write_pmc(1, pmc_sample_period(sample_period)); dump_ebb_state(); diff --git a/tools/testing/selftests/powerpc/pmu/ebb/cycles_with_freeze_test.c b/tools/testing/selftests/powerpc/pmu/ebb/cycles_with_freeze_test.c index dcd351d20328..0f2089f6f82c 100644 --- a/tools/testing/selftests/powerpc/pmu/ebb/cycles_with_freeze_test.c +++ b/tools/testing/selftests/powerpc/pmu/ebb/cycles_with_freeze_test.c @@ -99,7 +99,7 @@ int cycles_with_freeze(void) ebb_global_disable(); ebb_freeze_pmcs(); - count_pmc(1, sample_period); + write_pmc(1, pmc_sample_period(sample_period)); dump_ebb_state(); diff --git a/tools/testing/selftests/powerpc/pmu/ebb/cycles_with_mmcr2_test.c b/tools/testing/selftests/powerpc/pmu/ebb/cycles_with_mmcr2_test.c index 94c99c12c0f2..a8f3bee04cd8 100644 --- a/tools/testing/selftests/powerpc/pmu/ebb/cycles_with_mmcr2_test.c +++ b/tools/testing/selftests/powerpc/pmu/ebb/cycles_with_mmcr2_test.c @@ -71,7 +71,7 @@ int cycles_with_mmcr2(void) ebb_global_disable(); ebb_freeze_pmcs(); - count_pmc(1, sample_period); + write_pmc(1, pmc_sample_period(sample_period)); dump_ebb_state(); diff --git a/tools/testing/selftests/powerpc/pmu/ebb/ebb.c b/tools/testing/selftests/powerpc/pmu/ebb/ebb.c index dfbc5c3ad52d..bf6f25dfcf7b 100644 --- a/tools/testing/selftests/powerpc/pmu/ebb/ebb.c +++ b/tools/testing/selftests/powerpc/pmu/ebb/ebb.c @@ -396,7 +396,7 @@ int ebb_child(union pipe read_pipe, union pipe write_pipe) ebb_global_disable(); ebb_freeze_pmcs(); - count_pmc(1, sample_period); + write_pmc(1, pmc_sample_period(sample_period)); dump_ebb_state(); diff --git a/tools/testing/selftests/powerpc/pmu/ebb/ebb_on_willing_child_test.c b/tools/testing/selftests/powerpc/pmu/ebb/ebb_on_willing_child_test.c index ca2f7d729155..513812cdcca1 100644 --- a/tools/testing/selftests/powerpc/pmu/ebb/ebb_on_willing_child_test.c +++ b/tools/testing/selftests/powerpc/pmu/ebb/ebb_on_willing_child_test.c @@ -38,7 +38,7 @@ static int victim_child(union pipe read_pipe, union pipe writ
[PATCH] selftests/powerpc: enable performance alerts when freezing counters on cycles_with_freeze_test selftest
From: Gustavo Romero When disabling freezing counters by setting MMCR0 FC bit to 0, the MMCR0 PMAE bit must also be enabled if a Performance Monitor Alert (and the cor- responding Performance Monitor Interrupt) is still desired to be received when an enabled condition or event occurs. This is the case of the cycles_with_freeze_test selftest, since the test disables the MMCR0 PMAE due to the usage of PMU to trigger EBBs. This can make the test loop up to the point of being killed by the test harness timeout (2500 ms), since no other ebb event will happen because the MMCR0 PMAE bit is disabled, and thus, no more increments to ebb_count occur. Fixes: 3752e453f6bafd7 ("selftests/powerpc: Add tests of PMU EBBs") Signed-off-by: Gustavo Romero [desnesn: Only set MMCR0_PMAE when disabling MMCR0_FC, reflow comment] Signed-off-by: Desnes A. Nunes do Rosario --- .../testing/selftests/powerpc/pmu/ebb/cycles_with_freeze_test.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/testing/selftests/powerpc/pmu/ebb/cycles_with_freeze_test.c b/tools/testing/selftests/powerpc/pmu/ebb/cycles_with_freeze_test.c index dcd351d20328..46b5a7d46c60 100644 --- a/tools/testing/selftests/powerpc/pmu/ebb/cycles_with_freeze_test.c +++ b/tools/testing/selftests/powerpc/pmu/ebb/cycles_with_freeze_test.c @@ -81,7 +81,7 @@ int cycles_with_freeze(void) { counters_frozen = false; mb(); - mtspr(SPRN_MMCR0, mfspr(SPRN_MMCR0) & ~MMCR0_FC); + mtspr(SPRN_MMCR0, (mfspr(SPRN_MMCR0) & ~MMCR0_FC) | MMCR0_PMAE); FAIL_IF(core_busy_loop()); -- 2.21.0
[PATCH, RESEND, 2/3] selftests/powerpc: enable performance alerts when freezing counters on cycles_with_freeze_test selftest
From: Gustavo Romero When disabling freezing counters by setting MMCR0 FC bit to 0, the MMCR0 PMAE bit must also be enabled if a Performance Monitor Alert (and the cor- responding Performance Monitor Interrupt) is still desired to be received when an enabled condition or event occurs. This is the case of the cycles_with_freeze_test selftest, since the test disables the MMCR0 PMAE due to the usage of PMU to trigger EBBs. This can make the test loop up to the point of being killed by the test harness timeout (2500 ms), since no other ebb event will happen because the MMCR0 PMAE bit is disabled, and thus, no more increments to ebb_count occur. Fixes: 3752e453f6bafd7 ("selftests/powerpc: Add tests of PMU EBBs") Signed-off-by: Gustavo Romero [desnesn: Only set MMCR0_PMAE when disabling MMCR0_FC, reflow comment] Signed-off-by: Desnes A. Nunes do Rosario --- .../testing/selftests/powerpc/pmu/ebb/cycles_with_freeze_test.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/testing/selftests/powerpc/pmu/ebb/cycles_with_freeze_test.c b/tools/testing/selftests/powerpc/pmu/ebb/cycles_with_freeze_test.c index 0f2089f6f82c..d368199144fb 100644 --- a/tools/testing/selftests/powerpc/pmu/ebb/cycles_with_freeze_test.c +++ b/tools/testing/selftests/powerpc/pmu/ebb/cycles_with_freeze_test.c @@ -81,7 +81,7 @@ int cycles_with_freeze(void) { counters_frozen = false; mb(); - mtspr(SPRN_MMCR0, mfspr(SPRN_MMCR0) & ~MMCR0_FC); + mtspr(SPRN_MMCR0, (mfspr(SPRN_MMCR0) & ~MMCR0_FC) | MMCR0_PMAE); FAIL_IF(core_busy_loop()); -- 2.21.1
[PATCH, RESEND, 0/3] selftests/powerpc: A few fixes on powerpc selftests
This patchseries addresses a few fixes on powerpc selftests (first and second patch are being resent). The first fix has to do with the extra counts on PMCs resets, which not only are shown on the trace_logs, but can also invalidate the results of a few selftests. On the other hand, the second fix proper addresses the Per- formance Monitor Alert (PMAE) bit on MMCR0 when freezing counters are dis- abled on cycles_with_freeze_test selftest. Lastly, the third fix adds a memory barrier on count_pmc() to ensure read consistency of PMCs. This is necessary since these values are usually accounted on ebb_handlers to val- lidade tests results, such as the overflow values on pmc56_overflow_test. Desnes A. Nunes do Rosario (2): selftests/powerpc: Use write_pmc instead of count_pmc to reset PMCs on ebb tests selftests/powerpc: ensure PMC reads are set and ordered on count_pmc Gustavo Romero (1): selftests/powerpc: enable performance alerts when freezing counters on cycles_with_freeze_test selftest .../powerpc/pmu/ebb/back_to_back_ebbs_test.c | 2 +- .../testing/selftests/powerpc/pmu/ebb/cycles_test.c | 2 +- .../powerpc/pmu/ebb/cycles_with_freeze_test.c| 4 ++-- .../powerpc/pmu/ebb/cycles_with_mmcr2_test.c | 2 +- tools/testing/selftests/powerpc/pmu/ebb/ebb.c| 6 +- .../powerpc/pmu/ebb/ebb_on_willing_child_test.c | 2 +- .../selftests/powerpc/pmu/ebb/lost_exception_test.c | 2 +- .../selftests/powerpc/pmu/ebb/multi_counter_test.c | 12 ++-- .../selftests/powerpc/pmu/ebb/multi_ebb_procs_test.c | 2 +- .../selftests/powerpc/pmu/ebb/pmae_handling_test.c | 2 +- .../selftests/powerpc/pmu/ebb/pmc56_overflow_test.c | 2 +- 11 files changed, 21 insertions(+), 17 deletions(-) -- 2.21.1
[PATCH, RESEND, 1/3] selftests/powerpc: Use write_pmc instead of count_pmc to reset PMCs on ebb tests
By using count_pmc() to reset PMCs instead of write_pmc(), an extra count is performed on ebb_state.stats.pmc_count[PMC_INDEX(pmc)]. This extra pmc_count can occasionally invalidate results, such as the ones from cycles_test shown hereafter. The ebb_check_count() failed with an above the upper limit error due to the extra ebb_state.stats.pmc_count. Furthermore, this extra count is also indicated by extra PMC1 trace_log on the output of the cycle test (as well as on pmc56_overflow_test): == ... [21]: counter = 8 [22]: register SPRN_MMCR0 = 0x8080 [23]: register SPRN_PMC1 = 0x8004 [24]: counter = 9 [25]: register SPRN_MMCR0 = 0x8080 [26]: register SPRN_PMC1 = 0x8004 [27]: counter = 10 [28]: register SPRN_MMCR0 = 0x8080 [29]: register SPRN_PMC1 = 0x8004 >> [30]: register SPRN_PMC1 = 0x451e PMC1 count (0x28546) above upper limit 0x283e8 (+0x15e) [FAIL] Test FAILED on line 52 failure: cycles == [desnesn: reflow of original comment] Signed-off-by: Desnes A. Nunes do Rosario --- .../powerpc/pmu/ebb/back_to_back_ebbs_test.c | 2 +- .../testing/selftests/powerpc/pmu/ebb/cycles_test.c | 2 +- .../powerpc/pmu/ebb/cycles_with_freeze_test.c| 2 +- .../powerpc/pmu/ebb/cycles_with_mmcr2_test.c | 2 +- tools/testing/selftests/powerpc/pmu/ebb/ebb.c| 2 +- .../powerpc/pmu/ebb/ebb_on_willing_child_test.c | 2 +- .../selftests/powerpc/pmu/ebb/lost_exception_test.c | 2 +- .../selftests/powerpc/pmu/ebb/multi_counter_test.c | 12 ++-- .../selftests/powerpc/pmu/ebb/multi_ebb_procs_test.c | 2 +- .../selftests/powerpc/pmu/ebb/pmae_handling_test.c | 2 +- .../selftests/powerpc/pmu/ebb/pmc56_overflow_test.c | 2 +- 11 files changed, 16 insertions(+), 16 deletions(-) diff --git a/tools/testing/selftests/powerpc/pmu/ebb/back_to_back_ebbs_test.c b/tools/testing/selftests/powerpc/pmu/ebb/back_to_back_ebbs_test.c index a2d7b0e3dca9..f133ab425f10 100644 --- a/tools/testing/selftests/powerpc/pmu/ebb/back_to_back_ebbs_test.c +++ b/tools/testing/selftests/powerpc/pmu/ebb/back_to_back_ebbs_test.c @@ -91,7 +91,7 @@ int back_to_back_ebbs(void) ebb_global_disable(); ebb_freeze_pmcs(); - count_pmc(1, sample_period); + write_pmc(1, pmc_sample_period(sample_period)); dump_ebb_state(); diff --git a/tools/testing/selftests/powerpc/pmu/ebb/cycles_test.c b/tools/testing/selftests/powerpc/pmu/ebb/cycles_test.c index bc893813483e..14a399a64729 100644 --- a/tools/testing/selftests/powerpc/pmu/ebb/cycles_test.c +++ b/tools/testing/selftests/powerpc/pmu/ebb/cycles_test.c @@ -42,7 +42,7 @@ int cycles(void) ebb_global_disable(); ebb_freeze_pmcs(); - count_pmc(1, sample_period); + write_pmc(1, pmc_sample_period(sample_period)); dump_ebb_state(); diff --git a/tools/testing/selftests/powerpc/pmu/ebb/cycles_with_freeze_test.c b/tools/testing/selftests/powerpc/pmu/ebb/cycles_with_freeze_test.c index dcd351d20328..0f2089f6f82c 100644 --- a/tools/testing/selftests/powerpc/pmu/ebb/cycles_with_freeze_test.c +++ b/tools/testing/selftests/powerpc/pmu/ebb/cycles_with_freeze_test.c @@ -99,7 +99,7 @@ int cycles_with_freeze(void) ebb_global_disable(); ebb_freeze_pmcs(); - count_pmc(1, sample_period); + write_pmc(1, pmc_sample_period(sample_period)); dump_ebb_state(); diff --git a/tools/testing/selftests/powerpc/pmu/ebb/cycles_with_mmcr2_test.c b/tools/testing/selftests/powerpc/pmu/ebb/cycles_with_mmcr2_test.c index 94c99c12c0f2..a8f3bee04cd8 100644 --- a/tools/testing/selftests/powerpc/pmu/ebb/cycles_with_mmcr2_test.c +++ b/tools/testing/selftests/powerpc/pmu/ebb/cycles_with_mmcr2_test.c @@ -71,7 +71,7 @@ int cycles_with_mmcr2(void) ebb_global_disable(); ebb_freeze_pmcs(); - count_pmc(1, sample_period); + write_pmc(1, pmc_sample_period(sample_period)); dump_ebb_state(); diff --git a/tools/testing/selftests/powerpc/pmu/ebb/ebb.c b/tools/testing/selftests/powerpc/pmu/ebb/ebb.c index dfbc5c3ad52d..bf6f25dfcf7b 100644 --- a/tools/testing/selftests/powerpc/pmu/ebb/ebb.c +++ b/tools/testing/selftests/powerpc/pmu/ebb/ebb.c @@ -396,7 +396,7 @@ int ebb_child(union pipe read_pipe, union pipe write_pipe) ebb_global_disable(); ebb_freeze_pmcs(); - count_pmc(1, sample_period); + write_pmc(1, pmc_sample_period(sample_period)); dump_ebb_state(); diff --git a/tools/testing/selftests/powerpc/pmu/ebb/ebb_on_willing_child_test.c b/tools/testing/selftests/powerpc/pmu/ebb/ebb_on_willing_child_test.c index ca2f7d729155..513812cdcca1 100644 --- a/tools/testing/selftests/powerpc/pmu/ebb/ebb_on_willing_child_test.c +++ b/tools/testing/selftests/powerpc/pmu/ebb/ebb_on_willing_child_test.c @@ -38,7 +38,7 @@ static int victim_child(union pipe read_pipe, union pipe writ
[PATCH 3/3] selftests/powerpc: ensure PMC reads are set and ordered on count_pmc
Function count_pmc() needs a memory barrier to ensure that PMC reads are fully consistent. The lack of it can occasionally fail pmc56_overflow test, since depending on the workload on the system, PMC5 & 6 can have past val- ues from the time the counters are frozen and turned back on. These past values will be accounted as overflows and make the test fail. = test: pmc56_overflow ... ebb_state: ... >>pmc[5] count = 0xfd4cbc8c >>pmc[6] count = 0xddd8b3b6 HW state: MMCR0 0x8400 FC PMAE MMCR2 0x EBBHR 0x10003f68 BESCR 0x8000 GE ... PMC5 0x PMC6 0x SIAR 0x10003398 ... [3]: register SPRN_PMC2 = 0x8003 [4]: register SPRN_PMC5 = 0x [5]: register SPRN_PMC6 = 0x [6]: register SPRN_PMC2 = 0x8003 >>[7]: register SPRN_PMC5 = 0x8f21266d >>[8]: register SPRN_PMC6 = 0x0da80f8d [9]: register SPRN_PMC2 = 0x8003 >>[10]: register SPRN_PMC5 = 0x6e2b961f >>[11]: register SPRN_PMC6 = 0xd030a429 [12]: register SPRN_PMC2 = 0x8003 [13]: register SPRN_PMC5 = 0x [14]: register SPRN_PMC6 = 0x ... PMC5/6 overflow 2 [FAIL] Test FAILED on line 87 failure: pmc56_overflow ===== Signed-off-by: Desnes A. Nunes do Rosario --- tools/testing/selftests/powerpc/pmu/ebb/ebb.c | 4 1 file changed, 4 insertions(+) diff --git a/tools/testing/selftests/powerpc/pmu/ebb/ebb.c b/tools/testing/selftests/powerpc/pmu/ebb/ebb.c index bf6f25dfcf7b..6199f3cea0f9 100644 --- a/tools/testing/selftests/powerpc/pmu/ebb/ebb.c +++ b/tools/testing/selftests/powerpc/pmu/ebb/ebb.c @@ -258,6 +258,10 @@ int count_pmc(int pmc, uint32_t sample_period) start_value = pmc_sample_period(sample_period); val = read_pmc(pmc); + + /* Ensure pmc value is consistent between freezes */ + mb(); + if (val < start_value) ebb_state.stats.negative++; else -- 2.21.1
[PATCH] powerpc/64: mark __boot_from_prom and start_here_common as __ref
Functions `__boot_from_prom` and `start_here_common` are "init code" in the sense that they are only executed at boot time, nevertheless they should not be tagged as __init since this will carry them to a different section located at the very end of kernel text. If the TOC is not set up, the kernel may not be able to tolerate a branch trampoline to reach the init function. Thus, these functions should be marked as `__ref` and the assembler must be reminded to insert the code that follows into the last active section by the use of the `.previous` directive. This will allow the powerpc kernel to be built with CONFIG_SECTION_MISMATCH_WARN_ONLY disabled and quieten the following modpost warnings during compilation: WARNING: vmlinux.o(.text+0x2ad4): Section mismatch in reference from the variable __boot_from_prom to the function .init.text:prom_init() The function __boot_from_prom() references the function __init prom_init(). This is often because __boot_from_prom lacks a __init annotation or the annotation of prom_init is wrong. WARNING: vmlinux.o(.text+0x2cd0): Section mismatch in reference from the variable start_here_common to the function .init.text:start_kernel() The function start_here_common() references the function __init start_kernel(). This is often because start_here_common lacks a __init annotation or the annotation of start_kernel is wrong. Credits: code is based on commit <9c4e4c90ec24> ("powerpc/64: mark start_here_multiplatform as __ref") and message is based on 2016 patch by Nicholas Piggin: https://lore.kernel.org/linuxppc-dev/20161222131419.18062-1-npig...@gmail.com/ Signed-off-by: Desnes A. Nunes do Rosario --- arch/powerpc/kernel/head_64.S | 4 1 file changed, 4 insertions(+) diff --git a/arch/powerpc/kernel/head_64.S b/arch/powerpc/kernel/head_64.S index 259be7f6d551..04b34397b656 100644 --- a/arch/powerpc/kernel/head_64.S +++ b/arch/powerpc/kernel/head_64.S @@ -540,6 +540,7 @@ __start_initialization_multiplatform: b __after_prom_start #endif /* CONFIG_PPC_BOOK3E */ +__REF __boot_from_prom: #ifdef CONFIG_PPC_OF_BOOT_TRAMPOLINE /* Save parameters */ @@ -577,6 +578,7 @@ __boot_from_prom: /* We never return. We also hit that trap if trying to boot * from OF while CONFIG_PPC_OF_BOOT_TRAMPOLINE isn't selected */ trap + .previous __after_prom_start: #ifdef CONFIG_RELOCATABLE @@ -983,6 +985,7 @@ start_here_multiplatform: .previous /* This is where all platforms converge execution */ +__REF start_here_common: /* relocation is on at this point */ std r1,PACAKSAVE(r13) @@ -1003,6 +1006,7 @@ start_here_common: /* Not reached */ BUG_OPCODE + .previous /* * We put a few things here that have to be page-aligned. -- 2.18.1
[PATCH] powerpc: fix hardware PMU exception bug on PowerVM compatibility mode systems
PowerVM systems running compatibility mode on a few Power8 revisions are still vulnerable to the hardware defect that loses PMU exceptions arriving prior to a context switch. The software fix for this issue is enabled through the CPU_FTR_PMAO_BUG cpu_feature bit, nevertheless this bit also needs to be set for PowerVM compatibility mode systems. Fixes: 68f2f0d431d9ea4 ("powerpc: Add a cpu feature CPU_FTR_PMAO_BUG") Signed-off-by: Desnes A. Nunes do Rosario --- arch/powerpc/kernel/cputable.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/arch/powerpc/kernel/cputable.c b/arch/powerpc/kernel/cputable.c index e745abc5457a..5bfef6263dfb 100644 --- a/arch/powerpc/kernel/cputable.c +++ b/arch/powerpc/kernel/cputable.c @@ -2198,6 +2198,8 @@ static struct cpu_spec * __init setup_cpu_spec(unsigned long offset, if (old.oprofile_cpu_type != NULL) { t->oprofile_cpu_type = old.oprofile_cpu_type; t->oprofile_type = old.oprofile_type; + if (old.cpu_features & CPU_FTR_PMAO_BUG) + t->cpu_features |= CPU_FTR_PMAO_BUG; } } -- 2.21.1
[PATCH] selftests/powerpc: Fix compiling error on tlbie_test due to newer gcc
Newer versions of GCC demand that the size of the string to be copied must be explicitly smaller than the size of the destination. Thus, the NULL char has to be taken into account on strncpy. This will avoid the following compiling error: tlbie_test.c: In function 'main': tlbie_test.c:639:4: error: 'strncpy' specified bound 100 equals destination size [-Werror=stringop-truncation] strncpy(logdir, optarg, LOGDIR_NAME_SIZE); ^ cc1: all warnings being treated as errors Signed-off-by: Desnes A. Nunes do Rosario --- tools/testing/selftests/powerpc/mm/tlbie_test.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/testing/selftests/powerpc/mm/tlbie_test.c b/tools/testing/selftests/powerpc/mm/tlbie_test.c index 9868a5ddd847..0d0aee462f8e 100644 --- a/tools/testing/selftests/powerpc/mm/tlbie_test.c +++ b/tools/testing/selftests/powerpc/mm/tlbie_test.c @@ -636,7 +636,7 @@ int main(int argc, char *argv[]) nrthreads = strtoul(optarg, NULL, 10); break; case 'l': - strncpy(logdir, optarg, LOGDIR_NAME_SIZE); + strncpy(logdir, optarg, LOGDIR_NAME_SIZE-1); break; case 't': run_time = strtoul(optarg, NULL, 10); -- 2.21.0
[PATCH] Revert "ibmvnic: check failover_pending in login response"
This reverts commit d437f5aa23aa2b7bd07cd44b839d7546cc17166f. Code has been duplicated through commit <273c29e944bd> "ibmvnic: check failover_pending in login response" Signed-off-by: Desnes A. Nunes do Rosario --- drivers/net/ethernet/ibm/ibmvnic.c | 8 1 file changed, 8 deletions(-) diff --git a/drivers/net/ethernet/ibm/ibmvnic.c b/drivers/net/ethernet/ibm/ibmvnic.c index a4579b340120..6aa6ff89a765 100644 --- a/drivers/net/ethernet/ibm/ibmvnic.c +++ b/drivers/net/ethernet/ibm/ibmvnic.c @@ -4708,14 +4708,6 @@ static int handle_login_rsp(union ibmvnic_crq *login_rsp_crq, return 0; } - if (adapter->failover_pending) { - adapter->init_done_rc = -EAGAIN; - netdev_dbg(netdev, "Failover pending, ignoring login response\n"); - complete(&adapter->init_done); - /* login response buffer will be released on reset */ - return 0; - } - netdev->mtu = adapter->req_mtu - ETH_HLEN; netdev_dbg(adapter->netdev, "Login Response Buffer:\n"); -- 2.31.1
[PATCH] selftests/powerpc: Purge extra count_pmc() calls of ebb selftests
An extra count on ebb_state.stats.pmc_count[PMC_INDEX(pmc)] is being per- formed when count_pmc() is used to reset PMCs on a few selftests. This extra pmc_count can occasionally invalidate results, such as the ones from cycles_test shown hereafter. The ebb_check_count() failed with an above the upper limit error due to the extra value on ebb_state.stats.pmc_count. Furthermore, this extra count is also indicated by extra PMC1 trace_log on the output of the cycle test (as well as on pmc56_overflow_test): == ... [21]: counter = 8 [22]: register SPRN_MMCR0 = 0x8080 [23]: register SPRN_PMC1 = 0x8004 [24]: counter = 9 [25]: register SPRN_MMCR0 = 0x8080 [26]: register SPRN_PMC1 = 0x8004 [27]: counter = 10 [28]: register SPRN_MMCR0 = 0x8080 [29]: register SPRN_PMC1 = 0x8004 >> [30]: register SPRN_PMC1 = 0x451e PMC1 count (0x28546) above upper limit 0x283e8 (+0x15e) [FAIL] Test FAILED on line 52 failure: cycles == Signed-off-by: Desnes A. Nunes do Rosario --- .../selftests/powerpc/pmu/ebb/back_to_back_ebbs_test.c | 2 -- tools/testing/selftests/powerpc/pmu/ebb/cycles_test.c | 2 -- .../selftests/powerpc/pmu/ebb/cycles_with_freeze_test.c| 2 -- .../selftests/powerpc/pmu/ebb/cycles_with_mmcr2_test.c | 2 -- tools/testing/selftests/powerpc/pmu/ebb/ebb.c | 2 -- .../selftests/powerpc/pmu/ebb/ebb_on_willing_child_test.c | 2 -- .../selftests/powerpc/pmu/ebb/lost_exception_test.c| 1 - .../testing/selftests/powerpc/pmu/ebb/multi_counter_test.c | 7 --- .../selftests/powerpc/pmu/ebb/multi_ebb_procs_test.c | 2 -- .../testing/selftests/powerpc/pmu/ebb/pmae_handling_test.c | 2 -- .../selftests/powerpc/pmu/ebb/pmc56_overflow_test.c| 2 -- 11 files changed, 26 deletions(-) diff --git a/tools/testing/selftests/powerpc/pmu/ebb/back_to_back_ebbs_test.c b/tools/testing/selftests/powerpc/pmu/ebb/back_to_back_ebbs_test.c index a2d7b0e3dca9..a26ac122c759 100644 --- a/tools/testing/selftests/powerpc/pmu/ebb/back_to_back_ebbs_test.c +++ b/tools/testing/selftests/powerpc/pmu/ebb/back_to_back_ebbs_test.c @@ -91,8 +91,6 @@ int back_to_back_ebbs(void) ebb_global_disable(); ebb_freeze_pmcs(); - count_pmc(1, sample_period); - dump_ebb_state(); event_close(&event); diff --git a/tools/testing/selftests/powerpc/pmu/ebb/cycles_test.c b/tools/testing/selftests/powerpc/pmu/ebb/cycles_test.c index bc893813483e..bb9f587fa76e 100644 --- a/tools/testing/selftests/powerpc/pmu/ebb/cycles_test.c +++ b/tools/testing/selftests/powerpc/pmu/ebb/cycles_test.c @@ -42,8 +42,6 @@ int cycles(void) ebb_global_disable(); ebb_freeze_pmcs(); - count_pmc(1, sample_period); - dump_ebb_state(); event_close(&event); diff --git a/tools/testing/selftests/powerpc/pmu/ebb/cycles_with_freeze_test.c b/tools/testing/selftests/powerpc/pmu/ebb/cycles_with_freeze_test.c index dcd351d20328..9ae795ce314e 100644 --- a/tools/testing/selftests/powerpc/pmu/ebb/cycles_with_freeze_test.c +++ b/tools/testing/selftests/powerpc/pmu/ebb/cycles_with_freeze_test.c @@ -99,8 +99,6 @@ int cycles_with_freeze(void) ebb_global_disable(); ebb_freeze_pmcs(); - count_pmc(1, sample_period); - dump_ebb_state(); printf("EBBs while frozen %d\n", ebbs_while_frozen); diff --git a/tools/testing/selftests/powerpc/pmu/ebb/cycles_with_mmcr2_test.c b/tools/testing/selftests/powerpc/pmu/ebb/cycles_with_mmcr2_test.c index 94c99c12c0f2..4b45a2e70f62 100644 --- a/tools/testing/selftests/powerpc/pmu/ebb/cycles_with_mmcr2_test.c +++ b/tools/testing/selftests/powerpc/pmu/ebb/cycles_with_mmcr2_test.c @@ -71,8 +71,6 @@ int cycles_with_mmcr2(void) ebb_global_disable(); ebb_freeze_pmcs(); - count_pmc(1, sample_period); - dump_ebb_state(); event_close(&event); diff --git a/tools/testing/selftests/powerpc/pmu/ebb/ebb.c b/tools/testing/selftests/powerpc/pmu/ebb/ebb.c index dfbc5c3ad52d..21537d6eb6b7 100644 --- a/tools/testing/selftests/powerpc/pmu/ebb/ebb.c +++ b/tools/testing/selftests/powerpc/pmu/ebb/ebb.c @@ -396,8 +396,6 @@ int ebb_child(union pipe read_pipe, union pipe write_pipe) ebb_global_disable(); ebb_freeze_pmcs(); - count_pmc(1, sample_period); - dump_ebb_state(); event_close(&event); diff --git a/tools/testing/selftests/powerpc/pmu/ebb/ebb_on_willing_child_test.c b/tools/testing/selftests/powerpc/pmu/ebb/ebb_on_willing_child_test.c index ca2f7d729155..b208bf6ad58d 100644 --- a/tools/testing/selftests/powerpc/pmu/ebb/ebb_on_willing_child_test.c +++ b/tools/testing/selftests/powerpc/pmu/ebb/ebb_on_willing_child_test.c @@ -38,8 +38,6 @@ static int victim_child(union pipe read_pipe, union pipe write_pipe) ebb_global_disable(); ebb_freeze_pmcs(); -
[PATCH 0/2] Silent PCI realignment messages during boot
This patchset introduces PCI_DEV_FLAGS_QUIET_PCI_REALIGN attribute in pci_dev_flags which informs the pci subsystem to suppress all realignment messages. Powerpc has aligned all of its PCI resources to its PAGE_SIZE, and this feature can be easily used on any other arch through the __weak pcibios_default_alignment() interface. However, since all PCI resources will be now realigned during boot, the following messages will not only flood the system logs, but can be inter- preted as a false positive for total PCI failure on the system. [root@system user]# dmesg | grep -i disabling [0.692270] pci :00:00.0: Disabling memory decoding and releasing memory resources [0.692324] pci :00:00.0: disabling bridge mem windows [0.729134] pci 0001:00:00.0: Disabling memory decoding and releasing memory resources [0.737352] pci 0001:00:00.0: disabling bridge mem windows [0.776295] pci 0002:00:00.0: Disabling memory decoding and releasing memory resources [0.784509] pci 0002:00:00.0: disabling bridge mem windows ... and goes on for all PCI devices ... Thus, this patchset provides a way for drivers to silent these messages if the PCI_DEV_FLAGS_QUIET_PCI_REALIGN is turned on. Moreover, it also tweaks this flag during boot on powerpc. Fixes: 38274637699 ("powerpc/powernv: Override pcibios_default_alignment() to force PCI devices to be page aligned") Signed-off-by: Desnes A. Nunes do Rosario Desnes A. Nunes do Rosario (2): pci: Addition of PCI_DEV_FLAGS_QUIET_PCI_REALIGN attribute to the PCI subsystem powerpc/powernv: Tweak PCI_DEV_FLAGS_QUIET_PCI_REALIGN on/off during boot arch/powerpc/platforms/powernv/pci.c | 14 ++ drivers/pci/pci.c| 3 ++- drivers/pci/setup-res.c | 3 ++- include/linux/pci.h | 2 ++ 4 files changed, 20 insertions(+), 2 deletions(-) -- 2.14.3
[PATCH 1/2, pci] pci: Addition of PCI_DEV_FLAGS_QUIET_PCI_REALIGN attribute to the PCI subsystem
Add PCI_DEV_FLAGS_QUIET_PCI_REALIGN to pci_dev_flags and use it to silent PCI realignment messages if the flag is turned on by a driver. Signed-off-by: Desnes A. Nunes do Rosario --- drivers/pci/pci.c | 3 ++- drivers/pci/setup-res.c | 3 ++- include/linux/pci.h | 2 ++ 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index 8c71d1a66cdd..be197c944e5f 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c @@ -5505,7 +5505,8 @@ void pci_reassigndev_resource_alignment(struct pci_dev *dev) return; } - pci_info(dev, "Disabling memory decoding and releasing memory resources\n"); + if (!(dev->dev_flags & PCI_DEV_FLAGS_QUIET_PCI_REALIGN)) + pci_info(dev, "Disabling memory decoding and releasing memory resources\n"); pci_read_config_word(dev, PCI_COMMAND, &command); command &= ~PCI_COMMAND_MEMORY; pci_write_config_word(dev, PCI_COMMAND, command); diff --git a/drivers/pci/setup-res.c b/drivers/pci/setup-res.c index 369d48d6c6f1..00a538def763 100644 --- a/drivers/pci/setup-res.c +++ b/drivers/pci/setup-res.c @@ -172,7 +172,8 @@ EXPORT_SYMBOL(pci_claim_resource); void pci_disable_bridge_window(struct pci_dev *dev) { - pci_info(dev, "disabling bridge mem windows\n"); + if (!(dev->dev_flags & PCI_DEV_FLAGS_QUIET_PCI_REALIGN)) + pci_info(dev, "disabling bridge mem windows\n"); /* MMIO Base/Limit */ pci_write_config_dword(dev, PCI_MEMORY_BASE, 0xfff0); diff --git a/include/linux/pci.h b/include/linux/pci.h index e057e8cc63e7..993f9c7dcc00 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h @@ -205,6 +205,8 @@ enum pci_dev_flags { PCI_DEV_FLAGS_NO_FLR_RESET = (__force pci_dev_flags_t) (1 << 10), /* Don't use Relaxed Ordering for TLPs directed at this device */ PCI_DEV_FLAGS_NO_RELAXED_ORDERING = (__force pci_dev_flags_t) (1 << 11), + /* Silent PCI resource realignment messages */ + PCI_DEV_FLAGS_QUIET_PCI_REALIGN = (__force pci_dev_flags_t) (1 << 12), }; enum pci_irq_reroute_variant { -- 2.14.3
[PATCH 2/2, powerpc/powernv] powerpc/powernv: Tweak PCI_DEV_FLAGS_QUIET_PCI_REALIGN on/off during boot
Turn on PCI_DEV_FLAGS_QUIET_PCI_REALIGN flag on powernv's pci driver to silent PCI realignment messages through a early stage hook, and turn it off right before the pci device is enabled with a final stage hook. Fixes: 38274637699 ("powerpc/powernv: Override pcibios_default_alignment() to force PCI devices to be page aligned") Signed-off-by: Desnes A. Nunes do Rosario --- arch/powerpc/platforms/powernv/pci.c | 14 ++ 1 file changed, 14 insertions(+) diff --git a/arch/powerpc/platforms/powernv/pci.c b/arch/powerpc/platforms/powernv/pci.c index 69d102cbf48f..d28ce0899487 100644 --- a/arch/powerpc/platforms/powernv/pci.c +++ b/arch/powerpc/platforms/powernv/pci.c @@ -1108,6 +1108,20 @@ static void pnv_p7ioc_rc_quirk(struct pci_dev *dev) } DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_IBM, 0x3b9, pnv_p7ioc_rc_quirk); +/* Fixup that disables PCI realignment menssages for all PCI devices */ +static void disable_realign_menssages(struct pci_dev *dev) +{ + dev->dev_flags |= PCI_DEV_FLAGS_QUIET_PCI_REALIGN; +} +DECLARE_PCI_FIXUP_EARLY(PCI_ANY_ID, PCI_ANY_ID, disable_realign_menssages); + +/* Fixup that enables PCI realignment messages for all PCI devices */ +static void enable_realign_menssages(struct pci_dev *dev) +{ + dev->dev_flags ^= PCI_DEV_FLAGS_QUIET_PCI_REALIGN; +} +DECLARE_PCI_FIXUP_FINAL(PCI_ANY_ID, PCI_ANY_ID, enable_realign_menssages); + void __init pnv_pci_init(void) { struct device_node *np; -- 2.14.3
[PATCH, pci, v2] pci: Delete PCI disabling informational messages
The disabling informational messages on the PCI subsystem should be deleted since they do not represent any real value for the system logs. These messages are either not presented, or presented for all PCI devices (e.g., powerpc now realigns all PCI devices to its page size). Thus, they are flooding system logs and can be interpreted as a false positive for total PCI failure on the system. [root@system user]# dmesg | grep -i disabling [0.692270] pci :00:00.0: Disabling memory decoding and releasing memory resources [0.692324] pci :00:00.0: disabling bridge mem windows [0.729134] pci 0001:00:00.0: Disabling memory decoding and releasing memory resources [0.737352] pci 0001:00:00.0: disabling bridge mem windows [0.776295] pci 0002:00:00.0: Disabling memory decoding and releasing memory resources [0.784509] pci 0002:00:00.0: disabling bridge mem windows ... and goes on for all PCI devices on the system ... Fixes: 38274637699 ("powerpc/powernv: Override pcibios_default_alignment() to force PCI devices to be page aligned") Signed-off-by: Desnes A. Nunes do Rosario --- drivers/pci/pci.c | 1 - drivers/pci/setup-res.c | 2 -- 2 files changed, 3 deletions(-) diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index 8c71d1a66cdd..1563ce1ee091 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c @@ -5505,7 +5505,6 @@ void pci_reassigndev_resource_alignment(struct pci_dev *dev) return; } - pci_info(dev, "Disabling memory decoding and releasing memory resources\n"); pci_read_config_word(dev, PCI_COMMAND, &command); command &= ~PCI_COMMAND_MEMORY; pci_write_config_word(dev, PCI_COMMAND, command); diff --git a/drivers/pci/setup-res.c b/drivers/pci/setup-res.c index 369d48d6c6f1..6bd35e8e7cde 100644 --- a/drivers/pci/setup-res.c +++ b/drivers/pci/setup-res.c @@ -172,8 +172,6 @@ EXPORT_SYMBOL(pci_claim_resource); void pci_disable_bridge_window(struct pci_dev *dev) { - pci_info(dev, "disabling bridge mem windows\n"); - /* MMIO Base/Limit */ pci_write_config_dword(dev, PCI_MEMORY_BASE, 0xfff0); -- 2.14.3
[PATCH, RESEND, pci, v2] pci: Delete PCI disabling informational messages
The disabling informational messages on the PCI subsystem should be deleted since they do not represent any real value for the system logs. These messages are either not presented, or presented for all PCI devices (e.g., powerpc now realigns all PCI devices to its page size). Thus, they are flooding system logs and can be interpreted as a false positive for total PCI failure on the system. [root@system user]# dmesg | grep -i disabling [0.692270] pci :00:00.0: Disabling memory decoding and releasing memory resources [0.692324] pci :00:00.0: disabling bridge mem windows [0.729134] pci 0001:00:00.0: Disabling memory decoding and releasing memory resources [0.737352] pci 0001:00:00.0: disabling bridge mem windows [0.776295] pci 0002:00:00.0: Disabling memory decoding and releasing memory resources [0.784509] pci 0002:00:00.0: disabling bridge mem windows ... and goes on for all PCI devices on the system ... Fixes: 38274637699 ("powerpc/powernv: Override pcibios_default_alignment() to force PCI devices to be page aligned") Signed-off-by: Desnes A. Nunes do Rosario --- drivers/pci/pci.c | 1 - drivers/pci/setup-res.c | 2 -- 2 files changed, 3 deletions(-) diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index 8c71d1a66cdd..1563ce1ee091 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c @@ -5505,7 +5505,6 @@ void pci_reassigndev_resource_alignment(struct pci_dev *dev) return; } - pci_info(dev, "Disabling memory decoding and releasing memory resources\n"); pci_read_config_word(dev, PCI_COMMAND, &command); command &= ~PCI_COMMAND_MEMORY; pci_write_config_word(dev, PCI_COMMAND, command); diff --git a/drivers/pci/setup-res.c b/drivers/pci/setup-res.c index 369d48d6c6f1..6bd35e8e7cde 100644 --- a/drivers/pci/setup-res.c +++ b/drivers/pci/setup-res.c @@ -172,8 +172,6 @@ EXPORT_SYMBOL(pci_claim_resource); void pci_disable_bridge_window(struct pci_dev *dev) { - pci_info(dev, "disabling bridge mem windows\n"); - /* MMIO Base/Limit */ pci_write_config_dword(dev, PCI_MEMORY_BASE, 0xfff0); -- 2.14.3
Re: [PATCH, RESEND, pci, v2] pci: Delete PCI disabling informational messages
Bjorn, On 04/10/2018 04:55 PM, Bjorn Helgaas wrote: On Tue, Apr 10, 2018 at 02:36:31PM -0500, Bjorn Helgaas wrote: On Wed, Apr 04, 2018 at 12:10:35PM -0300, Desnes A. Nunes do Rosario wrote: The disabling informational messages on the PCI subsystem should be deleted since they do not represent any real value for the system logs. These messages are either not presented, or presented for all PCI devices (e.g., powerpc now realigns all PCI devices to its page size). Thus, they are flooding system logs and can be interpreted as a false positive for total PCI failure on the system. [root@system user]# dmesg | grep -i disabling [0.692270] pci :00:00.0: Disabling memory decoding and releasing memory resources [0.692324] pci :00:00.0: disabling bridge mem windows [0.729134] pci 0001:00:00.0: Disabling memory decoding and releasing memory resources [0.737352] pci 0001:00:00.0: disabling bridge mem windows [0.776295] pci 0002:00:00.0: Disabling memory decoding and releasing memory resources [0.784509] pci 0002:00:00.0: disabling bridge mem windows ... and goes on for all PCI devices on the system ... Fixes: 38274637699 ("powerpc/powernv: Override pcibios_default_alignment() to force PCI devices to be page aligned") Signed-off-by: Desnes A. Nunes do Rosario Applied to pci/resource for v4.18, thanks! I should have gotten this in for v4.17, but I didn't; sorry about that. This is trivial and I'm planning to squeeze a few more things into v4.17, so I moved this to my "for-linus" branch for v4.17. No need for apologies. On the contrary, thank you very much for your review and branch change. --- drivers/pci/pci.c | 1 - drivers/pci/setup-res.c | 2 -- 2 files changed, 3 deletions(-) diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index 8c71d1a66cdd..1563ce1ee091 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c @@ -5505,7 +5505,6 @@ void pci_reassigndev_resource_alignment(struct pci_dev *dev) return; } - pci_info(dev, "Disabling memory decoding and releasing memory resources\n"); pci_read_config_word(dev, PCI_COMMAND, &command); command &= ~PCI_COMMAND_MEMORY; pci_write_config_word(dev, PCI_COMMAND, command); diff --git a/drivers/pci/setup-res.c b/drivers/pci/setup-res.c index 369d48d6c6f1..6bd35e8e7cde 100644 --- a/drivers/pci/setup-res.c +++ b/drivers/pci/setup-res.c @@ -172,8 +172,6 @@ EXPORT_SYMBOL(pci_claim_resource); void pci_disable_bridge_window(struct pci_dev *dev) { - pci_info(dev, "disabling bridge mem windows\n"); - /* MMIO Base/Limit */ pci_write_config_dword(dev, PCI_MEMORY_BASE, 0x0000fff0); -- 2.14.3 -- Desnes A. Nunes do Rosario -- Linux Developer - IBM