* 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
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox