LinuxPPC-Dev Archive on lore.kernel.org
 help / color / mirror / Atom feed
* Patch "powerpc/64: Add CONFIG_PPC_BARRIER_NOSPEC" has been added to the 4.4-stable tree
From: gregkh @ 2019-04-29  9:51 UTC (permalink / raw)
  To: christophe.leroy, diana.craciun, gregkh, linuxppc-dev, mpe,
	msuchanek, npiggin
  Cc: stable-commits
In-Reply-To: <20190421142037.21881-36-mpe@ellerman.id.au>


This is a note to let you know that I've just added the patch titled

    powerpc/64: Add CONFIG_PPC_BARRIER_NOSPEC

to the 4.4-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     powerpc-64-add-config_ppc_barrier_nospec.patch
and it can be found in the queue-4.4 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@vger.kernel.org> know about it.


From foo@baz Mon 29 Apr 2019 11:38:37 AM CEST
From: Michael Ellerman <mpe@ellerman.id.au>
Date: Mon, 22 Apr 2019 00:20:20 +1000
Subject: powerpc/64: Add CONFIG_PPC_BARRIER_NOSPEC
To: stable@vger.kernel.org, gregkh@linuxfoundation.org
Cc: linuxppc-dev@ozlabs.org, diana.craciun@nxp.com, msuchanek@suse.de, npiggin@gmail.com, christophe.leroy@c-s.fr
Message-ID: <20190421142037.21881-36-mpe@ellerman.id.au>

From: Michael Ellerman <mpe@ellerman.id.au>

commit 179ab1cbf883575c3a585bcfc0f2160f1d22a149 upstream.

Add a config symbol to encode which platforms support the
barrier_nospec speculation barrier. Currently this is just Book3S 64
but we will add Book3E in a future patch.

Signed-off-by: Diana Craciun <diana.craciun@nxp.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 arch/powerpc/Kconfig               |    7 ++++++-
 arch/powerpc/include/asm/barrier.h |    6 +++---
 arch/powerpc/include/asm/setup.h   |    2 +-
 arch/powerpc/kernel/Makefile       |    3 ++-
 arch/powerpc/kernel/module.c       |    4 +++-
 arch/powerpc/kernel/vmlinux.lds.S  |    4 +++-
 arch/powerpc/lib/feature-fixups.c  |    6 ++++--
 7 files changed, 22 insertions(+), 10 deletions(-)

--- a/arch/powerpc/Kconfig
+++ b/arch/powerpc/Kconfig
@@ -136,7 +136,7 @@ config PPC
 	select GENERIC_SMP_IDLE_THREAD
 	select GENERIC_CMOS_UPDATE
 	select GENERIC_TIME_VSYSCALL_OLD
-	select GENERIC_CPU_VULNERABILITIES	if PPC_BOOK3S_64
+	select GENERIC_CPU_VULNERABILITIES	if PPC_BARRIER_NOSPEC
 	select GENERIC_CLOCKEVENTS
 	select GENERIC_CLOCKEVENTS_BROADCAST if SMP
 	select ARCH_HAS_TICK_BROADCAST if GENERIC_CLOCKEVENTS_BROADCAST
@@ -162,6 +162,11 @@ config PPC
 	select ARCH_HAS_DMA_SET_COHERENT_MASK
 	select HAVE_ARCH_SECCOMP_FILTER
 
+config PPC_BARRIER_NOSPEC
+    bool
+    default y
+    depends on PPC_BOOK3S_64
+
 config GENERIC_CSUM
 	def_bool CPU_LITTLE_ENDIAN
 
