1
Handful of arm fixes for the rc.
1
v2: drop npcm7xx sdhci tests: new tests assert on some platforms.
2
2
3
The following changes since commit 555249a59e9cdd6b58da103aba5cf3a2d45c899f:
3
-- PMM
4
4
5
Merge remote-tracking branch 'remotes/ehabkost-gl/tags/x86-next-pull-request' into staging (2021-04-10 16:58:56 +0100)
5
The following changes since commit e670f6d825d4dee248b311197fd4048469d6772b:
6
7
Merge remote-tracking branch 'remotes/legoater/tags/pull-ppc-20220218' into staging (2022-02-20 15:05:41 +0000)
6
8
7
are available in the Git repository at:
9
are available in the Git repository at:
8
10
9
https://git.linaro.org/people/pmaydell/qemu-arm.git tags/pull-target-arm-20210412
11
https://git.linaro.org/people/pmaydell/qemu-arm.git tags/pull-target-arm-20220221-1
10
12
11
for you to fetch changes up to 52c01ada86611136e3122dd139788dbcbc292d86:
13
for you to fetch changes up to ca511604925eef8572e22ecbf0d3c758d7277924:
12
14
13
exec: Fix overlap of PAGE_ANON and PAGE_TARGET_1 (2021-04-12 11:06:24 +0100)
15
ui/cocoa: Fix the leak of qemu_console_get_label (2022-02-21 13:30:21 +0000)
14
16
15
----------------------------------------------------------------
17
----------------------------------------------------------------
16
target-arm queue:
18
arm, cocoa and misc:
17
* hw/arm/virt-acpi-build: Fix GSIV values of the {GERR, Sync} interrupts
19
* MAINTAINERS file updates
18
* hw/arm/smmuv3: Emulate CFGI_STE_RANGE for an aligned range of StreamIDs
20
* Mark remaining global TypeInfo instances as const
19
* accel/tcg: Preserve PAGE_ANON when changing page permissions
21
* checkpatch: Ensure that TypeInfos are const
20
* target/arm: Check PAGE_WRITE_ORG for MTE writeability
22
* arm hvf: Handle unknown ID registers as RES0
21
* exec: Fix overlap of PAGE_ANON and PAGE_TARGET_1
23
* Make KVM -cpu max exactly like -cpu host
24
* Fix '-cpu max' for HVF
25
* Support PAuth extension for hvf
26
* Kconfig: Add I2C_DEVICES device group
27
* Kconfig: Add 'imply I2C_DEVICES' on boards with available i2c bus
28
* hw/arm/armv7m: Handle disconnected clock inputs
29
* osdep.h: pull out various things into new header files
30
* hw/timer: fix a9gtimer vmstate
31
* hw/arm: add initial mori-bmc board
32
* ui/cocoa: Remove allowedFileTypes restriction in SavePanel
33
* ui/cocoa: Do not alert even without block devices
34
* ui/cocoa: Fix the leak of qemu_console_get_label
22
35
23
----------------------------------------------------------------
36
----------------------------------------------------------------
24
Richard Henderson (3):
37
Akihiko Odaki (3):
25
accel/tcg: Preserve PAGE_ANON when changing page permissions
38
MAINTAINERS: Add Akihiko Odaki to macOS-relateds
26
target/arm: Check PAGE_WRITE_ORG for MTE writeability
39
ui/cocoa: Do not alert even without block devices
27
exec: Fix overlap of PAGE_ANON and PAGE_TARGET_1
40
ui/cocoa: Fix the leak of qemu_console_get_label
28
41
29
Zenghui Yu (2):
42
Alexander Graf (2):
30
hw/arm/virt-acpi-build: Fix GSIV values of the {GERR, Sync} interrupts
43
hvf: arm: Use macros for sysreg shift/masking
31
hw/arm/smmuv3: Emulate CFGI_STE_RANGE for an aligned range of StreamIDs
44
hvf: arm: Handle unknown ID registers as RES0
32
45
33
include/exec/cpu-all.h | 4 ++--
46
Ani Sinha (1):
34
tests/tcg/aarch64/mte.h | 3 ++-
47
MAINTAINERS: Adding myself as a reviewer of some components
35
accel/tcg/translate-all.c | 9 ++++++--
36
hw/arm/smmuv3.c | 12 +++++++----
37
hw/arm/virt-acpi-build.c | 4 ++--
38
target/arm/mte_helper.c | 2 +-
39
tests/tcg/aarch64/mte-6.c | 43 +++++++++++++++++++++++++++++++++++++++
40
tests/tcg/aarch64/Makefile.target | 2 +-
41
8 files changed, 66 insertions(+), 13 deletions(-)
42
create mode 100644 tests/tcg/aarch64/mte-6.c
43
48
49
Bernhard Beschow (2):
50
Mark remaining global TypeInfo instances as const
51
checkpatch: Ensure that TypeInfos are const
52
53
Patrick Venture (1):
54
hw/arm: add initial mori-bmc board
55
56
Pavel Dovgalyuk (1):
57
hw/timer: fix a9gtimer vmstate
58
59
Peter Maydell (14):
60
target/arm: Move '-cpu host' code to cpu64.c
61
target/arm: Use aarch64_cpu_register() for 'host' CPU type
62
target/arm: Make KVM -cpu max exactly like -cpu host
63
target/arm: Unindent unnecessary else-clause
64
target/arm: Fix '-cpu max' for HVF
65
target/arm: Support PAuth extension for hvf
66
Kconfig: Add I2C_DEVICES device group
67
Kconfig: Add 'imply I2C_DEVICES' on boards with available i2c bus
68
hw/arm/armv7m: Handle disconnected clock inputs
69
include: Move qemu_madvise() and related #defines to new qemu/madvise.h
70
include: Move qemu_mprotect_*() to new qemu/mprotect.h
71
include: Move QEMU_MAP_* constants to mmap-alloc.h
72
include: Move qemu_[id]cache_* declarations to new qemu/cacheinfo.h
73
include: Move hardware version declarations to new qemu/hw-version.h
74
75
Philippe Mathieu-Daudé (1):
76
ui/cocoa: Remove allowedFileTypes restriction in SavePanel
77
78
docs/devel/kconfig.rst | 8 +-
79
docs/system/arm/nuvoton.rst | 1 +
80
include/qemu/cacheinfo.h | 21 +++
81
include/qemu/hw-version.h | 27 ++++
82
include/qemu/madvise.h | 95 +++++++++++++
83
include/qemu/mmap-alloc.h | 23 +++
84
include/qemu/mprotect.h | 14 ++
85
include/qemu/osdep.h | 132 ------------------
86
accel/tcg/translate-all.c | 1 +
87
backends/hostmem-file.c | 1 +
88
backends/hostmem.c | 1 +
89
hw/arm/armv7m.c | 26 +++-
90
hw/arm/npcm7xx_boards.c | 32 +++++
91
hw/arm/nseries.c | 1 +
92
hw/core/generic-loader.c | 2 +-
93
hw/core/guest-loader.c | 2 +-
94
hw/display/bcm2835_fb.c | 2 +-
95
hw/display/i2c-ddc.c | 2 +-
96
hw/display/macfb.c | 4 +-
97
hw/display/virtio-vga.c | 2 +-
98
hw/dma/bcm2835_dma.c | 2 +-
99
hw/i386/pc_piix.c | 2 +-
100
hw/i386/sgx-epc.c | 2 +-
101
hw/ide/core.c | 1 +
102
hw/intc/bcm2835_ic.c | 2 +-
103
hw/intc/bcm2836_control.c | 2 +-
104
hw/ipmi/ipmi.c | 4 +-
105
hw/mem/nvdimm.c | 2 +-
106
hw/mem/pc-dimm.c | 2 +-
107
hw/misc/bcm2835_mbox.c | 2 +-
108
hw/misc/bcm2835_powermgt.c | 2 +-
109
hw/misc/bcm2835_property.c | 2 +-
110
hw/misc/bcm2835_rng.c | 2 +-
111
hw/misc/pvpanic-isa.c | 2 +-
112
hw/misc/pvpanic-pci.c | 2 +-
113
hw/net/fsl_etsec/etsec.c | 2 +-
114
hw/ppc/prep_systemio.c | 2 +-
115
hw/ppc/spapr_iommu.c | 2 +-
116
hw/s390x/s390-pci-bus.c | 2 +-
117
hw/s390x/sclp.c | 2 +-
118
hw/s390x/tod-kvm.c | 2 +-
119
hw/s390x/tod-tcg.c | 2 +-
120
hw/s390x/tod.c | 2 +-
121
hw/scsi/lsi53c895a.c | 2 +-
122
hw/scsi/megasas.c | 1 +
123
hw/scsi/scsi-bus.c | 1 +
124
hw/scsi/scsi-disk.c | 1 +
125
hw/sd/allwinner-sdhost.c | 2 +-
126
hw/sd/aspeed_sdhci.c | 2 +-
127
hw/sd/bcm2835_sdhost.c | 2 +-
128
hw/sd/cadence_sdhci.c | 2 +-
129
hw/sd/npcm7xx_sdhci.c | 2 +-
130
hw/timer/a9gtimer.c | 21 +++
131
hw/usb/dev-mtp.c | 2 +-
132
hw/usb/host-libusb.c | 2 +-
133
hw/vfio/igd.c | 2 +-
134
hw/virtio/virtio-balloon.c | 1 +
135
hw/virtio/virtio-pmem.c | 2 +-
136
migration/postcopy-ram.c | 1 +
137
migration/qemu-file.c | 1 +
138
migration/ram.c | 1 +
139
plugins/loader.c | 1 +
140
qom/object.c | 4 +-
141
softmmu/physmem.c | 1 +
142
softmmu/vl.c | 1 +
143
target/arm/cpu.c | 30 ----
144
target/arm/cpu64.c | 331 ++++++++++++++++++++++++--------------------
145
target/arm/hvf/hvf.c | 83 ++++++++---
146
target/i386/cpu.c | 1 +
147
target/s390x/cpu_models.c | 1 +
148
tcg/region.c | 3 +
149
tcg/tcg.c | 1 +
150
util/atomic64.c | 1 +
151
util/cacheflush.c | 1 +
152
util/cacheinfo.c | 1 +
153
util/osdep.c | 3 +
154
util/oslib-posix.c | 1 +
155
MAINTAINERS | 5 +
156
hw/arm/Kconfig | 10 ++
157
hw/i2c/Kconfig | 5 +
158
hw/rtc/Kconfig | 2 +
159
hw/sensor/Kconfig | 5 +
160
scripts/checkpatch.pl | 1 +
161
ui/cocoa.m | 15 +-
162
84 files changed, 606 insertions(+), 393 deletions(-)
163
create mode 100644 include/qemu/cacheinfo.h
164
create mode 100644 include/qemu/hw-version.h
165
create mode 100644 include/qemu/madvise.h
166
create mode 100644 include/qemu/mprotect.h
167
diff view generated by jsdifflib
Deleted patch
1
From: Zenghui Yu <yuzenghui@huawei.com>
2
1
3
The GSIV values in SMMUv3 IORT node are not correct as they don't match
4
the SMMUIrq enumeration, which describes the IRQ<->PIN mapping used by
5
our emulated vSMMU.
6
7
Fixes: a703b4f6c1ee ("hw/arm/virt-acpi-build: Add smmuv3 node in IORT table")
8
Signed-off-by: Zenghui Yu <yuzenghui@huawei.com>
9
Acked-by: Eric Auger <eric.auger@redhat.com>
10
Message-id: 20210402084731.93-1-yuzenghui@huawei.com
11
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
12
---
13
hw/arm/virt-acpi-build.c | 4 ++--
14
1 file changed, 2 insertions(+), 2 deletions(-)
15
16
diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c
17
index XXXXXXX..XXXXXXX 100644
18
--- a/hw/arm/virt-acpi-build.c
19
+++ b/hw/arm/virt-acpi-build.c
20
@@ -XXX,XX +XXX,XX @@ build_iort(GArray *table_data, BIOSLinker *linker, VirtMachineState *vms)
21
smmu->flags = cpu_to_le32(ACPI_IORT_SMMU_V3_COHACC_OVERRIDE);
22
smmu->event_gsiv = cpu_to_le32(irq);
23
smmu->pri_gsiv = cpu_to_le32(irq + 1);
24
- smmu->gerr_gsiv = cpu_to_le32(irq + 2);
25
- smmu->sync_gsiv = cpu_to_le32(irq + 3);
26
+ smmu->sync_gsiv = cpu_to_le32(irq + 2);
27
+ smmu->gerr_gsiv = cpu_to_le32(irq + 3);
28
29
/* Identity RID mapping covering the whole input RID range */
30
idmap = &smmu->id_mapping_array[0];
31
--
32
2.20.1
33
34
diff view generated by jsdifflib
Deleted patch
1
From: Zenghui Yu <yuzenghui@huawei.com>
2
1
3
In emulation of the CFGI_STE_RANGE command, we now take StreamID as the
4
start of the invalidation range, regardless of whatever the Range is,
5
whilst the spec clearly states that
6
7
- "Invalidation is performed for an *aligned* range of 2^(Range+1)
8
StreamIDs."
9
10
- "The bottom Range+1 bits of the StreamID parameter are IGNORED,
11
aligning the range to its size."
12
13
Take CFGI_ALL (where Range == 31) as an example, if there are some random
14
bits in the StreamID field, we'll fail to perform the full invalidation but
15
get a strange range (e.g., SMMUSIDRange={.start=1, .end=0}) instead. Rework
16
the emulation a bit to get rid of the discrepancy with the spec.
17
18
Signed-off-by: Zenghui Yu <yuzenghui@huawei.com>
19
Acked-by: Eric Auger <eric.auger@redhat.com>
20
Message-id: 20210402100449.528-1-yuzenghui@huawei.com
21
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
22
---
23
hw/arm/smmuv3.c | 12 ++++++++----
24
1 file changed, 8 insertions(+), 4 deletions(-)
25
26
diff --git a/hw/arm/smmuv3.c b/hw/arm/smmuv3.c
27
index XXXXXXX..XXXXXXX 100644
28
--- a/hw/arm/smmuv3.c
29
+++ b/hw/arm/smmuv3.c
30
@@ -XXX,XX +XXX,XX @@ static int smmuv3_cmdq_consume(SMMUv3State *s)
31
}
32
case SMMU_CMD_CFGI_STE_RANGE: /* same as SMMU_CMD_CFGI_ALL */
33
{
34
- uint32_t start = CMD_SID(&cmd);
35
+ uint32_t sid = CMD_SID(&cmd), mask;
36
uint8_t range = CMD_STE_RANGE(&cmd);
37
- uint64_t end = start + (1ULL << (range + 1)) - 1;
38
- SMMUSIDRange sid_range = {start, end};
39
+ SMMUSIDRange sid_range;
40
41
if (CMD_SSEC(&cmd)) {
42
cmd_error = SMMU_CERROR_ILL;
43
break;
44
}
45
- trace_smmuv3_cmdq_cfgi_ste_range(start, end);
46
+
47
+ mask = (1ULL << (range + 1)) - 1;
48
+ sid_range.start = sid & ~mask;
49
+ sid_range.end = sid_range.start + mask;
50
+
51
+ trace_smmuv3_cmdq_cfgi_ste_range(sid_range.start, sid_range.end);
52
g_hash_table_foreach_remove(bs->configs, smmuv3_invalidate_ste,
53
&sid_range);
54
break;
55
--
56
2.20.1
57
58
diff view generated by jsdifflib
Deleted patch
1
From: Richard Henderson <richard.henderson@linaro.org>
2
1
3
Using mprotect() to change PROT_* does not change the MAP_ANON
4
previously set with mmap(). Our linux-user version of MTE only
5
works with MAP_ANON pages, so losing PAGE_ANON caused MTE to
6
stop working.
7
8
Reported-by: Stephen Long <steplong@quicinc.com>
9
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
10
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
11
Tested-by: Alex Bennée <alex.bennee@linaro.org>
12
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
13
---
14
tests/tcg/aarch64/mte.h | 3 ++-
15
accel/tcg/translate-all.c | 9 +++++--
16
tests/tcg/aarch64/mte-6.c | 43 +++++++++++++++++++++++++++++++
17
tests/tcg/aarch64/Makefile.target | 2 +-
18
4 files changed, 53 insertions(+), 4 deletions(-)
19
create mode 100644 tests/tcg/aarch64/mte-6.c
20
21
diff --git a/tests/tcg/aarch64/mte.h b/tests/tcg/aarch64/mte.h
22
index XXXXXXX..XXXXXXX 100644
23
--- a/tests/tcg/aarch64/mte.h
24
+++ b/tests/tcg/aarch64/mte.h
25
@@ -XXX,XX +XXX,XX @@ static void enable_mte(int tcf)
26
}
27
}
28
29
-static void *alloc_mte_mem(size_t size)
30
+static void * alloc_mte_mem(size_t size) __attribute__((unused));
31
+static void * alloc_mte_mem(size_t size)
32
{
33
void *p = mmap(NULL, size, PROT_READ | PROT_WRITE | PROT_MTE,
34
MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
35
diff --git a/accel/tcg/translate-all.c b/accel/tcg/translate-all.c
36
index XXXXXXX..XXXXXXX 100644
37
--- a/accel/tcg/translate-all.c
38
+++ b/accel/tcg/translate-all.c
39
@@ -XXX,XX +XXX,XX @@ void page_set_flags(target_ulong start, target_ulong end, int flags)
40
a missing call to h2g_valid. */
41
assert(end - 1 <= GUEST_ADDR_MAX);
42
assert(start < end);
43
+ /* Only set PAGE_ANON with new mappings. */
44
+ assert(!(flags & PAGE_ANON) || (flags & PAGE_RESET));
45
assert_memory_lock();
46
47
start = start & TARGET_PAGE_MASK;
48
@@ -XXX,XX +XXX,XX @@ void page_set_flags(target_ulong start, target_ulong end, int flags)
49
p->first_tb) {
50
tb_invalidate_phys_page(addr, 0);
51
}
52
- if (reset_target_data && p->target_data) {
53
+ if (reset_target_data) {
54
g_free(p->target_data);
55
p->target_data = NULL;
56
+ p->flags = flags;
57
+ } else {
58
+ /* Using mprotect on a page does not change MAP_ANON. */
59
+ p->flags = (p->flags & PAGE_ANON) | flags;
60
}
61
- p->flags = flags;
62
}
63
}
64
65
diff --git a/tests/tcg/aarch64/mte-6.c b/tests/tcg/aarch64/mte-6.c
66
new file mode 100644
67
index XXXXXXX..XXXXXXX
68
--- /dev/null
69
+++ b/tests/tcg/aarch64/mte-6.c
70
@@ -XXX,XX +XXX,XX @@
71
+#include "mte.h"
72
+
73
+void pass(int sig, siginfo_t *info, void *uc)
74
+{
75
+ assert(info->si_code == SEGV_MTESERR);
76
+ exit(0);
77
+}
78
+
79
+int main(void)
80
+{
81
+ enable_mte(PR_MTE_TCF_SYNC);
82
+
83
+ void *brk = sbrk(16);
84
+ if (brk == (void *)-1) {
85
+ perror("sbrk");
86
+ return 2;
87
+ }
88
+
89
+ if (mprotect(brk, 16, PROT_READ | PROT_WRITE | PROT_MTE)) {
90
+ perror("mprotect");
91
+ return 2;
92
+ }
93
+
94
+ int *p1, *p2;
95
+ long excl = 1;
96
+
97
+ asm("irg %0,%1,%2" : "=r"(p1) : "r"(brk), "r"(excl));
98
+ asm("gmi %0,%1,%0" : "+r"(excl) : "r"(p1));
99
+ asm("irg %0,%1,%2" : "=r"(p2) : "r"(brk), "r"(excl));
100
+ asm("stg %0,[%0]" : : "r"(p1));
101
+
102
+ *p1 = 0;
103
+
104
+ struct sigaction sa;
105
+ memset(&sa, 0, sizeof(sa));
106
+ sa.sa_sigaction = pass;
107
+ sa.sa_flags = SA_SIGINFO;
108
+ sigaction(SIGSEGV, &sa, NULL);
109
+
110
+ *p2 = 0;
111
+
112
+ abort();
113
+}
114
diff --git a/tests/tcg/aarch64/Makefile.target b/tests/tcg/aarch64/Makefile.target
115
index XXXXXXX..XXXXXXX 100644
116
--- a/tests/tcg/aarch64/Makefile.target
117
+++ b/tests/tcg/aarch64/Makefile.target
118
@@ -XXX,XX +XXX,XX @@ AARCH64_TESTS += bti-2
119
120
# MTE Tests
121
ifneq ($(DOCKER_IMAGE)$(CROSS_CC_HAS_ARMV8_MTE),)
122
-AARCH64_TESTS += mte-1 mte-2 mte-3 mte-4
123
+AARCH64_TESTS += mte-1 mte-2 mte-3 mte-4 mte-6
124
mte-%: CFLAGS += -march=armv8.5-a+memtag
125
endif
126
127
--
128
2.20.1
129
130
diff view generated by jsdifflib
Deleted patch
1
From: Richard Henderson <richard.henderson@linaro.org>
2
1
3
We can remove PAGE_WRITE when (internally) marking a page
4
read-only because it contains translated code.
5
6
This can be triggered by tests/tcg/aarch64/bti-2, after
7
having serviced SIGILL trampolines on the stack.
8
9
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
10
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
11
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
12
---
13
target/arm/mte_helper.c | 2 +-
14
1 file changed, 1 insertion(+), 1 deletion(-)
15
16
diff --git a/target/arm/mte_helper.c b/target/arm/mte_helper.c
17
index XXXXXXX..XXXXXXX 100644
18
--- a/target/arm/mte_helper.c
19
+++ b/target/arm/mte_helper.c
20
@@ -XXX,XX +XXX,XX @@ static uint8_t *allocation_tag_mem(CPUARMState *env, int ptr_mmu_idx,
21
uint8_t *tags;
22
uintptr_t index;
23
24
- if (!(flags & (ptr_access == MMU_DATA_STORE ? PAGE_WRITE : PAGE_READ))) {
25
+ if (!(flags & (ptr_access == MMU_DATA_STORE ? PAGE_WRITE_ORG : PAGE_READ))) {
26
/* SIGSEGV */
27
arm_cpu_tlb_fill(env_cpu(env), ptr, ptr_size, ptr_access,
28
ptr_mmu_idx, false, ra);
29
--
30
2.20.1
31
32
diff view generated by jsdifflib
Deleted patch
1
From: Richard Henderson <richard.henderson@linaro.org>
2
1
3
Unfortuately, the elements of PAGE_* were not in numerical
4
order and so PAGE_ANON was added to an "unused" bit.
5
As an arbitrary choice, move PAGE_TARGET_{1,2} together.
6
7
Cc: Laurent Vivier <laurent@vivier.eu>
8
Fixes: 26bab757d41b ("linux-user: Introduce PAGE_ANON")
9
Buglink: https://bugs.launchpad.net/bugs/1922617
10
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
11
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
12
Reviewed-by: Laurent Vivier <laurent@vivier.eu>
13
Tested-by: Laurent Vivier <laurent@vivier.eu>
14
Tested-by: Nathan Chancellor <nathan@kernel.org>
15
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
16
---
17
include/exec/cpu-all.h | 4 ++--
18
1 file changed, 2 insertions(+), 2 deletions(-)
19
20
diff --git a/include/exec/cpu-all.h b/include/exec/cpu-all.h
21
index XXXXXXX..XXXXXXX 100644
22
--- a/include/exec/cpu-all.h
23
+++ b/include/exec/cpu-all.h
24
@@ -XXX,XX +XXX,XX @@ extern intptr_t qemu_host_page_mask;
25
#define PAGE_RESERVED 0x0100
26
#endif
27
/* Target-specific bits that will be used via page_get_flags(). */
28
-#define PAGE_TARGET_1 0x0080
29
-#define PAGE_TARGET_2 0x0200
30
+#define PAGE_TARGET_1 0x0200
31
+#define PAGE_TARGET_2 0x0400
32
33
#if defined(CONFIG_USER_ONLY)
34
void page_dump(FILE *f);
35
--
36
2.20.1
37
38
diff view generated by jsdifflib