--- a/arch/powerpc/include/asm/barrier.h
+++ b/arch/powerpc/include/asm/barrier.h
@@ -92,7 +92,7 @@ do {									\
 #define smp_mb__after_atomic()      smp_mb()
 #define smp_mb__before_spinlock()   smp_mb()
 
-#ifdef CONFIG_PPC_BOOK3S_64
+#ifdef CONFIG_PPC_BARRIER_NOSPEC
 /*
  * Prevent execution of subsequent instructions until preceding branches have
  * been fully resolved and are no longer executing speculatively.
@@ -102,9 +102,9 @@ do {									\
 // This also acts as a compiler barrier due to the memory clobber.
 #define barrier_nospec() asm (stringify_in_c(barrier_nospec_asm) ::: "memory")
 
-#else /* !CONFIG_PPC_BOOK3S_64 */
+#else /* !CONFIG_PPC_BARRIER_NOSPEC */
 #define barrier_nospec_asm
 #define barrier_nospec()
-#endif
+#endif /* CONFIG_PPC_BARRIER_NOSPEC */
 
 #endif /* _ASM_POWERPC_BARRIER_H */
--- a/arch/powerpc/include/asm/setup.h
+++ b/arch/powerpc/include/asm/setup.h
@@ -42,7 +42,7 @@ void setup_barrier_nospec(void);
 void do_barrier_nospec_fixups(bool enable);
 extern bool barrier_nospec_enabled;
 
-#ifdef CONFIG_PPC_BOOK3S_64
+#ifdef CONFIG_PPC_BARRIER_NOSPEC
 void do_barrier_nospec_fixups_range(bool enable, void *start, void *end);
 #else
 static inline void do_barrier_nospec_fixups_range(bool enable, void *start, void *end) { };
--- a/arch/powerpc/kernel/Makefile
+++ b/arch/powerpc/kernel/Makefile
@@ -40,10 +40,11 @@ obj-$(CONFIG_PPC64)		+= setup_64.o sys_p
 obj-$(CONFIG_VDSO32)		+= vdso32/
 obj-$(CONFIG_HAVE_HW_BREAKPOINT)	+= hw_breakpoint.o
 obj-$(CONFIG_PPC_BOOK3S_64)	+= cpu_setup_ppc970.o cpu_setup_pa6t.o
-obj-$(CONFIG_PPC_BOOK3S_64)	+= cpu_setup_power.o security.o
+obj-$(CONFIG_PPC_BOOK3S_64)	+= cpu_setup_power.o
 obj-$(CONFIG_PPC_BOOK3S_64)	+= mce.o mce_power.o
 obj64-$(CONFIG_RELOCATABLE)	+= reloc_64.o
 obj-$(CONFIG_PPC_BOOK3E_64)	+= exceptions-64e.o idle_book3e.o
+obj-$(CONFIG_PPC_BARRIER_NOSPEC) += security.o
 obj-$(CONFIG_PPC64)		+= vdso64/
 obj-$(CONFIG_ALTIVEC)		+= vecemu.o
 obj-$(CONFIG_PPC_970_NAP)	+= idle_power4.o
--- a/arch/powerpc/kernel/module.c
+++ b/arch/powerpc/kernel/module.c
@@ -67,13 +67,15 @@ int module_finalize(const Elf_Ehdr *hdr,
 		do_feature_fixups(powerpc_firmware_features,
 				  (void *)sect->sh_addr,
 				  (void *)sect->sh_addr + sect->sh_size);
+#endif /* CONFIG_PPC64 */
 
+#ifdef CONFIG_PPC_BARRIER_NOSPEC
 	sect = find_section(hdr, sechdrs, "__spec_barrier_fixup");
 	if (sect != NULL)
 		do_barrier_nospec_fixups_range(barrier_nospec_enabled,
 				  (void *)sect->sh_addr,
 				  (void *)sect->sh_addr + sect->sh_size);
-#endif
+#endif /* CONFIG_PPC_BARRIER_NOSPEC */
 
 	sect = find_section(hdr, sechdrs, "__lwsync_fixup");
 	if (sect != NULL)
--- a/arch/powerpc/kernel/vmlinux.lds.S
+++ b/arch/powerpc/kernel/vmlinux.lds.S
@@ -93,14 +93,16 @@ SECTIONS
 		*(__rfi_flush_fixup)
 		__stop___rfi_flush_fixup = .;
 	}
+#endif /* CONFIG_PPC64 */
 
+#ifdef CONFIG_PPC_BARRIER_NOSPEC
 	. = ALIGN(8);
 	__spec_barrier_fixup : AT(ADDR(__spec_barrier_fixup) - LOAD_OFFSET) {
 		__start___barrier_nospec_fixup = .;
 		*(__barrier_nospec_fixup)
 		__stop___barrier_nospec_fixup = .;
 	}
-#endif
+#endif /* CONFIG_PPC_BARRIER_NOSPEC */
 
 	EXCEPTION_TABLE(0)
 
--- a/arch/powerpc/lib/feature-fixups.c
+++ b/arch/powerpc/lib/feature-fixups.c
@@ -301,6 +301,9 @@ void do_barrier_nospec_fixups_range(bool
 	printk(KERN_DEBUG "barrier-nospec: patched %d locations\n", i);
 }
 
+#endif /* CONFIG_PPC_BOOK3S_64 */
+
+#ifdef CONFIG_PPC_BARRIER_NOSPEC
 void do_barrier_nospec_fixups(bool enable)
 {
 	void *start, *end;
@@ -310,8 +313,7 @@ void do_barrier_nospec_fixups(bool enabl
 
 	do_barrier_nospec_fixups_range(enable, start, end);
 }
-
-#endif /* CONFIG_PPC_BOOK3S_64 */
+#endif /* CONFIG_PPC_BARRIER_NOSPEC */
 
 void do_lwsync_fixups(unsigned long value, void *fixup_start, void *fixup_end)
 {


Patches currently in stable-queue which might be from mpe@ellerman.id.au are

queue-4.4/powerpc-64s-add-support-for-a-store-forwarding-barrier-at-kernel-entry-exit.patch
queue-4.4/powerpc-64-make-stf-barrier-ppc_book3s_64-specific.patch
queue-4.4/powerpc-pseries-set-or-clear-security-feature-flags.patch
queue-4.4/powerpc-fsl-fix-spectre_v2-mitigations-reporting.patch
queue-4.4/powerpc-64s-patch-barrier_nospec-in-modules.patch
queue-4.4/powerpc-pseries-support-firmware-disable-of-rfi-flush.patch
queue-4.4/powerpc-rfi-flush-call-setup_rfi_flush-after-lpm-migration.patch
queue-4.4/powerpc-pseries-query-hypervisor-for-count-cache-flush-settings.patch
queue-4.4/powerpc-powernv-set-or-clear-security-feature-flags.patch
queue-4.4/powerpc-64s-add-support-for-software-count-cache-flush.patch
queue-4.4/powerpc64s-show-ori31-availability-in-spectre_v1-sysfs-file-not-v2.patch
queue-4.4/powerpc-fsl-flush-the-branch-predictor-at-each-kernel-entry-64bit.patch
queue-4.4/powerpc-fsl-update-spectre-v2-reporting.patch
queue-4.4/powerpc-64s-wire-up-cpu_show_spectre_v2.patch
queue-4.4/powerpc-64-make-meltdown-reporting-book3s-64-specific.patch
queue-4.4/powerpc-rfi-flush-make-it-possible-to-call-setup_rfi_flush-again.patch
queue-4.4/powerpc-64s-add-support-for-ori-barrier_nospec-patching.patch
queue-4.4/powerpc-use-barrier_nospec-in-copy_from_user.patch
queue-4.4/powerpc-64s-fix-section-mismatch-warnings-from-setup_rfi_flush.patch
queue-4.4/powerpc-avoid-code-patching-freed-init-sections.patch
queue-4.4/powerpc-fsl-add-macro-to-flush-the-branch-predictor.patch
queue-4.4/powerpc-xmon-add-rfi-flush-related-fields-to-paca-dump.patch
queue-4.4/powerpc-fsl-add-barrier_nospec-implementation-for-nxp-powerpc-book3e.patch
queue-4.4/powerpc-security-fix-spectre_v2-reporting.patch
queue-4.4/powerpc-add-security-feature-flags-for-spectre-meltdown.patch
queue-4.4/powerpc-powernv-use-the-security-flags-in-pnv_setup_rfi_flush.patch
queue-4.4/powerpc-64-disable-the-speculation-barrier-from-the-command-line.patch
queue-4.4/powerpc-fsl-fix-the-flush-of-branch-predictor.patch
queue-4.4/powerpc-pseries-use-the-security-flags-in-pseries_setup_rfi_flush.patch
queue-4.4/powerpc-64-add-config_ppc_barrier_nospec.patch
queue-4.4/powerpc-64s-move-cpu_show_meltdown.patch
queue-4.4/powerpc-64-use-barrier_nospec-in-syscall-entry.patch
queue-4.4/powerpc-fsl-add-nospectre_v2-command-line-argument.patch
queue-4.4/powerpc-64s-add-new-security-feature-flags-for-count-cache-flush.patch
queue-4.4/powerpc-fsl-add-infrastructure-to-fixup-branch-predictor-flush.patch
queue-4.4/powerpc-rfi-flush-differentiate-enabled-and-patched-flush-types.patch
queue-4.4/powerpc-64s-enhance-the-information-in-cpu_show_spectre_v1.patch
queue-4.4/powerpc-64-call-setup_barrier_nospec-from-setup_arch.patch
queue-4.4/powerpc-rfi-flush-always-enable-fallback-flush-on-pseries.patch
queue-4.4/powerpc-64s-improve-rfi-l1-d-cache-flush-fallback.patch
queue-4.4/powerpc-asm-add-a-patch_site-macro-helpers-for-patching-instructions.patch
queue-4.4/powerpc-pseries-add-new-h_get_cpu_characteristics-flags.patch
queue-4.4/powerpc-64s-enable-barrier_nospec-based-on-firmware-settings.patch
queue-4.4/powerpc-powernv-support-firmware-disable-of-rfi-flush.patch
queue-4.4/powerpc-rfi-flush-move-the-logic-to-avoid-a-redo-into-the-debugfs-code.patch
queue-4.4/powerpc-powernv-query-firmware-for-count-cache-flush-settings.patch
queue-4.4/powerpc-64s-wire-up-cpu_show_spectre_v1.patch
queue-4.4/powerpc-64s-add-barrier_nospec.patch
queue-4.4/powerpc-64s-enhance-the-information-in-cpu_show_meltdown.patch
queue-4.4/powerpc-move-default-security-feature-flags.patch
queue-4.4/powerpc-pseries-fix-clearing-of-security-feature-flags.patch
queue-4.4/powerpc-pseries-restore-default-security-feature-flags-on-setup.patch

^ permalink raw reply

* Re: [PATCH 40/41] drivers: tty: serial: helper for setting mmio range
From: Enrico Weigelt, metux IT consult @ 2019-04-29  9:43 UTC (permalink / raw)
  To: Esben Haabendal, Enrico Weigelt, metux IT consult
  Cc: linux-ia64, lorenzo.pieralisi, linux-mips, linux-serial, andrew,
	gregkh, sudeep.holla, liviu.dudau, linux-kernel, vz, linux,
	sparclinux, khilman, macro, slemieux.tyco, matthias.bgg, jacmet,
	linux-amlogic, andriy.shevchenko, linuxppc-dev, davem
In-Reply-To: <87ef5lz423.fsf@haabendal.dk>

On 29.04.19 09:03, Esben Haabendal wrote:

> Why not simply replace iobase, mapbase and mapsize with a struct
> resource value instead?

That was actually my original goal, when I started this. But the
situation is a bit more tricky. Many drivers (especially the old ones)
initialize these fields in different ways. And there're many places
accessing these fields.

Drivers for old devices should be handled w/ great care. I don't have
access to all that hardware, so I can't test it. Therefore, I'm trying
to move in small steps. One step ahead another.

One of my next steps would be factoring out more common operations
(eg. mapping, etc) into helpers, up to a point, where someday no driver
is accessing these fields directly anymore.

Then we could easily move everything into struct resource. On that
road, we'd also need to find a way for handling the specialities of
the various UPIO_* modes via struct resource.


--mtx

-- 
Enrico Weigelt, metux IT consult
Free software and Linux embedded engineering
info@metux.net -- +49-151-27565287

^ permalink raw reply

* Re: [PATCH stable v4.4 00/52] powerpc spectre backports for 4.4
From: Greg KH @ 2019-04-29  9:43 UTC (permalink / raw)
  To: Michael Ellerman; +Cc: npiggin, diana.craciun, linuxppc-dev, stable, msuchanek
In-Reply-To: <20190421142037.21881-1-mpe@ellerman.id.au>

On Mon, Apr 22, 2019 at 12:19:45AM +1000, Michael Ellerman wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
> 
> Hi Greg/Sasha,
> 
> Please queue up these powerpc patches for 4.4 if you have no objections.

All now queued up, thanks.

greg k-h

^ permalink raw reply

* Re: Why is suspend with s2idle available on POWER8 systems?
From: Rafael J. Wysocki @ 2019-04-29  9:08 UTC (permalink / raw)
  To: Paul Menzel
  Cc: Rafael J. Wysocki, Linux PM, Rafael J. Wysocki, LKML,
	Paul Mackerras, linuxppc-dev
In-Reply-To: <c4c2f89f-9af7-01de-9144-9f11a8dafd58@molgen.mpg.de>

On Mon, Apr 29, 2019 at 10:50 AM Paul Menzel <pmenzel@molgen.mpg.de> wrote:
>
> Dear Rafael,
>
>
> On 04/29/2019 09:17 AM, Rafael J. Wysocki wrote:
> > On Sat, Apr 27, 2019 at 12:54 PM Paul Menzel <pmenzel@molgen.mpg.de> wrote:
>
> >> Updating an IBM S822LC from Ubuntu 18.10 to 19.04 some user space stuff
> >> seems to have changed, so that going into sleep/suspend is enabled.
> >>
> >> That raises two questions.
> >>
> >> 1.  Is suspend actually supported on a POWER8 processor?
> >
> > Suspend-to-idle is a special variant of system suspend that does not
> > depend on any special platform support.  It works by suspending
> > devices and letting all of the CPUs in the system go idle (hence the
> > name).
> >
> > Also see https://www.kernel.org/doc/html/latest/admin-guide/pm/sleep-states.html#suspend-to-idle
>
> Thanks. I guess I mixed it up with the new S0ix-states [1].

Those can be entered via suspend-to-idle, if supported and actually
reachable on a given platform, but suspend-to-idle is more general
than that.

> >>> Apr 27 10:18:13 power NetworkManager[7534]: <info>  [1556353093.7224] manager: sleep: sleep requested (sleeping: no  e
> >>> Apr 27 10:18:13 power systemd[1]: Reached target Sleep.
> >>> Apr 27 10:18:13 power systemd[1]: Starting Suspend...
> >>> Apr 27 10:18:13 power systemd-sleep[82190]: Suspending system...
> >>> Apr 27 10:18:13 power kernel: PM: suspend entry (s2idle)
> >>> -- Reboot --
> >>
> >>> $ uname -m
> >>> ppc64le
> >>> $ more /proc/version
> >>> Linux version 5.1.0-rc6+ (joey@power) (gcc version 8.3.0 (Ubuntu 8.3.0-6ubuntu1)) #1 SMP Sat Apr 27 10:01:48 CEST 2019
> >>> $ more /sys/power/mem_sleep
> >>> [s2idle]
> >>> $ more /sys/power/state
> >>> freeze mem
> >>> $ grep _SUSPEND /boot/config-5.0.0-14-generic # also enabled in Ubuntu’s configuration
> >>> CONFIG_ARCH_SUSPEND_POSSIBLE=y
> >>> CONFIG_SUSPEND=y
> >>> CONFIG_SUSPEND_FREEZER=y
> >>> # CONFIG_SUSPEND_SKIP_SYNC is not set
> >>> # CONFIG_PM_TEST_SUSPEND is not set
> >>
> >> Should the Kconfig symbol `SUSPEND` be selectable? If yes, should their
> >> be some detection during runtime?
> >>
> >> 2.  If it is supported, what are the ways to getting it to resume? What
> >> would the IPMI command be?
> >
> > That would depend on the distribution.
> >
> > Generally, you need to set up at least one device to generate wakeup
> > interrupts.
> >
> > The interface to do that are the /sys/devices/.../power/wakeup files,
> > but that has to cause enble_irq_wake() to be called for the given IRQ,
> > so some support in the underlying drivers need to be present for it to
> > work.
> >
> > USB devices generally work as wakeup sources if the controllers reside
> > on a PCI bus, for example.
>
> ```
> $ find /sys/devices/ -name wakeup | xargs grep enabled
> /sys/devices/pci0021:00/0021:00:00.0/0021:01:00.0/0021:02:09.0/0021:0d:00.0/usb1/1-3/1-3.4/power/wakeup:enabled
> /sys/devices/pci0021:00/0021:00:00.0/0021:01:00.0/0021:02:09.0/0021:0d:00.0/power/wakeup:enabled
> $ lsusb -t
> /:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 5000M
> /:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 480M
>     |__ Port 3: Dev 2, If 0, Class=Hub, Driver=hub/5p, 480M
>         |__ Port 1: Dev 3, If 0, Class=Mass Storage, Driver=usb-storage, 480M
>         |__ Port 2: Dev 4, If 0, Class=Mass Storage, Driver=usb-storage, 480M
>         |__ Port 3: Dev 5, If 0, Class=Mass Storage, Driver=usb-storage, 480M
>         |__ Port 4: Dev 6, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
>         |__ Port 4: Dev 6, If 1, Class=Human Interface Device, Driver=usbhid, 1.5M
> $ lsusb
> Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
> Bus 001 Device 006: ID 046b:ff10 American Megatrends, Inc. Virtual Keyboard and Mouse
> Bus 001 Device 005: ID 046b:ff31 American Megatrends, Inc.
> Bus 001 Device 004: ID 046b:ff40 American Megatrends, Inc.
> Bus 001 Device 003: ID 046b:ff20 American Megatrends, Inc.
> Bus 001 Device 002: ID 046b:ff01 American Megatrends, Inc.
> Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
> ```

I'm not really sure what you wanted to say here, but it looks like
system wakeup is not enabled for device 6 on bus 1 which is probably
what you want.

^ permalink raw reply

* [PATCH] powerpc/32s: fix BATs setting with CONFIG_STRICT_KERNEL_RWX
From: Christophe Leroy @ 2019-04-29  9:08 UTC (permalink / raw)
  To: Benjamin Herrenschmidt, Paul Mackerras, Michael Ellerman,
	Serge Belyshev
  Cc: linuxppc-dev, linux-kernel, stable

Serge reported some crashes with CONFIG_STRICT_KERNEL_RWX enabled
on a book3s32 machine.

Analysis shows two issues:
- BATs addresses and sizes are not properly aligned.
- There is a gap between the last address covered by BATs and the
first address covered by pages.

Memory mapped with DBATs:
0: 0xc0000000-0xc07fffff 0x00000000 Kernel RO coherent
1: 0xc0800000-0xc0bfffff 0x00800000 Kernel RO coherent
2: 0xc0c00000-0xc13fffff 0x00c00000 Kernel RW coherent
3: 0xc1400000-0xc23fffff 0x01400000 Kernel RW coherent
4: 0xc2400000-0xc43fffff 0x02400000 Kernel RW coherent
5: 0xc4400000-0xc83fffff 0x04400000 Kernel RW coherent
6: 0xc8400000-0xd03fffff 0x08400000 Kernel RW coherent
7: 0xd0400000-0xe03fffff 0x10400000 Kernel RW coherent

Memory mapped with pages:
0xe1000000-0xefffffff  0x21000000       240M        rw       present           dirty  accessed

This patch fixes both issues. With the patch, we get the following
which is as expected:

Memory mapped with DBATs:
0: 0xc0000000-0xc07fffff 0x00000000 Kernel RO coherent
1: 0xc0800000-0xc0bfffff 0x00800000 Kernel RO coherent
2: 0xc0c00000-0xc0ffffff 0x00c00000 Kernel RW coherent
3: 0xc1000000-0xc1ffffff 0x01000000 Kernel RW coherent
4: 0xc2000000-0xc3ffffff 0x02000000 Kernel RW coherent
5: 0xc4000000-0xc7ffffff 0x04000000 Kernel RW coherent
6: 0xc8000000-0xcfffffff 0x08000000 Kernel RW coherent
7: 0xd0000000-0xdfffffff 0x10000000 Kernel RW coherent

Memory mapped with pages:
0xe0000000-0xefffffff  0x20000000       256M        rw       present           dirty  accessed

Reported-by: Serge Belyshev <belyshev@depni.sinp.msu.ru>
Fixes: 63b2bc619565 ("powerpc/mm/32s: Use BATs for STRICT_KERNEL_RWX")
Cc: stable@vger.kernel.org
Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
---
 arch/powerpc/mm/ppc_mmu_32.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/arch/powerpc/mm/ppc_mmu_32.c b/arch/powerpc/mm/ppc_mmu_32.c
index bf1de3ca39bc..37cf2af98f6a 100644
--- a/arch/powerpc/mm/ppc_mmu_32.c
+++ b/arch/powerpc/mm/ppc_mmu_32.c
@@ -101,7 +101,7 @@ static int find_free_bat(void)
 static unsigned int block_size(unsigned long base, unsigned long top)
 {
 	unsigned int max_size = (cpu_has_feature(CPU_FTR_601) ? 8 : 256) << 20;
-	unsigned int base_shift = (fls(base) - 1) & 31;
+	unsigned int base_shift = (ffs(base) - 1) & 31;
 	unsigned int block_shift = (fls(top - base) - 1) & 31;
 
 	return min3(max_size, 1U << base_shift, 1U << block_shift);
@@ -157,7 +157,7 @@ static unsigned long __init __mmu_mapin_ram(unsigned long base, unsigned long to
 
 unsigned long __init mmu_mapin_ram(unsigned long base, unsigned long top)
 {
-	int done;
+	unsigned long done;
 	unsigned long border = (unsigned long)__init_begin - PAGE_OFFSET;
 
 	if (__map_without_bats) {
@@ -169,10 +169,10 @@ unsigned long __init mmu_mapin_ram(unsigned long base, unsigned long top)
 		return __mmu_mapin_ram(base, top);
 
 	done = __mmu_mapin_ram(base, border);
-	if (done != border - base)
+	if (done != border)
 		return done;
 
-	return done + __mmu_mapin_ram(border, top);
+	return __mmu_mapin_ram(border, top);
 }
 
 void mmu_mark_initmem_nx(void)
-- 
2.13.3


^ permalink raw reply related

* Re: Why is suspend with s2idle available on POWER8 systems?
From: Paul Menzel @ 2019-04-29  8:50 UTC (permalink / raw)
  To: Rafael J. Wysocki
  Cc: Linux PM, Rafael J. Wysocki, LKML, Paul Mackerras, linuxppc-dev
In-Reply-To: <CAJZ5v0gobp60Pn5cdh0CohGAXSBs-EvntNqKc_dj_UTnOiogkQ@mail.gmail.com>

[-- Attachment #1: Type: text/plain, Size: 3899 bytes --]

Dear Rafael,


On 04/29/2019 09:17 AM, Rafael J. Wysocki wrote:
> On Sat, Apr 27, 2019 at 12:54 PM Paul Menzel <pmenzel@molgen.mpg.de> wrote:

>> Updating an IBM S822LC from Ubuntu 18.10 to 19.04 some user space stuff
>> seems to have changed, so that going into sleep/suspend is enabled.
>>
>> That raises two questions.
>>
>> 1.  Is suspend actually supported on a POWER8 processor?
> 
> Suspend-to-idle is a special variant of system suspend that does not
> depend on any special platform support.  It works by suspending
> devices and letting all of the CPUs in the system go idle (hence the
> name).
> 
> Also see https://www.kernel.org/doc/html/latest/admin-guide/pm/sleep-states.html#suspend-to-idle

Thanks. I guess I mixed it up with the new S0ix-states [1].

>>> Apr 27 10:18:13 power NetworkManager[7534]: <info>  [1556353093.7224] manager: sleep: sleep requested (sleeping: no  e
>>> Apr 27 10:18:13 power systemd[1]: Reached target Sleep.
>>> Apr 27 10:18:13 power systemd[1]: Starting Suspend...
>>> Apr 27 10:18:13 power systemd-sleep[82190]: Suspending system...
>>> Apr 27 10:18:13 power kernel: PM: suspend entry (s2idle)
>>> -- Reboot --
>>
>>> $ uname -m
>>> ppc64le
>>> $ more /proc/version
>>> Linux version 5.1.0-rc6+ (joey@power) (gcc version 8.3.0 (Ubuntu 8.3.0-6ubuntu1)) #1 SMP Sat Apr 27 10:01:48 CEST 2019
>>> $ more /sys/power/mem_sleep
>>> [s2idle]
>>> $ more /sys/power/state
>>> freeze mem
>>> $ grep _SUSPEND /boot/config-5.0.0-14-generic # also enabled in Ubuntu’s configuration
>>> CONFIG_ARCH_SUSPEND_POSSIBLE=y
>>> CONFIG_SUSPEND=y
>>> CONFIG_SUSPEND_FREEZER=y
>>> # CONFIG_SUSPEND_SKIP_SYNC is not set
>>> # CONFIG_PM_TEST_SUSPEND is not set
>>
>> Should the Kconfig symbol `SUSPEND` be selectable? If yes, should their
>> be some detection during runtime?
>>
>> 2.  If it is supported, what are the ways to getting it to resume? What
>> would the IPMI command be?
> 
> That would depend on the distribution.
> 
> Generally, you need to set up at least one device to generate wakeup
> interrupts.
> 
> The interface to do that are the /sys/devices/.../power/wakeup files,
> but that has to cause enble_irq_wake() to be called for the given IRQ,
> so some support in the underlying drivers need to be present for it to
> work.
> 
> USB devices generally work as wakeup sources if the controllers reside
> on a PCI bus, for example.

```
$ find /sys/devices/ -name wakeup | xargs grep enabled
/sys/devices/pci0021:00/0021:00:00.0/0021:01:00.0/0021:02:09.0/0021:0d:00.0/usb1/1-3/1-3.4/power/wakeup:enabled
/sys/devices/pci0021:00/0021:00:00.0/0021:01:00.0/0021:02:09.0/0021:0d:00.0/power/wakeup:enabled
$ lsusb -t
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 5000M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 480M
    |__ Port 3: Dev 2, If 0, Class=Hub, Driver=hub/5p, 480M
        |__ Port 1: Dev 3, If 0, Class=Mass Storage, Driver=usb-storage, 480M
        |__ Port 2: Dev 4, If 0, Class=Mass Storage, Driver=usb-storage, 480M
        |__ Port 3: Dev 5, If 0, Class=Mass Storage, Driver=usb-storage, 480M
        |__ Port 4: Dev 6, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
        |__ Port 4: Dev 6, If 1, Class=Human Interface Device, Driver=usbhid, 1.5M
$ lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 006: ID 046b:ff10 American Megatrends, Inc. Virtual Keyboard and Mouse
Bus 001 Device 005: ID 046b:ff31 American Megatrends, Inc. 
Bus 001 Device 004: ID 046b:ff40 American Megatrends, Inc. 
Bus 001 Device 003: ID 046b:ff20 American Megatrends, Inc. 
Bus 001 Device 002: ID 046b:ff01 American Megatrends, Inc. 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
```


Kind regards,

Paul


[1]: https://01.org/blogs/qwang59/2018/how-achieve-s0ix-states-linux


[-- Attachment #2: S/MIME Cryptographic Signature --]
[-- Type: application/pkcs7-signature, Size: 5174 bytes --]

^ permalink raw reply

* Re: BUG: crash in __tlb_remove_page_size with STRICT_KERNEL_RWX on BOOK3S_32
From: Christophe Leroy @ 2019-04-29  8:49 UTC (permalink / raw)
  To: Serge Belyshev; +Cc: linuxppc-dev
In-Reply-To: <87k1fd5ikm.fsf@depni.sinp.msu.ru>



Le 29/04/2019 à 10:20, Serge Belyshev a écrit :
> Hi!
> 
>> As pointed by Segher, those are not correct, bat 2 for instance should
>> be 0xc0c00000-0xc0ffffff
>>
>> Could you try the below changes ?
>>
>> commit 5953416b8ef52107e8f04559a08a90aa5368cfcd
>> Author: Christophe Leroy <christophe.leroy@c-s.fr>
>> Date:   Mon Apr 29 07:22:08 2019 +0000
>>
>>      powerpc/32s: fix BATs setting with CONFIG_STRICT_KERNEL_RWX
>>
> 
> The box did boot successfully, and survived disk read test, thanks!
> Here is the new debug information for the record:

Thanks for testing. I'll send a proper patch to Michael

> 
> 
>> /sys/kernel/debug/kernel_page_tables
> 
> ---[ Start of kernel VM ]---
> 0xe0000000-0xefffffff  0x20000000       256M        rw       present           dirty  accessed

The above looks a lot better.

It shows that 256M of RAM is not mapped with bats.

I'd recommend you to change CONFIG_DATA_SHIFT to 23 (you need 
CONFIG_ADVANCED_OPTIONS and CONFIG_DATA_SHIFT_BOOL to be able to wave 
the default value), that should free some bats used for small blocks and 
make it available for mapping that area.


> 
>> /sys/kernel/debug/powerpc/block_address_translation
> 
> ---[ Instruction Block Address Translation ]---
> 0: 0xc0000000-0xc07fffff 0x00000000 Kernel EXEC coherent
> 1: 0xc0800000-0xc087ffff 0x00800000 Kernel EXEC coherent
> 2:         -
> 3:         -
> 4:         -
> 5:         -
> 6:         -
> 7:         -
> 
> ---[ Data Block Address Translation ]---
> 0: 0xc0000000-0xc07fffff 0x00000000 Kernel RO coherent
> 1: 0xc0800000-0xc0bfffff 0x00800000 Kernel RO coherent
> 2: 0xc0c00000-0xc0ffffff 0x00c00000 Kernel RW coherent
> 3: 0xc1000000-0xc1ffffff 0x01000000 Kernel RW coherent
> 4: 0xc2000000-0xc3ffffff 0x02000000 Kernel RW coherent
> 5: 0xc4000000-0xc7ffffff 0x04000000 Kernel RW coherent
> 6: 0xc8000000-0xcfffffff 0x08000000 Kernel RW coherent
> 7: 0xd0000000-0xdfffffff 0x10000000 Kernel RW coherent

Looks as it should be. So you now have:

8M + 4M are Read Only
4M + 16M + 32M + 64M + 128M + 256M are Read Write
256M mapped by pages as there are only 8 bats.

With the change I suggested above, you should end up with:
16M be Read Only
16M + 32M + 64M + 128M + 256M + 256M be Read Write.

Christophe

> 
> 
>> /sys/kernel/debug/powerpc/segment_registers
> 
> ---[ User Segments ]---
> 0x00000000-0x0fffffff Kern key 1 User key 1 VSID 0x5d84d0
> 0x10000000-0x1fffffff Kern key 1 User key 1 VSID 0x5d85e1
> 0x20000000-0x2fffffff Kern key 1 User key 1 VSID 0x5d86f2
> 0x30000000-0x3fffffff Kern key 1 User key 1 VSID 0x5d8803
> 0x40000000-0x4fffffff Kern key 1 User key 1 VSID 0x5d8914
> 0x50000000-0x5fffffff Kern key 1 User key 1 VSID 0x5d8a25
> 0x60000000-0x6fffffff Kern key 1 User key 1 VSID 0x5d8b36
> 0x70000000-0x7fffffff Kern key 1 User key 1 VSID 0x5d8c47
> 0x80000000-0x8fffffff Kern key 1 User key 1 VSID 0x5d8d58
> 0x90000000-0x9fffffff Kern key 1 User key 1 VSID 0x5d8e69
> 0xa0000000-0xafffffff Kern key 1 User key 1 VSID 0x5d8f7a
> 0xb0000000-0xbfffffff Kern key 1 User key 1 VSID 0x5d908b
> 
> ---[ Kernel Segments ]---
> 0xc0000000-0xcfffffff Kern key 0 User key 1 No Exec VSID 0x000ccc
> 0xd0000000-0xdfffffff Kern key 0 User key 1 No Exec VSID 0x000ddd
> 0xe0000000-0xefffffff Kern key 0 User key 1 No Exec VSID 0x000eee
> 0xf0000000-0xffffffff Kern key 0 User key 1 No Exec VSID 0x000fff
> 
> 
>> first lines of dmesg
> 
> [    0.000000] Total memory = 1024MB; using 2048kB for hash table (at (ptrval))
> [    0.000000] Linux version 5.1.0-rc7-dirty (ssb@spider) (gcc version 9.0.1 20190426 (prerelease) (GCC)) #1193 PREEMPT Mon Apr 29 10:59:53 MSK 2019
> [    0.000000] Found UniNorth memory controller & host bridge @ 0xf8000000 revision: 0xd2
> [    0.000000] Mapped at 0xff7c0000
> [    0.000000] Found a Intrepid mac-io controller, rev: 0, mapped at 0x(ptrval)
> [    0.000000] Processor NAP mode on idle enabled.
> [    0.000000] PowerMac motherboard: PowerBook G4 15"
> [    0.000000] Using PowerMac machine description
> [    0.000000] printk: bootconsole [udbg0] enabled
> [    0.000000] -----------------------------------------------------
> [    0.000000] Hash_size         = 0x200000
> [    0.000000] phys_mem_size     = 0x40000000
> [    0.000000] dcache_bsize      = 0x20
> [    0.000000] icache_bsize      = 0x20
> [    0.000000] cpu_features      = 0x000000002510600a
> [    0.000000]   possible        = 0x000000002f7ff14b
> [    0.000000]   always          = 0x0000000000000000
> [    0.000000] cpu_user_features = 0x9c000001 0x00000000
> [    0.000000] mmu_features      = 0x00010001
> [    0.000000] Hash              = 0x(ptrval)
> [    0.000000] Hash_mask         = 0x7fff
> [    0.000000] -----------------------------------------------------
> [    0.000000] Found UniNorth PCI host bridge at 0x00000000f0000000. Firmware bus number: 0->1
> [    0.000000] PCI host bridge /pci@f0000000  ranges:
> [    0.000000]  MEM 0x00000000f1000000..0x00000000f1ffffff -> 0x00000000f1000000
> [    0.000000]   IO 0x00000000f0000000..0x00000000f07fffff -> 0x0000000000000000
> [    0.000000]  MEM 0x00000000b0000000..0x00000000bfffffff -> 0x00000000b0000000
> [    0.000000] Found UniNorth PCI host bridge at 0x00000000f2000000. Firmware bus number: 0->1
> [    0.000000] PCI host bridge /pci@f2000000 (primary) ranges:
> [    0.000000]  MEM 0x00000000f3000000..0x00000000f3ffffff -> 0x00000000f3000000
> [    0.000000]   IO 0x00000000f2000000..0x00000000f27fffff -> 0x0000000000000000
> [    0.000000]  MEM 0x0000000080000000..0x00000000afffffff -> 0x0000000080000000
> [    0.000000] Found UniNorth PCI host bridge at 0x00000000f4000000. Firmware bus number: 0->1
> [    0.000000] PCI host bridge /pci@f4000000  ranges:
> [    0.000000]  MEM 0x00000000f5000000..0x00000000f5ffffff -> 0x00000000f5000000
> [    0.000000]   IO 0x00000000f4000000..0x00000000f47fffff -> 0x0000000000000000
> [    0.000000] via-pmu: Server Mode is disabled
> [    0.000000] PMU driver v2 initialized for Core99, firmware: 0c
> [    0.000000] Top of RAM: 0x40000000, Total RAM: 0x40000000
> [    0.000000] Memory hole size: 0MB
> [    0.000000] Zone ranges:
> [    0.000000]   Normal   [mem 0x0000000000000000-0x000000002fffffff]
> [    0.000000]   HighMem  [mem 0x0000000030000000-0x000000003fffffff]
> [    0.000000] Movable zone start for each node
> [    0.000000] Early memory node ranges
> [    0.000000]   node   0: [mem 0x0000000000000000-0x000000003fffffff]
> [    0.000000] Initmem setup node 0 [mem 0x0000000000000000-0x000000003fffffff]
> [    0.000000] On node 0 totalpages: 262144
> [    0.000000]   Normal zone: 1536 pages used for memmap
> [    0.000000]   Normal zone: 0 pages reserved
> [    0.000000]   Normal zone: 196608 pages, LIFO batch:63
> [    0.000000]   HighMem zone: 65536 pages, LIFO batch:15
> [    0.000000] pcpu-alloc: s0 r0 d32768 u32768 alloc=1*32768
> [    0.000000] pcpu-alloc: [0] 0
> [    0.000000] Built 1 zonelists, mobility grouping on.  Total pages: 260608
> [    0.000000] Kernel command line: root=/dev/hda3 ro console=ttyUSB0,115200 console=tty0 consoleblank=120
> [    0.000000] Dentry cache hash table entries: 131072 (order: 7, 524288 bytes)
> [    0.000000] Inode-cache hash table entries: 65536 (order: 6, 262144 bytes)
> [    0.000000] Memory: 1023076K/1048576K available (8704K kernel code, 352K rwdata, 1344K rodata, 208K init, 1176K bss, 25500K reserved, 0K cma-reserved, 262144K highmem)
> [    0.000000] Kernel virtual memory layout:
> [    0.000000]   * 0xfffcf000..0xfffff000  : fixmap
> [    0.000000]   * 0xff800000..0xffc00000  : highmem PTEs
> [    0.000000]   * 0xfde2b000..0xff800000  : early ioremap
> [    0.000000]   * 0xf1000000..0xfde2b000  : vmalloc & ioremap
> [    0.000000] SLUB: HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
> 

^ permalink raw reply

* [PATCH 2/2] PCI: layerscape: EP and RC drivers are compiled separately
From: Xiaowei Bao @ 2019-04-29  8:19 UTC (permalink / raw)
  To: bhelgaas, robh+dt, mark.rutland, shawnguo, leoyang.li, kishon,
	lorenzo.pieralisi, arnd, gregkh, minghuan.Lian, mingkai.hu,
	roy.zang, kstewart, pombredanne, shawn.lin, linux-pci, devicetree,
	linux-kernel, linux-arm-kernel, linuxppc-dev
  Cc: Xiaowei Bao
In-Reply-To: <20190429081957.47945-1-xiaowei.bao@nxp.com>

Compile the EP and RC drivers separately with different configuration
options, this looks clearer.

Signed-off-by: Xiaowei Bao <xiaowei.bao@nxp.com>
---
 drivers/pci/controller/dwc/Kconfig  |   20 ++++++++++++++++++--
 drivers/pci/controller/dwc/Makefile |    3 ++-
 2 files changed, 20 insertions(+), 3 deletions(-)

diff --git a/drivers/pci/controller/dwc/Kconfig b/drivers/pci/controller/dwc/Kconfig
index 9061823..84f8906 100644
--- a/drivers/pci/controller/dwc/Kconfig
+++ b/drivers/pci/controller/dwc/Kconfig
@@ -131,13 +131,29 @@ config PCI_KEYSTONE_EP
 	 implement the driver.
 
 config PCI_LAYERSCAPE
-	bool "Freescale Layerscape PCIe controller"
+	bool "Freescale Layerscape PCIe controller - Host mode"
 	depends on OF && (ARM || ARCH_LAYERSCAPE || COMPILE_TEST)
 	depends on PCI_MSI_IRQ_DOMAIN
 	select MFD_SYSCON
 	select PCIE_DW_HOST
 	help
-	  Say Y here if you want PCIe controller support on Layerscape SoCs.
+	  Say Y here if you want to enable PCIe controller support on Layerscape
+	  SoCs to work in Host mode.
+	  This controller can work either as EP or RC. The RCW[HOST_AGT_PEX]
+	  determines which PCIe controller works in EP mode and which PCIe
+	  controller works in RC mode.
+
+config PCI_LAYERSCAPE_EP
+	bool "Freescale Layerscape PCIe controller - Endpoint mode"
+	depends on OF && (ARM || ARCH_LAYERSCAPE || COMPILE_TEST)
+	depends on PCI_ENDPOINT
+	select PCIE_DW_EP
+	help
+	  Say Y here if you want to enable PCIe controller support on Layerscape
+	  SoCs to work in Endpoint mode.
+	  This controller can work either as EP or RC. The RCW[HOST_AGT_PEX]
+	  determines which PCIe controller works in EP mode and which PCIe
+	  controller works in RC mode.
 
 config PCI_HISI
 	depends on OF && (ARM64 || COMPILE_TEST)
diff --git a/drivers/pci/controller/dwc/Makefile b/drivers/pci/controller/dwc/Makefile
index b085dfd..824fde7 100644
--- a/drivers/pci/controller/dwc/Makefile
+++ b/drivers/pci/controller/dwc/Makefile
@@ -8,7 +8,8 @@ obj-$(CONFIG_PCI_EXYNOS) += pci-exynos.o
 obj-$(CONFIG_PCI_IMX6) += pci-imx6.o
 obj-$(CONFIG_PCIE_SPEAR13XX) += pcie-spear13xx.o
 obj-$(CONFIG_PCI_KEYSTONE) += pci-keystone.o
-obj-$(CONFIG_PCI_LAYERSCAPE) += pci-layerscape.o pci-layerscape-ep.o
+obj-$(CONFIG_PCI_LAYERSCAPE) += pci-layerscape.o
+obj-$(CONFIG_PCI_LAYERSCAPE_EP) += pci-layerscape-ep.o
 obj-$(CONFIG_PCIE_QCOM) += pcie-qcom.o
 obj-$(CONFIG_PCIE_ARMADA_8K) += pcie-armada8k.o
 obj-$(CONFIG_PCIE_ARTPEC6) += pcie-artpec6.o
-- 
1.7.1


^ permalink raw reply related

* [PATCH 1/2] PCI: layerscape: Add the bar_fixed_64bit property in EP driver.
From: Xiaowei Bao @ 2019-04-29  8:19 UTC (permalink / raw)
  To: bhelgaas, robh+dt, mark.rutland, shawnguo, leoyang.li, kishon,
	lorenzo.pieralisi, arnd, gregkh, minghuan.Lian, mingkai.hu,
	roy.zang, kstewart, pombredanne, shawn.lin, linux-pci, devicetree,
	linux-kernel, linux-arm-kernel, linuxppc-dev
  Cc: Xiaowei Bao

The PCIe controller of layerscape just have 4 BARs, BAR0 and BAR1
is 32bit, BAR3 and BAR4 is 64bit, this is determined by hardware,
so set the bar_fixed_64bit with 0x14.

Signed-off-by: Xiaowei Bao <xiaowei.bao@nxp.com>
---
 drivers/pci/controller/dwc/pci-layerscape-ep.c |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/drivers/pci/controller/dwc/pci-layerscape-ep.c b/drivers/pci/controller/dwc/pci-layerscape-ep.c
index be61d96..e2fbdff 100644
--- a/drivers/pci/controller/dwc/pci-layerscape-ep.c
+++ b/drivers/pci/controller/dwc/pci-layerscape-ep.c
@@ -44,6 +44,7 @@ static int ls_pcie_establish_link(struct dw_pcie *pci)
 	.linkup_notifier = false,
 	.msi_capable = true,
 	.msix_capable = false,
+	.bar_fixed_64bit = 0x14,
 };
 
 static const struct pci_epc_features*
-- 
1.7.1


^ permalink raw reply related

* Re: BUG: crash in __tlb_remove_page_size with STRICT_KERNEL_RWX on BOOK3S_32
From: Serge Belyshev @ 2019-04-29  8:20 UTC (permalink / raw)
  To: Christophe Leroy; +Cc: linuxppc-dev
In-Reply-To: <0cb9dc35-af5b-912f-53b6-d83558ecbbcb@c-s.fr>

Hi!

> As pointed by Segher, those are not correct, bat 2 for instance should
> be 0xc0c00000-0xc0ffffff
>
> Could you try the below changes ?
>
> commit 5953416b8ef52107e8f04559a08a90aa5368cfcd
> Author: Christophe Leroy <christophe.leroy@c-s.fr>
> Date:   Mon Apr 29 07:22:08 2019 +0000
>
>     powerpc/32s: fix BATs setting with CONFIG_STRICT_KERNEL_RWX
>

The box did boot successfully, and survived disk read test, thanks!
Here is the new debug information for the record:


> /sys/kernel/debug/kernel_page_tables

---[ Start of kernel VM ]---
0xe0000000-0xefffffff  0x20000000       256M        rw       present           dirty  accessed                         
---[ vmalloc() Area ]---
0xf1000000-0xf1000fff  0x80041000         4K        rw       present  guarded  dirty  accessed                 no cache
0xf1002000-0xf1003fff  0x80041000         8K        rw       present  guarded  dirty  accessed                 no cache
0xf1005000-0xf1005fff  0x80060000         4K        rw       present  guarded  dirty  accessed                 no cache
0xf1007000-0xf1007fff  0x80050000         4K        rw       present  guarded  dirty  accessed                 no cache
0xf100a000-0xf100bfff  0xf8001000         8K        rw       present  guarded  dirty  accessed                 no cache
0xf100d000-0xf100dfff  0x80018000         4K        rw       present  guarded  dirty  accessed                 no cache
0xf1010000-0xf1011fff  0xa0006000         8K        rw       present  guarded  dirty  accessed                 no cache
0xf101b000-0xf1025fff  0x3fc00000        44K        rw       present           dirty  accessed                         
0xf1027000-0xf1027fff  0xb87ff000         4K        rw       present  guarded  dirty  accessed                 no cache
0xf1029000-0xf1029fff  0xba7ff000         4K        rw       present  guarded  dirty  accessed                 no cache
0xf102b000-0xf106afff  0x2f300000       256K        rw       present  guarded  dirty  accessed                 no cache
0xf106c000-0xf106ffff  0x3fc0b000        16K        rw       present           dirty  accessed                         
0xf1071000-0xf1071fff  0x80020000         4K        rw       present  guarded  dirty  accessed                 no cache
0xf1074000-0xf1077fff  0xf5004000        16K        rw       present  guarded  dirty  accessed                 no cache
0xf107a000-0xf107bfff  0x80008000         8K        rw       present  guarded  dirty  accessed                 no cache
0xf107d000-0xf107dfff  0xf5000000         4K        rw       present  guarded  dirty  accessed                 no cache
0xf1080000-0xf118afff  0xb8008000      1068K        rw       present  guarded  dirty  accessed                 no cache
0xf1195000-0xf1196fff  0x2f13e000         8K        rw       present           dirty  accessed                         
0xf1197000-0xf119cfff  0x2f3a0000        24K        rw       present           dirty  accessed                         
0xf119d000-0xf119efff  0x2f13e000         8K        rw       present           dirty  accessed                         
0xf11a0000-0xf11a5fff  0x2f3a6000        24K        rw       present           dirty  accessed                         
0xf11a6000-0xf11a7fff  0x2f196000         8K        rw       present           dirty  accessed                         
0xf11a8000-0xf11a9fff  0x2f3a6000         8K        rw       present           dirty  accessed                         
0xf11ab000-0xf11abfff  0xa0004000         4K        rw       present  guarded  dirty  accessed                 no cache
0xf11ad000-0xf11adfff  0xa0000000         4K        rw       present  guarded  dirty  accessed                 no cache
0xf11af000-0xf11affff  0xa0003000         4K        rw       present  guarded  dirty  accessed                 no cache
0xf11b1000-0xf11b1fff  0xa0002000         4K        rw       present  guarded  dirty  accessed                 no cache
0xf11b3000-0xf11b3fff  0xa0001000         4K        rw       present  guarded  dirty  accessed                 no cache
0xf11b5000-0xf11b5fff  0x80010000         4K        rw       present  guarded  dirty  accessed                 no cache
0xf11b7000-0xf11b7fff  0x80008000         4K        rw       present  guarded  dirty  accessed                 no cache
0xf11b9000-0xf11b9fff  0x80008000         4K        rw       present  guarded  dirty  accessed                 no cache
0xf11bd000-0xf11bdfff  0x3fc8b000         4K        rw       present           dirty  accessed                         
0xf11c0000-0xf11cffff  0x88000000        64K        rw       present  guarded  dirty  accessed                 no cache
0xf1200000-0xf1259fff  0xba008000       360K        rw       present  guarded  dirty  accessed                 no cache
0xf1280000-0xf147ffff  0xf5200000         2M        rw       present  guarded  dirty  accessed                 no cache
0xf1551000-0xf1551fff  0x3fc17000         4K        rw       present           dirty  accessed                         
0xf1552000-0xf1556fff  0x3fc0f000        20K        rw       present           dirty  accessed                         
0xf1557000-0xf15c9fff  0x3fc18000       460K        rw       present           dirty  accessed                         
0xf15d7000-0xf15d7fff  0x3fc16000         4K        rw       present           dirty  accessed                         
0xf15d8000-0xf15d8fff  0x3fc15000         4K        rw       present           dirty  accessed                         
0xf15d9000-0xf15d9fff  0x3fc14000         4K        rw       present           dirty  accessed                         
0xf15eb000-0xf15edfff  0x3fc8c000        12K        rw       present           dirty  accessed                         
0xf15f3000-0xf15f3fff  0x3fc91000         4K        rw       present           dirty  accessed                         
0xf15f4000-0xf15f4fff  0x3fc90000         4K        rw       present           dirty  accessed                         
0xf15f5000-0xf15f5fff  0x3fc8f000         4K        rw       present           dirty  accessed                         
0xf15f7000-0xf15f9fff  0x3fc92000        12K        rw       present           dirty  accessed                         
0xf15fb000-0xf15fdfff  0x3fc95000        12K        rw       present           dirty  accessed                         
0xf15ff000-0xf1601fff  0x3fc98000        12K        rw       present           dirty  accessed                         
0xf1603000-0xf1605fff  0x3fc9b000        12K        rw       present           dirty  accessed                         
0xf1607000-0xf1609fff  0x3fc9e000        12K        rw       present           dirty  accessed                         
---[ vmalloc() End ]---
---[ Early I/O remap start ]---
0xfde2b000-0xfde2cfff  0x80016000         8K        rw       present  guarded  dirty  accessed                 no cache
0xfde2d000-0xfde2dfff  0x80000000         4K        rw       present  guarded  dirty  accessed                 no cache
0xfde2e000-0xfde2efff  0xf8000000         4K        rw       present  guarded  dirty  accessed                 no cache
0xfde2f000-0xfe62efff  0xf4000000         8M        rw       present  guarded  dirty  accessed                 no cache
0xfe62f000-0xfe62ffff  0xf4c00000         4K        rw       present  guarded  dirty  accessed                 no cache
0xfe630000-0xfe630fff  0xf4800000         4K        rw       present  guarded  dirty  accessed                 no cache
0xfe631000-0xfee30fff  0xf2000000         8M        rw       present  guarded  dirty  accessed                 no cache
0xfee31000-0xfee31fff  0xf2c00000         4K        rw       present  guarded  dirty  accessed                 no cache
0xfee32000-0xfee32fff  0xf2800000         4K        rw       present  guarded  dirty  accessed                 no cache
0xfee33000-0xff632fff  0xf0000000         8M        rw       present  guarded  dirty  accessed                 no cache
0xff633000-0xff633fff  0xf0c00000         4K        rw       present  guarded  dirty  accessed                 no cache
0xff634000-0xff634fff  0xf0800000         4K        rw       present  guarded  dirty  accessed                 no cache
0xff635000-0xff73ffff  0xb8008000      1068K        rw       present           dirty  accessed                 no cache
0xff740000-0xff7bffff  0x80000000       512K        rw       present  guarded  dirty  accessed                 no cache
0xff7c0000-0xff7fffff  0xf8000000       256K        rw       present  guarded  dirty  accessed                 no cache
---[ Early I/O remap end ]---
---[ Highmem PTEs start ]---
0xff801000-0xff801fff  0x3f804000         4K        rw       present           dirty  accessed                         
0xff802000-0xff802fff  0x3fb06000         4K        rw       present           dirty  accessed                         
0xff803000-0xff803fff  0x3fb44000         4K        rw       present           dirty  accessed                         
0xff804000-0xff804fff  0x3fb4e000         4K        rw       present           dirty  accessed                         
0xff805000-0xff805fff  0x3fb95000         4K        rw       present           dirty  accessed                         
0xff806000-0xff806fff  0x3fbd3000         4K        rw       present           dirty  accessed                         
0xff807000-0xff807fff  0x3fbda000         4K        rw       present           dirty  accessed                         
0xff808000-0xff808fff  0x3fbdd000         4K        rw       present           dirty  accessed                         
0xff809000-0xff809fff  0x3f417000         4K        rw       present           dirty  accessed                         
0xff80a000-0xff80afff  0x3f461000         4K        rw       present           dirty  accessed                         
0xff80b000-0xff80bfff  0x3f4a5000         4K        rw       present           dirty  accessed                         
0xff80c000-0xff80cfff  0x3f4b7000         4K        rw       present           dirty  accessed                         
0xff80d000-0xff80dfff  0x3f44c000         4K        rw       present           dirty  accessed                         
0xff80e000-0xff80efff  0x3f469000         4K        rw       present           dirty  accessed                         
0xff80f000-0xff80ffff  0x3f51a000         4K        rw       present           dirty  accessed                         
0xff810000-0xff810fff  0x3f53b000         4K        rw       present           dirty  accessed                         
0xff811000-0xff811fff  0x3f578000         4K        rw       present           dirty  accessed                         
0xff812000-0xff812fff  0x3f53d000         4K        rw       present           dirty  accessed                         
0xff813000-0xff813fff  0x3f5b2000         4K        rw       present           dirty  accessed                         
0xff814000-0xff814fff  0x3f6f4000         4K        rw       present           dirty  accessed                         
0xff815000-0xff815fff  0x3f6db000         4K        rw       present           dirty  accessed                         
0xff816000-0xff816fff  0x3f6da000         4K        rw       present           dirty  accessed                         
0xff817000-0xff817fff  0x3f708000         4K        rw       present           dirty  accessed                         
0xff818000-0xff818fff  0x3f731000         4K        rw       present           dirty  accessed                         
0xff819000-0xff819fff  0x3f6aa000         4K        rw       present           dirty  accessed                         
0xff81a000-0xff81afff  0x3f697000         4K        rw       present           dirty  accessed                         
0xff81b000-0xff81bfff  0x3f6a5000         4K        rw       present           dirty  accessed                         
0xff81c000-0xff81cfff  0x3f6a1000         4K        rw       present           dirty  accessed                         
0xff81d000-0xff81dfff  0x3f6a9000         4K        rw       present           dirty  accessed                         
0xff81e000-0xff81efff  0x3f683000         4K        rw       present           dirty  accessed                         
0xff81f000-0xff81ffff  0x3f736000         4K        rw       present           dirty  accessed                         
0xff820000-0xff820fff  0x3f695000         4K        rw       present           dirty  accessed                         
0xff821000-0xff821fff  0x3f6ef000         4K        rw       present           dirty  accessed                         
0xff822000-0xff822fff  0x3f685000         4K        rw       present           dirty  accessed                         
0xff823000-0xff823fff  0x3f70a000         4K        rw       present           dirty  accessed                         
0xff824000-0xff824fff  0x3f6b0000         4K        rw       present           dirty  accessed                         
0xff825000-0xff825fff  0x3f6a6000         4K        rw       present           dirty  accessed                         
0xff826000-0xff826fff  0x3f69b000         4K        rw       present           dirty  accessed                         
0xff827000-0xff827fff  0x3f527000         4K        rw       present           dirty  accessed                         
0xff828000-0xff828fff  0x3f69d000         4K        rw       present           dirty  accessed                         
0xff829000-0xff829fff  0x3f699000         4K        rw       present           dirty  accessed                         
0xff82a000-0xff82bfff  0x3f51b000         8K        rw       present           dirty  accessed                         
0xff82c000-0xff82cfff  0x3f72c000         4K        rw       present           dirty  accessed                         
0xff82d000-0xff82dfff  0x3faf5000         4K        rw       present           dirty  accessed                         
0xff82e000-0xff82efff  0x3fafc000         4K        rw       present           dirty  accessed                         
0xff82f000-0xff82ffff  0x3f440000         4K        rw       present           dirty  accessed                         
0xff830000-0xff830fff  0x3f51f000         4K        rw       present           dirty  accessed                         
0xff831000-0xff831fff  0x3f684000         4K        rw       present           dirty  accessed                         
0xff832000-0xff832fff  0x3f01a000         4K        rw       present           dirty  accessed                         
0xff833000-0xff833fff  0x3f75e000         4K        rw       present           dirty  accessed                         
0xff834000-0xff834fff  0x3f0cb000         4K        rw       present           dirty  accessed                         
0xff835000-0xff835fff  0x3f0d5000         4K        rw       present           dirty  accessed                         
0xff836000-0xff836fff  0x3f0db000         4K        rw       present           dirty  accessed                         
0xff837000-0xff837fff  0x3f0d4000         4K        rw       present           dirty  accessed                         
0xff838000-0xff838fff  0x3f0d0000         4K        rw       present           dirty  accessed                         
0xff839000-0xff839fff  0x3f098000         4K        rw       present           dirty  accessed                         
0xff83a000-0xff83afff  0x3f0e4000         4K        rw       present           dirty  accessed                         
0xff83b000-0xff83bfff  0x3f11e000         4K        rw       present           dirty  accessed                         
0xff83c000-0xff83cfff  0x3f128000         4K        rw       present           dirty  accessed                         
0xff83d000-0xff83efff  0x3f133000         8K        rw       present           dirty  accessed                         
0xff83f000-0xff83ffff  0x3f124000         4K        rw       present           dirty  accessed                         
0xff840000-0xff840fff  0x3f11a000         4K        rw       present           dirty  accessed                         
0xff841000-0xff841fff  0x3f135000         4K        rw       present           dirty  accessed                         
0xff842000-0xff842fff  0x3f13e000         4K        rw       present           dirty  accessed                         
0xff843000-0xff843fff  0x3f131000         4K        rw       present           dirty  accessed                         
0xff844000-0xff844fff  0x3f11c000         4K        rw       present           dirty  accessed                         
0xff845000-0xff845fff  0x3f11f000         4K        rw       present           dirty  accessed                         
0xff846000-0xff846fff  0x3f117000         4K        rw       present           dirty  accessed                         
0xff847000-0xff847fff  0x3f139000         4K        rw       present           dirty  accessed                         
0xff848000-0xff848fff  0x3f116000         4K        rw       present           dirty  accessed                         
0xff849000-0xff849fff  0x3f120000         4K        rw       present           dirty  accessed                         
0xff84a000-0xff84afff  0x3f115000         4K        rw       present           dirty  accessed                         
0xff84b000-0xff84bfff  0x3f14c000         4K        rw       present           dirty  accessed                         
0xff84c000-0xff84cfff  0x3f148000         4K        rw       present           dirty  accessed                         
0xff84d000-0xff84dfff  0x3f14b000         4K        rw       present           dirty  accessed                         
0xff84e000-0xff84efff  0x3f1f9000         4K        rw       present           dirty  accessed                         
0xff84f000-0xff84ffff  0x3f2ae000         4K        rw       present           dirty  accessed                         
0xff850000-0xff850fff  0x3f11d000         4K        rw       present           dirty  accessed                         
0xff851000-0xff851fff  0x3ede3000         4K        rw       present           dirty  accessed                         
0xff852000-0xff852fff  0x3ee2d000         4K        rw       present           dirty  accessed                         
0xff853000-0xff853fff  0x3ee96000         4K        rw       present           dirty  accessed                         
0xff854000-0xff854fff  0x3ef45000         4K        rw       present           dirty  accessed                         
0xff855000-0xff855fff  0x3ef9a000         4K        rw       present           dirty  accessed                         
0xff856000-0xff856fff  0x3edf4000         4K        rw       present           dirty  accessed                         
0xff857000-0xff857fff  0x3eea5000         4K        rw       present           dirty  accessed                         
0xff858000-0xff858fff  0x3ee2f000         4K        rw       present           dirty  accessed                         
0xff859000-0xff859fff  0x3efec000         4K        rw       present           dirty  accessed                         
0xff85a000-0xff85afff  0x3eeb0000         4K        rw       present           dirty  accessed                         
0xff85b000-0xff85bfff  0x3e8b6000         4K        rw       present           dirty  accessed                         
0xff85c000-0xff85cfff  0x3effe000         4K        rw       present           dirty  accessed                         
0xff85d000-0xff85dfff  0x3e800000         4K        rw       present           dirty  accessed                         
0xff85e000-0xff85efff  0x3e8b9000         4K        rw       present           dirty  accessed                         
0xff85f000-0xff85ffff  0x3e914000         4K        rw       present           dirty  accessed                         
0xff860000-0xff860fff  0x3e930000         4K        rw       present           dirty  accessed                         
0xff861000-0xff861fff  0x3e948000         4K        rw       present           dirty  accessed                         
0xff862000-0xff862fff  0x3e94f000         4K        rw       present           dirty  accessed                         
0xff863000-0xff863fff  0x3e956000         4K        rw       present           dirty  accessed                         
0xff864000-0xff864fff  0x3e95f000         4K        rw       present           dirty  accessed                         
0xff865000-0xff865fff  0x3e968000         4K        rw       present           dirty  accessed                         
0xff866000-0xff866fff  0x3e974000         4K        rw       present           dirty  accessed                         
0xff867000-0xff867fff  0x3eacb000         4K        rw       present           dirty  accessed                         
0xff868000-0xff868fff  0x3e8e3000         4K        rw       present           dirty  accessed                         
0xff869000-0xff869fff  0x3e8b1000         4K        rw       present           dirty  accessed                         
0xff86a000-0xff86afff  0x3e901000         4K        rw       present           dirty  accessed                         
0xff86b000-0xff86bfff  0x3e47c000         4K        rw       present           dirty  accessed                         
0xff86c000-0xff86cfff  0x3e492000         4K        rw       present           dirty  accessed                         
0xff86d000-0xff86dfff  0x3e48d000         4K        rw       present           dirty  accessed                         
0xff86e000-0xff86efff  0x3e4cb000         4K        rw       present           dirty  accessed                         
0xff86f000-0xff86ffff  0x3e4fa000         4K        rw       present           dirty  accessed                         
0xff870000-0xff870fff  0x3e50c000         4K        rw       present           dirty  accessed                         
0xff871000-0xff871fff  0x3e458000         4K        rw       present           dirty  accessed                         
0xff872000-0xff872fff  0x3e4fe000         4K        rw       present           dirty  accessed                         
0xff873000-0xff873fff  0x3e905000         4K        rw       present           dirty  accessed                         
0xff874000-0xff874fff  0x3eb0c000         4K        rw       present           dirty  accessed                         
0xff875000-0xff875fff  0x3e524000         4K        rw       present           dirty  accessed                         
0xff876000-0xff876fff  0x3e547000         4K        rw       present           dirty  accessed                         
0xff877000-0xff877fff  0x3e8fc000         4K        rw       present           dirty  accessed                         
0xff878000-0xff878fff  0x3e557000         4K        rw       present           dirty  accessed                         
0xff879000-0xff879fff  0x3e559000         4K        rw       present           dirty  accessed                         
0xff87a000-0xff87afff  0x3e505000         4K        rw       present           dirty  accessed                         
0xff87b000-0xff87bfff  0x3e8ff000         4K        rw       present           dirty  accessed                         
0xff87c000-0xff87cfff  0x3e4e4000         4K        rw       present           dirty  accessed                         
0xff87d000-0xff87dfff  0x3e4fb000         4K        rw       present           dirty  accessed                         
0xff87e000-0xff87efff  0x3ea66000         4K        rw       present           dirty  accessed                         
0xff87f000-0xff87ffff  0x3ea03000         4K        rw       present           dirty  accessed                         
0xff880000-0xff880fff  0x3e50b000         4K        rw       present           dirty  accessed                         
0xff881000-0xff881fff  0x3e585000         4K        rw       present           dirty  accessed                         
0xff882000-0xff882fff  0x3e753000         4K        rw       present           dirty  accessed                         
0xff883000-0xff883fff  0x3e7fe000         4K        rw       present           dirty  accessed                         
0xff884000-0xff884fff  0x3e7d5000         4K        rw       present           dirty  accessed                         
0xff885000-0xff885fff  0x3e038000         4K        rw       present           dirty  accessed                         
0xff886000-0xff887fff  0x3e034000         8K        rw       present           dirty  accessed                         
0xff888000-0xff888fff  0x3e04a000         4K        rw       present           dirty  accessed                         
0xff889000-0xff889fff  0x3e52b000         4K        rw       present           dirty  accessed                         
0xff88a000-0xff88afff  0x3e09b000         4K        rw       present           dirty  accessed                         
0xff88b000-0xff88bfff  0x3e08f000         4K        rw       present           dirty  accessed                         
0xff88c000-0xff88cfff  0x3e05c000         4K        rw       present           dirty  accessed                         
0xff88d000-0xff88dfff  0x3e09e000         4K        rw       present           dirty  accessed                         
0xff88e000-0xff88efff  0x3e0a7000         4K        rw       present           dirty  accessed                         
0xff88f000-0xff88ffff  0x3e0af000         4K        rw       present           dirty  accessed                         
0xff890000-0xff890fff  0x3e0b6000         4K        rw       present           dirty  accessed                         
0xff891000-0xff891fff  0x3e0bc000         4K        rw       present           dirty  accessed                         
0xff892000-0xff892fff  0x3e090000         4K        rw       present           dirty  accessed                         
0xff893000-0xff893fff  0x3e097000         4K        rw       present           dirty  accessed                         
0xff894000-0xff894fff  0x3e094000         4K        rw       present           dirty  accessed                         
0xff895000-0xff895fff  0x3e0cd000         4K        rw       present           dirty  accessed                         
0xff896000-0xff896fff  0x3f3b9000         4K        rw       present           dirty  accessed                         
0xff897000-0xff897fff  0x3f1ea000         4K        rw       present           dirty  accessed                         
0xff898000-0xff898fff  0x3ec3b000         4K        rw       present           dirty  accessed                         
0xff899000-0xff899fff  0x3f113000         4K        rw       present           dirty  accessed                         
0xff89a000-0xff89afff  0x3e0e7000         4K        rw       present           dirty  accessed                         
0xff89b000-0xff89bfff  0x3e11f000         4K        rw       present           dirty  accessed                         
0xff89c000-0xff89cfff  0x3f1a8000         4K        rw       present           dirty  accessed                         
0xff89d000-0xff89dfff  0x3e4ce000         4K        rw       present           dirty  accessed                         
0xff89e000-0xff89efff  0x3f193000         4K        rw       present           dirty  accessed                         
0xff89f000-0xff89ffff  0x3f1dc000         4K        rw       present           dirty  accessed                         
0xff8a0000-0xff8a0fff  0x3e07d000         4K        rw       present           dirty  accessed                         
0xff8a1000-0xff8a1fff  0x3e93a000         4K        rw       present           dirty  accessed                         
0xff8a2000-0xff8a2fff  0x3ec9c000         4K        rw       present           dirty  accessed                         
0xff8a3000-0xff8a3fff  0x3ecc4000         4K        rw       present           dirty  accessed                         
0xff8a4000-0xff8a4fff  0x3e553000         4K        rw       present           dirty  accessed                         
0xff8a5000-0xff8a5fff  0x3e51e000         4K        rw       present           dirty  accessed                         
0xff8a6000-0xff8a6fff  0x3e523000         4K        rw       present           dirty  accessed                         
0xff8a7000-0xff8a7fff  0x3e516000         4K        rw       present           dirty  accessed                         
0xff8a8000-0xff8a8fff  0x3e562000         4K        rw       present           dirty  accessed                         
0xff8a9000-0xff8a9fff  0x3e1b3000         4K        rw       present           dirty  accessed                         
0xff8aa000-0xff8aafff  0x3e1cd000         4K        rw       present           dirty  accessed                         
0xff8ab000-0xff8abfff  0x3e1e9000         4K        rw       present           dirty  accessed                         
0xff8ac000-0xff8acfff  0x3e563000         4K        rw       present           dirty  accessed                         
0xff8ad000-0xff8adfff  0x3e1b5000         4K        rw       present           dirty  accessed                         
0xff8ae000-0xff8aefff  0x3e20c000         4K        rw       present           dirty  accessed                         
0xff8af000-0xff8affff  0x3e207000         4K        rw       present           dirty  accessed                         
0xff8b0000-0xff8b0fff  0x3e1be000         4K        rw       present           dirty  accessed                         
0xff8b1000-0xff8b1fff  0x3e1f7000         4K        rw       present           dirty  accessed                         
0xff8b2000-0xff8b2fff  0x3e245000         4K        rw       present           dirty  accessed                         
0xff8b3000-0xff8b3fff  0x3e2a6000         4K        rw       present           dirty  accessed                         
0xff8b4000-0xff8b4fff  0x3e2b2000         4K        rw       present           dirty  accessed                         
0xff8b5000-0xff8b5fff  0x3e2be000         4K        rw       present           dirty  accessed                         
0xff8b6000-0xff8b6fff  0x3e2d9000         4K        rw       present           dirty  accessed                         
0xff8b7000-0xff8b7fff  0x3e31c000         4K        rw       present           dirty  accessed                         
0xff8b8000-0xff8b8fff  0x3ed39000         4K        rw       present           dirty  accessed                         
0xff8b9000-0xff8b9fff  0x3e369000         4K        rw       present           dirty  accessed                         
0xff8ba000-0xff8bafff  0x3e368000         4K        rw       present           dirty  accessed                         
0xff8bb000-0xff8bbfff  0x3e314000         4K        rw       present           dirty  accessed                         
0xff8bc000-0xff8bcfff  0x3e8c6000         4K        rw       present           dirty  accessed                         
0xff8bd000-0xff8bdfff  0x3ddaa000         4K        rw       present           dirty  accessed                         
0xff8be000-0xff8befff  0x3dcde000         4K        rw       present           dirty  accessed                         
0xff8bf000-0xff8bffff  0x3e06e000         4K        rw       present           dirty  accessed                         
0xff8c0000-0xff8c0fff  0x3e5d9000         4K        rw       present           dirty  accessed                         
0xff8c1000-0xff8c1fff  0x3e3f2000         4K        rw       present           dirty  accessed                         
0xff8c2000-0xff8c2fff  0x3e2ef000         4K        rw       present           dirty  accessed                         
0xff8c3000-0xff8c3fff  0x3e294000         4K        rw       present           dirty  accessed                         
0xff8c4000-0xff8c4fff  0x3dd90000         4K        rw       present           dirty  accessed                         
0xff8c5000-0xff8c5fff  0x3e8fb000         4K        rw       present           dirty  accessed                         
0xff8c6000-0xff8c6fff  0x3e1b4000         4K        rw       present           dirty  accessed                         
0xff8c7000-0xff8c7fff  0x3e225000         4K        rw       present           dirty  accessed                         
0xff8c8000-0xff8c8fff  0x3f1e8000         4K        rw       present           dirty  accessed                         
0xff8c9000-0xff8c9fff  0x3ec67000         4K        rw       present           dirty  accessed                         
0xff8ca000-0xff8cafff  0x3e0f9000         4K        rw       present           dirty  accessed                         
0xff8cb000-0xff8cbfff  0x3f1a4000         4K        rw       present           dirty  accessed                         
0xff8cc000-0xff8ccfff  0x3f1e9000         4K        rw       present           dirty  accessed                         
0xff8cd000-0xff8cdfff  0x3f3d0000         4K        rw       present           dirty  accessed                         
0xff8ce000-0xff8cefff  0x3e0e6000         4K        rw       present           dirty  accessed                         
0xff8cf000-0xff8cffff  0x3f1ed000         4K        rw       present           dirty  accessed                         
0xff8d0000-0xff8d0fff  0x3f1de000         4K        rw       present           dirty  accessed                         
0xff8d1000-0xff8d1fff  0x3f109000         4K        rw       present           dirty  accessed                         
0xff8d2000-0xff8d2fff  0x3f530000         4K        rw       present           dirty  accessed                         
0xff8d3000-0xff8d3fff  0x3f518000         4K        rw       present           dirty  accessed                         
0xff8d4000-0xff8d4fff  0x3e8b0000         4K        rw       present           dirty  accessed                         
0xff8d5000-0xff8d5fff  0x3eccc000         4K        rw       present           dirty  accessed                         
0xff8d6000-0xff8d6fff  0x3e2ae000         4K        rw       present           dirty  accessed                         
0xff8d7000-0xff8d7fff  0x3f535000         4K        rw       present           dirty  accessed                         
0xff8d8000-0xff8d8fff  0x3e558000         4K        rw       present           dirty  accessed                         
0xff8d9000-0xff8d9fff  0x3e4d6000         4K        rw       present           dirty  accessed                         
0xff8da000-0xff8dafff  0x3e21e000         4K        rw       present           dirty  accessed                         
0xff8db000-0xff8dbfff  0x3f51e000         4K        rw       present           dirty  accessed                         
0xff8dc000-0xff8dcfff  0x3e8ec000         4K        rw       present           dirty  accessed                         
0xff8dd000-0xff8ddfff  0x3e535000         4K        rw       present           dirty  accessed                         
0xff8de000-0xff8defff  0x3e050000         4K        rw       present           dirty  accessed                         
0xff8df000-0xff8dffff  0x3e886000         4K        rw       present           dirty  accessed                         
0xff8e0000-0xff8e0fff  0x3e55c000         4K        rw       present           dirty  accessed                         
0xff8e1000-0xff8e1fff  0x3e3ac000         4K        rw       present           dirty  accessed                         
0xff8e2000-0xff8e2fff  0x3dd20000         4K        rw       present           dirty  accessed                         
0xff8e3000-0xff8e3fff  0x3e53b000         4K        rw       present           dirty  accessed                         
0xff8e4000-0xff8e4fff  0x3e18b000         4K        rw       present           dirty  accessed                         
0xff8e5000-0xff8e5fff  0x3e38a000         4K        rw       present           dirty  accessed                         
0xff8e6000-0xff8e6fff  0x3e519000         4K        rw       present           dirty  accessed                         
0xff8e7000-0xff8e7fff  0x3e8e4000         4K        rw       present           dirty  accessed                         
0xff8e8000-0xff8e8fff  0x3ec61000         4K        rw       present           dirty  accessed                         
0xff8e9000-0xff8e9fff  0x3ed3f000         4K        rw       present           dirty  accessed                         
0xff8ea000-0xff8eafff  0x3dc3a000         4K        rw       present           dirty  accessed                         
0xff8eb000-0xff8ebfff  0x3dc39000         4K        rw       present           dirty  accessed                         
0xff8ec000-0xff8ecfff  0x3e0d4000         4K        rw       present           dirty  accessed                         
0xff8ed000-0xff8edfff  0x3eca3000         4K        rw       present           dirty  accessed                         
0xff8ee000-0xff8eefff  0x3e4a3000         4K        rw       present           dirty  accessed                         
0xff8ef000-0xff8effff  0x3dd6a000         4K        rw       present           dirty  accessed                         
0xff8f0000-0xff8f0fff  0x3f2da000         4K        rw       present           dirty  accessed                         
0xff8f1000-0xff8f1fff  0x3ec6c000         4K        rw       present           dirty  accessed                         
0xff8f2000-0xff8f2fff  0x3f0c1000         4K        rw       present           dirty  accessed                         
0xff8f3000-0xff8f3fff  0x3f52a000         4K        rw       present           dirty  accessed                         
0xff8f4000-0xff8f4fff  0x3e29a000         4K        rw       present           dirty  accessed                         
0xff8f5000-0xff8f5fff  0x3ec9f000         4K        rw       present           dirty  accessed                         
0xff8f6000-0xff8f6fff  0x3e2d5000         4K        rw       present           dirty  accessed                         
0xff8f7000-0xff8f7fff  0x3dcb3000         4K        rw       present           dirty  accessed                         
0xff8f8000-0xff8f8fff  0x3dccc000         4K        rw       present           dirty  accessed                         
0xff8f9000-0xff8f9fff  0x3dc1b000         4K        rw       present           dirty  accessed                         
0xff8fa000-0xff8fafff  0x3dcb2000         4K        rw       present           dirty  accessed                         
0xff8fb000-0xff8fbfff  0x3dce1000         4K        rw       present           dirty  accessed                         
0xff8fc000-0xff8fcfff  0x3e287000         4K        rw       present           dirty  accessed                         
0xff8fd000-0xff8fdfff  0x3e060000         4K        rw       present           dirty  accessed                         
0xff8fe000-0xff8fefff  0x3e3f9000         4K        rw       present           dirty  accessed                         
0xff8ff000-0xff8fffff  0x3e18f000         4K        rw       present           dirty  accessed                         
0xff900000-0xff900fff  0x3dd95000         4K        rw       present           dirty  accessed                         
0xff901000-0xff901fff  0x3dd49000         4K        rw       present           dirty  accessed                         
0xff902000-0xff902fff  0x3dccd000         4K        rw       present           dirty  accessed                         
0xff903000-0xff903fff  0x3dda6000         4K        rw       present           dirty  accessed                         
0xff904000-0xff904fff  0x3e2df000         4K        rw       present           dirty  accessed                         
0xff905000-0xff905fff  0x3e300000         4K        rw       present           dirty  accessed                         
0xff906000-0xff906fff  0x3f2fb000         4K        rw       present           dirty  accessed                         
0xff907000-0xff907fff  0x3e90c000         4K        rw       present           dirty  accessed                         
0xff908000-0xff908fff  0x3dca6000         4K        rw       present           dirty  accessed                         
0xff909000-0xff909fff  0x3dcbf000         4K        rw       present           dirty  accessed                         
0xff90a000-0xff90afff  0x3ec3c000         4K        rw       present           dirty  accessed                         
0xff90b000-0xff90bfff  0x3dd9b000         4K        rw       present           dirty  accessed                         
0xff90c000-0xff90cfff  0x3e291000         4K        rw       present           dirty  accessed                         
0xff90d000-0xff90dfff  0x3e752000         4K        rw       present           dirty  accessed                         
0xff90e000-0xff90ffff  0x3e49a000         8K        rw       present           dirty  accessed                         
0xff910000-0xff910fff  0x3dc8b000         4K        rw       present           dirty  accessed                         
0xff911000-0xff911fff  0x3e49d000         4K        rw       present           dirty  accessed                         
0xff912000-0xff912fff  0x3dc99000         4K        rw       present           dirty  accessed                         
0xff913000-0xff913fff  0x3dd8c000         4K        rw       present           dirty  accessed                         
0xff914000-0xff914fff  0x3dc91000         4K        rw       present           dirty  accessed                         
0xff915000-0xff915fff  0x3e49c000         4K        rw       present           dirty  accessed                         
0xff916000-0xff916fff  0x3e9bf000         4K        rw       present           dirty  accessed                         
0xff917000-0xff917fff  0x3e49f000         4K        rw       present           dirty  accessed                         
0xff918000-0xff918fff  0x3dda1000         4K        rw       present           dirty  accessed                         
0xff919000-0xff919fff  0x3e28f000         4K        rw       present           dirty  accessed                         
0xff91a000-0xff91afff  0x3dc9d000         4K        rw       present           dirty  accessed                         
0xff91b000-0xff91bfff  0x3e28e000         4K        rw       present           dirty  accessed                         
0xff91c000-0xff91cfff  0x3dc90000         4K        rw       present           dirty  accessed                         
0xff91d000-0xff91dfff  0x3e373000         4K        rw       present           dirty  accessed                         
0xff91e000-0xff91efff  0x3e22b000         4K        rw       present           dirty  accessed                         
0xff91f000-0xff91ffff  0x3ddcd000         4K        rw       present           dirty  accessed                         
0xff920000-0xff920fff  0x3ddd4000         4K        rw       present           dirty  accessed                         
0xff921000-0xff921fff  0x3dc98000         4K        rw       present           dirty  accessed                         
0xff922000-0xff922fff  0x3ddb5000         4K        rw       present           dirty  accessed                         
0xff923000-0xff923fff  0x3dc93000         4K        rw       present           dirty  accessed                         
0xff924000-0xff924fff  0x3ddb9000         4K        rw       present           dirty  accessed                         
0xff925000-0xff925fff  0x3dcaf000         4K        rw       present           dirty  accessed                         
0xff926000-0xff926fff  0x3ddc6000         4K        rw       present           dirty  accessed                         
0xff927000-0xff927fff  0x3ddc9000         4K        rw       present           dirty  accessed                         
0xff928000-0xff928fff  0x3ddba000         4K        rw       present           dirty  accessed                         
0xff929000-0xff929fff  0x3e301000         4K        rw       present           dirty  accessed                         
0xff92a000-0xff92afff  0x3dcad000         4K        rw       present           dirty  accessed                         
0xff92b000-0xff92bfff  0x3dcc5000         4K        rw       present           dirty  accessed                         
0xff92c000-0xff92cfff  0x3ddc0000         4K        rw       present           dirty  accessed                         
0xff92d000-0xff92dfff  0x3e8af000         4K        rw       present           dirty  accessed                         
0xff92e000-0xff92efff  0x3dcb7000         4K        rw       present           dirty  accessed                         
0xff92f000-0xff92ffff  0x3e237000         4K        rw       present           dirty  accessed                         
0xff930000-0xff930fff  0x3ddbb000         4K        rw       present           dirty  accessed                         
0xff931000-0xff931fff  0x3e3f3000         4K        rw       present           dirty  accessed                         
0xff932000-0xff932fff  0x3ddbe000         4K        rw       present           dirty  accessed                         
0xff933000-0xff933fff  0x3e28b000         4K        rw       present           dirty  accessed                         
0xff934000-0xff934fff  0x3e7d3000         4K        rw       present           dirty  accessed                         
0xff935000-0xff935fff  0x3f54d000         4K        rw       present           dirty  accessed                         
0xff936000-0xff936fff  0x3f551000         4K        rw       present           dirty  accessed                         
0xff937000-0xff937fff  0x3e28a000         4K        rw       present           dirty  accessed                         
0xff938000-0xff938fff  0x3e288000         4K        rw       present           dirty  accessed                         
0xff939000-0xff939fff  0x3dcd3000         4K        rw       present           dirty  accessed                         
0xff93a000-0xff93afff  0x3ef3a000         4K        rw       present           dirty  accessed                         
0xff93b000-0xff93bfff  0x3ddb7000         4K        rw       present           dirty  accessed                         
0xff93c000-0xff93cfff  0x3dcb9000         4K        rw       present           dirty  accessed                         
0xff93d000-0xff93dfff  0x3ddb4000         4K        rw       present           dirty  accessed                         
0xff93e000-0xff93efff  0x3e37a000         4K        rw       present           dirty  accessed                         
0xff93f000-0xff93ffff  0x3e35d000         4K        rw       present           dirty  accessed                         
0xff940000-0xff940fff  0x3f528000         4K        rw       present           dirty  accessed                         
0xff941000-0xff941fff  0x3e2e3000         4K        rw       present           dirty  accessed                         
0xff942000-0xff942fff  0x3e49e000         4K        rw       present           dirty  accessed                         
0xff943000-0xff943fff  0x3ddd6000         4K        rw       present           dirty  accessed                         
0xff944000-0xff944fff  0x3ecc6000         4K        rw       present           dirty  accessed                         
0xff945000-0xff945fff  0x3dcac000         4K        rw       present           dirty  accessed                         
0xff946000-0xff946fff  0x3dd53000         4K        rw       present           dirty  accessed                         
0xff947000-0xff947fff  0x3e50d000         4K        rw       present           dirty  accessed                         
0xff948000-0xff948fff  0x3e0ae000         4K        rw       present           dirty  accessed                         
0xff949000-0xff949fff  0x3e4a1000         4K        rw       present           dirty  accessed                         
0xff94a000-0xff94afff  0x3e2f3000         4K        rw       present           dirty  accessed                         
0xff94b000-0xff94bfff  0x3dcb6000         4K        rw       present           dirty  accessed                         
0xff94c000-0xff94cfff  0x3e228000         4K        rw       present           dirty  accessed                         
0xff94d000-0xff94dfff  0x3e20f000         4K        rw       present           dirty  accessed                         
0xff94e000-0xff94efff  0x3e1eb000         4K        rw       present           dirty  accessed                         
0xff94f000-0xff94ffff  0x3edbf000         4K        rw       present           dirty  accessed                         
0xff950000-0xff950fff  0x3e7e3000         4K        rw       present           dirty  accessed                         
0xff951000-0xff951fff  0x3e3d7000         4K        rw       present           dirty  accessed                         
0xff952000-0xff952fff  0x3ddc5000         4K        rw       present           dirty  accessed                         
0xff953000-0xff953fff  0x3e0c1000         4K        rw       present           dirty  accessed                         
0xff954000-0xff954fff  0x3e4e3000         4K        rw       present           dirty  accessed                         
0xff955000-0xff955fff  0x3f547000         4K        rw       present           dirty  accessed                         
0xff956000-0xff956fff  0x3dc9b000         4K        rw       present           dirty  accessed                         
0xff957000-0xff957fff  0x3dcbb000         4K        rw       present           dirty  accessed                         
0xff958000-0xff958fff  0x3dcba000         4K        rw       present           dirty  accessed                         
0xff959000-0xff959fff  0x3e79c000         4K        rw       present           dirty  accessed                         
0xff95a000-0xff95afff  0x3e791000         4K        rw       present           dirty  accessed                         
0xff95b000-0xff95bfff  0x3e7bb000         4K        rw       present           dirty  accessed                         
0xff95c000-0xff95cfff  0x3e74d000         4K        rw       present           dirty  accessed                         
0xff95d000-0xff95dfff  0x3f1f0000         4K        rw       present           dirty  accessed                         
0xff95e000-0xff95efff  0x3e4c0000         4K        rw       present           dirty  accessed                         
0xff95f000-0xff95ffff  0x3f521000         4K        rw       present           dirty  accessed                         
0xff960000-0xff960fff  0x3ddc4000         4K        rw       present           dirty  accessed                         
0xff961000-0xff961fff  0x3dcb1000         4K        rw       present           dirty  accessed                         
0xff962000-0xff962fff  0x3f1e6000         4K        rw       present           dirty  accessed                         
0xff963000-0xff963fff  0x3e47a000         4K        rw       present           dirty  accessed                         
0xff964000-0xff964fff  0x3f1e5000         4K        rw       present           dirty  accessed                         
0xff965000-0xff965fff  0x3e475000         4K        rw       present           dirty  accessed                         
0xff966000-0xff966fff  0x3e953000         4K        rw       present           dirty  accessed                         
0xff967000-0xff967fff  0x3e457000         4K        rw       present           dirty  accessed                         
0xff968000-0xff968fff  0x3f522000         4K        rw       present           dirty  accessed                         
0xff969000-0xff969fff  0x3f1d4000         4K        rw       present           dirty  accessed                         
0xff96a000-0xff96afff  0x3f132000         4K        rw       present           dirty  accessed                         
0xff96b000-0xff96bfff  0x3efba000         4K        rw       present           dirty  accessed                         
0xff96c000-0xff96cfff  0x3ef53000         4K        rw       present           dirty  accessed                         
0xff96d000-0xff96dfff  0x3ece1000         4K        rw       present           dirty  accessed                         
0xff96e000-0xff96efff  0x3f1d3000         4K        rw       present           dirty  accessed                         
0xff96f000-0xff96ffff  0x3ef74000         4K        rw       present           dirty  accessed                         
0xff970000-0xff970fff  0x3e384000         4K        rw       present           dirty  accessed                         
0xff971000-0xff971fff  0x3edb0000         4K        rw       present           dirty  accessed                         
0xff972000-0xff972fff  0x3eee0000         4K        rw       present           dirty  accessed                         
0xff973000-0xff973fff  0x3f1d7000         4K        rw       present           dirty  accessed                         
0xff974000-0xff974fff  0x3ed11000         4K        rw       present           dirty  accessed                         
0xff975000-0xff975fff  0x3f140000         4K        rw       present           dirty  accessed                         
0xff976000-0xff976fff  0x3ed5c000         4K        rw       present           dirty  accessed                         
0xff977000-0xff977fff  0x3dd51000         4K        rw       present           dirty  accessed                         
0xff978000-0xff978fff  0x3e095000         4K        rw       present           dirty  accessed                         
0xff979000-0xff979fff  0x3e040000         4K        rw       present           dirty  accessed                         
0xff97a000-0xff97afff  0x3e647000         4K        rw       present           dirty  accessed                         
0xff97b000-0xff97bfff  0x3e1fa000         4K        rw       present           dirty  accessed                         
0xff97c000-0xff97cfff  0x3e5d3000         4K        rw       present           dirty  accessed                         
0xff97d000-0xff97dfff  0x3ddde000         4K        rw       present           dirty  accessed                         
0xff97e000-0xff97efff  0x3e251000         4K        rw       present           dirty  accessed                         
0xff97f000-0xff97ffff  0x3f51d000         4K        rw       present           dirty  accessed                         
0xff980000-0xff980fff  0x3ebd2000         4K        rw       present           dirty  accessed                         
0xff981000-0xff981fff  0x3e222000         4K        rw       present           dirty  accessed                         
0xff982000-0xff982fff  0x3e8a6000         4K        rw       present           dirty  accessed                         
0xff983000-0xff983fff  0x3e938000         4K        rw       present           dirty  accessed                         
0xff984000-0xff984fff  0x3edb3000         4K        rw       present           dirty  accessed                         
0xff985000-0xff985fff  0x3ee38000         4K        rw       present           dirty  accessed                         
0xff986000-0xff986fff  0x3ef76000         4K        rw       present           dirty  accessed                         
0xff987000-0xff987fff  0x3e78c000         4K        rw       present           dirty  accessed                         
0xff988000-0xff988fff  0x3ed0e000         4K        rw       present           dirty  accessed                         
0xff989000-0xff989fff  0x3edeb000         4K        rw       present           dirty  accessed                         
0xff98a000-0xff98afff  0x3ea26000         4K        rw       present           dirty  accessed                         
0xff98b000-0xff98bfff  0x3ed0b000         4K        rw       present           dirty  accessed                         
0xff98c000-0xff98cfff  0x3f18d000         4K        rw       present           dirty  accessed                         
0xff98d000-0xff98dfff  0x3f0dc000         4K        rw       present           dirty  accessed                         
0xff98e000-0xff98efff  0x3e53f000         4K        rw       present           dirty  accessed                         
0xff98f000-0xff98ffff  0x3e480000         4K        rw       present           dirty  accessed                         
0xff990000-0xff990fff  0x3ee67000         4K        rw       present           dirty  accessed                         
0xff991000-0xff991fff  0x3dca3000         4K        rw       present           dirty  accessed                         
0xff992000-0xff992fff  0x3e931000         4K        rw       present           dirty  accessed                         
0xff993000-0xff993fff  0x3ed5e000         4K        rw       present           dirty  accessed                         
0xff994000-0xff994fff  0x3ef9e000         4K        rw       present           dirty  accessed                         
0xff995000-0xff995fff  0x3e12c000         4K        rw       present           dirty  accessed                         
0xff996000-0xff996fff  0x3ed58000         4K        rw       present           dirty  accessed                         
0xff997000-0xff997fff  0x3e648000         4K        rw       present           dirty  accessed                         
0xff998000-0xff998fff  0x3dda2000         4K        rw       present           dirty  accessed                         
0xff999000-0xff999fff  0x3e490000         4K        rw       present           dirty  accessed                         
0xff99a000-0xff99afff  0x3e79d000         4K        rw       present           dirty  accessed                         
0xff99b000-0xff99bfff  0x3e7b6000         4K        rw       present           dirty  accessed                         
0xff99c000-0xff99cfff  0x3ddcb000         4K        rw       present           dirty  accessed                         
0xff99d000-0xff99dfff  0x3e634000         4K        rw       present           dirty  accessed                         
0xff99e000-0xff99efff  0x3e40e000         4K        rw       present           dirty  accessed                         
0xff99f000-0xff99ffff  0x3eaad000         4K        rw       present           dirty  accessed                         
0xff9a0000-0xff9a0fff  0x3f71b000         4K        rw       present           dirty  accessed                         
0xff9a1000-0xff9a1fff  0x3e62f000         4K        rw       present           dirty  accessed                         
0xff9a2000-0xff9a2fff  0x3e629000         4K        rw       present           dirty  accessed                         
0xff9a3000-0xff9a3fff  0x3e4c2000         4K        rw       present           dirty  accessed                         
0xff9a4000-0xff9a4fff  0x3f1c0000         4K        rw       present           dirty  accessed                         
0xff9a5000-0xff9a5fff  0x3e47f000         4K        rw       present           dirty  accessed                         
0xff9a6000-0xff9a6fff  0x3e87e000         4K        rw       present           dirty  accessed                         
0xff9a7000-0xff9a7fff  0x3e377000         4K        rw       present           dirty  accessed                         
0xff9a8000-0xff9a8fff  0x3ddcc000         4K        rw       present           dirty  accessed                         
0xff9a9000-0xff9a9fff  0x3e4bd000         4K        rw       present           dirty  accessed                         
0xff9aa000-0xff9aafff  0x3e7b0000         4K        rw       present           dirty  accessed                         
0xff9ab000-0xff9abfff  0x3e8fa000         4K        rw       present           dirty  accessed                         
0xff9ac000-0xff9acfff  0x3e190000         4K        rw       present           dirty  accessed                         
0xff9ad000-0xff9adfff  0x3dd91000         4K        rw       present           dirty  accessed                         
0xff9ae000-0xff9aefff  0x3e650000         4K        rw       present           dirty  accessed                         
0xff9af000-0xff9affff  0x3e78d000         4K        rw       present           dirty  accessed                         
0xff9b0000-0xff9b0fff  0x3e5e7000         4K        rw       present           dirty  accessed                         
0xff9b1000-0xff9b1fff  0x3f110000         4K        rw       present           dirty  accessed                         
0xff9b2000-0xff9b2fff  0x3dc8a000         4K        rw       present           dirty  accessed                         
0xff9b3000-0xff9b3fff  0x3e8a8000         4K        rw       present           dirty  accessed                         
0xff9b4000-0xff9b4fff  0x3ebd1000         4K        rw       present           dirty  accessed                         
0xff9b5000-0xff9b5fff  0x3edf0000         4K        rw       present           dirty  accessed                         
0xff9b6000-0xff9b6fff  0x3e88a000         4K        rw       present           dirty  accessed                         
0xff9b7000-0xff9b7fff  0x3e0a4000         4K        rw       present           dirty  accessed                         
0xff9b8000-0xff9b8fff  0x3ed28000         4K        rw       present           dirty  accessed                         
0xff9b9000-0xff9b9fff  0x3eab7000         4K        rw       present           dirty  accessed                         
0xff9ba000-0xff9bafff  0x3e381000         4K        rw       present           dirty  accessed                         
0xff9bb000-0xff9bbfff  0x3e78f000         4K        rw       present           dirty  accessed                         
0xff9bc000-0xff9bcfff  0x3dddb000         4K        rw       present           dirty  accessed                         
0xff9bd000-0xff9bdfff  0x3e2d8000         4K        rw       present           dirty  accessed                         
0xff9be000-0xff9befff  0x3eef3000         4K        rw       present           dirty  accessed                         
0xff9bf000-0xff9bffff  0x3ea24000         4K        rw       present           dirty  accessed                         
0xff9c0000-0xff9c0fff  0x3dd9a000         4K        rw       present           dirty  accessed                         
0xff9c1000-0xff9c1fff  0x3e7ac000         4K        rw       present           dirty  accessed                         
0xff9c2000-0xff9c2fff  0x3e94b000         4K        rw       present           dirty  accessed                         
0xff9c3000-0xff9c3fff  0x3ddd0000         4K        rw       present           dirty  accessed                         
0xff9c4000-0xff9c4fff  0x3eecb000         4K        rw       present           dirty  accessed                         
0xff9c5000-0xff9c5fff  0x3e7af000         4K        rw       present           dirty  accessed                         
0xff9c6000-0xff9c6fff  0x3ee64000         4K        rw       present           dirty  accessed                         
0xff9c7000-0xff9c7fff  0x3e7b9000         4K        rw       present           dirty  accessed                         
0xff9c8000-0xff9c8fff  0x3eeca000         4K        rw       present           dirty  accessed                         
0xff9c9000-0xff9c9fff  0x3e7be000         4K        rw       present           dirty  accessed                         
0xff9ca000-0xff9cafff  0x3e645000         4K        rw       present           dirty  accessed                         
0xff9cb000-0xff9ccfff  0x3e0a2000         8K        rw       present           dirty  accessed                         
0xff9cd000-0xff9cdfff  0x3e22e000         4K        rw       present           dirty  accessed                         
0xff9ce000-0xff9cefff  0x3ebd0000         4K        rw       present           dirty  accessed                         
0xff9cf000-0xff9cffff  0x3eada000         4K        rw       present           dirty  accessed                         
0xff9d0000-0xff9d0fff  0x3ddd7000         4K        rw       present           dirty  accessed                         
0xff9d1000-0xff9d1fff  0x3e7c8000         4K        rw       present           dirty  accessed                         
0xff9d2000-0xff9d2fff  0x3e7ae000         4K        rw       present           dirty  accessed                         
0xff9d3000-0xff9d3fff  0x3e7bc000         4K        rw       present           dirty  accessed                         
0xff9d4000-0xff9d4fff  0x3f125000         4K        rw       present           dirty  accessed                         
0xff9d5000-0xff9d5fff  0x3dcd2000         4K        rw       present           dirty  accessed                         
0xff9d6000-0xff9d6fff  0x3e7ab000         4K        rw       present           dirty  accessed                         
0xff9d7000-0xff9d7fff  0x3e7cf000         4K        rw       present           dirty  accessed                         
0xff9d8000-0xff9d8fff  0x3e904000         4K        rw       present           dirty  accessed                         
0xff9d9000-0xff9d9fff  0x3ea97000         4K        rw       present           dirty  accessed                         
0xff9da000-0xff9dafff  0x3ea04000         4K        rw       present           dirty  accessed                         
0xff9db000-0xff9dbfff  0x3efe5000         4K        rw       present           dirty  accessed                         
0xff9dc000-0xff9dcfff  0x3e843000         4K        rw       present           dirty  accessed                         
0xff9dd000-0xff9ddfff  0x3e46b000         4K        rw       present           dirty  accessed                         
0xff9de000-0xff9defff  0x3e5aa000         4K        rw       present           dirty  accessed                         
0xff9df000-0xff9dffff  0x3ea62000         4K        rw       present           dirty  accessed                         
0xff9e0000-0xff9e0fff  0x3eadc000         4K        rw       present           dirty  accessed                         
0xff9e1000-0xff9e1fff  0x3ebd5000         4K        rw       present           dirty  accessed                         
0xff9e2000-0xff9e2fff  0x3e8db000         4K        rw       present           dirty  accessed                         
0xff9e3000-0xff9e3fff  0x3eb39000         4K        rw       present           dirty  accessed                         
0xff9e4000-0xff9e4fff  0x3e908000         4K        rw       present           dirty  accessed                         
0xff9e5000-0xff9e5fff  0x3ea82000         4K        rw       present           dirty  accessed                         
0xff9e6000-0xff9e6fff  0x3ebdd000         4K        rw       present           dirty  accessed                         
0xff9e7000-0xff9e7fff  0x3e5a6000         4K        rw       present           dirty  accessed                         
0xff9e8000-0xff9e8fff  0x3ebd6000         4K        rw       present           dirty  accessed                         
0xff9e9000-0xff9e9fff  0x3e913000         4K        rw       present           dirty  accessed                         
0xff9ea000-0xff9eafff  0x3eebc000         4K        rw       present           dirty  accessed                         
0xff9eb000-0xff9ebfff  0x3eade000         4K        rw       present           dirty  accessed                         
0xff9ec000-0xff9ecfff  0x3e943000         4K        rw       present           dirty  accessed                         
0xff9ed000-0xff9edfff  0x3ea7a000         4K        rw       present           dirty  accessed                         
0xff9ee000-0xff9eefff  0x3ed3b000         4K        rw       present           dirty  accessed                         
0xff9ef000-0xff9effff  0x3e5bf000         4K        rw       present           dirty  accessed                         
0xff9f0000-0xff9f0fff  0x3e79e000         4K        rw       present           dirty  accessed                         
0xff9f1000-0xff9f1fff  0x3e495000         4K        rw       present           dirty  accessed                         
0xff9f2000-0xff9f2fff  0x3e78a000         4K        rw       present           dirty  accessed                         
0xff9f3000-0xff9f3fff  0x3eded000         4K        rw       present           dirty  accessed                         
0xff9f4000-0xff9f4fff  0x3e621000         4K        rw       present           dirty  accessed                         
0xff9f5000-0xff9f5fff  0x3ea83000         4K        rw       present           dirty  accessed                         
0xff9f6000-0xff9f6fff  0x3ea95000         4K        rw       present           dirty  accessed                         
0xff9f7000-0xff9f7fff  0x3ef8f000         4K        rw       present           dirty  accessed                         
0xff9f8000-0xff9f8fff  0x3e5bc000         4K        rw       present           dirty  accessed                         
0xff9f9000-0xff9f9fff  0x3ef01000         4K        rw       present           dirty  accessed                         
0xff9fa000-0xff9fafff  0x3dc92000         4K        rw       present           dirty  accessed                         
0xff9fb000-0xff9fbfff  0x3e54c000         4K        rw       present           dirty  accessed                         
0xff9fc000-0xff9fcfff  0x3e507000         4K        rw       present           dirty  accessed                         
0xff9fd000-0xff9fdfff  0x3e71d000         4K        rw       present           dirty  accessed                         
0xff9fe000-0xff9fefff  0x3e732000         4K        rw       present           dirty  accessed                         
0xff9ff000-0xff9fffff  0x3eb9c000         4K        rw       present           dirty  accessed                         
0xffa00000-0xffa00fff  0x3de01000         4K        rw       present           dirty  accessed                         
0xffa01000-0xffa01fff  0x3de0c000         4K        rw       present           dirty  accessed                         
0xffa02000-0xffa02fff  0x3de13000         4K        rw       present           dirty  accessed                         
0xffa03000-0xffa03fff  0x3de16000         4K        rw       present           dirty  accessed                         
0xffa04000-0xffa04fff  0x3de08000         4K        rw       present           dirty  accessed                         
0xffa05000-0xffa05fff  0x3de2f000         4K        rw       present           dirty  accessed                         
0xffa06000-0xffa06fff  0x3e721000         4K        rw       present           dirty  accessed                         
0xffa07000-0xffa07fff  0x3dca8000         4K        rw       present           dirty  accessed                         
0xffa08000-0xffa08fff  0x3de05000         4K        rw       present           dirty  accessed                         
0xffa09000-0xffa09fff  0x3ea9f000         4K        rw       present           dirty  accessed                         
0xffa0a000-0xffa0afff  0x3e73a000         4K        rw       present           dirty  accessed                         
0xffa0b000-0xffa0bfff  0x3e783000         4K        rw       present           dirty  accessed                         
0xffa0c000-0xffa0cfff  0x3de1e000         4K        rw       present           dirty  accessed                         
0xffa0d000-0xffa0dfff  0x3de25000         4K        rw       present           dirty  accessed                         
0xffa0e000-0xffa0efff  0x3de4a000         4K        rw       present           dirty  accessed                         
0xffa0f000-0xffa0ffff  0x3de58000         4K        rw       present           dirty  accessed                         
0xffa10000-0xffa10fff  0x3de2d000         4K        rw       present           dirty  accessed                         
0xffa11000-0xffa11fff  0x3de17000         4K        rw       present           dirty  accessed                         
0xffa12000-0xffa12fff  0x3de0d000         4K        rw       present           dirty  accessed                         
0xffa13000-0xffa13fff  0x3edec000         4K        rw       present           dirty  accessed                         
0xffa14000-0xffa14fff  0x3e65f000         4K        rw       present           dirty  accessed                         
0xffa15000-0xffa15fff  0x3e8f7000         4K        rw       present           dirty  accessed                         
0xffa16000-0xffa16fff  0x3de03000         4K        rw       present           dirty  accessed                         
0xffa17000-0xffa17fff  0x3de32000         4K        rw       present           dirty  accessed                         
0xffa18000-0xffa18fff  0x3de57000         4K        rw       present           dirty  accessed                         
0xffa19000-0xffa19fff  0x3de5e000         4K        rw       present           dirty  accessed                         
0xffa1a000-0xffa1afff  0x3de48000         4K        rw       present           dirty  accessed                         
0xffa1b000-0xffa1bfff  0x3de67000         4K        rw       present           dirty  accessed                         
0xffa1c000-0xffa1cfff  0x3e434000         4K        rw       present           dirty  accessed                         
0xffa1d000-0xffa1dfff  0x3de21000         4K        rw       present           dirty  accessed                         
0xffa1e000-0xffa1efff  0x3eb88000         4K        rw       present           dirty  accessed                         
0xffa1f000-0xffa1ffff  0x3de09000         4K        rw       present           dirty  accessed                         
0xffa20000-0xffa20fff  0x3ebbe000         4K        rw       present           dirty  accessed                         
0xffa21000-0xffa21fff  0x3de63000         4K        rw       present           dirty  accessed                         
0xffa22000-0xffa22fff  0x3de45000         4K        rw       present           dirty  accessed                         
0xffa23000-0xffa23fff  0x3dfc3000         4K        rw       present           dirty  accessed                         
0xffa24000-0xffa24fff  0x3d801000         4K        rw       present           dirty  accessed                         
0xffa25000-0xffa25fff  0x3d803000         4K        rw       present           dirty  accessed                         
0xffa26000-0xffa26fff  0x3dffd000         4K        rw       present           dirty  accessed                         
0xffa27000-0xffa27fff  0x3d819000         4K        rw       present           dirty  accessed                         
0xffa28000-0xffa28fff  0x3d809000         4K        rw       present           dirty  accessed                         
0xffa29000-0xffa29fff  0x3d82a000         4K        rw       present           dirty  accessed                         
0xffa2a000-0xffa2afff  0x3dfff000         4K        rw       present           dirty  accessed                         
0xffa2b000-0xffa2bfff  0x3e5a7000         4K        rw       present           dirty  accessed                         
0xffa2c000-0xffa2cfff  0x3dec6000         4K        rw       present           dirty  accessed                         
0xffa2d000-0xffa2dfff  0x3df01000         4K        rw       present           dirty  accessed                         
0xffa2e000-0xffa2efff  0x3d83e000         4K        rw       present           dirty  accessed                         
0xffa2f000-0xffa2ffff  0x3dea1000         4K        rw       present           dirty  accessed                         
0xffa30000-0xffa30fff  0x3dec7000         4K        rw       present           dirty  accessed                         
0xffa31000-0xffa31fff  0x3eb9f000         4K        rw       present           dirty  accessed                         
0xffa32000-0xffa32fff  0x3ea79000         4K        rw       present           dirty  accessed                         
0xffa33000-0xffa33fff  0x3dfe6000         4K        rw       present           dirty  accessed                         
0xffa34000-0xffa34fff  0x3df72000         4K        rw       present           dirty  accessed                         
0xffa35000-0xffa35fff  0x3df41000         4K        rw       present           dirty  accessed                         
0xffa36000-0xffa36fff  0x3de80000         4K        rw       present           dirty  accessed                         
0xffa37000-0xffa37fff  0x3dfb3000         4K        rw       present           dirty  accessed                         
0xffa38000-0xffa38fff  0x3dff7000         4K        rw       present           dirty  accessed                         
0xffa39000-0xffa39fff  0x3d81a000         4K        rw       present           dirty  accessed                         
0xffa3a000-0xffa3afff  0x3ea96000         4K        rw       present           dirty  accessed                         
0xffa3b000-0xffa3bfff  0x3eed2000         4K        rw       present           dirty  accessed                         
0xffa3c000-0xffa3cfff  0x3de26000         4K        rw       present           dirty  accessed                         
0xffa3d000-0xffa3dfff  0x3ea0b000         4K        rw       present           dirty  accessed                         
0xffa3e000-0xffa3efff  0x3e842000         4K        rw       present           dirty  accessed                         
0xffa3f000-0xffa3ffff  0x3ea0a000         4K        rw       present           dirty  accessed                         
0xffa40000-0xffa40fff  0x3eecc000         4K        rw       present           dirty  accessed                         
0xffa41000-0xffa41fff  0x3e5a4000         4K        rw       present           dirty  accessed                         
0xffa42000-0xffa42fff  0x3f10b000         4K        rw       present           dirty  accessed                         
0xffa43000-0xffa43fff  0x3e221000         4K        rw       present           dirty  accessed                         
0xffa44000-0xffa44fff  0x3e468000         4K        rw       present           dirty  accessed                         
0xffa45000-0xffa45fff  0x3eb8d000         4K        rw       present           dirty  accessed                         
0xffa46000-0xffa46fff  0x3eecd000         4K        rw       present           dirty  accessed                         
0xffa47000-0xffa47fff  0x3d81c000         4K        rw       present           dirty  accessed                         
0xffa48000-0xffa48fff  0x3e435000         4K        rw       present           dirty  accessed                         
0xffa49000-0xffa49fff  0x3eece000         4K        rw       present           dirty  accessed                         
0xffa4a000-0xffa4afff  0x3de27000         4K        rw       present           dirty  accessed                         
0xffa4b000-0xffa4bfff  0x3e5b5000         4K        rw       present           dirty  accessed                         
0xffa4c000-0xffa4cfff  0x3e45f000         4K        rw       present           dirty  accessed                         
0xffa4d000-0xffa4dfff  0x3de62000         4K        rw       present           dirty  accessed                         
0xffa4e000-0xffa4efff  0x3eb85000         4K        rw       present           dirty  accessed                         
0xffa4f000-0xffa4ffff  0x3de24000         4K        rw       present           dirty  accessed                         
0xffa50000-0xffa50fff  0x3e5b4000         4K        rw       present           dirty  accessed                         
0xffa51000-0xffa51fff  0x3e7bf000         4K        rw       present           dirty  accessed                         
0xffa52000-0xffa52fff  0x3f102000         4K        rw       present           dirty  accessed                         
0xffa53000-0xffa53fff  0x3dfea000         4K        rw       present           dirty  accessed                         
0xffa54000-0xffa54fff  0x3de4f000         4K        rw       present           dirty  accessed                         
0xffa55000-0xffa55fff  0x3ea7b000         4K        rw       present           dirty  accessed                         
0xffa56000-0xffa56fff  0x3ed16000         4K        rw       present           dirty  accessed                         
0xffa57000-0xffa57fff  0x3e7bd000         4K        rw       present           dirty  accessed                         
0xffa58000-0xffa58fff  0x3d81e000         4K        rw       present           dirty  accessed                         
0xffa59000-0xffa59fff  0x3df71000         4K        rw       present           dirty  accessed                         
0xffa5a000-0xffa5afff  0x3ea07000         4K        rw       present           dirty  accessed                         
0xffa5b000-0xffa5bfff  0x3d808000         4K        rw       present           dirty  accessed                         
0xffa5c000-0xffa5cfff  0x3dfd9000         4K        rw       present           dirty  accessed                         
0xffa5d000-0xffa5dfff  0x3d83d000         4K        rw       present           dirty  accessed                         
0xffa5e000-0xffa5efff  0x3eed1000         4K        rw       present           dirty  accessed                         
0xffa5f000-0xffa5ffff  0x3d83c000         4K        rw       present           dirty  accessed                         
0xffa60000-0xffa60fff  0x3d804000         4K        rw       present           dirty  accessed                         
0xffa61000-0xffa61fff  0x3dfee000         4K        rw       present           dirty  accessed                         
0xffa62000-0xffa62fff  0x3d82e000         4K        rw       present           dirty  accessed                         
0xffa63000-0xffa63fff  0x3de7e000         4K        rw       present           dirty  accessed                         
0xffa64000-0xffa64fff  0x3dfb4000         4K        rw       present           dirty  accessed                         
0xffa65000-0xffa65fff  0x3d805000         4K        rw       present           dirty  accessed                         
0xffa66000-0xffa66fff  0x3de7a000         4K        rw       present           dirty  accessed                         
0xffa67000-0xffa67fff  0x3dfb0000         4K        rw       present           dirty  accessed                         
0xffa68000-0xffa68fff  0x3df96000         4K        rw       present           dirty  accessed                         
0xffa69000-0xffa69fff  0x3d814000         4K        rw       present           dirty  accessed                         
0xffa6a000-0xffa6afff  0x3dfb6000         4K        rw       present           dirty  accessed                         
0xffa6b000-0xffa6bfff  0x3ea65000         4K        rw       present           dirty  accessed                         
0xffa6c000-0xffa6cfff  0x3f515000         4K        rw       present           dirty  accessed                         
0xffa6d000-0xffa6dfff  0x3f4fb000         4K        rw       present           dirty  accessed                         
0xffa6e000-0xffa6efff  0x3eecf000         4K        rw       present           dirty  accessed                         
0xffa6f000-0xffa6ffff  0x3f506000         4K        rw       present           dirty  accessed                         
0xffa70000-0xffa70fff  0x3d842000         4K        rw       present           dirty  accessed                         
0xffa71000-0xffa71fff  0x3f509000         4K        rw       present           dirty  accessed                         
0xffa72000-0xffa72fff  0x3dfc7000         4K        rw       present           dirty  accessed                         
0xffa73000-0xffa73fff  0x3d859000         4K        rw       present           dirty  accessed                         
0xffa74000-0xffa74fff  0x3d866000         4K        rw       present           dirty  accessed                         
0xffa75000-0xffa75fff  0x3d84b000         4K        rw       present           dirty  accessed                         
0xffa76000-0xffa76fff  0x3d863000         4K        rw       present           dirty  accessed                         
0xffa77000-0xffa77fff  0x3d86e000         4K        rw       present           dirty  accessed                         
0xffa78000-0xffa78fff  0x3d86c000         4K        rw       present           dirty  accessed                         
0xffa79000-0xffa79fff  0x3d860000         4K        rw       present           dirty  accessed                         
0xffa7a000-0xffa7bfff  0x3d874000         8K        rw       present           dirty  accessed                         
0xffa7c000-0xffa7cfff  0x3d861000         4K        rw       present           dirty  accessed                         
0xffa7d000-0xffa7dfff  0x3d87b000         4K        rw       present           dirty  accessed                         
0xffa7e000-0xffa7efff  0x3d878000         4K        rw       present           dirty  accessed                         
0xffa7f000-0xffa7ffff  0x3d8ad000         4K        rw       present           dirty  accessed                         
0xffa80000-0xffa80fff  0x3d870000         4K        rw       present           dirty  accessed                         
0xffa81000-0xffa81fff  0x3d882000         4K        rw       present           dirty  accessed                         
0xffa82000-0xffa82fff  0x3d8b1000         4K        rw       present           dirty  accessed                         
0xffa83000-0xffa83fff  0x3dfca000         4K        rw       present           dirty  accessed                         
0xffa84000-0xffa84fff  0x3d879000         4K        rw       present           dirty  accessed                         
0xffa85000-0xffa85fff  0x3f50d000         4K        rw       present           dirty  accessed                         
0xffa86000-0xffa86fff  0x3d8a8000         4K        rw       present           dirty  accessed                         
0xffa87000-0xffa87fff  0x3d8b0000         4K        rw       present           dirty  accessed                         
0xffa88000-0xffa88fff  0x3dfc4000         4K        rw       present           dirty  accessed                         
0xffa89000-0xffa89fff  0x3d84a000         4K        rw       present           dirty  accessed                         
0xffa8a000-0xffa8afff  0x3d8a0000         4K        rw       present           dirty  accessed                         
0xffa8b000-0xffa8bfff  0x3d8b9000         4K        rw       present           dirty  accessed                         
0xffa8c000-0xffa8cfff  0x3d893000         4K        rw       present           dirty  accessed                         
0xffa8d000-0xffa8dfff  0x3da76000         4K        rw       present           dirty  accessed                         
0xffa8e000-0xffa8efff  0x3daab000         4K        rw       present           dirty  accessed                         
0xffa8f000-0xffa8ffff  0x3dabf000         4K        rw       present           dirty  accessed                         
0xffa90000-0xffa90fff  0x3dacc000         4K        rw       present           dirty  accessed                         
0xffa91000-0xffa91fff  0x3dad7000         4K        rw       present           dirty  accessed                         
0xffa92000-0xffa92fff  0x3dac2000         4K        rw       present           dirty  accessed                         
0xffa93000-0xffa93fff  0x3dad4000         4K        rw       present           dirty  accessed                         
0xffa94000-0xffa94fff  0x3dac6000         4K        rw       present           dirty  accessed                         
0xffa95000-0xffa95fff  0x3dad8000         4K        rw       present           dirty  accessed                         
0xffa96000-0xffa96fff  0x3dace000         4K        rw       present           dirty  accessed                         
0xffa97000-0xffa97fff  0x3dac4000         4K        rw       present           dirty  accessed                         
0xffa98000-0xffa98fff  0x3dada000         4K        rw       present           dirty  accessed                         
0xffa99000-0xffa99fff  0x3dabd000         4K        rw       present           dirty  accessed                         
0xffa9a000-0xffa9afff  0x3f50c000         4K        rw       present           dirty  accessed                         
0xffa9b000-0xffa9bfff  0x3dad3000         4K        rw       present           dirty  accessed                         
0xffa9c000-0xffa9cfff  0x3dacd000         4K        rw       present           dirty  accessed                         
0xffa9d000-0xffa9dfff  0x3dafa000         4K        rw       present           dirty  accessed                         
0xffa9e000-0xffa9efff  0x3db50000         4K        rw       present           dirty  accessed                         
0xffa9f000-0xffa9ffff  0x3db49000         4K        rw       present           dirty  accessed                         
0xffaa0000-0xffaa0fff  0x3db4f000         4K        rw       present           dirty  accessed                         
0xffaa1000-0xffaa1fff  0x3db58000         4K        rw       present           dirty  accessed                         
0xffaa2000-0xffaa2fff  0x3db53000         4K        rw       present           dirty  accessed                         
0xffaa3000-0xffaa3fff  0x3db48000         4K        rw       present           dirty  accessed                         
0xffaa4000-0xffaa4fff  0x3db57000         4K        rw       present           dirty  accessed                         
0xffaa5000-0xffaa5fff  0x3db59000         4K        rw       present           dirty  accessed                         
0xffaa6000-0xffaa6fff  0x3d9ed000         4K        rw       present           dirty  accessed                         
0xffaa7000-0xffaa7fff  0x3db4e000         4K        rw       present           dirty  accessed                         
0xffaa8000-0xffaa8fff  0x3db4a000         4K        rw       present           dirty  accessed                         
0xffaa9000-0xffaa9fff  0x3db5d000         4K        rw       present           dirty  accessed                         
0xffaaa000-0xffaaafff  0x3db4d000         4K        rw       present           dirty  accessed                         
0xffaab000-0xffaabfff  0x3db7d000         4K        rw       present           dirty  accessed                         
0xffaac000-0xffaacfff  0x3db86000         4K        rw       present           dirty  accessed                         
0xffaad000-0xffaadfff  0x3db7a000         4K        rw       present           dirty  accessed                         
0xffaae000-0xffaaefff  0x3db8f000         4K        rw       present           dirty  accessed                         
0xffaaf000-0xffaaffff  0x3dba8000         4K        rw       present           dirty  accessed                         
0xffab0000-0xffab0fff  0x3db56000         4K        rw       present           dirty  accessed                         
0xffab1000-0xffab1fff  0x3dbba000         4K        rw       present           dirty  accessed                         
0xffab2000-0xffab2fff  0x3dbc3000         4K        rw       present           dirty  accessed                         
0xffab3000-0xffab3fff  0x3dbb1000         4K        rw       present           dirty  accessed                         
0xffab4000-0xffab4fff  0x3db80000         4K        rw       present           dirty  accessed                         
0xffab5000-0xffab5fff  0x3db62000         4K        rw       present           dirty  accessed                         
0xffab6000-0xffab6fff  0x3dbcd000         4K        rw       present           dirty  accessed                         
0xffab7000-0xffab7fff  0x3dbbd000         4K        rw       present           dirty  accessed                         
0xffab8000-0xffab8fff  0x3db7b000         4K        rw       present           dirty  accessed                         
0xffab9000-0xffab9fff  0x3dbac000         4K        rw       present           dirty  accessed                         
0xffaba000-0xffabafff  0x3db8c000         4K        rw       present           dirty  accessed                         
0xffabb000-0xffabbfff  0x3db81000         4K        rw       present           dirty  accessed                         
0xffabc000-0xffabcfff  0x3dbb3000         4K        rw       present           dirty  accessed                         
0xffabd000-0xffabdfff  0x3db69000         4K        rw       present           dirty  accessed                         
0xffabe000-0xffabefff  0x3dba7000         4K        rw       present           dirty  accessed                         
0xffabf000-0xffabffff  0x3dbe0000         4K        rw       present           dirty  accessed                         
0xffac0000-0xffac0fff  0x3dbd5000         4K        rw       present           dirty  accessed                         
0xffac1000-0xffac1fff  0x3db46000         4K        rw       present           dirty  accessed                         
0xffac2000-0xffac2fff  0x3dbd2000         4K        rw       present           dirty  accessed                         
0xffac3000-0xffac3fff  0x3dbab000         4K        rw       present           dirty  accessed                         
0xffac4000-0xffac4fff  0x3db51000         4K        rw       present           dirty  accessed                         
0xffac5000-0xffac5fff  0x3dbd8000         4K        rw       present           dirty  accessed                         
0xffac6000-0xffac6fff  0x3dbec000         4K        rw       present           dirty  accessed                         
0xffac7000-0xffac7fff  0x3dbdb000         4K        rw       present           dirty  accessed                         
0xffac8000-0xffac8fff  0x3d8aa000         4K        rw       present           dirty  accessed                         
0xffac9000-0xffac9fff  0x3dbc5000         4K        rw       present           dirty  accessed                         
0xffaca000-0xffacbfff  0x3dbe3000         8K        rw       present           dirty  accessed                         
0xffacc000-0xffaccfff  0x3dbeb000         4K        rw       present           dirty  accessed                         
0xffacd000-0xffacdfff  0x3dfc1000         4K        rw       present           dirty  accessed                         
0xfface000-0xffacefff  0x3dbe5000         4K        rw       present           dirty  accessed                         
0xffacf000-0xffacffff  0x3dbf7000         4K        rw       present           dirty  accessed                         
0xffad0000-0xffad0fff  0x3dbfc000         4K        rw       present           dirty  accessed                         
0xffad1000-0xffad1fff  0x3d409000         4K        rw       present           dirty  accessed                         
0xffad2000-0xffad2fff  0x3dbf8000         4K        rw       present           dirty  accessed                         
0xffad3000-0xffad3fff  0x3d516000         4K        rw       present           dirty  accessed                         
0xffad4000-0xffad4fff  0x3d53a000         4K        rw       present           dirty  accessed                         
0xffad5000-0xffad5fff  0x3d538000         4K        rw       present           dirty  accessed                         
0xffad6000-0xffad6fff  0x3d526000         4K        rw       present           dirty  accessed                         
0xffad7000-0xffad7fff  0x3d51a000         4K        rw       present           dirty  accessed                         
0xffad8000-0xffad8fff  0x3d519000         4K        rw       present           dirty  accessed                         
0xffad9000-0xffad9fff  0x3d533000         4K        rw       present           dirty  accessed                         
0xffada000-0xffadafff  0x3d521000         4K        rw       present           dirty  accessed                         
0xffadb000-0xffadbfff  0x3d524000         4K        rw       present           dirty  accessed                         
0xffadc000-0xffadcfff  0x3d51f000         4K        rw       present           dirty  accessed                         
0xffadd000-0xffaddfff  0x3d534000         4K        rw       present           dirty  accessed                         
0xffade000-0xffadefff  0x3d536000         4K        rw       present           dirty  accessed                         
0xffadf000-0xffadffff  0x3dfc9000         4K        rw       present           dirty  accessed                         
0xffae0000-0xffae0fff  0x3d53c000         4K        rw       present           dirty  accessed                         
0xffae1000-0xffae1fff  0x3d518000         4K        rw       present           dirty  accessed                         
0xffae2000-0xffae2fff  0x3d543000         4K        rw       present           dirty  accessed                         
0xffae3000-0xffae3fff  0x3d54b000         4K        rw       present           dirty  accessed                         
0xffae4000-0xffae4fff  0x3d569000         4K        rw       present           dirty  accessed                         
0xffae5000-0xffae5fff  0x3d537000         4K        rw       present           dirty  accessed                         
0xffae6000-0xffae6fff  0x3d580000         4K        rw       present           dirty  accessed                         
0xffae7000-0xffae7fff  0x3d571000         4K        rw       present           dirty  accessed                         
0xffae8000-0xffae8fff  0x3d565000         4K        rw       present           dirty  accessed                         
0xffae9000-0xffae9fff  0x3d56e000         4K        rw       present           dirty  accessed                         
0xffaea000-0xffaeafff  0x3d57c000         4K        rw       present           dirty  accessed                         
0xffaeb000-0xffaebfff  0x3d545000         4K        rw       present           dirty  accessed                         
0xffaec000-0xffaecfff  0x3d563000         4K        rw       present           dirty  accessed                         
0xffaed000-0xffaedfff  0x3d577000         4K        rw       present           dirty  accessed                         
0xffaee000-0xffaeefff  0x3d586000         4K        rw       present           dirty  accessed                         
0xffaef000-0xffaeffff  0x3d584000         4K        rw       present           dirty  accessed                         
0xffaf0000-0xffaf0fff  0x3d57b000         4K        rw       present           dirty  accessed                         
0xffaf1000-0xffaf1fff  0x3d567000         4K        rw       present           dirty  accessed                         
0xffaf2000-0xffaf2fff  0x3d56a000         4K        rw       present           dirty  accessed                         
0xffaf3000-0xffaf3fff  0x3d596000         4K        rw       present           dirty  accessed                         
0xffaf4000-0xffaf4fff  0x3d588000         4K        rw       present           dirty  accessed                         
0xffaf5000-0xffaf5fff  0x3d568000         4K        rw       present           dirty  accessed                         
0xffaf6000-0xffaf6fff  0x3d587000         4K        rw       present           dirty  accessed                         
0xffaf7000-0xffaf7fff  0x3d6e0000         4K        rw       present           dirty  accessed                         
0xffaf8000-0xffaf8fff  0x3d6fd000         4K        rw       present           dirty  accessed                         
0xffaf9000-0xffaf9fff  0x3d721000         4K        rw       present           dirty  accessed                         
0xffafa000-0xffafafff  0x3d72f000         4K        rw       present           dirty  accessed                         
0xffafb000-0xffafbfff  0x3d724000         4K        rw       present           dirty  accessed                         
0xffafc000-0xffafcfff  0x3d6dd000         4K        rw       present           dirty  accessed                         
0xffafd000-0xffafdfff  0x3d730000         4K        rw       present           dirty  accessed                         
0xffafe000-0xffafefff  0x3d72a000         4K        rw       present           dirty  accessed                         
0xffaff000-0xffafffff  0x3d6e7000         4K        rw       present           dirty  accessed                         
0xffb00000-0xffb00fff  0x3d720000         4K        rw       present           dirty  accessed                         
0xffb01000-0xffb01fff  0x3d706000         4K        rw       present           dirty  accessed                         
0xffb02000-0xffb02fff  0x3d700000         4K        rw       present           dirty  accessed                         
0xffb03000-0xffb03fff  0x3d888000         4K        rw       present           dirty  accessed                         
0xffb04000-0xffb04fff  0x3d73a000         4K        rw       present           dirty  accessed                         
0xffb05000-0xffb05fff  0x3d729000         4K        rw       present           dirty  accessed                         
0xffb06000-0xffb06fff  0x3d745000         4K        rw       present           dirty  accessed                         
0xffb07000-0xffb07fff  0x3d750000         4K        rw       present           dirty  accessed                         
0xffb08000-0xffb08fff  0x3d701000         4K        rw       present           dirty  accessed                         
0xffb09000-0xffb09fff  0x3d6e6000         4K        rw       present           dirty  accessed                         
0xffb0a000-0xffb0afff  0x3d754000         4K        rw       present           dirty  accessed                         
0xffb0b000-0xffb0bfff  0x3d025000         4K        rw       present           dirty  accessed                         
0xffb0c000-0xffb0cfff  0x3d031000         4K        rw       present           dirty  accessed                         
0xffb0d000-0xffb0dfff  0x3d038000         4K        rw       present           dirty  accessed                         
0xffb0e000-0xffb0efff  0x3d03c000         4K        rw       present           dirty  accessed                         
0xffb0f000-0xffb0ffff  0x3d03e000         4K        rw       present           dirty  accessed                         
0xffb10000-0xffb10fff  0x3d022000         4K        rw       present           dirty  accessed                         
0xffb11000-0xffb11fff  0x3d054000         4K        rw       present           dirty  accessed                         
0xffb12000-0xffb12fff  0x3d051000         4K        rw       present           dirty  accessed                         
0xffb13000-0xffb13fff  0x3d043000         4K        rw       present           dirty  accessed                         
0xffb14000-0xffb14fff  0x3d04b000         4K        rw       present           dirty  accessed                         
0xffb15000-0xffb15fff  0x3d04e000         4K        rw       present           dirty  accessed                         
0xffb16000-0xffb16fff  0x3d03a000         4K        rw       present           dirty  accessed                         
0xffb17000-0xffb17fff  0x3d04f000         4K        rw       present           dirty  accessed                         
0xffb18000-0xffb18fff  0x3dbef000         4K        rw       present           dirty  accessed                         
0xffb19000-0xffb19fff  0x3d029000         4K        rw       present           dirty  accessed                         
0xffb1a000-0xffb1afff  0x3d56f000         4K        rw       present           dirty  accessed                         
0xffb1b000-0xffb1bfff  0x3d065000         4K        rw       present           dirty  accessed                         
0xffb1c000-0xffb1cfff  0x3d05d000         4K        rw       present           dirty  accessed                         
0xffb1d000-0xffb1dfff  0x3d04d000         4K        rw       present           dirty  accessed                         
0xffb1e000-0xffb1efff  0x3d08a000         4K        rw       present           dirty  accessed                         
0xffb1f000-0xffb1ffff  0x3d279000         4K        rw       present           dirty  accessed                         
0xffb20000-0xffb20fff  0x3d277000         4K        rw       present           dirty  accessed                         
0xffb21000-0xffb21fff  0x3d285000         4K        rw       present           dirty  accessed                         
0xffb22000-0xffb22fff  0x3d284000         4K        rw       present           dirty  accessed                         
0xffb23000-0xffb23fff  0x3d270000         4K        rw       present           dirty  accessed                         
0xffb24000-0xffb24fff  0x3d32c000         4K        rw       present           dirty  accessed                         
0xffb25000-0xffb25fff  0x3d202000         4K        rw       present           dirty  accessed                         
0xffb26000-0xffb26fff  0x3d368000         4K        rw       present           dirty  accessed                         
0xffb27000-0xffb27fff  0x3d36d000         4K        rw       present           dirty  accessed                         
0xffb28000-0xffb28fff  0x3d096000         4K        rw       present           dirty  accessed                         
0xffb29000-0xffb29fff  0x3d385000         4K        rw       present           dirty  accessed                         
0xffb2a000-0xffb2afff  0x3d372000         4K        rw       present           dirty  accessed                         
0xffb2b000-0xffb2bfff  0x3d36b000         4K        rw       present           dirty  accessed                         
0xffb2c000-0xffb2cfff  0x3d364000         4K        rw       present           dirty  accessed                         
0xffb2d000-0xffb2dfff  0x3d37c000         4K        rw       present           dirty  accessed                         
0xffb2e000-0xffb2efff  0x3d379000         4K        rw       present           dirty  accessed                         
0xffb2f000-0xffb2ffff  0x3d369000         4K        rw       present           dirty  accessed                         
0xffb30000-0xffb30fff  0x3d37e000         4K        rw       present           dirty  accessed                         
0xffb31000-0xffb31fff  0x3d381000         4K        rw       present           dirty  accessed                         
0xffb32000-0xffb32fff  0x3d36f000         4K        rw       present           dirty  accessed                         
0xffb33000-0xffb33fff  0x3d378000         4K        rw       present           dirty  accessed                         
0xffb34000-0xffb34fff  0x3d366000         4K        rw       present           dirty  accessed                         
0xffb35000-0xffb35fff  0x3f508000         4K        rw       present           dirty  accessed                         
0xffb36000-0xffb36fff  0x3d062000         4K        rw       present           dirty  accessed                         
0xffb37000-0xffb37fff  0x3d380000         4K        rw       present           dirty  accessed                         
0xffb38000-0xffb38fff  0x3d387000         4K        rw       present           dirty  accessed                         
0xffb39000-0xffb39fff  0x3d367000         4K        rw       present           dirty  accessed                         
0xffb3a000-0xffb3afff  0x3d3a7000         4K        rw       present           dirty  accessed                         
0xffb3b000-0xffb3bfff  0x3d3bd000         4K        rw       present           dirty  accessed                         
0xffb3c000-0xffb3cfff  0x3d3d0000         4K        rw       present           dirty  accessed                         
0xffb3d000-0xffb3dfff  0x3d38e000         4K        rw       present           dirty  accessed                         
0xffb3e000-0xffb3efff  0x3d806000         4K        rw       present           dirty  accessed                         
0xffb3f000-0xffb3ffff  0x3dfd8000         4K        rw       present           dirty  accessed                         
0xffb40000-0xffb40fff  0x3f4fe000         4K        rw       present           dirty  accessed                         
0xffb41000-0xffb41fff  0x3cc49000         4K        rw       present           dirty  accessed                         
0xffb42000-0xffb42fff  0x3e7f3000         4K        rw       present           dirty  accessed                         
0xffb43000-0xffb43fff  0x3cdac000         4K        rw       present           dirty  accessed                         
0xffb44000-0xffb44fff  0x3cd60000         4K        rw       present           dirty  accessed                         
0xffb45000-0xffb45fff  0x3e56a000         4K        rw       present           dirty  accessed                         
0xffb46000-0xffb46fff  0x3e56c000         4K        rw       present           dirty  accessed                         
0xffb47000-0xffb47fff  0x3cdc3000         4K        rw       present           dirty  accessed                         
0xffb48000-0xffb48fff  0x3cdd9000         4K        rw       present           dirty  accessed                         
0xffb49000-0xffb49fff  0x3ce16000         4K        rw       present           dirty  accessed                         
0xffb4a000-0xffb4afff  0x3ce40000         4K        rw       present           dirty  accessed                         
0xffb4b000-0xffb4bfff  0x3ce47000         4K        rw       present           dirty  accessed                         
0xffb4c000-0xffb4cfff  0x3ce6d000         4K        rw       present           dirty  accessed                         
0xffb4d000-0xffb4dfff  0x3cfe2000         4K        rw       present           dirty  accessed                         
0xffb4e000-0xffb4efff  0x3c86d000         4K        rw       present           dirty  accessed                         
0xffb4f000-0xffb4ffff  0x3c8bb000         4K        rw       present           dirty  accessed                         
0xffb50000-0xffb50fff  0x3c8eb000         4K        rw       present           dirty  accessed                         
0xffb51000-0xffb51fff  0x3c8b0000         4K        rw       present           dirty  accessed                         
---[ Highmem PTEs end ]---
---[ Fixmap start ]---
0xfffde000-0xfffdefff  0x3c8e6000         4K        rw       present           dirty  accessed                         
0xfffdf000-0xfffdffff  0x3c8f2000         4K        rw       present           dirty  accessed                         
---[ Fixmap end ]---


> /sys/kernel/debug/powerpc/block_address_translation

---[ Instruction Block Address Translation ]---
0: 0xc0000000-0xc07fffff 0x00000000 Kernel EXEC coherent 
1: 0xc0800000-0xc087ffff 0x00800000 Kernel EXEC coherent 
2:         -
3:         -
4:         -
5:         -
6:         -
7:         -

---[ Data Block Address Translation ]---
0: 0xc0000000-0xc07fffff 0x00000000 Kernel RO coherent 
1: 0xc0800000-0xc0bfffff 0x00800000 Kernel RO coherent 
2: 0xc0c00000-0xc0ffffff 0x00c00000 Kernel RW coherent 
3: 0xc1000000-0xc1ffffff 0x01000000 Kernel RW coherent 
4: 0xc2000000-0xc3ffffff 0x02000000 Kernel RW coherent 
5: 0xc4000000-0xc7ffffff 0x04000000 Kernel RW coherent 
6: 0xc8000000-0xcfffffff 0x08000000 Kernel RW coherent 
7: 0xd0000000-0xdfffffff 0x10000000 Kernel RW coherent 


> /sys/kernel/debug/powerpc/segment_registers

---[ User Segments ]---
0x00000000-0x0fffffff Kern key 1 User key 1 VSID 0x5d84d0
0x10000000-0x1fffffff Kern key 1 User key 1 VSID 0x5d85e1
0x20000000-0x2fffffff Kern key 1 User key 1 VSID 0x5d86f2
0x30000000-0x3fffffff Kern key 1 User key 1 VSID 0x5d8803
0x40000000-0x4fffffff Kern key 1 User key 1 VSID 0x5d8914
0x50000000-0x5fffffff Kern key 1 User key 1 VSID 0x5d8a25
0x60000000-0x6fffffff Kern key 1 User key 1 VSID 0x5d8b36
0x70000000-0x7fffffff Kern key 1 User key 1 VSID 0x5d8c47
0x80000000-0x8fffffff Kern key 1 User key 1 VSID 0x5d8d58
0x90000000-0x9fffffff Kern key 1 User key 1 VSID 0x5d8e69
0xa0000000-0xafffffff Kern key 1 User key 1 VSID 0x5d8f7a
0xb0000000-0xbfffffff Kern key 1 User key 1 VSID 0x5d908b

---[ Kernel Segments ]---
0xc0000000-0xcfffffff Kern key 0 User key 1 No Exec VSID 0x000ccc
0xd0000000-0xdfffffff Kern key 0 User key 1 No Exec VSID 0x000ddd
0xe0000000-0xefffffff Kern key 0 User key 1 No Exec VSID 0x000eee
0xf0000000-0xffffffff Kern key 0 User key 1 No Exec VSID 0x000fff


> first lines of dmesg

[    0.000000] Total memory = 1024MB; using 2048kB for hash table (at (ptrval))
[    0.000000] Linux version 5.1.0-rc7-dirty (ssb@spider) (gcc version 9.0.1 20190426 (prerelease) (GCC)) #1193 PREEMPT Mon Apr 29 10:59:53 MSK 2019
[    0.000000] Found UniNorth memory controller & host bridge @ 0xf8000000 revision: 0xd2
[    0.000000] Mapped at 0xff7c0000
[    0.000000] Found a Intrepid mac-io controller, rev: 0, mapped at 0x(ptrval)
[    0.000000] Processor NAP mode on idle enabled.
[    0.000000] PowerMac motherboard: PowerBook G4 15"
[    0.000000] Using PowerMac machine description
[    0.000000] printk: bootconsole [udbg0] enabled
[    0.000000] -----------------------------------------------------
[    0.000000] Hash_size         = 0x200000
[    0.000000] phys_mem_size     = 0x40000000
[    0.000000] dcache_bsize      = 0x20
[    0.000000] icache_bsize      = 0x20
[    0.000000] cpu_features      = 0x000000002510600a
[    0.000000]   possible        = 0x000000002f7ff14b
[    0.000000]   always          = 0x0000000000000000
[    0.000000] cpu_user_features = 0x9c000001 0x00000000
[    0.000000] mmu_features      = 0x00010001
[    0.000000] Hash              = 0x(ptrval)
[    0.000000] Hash_mask         = 0x7fff
[    0.000000] -----------------------------------------------------
[    0.000000] Found UniNorth PCI host bridge at 0x00000000f0000000. Firmware bus number: 0->1
[    0.000000] PCI host bridge /pci@f0000000  ranges:
[    0.000000]  MEM 0x00000000f1000000..0x00000000f1ffffff -> 0x00000000f1000000 
[    0.000000]   IO 0x00000000f0000000..0x00000000f07fffff -> 0x0000000000000000
[    0.000000]  MEM 0x00000000b0000000..0x00000000bfffffff -> 0x00000000b0000000 
[    0.000000] Found UniNorth PCI host bridge at 0x00000000f2000000. Firmware bus number: 0->1
[    0.000000] PCI host bridge /pci@f2000000 (primary) ranges:
[    0.000000]  MEM 0x00000000f3000000..0x00000000f3ffffff -> 0x00000000f3000000 
[    0.000000]   IO 0x00000000f2000000..0x00000000f27fffff -> 0x0000000000000000
[    0.000000]  MEM 0x0000000080000000..0x00000000afffffff -> 0x0000000080000000 
[    0.000000] Found UniNorth PCI host bridge at 0x00000000f4000000. Firmware bus number: 0->1
[    0.000000] PCI host bridge /pci@f4000000  ranges:
[    0.000000]  MEM 0x00000000f5000000..0x00000000f5ffffff -> 0x00000000f5000000 
[    0.000000]   IO 0x00000000f4000000..0x00000000f47fffff -> 0x0000000000000000
[    0.000000] via-pmu: Server Mode is disabled
[    0.000000] PMU driver v2 initialized for Core99, firmware: 0c
[    0.000000] Top of RAM: 0x40000000, Total RAM: 0x40000000
[    0.000000] Memory hole size: 0MB
[    0.000000] Zone ranges:
[    0.000000]   Normal   [mem 0x0000000000000000-0x000000002fffffff]
[    0.000000]   HighMem  [mem 0x0000000030000000-0x000000003fffffff]
[    0.000000] Movable zone start for each node
[    0.000000] Early memory node ranges
[    0.000000]   node   0: [mem 0x0000000000000000-0x000000003fffffff]
[    0.000000] Initmem setup node 0 [mem 0x0000000000000000-0x000000003fffffff]
[    0.000000] On node 0 totalpages: 262144
[    0.000000]   Normal zone: 1536 pages used for memmap
[    0.000000]   Normal zone: 0 pages reserved
[    0.000000]   Normal zone: 196608 pages, LIFO batch:63
[    0.000000]   HighMem zone: 65536 pages, LIFO batch:15
[    0.000000] pcpu-alloc: s0 r0 d32768 u32768 alloc=1*32768
[    0.000000] pcpu-alloc: [0] 0 
[    0.000000] Built 1 zonelists, mobility grouping on.  Total pages: 260608
[    0.000000] Kernel command line: root=/dev/hda3 ro console=ttyUSB0,115200 console=tty0 consoleblank=120 
[    0.000000] Dentry cache hash table entries: 131072 (order: 7, 524288 bytes)
[    0.000000] Inode-cache hash table entries: 65536 (order: 6, 262144 bytes)
[    0.000000] Memory: 1023076K/1048576K available (8704K kernel code, 352K rwdata, 1344K rodata, 208K init, 1176K bss, 25500K reserved, 0K cma-reserved, 262144K highmem)
[    0.000000] Kernel virtual memory layout:
[    0.000000]   * 0xfffcf000..0xfffff000  : fixmap
[    0.000000]   * 0xff800000..0xffc00000  : highmem PTEs
[    0.000000]   * 0xfde2b000..0xff800000  : early ioremap
[    0.000000]   * 0xf1000000..0xfde2b000  : vmalloc & ioremap
[    0.000000] SLUB: HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1

^ permalink raw reply

* Re: [PATCH 40/41] drivers: tty: serial: helper for setting mmio range
From: Esben Haabendal @ 2019-04-29  6:57 UTC (permalink / raw)
  To: Enrico Weigelt, metux IT consult
  Cc: linux-ia64, lorenzo.pieralisi, linux-mips, linux-serial, andrew,
	gregkh, sudeep.holla, liviu.dudau, linux-kernel, vz, linux,
	sparclinux, khilman, macro, slemieux.tyco, matthias.bgg, jacmet,
	linux-amlogic, andriy.shevchenko, linuxppc-dev, davem
In-Reply-To: <1556369542-13247-41-git-send-email-info@metux.net>

"Enrico Weigelt, metux IT consult" <info@metux.net> writes:

> @@ -131,7 +133,8 @@ int __init hp300_setup_serial_console(void)
>  		pr_info("Serial console is HP DCA at select code %d\n", scode);
>  
>  		port.uartclk = HPDCA_BAUD_BASE * 16;
> -		port.mapbase = (pa + UART_OFFSET);
> +
> +		uart_memres_set_start_len(&port, (pa + UART_OFFSET));

Missing length argument here.

>  		port.membase = (char *)(port.mapbase + DIO_VIRADDRBASE);
>  		port.regshift = 1;
>  		port.irq = DIO_IPL(pa + DIO_VIRADDRBASE);

> diff --git a/drivers/tty/serial/xilinx_uartps.c b/drivers/tty/serial/xilinx_uartps.c
> index cf8ca66..895c90c 100644
> --- a/drivers/tty/serial/xilinx_uartps.c
> +++ b/drivers/tty/serial/xilinx_uartps.c
> @@ -1626,8 +1626,7 @@ static int cdns_uart_probe(struct platform_device *pdev)
>  	 * This function also registers this device with the tty layer
>  	 * and triggers invocation of the config_port() entry point.
>  	 */
> -	port->mapbase = res->start;
> -	port->mapsize = CDNS_UART_REGISTER_SPACE;
> +	uart_memres_set_start_len(res->start, CDNS_UART_REGISTER_SPACE);

Missing 1st (port) argument here.

>  	port->irq = irq;
>  	port->dev = &pdev->dev;
>  	port->uartclk = clk_get_rate(cdns_uart_data->uartclk);

> diff --git a/include/linux/serial_core.h b/include/linux/serial_core.h
> index 5fe2b03..d891c8d 100644
> --- a/include/linux/serial_core.h
> +++ b/include/linux/serial_core.h
> @@ -427,6 +427,46 @@ void uart_console_write(struct uart_port *port, const char *s,
>  int uart_match_port(struct uart_port *port1, struct uart_port *port2);
>  
>  /*
> + * set physical io range from struct resource
> + * if resource is NULL, clear the fields
> + * also set the iotype to UPIO_MEM
> + */
> +static inline void uart_memres_set_res(struct uart_port *port,
> +				       struct resource *res)
> +{
> +	if (!res) {
> +		port->mapsize = 0;
> +		port->mapbase = 0;
> +		port->iobase = 0;
> +		return;
> +	}
> +
> +	if (resource_type(res) == IORESOURCE_IO) {
> +		port->iotype = UPIO_PORT;
> +		port->iobase = resource->start;
> +		return;
> +	}
> +
> +	uart->mapbase = res->start;
> +	uart->mapsize = resource_size(res);
> +	uart->iotype  = UPIO_MEM;

Hardcoding UPIO_MEM like does not work for drivers using other kind of
memory access, like UPIO_MEM16, UPIO_MEM32 and UPIO_MEM32BE.

Why not leave the control of iotype to drivers as before this patch?

> +}
> +
> +/*
> + * set physical io range by start address and length
> + * if resource is NULL, clear the fields
> + * also set the iotype to UPIO_MEM
> + */
> +static inline void uart_memres_set_start_len(struct uart_driver *uart,
> +					     resource_size_t start,
> +					     resource_size_t len)
> +{
> +	uart->mapbase = start;
> +	uart->mapsize = len;
> +	uart->iotype  = UPIO_MEM;

Same here, other iotype values must be possible.

> +}
> +
> +/*
>   * Power Management
>   */
>  int uart_suspend_port(struct uart_driver *reg, struct uart_port *port);

/Esben

^ permalink raw reply

* Re: [PATCH 35/41] drivers: tty: serial: 8250: add mapsize to platform data
From: Esben Haabendal @ 2019-04-29  7:06 UTC (permalink / raw)
  To: Enrico Weigelt, metux IT consult
  Cc: linux-ia64, lorenzo.pieralisi, linux-mips, linux-serial, andrew,
	gregkh, sudeep.holla, liviu.dudau, linux-kernel, vz, linux,
	sparclinux, khilman, macro, slemieux.tyco, matthias.bgg, jacmet,
	linux-amlogic, andriy.shevchenko, linuxppc-dev, davem
In-Reply-To: <1556369542-13247-36-git-send-email-info@metux.net>

"Enrico Weigelt, metux IT consult" <info@metux.net> writes:

> Adding a mapsize field for the 8250 port platform data struct,
> so we can now set the resource size (eg. *1) and don't need
> funny runtime detections like serial8250_port_size() anymore.
>
> For now, serial8250_port_size() is called everytime we need
> the io resource size. That function checks which chip we
> actually have and returns the appropriate size. This approach
> is a bit clumpsy and not entirely easy to understand, and
> it's a violation of layers :p
>
> Obviously, that information cannot change after the driver init,
> so we can safely do that probing once on driver init and just
> use the stored value later.
>
> *1) arch/mips/alchemy/common/platform.c
>
> Signed-off-by: Enrico Weigelt <info@metux.net>
> ---
>  drivers/tty/serial/8250/8250_core.c | 1 +
>  include/linux/serial_8250.h         | 1 +
>  2 files changed, 2 insertions(+)
>
> diff --git a/drivers/tty/serial/8250/8250_core.c b/drivers/tty/serial/8250/8250_core.c
> index e441221..71a398b 100644
> --- a/drivers/tty/serial/8250/8250_core.c
> +++ b/drivers/tty/serial/8250/8250_core.c
> @@ -814,6 +814,7 @@ static int serial8250_probe(struct platform_device *dev)
>  		uart.port.iotype	= p->iotype;
>  		uart.port.flags		= p->flags;
>  		uart.port.mapbase	= p->mapbase;
> +		uart.port.mapsize	= p->mapsize;
>  		uart.port.hub6		= p->hub6;
>  		uart.port.private_data	= p->private_data;
>  		uart.port.type		= p->type;
> diff --git a/include/linux/serial_8250.h b/include/linux/serial_8250.h
> index 5a655ba..8b8183a 100644
> --- a/include/linux/serial_8250.h
> +++ b/include/linux/serial_8250.h
> @@ -22,6 +22,7 @@ struct plat_serial8250_port {
>  	unsigned long	iobase;		/* io base address */
>  	void __iomem	*membase;	/* ioremap cookie or NULL */
>  	resource_size_t	mapbase;	/* resource base */
> +	resource_size_t	mapsize;	/* resource size */
>  	unsigned int	irq;		/* interrupt number */
>  	unsigned long	irqflags;	/* request_irq flags */
>  	unsigned int	uartclk;	/* UART clock rate */

Or replace iobase, mapbase and mapsize with a struct resource value?

/Esben

^ permalink raw reply

* Re: [PATCH 40/41] drivers: tty: serial: helper for setting mmio range
From: Esben Haabendal @ 2019-04-29  7:03 UTC (permalink / raw)
  To: Enrico Weigelt, metux IT consult
  Cc: linux-ia64, lorenzo.pieralisi, linux-mips, linux-serial, andrew,
	gregkh, sudeep.holla, liviu.dudau, linux-kernel, vz, linux,
	sparclinux, khilman, macro, slemieux.tyco, matthias.bgg, jacmet,
	linux-amlogic, andriy.shevchenko, linuxppc-dev, davem
In-Reply-To: <1556369542-13247-41-git-send-email-info@metux.net>

"Enrico Weigelt, metux IT consult" <info@metux.net> writes:

> Introduce a little helpers for settings the mmio range from an
> struct resource or start/len parameters with less code.
> (also setting iotype to UPIO_MEM)
>
> Also converting drivers to use these new helpers as well as
> fetching mapsize field instead of using hardcoded values.
> (the runtime overhead of that should be negligible)
>
> The idea is moving to a consistent scheme, so later common
> calls like request+ioremap combination can be done by generic
> helpers.

Why not simply replace iobase, mapbase and mapsize with a struct
resource value instead?

Incidentally, that would allow to specify a memory resource with a
parent memory resource :)

/Esben

^ permalink raw reply

* Re: [PATCH v5 00/16] KVM: PPC: Book3S HV: add XIVE native exploitation mode
From: Satheesh Rajendran @ 2019-04-29  8:05 UTC (permalink / raw)
  To: Cédric Le Goater
  Cc: linuxppc-dev, Paul Mackerras, kvm, kvm-ppc, David Gibson
In-Reply-To: <20190410170448.3923-1-clg@kaod.org>

On Wed, Apr 10, 2019 at 07:04:32PM +0200, Cédric Le Goater wrote:
> Hello,
> 
> GitHub trees available here :
> 
> QEMU sPAPR:
> 
>   https://github.com/legoater/qemu/commits/xive-next
>   
> Linux/KVM:
> 
>   https://github.com/legoater/linux/commits/xive-5.1

Hi,

Xive(both ic-mode=dual and ic-mode=xive) guest fails to boot with guest memory > 64G, till 64G it boots fine.

Note: xics(ic-mode=xics) guest with the same configuration boots fine

Tested with below current latest code(v6).

HW: Power9 DD 2.2

Qemu:
# git log -1
commit 34cc68411a5ada92df6ef968c32bad424911474c (HEAD -> xive-next, origin/xive-next)
Author: Cédric Le Goater <clg@kaod.org>
Date:   Thu Apr 18 18:31:37 2019 +0200

    spapr/irq: add KVM support to the 'dual' machine
    
Kernel Guest/Host: (Host kernel built with `ppc64le_defconfig`, Guest kernel built with `ppc64le_guest_defconfig`)
# git log -1
commit fac6994841aa8cfa5af02552f2eb9858fee9a25d (HEAD -> xive-5.1, origin/xive-5.1, origin/HEAD)
Author: Cédric Le Goater <clg@kaod.org>
Date:   Thu Apr 18 08:46:33 2019 +0200

    KVM: PPC: Book3S HV: XIVE: replace the 'destroy' method by a 'release' method
    

Qemu Commandline:
LC_ALL=C PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin QEMU_AUDIO_DRV=none /home/sath/qemu/ppc64-softmmu/qemu-system-ppc64 -name guest=vm2,debug-threads=on -S -object secret,id=masterKey0,format=raw,file=/var/lib/libvirt/qemu/domain-13-vm2/master-key.aes -machine pseries-4.0,accel=kvm,usb=off,dump-guest-core=off -m 66560 -realtime mlock=off -smp 56,sockets=1,cores=28,threads=2 -uuid 5510791f-f156-4f5a-8c3d-30cfa7a4c7a2 -display none -no-user-config -nodefaults -chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/domain-13-vm2/monitor.sock,server,nowait -mon chardev=charmonitor,id=monitor,mode=control -rtc base=utc -no-shutdown -boot strict=on -kernel /home/sath/linux/vmlinux -append 'root=/dev/sda2 rw console=tty0 console=ttyS0,115200 init=/sbin/init initcall_debug selinux=0 secure=on' -device qemu-xhci,id=usb,bus=pci.0,addr=0x3 -device virtio-scsi-pci,id=scsi0,bus=pci.0,addr=0x2 -drive file=/home/sath/tests/data/avocado-vt/images/jeos-27-ppc64le_vm2.qcow2,format=qcow2,if=none,id=drive-scsi0-0-0-0 -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=0,lun=0,drive=drive-scsi0-0-0-0,id=scsi0-0-0-0,bootindex=1 -netdev tap,fd=25,id=hostnet0,vhost=on,vhostfd=27 -device virtio-net-pci,netdev=hostnet0,id=net0,mac=52:54:00:57:58:59,bus=pci.0,addr=0x1 -chardev pty,id=charserial0 -device spapr-vty,chardev=charserial0,id=serial0,reg=0x30000000 -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x4 -M pseries,ic-mode=dual -msg timestamp=on


Guest Console:

Escape character is ^]
Populating /vdevice methods
Populating /vdevice/vty@30000000
Populating /vdevice/nvram@71000000
Populating /pci@800000020000000
                     00 0800 (D) : 1af4 1000    virtio [ net ]
                     00 1000 (D) : 1af4 1004    virtio [ scsi ]
Populating /pci@800000020000000/scsi@2
       SCSI: Looking for devices
          100000000000000 DISK     : "QEMU     QEMU HARDDISK    2.5+"
                     00 1800 (D) : 1b36 000d    serial bus [ usb-xhci ]
                     00 2000 (D) : 1af4 1002    unknown-legacy-device*
No NVRAM common partition, re-initializing...
Scanning USB 
  XHCI: Initializing
Using default console: /vdevice/vty@30000000
Detected RAM kernel at 400000 (17fe068 bytes) 
     
  Welcome to Open Firmware

  Copyright (c) 2004, 2017 IBM Corporation All rights reserved.
  This program and the accompanying materials are made available
  under the terms of the BSD License available at
  http://www.opensource.org/licenses/bsd-license.php

Booting from memory...
OF stdout device is: /vdevice/vty@30000000
Preparing to boot Linux version 5.1.0-rc5-176614-gfac6994841aa (root@kvmupstream) (gcc version 7.4.0 (Ubuntu 7.4.0-1ubuntu1~18.04)) #2 SMP Wed Apr 24 07:58:04 EDT 2019
Detected machine type: 0000000000000101
command line: root=/dev/sda2 rw console=tty0 console=ttyS0,115200 init=/sbin/init initcall_debug selinux=0 secure=on
Max number of cores passed to firmware: 1024 (NR_CPUS = 2048)
Calling ibm,client-architecture-support...

SLOF **********************************************************************
QEMU Starting
 Build Date = Jan 14 2019 18:00:39
 FW Version = git-a5b428e1c1eae703
 Press "s" to enter Open Firmware.

Populating /vdevice methods
Populating /vdevice/vty@30000000
Populating /vdevice/nvram@71000000
Populating /pci@800000020000000
                     00 0800 (D) : 1af4 1000    virtio [ net ]
                     00 1000 (D) : 1af4 1004    virtio [ scsi ]
Populating /pci@800000020000000/scsi@2
       SCSI: Looking for devices
          100000000000000 DISK     : "QEMU     QEMU HARDDISK    2.5+"
                     00 1800 (D) : 1b36 000d    serial bus [ usb-xhci ]
                     00 2000 (D) : 1af4 1002    unknown-legacy-device*
Scanning USB 
  XHCI: Initializing
Using default console: /vdevice/vty@30000000
Detected RAM kernel at 400000 (17fe068 bytes) 
     
  Welcome to Open Firmware

  Copyright (c) 2004, 2017 IBM Corporation All rights reserved.
  This program and the accompanying materials are made available
  under the terms of the BSD License available at
  http://www.opensource.org/licenses/bsd-license.php

Booting from memory...
OF stdout device is: /vdevice/vty@30000000
Preparing to boot Linux version 5.1.0-rc5-176614-gfac6994841aa (root@kvmupstream) (gcc version 7.4.0 (Ubuntu 7.4.0-1ubuntu1~18.04)) #2 SMP Wed Apr 24 07:58:04 EDT 2019
Detected machine type: 0000000000000101
command line: root=/dev/sda2 rw console=tty0 console=ttyS0,115200 init=/sbin/init initcall_debug selinux=0 secure=on
Max number of cores passed to firmware: 1024 (NR_CPUS = 2048)
Calling ibm,client-architecture-support... done
memory layout at init:
  memory_limit : 0000000000000000 (16 MB aligned)
  alloc_bottom : 0000000001c10000
  alloc_top    : 0000000010000000
  alloc_top_hi : 0000001040000000
  rmo_top      : 0000000010000000
  ram_top      : 0000001040000000
instantiating rtas at 0x000000000daf0000... done
prom_hold_cpus: skipped
copying OF device tree...
Building dt strings...
Building dt structure...
Device tree strings 0x0000000001c20000 -> 0x0000000001c20af8
Device tree struct  0x0000000001c30000 -> 0x0000000001c40000
Quiescing Open Firmware ...
Booting Linux via __start() @ 0x0000000000400000 ...
[    0.000000] radix-mmu: Page sizes from device-tree:
[    0.000000] radix-mmu: Page size shift = 12 AP=0x0
[    0.000000] radix-mmu: Page size shift = 16 AP=0x5
[    0.000000] radix-mmu: Page size shift = 21 AP=0x1
[    0.000000] radix-mmu: Page size shift = 30 AP=0x2
[    0.000000] lpar: Using radix MMU under hypervisor
[    0.000000] radix-mmu: Mapped 0x0000000000000000-0x0000000040000000 with 1.00 GiB pages (exec)
[    0.000000] radix-mmu: Mapped 0x0000000040000000-0x0000001040000000 with 1.00 GiB pages
[    0.000000] radix-mmu: Process table (____ptrval____) and radix root for kernel: (____ptrval____)
[    0.000000] Linux version 5.1.0-rc5-176614-gfac6994841aa (root@kvmupstream) (gcc version 7.4.0 (Ubuntu 7.4.0-1ubuntu1~18.04)) #2 SMP Wed Apr 24 07:58:04 EDT 2019
[    0.000000] Using pSeries machine description
[    0.000000] printk: bootconsole [udbg0] enabled
[    0.000000] Partition configured for 56 cpus.
[    0.000000] CPU maps initialized for 2 threads per core
[    0.000000] -----------------------------------------------------
[    0.000000] ppc64_pft_size    = 0x0
[    0.000000] phys_mem_size     = 0x1040000000
[    0.000000] dcache_bsize      = 0x80
[    0.000000] icache_bsize      = 0x80
[    0.000000] cpu_features      = 0x0000c06f8f5f91a7
[    0.000000]   possible        = 0x0000fbffcf5fb1a7
[    0.000000]   always          = 0x00000003800081a1
[    0.000000] cpu_user_features = 0xdc0065c2 0xaee00000
[    0.000000] mmu_features      = 0x3c006041
[    0.000000] firmware_features = 0x00000005455a445f
[    0.000000] -----------------------------------------------------
[    0.000000] numa:   NODE_DATA [mem 0x103fe17000-0x103fe1bfff]
[    0.000000] rfi-flush: fallback displacement flush available
[    0.000000] rfi-flush: ori type flush available
[    0.000000] rfi-flush: mttrig type flush available
[    0.000000] count-cache-flush: full software flush sequence enabled.
[    0.000000] stf-barrier: eieio barrier available
[    0.000000] PCI host bridge /pci@800000020000000  ranges:
[    0.000000]   IO 0x0000200000000000..0x000020000000ffff -> 0x0000000000000000
[    0.000000]  MEM 0x0000200080000000..0x00002000ffffffff -> 0x0000000080000000 
[    0.000000]  MEM 0x0000210000000000..0x000021ffffffffff -> 0x0000210000000000 
[    0.000000] PPC64 nvram contains 65536 bytes
[    0.000000] barrier-nospec: using ORI speculation barrier
[    0.000000] Zone ranges:
[    0.000000]   Normal   [mem 0x0000000000000000-0x000000103fffffff]
[    0.000000] Movable zone start for each node
[    0.000000] Early memory node ranges
[    0.000000]   node   0: [mem 0x0000000000000000-0x000000103fffffff]
[    0.000000] Initmem setup node 0 [mem 0x0000000000000000-0x000000103fffffff]
[    0.000000] random: get_random_u64 called from start_kernel+0xbc/0x648 with crng_init=0
[    0.000000] percpu: Embedded 4 pages/cpu @(____ptrval____) s169368 r0 d92776 u262144
[    0.000000] Built 1 zonelists, mobility grouping on.  Total pages: 1063920
[    0.000000] Policy zone: Normal
[    0.000000] Kernel command line: root=/dev/sda2 rw console=tty0 console=ttyS0,115200 init=/sbin/init initcall_debug selinux=0 secure=on
[    0.000000] printk: log_buf_len individual max cpu contribution: 8192 bytes
[    0.000000] printk: log_buf_len total cpu_extra contributions: 450560 bytes
[    0.000000] printk: log_buf_len min size: 262144 bytes
[    0.000000] printk: log_buf_len: 1048576 bytes
[    0.000000] printk: early log buf free: 257356(98%)
[    0.000000] Memory: 68034688K/68157440K available (12800K kernel code, 1728K rwdata, 3264K rodata, 4224K init, 2488K bss, 122752K reserved, 0K cma-reserved)
[    0.000000] SLUB: HWalign=128, Order=0-3, MinObjects=0, CPUs=56, Nodes=1
[    0.000000] ftrace: allocating 32078 entries in 12 pages
[    0.000000] rcu: Hierarchical RCU implementation.
[    0.000000] rcu: 	RCU event tracing is enabled.
[    0.000000] rcu: 	RCU restricting CPUs from NR_CPUS=2048 to nr_cpu_ids=56.
[    0.000000] rcu: RCU calculated value of scheduler-enlistment delay is 10 jiffies.
[    0.000000] rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=56
[    0.000000] NR_IRQS: 512, nr_irqs: 512, preallocated irqs: 16
[    0.000000] xive: Using IRQ range [0-df]
[    0.000000] xive: Interrupt handling initialized with spapr backend
[    0.000000] xive: Using priority 6 for all interrupts
[    0.000000] xive: Using 64kB queues
[    0.000002] time_init: 56 bit decrementer (max: 7fffffffffffff)
[    0.000536] clocksource: timebase: mask: 0xffffffffffffffff max_cycles: 0x761537d007, max_idle_ns: 440795202126 ns
[    0.001486] clocksource: timebase mult[1f40000] shift[24] registered
[    0.002374] Console: colour dummy device 80x25
[    0.000000] radix-mmu: Page sizes from device-tree:
[    0.000000] radix-mmu: Page size shift = 12 AP=0x0
[    0.000000] radix-mmu: Page size shift = 16 AP=0x5
[    0.000000] radix-mmu: Page size shift = 21 AP=0x1
[    0.000000] radix-mmu: Page size shift = 30 AP=0x2
[    0.000000] lpar: Using radix MMU under hypervisor
[    0.000000] radix-mmu: Mapped 0x0000000000000000-0x0000000040000000 with 1.00 GiB pages (exec)
[    0.000000] radix-mmu: Mapped 0x0000000040000000-0x0000001040000000 with 1.00 GiB pages
[    0.000000] radix-mmu: Process table (____ptrval____) and radix root for kernel: (____ptrval____)
[    0.000000] Linux version 5.1.0-rc5-176614-gfac6994841aa (root@kvmupstream) (gcc version 7.4.0 (Ubuntu 7.4.0-1ubuntu1~18.04)) #2 SMP Wed Apr 24 07:58:04 EDT 2019
[    0.000000] Using pSeries machine description
[    0.000000] printk: bootconsole [udbg0] enabled
[    0.000000] Partition configured for 56 cpus.
[    0.000000] CPU maps initialized for 2 threads per core
[    0.000000] -----------------------------------------------------
[    0.000000] ppc64_pft_size    = 0x0
[    0.000000] phys_mem_size     = 0x1040000000
[    0.000000] dcache_bsize      = 0x80
[    0.000000] icache_bsize      = 0x80
[    0.000000] cpu_features      = 0x0000c06f8f5f91a7
[    0.000000]   possible        = 0x0000fbffcf5fb1a7
[    0.000000]   always          = 0x00000003800081a1
[    0.000000] cpu_user_features = 0xdc0065c2 0xaee00000
[    0.000000] mmu_features      = 0x3c006041
[    0.000000] firmware_features = 0x00000005455a445f
[    0.000000] -----------------------------------------------------
[    0.000000] numa:   NODE_DATA [mem 0x103fe17000-0x103fe1bfff]
[    0.000000] rfi-flush: fallback displacement flush available
[    0.000000] rfi-flush: ori type flush available
[    0.000000] rfi-flush: mttrig type flush available
[    0.000000] count-cache-flush: full software flush sequence enabled.
[    0.000000] stf-barrier: eieio barrier available
[    0.000000] PCI host bridge /pci@800000020000000  ranges:
[    0.000000]   IO 0x0000200000000000..0x000020000000ffff -> 0x0000000000000000
[    0.000000]  MEM 0x0000200080000000..0x00002000ffffffff -> 0x0000000080000000 
[    0.000000]  MEM 0x0000210000000000..0x000021ffffffffff -> 0x0000210000000000 
[    0.000000] PPC64 nvram contains 65536 bytes
[    0.000000] barrier-nospec: using ORI speculation barrier
[    0.000000] Zone ranges:
[    0.000000]   Normal   [mem 0x0000000000000000-0x000000103fffffff]
[    0.000000] Movable zone start for each node
[    0.000000] Early memory node ranges
[    0.000000]   node   0: [mem 0x0000000000000000-0x000000103fffffff]
[    0.000000] Initmem setup node 0 [mem 0x0000000000000000-0x000000103fffffff]
[    0.000000] random: get_random_u64 called from start_kernel+0xbc/0x648 with crng_init=0
[    0.000000] percpu: Embedded 4 pages/cpu @(____ptrval____) s169368 r0 d92776 u262144
[    0.000000] Built 1 zonelists, mobility grouping on.  Total pages: 1063920
[    0.000000] Policy zone: Normal
[    0.000000] Kernel command line: root=/dev/sda2 rw console=tty0 console=ttyS0,115200 init=/sbin/init initcall_debug selinux=0 secure=on
[    0.000000] printk: log_buf_len individual max cpu contribution: 8192 bytes
[    0.000000] printk: log_buf_len total cpu_extra contributions: 450560 bytes
[    0.000000] printk: log_buf_len min size: 262144 bytes
[    0.000000] printk: log_buf_len: 1048576 bytes
[    0.000000] printk: early log buf free: 257356(98%)
[    0.000000] Memory: 68034688K/68157440K available (12800K kernel code, 1728K rwdata, 3264K rodata, 4224K init, 2488K bss, 122752K reserved, 0K cma-reserved)
[    0.000000] SLUB: HWalign=128, Order=0-3, MinObjects=0, CPUs=56, Nodes=1
[    0.000000] ftrace: allocating 32078 entries in 12 pages
[    0.000000] rcu: Hierarchical RCU implementation.
[    0.000000] rcu: 	RCU event tracing is enabled.
[    0.000000] rcu: 	RCU restricting CPUs from NR_CPUS=2048 to nr_cpu_ids=56.
[    0.000000] rcu: RCU calculated value of scheduler-enlistment delay is 10 jiffies.
[    0.000000] rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=56
[    0.000000] NR_IRQS: 512, nr_irqs: 512, preallocated irqs: 16
[    0.000000] xive: Using IRQ range [0-df]
[    0.000000] xive: Interrupt handling initialized with spapr backend
[    0.000000] xive: Using priority 6 for all interrupts
[    0.000000] xive: Using 64kB queues
[    0.000002] time_init: 56 bit decrementer (max: 7fffffffffffff)
[    0.000536] clocksource: timebase: mask: 0xffffffffffffffff max_cycles: 0x761537d007, max_idle_ns: 440795202126 ns
[    0.001486] clocksource: timebase mult[1f40000] shift[24] registered
[    0.002374] Console: colour dummy device 80x25
[    0.041204] printk: console [tty0] enabled
[    0.041652] pid_max: default: 57344 minimum: 448
[    0.047640] Dentry cache hash table entries: 8388608 (order: 10, 67108864 bytes)
[    0.051167] Inode-cache hash table entries: 4194304 (order: 9, 33554432 bytes)
[    0.052040] Mount-cache hash table entries: 131072 (order: 4, 1048576 bytes)
[    0.052748] Mountpoint-cache hash table entries: 131072 (order: 4, 1048576 bytes)
[    0.053855] *** VALIDATE proc ***
[    0.054280] *** VALIDATE cgroup1 ***
[    0.054612] *** VALIDATE cgroup2 ***
[    0.055735] EEH: pSeries platform initialized
[    0.056187] POWER9 performance monitor hardware support registered
[    0.056912] rcu: Hierarchical SRCU implementation.
[    0.058350] smp: Bringing up secondary CPUs ...
[    0.594474] smp: Brought up 1 node, 56 CPUs
[    0.595265] numa: Node 0 CPUs: 0-55
[    0.595639] Using standard scheduler topology
[    0.624525] devtmpfs: initialized
[    0.644891] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
[    0.646019] futex hash table entries: 16384 (order: 5, 2097152 bytes)
[    0.647574] NET: Registered protocol family 16
[    0.665143] kworker/u112:0 (294) used greatest stack depth: 12608 bytes left
[    0.694670] cpuidle: using governor menu
Linux ppc64le
#2 SMP Wed Apr 2[    4.103966] kworker/u112:1 (324) used greatest stack depth: 12464 bytes left
[  197.780442] PCI: Probing PCI hardware
[  197.781468] PCI host bridge to bus 0000:00
[  197.782323] pci_bus 0000:00: root bus resource [io  0x10000-0x1ffff] (bus address [0x0000-0xffff])
[  197.784122] pci_bus 0000:00: root bus resource [mem 0x200080000000-0x2000ffffffff] (bus address [0x80000000-0xffffffff])
[  197.786303] pci_bus 0000:00: root bus resource [mem 0x210000000000-0x21ffffffffff]
[  197.787822] pci_bus 0000:00: root bus resource [bus 00-ff]
[  197.789299] pci 0000:00:01.0: calling  pci_dev_pdn_setup+0x0/0x50 @ 1
[  197.790809] pci 0000:00:01.0: pci_dev_pdn_setup+0x0/0x50 took 0 usecs
[  197.792106] pci 0000:00:01.0: calling  pnv_npu2_opencapi_cfg_size_fixup+0x0/0x50 @ 1
[  197.793659] pci 0000:00:01.0: pnv_npu2_opencapi_cfg_size_fixup+0x0/0x50 took 0 usecs
[  197.795269] pci 0000:00:01.0: calling  pcibios_fixup_resources+0x0/0x1b0 @ 1
[  197.796674] pci 0000:00:01.0: pcibios_fixup_resources+0x0/0x1b0 took 0 usecs
[  197.798102] pci 0000:00:01.0: calling  pnv_ocxl_fixup_actag+0x0/0x2a0 @ 1
[  197.799461] pci 0000:00:01.0: pnv_ocxl_fixup_actag+0x0/0x2a0 took 0 usecs
[  197.801612] pci 0000:00:02.0: calling  pci_dev_pdn_setup+0x0/0x50 @ 1
[  197.802395] pci 0000:00:02.0: pci_dev_pdn_setup+0x0/0x50 took 0 usecs
[  197.803195] pci 0000:00:02.0: calling  pnv_npu2_opencapi_cfg_size_fixup+0x0/0x50 @ 1
[  197.804167] pci 0000:00:02.0: pnv_npu2_opencapi_cfg_size_fixup+0x0/0x50 took 0 usecs
[  197.805140] pci 0000:00:02.0: calling  pcibios_fixup_resources+0x0/0x1b0 @ 1
[  197.806018] pci 0000:00:02.0: pcibios_fixup_resources+0x0/0x1b0 took 0 usecs
[  197.806902] pci 0000:00:02.0: calling  pnv_ocxl_fixup_actag+0x0/0x2a0 @ 1
[  197.807746] pci 0000:00:02.0: pnv_ocxl_fixup_actag+0x0/0x2a0 took 0 usecs
[  197.809277] pci 0000:00:03.0: calling  pci_dev_pdn_setup+0x0/0x50 @ 1
[  197.810068] pci 0000:00:03.0: pci_dev_pdn_setup+0x0/0x50 took 0 usecs
[  197.810956] pci 0000:00:03.0: calling  pnv_npu2_opencapi_cfg_size_fixup+0x0/0x50 @ 1
[  197.811944] pci 0000:00:03.0: pnv_npu2_opencapi_cfg_size_fixup+0x0/0x50 took 0 usecs
[  197.812930] pci 0000:00:03.0: calling  pcibios_fixup_resources+0x0/0x1b0 @ 1
[  197.813827] pci 0000:00:03.0: pcibios_fixup_resources+0x0/0x1b0 took 0 usecs
[  197.814739] pci 0000:00:03.0: calling  pnv_ocxl_fixup_actag+0x0/0x2a0 @ 1
[  197.815599] pci 0000:00:03.0: pnv_ocxl_fixup_actag+0x0/0x2a0 took 0 usecs
[  197.816935] pci 0000:00:04.0: calling  pci_dev_pdn_setup+0x0/0x50 @ 1
[  197.817725] pci 0000:00:04.0: pci_dev_pdn_setup+0x0/0x50 took 0 usecs
[  197.818487] pci 0000:00:04.0: calling  pnv_npu2_opencapi_cfg_size_fixup+0x0/0x50 @ 1
[  197.819407] pci 0000:00:04.0: pnv_npu2_opencapi_cfg_size_fixup+0x0/0x50 took 0 usecs
[  197.820414] pci 0000:00:04.0: calling  pcibios_fixup_resources+0x0/0x1b0 @ 1
[  197.821322] pci 0000:00:04.0: pcibios_fixup_resources+0x0/0x1b0 took 0 usecs
[  197.822219] pci 0000:00:04.0: calling  pnv_ocxl_fixup_actag+0x0/0x2a0 @ 1
[  197.823088] pci 0000:00:04.0: pnv_ocxl_fixup_actag+0x0/0x2a0 took 0 usecs
[  197.826289] IOMMU table initialized, virtual merging enabled
[  197.827014] pci 0000:00:01.0: Adding to iommu group 0
[  197.827749] pci 0000:00:02.0: Adding to iommu group 0
[  197.828451] pci 0000:00:03.0: Adding to iommu group 0
[  197.829158] pci 0000:00:04.0: Adding to iommu group 0
[  197.831587] EEH: No capable adapters found
[  200.724067] HugeTLB registered 2.00 MiB page size, pre-allocated 0 pages
[  200.724986] HugeTLB registered 1.00 GiB page size, pre-allocated 0 pages
[  202.781050] vgaarb: loaded
[  202.782052] SCSI subsystem initialized
[  204.738109] usbcore: registered new interface driver usbfs
[  204.738794] usbcore: registered new interface driver hub
[  204.739502] usbcore: registered new device driver usb
[  204.740234] pps_core: LinuxPPS API ver. 1 registered
[  204.741014] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it>
[  204.742571] PTP clock support registered
[  208.752064] EDAC MC: Ver: 3.0.0

---gets stuck here





> 
> Thanks,
> 
> C.
> 
> Caveats :
> 
>  - We should introduce a set of definitions common to XIVE and XICS
>  - The XICS-over-XIVE device file book3s_xive.c could be renamed to
>    book3s_xics_on_xive.c or book3s_xics_p9.c
>  - The XICS-over-XIVE device still has locking issues in the setup.
>  - xc->valid is not useful
>  - xc->xive is not very useful either
> 
> Changes since v4:
> 
>  - add check on EQ page alignment
>  - add requirement on KVM_XIVE_EQ_ALWAYS_NOTIFY
>  - add documentation in Documentation/virtual/kvm/api.txt
>  - remove 'destroy' method
>  - introduce a 'release' device operation called when device fd is
>    closed.
>  - introduce a 'xive_devices' array under the VM to store kvmppc_xive
>    objects until VM is destroyed.
> 
> Changes since v3:
> 
>  - removed a couple of useless includes
>  - fix the test ont the initial setting of the EQ toggle bit : 0 -> 1
>  - renamed qsize to qshift
>  - renamed qpage to qaddr
>  - checked host page size
>  - limited flags to KVM_XIVE_EQ_ALWAYS_NOTIFY to fit sPAPR specs
>  - Fixed xive_timaval description in documentation
> 
> Changes since v2:
> 
>  - removed extra OPAL call definitions
>  - removed ->q_order setting. Only useful in the XICS-on-XIVE KVM
>    device which allocates the EQs on behalf of the guest.
>  - returned -ENXIO when VP base is invalid
>  - made use of the xive_vp() macro to compute VP identifiers
>  - reworked locking in kvmppc_xive_native_connect_vcpu() to fix races 
>  - stop advertising KVM_CAP_PPC_IRQ_XIVE as support is not fully
>    available yet
>  - fixed comment on XIVE IRQ number space
>  - removed usage of the __x_* macros
>  - fixed locking on source block
>  - fixed comments on the KVM device attribute definitions
>  - handled MASKED EAS configuration
>  - fixed check on supported EQ size to restrict to 64K pages
>  - checked kvm_eq.flags that need to be zero
>  - removed the OPAL call when EQ qtoggle bit and index are zero. 
>  - reduced the size of kvmppc_one_reg timaval attribute to two u64s
>  - stopped returning of the OS CAM line value
> 
> Changes since v1:
> 
>  - Better documentation (was missing)
>  - Nested support. XIVE not advertised on non PowerNV platforms. This
>    is a good way to test the fallback on QEMU emulated devices.
>  - ESB and TIMA special mapping done using the KVM device fd
>  - All hcalls moved to QEMU. Dropped the patch moving the hcall flags.
>  - Reworked of the KVM device ioctl controls to support hcalls and
>    migration needs to capture/save states
>  - Merged the control syncing XIVE and marking the EQ page dirty
>  - Fixed passthrough support using the KVM device file address_space
>    to clear the ESB pages from the mapping
>  - Misc enhancements and fixes 
> 
> Cédric Le Goater (16):
>   powerpc/xive: add OPAL extensions for the XIVE native exploitation
>     support
>   KVM: PPC: Book3S HV: add a new KVM device for the XIVE native
>     exploitation mode
>   KVM: PPC: Book3S HV: XIVE: introduce a new capability
>     KVM_CAP_PPC_IRQ_XIVE
>   KVM: PPC: Book3S HV: XIVE: add a control to initialize a source
>   KVM: PPC: Book3S HV: XIVE: add a control to configure a source
>   KVM: PPC: Book3S HV: XIVE: add controls for the EQ configuration
>   KVM: PPC: Book3S HV: XIVE: add a global reset control
>   KVM: PPC: Book3S HV: XIVE: add a control to sync the sources
>   KVM: PPC: Book3S HV: XIVE: add a control to dirty the XIVE EQ pages
>   KVM: PPC: Book3S HV: XIVE: add get/set accessors for the VP XIVE state
>   KVM: introduce a 'mmap' method for KVM devices
>   KVM: PPC: Book3S HV: XIVE: add a TIMA mapping
>   KVM: PPC: Book3S HV: XIVE: add a mapping for the source ESB pages
>   KVM: PPC: Book3S HV: XIVE: add passthrough support
>   KVM: PPC: Book3S HV: XIVE: activate XIVE exploitation mode
>   KVM: PPC: Book3S HV: XIVE: introduce a 'release' device operation
> 
>  arch/powerpc/include/asm/kvm_host.h        |    3 +
>  arch/powerpc/include/asm/kvm_ppc.h         |   32 +
>  arch/powerpc/include/asm/opal-api.h        |    7 +-
>  arch/powerpc/include/asm/opal.h            |    7 +
>  arch/powerpc/include/asm/xive.h            |   17 +
>  arch/powerpc/include/uapi/asm/kvm.h        |   46 +
>  arch/powerpc/kvm/book3s_xive.h             |   37 +
>  include/linux/kvm_host.h                   |    2 +
>  include/uapi/linux/kvm.h                   |    3 +
>  arch/powerpc/kvm/book3s.c                  |   31 +-
>  arch/powerpc/kvm/book3s_xive.c             |  230 +++-
>  arch/powerpc/kvm/book3s_xive_native.c      | 1243 ++++++++++++++++++++
>  arch/powerpc/kvm/powerpc.c                 |   37 +
>  arch/powerpc/platforms/powernv/opal-call.c |    3 +
>  arch/powerpc/sysdev/xive/native.c          |  110 ++
>  virt/kvm/kvm_main.c                        |   24 +
>  Documentation/virtual/kvm/api.txt          |   10 +
>  Documentation/virtual/kvm/devices/xive.txt |  197 ++++
>  arch/powerpc/kvm/Makefile                  |    2 +-
>  19 files changed, 1980 insertions(+), 61 deletions(-)
>  create mode 100644 arch/powerpc/kvm/book3s_xive_native.c
>  create mode 100644 Documentation/virtual/kvm/devices/xive.txt
> 
> -- 
> 2.20.1
> 


^ permalink raw reply

* Re: BUG: crash in __tlb_remove_page_size with STRICT_KERNEL_RWX on BOOK3S_32
From: Christophe Leroy @ 2019-04-29  7:31 UTC (permalink / raw)
  To: Serge Belyshev; +Cc: linuxppc-dev
In-Reply-To: <878svwn85h.fsf@depni.sinp.msu.ru>



On 04/26/2019 02:38 PM, Serge Belyshev wrote:
> Hi!
> 
>> Could you please compile your kernel with CONFIG_PPC_PTDUMP, and
>> provide the content of:
>>
>> /sys/kernel/debug/kernel_page_tables
> 
> ---[ Start of kernel VM ]---
> 0xe1000000-0xefffffff  0x21000000       240M        rw       present           dirty  accessed

The above line is not correct, should start at the end of the area 
covered by bats, ie at 0xe0400000 with the current (uncorrect) bats


> ---[ vmalloc() Area ]---

[...]

> 
>> /sys/kernel/debug/powerpc/block_address_translation

[...]

> ---[ Data Block Address Translation ]---
> 0: 0xc0000000-0xc07fffff 0x00000000 Kernel RO coherent
> 1: 0xc0800000-0xc0bfffff 0x00800000 Kernel RO coherent
> 2: 0xc0c00000-0xc13fffff 0x00c00000 Kernel RW coherent
> 3: 0xc1400000-0xc23fffff 0x01400000 Kernel RW coherent
> 4: 0xc2400000-0xc43fffff 0x02400000 Kernel RW coherent
> 5: 0xc4400000-0xc83fffff 0x04400000 Kernel RW coherent
> 6: 0xc8400000-0xd03fffff 0x08400000 Kernel RW coherent
> 7: 0xd0400000-0xe03fffff 0x10400000 Kernel RW coherent

As pointed by Segher, those are not correct, bat 2 for instance should 
be 0xc0c00000-0xc0ffffff

Could you try the below changes ?

commit 5953416b8ef52107e8f04559a08a90aa5368cfcd
Author: Christophe Leroy <christophe.leroy@c-s.fr>
Date:   Mon Apr 29 07:22:08 2019 +0000

     powerpc/32s: fix BATs setting with CONFIG_STRICT_KERNEL_RWX

diff --git a/arch/powerpc/mm/ppc_mmu_32.c b/arch/powerpc/mm/ppc_mmu_32.c
index 8a21958484d8..159bdf0394e6 100644
--- a/arch/powerpc/mm/ppc_mmu_32.c
+++ b/arch/powerpc/mm/ppc_mmu_32.c
@@ -102,7 +102,7 @@ static int find_free_bat(void)
  static unsigned int block_size(unsigned long base, unsigned long top)
  {
  	unsigned int max_size = (cpu_has_feature(CPU_FTR_601) ? 8 : 256) << 20;
-	unsigned int base_shift = (fls(base) - 1) & 31;
+	unsigned int base_shift = (ffs(base) - 1) & 31;
  	unsigned int block_shift = (fls(top - base) - 1) & 31;

  	return min3(max_size, 1U << base_shift, 1U << block_shift);
@@ -158,7 +158,7 @@ static unsigned long __init __mmu_mapin_ram(unsigned 
long base, unsigned long to

  unsigned long __init mmu_mapin_ram(unsigned long base, unsigned long top)
  {
-	int done;
+	unsigned long done;
  	unsigned long border = (unsigned long)__init_begin - PAGE_OFFSET;

  	if (__map_without_bats) {
@@ -170,10 +170,10 @@ unsigned long __init mmu_mapin_ram(unsigned long 
base, unsigned long top)
  		return __mmu_mapin_ram(base, top);

  	done = __mmu_mapin_ram(base, border);
-	if (done != border - base)
+	if (done != border)
  		return done;

-	return done + __mmu_mapin_ram(border, top);
+	return __mmu_mapin_ram(border, top);
  }

  void mmu_mark_initmem_nx(void)


Christophe

^ permalink raw reply related

* Re: [PATCH 01/41] drivers: tty: serial: dz: use dev_err() instead of printk()
From: Enrico Weigelt, metux IT consult @ 2019-04-29  7:23 UTC (permalink / raw)
  To: Greg KH, Enrico Weigelt, metux IT consult
  Cc: linux-ia64, lorenzo.pieralisi, linux-mips, linux-serial, andrew,
	khilman, sudeep.holla, liviu.dudau, linux-kernel, vz, linux,
	sparclinux, macro, slemieux.tyco, matthias.bgg, jacmet,
	linux-amlogic, andriy.shevchenko, linuxppc-dev, davem
In-Reply-To: <20190427133117.GC11368@kroah.com>

On 27.04.19 15:31, Greg KH wrote:
> On Sat, Apr 27, 2019 at 02:51:42PM +0200, Enrico Weigelt, metux IT consult wrote:
>> Using dev_err() instead of printk() for more consistent output.
>> (prints device name, etc).
>>
>> Signed-off-by: Enrico Weigelt <info@metux.net>
>> ---
>>  drivers/tty/serial/dz.c | 8 ++++----
> 
> Do you have this hardware to test any of these changes with?

Unfortunately not :(

Do you happen to know anybody who has ?

--mtx


-- 
Enrico Weigelt, metux IT consult
Free software and Linux embedded engineering
info@metux.net -- +49-151-27565287

^ permalink raw reply

* Re: Why is suspend with s2idle available on POWER8 systems?
From: Rafael J. Wysocki @ 2019-04-29  7:17 UTC (permalink / raw)
  To: Paul Menzel
  Cc: Linux PM, Rafael J. Wysocki, LKML, Paul Mackerras, linuxppc-dev
In-Reply-To: <5fdabbb9-0a62-4802-f1ca-f83584f935fa@molgen.mpg.de>

On Sat, Apr 27, 2019 at 12:54 PM Paul Menzel <pmenzel@molgen.mpg.de> wrote:
>
> Dear Linux folks,
>
>
> Updating an IBM S822LC from Ubuntu 18.10 to 19.04 some user space stuff
> seems to have changed, so that going into sleep/suspend is enabled.
>
> That raises two questions.
>
> 1.  Is suspend actually supported on a POWER8 processor?

Suspend-to-idle is a special variant of system suspend that does not
depend on any special platform support.  It works by suspending
devices and letting all of the CPUs in the system go idle (hence the
name).

Also see https://www.kernel.org/doc/html/latest/admin-guide/pm/sleep-states.html#suspend-to-idle

>
> > Apr 27 10:18:13 power NetworkManager[7534]: <info>  [1556353093.7224] manager: sleep: sleep requested (sleeping: no  e
> > Apr 27 10:18:13 power systemd[1]: Reached target Sleep.
> > Apr 27 10:18:13 power systemd[1]: Starting Suspend...
> > Apr 27 10:18:13 power systemd-sleep[82190]: Suspending system...
> > Apr 27 10:18:13 power kernel: PM: suspend entry (s2idle)
> > -- Reboot --
>
> > $ uname -m
> > ppc64le
> > $ more /proc/version
> > Linux version 5.1.0-rc6+ (joey@power) (gcc version 8.3.0 (Ubuntu 8.3.0-6ubuntu1)) #1 SMP Sat Apr 27 10:01:48 CEST 2019
> > $ more /sys/power/mem_sleep
> > [s2idle]
> > $ more /sys/power/state
> > freeze mem
> > $ grep _SUSPEND /boot/config-5.0.0-14-generic # also enabled in Ubuntu’s configuration
> > CONFIG_ARCH_SUSPEND_POSSIBLE=y
> > CONFIG_SUSPEND=y
> > CONFIG_SUSPEND_FREEZER=y
> > # CONFIG_SUSPEND_SKIP_SYNC is not set
> > # CONFIG_PM_TEST_SUSPEND is not set
>
> Should the Kconfig symbol `SUSPEND` be selectable? If yes, should their
> be some detection during runtime?
>
> 2.  If it is supported, what are the ways to getting it to resume? What
> would the IPMI command be?

That would depend on the distribution.

Generally, you need to set up at least one device to generate wakeup interrupts.

The interface to do that are the /sys/devices/.../power/wakeup files,
but that has to cause enble_irq_wake() to be called for the given IRQ,
so some support in the underlying drivers need to be present for it to
work.

USB devices generally work as wakeup sources if the controllers reside
on a PCI bus, for example.

Thanks,
Rafael

^ permalink raw reply

* Re: [PATCH stable v4.4 00/52] powerpc spectre backports for 4.4
From: Greg KH @ 2019-04-29  7:03 UTC (permalink / raw)
  To: Michael Ellerman; +Cc: npiggin, diana.craciun, linuxppc-dev, stable, msuchanek
In-Reply-To: <87a7g99viy.fsf@concordia.ellerman.id.au>

On Mon, Apr 29, 2019 at 04:26:45PM +1000, Michael Ellerman wrote:
> Michael Ellerman <mpe@ellerman.id.au> writes:
> > Greg KH <gregkh@linuxfoundation.org> writes:
> >> On Mon, Apr 22, 2019 at 12:19:45AM +1000, Michael Ellerman wrote:
> >>> -----BEGIN PGP SIGNED MESSAGE-----
> >>> Hash: SHA1
> >>> 
> >>> Hi Greg/Sasha,
> >>> 
> >>> Please queue up these powerpc patches for 4.4 if you have no objections.
> >>
> >> why?  Do you, or someone else, really care about spectre issues in 4.4?
> >> Who is using ppc for 4.4 becides a specific enterprise distro (and they
> >> don't seem to be pulling in my stable updates anyway...)?
> >
> > Someone asked for it, but TBH I can't remember who it was. I can chase
> > it up if you like.
> 
> Yeah it was a request from one of the distros. They plan to take it once
> it lands in 4.4 stable.

Ok, thanks for confirming, I'll work on this this afternoon.

greg k-h

^ permalink raw reply

* Re: [PATCH 37/41] drivers: tty: serial: 8250: simplify io resource size computation
From: Enrico Weigelt, metux IT consult @ 2019-04-29  6:48 UTC (permalink / raw)
  To: Andy Shevchenko, Enrico Weigelt, metux IT consult
  Cc: lorenzo.pieralisi, linux-ia64, linux-serial, andrew, gregkh,
	sudeep.holla, liviu.dudau, linux-kernel, vz, linux, sparclinux,
	khilman, macro, slemieux.tyco, matthias.bgg, jacmet,
	linux-amlogic, linux-mips, linuxppc-dev, davem
In-Reply-To: <20190428152103.GP9224@smile.fi.intel.com>

On 28.04.19 17:21, Andy Shevchenko wrote:

> 
>> +#define SERIAL_RT2880_IOSIZE	0x100
> 
> And why this is in the header file and not in corresponding C one?

hmm, no particular reason, maybe just an old habit to put definitions
into .h files ;-)

I can move it to 8250_of.c if you like me to.



--mtx

-- 
Enrico Weigelt, metux IT consult
Free software and Linux embedded engineering
info@metux.net -- +49-151-27565287

^ permalink raw reply

* Re: [PATCH kernel v3] powerpc/powernv: Isolate NVLinks between GV100GL on Witherspoon
From: Alexey Kardashevskiy @ 2019-04-29  6:50 UTC (permalink / raw)
  To: Alex Williamson
  Cc: Jose Ricardo Ziviani, kvm, Sam Bobroff, linuxppc-dev,
	Daniel Henrique Barboza, kvm-ppc, Piotr Jaroszynski,
	Leonardo Augusto Guimarães Garcia, Reza Arbab, David Gibson
In-Reply-To: <4f7069cf-8c25-6fe1-42df-3b4af2d52172@ozlabs.ru>



On 12/04/2019 13:48, Alexey Kardashevskiy wrote:
> 
> 
> On 12/04/2019 02:52, Alex Williamson wrote:
>> On Thu, 11 Apr 2019 16:48:44 +1000
>> Alexey Kardashevskiy <aik@ozlabs.ru> wrote:
>>
>>> The NVIDIA V100 SXM2 GPUs are connected to the CPU via PCIe links and
>>> (on POWER9) NVLinks. In addition to that, GPUs themselves have direct
>>> peer-to-peer NVLinks in groups of 2 to 4 GPUs with no buffers/latches
>>> between GPUs.
>>>
>>> Because of these interconnected NVLinks, the POWERNV platform puts such
>>> interconnected GPUs to the same IOMMU group. However users want to pass
>>> GPUs through individually which requires separate IOMMU groups.
>>>
>>> Thankfully V100 GPUs implement an interface to disable arbitrary links
>>> by programming link disabling mask via the GPU's BAR0. Once a link is
>>> disabled, it only can be enabled after performing the secondary bus reset
>>> (SBR) on the GPU. Since these GPUs do not advertise any other type of
>>> reset, it is reset by the platform's SBR handler.
>>>
>>> This adds an extra step to the POWERNV's SBR handler to block NVLinks to
>>> GPUs which do not belong to the same group as the GPU being reset.
>>>
>>> This adds a new "isolate_nvlink" kernel parameter to force GPU isolation;
>>> when enabled, every GPU gets placed in its own IOMMU group. The new
>>> parameter is off by default to preserve the existing behaviour.
>>>
>>> Before isolating:
>>> [nvdbg ~]$ nvidia-smi topo -m
>>>         GPU0    GPU1    GPU2    CPU Affinity
>>> GPU0     X      NV2     NV2     0-0
>>> GPU1    NV2      X      NV2     0-0
>>> GPU2    NV2     NV2      X      0-0
>>>
>>> After isolating:
>>> [nvdbg ~]$ nvidia-smi topo -m
>>>         GPU0    GPU1    GPU2    CPU Affinity
>>> GPU0     X      PHB     PHB     0-0
>>> GPU1    PHB      X      PHB     0-0
>>> GPU2    PHB     PHB      X      0-0
>>>
>>> Where:
>>>   X    = Self
>>>   PHB  = Connection traversing PCIe as well as a PCIe Host Bridge (typically the CPU)
>>>   NV#  = Connection traversing a bonded set of # NVLinks
>>>
>>> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
>>> ---
>>> Changes:
>>> v3:
>>> * added pci_err() for failed ioremap
>>> * reworked commit log
>>>
>>> v2:
>>> * this is rework of [PATCH kernel RFC 0/2] vfio, powerpc/powernv: Isolate GV100GL
>>> but this time it is contained in the powernv platform
>>> ---
>>>  arch/powerpc/platforms/powernv/Makefile      |   2 +-
>>>  arch/powerpc/platforms/powernv/pci.h         |   1 +
>>>  arch/powerpc/platforms/powernv/eeh-powernv.c |   1 +
>>>  arch/powerpc/platforms/powernv/npu-dma.c     |  24 +++-
>>>  arch/powerpc/platforms/powernv/nvlinkgpu.c   | 137 +++++++++++++++++++
>>>  5 files changed, 162 insertions(+), 3 deletions(-)
>>>  create mode 100644 arch/powerpc/platforms/powernv/nvlinkgpu.c
>>>
>>> diff --git a/arch/powerpc/platforms/powernv/Makefile b/arch/powerpc/platforms/powernv/Makefile
>>> index da2e99efbd04..60a10d3b36eb 100644
>>> --- a/arch/powerpc/platforms/powernv/Makefile
>>> +++ b/arch/powerpc/platforms/powernv/Makefile
>>> @@ -6,7 +6,7 @@ obj-y			+= opal-msglog.o opal-hmi.o opal-power.o opal-irqchip.o
>>>  obj-y			+= opal-kmsg.o opal-powercap.o opal-psr.o opal-sensor-groups.o
>>>  
>>>  obj-$(CONFIG_SMP)	+= smp.o subcore.o subcore-asm.o
>>> -obj-$(CONFIG_PCI)	+= pci.o pci-ioda.o npu-dma.o pci-ioda-tce.o
>>> +obj-$(CONFIG_PCI)	+= pci.o pci-ioda.o npu-dma.o pci-ioda-tce.o nvlinkgpu.o
>>>  obj-$(CONFIG_CXL_BASE)	+= pci-cxl.o
>>>  obj-$(CONFIG_EEH)	+= eeh-powernv.o
>>>  obj-$(CONFIG_PPC_SCOM)	+= opal-xscom.o
>>> diff --git a/arch/powerpc/platforms/powernv/pci.h b/arch/powerpc/platforms/powernv/pci.h
>>> index 8e36da379252..9fd3f391482c 100644
>>> --- a/arch/powerpc/platforms/powernv/pci.h
>>> +++ b/arch/powerpc/platforms/powernv/pci.h
>>> @@ -250,5 +250,6 @@ extern void pnv_pci_unlink_table_and_group(struct iommu_table *tbl,
>>>  extern void pnv_pci_setup_iommu_table(struct iommu_table *tbl,
>>>  		void *tce_mem, u64 tce_size,
>>>  		u64 dma_offset, unsigned int page_shift);
>>> +extern void pnv_try_isolate_nvidia_v100(struct pci_dev *gpdev);
>>>  
>>>  #endif /* __POWERNV_PCI_H */
>>> diff --git a/arch/powerpc/platforms/powernv/eeh-powernv.c b/arch/powerpc/platforms/powernv/eeh-powernv.c
>>> index f38078976c5d..464b097d9635 100644
>>> --- a/arch/powerpc/platforms/powernv/eeh-powernv.c
>>> +++ b/arch/powerpc/platforms/powernv/eeh-powernv.c
>>> @@ -937,6 +937,7 @@ void pnv_pci_reset_secondary_bus(struct pci_dev *dev)
>>>  		pnv_eeh_bridge_reset(dev, EEH_RESET_HOT);
>>>  		pnv_eeh_bridge_reset(dev, EEH_RESET_DEACTIVATE);
>>>  	}
>>> +	pnv_try_isolate_nvidia_v100(dev);
>>>  }
>>>  
>>>  static void pnv_eeh_wait_for_pending(struct pci_dn *pdn, const char *type,
>>> diff --git a/arch/powerpc/platforms/powernv/npu-dma.c b/arch/powerpc/platforms/powernv/npu-dma.c
>>> index dc23d9d2a7d9..d4f9ee6222b5 100644
>>> --- a/arch/powerpc/platforms/powernv/npu-dma.c
>>> +++ b/arch/powerpc/platforms/powernv/npu-dma.c
>>> @@ -22,6 +22,23 @@
>>>  
>>>  #include "pci.h"
>>>  
>>> +static bool isolate_nvlink;
>>> +
>>> +static int __init parse_isolate_nvlink(char *p)
>>> +{
>>> +	bool val;
>>> +
>>> +	if (!p)
>>> +		val = true;
>>> +	else if (kstrtobool(p, &val))
>>> +		return -EINVAL;
>>> +
>>> +	isolate_nvlink = val;
>>> +
>>> +	return 0;
>>> +}
>>> +early_param("isolate_nvlink", parse_isolate_nvlink);
>>> +
>>>  /*
>>>   * spinlock to protect initialisation of an npu_context for a particular
>>>   * mm_struct.
>>> @@ -549,7 +566,7 @@ struct iommu_table_group *pnv_try_setup_npu_table_group(struct pnv_ioda_pe *pe)
>>>  
>>>  	hose = pci_bus_to_host(npdev->bus);
>>>  
>>> -	if (hose->npu) {
>>> +	if (hose->npu && !isolate_nvlink) {
>>>  		table_group = &hose->npu->npucomp.table_group;
>>>  
>>>  		if (!table_group->group) {
>>> @@ -559,7 +576,10 @@ struct iommu_table_group *pnv_try_setup_npu_table_group(struct pnv_ioda_pe *pe)
>>>  					pe->pe_number);
>>>  		}
>>>  	} else {
>>> -		/* Create a group for 1 GPU and attached NPUs for POWER8 */
>>> +		/*
>>> +		 * Create a group for 1 GPU and attached NPUs for
>>> +		 * POWER8 (always) or POWER9 (when isolate_nvlink).
>>> +		 */
>>>  		pe->npucomp = kzalloc(sizeof(*pe->npucomp), GFP_KERNEL);
>>>  		table_group = &pe->npucomp->table_group;
>>>  		table_group->ops = &pnv_npu_peers_ops;
>>> diff --git a/arch/powerpc/platforms/powernv/nvlinkgpu.c b/arch/powerpc/platforms/powernv/nvlinkgpu.c
>>> new file mode 100644
>>> index 000000000000..2a97cb15b6d0
>>> --- /dev/null
>>> +++ b/arch/powerpc/platforms/powernv/nvlinkgpu.c
>>> @@ -0,0 +1,137 @@
>>> +// SPDX-License-Identifier: GPL-2.0+
>>> +/*
>>> + * A helper to disable NVLinks between GPUs on IBM Withersponn platform.
>>> + *
>>> + * Copyright (C) 2019 IBM Corp.  All rights reserved.
>>> + *     Author: Alexey Kardashevskiy <aik@ozlabs.ru>
>>> + *
>>> + * This program is free software; you can redistribute it and/or modify
>>> + * it under the terms of the GNU General Public License version 2 as
>>> + * published by the Free Software Foundation.
>>> + */
>>> +
>>> +#include <linux/module.h>
>>> +#include <linux/device.h>
>>> +#include <linux/of.h>
>>> +#include <linux/iommu.h>
>>> +#include <linux/pci.h>
>>> +
>>> +static int nvlinkgpu_is_ph_in_group(struct device *dev, void *data)
>>> +{
>>> +	return dev->of_node->phandle == *(phandle *) data;
>>> +}
>>> +
>>> +static u32 nvlinkgpu_get_disable_mask(struct device *dev)
>>> +{
>>> +	int npu, peer;
>>> +	u32 mask;
>>> +	struct device_node *dn;
>>> +	struct iommu_group *group;
>>> +
>>> +	dn = dev->of_node;
>>> +	if (!of_find_property(dn, "ibm,nvlink-peers", NULL))
>>> +		return 0;
>>> +
>>> +	group = iommu_group_get(dev);
>>> +	if (!group)
>>> +		return 0;
>>> +
>>> +	/*
>>> +	 * Collect links to keep which includes links to NPU and links to
>>> +	 * other GPUs in the same IOMMU group.
>>> +	 */
>>> +	for (npu = 0, mask = 0; ; ++npu) {
>>> +		u32 npuph = 0;
>>> +
>>> +		if (of_property_read_u32_index(dn, "ibm,npu", npu, &npuph))
>>> +			break;
>>> +
>>> +		for (peer = 0; ; ++peer) {
>>> +			u32 peerph = 0;
>>> +
>>> +			if (of_property_read_u32_index(dn, "ibm,nvlink-peers",
>>> +					peer, &peerph))
>>> +				break;
>>> +
>>> +			if (peerph != npuph &&
>>> +				!iommu_group_for_each_dev(group, &peerph,
>>> +					nvlinkgpu_is_ph_in_group))
>>> +				continue;
>>> +
>>> +			mask |= 1 << (peer + 16);
>>> +		}
>>> +	}
>>> +	iommu_group_put(group);
>>> +
>>> +	/* Disabling mechanism takes links to disable so invert it here */
>>> +	mask = ~mask & 0x3F0000;
>>> +
>>> +	return mask;
>>> +}
>>> +
>>> +void pnv_try_isolate_nvidia_v100(struct pci_dev *bridge)
>>> +{
>>> +	u32 mask, val;
>>> +	void __iomem *bar0_0, *bar0_120000, *bar0_a00000;
>>> +	struct pci_dev *pdev;
>>> +	u16 cmd = 0, cmdmask = PCI_COMMAND_MEMORY;
>>> +
>>> +	if (!bridge->subordinate)
>>> +		return;
>>> +
>>> +	pdev = list_first_entry_or_null(&bridge->subordinate->devices,
>>> +			struct pci_dev, bus_list);
>>> +	if (!pdev)
>>> +		return;
>>> +
>>> +	if (pdev->vendor != PCI_VENDOR_ID_NVIDIA)
>>> +		return;
>>> +
>>> +	mask = nvlinkgpu_get_disable_mask(&pdev->dev);
>>> +	if (!mask)
>>> +		return;
>>> +
>>> +	bar0_0 = pci_iomap_range(pdev, 0, 0, 0x10000);
>>> +	if (!bar0_0) {
>>> +		pci_err(pdev, "Error mapping BAR0 @0\n");
>>> +		return;
>>> +	}
>>> +	bar0_120000 = pci_iomap_range(pdev, 0, 0x120000, 0x10000);
>>> +	if (!bar0_120000) {
>>> +		pci_err(pdev, "Error mapping BAR0 @120000\n");
>>> +		goto bar0_0_unmap;
>>> +	}
>>> +	bar0_a00000 = pci_iomap_range(pdev, 0, 0xA00000, 0x10000);
>>> +	if (!bar0_a00000) {
>>> +		pci_err(pdev, "Error mapping BAR0 @A00000\n");
>>> +		goto bar0_120000_unmap;
>>> +	}
>>
>> Is it really necessary to do three separate ioremaps vs one that would
>> cover them all here?  I suspect you're just sneaking in PAGE_SIZE with
>> the 0x10000 size mappings anyway.  Seems like it would simplify setup,
>> error reporting, and cleanup to to ioremap to the PAGE_ALIGN'd range
>> of the highest register accessed. Thanks,
> 
> 
> Sure I can map it once, I just do not see the point in mapping/unmapping
> all 0xa10000>>16=161 system pages for a very short period of time while
> we know precisely that we need just 3 pages.
> 
> Repost?

Ping?

Can this go in as it is (i.e. should I ping Michael) or this needs
another round? It would be nice to get some formal acks. Thanks,



> 
> 
> 
>>
>> Alex
>>
>>> +
>>> +	pci_restore_state(pdev);
>>> +	pci_read_config_word(pdev, PCI_COMMAND, &cmd);
>>> +	if ((cmd & cmdmask) != cmdmask)
>>> +		pci_write_config_word(pdev, PCI_COMMAND, cmd | cmdmask);
>>> +
>>> +	/*
>>> +	 * The sequence is from "Tesla P100 and V100 SXM2 NVLink Isolation on
>>> +	 * Multi-Tenant Systems".
>>> +	 * The register names are not provided there either, hence raw values.
>>> +	 */
>>> +	iowrite32(0x4, bar0_120000 + 0x4C);
>>> +	iowrite32(0x2, bar0_120000 + 0x2204);
>>> +	val = ioread32(bar0_0 + 0x200);
>>> +	val |= 0x02000000;
>>> +	iowrite32(val, bar0_0 + 0x200);
>>> +	val = ioread32(bar0_a00000 + 0x148);
>>> +	val |= mask;
>>> +	iowrite32(val, bar0_a00000 + 0x148);
>>> +
>>> +	if ((cmd | cmdmask) != cmd)
>>> +		pci_write_config_word(pdev, PCI_COMMAND, cmd);
>>> +
>>> +	pci_iounmap(pdev, bar0_a00000);
>>> +bar0_120000_unmap:
>>> +	pci_iounmap(pdev, bar0_120000);
>>> +bar0_0_unmap:
>>> +	pci_iounmap(pdev, bar0_0);
>>> +}
>>
> 

-- 
Alexey

^ permalink raw reply

* Re: [PATCH stable v4.4 00/52] powerpc spectre backports for 4.4
From: Michael Ellerman @ 2019-04-29  6:26 UTC (permalink / raw)
  To: Greg KH; +Cc: npiggin, diana.craciun, linuxppc-dev, stable, msuchanek
In-Reply-To: <87o94qac1z.fsf@concordia.ellerman.id.au>

Michael Ellerman <mpe@ellerman.id.au> writes:
> Greg KH <gregkh@linuxfoundation.org> writes:
>> On Mon, Apr 22, 2019 at 12:19:45AM +1000, Michael Ellerman wrote:
>>> -----BEGIN PGP SIGNED MESSAGE-----
>>> Hash: SHA1
>>> 
>>> Hi Greg/Sasha,
>>> 
>>> Please queue up these powerpc patches for 4.4 if you have no objections.
>>
>> why?  Do you, or someone else, really care about spectre issues in 4.4?
>> Who is using ppc for 4.4 becides a specific enterprise distro (and they
>> don't seem to be pulling in my stable updates anyway...)?
>
> Someone asked for it, but TBH I can't remember who it was. I can chase
> it up if you like.

Yeah it was a request from one of the distros. They plan to take it once
it lands in 4.4 stable.

cheers

^ permalink raw reply

* Re: Machine Check Exceptions
From: Christophe Leroy @ 2019-04-29  6:10 UTC (permalink / raw)
  To: Rodriguez Quesada, Pablo; +Cc: linuxppc-dev@lists.ozlabs.org
In-Reply-To: <0CDD4071D6ACF54ABB9CF1A6D90375A809B91C51@ALA-MBD.corp.ad.wrs.com>

Hi Pablo,

I know nothing about mce-inject.

The driver I wrote that you are referring to is to handle the watchdog 
in e300 powerpc core. This is because the e300 gererates a machine check 
on expiry when the watchdog is configured in NMI mode.

Therefore, triggering the machine check is rather easy in that case, I 
just have to stop refreshing the watchdog.

Christophe

Le 25/04/2019 à 17:35, Rodriguez Quesada, Pablo a écrit :
> Hi Christopher,
> 
> I am trying to create a custom handler for MCE, but I don't have a way to trigger it (Or don't know how)
> 
> Therefore I looked at the mce-inject tool(**) and compile it for PPC but the path "/sys/devices/system/machine check/machinecheck0" doesn't exist unlike Intel architecture and the app fails. I want to fix it.
> 
> My question is: Do you know if there is a way to inject an MCE on PowerPC? Or can you guide me on how to start my research about it. I find it very difficult to search for PPC documentation. That is why I am writing to you, to get any tips for developing a mce-inject for PPC. And of course, I would be more than glad to contribute to the OpenSource community.
> 
> Also, how did you test your handler? Do you have an easy mechanism to trigger the exceptions?
> 
> Thank you,
> Pablo
> 
> (**) https://github.com/andikleen/mce-inject/
> 
> 
> 
> -----Original Message-----
> From: Christophe Leroy <christophe.leroy@c-s.fr>
> Sent: Wednesday, April 24, 2019 11:07 PM
> To: Rodriguez Quesada, Pablo <Pablo.Rodriguez-Quesada@windriver.com>
> Subject: Re: Machine Check Exceptions
> 
> Hi Pablo,
> 
> No problem
> 
> Christophe
> 
> 
> Le 24/04/2019 à 21:33, Rodriguez Quesada, Pablo a écrit :
>> Hi Cristopher,
>>
>> Hope you are doing good!
>>
>> I am learning about Machine Check Exceptions on PPC, and I found this
>> commit of yours:
>>
>> https://github.com/torvalds/linux/commit/0deae39cec6dab3a66794f3e9e83c
>> a4dc30080f1
>>
>> Would you mind if I ask you a couple of questions?
>>
>> Thank you,
>>
>> WR logo signiture <http://www.windriver.com/>
>>
>> 	
>>
>> *Pablo Rodriguez*, Intern, Wind River Costa Rica
>>

^ permalink raw reply

* Re: [PATCH] powerpc/powernv/npu: Fix reference leak
From: Alexey Kardashevskiy @ 2019-04-29  6:01 UTC (permalink / raw)
  To: Greg Kurz, linux-kernel; +Cc: linuxppc-dev, Alistair Popple
In-Reply-To: <155568805354.600470.13376593185688810607.stgit@bahia.lan>



On 20/04/2019 01:34, Greg Kurz wrote:
> Since 902bdc57451c, get_pci_dev() calls pci_get_domain_bus_and_slot(). This
> has the effect of incrementing the reference count of the PCI device, as
> explained in drivers/pci/search.c:
> 
>  * Given a PCI domain, bus, and slot/function number, the desired PCI
>  * device is located in the list of PCI devices. If the device is
>  * found, its reference count is increased and this function returns a
>  * pointer to its data structure.  The caller must decrement the
>  * reference count by calling pci_dev_put().  If no device is found,
>  * %NULL is returned.
> 
> Nothing was done to call pci_dev_put() and the reference count of GPU and
> NPU PCI devices rockets up.
> 
> A natural way to fix this would be to teach the callers about the change,
> so that they call pci_dev_put() when done with the pointer. This turns
> out to be quite intrusive, as it affects many paths in npu-dma.c,
> pci-ioda.c and vfio_pci_nvlink2.c.


afaict this referencing is only done to protect the current traverser
and what you've done is actually a natural way (and the generic
pci_get_dev_by_id() does exactly the same), although this looks a bit weird.


> Also, the issue appeared in 4.16 and
> some affected code got moved around since then: it would be problematic
> to backport the fix to stable releases.
> 
> All that code never cared for reference counting anyway. Call pci_dev_put()
> from get_pci_dev() to revert to the previous behavior.
>> Fixes: 902bdc57451c ("powerpc/powernv/idoa: Remove unnecessary pcidev
from pci_dn")
> Cc: stable@vger.kernel.org # v4.16
> Signed-off-by: Greg Kurz <groug@kaod.org>
> ---
>  arch/powerpc/platforms/powernv/npu-dma.c |   15 ++++++++++++++-
>  1 file changed, 14 insertions(+), 1 deletion(-)
> 
> diff --git a/arch/powerpc/platforms/powernv/npu-dma.c b/arch/powerpc/platforms/powernv/npu-dma.c
> index e713ade30087..d8f3647e8fb2 100644
> --- a/arch/powerpc/platforms/powernv/npu-dma.c
> +++ b/arch/powerpc/platforms/powernv/npu-dma.c
> @@ -31,9 +31,22 @@ static DEFINE_SPINLOCK(npu_context_lock);
>  static struct pci_dev *get_pci_dev(struct device_node *dn)
>  {
>  	struct pci_dn *pdn = PCI_DN(dn);
> +	struct pci_dev *pdev;
>  
> -	return pci_get_domain_bus_and_slot(pci_domain_nr(pdn->phb->bus),
> +	pdev = pci_get_domain_bus_and_slot(pci_domain_nr(pdn->phb->bus),
>  					   pdn->busno, pdn->devfn);
> +
> +	/*
> +	 * pci_get_domain_bus_and_slot() increased the reference count of
> +	 * the PCI device, but callers don't need that actually as the PE
> +	 * already holds a reference to the device.

Imho this would be just enough.

Anyway,

Reviewed-by: Alexey Kardashevskiy <aik@ozlabs.ru>


How did you find it? :)


> Since callers aren't
> +	 * aware of the reference count change, call pci_dev_put() now to
> +	 * avoid leaks.
> +	 */
> +	if (pdev)
> +		pci_dev_put(pdev);
> +
> +	return pdev;
>  }
>  
>  /* Given a NPU device get the associated PCI device. */
> 

-- 
Alexey

^ permalink raw reply

* Re: [PATCH v2 2/2] powerpc/perf: Add generic compat mode pmu driver
From: Christophe Leroy @ 2019-04-29  5:42 UTC (permalink / raw)
  To: Madhavan Srinivasan, mpe; +Cc: linuxppc-dev
In-Reply-To: <1556506368-29329-2-git-send-email-maddy@linux.vnet.ibm.com>



Le 29/04/2019 à 04:52, Madhavan Srinivasan a écrit :
> Most of the power processor generation performance monitoring
> unit (PMU) driver code is bundled in the kernel and one of those
> is enabled/registered based on the oprofile_cpu_type check at
> the boot.
> 
> But things get little tricky incase of "compat" mode boot.
> IBM POWER System Server based processors has a compactibility
> mode feature, which simpily put is, Nth generation processor
> (lets say POWER8) will act and appear in a mode consistent
> with an earlier generation (N-1) processor (that is POWER7).
> And in this "compat" mode boot, kernel modify the
> "oprofile_cpu_type" to be Nth generation (POWER8). If Nth
> generation pmu driver is bundled (POWER8), it gets registered.
> 
> Key dependency here is to have distro support for latest
> processor performance monitoring support. Patch here adds
> a generic "compat-mode" performance monitoring driver to
> be register in absence of powernv platform specific pmu driver.
> 
> Driver supports "cycles", "instruction" and "branch-miss" events.
> "0x100F0" used as event code for "cycles", "0x00002"
> used as event code for "instruction" events and "0x400F6"
> used as event code for "branch miss". These are architected events
> as part of ISA. New file called "generic-compat-pmu.c" is
> created to contain the driver specific code. And base raw event
> code format modeled on PPMU_ARCH_207S.
> 
> Signed-off-by: Madhavan Srinivasan <maddy@linux.vnet.ibm.com>
> ---
> Changelog v1:
> - Updated architected event opcodes
> - included branch miss with architected event opcode
> 
>   arch/powerpc/perf/Makefile             |   3 +-
>   arch/powerpc/perf/core-book3s.c        |   2 +-
>   arch/powerpc/perf/generic-compat-pmu.c | 245 +++++++++++++++++++++++++++++++++
>   arch/powerpc/perf/internal.h           |   1 +
>   4 files changed, 249 insertions(+), 2 deletions(-)
>   create mode 100644 arch/powerpc/perf/generic-compat-pmu.c
> 
> diff --git a/arch/powerpc/perf/Makefile b/arch/powerpc/perf/Makefile
> index ab26df5bacb9..c155dcbb8691 100644
> --- a/arch/powerpc/perf/Makefile
> +++ b/arch/powerpc/perf/Makefile
> @@ -5,7 +5,8 @@ obj-$(CONFIG_PERF_EVENTS)	+= callchain.o perf_regs.o
>   obj-$(CONFIG_PPC_PERF_CTRS)	+= core-book3s.o bhrb.o
>   obj64-$(CONFIG_PPC_PERF_CTRS)	+= ppc970-pmu.o power5-pmu.o \
>   				   power5+-pmu.o power6-pmu.o power7-pmu.o \
> -				   isa207-common.o power8-pmu.o power9-pmu.o
> +				   isa207-common.o power8-pmu.o power9-pmu.o \
> +				   generic-compat-pmu.o

Isn't that name a bit long ? What about compat-pmu instead ?

>   obj32-$(CONFIG_PPC_PERF_CTRS)	+= mpc7450-pmu.o
>   
>   obj-$(CONFIG_PPC_POWERNV)	+= imc-pmu.o
> diff --git a/arch/powerpc/perf/core-book3s.c b/arch/powerpc/perf/core-book3s.c
> index a96f9420139c..a66fb9c01c9e 100644
> --- a/arch/powerpc/perf/core-book3s.c
> +++ b/arch/powerpc/perf/core-book3s.c
> @@ -2318,7 +2318,7 @@ static int __init init_ppc64_pmu(void)
>   	else if (!init_ppc970_pmu())
>   		return 0;
>   	else
> -		return -ENODEV;
> +		return init_generic_compat_pmu();
>   }
>   early_initcall(init_ppc64_pmu);
>   #endif
> diff --git a/arch/powerpc/perf/generic-compat-pmu.c b/arch/powerpc/perf/generic-compat-pmu.c
> new file mode 100644
> index 000000000000..9c2d4bbc5c87
> --- /dev/null
> +++ b/arch/powerpc/perf/generic-compat-pmu.c
> @@ -0,0 +1,245 @@
> +/*
> + * Performance counter support.
> + *
> + * Copyright 2019 Madhavan Srinivasan, IBM Corporation.
> + *
> + * This program is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU General Public License
> + * as published by the Free Software Foundation; either version
> + * 2 of the License, or later version.

Shouldn't we use the new licence format for new files ? ie:

// SPDX-License-Identifier: GPL-2.0+

> + */
> +
> +#define pr_fmt(fmt)	"generic-compat-pmu: " fmt
> +
> +#include "isa207-common.h"
> +
> +/*
> + * Raw event encoding:
> + *
> + *        60        56        52        48        44        40        36        32
> + * | - - - - | - - - - | - - - - | - - - - | - - - - | - - - - | - - - - | - - - - |
> + *
> + *        28        24        20        16        12         8         4         0
> + * | - - - - | - - - - | - - - - | - - - - | - - - - | - - - - | - - - - | - - - - |
> + *                                 [ pmc ]   [unit ]   [ ]   m   [    pmcxsel    ]
> + *                                                     |     |
> + *                                                     |     *- mark
> + *                                                     |
> + *                                                     |
> + *                                                     *- combine
> + *
> + * Below uses IBM bit numbering.
> + *
> + * MMCR1[x:y] = unit    (PMCxUNIT)
> + * MMCR1[24]   = pmc1combine[0]
> + * MMCR1[25]   = pmc1combine[1]
> + * MMCR1[26]   = pmc2combine[0]
> + * MMCR1[27]   = pmc2combine[1]
> + * MMCR1[28]   = pmc3combine[0]
> + * MMCR1[29]   = pmc3combine[1]
> + * MMCR1[30]   = pmc4combine[0]
> + * MMCR1[31]   = pmc4combine[1]
> + *
> + */
> +
> +/*
> + * Some power9 event codes.
> + */
> +#define EVENT(_name, _code)	_name = _code,
> +
> +enum {
> +EVENT(PM_CYC,					0x100F0)
> +EVENT(PM_INST_CMPL,				0x00002)
> +EVENT(PM_BR_MPRED_CMPL,				0x400F6)
> +};
> +
> +#undef EVENT
> +
> +GENERIC_EVENT_ATTR(cpu-cycles,			PM_CYC);
> +GENERIC_EVENT_ATTR(instructions,		PM_INST_CMPL);
> +GENERIC_EVENT_ATTR(branch-misses,               PM_BR_MPRED_CMPL);
> +
> +static struct attribute *generic_compat_events_attr[] = {
> +	GENERIC_EVENT_PTR(PM_CYC),
> +	GENERIC_EVENT_PTR(PM_INST_CMPL),
> +	GENERIC_EVENT_PTR(PM_BR_MPRED_CMPL),
> +	NULL
> +};
> +
> +static struct attribute_group generic_compat_pmu_events_group = {
> +	.name = "events",
> +	.attrs = generic_compat_events_attr,
> +};
> +
> +PMU_FORMAT_ATTR(event,		"config:0-19");
> +PMU_FORMAT_ATTR(pmcxsel,	"config:0-7");
> +PMU_FORMAT_ATTR(mark,		"config:8");
> +PMU_FORMAT_ATTR(combine,	"config:10-11");
> +PMU_FORMAT_ATTR(unit,		"config:12-15");
> +PMU_FORMAT_ATTR(pmc,		"config:16-19");
> +
> +static struct attribute *generic_compat_pmu_format_attr[] = {
> +	&format_attr_event.attr,
> +	&format_attr_pmcxsel.attr,
> +	&format_attr_mark.attr,
> +	&format_attr_combine.attr,
> +	&format_attr_unit.attr,
> +	&format_attr_pmc.attr,
> +	NULL,
> +};
> +
> +static struct attribute_group generic_compat_pmu_format_group = {
> +	.name = "format",
> +	.attrs = generic_compat_pmu_format_attr,
> +};
> +
> +static const struct attribute_group *generic_compat_pmu_attr_groups[] = {
> +	&generic_compat_pmu_format_group,
> +	&generic_compat_pmu_events_group,
> +	NULL,
> +};
> +
> +static int compat_generic_events[] = {
> +	[PERF_COUNT_HW_CPU_CYCLES] =			PM_CYC,
> +	[PERF_COUNT_HW_INSTRUCTIONS] =			PM_INST_CMPL,
> +	[PERF_COUNT_HW_BRANCH_MISSES] =                 PM_BR_MPRED_CMPL,
> +};
> +
> +#define C(x)	PERF_COUNT_HW_CACHE_##x
> +
> +/*
> + * Table of generalized cache-related events.
> + * 0 means not supported, -1 means nonsensical, other values
> + * are event codes.
> + */
> +static int generic_compat_cache_events[C(MAX)][C(OP_MAX)][C(RESULT_MAX)] = {
> +	[ C(L1D) ] = {
> +		[ C(OP_READ) ] = {
> +			[ C(RESULT_ACCESS) ] = 0,
> +			[ C(RESULT_MISS)   ] = 0,
> +		},
> +		[ C(OP_WRITE) ] = {
> +			[ C(RESULT_ACCESS) ] = 0,
> +			[ C(RESULT_MISS)   ] = 0,
> +		},
> +		[ C(OP_PREFETCH) ] = {
> +			[ C(RESULT_ACCESS) ] = 0,
> +			[ C(RESULT_MISS)   ] = 0,
> +		},
> +	},
> +	[ C(L1I) ] = {
> +		[ C(OP_READ) ] = {
> +			[ C(RESULT_ACCESS) ] = 0,
> +			[ C(RESULT_MISS)   ] = 0,
> +		},
> +		[ C(OP_WRITE) ] = {
> +			[ C(RESULT_ACCESS) ] = 0,
> +			[ C(RESULT_MISS)   ] = -1,
> +		},
> +		[ C(OP_PREFETCH) ] = {
> +			[ C(RESULT_ACCESS) ] = 0,
> +			[ C(RESULT_MISS)   ] = 0,
> +		},
> +	},
> +	[ C(LL) ] = {
> +		[ C(OP_READ) ] = {
> +			[ C(RESULT_ACCESS) ] = 0,
> +			[ C(RESULT_MISS)   ] = 0,
> +		},
> +		[ C(OP_WRITE) ] = {
> +			[ C(RESULT_ACCESS) ] = 0,
> +			[ C(RESULT_MISS)   ] = 0,
> +		},
> +		[ C(OP_PREFETCH) ] = {
> +			[ C(RESULT_ACCESS) ] = 0,
> +			[ C(RESULT_MISS)   ] = 0,
> +		},
> +	},
> +	[ C(DTLB) ] = {
> +		[ C(OP_READ) ] = {
> +			[ C(RESULT_ACCESS) ] = 0,
> +			[ C(RESULT_MISS)   ] = 0,
> +		},
> +		[ C(OP_WRITE) ] = {
> +			[ C(RESULT_ACCESS) ] = -1,
> +			[ C(RESULT_MISS)   ] = -1,
> +		},
> +		[ C(OP_PREFETCH) ] = {
> +			[ C(RESULT_ACCESS) ] = -1,
> +			[ C(RESULT_MISS)   ] = -1,
> +		},
> +	},
> +	[ C(ITLB) ] = {
> +		[ C(OP_READ) ] = {
> +			[ C(RESULT_ACCESS) ] = 0,
> +			[ C(RESULT_MISS)   ] = 0,
> +		},
> +		[ C(OP_WRITE) ] = {
> +			[ C(RESULT_ACCESS) ] = -1,
> +			[ C(RESULT_MISS)   ] = -1,
> +		},
> +		[ C(OP_PREFETCH) ] = {
> +			[ C(RESULT_ACCESS) ] = -1,
> +			[ C(RESULT_MISS)   ] = -1,
> +		},
> +	},
> +	[ C(BPU) ] = {
> +		[ C(OP_READ) ] = {
> +			[ C(RESULT_ACCESS) ] = 0,
> +			[ C(RESULT_MISS)   ] = 0,
> +		},
> +		[ C(OP_WRITE) ] = {
> +			[ C(RESULT_ACCESS) ] = -1,
> +			[ C(RESULT_MISS)   ] = -1,
> +		},
> +		[ C(OP_PREFETCH) ] = {
> +			[ C(RESULT_ACCESS) ] = -1,
> +			[ C(RESULT_MISS)   ] = -1,
> +		},
> +	},
> +	[ C(NODE) ] = {
> +		[ C(OP_READ) ] = {
> +			[ C(RESULT_ACCESS) ] = -1,
> +			[ C(RESULT_MISS)   ] = -1,
> +		},
> +		[ C(OP_WRITE) ] = {
> +			[ C(RESULT_ACCESS) ] = -1,
> +			[ C(RESULT_MISS)   ] = -1,
> +		},
> +		[ C(OP_PREFETCH) ] = {
> +			[ C(RESULT_ACCESS) ] = -1,
> +			[ C(RESULT_MISS)   ] = -1,
> +		},
> +	},
> +};
> +
> +#undef C
> +
> +static struct power_pmu generic_compat_pmu = {
> +	.name			= "GENERIC_COMPAT",
> +	.n_counter		= MAX_PMU_COUNTERS,
> +	.add_fields		= ISA207_ADD_FIELDS,
> +	.test_adder		= ISA207_TEST_ADDER,
> +	.compute_mmcr		= isa207_compute_mmcr,
> +	.get_constraint		= isa207_get_constraint,
> +	.disable_pmc		= isa207_disable_pmc,
> +	.flags			= PPMU_HAS_SIER | PPMU_ARCH_207S,
> +	.n_generic		= ARRAY_SIZE(compat_generic_events),
> +	.generic_events		= compat_generic_events,
> +	.cache_events		= &generic_compat_cache_events,
> +	.attr_groups		= generic_compat_pmu_attr_groups,
> +};
> +
> +int init_generic_compat_pmu(void)
> +{
> +	int rc = 0;
> +
> +	rc = register_power_pmu(&generic_compat_pmu);
> +	if (rc)
> +		return rc;
> +
> +	/* Tell userspace that EBB is supported */
> +	cur_cpu_spec->cpu_user_features2 |= PPC_FEATURE2_EBB;
> +
> +	return 0;
> +}
> diff --git a/arch/powerpc/perf/internal.h b/arch/powerpc/perf/internal.h
> index e54d524d4283..185a40d1adff 100644
> --- a/arch/powerpc/perf/internal.h
> +++ b/arch/powerpc/perf/internal.h
> @@ -14,3 +14,4 @@ extern int init_power6_pmu(void);
>   extern int init_power7_pmu(void);
>   extern int init_power8_pmu(void);
>   extern int init_power9_pmu(void);
> +extern int init_generic_compat_pmu(void);

Don't use 'extern' keyword.

Christophe


^ permalink raw reply

* Re: [PATCH v2 1/2] powerpc/perf: init pmu from core-book3s
From: Christophe Leroy @ 2019-04-29  5:38 UTC (permalink / raw)
  To: Madhavan Srinivasan, mpe; +Cc: linuxppc-dev
In-Reply-To: <1556506368-29329-1-git-send-email-maddy@linux.vnet.ibm.com>



Le 29/04/2019 à 04:52, Madhavan Srinivasan a écrit :
> Currenty pmu driver file for each ppc64 generation processor
> has a __init call in itself. Refactor the code by moving the
> __init call to core-books.c. This also clean's up compat mode
> pmu driver registration.

Can you explain the advantage of doing so ?
For me it makes more sense to have independant drivers with their own 
init call.


> 
> Suggested-by: Michael Ellerman <mpe@ellerman.id.au>
> Signed-off-by: Madhavan Srinivasan <maddy@linux.vnet.ibm.com>
> ---
> Changelog v1:
> - Added "internal.h" file and moved the extern definitions to that file
> 
>   arch/powerpc/perf/core-book3s.c | 28 ++++++++++++++++++++++++++++
>   arch/powerpc/perf/internal.h    | 16 ++++++++++++++++
>   arch/powerpc/perf/power5+-pmu.c |  4 +---
>   arch/powerpc/perf/power5-pmu.c  |  4 +---
>   arch/powerpc/perf/power6-pmu.c  |  4 +---
>   arch/powerpc/perf/power7-pmu.c  |  4 +---
>   arch/powerpc/perf/power8-pmu.c  |  3 +--
>   arch/powerpc/perf/power9-pmu.c  |  3 +--
>   arch/powerpc/perf/ppc970-pmu.c  |  4 +---
>   9 files changed, 51 insertions(+), 19 deletions(-)
>   create mode 100644 arch/powerpc/perf/internal.h
> 
> diff --git a/arch/powerpc/perf/core-book3s.c b/arch/powerpc/perf/core-book3s.c
> index b0723002a396..a96f9420139c 100644
> --- a/arch/powerpc/perf/core-book3s.c
> +++ b/arch/powerpc/perf/core-book3s.c
> @@ -22,6 +22,10 @@
>   #include <asm/ptrace.h>
>   #include <asm/code-patching.h>
>   
> +#ifdef CONFIG_PPC64

Can we avoid that CONFIG_PPC64 ifdef ? Why isn't it compatible with PPC32 ?

> +#include "internal.h"
> +#endif
> +
>   #define BHRB_MAX_ENTRIES	32
>   #define BHRB_TARGET		0x0000000000000002
>   #define BHRB_PREDICTION		0x0000000000000001
> @@ -2294,3 +2298,27 @@ int register_power_pmu(struct power_pmu *pmu)
>   			  power_pmu_prepare_cpu, NULL);
>   	return 0;
>   }
> +
> +#ifdef CONFIG_PPC64

Same, why PPC64 ?

> +static int __init init_ppc64_pmu(void)
> +{
> +	/* run through all the pmu drivers one at a time */
> +	if (!init_power5_pmu())
> +		return 0;
> +	else if (!init_power5p_pmu())
> +		return 0;
> +	else if (!init_power6_pmu())
> +		return 0;
> +	else if (!init_power7_pmu())
> +		return 0;
> +	else if (!init_power8_pmu())
> +		return 0;
> +	else if (!init_power9_pmu())
> +		return 0;
> +	else if (!init_ppc970_pmu())
> +		return 0;
> +	else
> +		return -ENODEV;
> +}
> +early_initcall(init_ppc64_pmu);
> +#endif
> diff --git a/arch/powerpc/perf/internal.h b/arch/powerpc/perf/internal.h
> new file mode 100644
> index 000000000000..e54d524d4283
> --- /dev/null
> +++ b/arch/powerpc/perf/internal.h
> @@ -0,0 +1,16 @@
> +/*
> + * Copyright 2019 Madhavan Srinivasan, IBM Corporation.
> + *
> + * This program is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU General Public License
> + * as published by the Free Software Foundation; either version
> + * 2 of the License, or (at your option) any later version.
> + */
> +
> +extern int init_ppc970_pmu(void);
> +extern int init_power5_pmu(void);
> +extern int init_power5p_pmu(void);
> +extern int init_power6_pmu(void);
> +extern int init_power7_pmu(void);
> +extern int init_power8_pmu(void);
> +extern int init_power9_pmu(void);

'extern' keyword is pointless, please remove it (checkpatch --strict 
probably told it to you).


Christophe


> diff --git a/arch/powerpc/perf/power5+-pmu.c b/arch/powerpc/perf/power5+-pmu.c
> index 0526dac66007..9aa803504cb2 100644
> --- a/arch/powerpc/perf/power5+-pmu.c
> +++ b/arch/powerpc/perf/power5+-pmu.c
> @@ -677,7 +677,7 @@ static struct power_pmu power5p_pmu = {
>   	.cache_events		= &power5p_cache_events,
>   };
>   
> -static int __init init_power5p_pmu(void)
> +int init_power5p_pmu(void)
>   {
>   	if (!cur_cpu_spec->oprofile_cpu_type ||
>   	    (strcmp(cur_cpu_spec->oprofile_cpu_type, "ppc64/power5+")
> @@ -686,5 +686,3 @@ static int __init init_power5p_pmu(void)
>   
>   	return register_power_pmu(&power5p_pmu);
>   }
> -
> -early_initcall(init_power5p_pmu);
> diff --git a/arch/powerpc/perf/power5-pmu.c b/arch/powerpc/perf/power5-pmu.c
> index 4dc99f9f7962..30cb13d081a9 100644
> --- a/arch/powerpc/perf/power5-pmu.c
> +++ b/arch/powerpc/perf/power5-pmu.c
> @@ -618,7 +618,7 @@ static struct power_pmu power5_pmu = {
>   	.flags			= PPMU_HAS_SSLOT,
>   };
>   
> -static int __init init_power5_pmu(void)
> +int init_power5_pmu(void)
>   {
>   	if (!cur_cpu_spec->oprofile_cpu_type ||
>   	    strcmp(cur_cpu_spec->oprofile_cpu_type, "ppc64/power5"))
> @@ -626,5 +626,3 @@ static int __init init_power5_pmu(void)
>   
>   	return register_power_pmu(&power5_pmu);
>   }
> -
> -early_initcall(init_power5_pmu);
> diff --git a/arch/powerpc/perf/power6-pmu.c b/arch/powerpc/perf/power6-pmu.c
> index 9c9d646b68a1..80ec48632cfe 100644
> --- a/arch/powerpc/perf/power6-pmu.c
> +++ b/arch/powerpc/perf/power6-pmu.c
> @@ -540,7 +540,7 @@ static struct power_pmu power6_pmu = {
>   	.cache_events		= &power6_cache_events,
>   };
>   
> -static int __init init_power6_pmu(void)
> +int init_power6_pmu(void)
>   {
>   	if (!cur_cpu_spec->oprofile_cpu_type ||
>   	    strcmp(cur_cpu_spec->oprofile_cpu_type, "ppc64/power6"))
> @@ -548,5 +548,3 @@ static int __init init_power6_pmu(void)
>   
>   	return register_power_pmu(&power6_pmu);
>   }
> -
> -early_initcall(init_power6_pmu);
> diff --git a/arch/powerpc/perf/power7-pmu.c b/arch/powerpc/perf/power7-pmu.c
> index 6dbae9884ec4..bb6efd5d2530 100644
> --- a/arch/powerpc/perf/power7-pmu.c
> +++ b/arch/powerpc/perf/power7-pmu.c
> @@ -445,7 +445,7 @@ static struct power_pmu power7_pmu = {
>   	.cache_events		= &power7_cache_events,
>   };
>   
> -static int __init init_power7_pmu(void)
> +int init_power7_pmu(void)
>   {
>   	if (!cur_cpu_spec->oprofile_cpu_type ||
>   	    strcmp(cur_cpu_spec->oprofile_cpu_type, "ppc64/power7"))
> @@ -456,5 +456,3 @@ static int __init init_power7_pmu(void)
>   
>   	return register_power_pmu(&power7_pmu);
>   }
> -
> -early_initcall(init_power7_pmu);
> diff --git a/arch/powerpc/perf/power8-pmu.c b/arch/powerpc/perf/power8-pmu.c
> index d12a2db26353..bcc3409a06de 100644
> --- a/arch/powerpc/perf/power8-pmu.c
> +++ b/arch/powerpc/perf/power8-pmu.c
> @@ -379,7 +379,7 @@ static struct power_pmu power8_pmu = {
>   	.bhrb_nr		= 32,
>   };
>   
> -static int __init init_power8_pmu(void)
> +int init_power8_pmu(void)
>   {
>   	int rc;
>   
> @@ -399,4 +399,3 @@ static int __init init_power8_pmu(void)
>   
>   	return 0;
>   }
> -early_initcall(init_power8_pmu);
> diff --git a/arch/powerpc/perf/power9-pmu.c b/arch/powerpc/perf/power9-pmu.c
> index 030544e35959..3a31ac6f4805 100644
> --- a/arch/powerpc/perf/power9-pmu.c
> +++ b/arch/powerpc/perf/power9-pmu.c
> @@ -437,7 +437,7 @@ static struct power_pmu power9_pmu = {
>   	.bhrb_nr		= 32,
>   };
>   
> -static int __init init_power9_pmu(void)
> +int init_power9_pmu(void)
>   {
>   	int rc = 0;
>   	unsigned int pvr = mfspr(SPRN_PVR);
> @@ -467,4 +467,3 @@ static int __init init_power9_pmu(void)
>   
>   	return 0;
>   }
> -early_initcall(init_power9_pmu);
> diff --git a/arch/powerpc/perf/ppc970-pmu.c b/arch/powerpc/perf/ppc970-pmu.c
> index 8b6a8a36fa38..1d3370914022 100644
> --- a/arch/powerpc/perf/ppc970-pmu.c
> +++ b/arch/powerpc/perf/ppc970-pmu.c
> @@ -490,7 +490,7 @@ static struct power_pmu ppc970_pmu = {
>   	.flags			= PPMU_NO_SIPR | PPMU_NO_CONT_SAMPLING,
>   };
>   
> -static int __init init_ppc970_pmu(void)
> +int init_ppc970_pmu(void)
>   {
>   	if (!cur_cpu_spec->oprofile_cpu_type ||
>   	    (strcmp(cur_cpu_spec->oprofile_cpu_type, "ppc64/970")
> @@ -499,5 +499,3 @@ static int __init init_ppc970_pmu(void)
>   
>   	return register_power_pmu(&ppc970_pmu);
>   }
> -
> -early_initcall(init_ppc970_pmu);
> 

^ permalink raw reply


This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox